From e023f75254bd282c643e9a55afaa0d4994eee6e7 Mon Sep 17 00:00:00 2001 From: Geoff Romer Date: Fri, 12 Jun 2026 17:22:00 -0700 Subject: [PATCH] Implement thunking in terms of constant evaluation (#7332) The bulk of this change is changing most pattern insts to be `Always` rather than `AlwaysUnique` constants, so that they can be wrapped in `SpecificConstant`s to perform substitution. That then lets thunking rely much more on `SpecificConstant` wrappers instead of deep-copying the inst tree with modified types. This approach to thunking should scale better, particularly as things like form generics make function signatures more complex, because we can leverage the existing support for constant evaluation and substitution. Unfortunately, applying this approach to binding patterns will require more work; see the TODO near the top of `thunk.cpp` for details. --------- Co-authored-by: Richard Smith --- toolchain/check/BUILD | 2 - toolchain/check/call.cpp | 1 - toolchain/check/class.cpp | 1 - toolchain/check/context.h | 11 +- toolchain/check/deduce.cpp | 47 +- toolchain/check/eval.cpp | 45 +- toolchain/check/handle_binding_pattern.cpp | 3 +- toolchain/check/handle_name.cpp | 1 - toolchain/check/import_ref.cpp | 262 +- toolchain/check/inst.cpp | 29 + toolchain/check/inst.h | 23 + toolchain/check/member_access.cpp | 2 +- toolchain/check/merge.cpp | 5 +- toolchain/check/name_ref.cpp | 33 - toolchain/check/name_ref.h | 21 - toolchain/check/pattern.cpp | 70 +- toolchain/check/pattern.h | 14 +- toolchain/check/pattern_match.cpp | 287 +- toolchain/check/pattern_match.h | 10 +- toolchain/check/testdata/alias/basics.carbon | 5 +- .../check/testdata/alias/builtins.carbon | 3 +- .../check/testdata/alias/export_name.carbon | 22 +- toolchain/check/testdata/alias/import.carbon | 48 +- .../check/testdata/alias/import_access.carbon | 14 +- .../check/testdata/alias/import_order.carbon | 24 +- toolchain/check/testdata/array/basics.carbon | 36 +- toolchain/check/testdata/array/import.carbon | 3 +- .../array/init_dependent_bound.carbon | 48 +- .../testdata/as/adapter_conversion.carbon | 29 +- toolchain/check/testdata/as/basics.carbon | 41 +- toolchain/check/testdata/as/const.carbon | 30 +- .../check/testdata/as/maybe_unformed.carbon | 24 +- toolchain/check/testdata/as/partial.carbon | 42 +- toolchain/check/testdata/as/var_init.carbon | 6 +- .../testdata/basics/dump_sem_ir_ranges.carbon | 12 +- .../basics/duplicate_name_same_line.carbon | 12 +- .../testdata/basics/include_in_dumps.carbon | 32 +- toolchain/check/testdata/basics/parens.carbon | 12 +- .../testdata/basics/raw_identifier.carbon | 30 +- .../testdata/basics/raw_sem_ir/bundle.carbon | 237 +- .../basics/raw_sem_ir/cpp_interop.carbon | 380 +- .../raw_sem_ir/non_core_interfaces.carbon | 830 ++-- .../basics/raw_sem_ir/one_file.carbon | 4416 ++++++++++------- .../one_file_with_textual_ir.carbon | 230 +- .../check/testdata/builtins/bool/eq.carbon | 12 +- .../testdata/builtins/bool/make_type.carbon | 3 +- .../check/testdata/builtins/bool/neq.carbon | 12 +- .../testdata/builtins/char_literal/add.carbon | 15 +- .../builtins/char_literal/convert_char.carbon | 21 +- .../builtins/char_literal/convert_int.carbon | 30 +- .../testdata/builtins/char_literal/eq.carbon | 10 +- .../builtins/char_literal/greater.carbon | 10 +- .../builtins/char_literal/greater_eq.carbon | 15 +- .../builtins/char_literal/less.carbon | 10 +- .../builtins/char_literal/less_eq.carbon | 15 +- .../builtins/char_literal/make_type.carbon | 9 +- .../testdata/builtins/char_literal/neq.carbon | 10 +- .../builtins/char_literal/sub_char.carbon | 30 +- .../builtins/char_literal/sub_int.carbon | 15 +- .../testdata/builtins/float/convert.carbon | 95 +- .../builtins/float/convert_checked.carbon | 105 +- .../builtins/float/convert_int.carbon | 89 +- .../builtins/float_literal/make_type.carbon | 3 +- .../testdata/builtins/form/make_type.carbon | 3 +- .../builtins/int/add_char_literal.carbon | 5 +- .../builtins/int/convert_char_literal.carbon | 15 +- .../builtins/int/convert_checked.carbon | 15 +- .../builtins/int/convert_float.carbon | 8 +- .../builtins/int/convert_float_checked.carbon | 5 +- .../builtins/maybe_unformed/make_type.carbon | 16 +- .../check/testdata/builtins/no_op.carbon | 6 +- .../testdata/builtins/pointer/is_null.carbon | 44 +- .../builtins/pointer/make_null.carbon | 28 +- .../check/testdata/builtins/read/char.carbon | 10 +- toolchain/check/testdata/choice/basic.carbon | 15 +- .../check/testdata/choice/generic.carbon | 5 +- .../testdata/class/abstract/abstract.carbon | 71 +- .../abstract/fail_abstract_in_struct.carbon | 29 +- .../abstract/fail_abstract_in_tuple.carbon | 29 +- .../class/access/access_modifers.carbon | 76 +- .../class/access/import_access.carbon | 42 +- .../class/access/inheritance_access.carbon | 115 +- .../class/access/method_access.carbon | 12 +- .../check/testdata/class/adapter/adapt.carbon | 6 +- .../testdata/class/adapter/adapt_copy.carbon | 144 +- .../class/adapter/extend_adapt.carbon | 88 +- .../testdata/class/adapter/init_adapt.carbon | 74 +- toolchain/check/testdata/class/basic.carbon | 32 +- .../class/complete_in_member_fn.carbon | 12 +- .../class/cross_package_import.carbon | 22 +- .../check/testdata/class/destroy_calls.carbon | 84 +- .../check/testdata/class/export_name.carbon | 6 +- .../class/field/comp_time_field.carbon | 6 +- .../class/field/compound_field.carbon | 40 +- .../testdata/class/field/field_access.carbon | 18 +- .../class/field/field_access_in_value.carbon | 23 +- .../class/field/field_initializer.carbon | 8 +- .../check/testdata/class/field/static.carbon | 12 +- .../testdata/class/forward_declared.carbon | 12 +- .../check/testdata/class/generic/adapt.carbon | 170 +- .../class/generic/base_is_generic.carbon | 114 +- .../check/testdata/class/generic/basic.carbon | 82 +- .../check/testdata/class/generic/call.carbon | 120 +- .../generic/complete_in_conversion.carbon | 41 +- .../check/testdata/class/generic/field.carbon | 101 +- .../class/generic/generic_vs_params.carbon | 57 +- .../testdata/class/generic/import.carbon | 85 +- .../check/testdata/class/generic/init.carbon | 141 +- .../class/generic/member_access.carbon | 84 +- .../class/generic/member_inline.carbon | 67 +- .../class/generic/member_lookup.carbon | 30 +- .../class/generic/member_out_of_line.carbon | 120 +- .../testdata/class/generic/member_type.carbon | 157 +- .../class/generic/method_deduce.carbon | 120 +- .../testdata/class/generic/redeclare.carbon | 65 +- .../check/testdata/class/generic/self.carbon | 69 +- .../testdata/class/generic/stringify.carbon | 61 +- toolchain/check/testdata/class/import.carbon | 42 +- .../testdata/class/import_indirect.carbon | 72 +- .../testdata/class/import_member_cycle.carbon | 6 +- .../testdata/class/import_struct_cycle.carbon | 12 +- .../class/indirect_import_member.carbon | 30 +- .../testdata/class/inheritance/base.carbon | 18 +- .../class/inheritance/base_field.carbon | 12 +- .../class/inheritance/base_method.carbon | 16 +- .../inheritance/base_method_qualified.carbon | 66 +- .../inheritance/base_method_shadow.carbon | 42 +- .../class/inheritance/derived_to_base.carbon | 58 +- .../class/inheritance/import_base.carbon | 16 +- .../class/inheritance/self_conversion.carbon | 40 +- toolchain/check/testdata/class/init.carbon | 30 +- toolchain/check/testdata/class/init_as.carbon | 6 +- .../check/testdata/class/init_nested.carbon | 12 +- toolchain/check/testdata/class/local.carbon | 18 +- .../method/call_without_method_syntax.carbon | 58 +- .../class/method/generic_method.carbon | 38 +- .../check/testdata/class/method/method.carbon | 94 +- .../class/method/static_method.carbon | 16 +- .../testdata/class/method/virtual.carbon | 175 +- toolchain/check/testdata/class/nested.carbon | 47 +- .../check/testdata/class/nested_name.carbon | 24 +- .../testdata/class/partial/qualifier.carbon | 54 +- .../check/testdata/class/redeclaration.carbon | 20 +- .../check/testdata/class/reenter_scope.carbon | 14 +- toolchain/check/testdata/class/reorder.carbon | 10 +- .../testdata/class/reorder_qualified.carbon | 24 +- toolchain/check/testdata/class/scope.carbon | 26 +- .../testdata/class/self/fail_ref_self.carbon | 24 +- .../check/testdata/class/self/raw_self.carbon | 48 +- .../testdata/class/self/raw_self_type.carbon | 32 +- .../check/testdata/class/self/self.carbon | 74 +- .../testdata/class/self/self_type.carbon | 32 +- .../testdata/class/syntactic_merge.carbon | 113 +- .../class/syntactic_merge_literal.carbon | 28 +- toolchain/check/testdata/const/basics.carbon | 42 +- toolchain/check/testdata/const/import.carbon | 24 +- toolchain/check/testdata/deduce/array.carbon | 238 +- .../check/testdata/deduce/generic_type.carbon | 179 +- .../check/testdata/deduce/int_float.carbon | 72 +- toolchain/check/testdata/deduce/tuple.carbon | 133 +- .../testdata/deduce/type_operator.carbon | 163 +- .../value_with_type_through_access.carbon | 278 +- .../check/testdata/eval/aggregates.carbon | 148 +- toolchain/check/testdata/eval/binding.carbon | 49 +- toolchain/check/testdata/eval/branch.carbon | 24 +- toolchain/check/testdata/eval/call.carbon | 24 +- toolchain/check/testdata/eval/symbolic.carbon | 4 + toolchain/check/testdata/facet/access.carbon | 91 +- .../facet/call_combined_impl_witness.carbon | 26 +- .../convert_class_type_to_facet_type.carbon | 6 +- ...t_class_type_to_generic_facet_value.carbon | 88 +- ...rt_class_value_to_facet_value_value.carbon | 26 +- ..._value_to_generic_facet_value_value.carbon | 168 +- ...t_value_as_type_knows_original_type.carbon | 21 +- .../convert_facet_value_to_itself.carbon | 13 +- ..._facet_value_to_narrowed_facet_type.carbon | 279 +- ...t_facet_value_value_to_blanket_impl.carbon | 53 +- ..._value_to_generic_facet_value_value.carbon | 140 +- ...convert_facet_value_value_to_itself.carbon | 46 +- .../testdata/facet/convert_interface.carbon | 6 +- .../testdata/facet/facet_assoc_const.carbon | 2 +- ...t_class_type_to_generic_facet_value.carbon | 22 +- ...convert_facet_value_to_missing_impl.carbon | 30 +- ...l_convert_type_erased_type_to_facet.carbon | 4 + ...uction_uses_runtime_type_conversion.carbon | 61 +- .../check/testdata/facet/period_self.carbon | 26 +- .../testdata/facet/require_import.carbon | 17 +- .../check/testdata/facet/runtime_value.carbon | 6 +- .../facet/self_in_interface_param.carbon | 11 +- toolchain/check/testdata/for/actual.carbon | 310 +- toolchain/check/testdata/for/basic.carbon | 11 +- toolchain/check/testdata/for/pattern.carbon | 37 +- .../function/builtin/adapted_type.carbon | 70 +- .../testdata/function/builtin/call.carbon | 36 +- .../builtin/call_from_operator.carbon | 223 +- .../function/builtin/definition.carbon | 18 +- .../function/builtin/fail_redefined.carbon | 78 +- .../testdata/function/builtin/import.carbon | 60 +- .../testdata/function/builtin/method.carbon | 60 +- .../function/builtin/positional.carbon | 6 +- .../check/testdata/function/call/alias.carbon | 12 +- .../function/call/empty_struct.carbon | 12 +- .../testdata/function/call/empty_tuple.carbon | 12 +- .../function/call/fail_param_count.carbon | 17 +- .../function/call/fail_param_type.carbon | 6 +- .../call/fail_return_type_mismatch.carbon | 12 +- .../check/testdata/function/call/form.carbon | 68 +- .../check/testdata/function/call/i32.carbon | 18 +- .../function/call/more_param_ir.carbon | 18 +- .../testdata/function/call/params_one.carbon | 6 +- .../function/call/params_one_comma.carbon | 6 +- .../testdata/function/call/params_two.carbon | 12 +- .../function/call/params_two_comma.carbon | 12 +- .../call/prefer_unqualified_lookup.carbon | 19 +- .../check/testdata/function/call/ref.carbon | 24 +- .../function/call/return_implicit.carbon | 6 +- .../function/declaration/export_name.carbon | 6 +- .../function/declaration/extern.carbon | 12 +- .../fail_import_incomplete_return.carbon | 20 +- .../declaration/fail_param_in_type.carbon | 10 +- .../declaration/fail_param_redecl.carbon | 10 +- .../function/declaration/fail_redecl.carbon | 14 +- .../declaration/fail_todo_no_params.carbon | 12 +- .../function/declaration/import.carbon | 198 +- .../declaration/param_same_name.carbon | 10 +- .../declaration/pattern_in_signature.carbon | 32 +- .../testdata/function/declaration/ref.carbon | 9 +- .../function/definition/basics.carbon | 6 +- .../fail_decl_param_mismatch.carbon | 39 +- .../function/definition/import.carbon | 42 +- .../function/definition/import_access.carbon | 54 +- .../function/definition/params_one.carbon | 6 +- .../definition/params_one_comma.carbon | 6 +- .../function/definition/params_two.carbon | 12 +- .../definition/params_two_comma.carbon | 12 +- .../definition/syntactic_merge.carbon | 132 +- .../testdata/function/generic/call.carbon | 178 +- .../call_method_on_generic_facet.carbon | 26 +- .../testdata/function/generic/deduce.carbon | 336 +- .../generic/deduce_nested_facet_value.carbon | 13 +- .../fail_deduce_imported_function.carbon | 37 +- .../function/generic/forward_decl.carbon | 5 +- .../function/generic/import_specific.carbon | 20 +- .../generic/indirect_generic_type.carbon | 31 +- .../function/generic/param_in_type.carbon | 15 +- .../function/generic/redeclare.carbon | 139 +- .../function/generic/resolve_used.carbon | 42 +- .../function/generic/return_slot.carbon | 48 +- .../function/generic/template_param.carbon | 6 +- .../function/generic/type_param.carbon | 39 +- .../function/generic/type_param_scope.carbon | 35 +- .../testdata/generic/call_basic_depth.carbon | 35 +- .../testdata/generic/complete_type.carbon | 78 +- .../testdata/generic/dependent_param.carbon | 41 +- .../generic/dot_self_symbolic_type.carbon | 40 +- toolchain/check/testdata/generic/local.carbon | 30 +- .../testdata/generic/local_function.carbon | 5 +- .../testdata/generic/template/convert.carbon | 107 +- .../generic/template/member_access.carbon | 120 +- .../generic/template/unimplemented.carbon | 76 +- .../generic/template_dependence.carbon | 65 +- .../check/testdata/generic/var_param.carbon | 28 +- toolchain/check/testdata/global/basics.carbon | 30 +- toolchain/check/testdata/if/basics.carbon | 24 +- toolchain/check/testdata/if_expr/basic.carbon | 30 +- .../if_expr/constant_condition.carbon | 52 +- .../testdata/if_expr/control_flow.carbon | 20 +- .../if_expr/fail_not_in_function.carbon | 4 + .../if_expr/fail_partial_constant.carbon | 24 +- .../check/testdata/if_expr/nested.carbon | 24 +- .../check/testdata/if_expr/struct.carbon | 18 +- .../testdata/impl/assoc_const_self.carbon | 23 +- toolchain/check/testdata/impl/compound.carbon | 119 +- .../check/testdata/impl/error_recovery.carbon | 11 +- .../testdata/impl/extend_impl_generic.carbon | 96 +- .../testdata/impl/fail_call_invalid.carbon | 28 +- .../impl/fail_extend_impl_forall.carbon | 27 +- .../fail_extend_undefined_interface.carbon | 6 +- .../testdata/impl/fail_impl_as_scope.carbon | 26 +- .../impl/fail_impl_bad_assoc_fn.carbon | 608 +-- .../impl/fail_self_type_mismatch.carbon | 174 +- .../check/testdata/impl/forward_decls.carbon | 86 +- .../impl/generic_redeclaration.carbon | 56 +- toolchain/check/testdata/impl/impl_as.carbon | 6 +- .../impl/impl_as_named_constraint.carbon | 2 +- .../check/testdata/impl/impl_forall.carbon | 5 +- .../check/testdata/impl/impl_thunk.carbon | 276 +- .../impl/impl_thunk_min_prelude.carbon | 10 +- .../testdata/impl/import_builtin_call.carbon | 12 +- .../testdata/impl/import_compound.carbon | 54 +- .../testdata/impl/import_extend_impl.carbon | 6 +- .../check/testdata/impl/import_generic.carbon | 173 +- .../check/testdata/impl/import_self.carbon | 89 +- .../testdata/impl/import_self_specific.carbon | 66 +- .../check/testdata/impl/import_thunk.carbon | 95 +- .../testdata/impl/import_use_generic.carbon | 27 +- .../check/testdata/impl/incomplete.carbon | 7 +- .../check/testdata/impl/interface_args.carbon | 221 +- .../check/testdata/impl/lookup/alias.carbon | 6 +- .../impl/lookup/canonical_query_self.carbon | 66 +- .../lookup/fail_alias_impl_not_found.carbon | 6 +- .../check/testdata/impl/lookup/generic.carbon | 284 +- .../testdata/impl/lookup/impl_forall.carbon | 71 +- .../check/testdata/impl/lookup/import.carbon | 336 +- .../impl/lookup/instance_method.carbon | 38 +- ...g_generic_inside_rewrite_constraint.carbon | 38 +- ...pecialization_with_symbolic_rewrite.carbon | 240 +- .../testdata/impl/lookup/specific_args.carbon | 97 +- .../testdata/impl/lookup/transitive.carbon | 36 +- .../testdata/impl/multiple_extend.carbon | 30 +- .../name_lookup_in_impl_definition.carbon | 9 +- .../check/testdata/impl/self_in_class.carbon | 18 +- .../testdata/impl/self_in_signature.carbon | 104 +- .../testdata/impl/use_assoc_entity.carbon | 125 +- .../index/array_element_access.carbon | 24 +- .../check/testdata/index/expr_category.carbon | 33 +- .../index/fail_array_large_index.carbon | 18 +- .../index/fail_array_non_int_indexing.carbon | 12 +- .../fail_array_out_of_bound_access.carbon | 12 +- .../testdata/index/fail_expr_category.carbon | 24 +- .../testdata/index/fail_invalid_base.carbon | 24 +- .../testdata/index/fail_name_not_found.carbon | 6 +- .../index/fail_negative_indexing.carbon | 12 +- .../check/testdata/interface/as_type.carbon | 6 +- .../testdata/interface/as_type_of_type.carbon | 33 +- .../interface/assoc_const_in_generic.carbon | 26 +- .../interface/compound_member_access.carbon | 196 +- .../testdata/interface/default_fn.carbon | 25 +- .../testdata/interface/export_name.carbon | 6 +- .../interface/fail_assoc_const_alias.carbon | 20 +- .../fail_assoc_fn_invalid_use.carbon | 15 +- .../testdata/interface/fail_duplicate.carbon | 10 +- .../fail_generic_redeclaration.carbon | 18 +- .../interface/fail_lookup_in_type_type.carbon | 4 +- .../interface/fail_lookup_undefined.carbon | 2 +- .../interface/fail_member_lookup.carbon | 11 +- .../testdata/interface/fail_modifiers.carbon | 20 +- .../fail_todo_define_default_fn_inline.carbon | 18 +- ..._todo_define_default_fn_out_of_line.carbon | 99 +- .../check/testdata/interface/final.carbon | 18 +- .../check/testdata/interface/generic.carbon | 68 +- .../generic_binding_after_assoc_const.carbon | 9 +- .../testdata/interface/generic_import.carbon | 10 +- .../testdata/interface/generic_method.carbon | 275 +- .../interface/generic_vs_params.carbon | 22 +- .../check/testdata/interface/import.carbon | 36 +- .../testdata/interface/import_access.carbon | 40 +- .../testdata/interface/incomplete.carbon | 21 +- .../check/testdata/interface/local.carbon | 18 +- .../testdata/interface/member_lookup.carbon | 100 +- .../check/testdata/interface/require.carbon | 11 +- .../check/testdata/interface/self.carbon | 20 +- .../testdata/interface/syntactic_merge.carbon | 109 +- .../interface/todo_define_not_default.carbon | 18 +- .../interop/cpp/basics/import/import.carbon | 4 +- .../interop/cpp/basics/import/indirect.carbon | 6 +- .../interop/cpp/class/import/abstract.carbon | 6 +- .../interop/cpp/class/import/access.carbon | 56 +- .../interop/cpp/class/import/base.carbon | 18 +- .../interop/cpp/class/import/class.carbon | 52 +- .../cpp/class/import/constructor.carbon | 109 +- .../interop/cpp/class/import/method.carbon | 24 +- .../interop/cpp/class/import/struct.carbon | 6 +- .../interop/cpp/class/import/template.carbon | 12 +- .../interop/cpp/class/import/union.carbon | 46 +- .../testdata/interop/cpp/enum/convert.carbon | 9 +- .../testdata/interop/cpp/enum/copy.carbon | 6 +- .../testdata/interop/cpp/enum/fixed.carbon | 6 +- .../interop/cpp/enum/incomplete.carbon | 6 +- .../testdata/interop/cpp/enum/member.carbon | 6 +- .../testdata/interop/cpp/enum/scoped.carbon | 3 +- .../testdata/interop/cpp/enum/unscoped.carbon | 6 +- .../testdata/interop/cpp/enum/using.carbon | 12 +- .../import/arithmetic_types_bridged.carbon | 15 +- .../interop/cpp/function/import/class.carbon | 12 +- .../cpp/function/import/decayed_param.carbon | 16 +- .../cpp/function/import/default_arg.carbon | 84 +- .../cpp/function/import/extern_c.carbon | 6 +- .../cpp/function/import/full_semir.carbon | 23 +- .../interop/cpp/function/import/inline.carbon | 20 +- .../cpp/function/import/overloads.carbon | 299 +- .../cpp/function/import/pointer.carbon | 134 +- .../function/import/qualified_param.carbon | 6 +- .../cpp/function/import/reference.carbon | 79 +- .../interop/cpp/function/import/return.carbon | 30 +- .../interop/cpp/function/import/struct.carbon | 12 +- .../interop/cpp/function/import/union.carbon | 12 +- .../cpp/function/import/void_pointer.carbon | 32 +- .../testdata/interop/cpp/impls/as.carbon | 38 +- .../testdata/interop/cpp/impls/copy.carbon | 6 +- .../testdata/interop/cpp/impls/destroy.carbon | 34 +- .../interop/cpp/impls/implicit_as.carbon | 214 +- .../testdata/interop/cpp/macros/macros.carbon | 190 +- .../cpp/operators/arithmetic_operators.carbon | 1034 +++- .../interop/cpp/operators/eq_with.carbon | 108 +- .../interop/cpp/operators/operators.carbon | 353 +- .../interop/cpp/operators/ordered_with.carbon | 108 +- .../interop/cpp/operators/spaceship.carbon | 90 +- .../cpp/primitive_types/arithmetic.carbon | 64 +- .../long_and_long_long.llp64.carbon | 784 +-- .../long_and_long_long.lp64.carbon | 719 +-- .../cpp/primitive_types/void_pointer.carbon | 44 +- .../testdata/interop/cpp/range_for.carbon | 926 ++-- .../cpp/stdlib/initializer_list.carbon | 43 +- .../interop/cpp/stdlib/string_view.carbon | 24 +- .../cpp/template/alias_template.carbon | 24 +- .../cpp/template/argument_count.carbon | 30 +- .../cpp/template/class_template.carbon | 6 +- .../interop/cpp/template/concept.carbon | 12 +- .../cpp/template/non_type_param.carbon | 24 +- .../template/template_template_param.carbon | 10 +- .../interop/cpp/template/type_param.carbon | 12 +- .../interop/cpp/template/var_template.carbon | 36 +- .../interop/cpp/type_alias/import.carbon | 24 +- .../interop/cpp/var/import/global.carbon | 41 +- .../interop/cpp/var/import/namespace.carbon | 6 +- .../testdata/let/compile_time_bindings.carbon | 97 +- toolchain/check/testdata/let/convert.carbon | 17 +- .../testdata/let/fail_duplicate_decl.carbon | 10 +- .../testdata/let/fail_generic_import.carbon | 5 +- .../testdata/let/fail_missing_value.carbon | 6 +- .../check/testdata/let/fail_modifiers.carbon | 40 +- .../testdata/let/fail_use_in_init.carbon | 3 +- .../check/testdata/let/generic_import.carbon | 11 +- toolchain/check/testdata/let/global.carbon | 11 +- toolchain/check/testdata/let/import.carbon | 20 +- .../check/testdata/let/import_access.carbon | 16 +- toolchain/check/testdata/let/local.carbon | 3 +- toolchain/check/testdata/let/ref.carbon | 12 +- .../check/testdata/let/shadowed_decl.carbon | 17 +- .../check/testdata/main_run/no_return.carbon | 12 +- .../check/testdata/main_run/return_i32.carbon | 24 +- .../testdata/named_constraint/convert.carbon | 10 +- .../testdata/named_constraint/empty.carbon | 25 +- .../named_constraint/empty_generic.carbon | 59 +- .../extend_name_lookup.carbon | 10 +- .../testdata/named_constraint/generic.carbon | 16 +- .../import_constraint_decl.carbon | 5 +- .../testdata/named_constraint/require.carbon | 19 +- .../testdata/namespace/add_to_import.carbon | 12 +- .../check/testdata/namespace/alias.carbon | 14 +- .../namespace/fail_decl_in_alias.carbon | 6 +- .../testdata/namespace/fail_params.carbon | 4 + .../check/testdata/namespace/imported.carbon | 24 +- .../namespace/imported_indirect.carbon | 12 +- .../merging_with_indirections.carbon | 12 +- .../check/testdata/namespace/shadow.carbon | 12 +- .../testdata/operators/builtin/and.carbon | 50 +- .../operators/builtin/assignment.carbon | 24 +- .../fail_and_or_not_in_function.carbon | 4 + .../fail_and_or_partial_constant.carbon | 28 +- .../fail_assignment_to_non_assignable.carbon | 18 +- .../fail_redundant_compound_access.carbon | 12 +- .../builtin/fail_type_mismatch.carbon | 6 +- .../fail_type_mismatch_assignment.carbon | 6 +- .../builtin/fail_type_mismatch_once.carbon | 6 +- .../builtin/fail_unimplemented_op.carbon | 6 +- .../testdata/operators/builtin/or.carbon | 50 +- .../operators/builtin/unary_op.carbon | 30 +- .../testdata/operators/overloaded/eq.carbon | 150 +- .../overloaded/fail_assign_non_ref.carbon | 32 +- .../overloaded/fail_error_recovery.carbon | 6 +- .../operators/overloaded/fail_no_impl.carbon | 36 +- .../operators/overloaded/implicit_as.carbon | 57 +- .../operators/overloaded/index.carbon | 97 +- .../overloaded/index_with_prelude.carbon | 97 +- .../operators/overloaded/ordered.carbon | 160 +- .../overloaded/string_indexing.carbon | 30 +- .../check/testdata/package_expr/syntax.carbon | 30 +- .../packages/cross_package_export.carbon | 42 +- .../packages/cross_package_import.carbon | 6 +- .../testdata/packages/export_import.carbon | 62 +- .../testdata/packages/export_mixed.carbon | 40 +- .../testdata/packages/export_name.carbon | 66 +- .../fail_conflict_no_namespaces.carbon | 6 +- .../packages/fail_export_name_params.carbon | 15 +- .../packages/fail_import_type_error.carbon | 40 +- .../fail_name_with_import_failure.carbon | 6 +- .../packages/implicit_imports_entities.carbon | 42 +- .../packages/implicit_imports_prelude.carbon | 18 +- .../testdata/packages/loaded_global.carbon | 24 +- .../testdata/packages/missing_prelude.carbon | 115 +- .../check/testdata/packages/raw_core.carbon | 6 +- .../check/testdata/patterns/expression.carbon | 3 +- .../check/testdata/patterns/tuple.carbon | 85 +- .../check/testdata/patterns/underscore.carbon | 57 +- .../testdata/pointer/address_of_deref.carbon | 12 +- .../testdata/pointer/address_of_lvalue.carbon | 42 +- toolchain/check/testdata/pointer/arrow.carbon | 12 +- toolchain/check/testdata/pointer/basic.carbon | 18 +- .../testdata/pointer/fail_deref_error.carbon | 6 +- .../pointer/fail_deref_not_pointer.carbon | 6 +- .../testdata/pointer/fail_deref_type.carbon | 8 +- .../pointer/fail_type_mismatch.carbon | 12 +- .../check/testdata/pointer/import.carbon | 24 +- .../testdata/pointer/nested_const.carbon | 18 +- toolchain/check/testdata/pointer/types.carbon | 24 +- .../primitives/string_literals.carbon | 6 +- .../testdata/primitives/type_literals.carbon | 86 +- .../return/code_after_return_value.carbon | 12 +- .../testdata/return/fail_call_in_type.carbon | 8 +- .../testdata/return/fail_error_in_type.carbon | 2 +- .../testdata/return/fail_let_in_type.carbon | 15 +- .../return/fail_missing_return.carbon | 6 +- .../fail_missing_return_empty_tuple.carbon | 6 +- .../fail_return_var_no_returned_var.carbon | 6 +- .../fail_return_with_returned_var.carbon | 24 +- .../fail_returned_var_no_return_type.carbon | 12 +- .../return/fail_returned_var_shadow.carbon | 32 +- .../return/fail_returned_var_type.carbon | 12 +- .../testdata/return/fail_type_mismatch.carbon | 6 +- .../testdata/return/fail_value_missing.carbon | 6 +- .../testdata/return/fail_var_in_type.carbon | 8 +- .../return/import_convert_function.carbon | 122 +- .../check/testdata/return/returned_var.carbon | 24 +- .../testdata/return/returned_var_scope.carbon | 36 +- toolchain/check/testdata/return/struct.carbon | 6 +- toolchain/check/testdata/return/tuple.carbon | 6 +- toolchain/check/testdata/return/value.carbon | 6 +- toolchain/check/testdata/struct/empty.carbon | 12 +- .../testdata/struct/fail_assign_empty.carbon | 6 +- .../testdata/struct/fail_assign_nested.carbon | 6 +- .../struct/fail_assign_to_empty.carbon | 6 +- .../struct/fail_duplicate_name.carbon | 19 +- .../struct/fail_field_name_mismatch.carbon | 24 +- .../struct/fail_field_type_mismatch.carbon | 6 +- .../struct/fail_member_access_type.carbon | 12 +- .../struct/fail_nested_incomplete.carbon | 10 +- .../struct/fail_non_member_access.carbon | 12 +- .../struct/fail_too_few_values.carbon | 6 +- .../testdata/struct/fail_type_assign.carbon | 6 +- .../testdata/struct/fail_value_as_type.carbon | 4 +- toolchain/check/testdata/struct/import.carbon | 30 +- .../struct/literal_member_access.carbon | 12 +- .../testdata/struct/member_access.carbon | 18 +- .../struct/nested_struct_in_place.carbon | 12 +- .../check/testdata/struct/one_entry.carbon | 12 +- .../testdata/struct/partially_const.carbon | 12 +- .../testdata/struct/reorder_fields.carbon | 42 +- .../testdata/struct/tuple_as_element.carbon | 12 +- .../check/testdata/struct/two_entries.carbon | 28 +- toolchain/check/testdata/tuple/basics.carbon | 60 +- .../testdata/tuple/element_access.carbon | 24 +- toolchain/check/testdata/tuple/import.carbon | 30 +- .../testdata/tuple/in_place_tuple_init.carbon | 18 +- .../check/testdata/tuple/tuple_pattern.carbon | 142 +- .../check/testdata/var/export_name.carbon | 24 +- .../testdata/var/fail_duplicate_decl.carbon | 12 +- .../var/fail_init_type_mismatch.carbon | 6 +- .../testdata/var/fail_init_with_self.carbon | 6 +- .../var/fail_storage_is_literal.carbon | 4 +- .../check/testdata/var/global_decl.carbon | 6 +- .../testdata/var/global_decl_import.carbon | 6 +- .../testdata/var/global_decl_with_init.carbon | 34 +- .../check/testdata/var/global_lookup.carbon | 12 +- .../var/global_lookup_in_scope.carbon | 12 +- toolchain/check/testdata/var/import.carbon | 18 +- .../check/testdata/var/import_access.carbon | 30 +- .../check/testdata/var/initialization.carbon | 12 +- toolchain/check/testdata/var/lookup.carbon | 6 +- toolchain/check/testdata/var/shadowing.carbon | 18 +- .../check/testdata/var/var_pattern.carbon | 177 +- .../testdata/where_expr/constraints.carbon | 36 +- .../testdata/where_expr/designator.carbon | 15 +- .../testdata/where_expr/dot_self_index.carbon | 26 +- .../testdata/where_expr/equal_rewrite.carbon | 34 +- .../testdata/where_expr/non_generic.carbon | 6 +- toolchain/check/thunk.cpp | 133 +- .../compile/optimize/optimize_none.carbon | 2 +- .../compile/optimize/optimize_size.carbon | 2 +- toolchain/lower/testdata/array/iterate.carbon | 16 +- toolchain/lower/testdata/class/virtual.carbon | 16 +- toolchain/lower/testdata/for/bindings.carbon | 2 + .../lower/testdata/for/break_continue.carbon | 4 +- toolchain/lower/testdata/for/for.carbon | 4 +- .../function/generic/call_basic.carbon | 72 +- .../function/generic/call_basic_depth.carbon | 8 +- .../function/generic/call_deref_ptr.carbon | 16 +- .../generic/call_different_specific.carbon | 16 +- .../generic/call_recursive_basic.carbon | 8 +- .../lower/testdata/impl/import_thunk.carbon | 24 +- toolchain/lower/testdata/impl/thunk.carbon | 28 +- .../testdata/interop/cpp/operators.carbon | 48 +- .../lower/testdata/operators/increment.carbon | 2 +- toolchain/lower/type.cpp | 1 - toolchain/sem_ir/entity_with_params_base.h | 7 +- toolchain/sem_ir/inst_fingerprinter.cpp | 18 +- toolchain/sem_ir/pattern.cpp | 24 +- toolchain/sem_ir/typed_insts.h | 27 +- 589 files changed, 22583 insertions(+), 11517 deletions(-) delete mode 100644 toolchain/check/name_ref.cpp delete mode 100644 toolchain/check/name_ref.h diff --git a/toolchain/check/BUILD b/toolchain/check/BUILD index e4e16ed4b2ff..5898ce637c6d 100644 --- a/toolchain/check/BUILD +++ b/toolchain/check/BUILD @@ -61,7 +61,6 @@ cc_library( "modifiers.cpp", "name_component.cpp", "name_lookup.cpp", - "name_ref.cpp", "name_scope.cpp", "operator.cpp", "pattern.cpp", @@ -129,7 +128,6 @@ cc_library( "modifiers.h", "name_component.h", "name_lookup.h", - "name_ref.h", "name_scope.h", "operator.h", "param_and_arg_refs_stack.h", diff --git a/toolchain/check/call.cpp b/toolchain/check/call.cpp index e0a514cf1ce9..01031f995da6 100644 --- a/toolchain/check/call.cpp +++ b/toolchain/check/call.cpp @@ -17,7 +17,6 @@ #include "toolchain/check/function.h" #include "toolchain/check/import_ref.h" #include "toolchain/check/inst.h" -#include "toolchain/check/name_ref.h" #include "toolchain/check/thunk.h" #include "toolchain/check/type.h" #include "toolchain/diagnostics/format_providers.h" diff --git a/toolchain/check/class.cpp b/toolchain/check/class.cpp index 7119f19ef7a6..3055bc94afb4 100644 --- a/toolchain/check/class.cpp +++ b/toolchain/check/class.cpp @@ -13,7 +13,6 @@ #include "toolchain/check/import_ref.h" #include "toolchain/check/inst.h" #include "toolchain/check/name_lookup.h" -#include "toolchain/check/name_ref.h" #include "toolchain/check/pattern.h" #include "toolchain/check/pattern_match.h" #include "toolchain/check/thunk.h" diff --git a/toolchain/check/context.h b/toolchain/check/context.h index 863f5952802f..4e034df256b0 100644 --- a/toolchain/check/context.h +++ b/toolchain/check/context.h @@ -184,7 +184,16 @@ class Context { auto generated() -> llvm::SmallVector& { return generated_; } - // Pre-computed parts of a binding pattern. + // Map from the IDs of binding patterns to the IDs of the corresponding + // bindings, and related information. The binding insts must be created early, + // well before we have a block to put them in, because they have to be added + // to name lookup in case they are referenced later in the pattern. See + // docs/check/pattern_matching.md for details. + // + // This is only populated for "ordinary" binding pattern insts, not insts + // produced by constant evaluation, because the latter do not have a unique + // identity, and cannot be referenced by name in any event. + // // TODO: Consider putting this behind a narrower API to guard against emitting // multiple times. struct BindingPatternInfo { diff --git a/toolchain/check/deduce.cpp b/toolchain/check/deduce.cpp index 3a248bd708b7..9ae7c705ea93 100644 --- a/toolchain/check/deduce.cpp +++ b/toolchain/check/deduce.cpp @@ -36,12 +36,19 @@ class DeductionWorklist { SemIR::InstId param; SemIR::InstId arg; bool want_value; + SemIR::LocId param_loc_id; }; // Adds a single (param, arg) deduction. - auto Add(SemIR::InstId param, SemIR::InstId arg, bool want_value) -> void { - deductions_.push_back( - {.param = param, .arg = arg, .want_value = want_value}); + auto Add(SemIR::InstId param, SemIR::InstId arg, bool want_value, + SemIR::LocId param_loc_id = SemIR::LocId::None) -> void { + if (!param_loc_id.has_value()) { + param_loc_id = SemIR::LocId(param); + } + deductions_.push_back({.param = param, + .arg = arg, + .want_value = want_value, + .param_loc_id = param_loc_id}); } // Adds a single (param, arg) deduction of a specific. @@ -163,11 +170,13 @@ class DeductionContext { auto context() const -> Context& { return *context_; } - // Adds a pending deduction of `param` from `arg`. `needs_substitution` - // indicates whether we need to substitute known generic parameters into - // `param`. - auto Add(SemIR::InstId param, SemIR::InstId arg, bool want_value) -> void { - worklist_.Add(param, arg, want_value); + // Adds a pending deduction of `param` from `arg`. If `param_loc_id` is not + // `None`, it is used in place of `LocId(param)` in diagnostics. + // `needs_substitution` indicates whether we need to substitute known generic + // parameters into `param`. + auto Add(SemIR::InstId param, SemIR::InstId arg, bool want_value, + SemIR::LocId param_loc_id = SemIR::LocId::None) -> void { + worklist_.Add(param, arg, want_value, param_loc_id); } template @@ -205,13 +214,14 @@ class DeductionContext { auto MakeSpecific() -> SemIR::SpecificId; private: - auto NoteInitializingParam(SemIR::InstId param_id, auto& builder) -> void { + auto NoteInitializingParam(SemIR::InstId param_id, SemIR::LocId loc_id, + auto& builder) -> void { if (auto param = context().insts().TryGetAs( param_id)) { CARBON_DIAGNOSTIC(InitializingGenericParam, Note, "initializing generic parameter `{0}` declared here", SemIR::NameId); - builder.Note(param_id, InitializingGenericParam, + builder.Note(loc_id, InitializingGenericParam, context().entity_names().Get(param->entity_name_id).name_id); } else { NoteGenericHere(context(), generic_id_, builder); @@ -285,13 +295,19 @@ DeductionContext::DeductionContext(Context* context, SemIR::LocId loc_id, auto DeductionContext::Deduce() -> bool { while (!worklist_.Done()) { - auto [param_id, arg_id, want_value] = worklist_.PopNext(); + auto [param_id, arg_id, want_value, param_loc_id] = worklist_.PopNext(); + if (param_id == SemIR::ErrorInst::InstId) { + return false; + } // TODO: Bail out if there's nothing to deduce: if we're not in a pattern // and the parameter doesn't have a symbolic constant value. auto param = context().insts().Get(param_id); auto param_type_id = param.type_id(); + if (param_type_id == SemIR::ErrorInst::TypeId) { + return false; + } if (context().types().Is(param_type_id)) { param_type_id = SemIR::ExtractScrutineeType(context().sem_ir(), param_type_id); @@ -324,7 +340,7 @@ auto DeductionContext::Deduce() -> bool { Diagnostics::AnnotationScope annotate_diagnostics( &context().emitter(), [&](auto& builder) { if (diagnose_) { - NoteInitializingParam(param_id, builder); + NoteInitializingParam(param_id, param_loc_id, builder); } }); // `want_value` is only set within types and the arguments for symbolic @@ -373,7 +389,7 @@ auto DeductionContext::Deduce() -> bool { "compile-time constant"); auto diag = context().emitter().Build(loc_id_, CompTimeArgumentNotConstant); - NoteInitializingParam(param_id, diag); + NoteInitializingParam(param_id, param_loc_id, diag); diag.Emit(); } return false; @@ -456,7 +472,7 @@ auto DeductionContext::Deduce() -> bool { auto param_const_inst_id = context().constant_values().GetInstId(param_const_id); if (param_const_inst_id != param_id) { - Add(param_const_inst_id, arg_id, want_value); + Add(param_const_inst_id, arg_id, want_value, param_loc_id); continue; } } @@ -537,7 +553,8 @@ auto DeductionContext::CheckDeductionIsComplete() -> bool { Diagnostics::AnnotationScope annotate_diagnostics( &context().emitter(), [&](auto& builder) { if (diagnose_) { - NoteInitializingParam(binding_id, builder); + NoteInitializingParam(binding_id, SemIR::LocId(binding_id), + builder); } }); auto converted_arg_id = diff --git a/toolchain/check/eval.cpp b/toolchain/check/eval.cpp index f218330f894e..4c10e1ff61c4 100644 --- a/toolchain/check/eval.cpp +++ b/toolchain/check/eval.cpp @@ -108,21 +108,48 @@ class EvalContext { // Gets the value of the specified compile-time binding in this context. // Returns `None` if the value is not fixed in this context. - auto GetCompileTimeBindValue(SemIR::CompileTimeBindIndex bind_index) + auto GetCompileTimeBindValue(SemIR::SymbolicBinding binding) -> SemIR::ConstantId { - if (!bind_index.has_value() || !specific_id_.has_value()) { + // If we know which specific we're evaluating within and this is an argument + // of that specific, its constant value is the corresponding argument value. + const auto& binding_name = entity_names().Get(binding.entity_name_id); + if (!binding_name.bind_index().has_value() || !specific_id_.has_value()) { return SemIR::ConstantId::None; } + auto binding_index = binding_name.bind_index().index; const auto& specific = specifics().Get(specific_id_); auto args = inst_blocks().Get(specific.args_id); // Bindings past the ones with known arguments can appear as local // bindings of entities declared within this generic. - if (static_cast(bind_index.index) >= args.size()) { + if (static_cast(binding_index) >= args.size()) { return SemIR::ConstantId::None; } - return constant_values().Get(args[bind_index.index]); + + // Check that the binding belongs to the current generic. + { + auto generic = generics().Get(specific.generic_id); + auto generic_bindings = inst_blocks().Get(generic.bindings_id); + CARBON_CHECK(static_cast(binding_index) < + generic_bindings.size()); + auto generic_binding_const_id = + constant_values().Get(generic_bindings[binding_index]); + auto generic_binding = + constant_values().GetInstAs( + generic_binding_const_id); + auto generic_binding_name = + entity_names().Get(generic_binding.entity_name_id); + // TODO: consider checking more fields of EntityName. But note that even + // if we check all of them, there will still be false negatives when + // different bindings happen to have the same EntityName representation. + CARBON_CHECK(generic_binding.type_id == binding.type_id && + generic_binding_name.name_id == binding_name.name_id, + "Binding {0} does not belong to generic {1}", binding_name, + generic); + } + + return constant_values().Get(args[binding_index]); } // Given information about a symbolic constant, determine its value in the @@ -2954,13 +2981,9 @@ auto TryEvalTypedInst(EvalContext& eval_context, // If we know which specific we're evaluating within and this is an argument // of that specific, its constant value is the corresponding argument value. - const auto& bind_name = eval_context.entity_names().Get(bind.entity_name_id); - if (bind_name.bind_index().has_value()) { - if (auto value = - eval_context.GetCompileTimeBindValue(bind_name.bind_index()); - value.has_value()) { - return value; - } + if (auto value = eval_context.GetCompileTimeBindValue(bind); + value.has_value()) { + return value; } // The constant form of a symbolic binding is an idealized form of the diff --git a/toolchain/check/handle_binding_pattern.cpp b/toolchain/check/handle_binding_pattern.cpp index 4b40b7f2e5b3..885e69070726 100644 --- a/toolchain/check/handle_binding_pattern.cpp +++ b/toolchain/check/handle_binding_pattern.cpp @@ -13,7 +13,6 @@ #include "toolchain/check/inst.h" #include "toolchain/check/interface.h" #include "toolchain/check/name_lookup.h" -#include "toolchain/check/name_ref.h" #include "toolchain/check/pattern.h" #include "toolchain/check/period_self.h" #include "toolchain/check/return.h" @@ -210,7 +209,7 @@ static auto HandleAnyBindingPattern( phase = is_template ? BindingPhase::Template : BindingPhase::Symbolic; } auto binding = AddBindingPattern( - context, node_id, type_expr_region_id, + context, node_id, type_expr_region_id, type_expr.type_component_id, {.kind = kind, .type_id = GetPatternType(context, type_expr.type_component_id), .entity_name_id = diff --git a/toolchain/check/handle_name.cpp b/toolchain/check/handle_name.cpp index 5b6262adb133..21b8ec372b03 100644 --- a/toolchain/check/handle_name.cpp +++ b/toolchain/check/handle_name.cpp @@ -9,7 +9,6 @@ #include "toolchain/check/member_access.h" #include "toolchain/check/name_component.h" #include "toolchain/check/name_lookup.h" -#include "toolchain/check/name_ref.h" #include "toolchain/check/pointer_dereference.h" #include "toolchain/check/type.h" #include "toolchain/lex/token_kind.h" diff --git a/toolchain/check/import_ref.cpp b/toolchain/check/import_ref.cpp index 1b35c6d4716a..b14dbdd34286 100644 --- a/toolchain/check/import_ref.cpp +++ b/toolchain/check/import_ref.cpp @@ -525,6 +525,51 @@ static auto AddLoadedImportRef(ImportContext& context, return inst_id; } +// The information needed to form an import_ref for an already-loaded +// instruction. +struct LoadedImportRefInfo { + static const LoadedImportRefInfo None; + + SemIR::ConstantId local_type_const_id; + SemIR::InstId import_inst_id; + SemIR::ConstantId local_const_id; +}; + +constexpr LoadedImportRefInfo LoadedImportRefInfo::None = { + .local_type_const_id = SemIR::ConstantId::None, + .import_inst_id = SemIR::InstId::None, + .local_const_id = SemIR::ConstantId::None, +}; + +static auto AddLoadedImportRef(ImportContext& context, + LoadedImportRefInfo loaded_import_ref_info) + -> SemIR::InstId { + if (loaded_import_ref_info.import_inst_id == SemIR::InstId::None) { + return SemIR::InstId::None; + } + return AddLoadedImportRef(context, + context.local_types().GetTypeIdForTypeConstantId( + loaded_import_ref_info.local_type_const_id), + loaded_import_ref_info.import_inst_id, + loaded_import_ref_info.local_const_id); +} + +// Adds a block of import_ref instructions and returns the block ID. +static auto AddLoadedImportRefBlock( + ImportContext& context, + std::optional> block_info) + -> SemIR::InstBlockId { + if (!block_info.has_value()) { + return SemIR::InstBlockId::None; + } + llvm::SmallVector local_contents; + local_contents.reserve(block_info->size()); + for (auto import_ref_info : *block_info) { + local_contents.push_back(AddLoadedImportRef(context, import_ref_info)); + } + return context.local_inst_blocks().Add(local_contents); +} + // Like `AddLoadedImportRef`, but only for types, and returns a `TypeInstId`. static auto AddLoadedImportRefForType(ImportContext& context, SemIR::TypeInstId import_inst_id, @@ -622,6 +667,38 @@ static auto GetLocalConstantId(ImportRefResolver& resolver, resolver.import_types().GetConstantId(type_id)); } +// Loads and returns LoadedImportRefInfo for the given instruction in the +// imported IR. This may add new work to `resolver`. +static auto GetLocalImportRefInfo(ImportRefResolver& resolver, + SemIR::InstId import_inst_id) + -> LoadedImportRefInfo { + if (!import_inst_id.has_value()) { + return LoadedImportRefInfo::None; + } + auto import_type_id = + resolver.import_insts().GetWithAttachedType(import_inst_id).type_id(); + return {.local_type_const_id = GetLocalConstantId(resolver, import_type_id), + .import_inst_id = import_inst_id, + .local_const_id = GetLocalConstantId(resolver, import_inst_id)}; +} + +// Loads and returns LoadedImportRefInfos for the insts in the given block in +// the imported IR, or returns nullopt if the block ID is `None`. This may +// add new work to `resolver`. +static auto GetLocalBlockImportRefInfo(ImportRefResolver& resolver, + SemIR::InstBlockId import_block_id) + -> std::optional> { + if (!import_block_id.has_value()) { + return std::nullopt; + } + llvm::SmallVector result; + for (auto import_inst_id : + resolver.import_inst_blocks().GetOrEmpty(import_block_id)) { + result.push_back(GetLocalImportRefInfo(resolver, import_inst_id)); + } + return result; +} + // Translates a NameId from the import IR to a local NameId. // // No new work is generated by calling this function. @@ -1556,36 +1633,33 @@ static auto TryResolveTypedInst(ImportRefResolver& resolver, template requires SemIR::Internal::HasInstCategory -static auto TryResolveTypedInst(ImportRefResolver& resolver, ParamPatternT inst, - SemIR::InstId import_inst_id) -> ResolveResult { +static auto TryResolveTypedInst(ImportRefResolver& resolver, ParamPatternT inst) + -> ResolveResult { auto type_const_id = GetLocalConstantId(resolver, inst.type_id); auto name_id = GetLocalNameId(resolver, inst.pretty_name_id); if (resolver.HasNewWork()) { return ResolveResult::Retry(); } - return ResolveResult::Unique( - resolver, import_inst_id, - {.type_id = - resolver.local_types().GetTypeIdForTypeConstantId(type_const_id), - .pretty_name_id = name_id}); + return ResolveResult::Deduplicated( + resolver, {.type_id = resolver.local_types().GetTypeIdForTypeConstantId( + type_const_id), + .pretty_name_id = name_id}); } template requires SemIR::Internal::HasInstCategory static auto TryResolveTypedInst(ImportRefResolver& resolver, - ReturnPatternT inst, - SemIR::InstId import_inst_id) -> ResolveResult { + ReturnPatternT inst) -> ResolveResult { auto type_const_id = GetLocalConstantId(resolver, inst.type_id); if (resolver.HasNewWork()) { return ResolveResult::Retry(); } - return ResolveResult::Unique( - resolver, import_inst_id, - {.type_id = - resolver.local_types().GetTypeIdForTypeConstantId(type_const_id)}); + return ResolveResult::Deduplicated( + resolver, {.type_id = resolver.local_types().GetTypeIdForTypeConstantId( + type_const_id)}); } static auto TryResolveTypedInst(ImportRefResolver& resolver, @@ -1758,16 +1832,15 @@ template requires SemIR::Internal::HasInstCategory static auto TryResolveTypedInst(ImportRefResolver& resolver, - BindingPatternT inst, - SemIR::InstId import_inst_id) -> ResolveResult { + BindingPatternT inst) -> ResolveResult { auto type_const_id = GetLocalConstantId(resolver, inst.type_id); const auto& import_entity_name = resolver.import_entity_names().Get(inst.entity_name_id); auto parent_scope_id = GetLocalNameScopeId(resolver, import_entity_name.parent_scope_id); - auto subpattern_id = SemIR::InstId::None; + auto subpattern = LoadedImportRefInfo::None; if constexpr (std::is_same_v) { - subpattern_id = GetLocalConstantInstId(resolver, inst.subpattern_id); + subpattern = GetLocalImportRefInfo(resolver, inst.subpattern_id); } if (resolver.HasNewWork()) { return ResolveResult::Retry(); @@ -1786,10 +1859,10 @@ static auto TryResolveTypedInst(ImportRefResolver& resolver, .type_id = resolver.local_types().GetTypeIdForTypeConstantId(type_const_id), .entity_name_id = entity_name_id, - .subpattern_id = subpattern_id}; + .subpattern_id = AddLoadedImportRef(resolver, subpattern)}; - return ResolveResult::Unique( - resolver, import_inst_id, SemIR::Inst(result).As()); + return ResolveResult::Deduplicated( + resolver, SemIR::Inst(result).As()); } static auto TryResolveTypedInst(ImportRefResolver& resolver, @@ -1987,10 +2060,10 @@ static auto TryResolveTypedInst(ImportRefResolver& resolver, // Load constants for the definition. auto parent_scope_id = GetLocalNameScopeId(resolver, import_class.parent_scope_id); - auto implicit_param_patterns = GetLocalInstBlockContents( + auto implicit_param_patterns = GetLocalBlockImportRefInfo( resolver, import_class.implicit_param_patterns_id); auto param_patterns = - GetLocalInstBlockContents(resolver, import_class.param_patterns_id); + GetLocalBlockImportRefInfo(resolver, import_class.param_patterns_id); auto generic_data = GetLocalGenericData(resolver, import_class.generic_id); auto self_const_id = GetLocalConstantId(resolver, import_class.self_type_id); auto complete_type_witness_const_id = @@ -2014,11 +2087,10 @@ static auto TryResolveTypedInst(ImportRefResolver& resolver, } new_class.parent_scope_id = parent_scope_id; - new_class.implicit_param_patterns_id = GetLocalCanonicalInstBlockId( - resolver, import_class.implicit_param_patterns_id, - implicit_param_patterns); - new_class.param_patterns_id = GetLocalCanonicalInstBlockId( - resolver, import_class.param_patterns_id, param_patterns); + new_class.implicit_param_patterns_id = + AddLoadedImportRefBlock(resolver, implicit_param_patterns); + new_class.param_patterns_id = + AddLoadedImportRefBlock(resolver, param_patterns); new_class.self_type_id = resolver.local_types().GetTypeIdForTypeConstantId(self_const_id); @@ -2311,7 +2383,7 @@ static auto TryResolveTypedInst(ImportRefResolver& resolver, function_id = function_type.function_id; } - auto call_param_patterns = GetLocalInstBlockContents( + auto call_param_patterns = GetLocalBlockImportRefInfo( resolver, import_function.call_param_patterns_id); auto return_type_const_id = SemIR::ConstantId::None; if (import_function.return_type_inst_id.has_value()) { @@ -2325,15 +2397,15 @@ static auto TryResolveTypedInst(ImportRefResolver& resolver, } auto parent_scope_id = GetLocalNameScopeId(resolver, import_function.parent_scope_id); - auto implicit_param_patterns = GetLocalInstBlockContents( + auto implicit_param_patterns = GetLocalBlockImportRefInfo( resolver, import_function.implicit_param_patterns_id); auto param_patterns = - GetLocalInstBlockContents(resolver, import_function.param_patterns_id); + GetLocalBlockImportRefInfo(resolver, import_function.param_patterns_id); auto generic_data = GetLocalGenericData(resolver, import_function.generic_id); - auto self_param_id = - GetLocalConstantInstId(resolver, import_function.self_param_id); - auto return_pattern_id = - GetLocalConstantInstId(resolver, import_function.return_pattern_id); + auto self_param = + GetLocalImportRefInfo(resolver, import_function.self_param_id); + auto return_pattern = + GetLocalImportRefInfo(resolver, import_function.return_pattern_id); const SemIR::ThunkInfo* import_thunk_info = nullptr; if (import_function.special_function_kind == @@ -2360,15 +2432,14 @@ static auto TryResolveTypedInst(ImportRefResolver& resolver, } // Add the function declaration. - new_function.call_param_patterns_id = GetLocalCanonicalInstBlockId( - resolver, import_function.call_param_patterns_id, call_param_patterns); + new_function.call_param_patterns_id = + AddLoadedImportRefBlock(resolver, call_param_patterns); new_function.parent_scope_id = parent_scope_id; - new_function.implicit_param_patterns_id = GetLocalCanonicalInstBlockId( - resolver, import_function.implicit_param_patterns_id, - implicit_param_patterns); - new_function.self_param_id = self_param_id; - new_function.param_patterns_id = GetLocalCanonicalInstBlockId( - resolver, import_function.param_patterns_id, param_patterns); + new_function.implicit_param_patterns_id = + AddLoadedImportRefBlock(resolver, implicit_param_patterns); + new_function.self_param_id = AddLoadedImportRef(resolver, self_param); + new_function.param_patterns_id = + AddLoadedImportRefBlock(resolver, param_patterns); new_function.return_type_inst_id = SemIR::TypeInstId::None; if (import_function.return_type_inst_id.has_value()) { new_function.return_type_inst_id = AddLoadedImportRefForType( @@ -2380,7 +2451,7 @@ static auto TryResolveTypedInst(ImportRefResolver& resolver, resolver, SemIR::FormType::TypeId, import_function.return_form_inst_id, return_form_const_id); } - new_function.return_pattern_id = return_pattern_id; + new_function.return_pattern_id = AddLoadedImportRef(resolver, return_pattern); if (import_function.definition_id.has_value()) { new_function.definition_id = new_function.first_owning_decl_id; } @@ -2703,7 +2774,7 @@ static auto TryResolveTypedInst(ImportRefResolver& resolver, } // Load constants for the definition. - auto implicit_param_patterns = GetLocalInstBlockContents( + auto implicit_param_patterns = GetLocalBlockImportRefInfo( resolver, import_impl.implicit_param_patterns_id); auto generic_data = GetLocalGenericData(resolver, import_impl.generic_id); auto self_const_id = GetLocalConstantId(resolver, import_impl.self_id); @@ -2721,9 +2792,8 @@ static auto TryResolveTypedInst(ImportRefResolver& resolver, return ResolveResult::Retry(impl_const_id, new_impl.first_decl_id()); } - new_impl.implicit_param_patterns_id = GetLocalCanonicalInstBlockId( - resolver, import_impl.implicit_param_patterns_id, - implicit_param_patterns); + new_impl.implicit_param_patterns_id = + AddLoadedImportRefBlock(resolver, implicit_param_patterns); // Create instructions for self and constraint to hold the symbolic constant // value for a generic impl. @@ -2940,10 +3010,10 @@ static auto TryResolveTypedInst(ImportRefResolver& resolver, auto parent_scope_id = GetLocalNameScopeId(resolver, import_interface.parent_scope_id); - auto implicit_param_patterns = GetLocalInstBlockContents( + auto implicit_param_patterns = GetLocalBlockImportRefInfo( resolver, import_interface.implicit_param_patterns_id); auto param_patterns = - GetLocalInstBlockContents(resolver, import_interface.param_patterns_id); + GetLocalBlockImportRefInfo(resolver, import_interface.param_patterns_id); auto generic_data = GetLocalGenericData(resolver, import_interface.generic_id); auto require_impls = GetLocalRequireImplsBlockContents( @@ -2971,11 +3041,10 @@ static auto TryResolveTypedInst(ImportRefResolver& resolver, } new_interface.parent_scope_id = parent_scope_id; - new_interface.implicit_param_patterns_id = GetLocalCanonicalInstBlockId( - resolver, import_interface.implicit_param_patterns_id, - implicit_param_patterns); - new_interface.param_patterns_id = GetLocalCanonicalInstBlockId( - resolver, import_interface.param_patterns_id, param_patterns); + new_interface.implicit_param_patterns_id = + AddLoadedImportRefBlock(resolver, implicit_param_patterns); + new_interface.param_patterns_id = + AddLoadedImportRefBlock(resolver, param_patterns); new_interface.require_impls_block_id = GetLocalCanonicalRequireImplsBlockId( resolver, import_interface.require_impls_block_id, require_impls); @@ -3228,9 +3297,9 @@ static auto TryResolveTypedInst(ImportRefResolver& resolver, auto parent_scope_id = GetLocalNameScopeId(resolver, import_named_constraint.parent_scope_id); - auto implicit_param_patterns = GetLocalInstBlockContents( + auto implicit_param_patterns = GetLocalBlockImportRefInfo( resolver, import_named_constraint.implicit_param_patterns_id); - auto param_patterns = GetLocalInstBlockContents( + auto param_patterns = GetLocalBlockImportRefInfo( resolver, import_named_constraint.param_patterns_id); auto generic_data = GetLocalGenericData(resolver, import_named_constraint.generic_id); @@ -3258,11 +3327,9 @@ static auto TryResolveTypedInst(ImportRefResolver& resolver, new_named_constraint.parent_scope_id = parent_scope_id; new_named_constraint.implicit_param_patterns_id = - GetLocalCanonicalInstBlockId( - resolver, import_named_constraint.implicit_param_patterns_id, - implicit_param_patterns); - new_named_constraint.param_patterns_id = GetLocalCanonicalInstBlockId( - resolver, import_named_constraint.param_patterns_id, param_patterns); + AddLoadedImportRefBlock(resolver, implicit_param_patterns); + new_named_constraint.param_patterns_id = + AddLoadedImportRefBlock(resolver, param_patterns); new_named_constraint.require_impls_block_id = GetLocalCanonicalRequireImplsBlockId( resolver, import_named_constraint.require_impls_block_id, @@ -3836,20 +3903,19 @@ static auto TryResolveTypedInst(ImportRefResolver& resolver, } static auto TryResolveTypedInst(ImportRefResolver& resolver, - SemIR::ReturnSlotPattern inst, - SemIR::InstId import_inst_id) -> ResolveResult { + SemIR::ReturnSlotPattern inst) + -> ResolveResult { auto type_const_id = GetLocalConstantId(resolver, inst.type_id); - auto subpattern_id = GetLocalConstantInstId(resolver, inst.subpattern_id); + auto subpattern = GetLocalImportRefInfo(resolver, inst.subpattern_id); if (resolver.HasNewWork()) { return ResolveResult::Retry(); } - return ResolveResult::Unique( - resolver, import_inst_id, - {.type_id = - resolver.local_types().GetTypeIdForTypeConstantId(type_const_id), - .subpattern_id = subpattern_id, - .type_inst_id = SemIR::TypeInstId::None}); + return ResolveResult::Deduplicated( + resolver, {.type_id = resolver.local_types().GetTypeIdForTypeConstantId( + type_const_id), + .subpattern_id = AddLoadedImportRef(resolver, subpattern), + .type_inst_id = SemIR::TypeInstId::None}); } static auto TryResolveTypedInst(ImportRefResolver& resolver, @@ -3990,20 +4056,17 @@ static auto TryResolveTypedInst(ImportRefResolver& resolver, } static auto TryResolveTypedInst(ImportRefResolver& resolver, - SemIR::TuplePattern inst, - SemIR::InstId import_inst_id) -> ResolveResult { + SemIR::TuplePattern inst) -> ResolveResult { auto type_const_id = GetLocalConstantId(resolver, inst.type_id); - auto elements = GetLocalInstBlockContents(resolver, inst.elements_id); + auto elements = GetLocalBlockImportRefInfo(resolver, inst.elements_id); if (resolver.HasNewWork()) { return ResolveResult::Retry(); } - return ResolveResult::Unique( - resolver, import_inst_id, - {.type_id = - resolver.local_types().GetTypeIdForTypeConstantId(type_const_id), - .elements_id = - GetLocalCanonicalInstBlockId(resolver, inst.elements_id, elements)}); + return ResolveResult::Deduplicated( + resolver, {.type_id = resolver.local_types().GetTypeIdForTypeConstantId( + type_const_id), + .elements_id = AddLoadedImportRefBlock(resolver, elements)}); } static auto TryResolveTypedInst(ImportRefResolver& resolver, @@ -4065,19 +4128,18 @@ static auto TryResolveTypedInst(ImportRefResolver& resolver, template requires SemIR::Internal::HasInstCategory -static auto TryResolveTypedInst(ImportRefResolver& resolver, VarPatternT inst, - SemIR::InstId import_inst_id) -> ResolveResult { +static auto TryResolveTypedInst(ImportRefResolver& resolver, VarPatternT inst) + -> ResolveResult { auto type_const_id = GetLocalConstantId(resolver, inst.type_id); - auto subpattern_id = GetLocalConstantInstId(resolver, inst.subpattern_id); + auto subpattern = GetLocalImportRefInfo(resolver, inst.subpattern_id); if (resolver.HasNewWork()) { return ResolveResult::Retry(); } - return ResolveResult::Unique( - resolver, import_inst_id, - {.type_id = - resolver.local_types().GetTypeIdForTypeConstantId(type_const_id), - .subpattern_id = subpattern_id}); + return ResolveResult::Deduplicated( + resolver, {.type_id = resolver.local_types().GetTypeIdForTypeConstantId( + type_const_id), + .subpattern_id = AddLoadedImportRef(resolver, subpattern)}); } static auto TryResolveTypedInst(ImportRefResolver& resolver, @@ -4292,7 +4354,7 @@ static auto TryResolveInstCanonical(ImportRefResolver& resolver, return TryResolveTypedInst(resolver, inst, constant_inst_id); } case CARBON_KIND(SemIR::OutParamPattern inst): { - return TryResolveTypedInst(resolver, inst, constant_inst_id); + return TryResolveTypedInst(resolver, inst); } case CARBON_KIND(SemIR::PartialType inst): { return TryResolveTypedInst(resolver, inst); @@ -4304,16 +4366,16 @@ static auto TryResolveInstCanonical(ImportRefResolver& resolver, return TryResolveTypedInst(resolver, inst); } case CARBON_KIND(SemIR::RefBindingPattern inst): { - return TryResolveTypedInst(resolver, inst, constant_inst_id); + return TryResolveTypedInst(resolver, inst); } case CARBON_KIND(SemIR::RefForm inst): { return TryResolveTypedInst(resolver, inst); } case CARBON_KIND(SemIR::RefParamPattern inst): { - return TryResolveTypedInst(resolver, inst, constant_inst_id); + return TryResolveTypedInst(resolver, inst); } case CARBON_KIND(SemIR::RefReturnPattern inst): { - return TryResolveTypedInst(resolver, inst, constant_inst_id); + return TryResolveTypedInst(resolver, inst); } case CARBON_KIND(SemIR::RequireCompleteType inst): { return TryResolveTypedInst(resolver, inst); @@ -4322,7 +4384,7 @@ static auto TryResolveInstCanonical(ImportRefResolver& resolver, return TryResolveTypedInst(resolver, inst); } case CARBON_KIND(SemIR::ReturnSlotPattern inst): { - return TryResolveTypedInst(resolver, inst, constant_inst_id); + return TryResolveTypedInst(resolver, inst); } case CARBON_KIND(SemIR::SpecificFunction inst): { return TryResolveTypedInst(resolver, inst); @@ -4340,7 +4402,7 @@ static auto TryResolveInstCanonical(ImportRefResolver& resolver, return TryResolveTypedInst(resolver, inst); } case CARBON_KIND(SemIR::SymbolicBindingPattern inst): { - return TryResolveTypedInst(resolver, inst, constant_inst_id); + return TryResolveTypedInst(resolver, inst); } case CARBON_KIND(SemIR::Temporary inst): { return TryResolveTypedInst(resolver, inst); @@ -4349,7 +4411,7 @@ static auto TryResolveInstCanonical(ImportRefResolver& resolver, return TryResolveTypedInst(resolver, inst); } case CARBON_KIND(SemIR::TuplePattern inst): { - return TryResolveTypedInst(resolver, inst, constant_inst_id); + return TryResolveTypedInst(resolver, inst); } case CARBON_KIND(SemIR::TupleType inst): { return TryResolveTypedInst(resolver, inst); @@ -4361,19 +4423,19 @@ static auto TryResolveInstCanonical(ImportRefResolver& resolver, return TryResolveTypedInst(resolver, inst); } case CARBON_KIND(SemIR::ValueBindingPattern inst): { - return TryResolveTypedInst(resolver, inst, constant_inst_id); + return TryResolveTypedInst(resolver, inst); } case CARBON_KIND(SemIR::ValueParamPattern inst): { - return TryResolveTypedInst(resolver, inst, constant_inst_id); + return TryResolveTypedInst(resolver, inst); } case CARBON_KIND(SemIR::ValueReturnPattern inst): { - return TryResolveTypedInst(resolver, inst, constant_inst_id); + return TryResolveTypedInst(resolver, inst); } case CARBON_KIND(SemIR::VarParamPattern inst): { - return TryResolveTypedInst(resolver, inst, constant_inst_id); + return TryResolveTypedInst(resolver, inst); } case CARBON_KIND(SemIR::VarPattern inst): { - return TryResolveTypedInst(resolver, inst, constant_inst_id); + return TryResolveTypedInst(resolver, inst); } case CARBON_KIND(SemIR::VarStorage inst): { return TryResolveTypedInst(resolver, inst, constant_inst_id); @@ -4385,7 +4447,7 @@ static auto TryResolveInstCanonical(ImportRefResolver& resolver, return TryResolveTypedInst(resolver, inst); } case CARBON_KIND(SemIR::WrapperBindingPattern inst): { - return TryResolveTypedInst(resolver, inst, constant_inst_id); + return TryResolveTypedInst(resolver, inst); } default: // Found a canonical instruction which needs to be resolved, but which is diff --git a/toolchain/check/inst.cpp b/toolchain/check/inst.cpp index 11cfb75c3a41..0664b6c4f42f 100644 --- a/toolchain/check/inst.cpp +++ b/toolchain/check/inst.cpp @@ -271,4 +271,33 @@ auto SetNamespaceNodeId(Context& context, SemIR::InstId inst_id, context.sem_ir().insts().SetLocId(inst_id, SemIR::LocId(node_id)); } +auto WrapInstForSpecific(Context& context, SemIR::LocId loc_id, + SemIR::InstId inst_id, SemIR::SpecificId specific_id) + -> WrapInstForSpecificResult { + auto type_id = + SemIR::GetTypeOfInstInSpecific(context.sem_ir(), specific_id, inst_id); + CARBON_CHECK(type_id.has_value(), "Missing type for {0}", + context.insts().Get(inst_id)); + + // If `inst_id` has a constant value that depends on its specific, store the + // specific too. + if (specific_id.has_value() && + context.constant_values().Get(inst_id).is_symbolic()) { + inst_id = AddInst( + context, loc_id, + {.type_id = type_id, .inst_id = inst_id, .specific_id = specific_id}); + } + return {.inst_id = inst_id, .type_id = type_id}; +} + +auto BuildNameRef(Context& context, SemIR::LocId loc_id, SemIR::NameId name_id, + SemIR::InstId inst_id, SemIR::SpecificId specific_id) + -> SemIR::InstId { + auto [new_inst_id, type_id] = + WrapInstForSpecific(context, loc_id, inst_id, specific_id); + return AddInst( + context, loc_id, + {.type_id = type_id, .name_id = name_id, .value_id = new_inst_id}); +} + } // namespace Carbon::Check diff --git a/toolchain/check/inst.h b/toolchain/check/inst.h index 60bd5c9aba45..26a080d7abb8 100644 --- a/toolchain/check/inst.h +++ b/toolchain/check/inst.h @@ -202,6 +202,29 @@ auto ReplaceInstPreservingConstantValue(Context& context, SemIR::InstId inst_id, auto SetNamespaceNodeId(Context& context, SemIR::InstId inst_id, Parse::NodeId node_id) -> void; +// Result type for `WrapInstForSpecific`. +struct WrapInstForSpecificResult { + SemIR::InstId inst_id; + SemIR::TypeId type_id; +}; + +// Given a potentially generic instruction `inst_id`, this returns an inst ID +// whose constant value is the same as the substituted constant value of +// `inst_id` in `specific_id`. If the result is not `inst_id` itself, it will be +// a newly created inst whose location is `loc_id`. If `specific_id` is `None`, +// it is treated as the self-specific, so `inst_id` is passed through unchanged. +// +// This also returns the type ID of the result, as a convenience for the caller. +auto WrapInstForSpecific(Context& context, SemIR::LocId loc_id, + SemIR::InstId inst_id, SemIR::SpecificId specific_id) + -> WrapInstForSpecificResult; + +// Builds a reference to the given name, which has already been resolved to +// `inst_id` within `specific_id`. +auto BuildNameRef(Context& context, SemIR::LocId loc_id, SemIR::NameId name_id, + SemIR::InstId inst_id, SemIR::SpecificId specific_id) + -> SemIR::InstId; + } // namespace Carbon::Check #endif // CARBON_TOOLCHAIN_CHECK_INST_H_ diff --git a/toolchain/check/member_access.cpp b/toolchain/check/member_access.cpp index d3e1fef1dee0..4b900c418332 100644 --- a/toolchain/check/member_access.cpp +++ b/toolchain/check/member_access.cpp @@ -326,7 +326,7 @@ static auto LookupMemberNameInScope(Context& context, SemIR::LocId loc_id, return SemIR::ErrorInst::InstId; } - // TODO: This duplicates the work that HandleNameAsExpr does. Factor this out. + // TODO: Find a way to use `WrapInstForSpecific` here. auto type_id = SemIR::GetTypeOfInstInSpecific(context.sem_ir(), result.specific_id, result.scope_result.target_inst_id()); diff --git a/toolchain/check/merge.cpp b/toolchain/check/merge.cpp index eefd08b85558..83a96c0499c3 100644 --- a/toolchain/check/merge.cpp +++ b/toolchain/check/merge.cpp @@ -243,7 +243,10 @@ static auto CheckRedeclParam(Context& context, bool is_implicit_param, do { auto patterns = pattern_stack.pop_back_val(); auto new_param_pattern = context.insts().Get(patterns.new_id); - auto prev_param_pattern = context.insts().Get(patterns.prev_id); + auto prev_param_const_id = SemIR::GetConstantValueInSpecific( + context.sem_ir(), prev_specific_id, patterns.prev_id); + auto prev_param_pattern = + context.constant_values().GetInst(prev_param_const_id); if (new_param_pattern.kind() != prev_param_pattern.kind()) { emit_general_diagnostic(); return false; diff --git a/toolchain/check/name_ref.cpp b/toolchain/check/name_ref.cpp deleted file mode 100644 index 741e2d82d100..000000000000 --- a/toolchain/check/name_ref.cpp +++ /dev/null @@ -1,33 +0,0 @@ -// Part of the Carbon Language project, under the Apache License v2.0 with LLVM -// Exceptions. See /LICENSE for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception - -#include "toolchain/check/name_ref.h" - -#include "toolchain/check/inst.h" - -namespace Carbon::Check { - -auto BuildNameRef(Context& context, SemIR::LocId loc_id, SemIR::NameId name_id, - SemIR::InstId inst_id, SemIR::SpecificId specific_id) - -> SemIR::InstId { - auto type_id = - SemIR::GetTypeOfInstInSpecific(context.sem_ir(), specific_id, inst_id); - CARBON_CHECK(type_id.has_value(), "Missing type for {0}", - context.insts().Get(inst_id)); - - // If the named entity has a constant value that depends on its specific, - // store the specific too. - if (specific_id.has_value() && - context.constant_values().Get(inst_id).is_symbolic()) { - inst_id = AddInst( - context, loc_id, - {.type_id = type_id, .inst_id = inst_id, .specific_id = specific_id}); - } - - return AddInst( - context, loc_id, - {.type_id = type_id, .name_id = name_id, .value_id = inst_id}); -} - -} // namespace Carbon::Check diff --git a/toolchain/check/name_ref.h b/toolchain/check/name_ref.h deleted file mode 100644 index 1063ec19440e..000000000000 --- a/toolchain/check/name_ref.h +++ /dev/null @@ -1,21 +0,0 @@ -// Part of the Carbon Language project, under the Apache License v2.0 with LLVM -// Exceptions. See /LICENSE for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception - -#ifndef CARBON_TOOLCHAIN_CHECK_NAME_REF_H_ -#define CARBON_TOOLCHAIN_CHECK_NAME_REF_H_ - -#include "toolchain/check/context.h" -#include "toolchain/sem_ir/ids.h" - -namespace Carbon::Check { - -// Builds a reference to the given name, which has already been resolved to -// `inst_id` within `specific_id`. -auto BuildNameRef(Context& context, SemIR::LocId loc_id, SemIR::NameId name_id, - SemIR::InstId inst_id, SemIR::SpecificId specific_id) - -> SemIR::InstId; - -} // namespace Carbon::Check - -#endif // CARBON_TOOLCHAIN_CHECK_NAME_REF_H_ diff --git a/toolchain/check/pattern.cpp b/toolchain/check/pattern.cpp index 884ed9f25474..59e8b3827587 100644 --- a/toolchain/check/pattern.cpp +++ b/toolchain/check/pattern.cpp @@ -101,9 +101,10 @@ auto AddBindingEntityName(Context& context, SemIR::NameId name_id, return context.entity_names().Add(entity_name); } -auto AddBindingPattern(Context& context, SemIR::LocId name_loc, - SemIR::ExprRegionId type_region_id, - SemIR::AnyBindingPattern pattern) -> BindingPatternInfo { +auto AddBindingForPattern(Context& context, SemIR::LocId name_loc, + SemIR::AnyBindingPattern pattern, + SemIR::TypeId binding_type_id, SemIR::InstId value_id) + -> SemIR::InstId { SemIR::InstKind bind_name_kind; switch (pattern.kind) { case SemIR::RefBindingPattern::Kind: @@ -117,6 +118,10 @@ auto AddBindingPattern(Context& context, SemIR::LocId name_loc, break; case SemIR::WrapperBindingPattern::Kind: { auto subpattern = context.insts().Get(pattern.subpattern_id); + if (subpattern.Is()) { + subpattern = context.constant_values().GetInst( + context.constant_values().Get(pattern.subpattern_id)); + } CARBON_KIND_SWITCH(subpattern) { case SemIR::RefParamPattern::Kind: case SemIR::VarPattern::Kind: @@ -135,7 +140,6 @@ auto AddBindingPattern(Context& context, SemIR::LocId name_loc, CARBON_FATAL("pattern_kind {0} is not a binding pattern kind", pattern.kind); } - auto type_id = SemIR::ExtractScrutineeType(context.sem_ir(), pattern.type_id); // Handle non-static `var` decls in a class by creating a `FieldDecl`. if (InNonStaticFieldDecl(context)) { @@ -145,7 +149,7 @@ auto AddBindingPattern(Context& context, SemIR::LocId name_loc, auto& class_info = context.classes().Get(class_decl->class_id); auto field_type_id = GetUnboundElementType( context, context.types().GetTypeInstId(class_info.self_type_id), - context.types().GetTypeInstId(type_id)); + context.types().GetTypeInstId(binding_type_id)); if (name_id == SemIR::NameId::Underscore) { CARBON_DIAGNOSTIC(FieldNamedUnderscore, Error, @@ -161,25 +165,35 @@ auto AddBindingPattern(Context& context, SemIR::LocId name_loc, {.type_id = field_type_id, .name_id = name_id, .field_id = field_id}); context.field_decls_stack().AppendToTop(field_decl_id); - return {.pattern_id = field_decl_id, .bind_id = field_decl_id}; + return field_decl_id; } auto bind_id = AddInstInNoBlock( context, SemIR::LocIdAndInst::RuntimeVerified( context.sem_ir(), name_loc, SemIR::AnyBinding{.kind = bind_name_kind, - .type_id = type_id, + .type_id = binding_type_id, .entity_name_id = pattern.entity_name_id, - .value_id = SemIR::InstId::None})); - - auto binding_pattern_id = - AddInst(context, SemIR::LocIdAndInst::RuntimeVerified(context.sem_ir(), - name_loc, pattern)); + .value_id = value_id})); if (pattern.kind == SemIR::SymbolicBindingPattern::Kind) { context.scope_stack().PushCompileTimeBinding(bind_id); } + return bind_id; +} + +auto AddBindingPattern(Context& context, SemIR::LocId name_loc, + SemIR::ExprRegionId type_region_id, + SemIR::TypeId scrutinee_type_id, + SemIR::AnyBindingPattern pattern) -> BindingPatternInfo { + auto binding_pattern_id = + AddInst(context, SemIR::LocIdAndInst::RuntimeVerified(context.sem_ir(), + name_loc, pattern)); + auto bind_id = + AddBindingForPattern(context, name_loc, pattern, scrutinee_type_id, + /*value_id=*/SemIR::InstId::None); + bool inserted = context.bind_name_map() .Insert(binding_pattern_id, {.bind_name_id = bind_id, @@ -227,14 +241,17 @@ auto AddPatternVarStorage(Context& context, SemIR::InstBlockId pattern_block_id, auto GetParamPatternKind(Context& context, SemIR::InstId param_inst_id) -> ParamPatternKind { - auto param = context.insts().Get(param_inst_id); - CARBON_CHECK(param.Is()); - if (param.Is()) { - return ParamPatternKind::Ref; - } else if (param.Is()) { - return ParamPatternKind::Var; - } else { - return ParamPatternKind::Value; + auto param = context.insts().Get( + context.constant_values().GetConstantInstId(param_inst_id)); + CARBON_KIND_SWITCH(param) { + case SemIR::RefParamPattern::Kind: + return ParamPatternKind::Ref; + case SemIR::VarParamPattern::Kind: + return ParamPatternKind::Var; + case SemIR::ValueParamPattern::Kind: + return ParamPatternKind::Value; + default: + CARBON_FATAL("Unexpected pattern kind: {0}", param); } } @@ -261,11 +278,12 @@ auto AddParamPattern(Context& context, SemIR::LocId loc_id, auto pattern_type_id = GetPatternType(context, type_id); if (kind == ParamPatternKind::Var) { - auto pattern_id = AddBindingPattern(context, loc_id, type_expr_region_id, - {.kind = SemIR::RefBindingPattern::Kind, - .type_id = pattern_type_id, - .entity_name_id = entity_name_id, - .subpattern_id = SemIR::InstId::None}); + auto pattern_id = + AddBindingPattern(context, loc_id, type_expr_region_id, type_id, + {.kind = SemIR::RefBindingPattern::Kind, + .type_id = pattern_type_id, + .entity_name_id = entity_name_id, + .subpattern_id = SemIR::InstId::None}); return AddInst(context, SemIR::LocIdAndInst::RuntimeVerified( context.sem_ir(), loc_id, SemIR::VarParamPattern{ @@ -279,7 +297,7 @@ auto AddParamPattern(Context& context, SemIR::LocId loc_id, .type_id = pattern_type_id, .pretty_name_id = name_id})); - return AddBindingPattern(context, loc_id, type_expr_region_id, + return AddBindingPattern(context, loc_id, type_expr_region_id, type_id, {.kind = SemIR::WrapperBindingPattern::Kind, .type_id = GetPatternType(context, type_id), .entity_name_id = entity_name_id, diff --git a/toolchain/check/pattern.h b/toolchain/check/pattern.h index 8ca01d6a4b58..380bfd2d5799 100644 --- a/toolchain/check/pattern.h +++ b/toolchain/check/pattern.h @@ -52,12 +52,22 @@ auto AddBindingEntityName(Context& context, SemIR::NameId name_id, BindingPhase phase) -> SemIR::EntityNameId; // Creates a binding pattern and the associated binding inst, and returns their -// IDs. `type_region_id` is the region representing the binding's type -// expression. +// IDs. `scrutinee_type_id` is the type of the binding, and `type_region_id` is +// the region representing that type expression. The binding is added to +// `context.bind_name_map()`, with a placeholder value. auto AddBindingPattern(Context& context, SemIR::LocId name_loc, SemIR::ExprRegionId type_region_id, + SemIR::TypeId scrutinee_type_id, SemIR::AnyBindingPattern pattern) -> BindingPatternInfo; +// Creates a binding inst with the given type and value, to represent the result +// of matching the given binding pattern. The binding is not added to any block, +// or to `context.bind_name_map()`. +auto AddBindingForPattern(Context& context, SemIR::LocId name_loc, + SemIR::AnyBindingPattern pattern, + SemIR::TypeId binding_type_id, SemIR::InstId value_id) + -> SemIR::InstId; + // Creates storage for `var` patterns nested within the given pattern at the // current location in the output SemIR. For a `returned var`, this // reuses the function's return slot when present. diff --git a/toolchain/check/pattern_match.cpp b/toolchain/check/pattern_match.cpp index 03462eaaf465..f3bc8d71a7a0 100644 --- a/toolchain/check/pattern_match.cpp +++ b/toolchain/check/pattern_match.cpp @@ -33,9 +33,6 @@ namespace { struct CallerState { // The in-progress contents of the `Call` arguments block. llvm::SmallVector call_args; - - // The SpecificId of the function being called (if any). - SemIR::SpecificId callee_specific_id; }; // Manages the allocation of call parameter indices. @@ -62,6 +59,15 @@ class IndexSource { // State for callee-side pattern matching. struct CalleeState { + // Pushes an inst onto the list of `Call` parameter patterns whose constant + // value is the substituted constant value of `pattern_id` in `specific_id`. + auto PushCallParamPattern(Context& context, SemIR::LocId loc_id, + SemIR::InstId pattern_id, + SemIR::SpecificId specific_id) -> void { + call_param_patterns.push_back( + WrapInstForSpecific(context, loc_id, pattern_id, specific_id).inst_id); + } + IndexSource index; // The in-progress contents of the `Call` parameters block. @@ -140,8 +146,11 @@ class MatchContext { } }; - // Constructs a MatchContext. - explicit MatchContext(Context& context) : context_(context) {} + // Constructs a MatchContext that uses the substituted constant values of + // patterns in the given specific. + explicit MatchContext(Context& context, + SemIR::SpecificId specific_id = SemIR::SpecificId::None) + : specific_id_stack_({specific_id}), context_(context) {} // Performs pattern matching for the given work item. auto Match(State state, WorkItem entry) -> void; @@ -189,6 +198,10 @@ class MatchContext { SemIR::InstId scrutinee_id, WorkItem entry) -> void; auto DoPreWork(State state, SemIR::SpliceInst splice, SemIR::InstId scrutinee_id, WorkItem entry) -> void; + auto DoPreWork(State state, SemIR::SpecificConstant specific_constant, + SemIR::InstId scrutinee_id, WorkItem entry) -> void; + auto DoPreWork(State state, SemIR::ImportRefLoaded import_ref, + SemIR::InstId scrutinee_id, WorkItem entry) -> void; // Do the post-work for `entry`. `entry.work` must be a `PostWork`, and // the pattern argument must be the value of `entry.pattern_id` in `context_`. @@ -204,15 +217,10 @@ class MatchContext { WorkItem entry) -> void; auto DoPostWork(State state, SemIR::TuplePattern tuple_pattern, WorkItem entry) -> void; - - // Asserts that there is a single inst in the top array in `results_stack_`, - // pops that array, and returns the inst. - auto PopResult() -> SemIR::InstId { - CARBON_CHECK(results_stack_.PeekArray().size() == 1); - auto value_id = results_stack_.PeekArray()[0]; - results_stack_.PopArray(); - return value_id; - } + auto DoPostWork(State state, SemIR::SpecificConstant specific_constant, + WorkItem entry) -> void; + auto DoPostWork(State state, SemIR::ImportRefLoaded import_ref, + WorkItem entry) -> void; // Performs the core logic of matching a variable pattern whose scrutinee // type is `scrutinee_type_id`, but returns the scrutinee that its subpattern @@ -223,6 +231,22 @@ class MatchContext { SemIR::InstId scrutinee_id, WorkItem entry) const -> SemIR::InstId; + // Performs the core logic of matching `entry.scrutinee_id` against the + // constant value of `entry.pattern_id`, rather than against the pattern inst + // itself. Factored out so that it can be reused across all inst kinds that + // can indirectly represent patterns, like `ImportRefLoaded` and + // `SpecificConstant`. + auto DoIndirectPreWorkImpl(State state, WorkItem entry) -> void; + + // Asserts that there is a single inst in the top array in `results_stack_`, + // pops that array, and returns the inst. + auto PopResult() -> SemIR::InstId { + CARBON_CHECK(results_stack_.PeekArray().size() == 1); + auto value_id = results_stack_.PeekArray()[0]; + results_stack_.PopArray(); + return value_id; + } + // The stack of work to be processed. llvm::SmallVector stack_; @@ -230,12 +254,26 @@ class MatchContext { // a single result, which may have multiple sub-results. ArrayStack results_stack_; + // The top of this stack represents the specific that should currently be + // substituted into pattern insts before matching them (if any). This is + // never empty, because the constructor pushes an initial specific that + // should never be popped. + llvm::SmallVector specific_id_stack_; + Context& context_; }; } // namespace auto MatchContext::Match(State state, WorkItem entry) -> void { + Diagnostics::AnnotationScope annotate_diagnostics( + &context_.emitter(), [&](auto& builder) { + if (std::holds_alternative(state)) { + CARBON_DIAGNOSTIC(InCallToFunctionParam, Note, + "initializing function parameter"); + builder.Note(entry.pattern_id, InCallToFunctionParam); + } + }); CARBON_CHECK(stack_.empty()); stack_.push_back(entry); while (!stack_.empty()) { @@ -351,13 +389,54 @@ auto MatchContext::DoPreWork(State state, } } +// Returns the substituted scrutinee type of `pattern_id` in `specific_id`. As +// with `GetTypeOfInstInSpecific`, this does not perform substitution, and it +// accepts `SpecificId::None`, treating it as a request for the value to use +// within the generic itself. +static auto GetScrutineeTypeInSpecific(const Context& context, + SemIR::InstId pattern_id, + SemIR::SpecificId specific_id) + -> SemIR::TypeId { + const auto& sem_ir = context.sem_ir(); + return ExtractScrutineeType( + sem_ir, SemIR::GetTypeOfInstInSpecific(sem_ir, specific_id, pattern_id)); +} + auto MatchContext::DoPostWork(State state, SemIR::AnyBindingPattern binding_pattern, WorkItem entry) -> void { + CARBON_CHECK(!std::holds_alternative(state)); if (std::holds_alternative(state)) { // Pass through the result from the subpattern. return; } + + auto scrutinee_type_id = GetScrutineeTypeInSpecific( + context_, entry.pattern_id, specific_id_stack_.back()); + auto value_id = PopResult(); + if (value_id.has_value()) { + value_id = Convert(context_, SemIR::LocId(value_id), value_id, + {.kind = ConversionKindFor(binding_pattern, entry), + .type_id = scrutinee_type_id}); + } else { + CARBON_CHECK(binding_pattern.kind == SemIR::SymbolicBindingPattern::Kind); + } + + if (need_subpattern_results()) { + results_stack_.AppendToTop(value_id); + } + + if (specific_id_stack_.size() > 1) { + // If anything has been pushed onto the specific stack, that means + // that `binding_pattern` is a constant inst. The bindings for constant + // insts are not precomputed (see the documentation for bind_name_map), so + // we have to emit a new one here. + context_.inst_block_stack().AddInstId( + AddBindingForPattern(context_, SemIR::LocId(entry.pattern_id), + binding_pattern, scrutinee_type_id, value_id)); + return; + } + // We're logically consuming this map entry, so we invalidate it in order // to avoid accidentally consuming it twice. auto [bind_name_id, type_expr_region_id] = @@ -367,34 +446,13 @@ auto MatchContext::DoPostWork(State state, if (type_expr_region_id.has_value()) { InsertHere(context_, type_expr_region_id); } - auto value_id = PopResult(); + CARBON_CHECK(bind_name_id.has_value(), "bind_name_map entry used twice"); - if (value_id.has_value()) { - auto conversion_kind = ConversionKindFor(binding_pattern, entry); - if (!bind_name_id.has_value()) { - // TODO: Is this appropriate, or should we perform a conversion based on - // the category of the `_` binding first, and then separately discard the - // initializer for a `_` binding? - conversion_kind = ConversionTarget::Discarded; - } - value_id = - Convert(context_, SemIR::LocId(value_id), value_id, - {.kind = conversion_kind, - .type_id = context_.insts().Get(bind_name_id).type_id()}); - } else { - CARBON_CHECK(binding_pattern.kind == SemIR::SymbolicBindingPattern::Kind); - } - - if (bind_name_id.has_value()) { - auto bind_name = context_.insts().GetAs(bind_name_id); - CARBON_CHECK(!bind_name.value_id.has_value()); - bind_name.value_id = value_id; - ReplaceInstBeforeConstantUse(context_, bind_name_id, bind_name); - context_.inst_block_stack().AddInstId(bind_name_id); - } - if (need_subpattern_results()) { - results_stack_.AppendToTop(value_id); - } + auto bind_name = context_.insts().GetAs(bind_name_id); + CARBON_CHECK(!bind_name.value_id.has_value()); + bind_name.value_id = value_id; + ReplaceInstBeforeConstantUse(context_, bind_name_id, bind_name); + context_.inst_block_stack().AddInstId(bind_name_id); } // Returns the inst kind to use for the parameter corresponding to the given @@ -413,35 +471,12 @@ static auto ParamKindFor(SemIR::Inst param_pattern) -> SemIR::InstKind { } } -// Returns the applicable specific for patterns handled in the given state. -static auto GetSpecific(State state) -> SemIR::SpecificId { - CARBON_KIND_SWITCH(state) { - case CARBON_KIND(CallerState* caller_state): { - return caller_state->callee_specific_id; - } - default: { - return SemIR::SpecificId::None; - } - } -} - -// Returns the scrutinee type of `pattern_id` in the specific determined by -// `state`. -static auto GetSpecificScrutineeTypeId(const Context& context, State state, - SemIR::InstId pattern_id) - -> SemIR::TypeId { - const auto& sem_ir = context.sem_ir(); - return ExtractScrutineeType( - sem_ir, - SemIR::GetTypeOfInstInSpecific(sem_ir, GetSpecific(state), pattern_id)); -} - auto MatchContext::DoPreWork(State state, SemIR::AnyParamPattern param_pattern, SemIR::InstId scrutinee_id, WorkItem entry) -> void { AddAsPostWork(entry); - auto scrutinee_type_id = - GetSpecificScrutineeTypeId(context_, state, entry.pattern_id); + auto scrutinee_type_id = GetScrutineeTypeInSpecific( + context_, entry.pattern_id, specific_id_stack_.back()); // If `param_pattern` is a `VarParamPattern`, match it as a `VarPattern` here, // and then as a `RefParamPattern` below. @@ -469,8 +504,7 @@ auto MatchContext::DoPreWork(State state, SemIR::AnyParamPattern param_pattern, case CARBON_KIND(CalleeState* callee_state): { SemIR::Inst param = SemIR::AnyParam{.kind = ParamKindFor(param_pattern), - .type_id = ExtractScrutineeType( - context_.sem_ir(), param_pattern.type_id), + .type_id = scrutinee_type_id, .index = callee_state->index.Allocate(), .pretty_name_id = SemIR::GetPrettyNameFromPatternId( context_.sem_ir(), entry.pattern_id)}; @@ -499,8 +533,10 @@ auto MatchContext::DoPreWork(State state, SemIR::AnyParamPattern param_pattern, } else { results_stack_.AppendToTop(param_id); } + + callee_state->PushCallParamPattern(context_, loc_id, entry.pattern_id, + specific_id_stack_.back()); callee_state->call_params.push_back(param_id); - callee_state->call_param_patterns.push_back(entry.pattern_id); break; } case CARBON_KIND(ThunkState* thunk_state): { @@ -579,11 +615,11 @@ auto MatchContext::DoPreWork(State state, } auto MatchContext::DoPostWork(State state, - SemIR::ReturnSlotPattern return_slot_pattern, + SemIR::ReturnSlotPattern /*return_slot_pattern*/, WorkItem entry) -> void { CARBON_CHECK(std::holds_alternative(state)); - auto type_id = - ExtractScrutineeType(context_.sem_ir(), return_slot_pattern.type_id); + auto type_id = GetScrutineeTypeInSpecific(context_, entry.pattern_id, + specific_id_stack_.back()); auto return_slot_id = AddInst( context_, SemIR::LocId(entry.pattern_id), {.type_id = type_id, @@ -602,8 +638,8 @@ auto MatchContext::DoPostWork(State state, auto MatchContext::DoPreWork(State state, SemIR::VarPattern var_pattern, SemIR::InstId scrutinee_id, WorkItem entry) -> void { - auto scrutinee_type_id = - GetSpecificScrutineeTypeId(context_, state, entry.pattern_id); + auto scrutinee_type_id = GetScrutineeTypeInSpecific( + context_, entry.pattern_id, specific_id_stack_.back()); auto new_scrutinee_id = DoVarPreWorkImpl(state, scrutinee_type_id, scrutinee_id, entry); if (need_subpattern_results()) { @@ -737,8 +773,8 @@ auto MatchContext::DoPreWork(State state, SemIR::TuplePattern tuple_pattern, return; } - auto tuple_type_id = - ExtractScrutineeType(context_.sem_ir(), tuple_pattern.type_id); + auto tuple_type_id = GetScrutineeTypeInSpecific(context_, entry.pattern_id, + specific_id_stack_.back()); auto converted_scrutinee_id = ConvertToValueOrRefOfType( context_, SemIR::LocId(entry.pattern_id), scrutinee_id, tuple_type_id); if (auto scrutinee_value = context_.insts().TryGetAs( @@ -765,15 +801,15 @@ auto MatchContext::DoPreWork(State state, SemIR::TuplePattern tuple_pattern, } auto MatchContext::DoPostWork(State /*state*/, - SemIR::TuplePattern tuple_pattern, WorkItem entry) - -> void { + SemIR::TuplePattern /*tuple_pattern*/, + WorkItem entry) -> void { auto elements_id = context_.inst_blocks().Add(results_stack_.PeekArray()); results_stack_.PopArray(); - auto tuple_value_id = - AddInst(context_, SemIR::LocId(entry.pattern_id), - {.type_id = SemIR::ExtractScrutineeType( - context_.sem_ir(), tuple_pattern.type_id), - .elements_id = elements_id}); + auto tuple_value_id = AddInst( + context_, SemIR::LocId(entry.pattern_id), + {.type_id = GetScrutineeTypeInSpecific(context_, entry.pattern_id, + specific_id_stack_.back()), + .elements_id = elements_id}); results_stack_.AppendToTop(tuple_value_id); } @@ -800,7 +836,9 @@ auto MatchContext::DoPreWork(State state, SemIR::SpliceInst splice, context_.bundles().Add( {.pattern_id = entry.pattern_id, .parent_index = callee_state->index.Allocate()})}); - callee_state->call_param_patterns.push_back(entry.pattern_id); + callee_state->PushCallParamPattern( + context_, SemIR::LocId(entry.pattern_id), entry.pattern_id, + specific_id_stack_.back()); callee_state->call_params.push_back(result_id); results_stack_.AppendToTop(result_id); } @@ -813,8 +851,8 @@ auto MatchContext::DoPreWork(State state, -> void { CARBON_CHECK(std::holds_alternative(state)); if (need_subpattern_results()) { - auto type_id = - ExtractScrutineeType(context_.sem_ir(), return_pattern.type_id); + auto type_id = GetScrutineeTypeInSpecific(context_, entry.pattern_id, + specific_id_stack_.back()); SemIR::InstKind result_kind = return_pattern.kind == SemIR::RefReturnPattern::Kind ? SemIR::RefReturn::Kind @@ -827,6 +865,55 @@ auto MatchContext::DoPreWork(State state, } } +auto MatchContext::DoIndirectPreWorkImpl(State state, WorkItem entry) -> void { + CARBON_CHECK(!std::holds_alternative(state)); + AddAsPostWork(entry); + auto constant_id = SemIR::GetConstantValueInSpecific( + context_.sem_ir(), specific_id_stack_.back(), entry.pattern_id); + entry.pattern_id = context_.constant_values().GetInstId(constant_id); + // Now that we've substituted the current specific into the underlying + // pattern, we shouldn't try to redundantly reapply that specific while + // matching it. + specific_id_stack_.push_back(SemIR::SpecificId::None); + AddWork(entry); +} + +auto MatchContext::DoPreWork(State state, + SemIR::SpecificConstant specific_constant, + SemIR::InstId /*scrutinee_id*/, WorkItem entry) + -> void { + if (std::holds_alternative(state)) { + // In callee pattern matching, we need to produce call parameter patterns + // with the SpecificConstant's specific substituted into them, so we need + // to defer substitution until that point. Instead, we treat that specific + // as the current specific while traversing the underlying inst. + AddAsPostWork(entry); + entry.pattern_id = specific_constant.inst_id; + specific_id_stack_.push_back(specific_constant.specific_id); + AddWork(entry); + } else { + DoIndirectPreWorkImpl(state, entry); + } +} + +auto MatchContext::DoPostWork(State /*state*/, + SemIR::SpecificConstant /*specific_constant*/, + WorkItem /*entry*/) -> void { + specific_id_stack_.pop_back(); +} + +auto MatchContext::DoPreWork(State state, SemIR::ImportRefLoaded /*import_ref*/, + SemIR::InstId /*scrutinee_id*/, WorkItem entry) + -> void { + DoIndirectPreWorkImpl(state, entry); +} + +auto MatchContext::DoPostWork(State /*state*/, + SemIR::ImportRefLoaded /*import_ref*/, + WorkItem /*entry*/) -> void { + specific_id_stack_.pop_back(); +} + auto MatchContext::Dispatch(State state, WorkItem entry) -> void { if (entry.pattern_id == SemIR::ErrorInst::InstId) { if (need_subpattern_results()) { @@ -834,14 +921,6 @@ auto MatchContext::Dispatch(State state, WorkItem entry) -> void { } return; } - Diagnostics::AnnotationScope annotate_diagnostics( - &context_.emitter(), [&](auto& builder) { - if (std::holds_alternative(state)) { - CARBON_DIAGNOSTIC(InCallToFunctionParam, Note, - "initializing function parameter"); - builder.Note(entry.pattern_id, InCallToFunctionParam); - } - }); auto pattern = context_.insts().Get(entry.pattern_id); CARBON_KIND_SWITCH(entry.work) { case CARBON_KIND(PreWork work): { @@ -885,6 +964,14 @@ auto MatchContext::Dispatch(State state, WorkItem entry) -> void { DoPreWork(state, splice_inst, work.scrutinee_id, entry); break; } + case CARBON_KIND(SemIR::SpecificConstant specific_constant): { + DoPreWork(state, specific_constant, work.scrutinee_id, entry); + break; + } + case CARBON_KIND(SemIR::ImportRefLoaded import_ref): { + DoPreWork(state, import_ref, work.scrutinee_id, entry); + break; + } default: { CARBON_FATAL("Inst kind not handled: {0}", pattern.kind()); } @@ -917,6 +1004,14 @@ auto MatchContext::Dispatch(State state, WorkItem entry) -> void { DoPostWork(state, tuple_pattern, entry); break; } + case CARBON_KIND(SemIR::SpecificConstant specific_constant): { + DoPostWork(state, specific_constant, entry); + break; + } + case CARBON_KIND(SemIR::ImportRefLoaded import_ref): { + DoPostWork(state, import_ref, entry); + break; + } default: { CARBON_FATAL("Inst kind not handled: {0}", pattern.kind()); } @@ -1025,8 +1120,8 @@ auto CallerPatternMatch(Context& context, SemIR::SpecificId specific_id, llvm::ArrayRef arg_refs, SemIR::InstId return_arg_id, bool is_desugared) -> SemIR::InstBlockId { - CallerState state = {.callee_specific_id = specific_id}; - MatchContext match(context); + CallerState state; + MatchContext match(context, specific_id); // When we have a separate `self_arg_id`, we concatenate that onto the front // of the arg_refs to match against the first parameter. diff --git a/toolchain/check/pattern_match.h b/toolchain/check/pattern_match.h index 914f00a8a625..393f67fea8af 100644 --- a/toolchain/check/pattern_match.h +++ b/toolchain/check/pattern_match.h @@ -36,6 +36,10 @@ struct CalleePatternMatchResults { // Returns the IDs of inst blocks consisting of references to the `Call` // parameter patterns and `Call` parameters of the function, as well as // the implicit, explicit, and return index ranges of those blocks. +// +// In some circumstances this can add new pattern insts, so the pattern +// block containing the parameter patterns should still be on top of +// `context.pattern_block_stack()`. auto CalleePatternMatch(Context& context, SemIR::InstBlockId implicit_param_patterns_id, SemIR::InstBlockId param_patterns_id, @@ -54,9 +58,9 @@ struct ThunkPatternMatchResults { llvm::ArrayRef ignored_call_args; }; -// Given the `Call` arguments for the outer part of a thunked function call, -// computes the corresponding syntactic argument list, suitable for passing to -// the inner part of the thunked function call. +// Given the syntactic parameters and `Call` arguments for the outer part of a +// thunked function call, computes the corresponding syntactic argument list, +// suitable for passing to the inner part of the thunked function call. auto ThunkPatternMatch(Context& context, llvm::ArrayRef param_pattern_ids, llvm::ArrayRef outer_call_args) diff --git a/toolchain/check/testdata/alias/basics.carbon b/toolchain/check/testdata/alias/basics.carbon index c3a6a418144d..4187938e1516 100644 --- a/toolchain/check/testdata/alias/basics.carbon +++ b/toolchain/check/testdata/alias/basics.carbon @@ -177,6 +177,7 @@ extern alias C = Class; // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type = value_binding_pattern d [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %.115: ref %C = temporary invalid, %C.val [concrete] @@ -190,14 +191,14 @@ extern alias C = Class; // CHECK:STDOUT: %b.ref: type = name_ref b, %b [concrete = constants.%C] // CHECK:STDOUT: %c: type = alias_binding c, %b.ref [concrete = constants.%C] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type = value_binding_pattern d [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type = value_binding_pattern d [concrete = constants.%d.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %c.ref: type = name_ref c, %c [concrete = constants.%C] // CHECK:STDOUT: %.loc10_13.1: ref %C = temporary_storage // CHECK:STDOUT: %.loc10_13.2: init %C to %.loc10_13.1 = class_init () [concrete = constants.%C.val] // CHECK:STDOUT: %.loc10_13.3: init %C = converted @__global_init.%.loc10, %.loc10_13.2 [concrete = constants.%C.val] // CHECK:STDOUT: %.loc10_13.4: ref %C = temporary %.loc10_13.1, %.loc10_13.3 [concrete = constants.%.115] // CHECK:STDOUT: %.loc10_13.5: %C = acquire_value %.loc10_13.4 [concrete = constants.%C.val] +// CHECK:STDOUT: %c.ref: type = name_ref c, %c [concrete = constants.%C] // CHECK:STDOUT: %d: %C = value_binding d, %.loc10_13.5 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/alias/builtins.carbon b/toolchain/check/testdata/alias/builtins.carbon index 74555a8ab38b..8332956a1d4c 100644 --- a/toolchain/check/testdata/alias/builtins.carbon +++ b/toolchain/check/testdata/alias/builtins.carbon @@ -60,13 +60,14 @@ let a_test: bool = a; // CHECK:STDOUT: constants { // CHECK:STDOUT: %false: bool = bool_literal false [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type bool [concrete] +// CHECK:STDOUT: %a_test.patt: %pattern_type = value_binding_pattern a_test [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %false: bool = bool_literal false [concrete = constants.%false] // CHECK:STDOUT: %a: bool = alias_binding a, %false [concrete = constants.%false] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a_test.patt: %pattern_type = value_binding_pattern a_test [concrete] +// CHECK:STDOUT: %a_test.patt: %pattern_type = value_binding_pattern a_test [concrete = constants.%a_test.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc7: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %a_test: bool = value_binding a_test, @__global_init.%a.ref diff --git a/toolchain/check/testdata/alias/export_name.carbon b/toolchain/check/testdata/alias/export_name.carbon index d994e2ff56f0..17f10418f609 100644 --- a/toolchain/check/testdata/alias/export_name.carbon +++ b/toolchain/check/testdata/alias/export_name.carbon @@ -188,6 +188,8 @@ var d: D* = &c; // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type = ref_binding_pattern d [concrete] +// CHECK:STDOUT: %d.var_patt: %pattern_type = var_pattern %d.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: } @@ -211,8 +213,8 @@ var d: D* = &c; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type = ref_binding_pattern d [concrete] -// CHECK:STDOUT: %d.var_patt: %pattern_type = var_pattern %d.patt [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type = ref_binding_pattern d [concrete = constants.%d.patt] +// CHECK:STDOUT: %d.var_patt: %pattern_type = var_pattern %d.patt [concrete = constants.%d.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %C = var %d.var_patt [concrete] // CHECK:STDOUT: %D.ref: type = name_ref D, imports.%Main.D [concrete = constants.%C] @@ -260,8 +262,8 @@ var d: D* = &c; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: = ref_binding_pattern c [concrete = ] +// CHECK:STDOUT: %c.var_patt: = var_pattern %c.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref = var %c.var_patt [concrete = ] // CHECK:STDOUT: %C.ref: = name_ref C, [concrete = ] @@ -282,10 +284,14 @@ var d: D* = &c; // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %ptr.6b6: type = ptr_type %C [concrete] // CHECK:STDOUT: %pattern_type.fcb: type = pattern_type %ptr.6b6 [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.fcb = ref_binding_pattern d [concrete] +// CHECK:STDOUT: %d.var_patt: %pattern_type.fcb = var_pattern %d.patt [concrete] // CHECK:STDOUT: %addr: %ptr.6b6 = addr_of file.%c.var [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] @@ -328,15 +334,15 @@ var d: D* = &c; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt [concrete] // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %c: ref %C = ref_binding c, %c.var [concrete = %c.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.fcb = ref_binding_pattern d [concrete] -// CHECK:STDOUT: %d.var_patt: %pattern_type.fcb = var_pattern %d.patt [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.fcb = ref_binding_pattern d [concrete = constants.%d.patt] +// CHECK:STDOUT: %d.var_patt: %pattern_type.fcb = var_pattern %d.patt [concrete = constants.%d.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %ptr.6b6 = var %d.var_patt [concrete] // CHECK:STDOUT: %.loc8: type = splice_block %ptr [concrete = constants.%ptr.6b6] { diff --git a/toolchain/check/testdata/alias/import.carbon b/toolchain/check/testdata/alias/import.carbon index e8557b9270c1..6813ccef4278 100644 --- a/toolchain/check/testdata/alias/import.carbon +++ b/toolchain/check/testdata/alias/import.carbon @@ -73,6 +73,8 @@ var c: () = a_alias_alias; // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %C [concrete] // CHECK:STDOUT: %pattern_type.fcb: type = pattern_type %ptr [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.fcb = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.fcb = var_pattern %a.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.150: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] @@ -107,8 +109,8 @@ var c: () = a_alias_alias; // CHECK:STDOUT: %C.ref.loc6: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %c_alias: type = alias_binding c_alias, %C.ref.loc6 [concrete = constants.%C] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.fcb = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.fcb = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.fcb = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.fcb = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %ptr = var %a.var_patt [concrete] // CHECK:STDOUT: %.loc8: type = splice_block %ptr [concrete = constants.%ptr] { @@ -146,6 +148,8 @@ var c: () = a_alias_alias; // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %C [concrete] // CHECK:STDOUT: %pattern_type.fcb: type = pattern_type %ptr [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.fcb = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.fcb = var_pattern %b.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.150: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] @@ -187,8 +191,8 @@ var c: () = a_alias_alias; // CHECK:STDOUT: %c_alias.ref.loc6: type = name_ref c_alias, imports.%Main.c_alias [concrete = constants.%C] // CHECK:STDOUT: %c_alias_alias: type = alias_binding c_alias_alias, %c_alias.ref.loc6 [concrete = constants.%C] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.fcb = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.fcb = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.fcb = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type.fcb = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %ptr = var %b.var_patt [concrete] // CHECK:STDOUT: %.loc8: type = splice_block %ptr [concrete = constants.%ptr] { @@ -225,6 +229,8 @@ var c: () = a_alias_alias; // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %C [concrete] // CHECK:STDOUT: %pattern_type.fcb: type = pattern_type %ptr [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.fcb = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.fcb = var_pattern %c.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.150: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] @@ -261,8 +267,8 @@ var c: () = a_alias_alias; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.fcb = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.fcb = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.fcb = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type.fcb = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %ptr = var %c.var_patt [concrete] // CHECK:STDOUT: %.loc6: type = splice_block %ptr [concrete = constants.%ptr] { @@ -297,6 +303,8 @@ var c: () = a_alias_alias; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type = var_pattern %a.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -314,8 +322,8 @@ var c: () = a_alias_alias; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %empty_tuple.type = var %a.var_patt [concrete] // CHECK:STDOUT: %.loc4_9.1: type = splice_block %.loc4_9.3 [concrete = constants.%empty_tuple.type] { @@ -341,7 +349,11 @@ var c: () = a_alias_alias; // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type = var_pattern %a.patt [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type = var_pattern %b.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -351,9 +363,7 @@ var c: () = a_alias_alias; // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } -// CHECK:STDOUT: %a.patt: %pattern_type = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type = var_pattern %a.patt [concrete] -// CHECK:STDOUT: %a.var: ref %empty_tuple.type = var %a.var_patt [concrete] +// CHECK:STDOUT: %a.var: ref %empty_tuple.type = var constants.%a.var_patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -369,8 +379,8 @@ var c: () = a_alias_alias; // CHECK:STDOUT: %a_alias.ref: ref %empty_tuple.type = name_ref a_alias, imports.%Main.a_alias [concrete = imports.%a.var] // CHECK:STDOUT: %a_alias_alias: ref %empty_tuple.type = alias_binding a_alias_alias, %a_alias.ref [concrete = imports.%a.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %empty_tuple.type = var %b.var_patt [concrete] // CHECK:STDOUT: %.loc8_9.1: type = splice_block %.loc8_9.3 [concrete = constants.%empty_tuple.type] { @@ -395,6 +405,10 @@ var c: () = a_alias_alias; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type = var_pattern %a.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -404,9 +418,7 @@ var c: () = a_alias_alias; // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } -// CHECK:STDOUT: %a.patt: %pattern_type = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type = var_pattern %a.patt [concrete] -// CHECK:STDOUT: %a.var: ref %empty_tuple.type = var %a.var_patt [concrete] +// CHECK:STDOUT: %a.var: ref %empty_tuple.type = var constants.%a.var_patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -419,8 +431,8 @@ var c: () = a_alias_alias; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %empty_tuple.type = var %c.var_patt [concrete] // CHECK:STDOUT: %.loc6_9.1: type = splice_block %.loc6_9.3 [concrete = constants.%empty_tuple.type] { diff --git a/toolchain/check/testdata/alias/import_access.carbon b/toolchain/check/testdata/alias/import_access.carbon index ec8265b4e1c0..7ae4b4b2a672 100644 --- a/toolchain/check/testdata/alias/import_access.carbon +++ b/toolchain/check/testdata/alias/import_access.carbon @@ -89,6 +89,8 @@ var inst: Test.A = {}; // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %inst.patt: %pattern_type = ref_binding_pattern inst [concrete] +// CHECK:STDOUT: %inst.var_patt: %pattern_type = var_pattern %inst.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: } @@ -109,8 +111,8 @@ var inst: Test.A = {}; // CHECK:STDOUT: %Test.import = import Test // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %inst.patt: %pattern_type = ref_binding_pattern inst [concrete] -// CHECK:STDOUT: %inst.var_patt: %pattern_type = var_pattern %inst.patt [concrete] +// CHECK:STDOUT: %inst.patt: %pattern_type = ref_binding_pattern inst [concrete = constants.%inst.patt] +// CHECK:STDOUT: %inst.var_patt: %pattern_type = var_pattern %inst.patt [concrete = constants.%inst.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %inst.var: ref %C = var %inst.var_patt [concrete] // CHECK:STDOUT: %A.ref: type = name_ref A, imports.%Test.A [concrete = constants.%C] @@ -152,8 +154,8 @@ var inst: Test.A = {}; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %inst.patt: = ref_binding_pattern inst [concrete] -// CHECK:STDOUT: %inst.var_patt: = var_pattern %inst.patt [concrete] +// CHECK:STDOUT: %inst.patt: = ref_binding_pattern inst [concrete = ] +// CHECK:STDOUT: %inst.var_patt: = var_pattern %inst.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %inst.var: ref = var %inst.var_patt [concrete = ] // CHECK:STDOUT: %A.ref: = name_ref A, [concrete = ] @@ -188,8 +190,8 @@ var inst: Test.A = {}; // CHECK:STDOUT: } // CHECK:STDOUT: %Test.import = import Test // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %inst.patt: = ref_binding_pattern inst [concrete] -// CHECK:STDOUT: %inst.var_patt: = var_pattern %inst.patt [concrete] +// CHECK:STDOUT: %inst.patt: = ref_binding_pattern inst [concrete = ] +// CHECK:STDOUT: %inst.var_patt: = var_pattern %inst.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %inst.var: ref = var %inst.var_patt [concrete = ] // CHECK:STDOUT: %.1: = splice_block [concrete = ] { diff --git a/toolchain/check/testdata/alias/import_order.carbon b/toolchain/check/testdata/alias/import_order.carbon index 77ca4dd72ce4..b705c8ae7243 100644 --- a/toolchain/check/testdata/alias/import_order.carbon +++ b/toolchain/check/testdata/alias/import_order.carbon @@ -80,15 +80,23 @@ var a_val: a = {.v = b_val.v}; // CHECK:STDOUT: %struct_type.v: type = struct_type {.v: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.v [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %d_val.patt: %pattern_type = ref_binding_pattern d_val [concrete] +// CHECK:STDOUT: %d_val.var_patt: %pattern_type = var_pattern %d_val.patt [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %struct.5f2: %struct_type.v = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %.30c: ref %empty_tuple.type = class_element_access file.%d_val.var, element0 [concrete] // CHECK:STDOUT: %C.val: %C = struct_value (%empty_tuple) [concrete] +// CHECK:STDOUT: %c_val.patt: %pattern_type = ref_binding_pattern c_val [concrete] +// CHECK:STDOUT: %c_val.var_patt: %pattern_type = var_pattern %c_val.patt [concrete] // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %empty_tuple.type [concrete] // CHECK:STDOUT: %struct.1dc: %struct_type.v = struct_value (%.30c) [concrete] // CHECK:STDOUT: %.0bf: ref %empty_tuple.type = class_element_access file.%c_val.var, element0 [concrete] +// CHECK:STDOUT: %b_val.patt: %pattern_type = ref_binding_pattern b_val [concrete] +// CHECK:STDOUT: %b_val.var_patt: %pattern_type = var_pattern %b_val.patt [concrete] // CHECK:STDOUT: %struct.2e7: %struct_type.v = struct_value (%.0bf) [concrete] // CHECK:STDOUT: %.9b2: ref %empty_tuple.type = class_element_access file.%b_val.var, element0 [concrete] +// CHECK:STDOUT: %a_val.patt: %pattern_type = ref_binding_pattern a_val [concrete] +// CHECK:STDOUT: %a_val.var_patt: %pattern_type = var_pattern %a_val.patt [concrete] // CHECK:STDOUT: %struct.8ba: %struct_type.v = struct_value (%.9b2) [concrete] // CHECK:STDOUT: %.028: ref %empty_tuple.type = class_element_access file.%a_val.var, element0 [concrete] // CHECK:STDOUT: } @@ -119,29 +127,29 @@ var a_val: a = {.v = b_val.v}; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d_val.patt: %pattern_type = ref_binding_pattern d_val [concrete] -// CHECK:STDOUT: %d_val.var_patt: %pattern_type = var_pattern %d_val.patt [concrete] +// CHECK:STDOUT: %d_val.patt: %pattern_type = ref_binding_pattern d_val [concrete = constants.%d_val.patt] +// CHECK:STDOUT: %d_val.var_patt: %pattern_type = var_pattern %d_val.patt [concrete = constants.%d_val.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %d_val.var: ref %C = var %d_val.var_patt [concrete] // CHECK:STDOUT: %d.ref: type = name_ref d, imports.%Main.d [concrete = constants.%C] // CHECK:STDOUT: %d_val: ref %C = ref_binding d_val, %d_val.var [concrete = %d_val.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c_val.patt: %pattern_type = ref_binding_pattern c_val [concrete] -// CHECK:STDOUT: %c_val.var_patt: %pattern_type = var_pattern %c_val.patt [concrete] +// CHECK:STDOUT: %c_val.patt: %pattern_type = ref_binding_pattern c_val [concrete = constants.%c_val.patt] +// CHECK:STDOUT: %c_val.var_patt: %pattern_type = var_pattern %c_val.patt [concrete = constants.%c_val.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c_val.var: ref %C = var %c_val.var_patt [concrete] // CHECK:STDOUT: %c.ref: type = name_ref c, imports.%Main.c [concrete = constants.%C] // CHECK:STDOUT: %c_val: ref %C = ref_binding c_val, %c_val.var [concrete = %c_val.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b_val.patt: %pattern_type = ref_binding_pattern b_val [concrete] -// CHECK:STDOUT: %b_val.var_patt: %pattern_type = var_pattern %b_val.patt [concrete] +// CHECK:STDOUT: %b_val.patt: %pattern_type = ref_binding_pattern b_val [concrete = constants.%b_val.patt] +// CHECK:STDOUT: %b_val.var_patt: %pattern_type = var_pattern %b_val.patt [concrete = constants.%b_val.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b_val.var: ref %C = var %b_val.var_patt [concrete] // CHECK:STDOUT: %b.ref: type = name_ref b, imports.%Main.b [concrete = constants.%C] // CHECK:STDOUT: %b_val: ref %C = ref_binding b_val, %b_val.var [concrete = %b_val.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a_val.patt: %pattern_type = ref_binding_pattern a_val [concrete] -// CHECK:STDOUT: %a_val.var_patt: %pattern_type = var_pattern %a_val.patt [concrete] +// CHECK:STDOUT: %a_val.patt: %pattern_type = ref_binding_pattern a_val [concrete = constants.%a_val.patt] +// CHECK:STDOUT: %a_val.var_patt: %pattern_type = var_pattern %a_val.patt [concrete = constants.%a_val.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a_val.var: ref %C = var %a_val.var_patt [concrete] // CHECK:STDOUT: %a.ref: type = name_ref a, imports.%Main.a [concrete = constants.%C] diff --git a/toolchain/check/testdata/array/basics.carbon b/toolchain/check/testdata/array/basics.carbon index cfb459907ae8..30b47c38b11e 100644 --- a/toolchain/check/testdata/array/basics.carbon +++ b/toolchain/check/testdata/array/basics.carbon @@ -114,6 +114,8 @@ var a: array(1, 1); // CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_3, %empty_tuple.type [concrete] // CHECK:STDOUT: %pattern_type.035: type = pattern_type %array_type [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.035 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.035 = var_pattern %b.patt [concrete] // CHECK:STDOUT: %tuple.elem0: ref %empty_tuple.type = tuple_access file.%a.var, element0 [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %tuple.elem1: ref %empty_tuple.type = tuple_access file.%a.var, element1 [concrete] @@ -125,8 +127,8 @@ var a: array(1, 1); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.035 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.035 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.035 = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type.035 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %array_type = var %b.var_patt [concrete] // CHECK:STDOUT: %.loc6_19: type = splice_block %array_type [concrete = constants.%array_type] { @@ -180,6 +182,8 @@ var a: array(1, 1); // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_2, %tuple.type.a8c [concrete] // CHECK:STDOUT: %pattern_type.c3e: type = pattern_type %array_type [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.c3e = ref_binding_pattern v [concrete] +// CHECK:STDOUT: %v.var_patt: %pattern_type.c3e = var_pattern %v.patt [concrete] // CHECK:STDOUT: %tuple.type.8c7: type = tuple_type (%tuple.type.a8c, %tuple.type.a8c) [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] @@ -190,8 +194,8 @@ var a: array(1, 1); // CHECK:STDOUT: fn @G() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %pattern_type.c3e = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: %pattern_type.c3e = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.c3e = ref_binding_pattern v [concrete = constants.%v.patt] +// CHECK:STDOUT: %v.var_patt: %pattern_type.c3e = var_pattern %v.patt [concrete = constants.%v.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %array_type = var %v.var_patt // CHECK:STDOUT: %F.ref.loc10_40: %F.type = name_ref F, file.%F.decl [concrete = constants.%F] @@ -250,6 +254,8 @@ var a: array(1, 1); // CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_3, %empty_tuple.type [concrete] // CHECK:STDOUT: %pattern_type.035: type = pattern_type %array_type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.035 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.035 = var_pattern %a.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.150: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] @@ -259,6 +265,8 @@ var a: array(1, 1); // CHECK:STDOUT: %tuple.type: type = tuple_type (%empty_tuple.type, %empty_tuple.type, %empty_tuple.type) [concrete] // CHECK:STDOUT: %tuple: %tuple.type = tuple_value (%empty_tuple, %empty_tuple, %empty_tuple) [concrete] // CHECK:STDOUT: %pattern_type.8c1: type = pattern_type %tuple.type [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.8c1 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.8c1 = var_pattern %b.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.impl_witness.762: = impl_witness imports.%DefaultOrUnformed.impl_witness_table.374, @T.as.DefaultOrUnformed.impl(%tuple.type) [concrete] // CHECK:STDOUT: %DefaultOrUnformed.facet.38b: %DefaultOrUnformed.type = facet_value %tuple.type, (%DefaultOrUnformed.impl_witness.762) [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.2: type = fn_type @Destroy.Op.loc8_3.2 [concrete] @@ -275,8 +283,8 @@ var a: array(1, 1); // CHECK:STDOUT: fn @G() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.035 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.035 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.035 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.035 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type = var %a.var_patt // CHECK:STDOUT: %DefaultOrUnformed.facet.loc7: %DefaultOrUnformed.type = facet_value constants.%array_type, (constants.%DefaultOrUnformed.impl_witness.3c6) [concrete = constants.%DefaultOrUnformed.facet.b2c] @@ -295,8 +303,8 @@ var a: array(1, 1); // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %array_type = ref_binding a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.8c1 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.8c1 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.8c1 = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type.8c1 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %tuple.type = var %b.var_patt // CHECK:STDOUT: %DefaultOrUnformed.facet.loc8: %DefaultOrUnformed.type = facet_value constants.%tuple.type, (constants.%DefaultOrUnformed.impl_witness.762) [concrete = constants.%DefaultOrUnformed.facet.38b] @@ -348,6 +356,8 @@ var a: array(1, 1); // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_1, %empty_tuple.type [concrete] // CHECK:STDOUT: %pattern_type.fe8: type = pattern_type %array_type [concrete] +// CHECK:STDOUT: %t.patt: %pattern_type.fe8 = ref_binding_pattern t [concrete] +// CHECK:STDOUT: %t.var_patt: %pattern_type.fe8 = var_pattern %t.patt [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %array: %array_type = tuple_value (%empty_tuple) [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.2: type = fn_type @Destroy.Op.loc8_34.2 [concrete] @@ -359,8 +369,8 @@ var a: array(1, 1); // CHECK:STDOUT: fn @Run() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %t.patt: %pattern_type.fe8 = ref_binding_pattern t [concrete] -// CHECK:STDOUT: %t.var_patt: %pattern_type.fe8 = var_pattern %t.patt [concrete] +// CHECK:STDOUT: %t.patt: %pattern_type.fe8 = ref_binding_pattern t [concrete = constants.%t.patt] +// CHECK:STDOUT: %t.var_patt: %pattern_type.fe8 = var_pattern %t.patt [concrete = constants.%t.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %t.var: ref %array_type = var %t.var_patt // CHECK:STDOUT: %F.ref: %F.type = name_ref F, file.%F.decl [concrete = constants.%F] @@ -420,6 +430,8 @@ var a: array(1, 1); // CHECK:STDOUT: %int_9: Core.IntLiteral = int_value 9 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_9, %empty_tuple.type [concrete] // CHECK:STDOUT: %pattern_type.3db: type = pattern_type %array_type [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.3db = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.3db = var_pattern %b.patt [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete] @@ -434,8 +446,8 @@ var a: array(1, 1); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.3db = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.3db = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.3db = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type.3db = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %array_type = var %b.var_patt [concrete] // CHECK:STDOUT: %.loc9_19: type = splice_block %array_type [concrete = constants.%array_type] { diff --git a/toolchain/check/testdata/array/import.carbon b/toolchain/check/testdata/array/import.carbon index e18d12c96bab..a8f20ffc66ac 100644 --- a/toolchain/check/testdata/array/import.carbon +++ b/toolchain/check/testdata/array/import.carbon @@ -121,6 +121,7 @@ fn F() -> i32 { // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_1.5b8, %i32 [concrete] // CHECK:STDOUT: %pattern_type.97e: type = pattern_type %array_type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.97e = value_binding_pattern a [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] // CHECK:STDOUT: %int_1.0c6: %i32 = int_value 1 [concrete] @@ -144,7 +145,7 @@ fn F() -> i32 { // CHECK:STDOUT: fn @F() -> out %return.param: %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.97e = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.97e = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %I.ref: type = name_ref I, imports.%Main.I [concrete = constants.%I.type] diff --git a/toolchain/check/testdata/array/init_dependent_bound.carbon b/toolchain/check/testdata/array/init_dependent_bound.carbon index 946324fd8bee..56d1d88f9047 100644 --- a/toolchain/check/testdata/array/init_dependent_bound.carbon +++ b/toolchain/check/testdata/array/init_dependent_bound.carbon @@ -60,12 +60,16 @@ fn H() { G(3); } // CHECK:STDOUT: --- generic_empty.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %array_type.1b3: type = array_type %int_0, %T [symbolic] // CHECK:STDOUT: %require_complete: = require_complete_type %array_type.1b3 [symbolic] // CHECK:STDOUT: %pattern_type.bd6: type = pattern_type %array_type.1b3 [symbolic] +// CHECK:STDOUT: %arr.patt.770: %pattern_type.bd6 = ref_binding_pattern arr [symbolic] +// CHECK:STDOUT: %arr.var_patt.5fc: %pattern_type.bd6 = var_pattern %arr.patt.770 [symbolic] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %array.ca4: %array_type.1b3 = tuple_value () [symbolic] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] @@ -79,6 +83,8 @@ fn H() { G(3); } // CHECK:STDOUT: %array_type.988: type = array_type %int_0, %C [concrete] // CHECK:STDOUT: %complete_type.e80: = complete_type_witness %array_type.988 [concrete] // CHECK:STDOUT: %pattern_type.6be: type = pattern_type %array_type.988 [concrete] +// CHECK:STDOUT: %arr.patt.c91: %pattern_type.6be = ref_binding_pattern arr [concrete] +// CHECK:STDOUT: %arr.var_patt.9dd: %pattern_type.6be = var_pattern %arr.patt.c91 [concrete] // CHECK:STDOUT: %array.497: %array_type.988 = tuple_value () [concrete] // CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] // CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] @@ -95,21 +101,23 @@ fn H() { G(3); } // CHECK:STDOUT: %array_type.loc7_29.2: type = array_type constants.%int_0, %T.loc4_7.1 [symbolic = %array_type.loc7_29.2 (constants.%array_type.1b3)] // CHECK:STDOUT: %require_complete: = require_complete_type %array_type.loc7_29.2 [symbolic = %require_complete (constants.%require_complete)] // CHECK:STDOUT: %pattern_type: type = pattern_type %array_type.loc7_29.2 [symbolic = %pattern_type (constants.%pattern_type.bd6)] +// CHECK:STDOUT: %arr.patt.loc7_17.2: @G.%pattern_type (%pattern_type.bd6) = ref_binding_pattern arr [symbolic = %arr.patt.loc7_17.2 (constants.%arr.patt.770)] +// CHECK:STDOUT: %arr.var_patt.loc7_3.2: @G.%pattern_type (%pattern_type.bd6) = var_pattern %arr.patt.loc7_17.2 [symbolic = %arr.var_patt.loc7_3.2 (constants.%arr.var_patt.5fc)] // CHECK:STDOUT: %array: @G.%array_type.loc7_29.2 (%array_type.1b3) = tuple_value () [symbolic = %array (constants.%array.ca4)] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %array_type.loc7_29.2, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness)] -// CHECK:STDOUT: %Destroy.facet.loc7_3.2: %Destroy.type = facet_value %array_type.loc7_29.2, (%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.loc7_3.2 (constants.%Destroy.facet.a52)] -// CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.loc7_3.2) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.a67)] -// CHECK:STDOUT: %.loc7_3.3: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Destroy.facet.loc7_3.2 [symbolic = %.loc7_3.3 (constants.%.1e5)] -// CHECK:STDOUT: %impl.elem0.loc7_3.2: @G.%.loc7_3.3 (%.1e5) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc7_3.2 (constants.%impl.elem0)] -// CHECK:STDOUT: %specific_impl_fn.loc7_3.2: = specific_impl_function %impl.elem0.loc7_3.2, @Destroy.WithSelf.Op(%Destroy.facet.loc7_3.2) [symbolic = %specific_impl_fn.loc7_3.2 (constants.%specific_impl_fn)] +// CHECK:STDOUT: %Destroy.facet.loc7_3.3: %Destroy.type = facet_value %array_type.loc7_29.2, (%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.loc7_3.3 (constants.%Destroy.facet.a52)] +// CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.loc7_3.3) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.a67)] +// CHECK:STDOUT: %.loc7_3.4: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Destroy.facet.loc7_3.3 [symbolic = %.loc7_3.4 (constants.%.1e5)] +// CHECK:STDOUT: %impl.elem0.loc7_3.2: @G.%.loc7_3.4 (%.1e5) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc7_3.2 (constants.%impl.elem0)] +// CHECK:STDOUT: %specific_impl_fn.loc7_3.2: = specific_impl_function %impl.elem0.loc7_3.2, @Destroy.WithSelf.Op(%Destroy.facet.loc7_3.3) [symbolic = %specific_impl_fn.loc7_3.2 (constants.%specific_impl_fn)] // CHECK:STDOUT: // CHECK:STDOUT: fn() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %arr.patt: @G.%pattern_type (%pattern_type.bd6) = ref_binding_pattern arr [concrete] -// CHECK:STDOUT: %arr.var_patt: @G.%pattern_type (%pattern_type.bd6) = var_pattern %arr.patt [concrete] +// CHECK:STDOUT: %arr.patt.loc7_17.1: @G.%pattern_type (%pattern_type.bd6) = ref_binding_pattern arr [symbolic = %arr.patt.loc7_17.2 (constants.%arr.patt.770)] +// CHECK:STDOUT: %arr.var_patt.loc7_3.1: @G.%pattern_type (%pattern_type.bd6) = var_pattern %arr.patt.loc7_17.1 [symbolic = %arr.var_patt.loc7_3.2 (constants.%arr.var_patt.5fc)] // CHECK:STDOUT: } -// CHECK:STDOUT: %arr.var: ref @G.%array_type.loc7_29.2 (%array_type.1b3) = var %arr.var_patt +// CHECK:STDOUT: %arr.var: ref @G.%array_type.loc7_29.2 (%array_type.1b3) = var %arr.var_patt.loc7_3.1 // CHECK:STDOUT: %.loc7_34.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc7_34.2: init @G.%array_type.loc7_29.2 (%array_type.1b3) to %arr.var = array_init () [symbolic = %array (constants.%array.ca4)] // CHECK:STDOUT: %.loc7_3.1: init @G.%array_type.loc7_29.2 (%array_type.1b3) = converted %.loc7_34.1, %.loc7_34.2 [symbolic = %array (constants.%array.ca4)] @@ -120,10 +128,12 @@ fn H() { G(3); } // CHECK:STDOUT: %array_type.loc7_29.1: type = array_type %int_0, %T.ref [symbolic = %array_type.loc7_29.2 (constants.%array_type.1b3)] // CHECK:STDOUT: } // CHECK:STDOUT: %arr: ref @G.%array_type.loc7_29.2 (%array_type.1b3) = ref_binding arr, %arr.var -// CHECK:STDOUT: %impl.elem0.loc7_3.1: @G.%.loc7_3.3 (%.1e5) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc7_3.2 (constants.%impl.elem0)] +// CHECK:STDOUT: %impl.elem0.loc7_3.1: @G.%.loc7_3.4 (%.1e5) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc7_3.2 (constants.%impl.elem0)] // CHECK:STDOUT: %bound_method.loc7_3.1: = bound_method %arr.var, %impl.elem0.loc7_3.1 -// CHECK:STDOUT: %Destroy.facet.loc7_3.1: %Destroy.type = facet_value constants.%array_type.1b3, (constants.%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.loc7_3.2 (constants.%Destroy.facet.a52)] -// CHECK:STDOUT: %.loc7_3.2: %Destroy.type = converted constants.%array_type.1b3, %Destroy.facet.loc7_3.1 [symbolic = %Destroy.facet.loc7_3.2 (constants.%Destroy.facet.a52)] +// CHECK:STDOUT: %Destroy.facet.loc7_3.1: %Destroy.type = facet_value constants.%array_type.1b3, (constants.%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.loc7_3.3 (constants.%Destroy.facet.a52)] +// CHECK:STDOUT: %.loc7_3.2: %Destroy.type = converted constants.%array_type.1b3, %Destroy.facet.loc7_3.1 [symbolic = %Destroy.facet.loc7_3.3 (constants.%Destroy.facet.a52)] +// CHECK:STDOUT: %Destroy.facet.loc7_3.2: %Destroy.type = facet_value constants.%array_type.1b3, (constants.%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.loc7_3.3 (constants.%Destroy.facet.a52)] +// CHECK:STDOUT: %.loc7_3.3: %Destroy.type = converted constants.%array_type.1b3, %Destroy.facet.loc7_3.2 [symbolic = %Destroy.facet.loc7_3.3 (constants.%Destroy.facet.a52)] // CHECK:STDOUT: %specific_impl_fn.loc7_3.1: = specific_impl_function %impl.elem0.loc7_3.1, @Destroy.WithSelf.Op(constants.%Destroy.facet.a52) [symbolic = %specific_impl_fn.loc7_3.2 (constants.%specific_impl_fn)] // CHECK:STDOUT: %bound_method.loc7_3.2: = bound_method %arr.var, %specific_impl_fn.loc7_3.1 // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc7_3.2(%arr.var) @@ -134,21 +144,25 @@ fn H() { G(3); } // CHECK:STDOUT: fn @Destroy.Op(%self.param: ref %array_type.988) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_7.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%C) { +// CHECK:STDOUT: %T.patt.loc4_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_7.1 => constants.%C // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %array_type.loc7_29.2 => constants.%array_type.988 // CHECK:STDOUT: %require_complete => constants.%complete_type.e80 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.6be +// CHECK:STDOUT: %arr.patt.loc7_17.2 => constants.%arr.patt.c91 +// CHECK:STDOUT: %arr.var_patt.loc7_3.2 => constants.%arr.var_patt.9dd // CHECK:STDOUT: %array => constants.%array.497 // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.df9 -// CHECK:STDOUT: %Destroy.facet.loc7_3.2 => constants.%Destroy.facet.396 +// CHECK:STDOUT: %Destroy.facet.loc7_3.3 => constants.%Destroy.facet.396 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.ccc -// CHECK:STDOUT: %.loc7_3.3 => constants.%.a02 +// CHECK:STDOUT: %.loc7_3.4 => constants.%.a02 // CHECK:STDOUT: %impl.elem0.loc7_3.2 => constants.%Destroy.Op // CHECK:STDOUT: %specific_impl_fn.loc7_3.2 => constants.%Destroy.Op // CHECK:STDOUT: } @@ -158,6 +172,8 @@ fn H() { G(3); } // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %N.patt.38a: %pattern_type.6b6 = symbolic_binding_pattern N, 0, template [template] // CHECK:STDOUT: %N.37f: %i32 = symbolic_binding N, 0, template [template] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete] @@ -205,8 +221,8 @@ fn H() { G(3); } // CHECK:STDOUT: fn() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %arr.patt: = ref_binding_pattern arr [concrete] -// CHECK:STDOUT: %arr.var_patt: = var_pattern %arr.patt [concrete] +// CHECK:STDOUT: %arr.patt: = ref_binding_pattern arr [concrete = ] +// CHECK:STDOUT: %arr.var_patt: = var_pattern %arr.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %arr.var: ref = var %arr.var_patt [concrete = ] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1] @@ -221,10 +237,12 @@ fn H() { G(3); } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%N.37f) { +// CHECK:STDOUT: %N.patt.loc5_16.2 => constants.%N.patt.38a // CHECK:STDOUT: %N.loc5_16.1 => constants.%N.37f // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%int_3.410) { +// CHECK:STDOUT: %N.patt.loc5_16.2 => constants.%N.patt.38a // CHECK:STDOUT: %N.loc5_16.1 => constants.%int_3.410 // CHECK:STDOUT: // CHECK:STDOUT: !definition: diff --git a/toolchain/check/testdata/as/adapter_conversion.carbon b/toolchain/check/testdata/as/adapter_conversion.carbon index 0431217b0116..586f129f30e1 100644 --- a/toolchain/check/testdata/as/adapter_conversion.carbon +++ b/toolchain/check/testdata/as/adapter_conversion.carbon @@ -178,20 +178,24 @@ var b: B = {.x = ()} as B; // CHECK:STDOUT: %A.Make: %A.Make.type = struct_value () [concrete] // CHECK:STDOUT: %B: type = class_type @B [concrete] // CHECK:STDOUT: %pattern_type.e39: type = pattern_type %B [concrete] +// CHECK:STDOUT: %b_val.patt: %pattern_type.e39 = value_binding_pattern b_val [concrete] // CHECK:STDOUT: %ptr.432: type = ptr_type %B [concrete] // CHECK:STDOUT: %pattern_type.3c8: type = pattern_type %ptr.432 [concrete] +// CHECK:STDOUT: %b_ptr.patt: %pattern_type.3c8 = value_binding_pattern b_ptr [concrete] // CHECK:STDOUT: %a_ref.var: ref %B = var file.%a_ref.var_patt [concrete] // CHECK:STDOUT: %addr: %ptr.432 = addr_of %a_ref.var [concrete] +// CHECK:STDOUT: %b_factory.patt: %pattern_type.e39 = ref_binding_pattern b_factory [concrete] +// CHECK:STDOUT: %b_factory.var_patt: %pattern_type.e39 = var_pattern %b_factory.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b_val.patt: %pattern_type.e39 = value_binding_pattern b_val [concrete] +// CHECK:STDOUT: %b_val.patt: %pattern_type.e39 = value_binding_pattern b_val [concrete = constants.%b_val.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %B.ref.loc22: type = name_ref B, %B.decl [concrete = constants.%B] // CHECK:STDOUT: %b_val: %B = value_binding b_val, @__global_init.%.loc22_22.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b_ptr.patt: %pattern_type.3c8 = value_binding_pattern b_ptr [concrete] +// CHECK:STDOUT: %b_ptr.patt: %pattern_type.3c8 = value_binding_pattern b_ptr [concrete = constants.%b_ptr.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc23: type = splice_block %ptr [concrete = constants.%ptr.432] { // CHECK:STDOUT: %B.ref.loc23: type = name_ref B, %B.decl [concrete = constants.%B] @@ -199,8 +203,8 @@ var b: B = {.x = ()} as B; // CHECK:STDOUT: } // CHECK:STDOUT: %b_ptr: %ptr.432 = value_binding b_ptr, @__global_init.%addr // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b_factory.patt: %pattern_type.e39 = ref_binding_pattern b_factory [concrete] -// CHECK:STDOUT: %b_factory.var_patt: %pattern_type.e39 = var_pattern %b_factory.patt [concrete] +// CHECK:STDOUT: %b_factory.patt: %pattern_type.e39 = ref_binding_pattern b_factory [concrete = constants.%b_factory.patt] +// CHECK:STDOUT: %b_factory.var_patt: %pattern_type.e39 = var_pattern %b_factory.patt [concrete = constants.%b_factory.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b_factory.var: ref %B = var %b_factory.var_patt [concrete] // CHECK:STDOUT: %B.ref.loc25: type = name_ref B, %B.decl [concrete = constants.%B] @@ -237,6 +241,7 @@ var b: B = {.x = ()} as B; // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.9ef: type = pattern_type %A [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.9ef = value_binding_pattern a [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %As.type.155: type = facet_type <@As, @As(%i32)> [concrete] // CHECK:STDOUT: %To: Core.IntLiteral = symbolic_binding To, 0 [symbolic] @@ -254,6 +259,7 @@ var b: B = {.x = ()} as B; // CHECK:STDOUT: %bound_method: = bound_method %int_1.5b8, %Core.IntLiteral.as.As.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_1.0c6: %i32 = int_value 1 [concrete] // CHECK:STDOUT: %int_1.403: %A = int_value 1 [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = value_binding_pattern n [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -263,12 +269,12 @@ var b: B = {.x = ()} as B; // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.9ef = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.9ef = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %A.ref: type = name_ref A, %A.decl [concrete = constants.%A] // CHECK:STDOUT: %a: %A = value_binding a, @__global_init.%.loc9_23.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = value_binding_pattern n [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = value_binding_pattern n [concrete = constants.%n.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %n: %i32 = value_binding n, @__global_init.%.loc10_16.2 @@ -302,12 +308,13 @@ var b: B = {.x = ()} as B; // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %D: type = class_type @D [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %D [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type = value_binding_pattern d [concrete] // CHECK:STDOUT: %D.val: %D = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type = value_binding_pattern d [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type = value_binding_pattern d [concrete = constants.%d.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %D.ref: type = name_ref D, %D.decl [concrete = constants.%D] // CHECK:STDOUT: %d: %D = value_binding d, @__global_init.%.loc10_15.2 @@ -331,6 +338,7 @@ var b: B = {.x = ()} as B; // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %B: type = class_type @B [concrete] // CHECK:STDOUT: %pattern_type.e39: type = pattern_type %B [concrete] +// CHECK:STDOUT: %b_value.patt: %pattern_type.e39 = value_binding_pattern b_value [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %struct_type.x.y.4cf: type = struct_type {.x: Core.IntLiteral, .y: Core.IntLiteral} [concrete] @@ -364,11 +372,11 @@ var b: B = {.x = ()} as B; // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b_value.patt: %pattern_type.e39 = value_binding_pattern b_value [concrete] +// CHECK:STDOUT: %b_value.patt: %pattern_type.e39 = value_binding_pattern b_value [concrete = constants.%b_value.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %B.ref: type = name_ref B, %B.decl [concrete = constants.%B] // CHECK:STDOUT: %.loc14_42.1: ref %B = temporary @__global_init.%.loc14_34.3, @__global_init.%.loc14_42.2 [concrete = constants.%.07b] // CHECK:STDOUT: %.loc14_42.2: %B = acquire_value %.loc14_42.1 [concrete = constants.%B.val] +// CHECK:STDOUT: %B.ref: type = name_ref B, %B.decl [concrete = constants.%B] // CHECK:STDOUT: %b_value: %B = value_binding b_value, %.loc14_42.2 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -414,12 +422,13 @@ var b: B = {.x = ()} as B; // CHECK:STDOUT: %tuple: %tuple.type.c8c = tuple_value (%empty_struct, %Noncopyable) [concrete] // CHECK:STDOUT: %tuple.type.c68: type = tuple_type (%empty_struct_type, %Noncopyable) [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %A [concrete] +// CHECK:STDOUT: %a_value.patt: %pattern_type = value_binding_pattern a_value [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F(%a.param: %A) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a_value.patt: %pattern_type = value_binding_pattern a_value [concrete] +// CHECK:STDOUT: %a_value.patt: %pattern_type = value_binding_pattern a_value [concrete = constants.%a_value.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.ref: %A = name_ref a, %a // CHECK:STDOUT: %.loc14_35: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] diff --git a/toolchain/check/testdata/as/basics.carbon b/toolchain/check/testdata/as/basics.carbon index 92b8427b5e18..604bcf187c55 100644 --- a/toolchain/check/testdata/as/basics.carbon +++ b/toolchain/check/testdata/as/basics.carbon @@ -174,6 +174,7 @@ let n: {.x: ()} = {.x = ()} as {.x = ()}; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %t.patt: %pattern_type = value_binding_pattern t [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %tuple.type.b6b: type = tuple_type (%empty_struct_type, %empty_struct_type) [concrete] @@ -182,7 +183,7 @@ let n: {.x: ()} = {.x = ()} as {.x = ()}; // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %t.patt: %pattern_type = value_binding_pattern t [concrete] +// CHECK:STDOUT: %t.patt: %pattern_type = value_binding_pattern t [concrete = constants.%t.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc5: type = type_literal type [concrete = type] // CHECK:STDOUT: %t: type = value_binding t, @__global_init.%.loc5_24.3 @@ -212,8 +213,11 @@ let n: {.x: ()} = {.x = ()} as {.x = ()}; // CHECK:STDOUT: %tuple: %tuple.type.24b = tuple_value (%X, %X) [concrete] // CHECK:STDOUT: %tuple.type.359: type = tuple_type (%X, %X) [concrete] // CHECK:STDOUT: %pattern_type.3ee: type = pattern_type %tuple.type.359 [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.3ee = value_binding_pattern a [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.2: type = fn_type @Destroy.Op.loc13_40.2 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.2: %Destroy.Op.type.1d8f74.2 = struct_value () [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.3ee = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.3ee = var_pattern %b.patt [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.3: type = fn_type @Destroy.Op.loc20 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.3: %Destroy.Op.type.1d8f74.3 = struct_value () [concrete] // CHECK:STDOUT: } @@ -221,7 +225,7 @@ let n: {.x: ()} = {.x = ()} as {.x = ()}; // CHECK:STDOUT: fn @Let() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.3ee = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.3ee = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Make.ref.loc13_27: %Make.type = name_ref Make, file.%Make.decl [concrete = constants.%Make] // CHECK:STDOUT: %.loc13_32.1: ref %X = temporary_storage @@ -234,18 +238,18 @@ let n: {.x: ()} = {.x = ()} as {.x = ()}; // CHECK:STDOUT: %X.ref.loc13_50: type = name_ref X, file.%X.decl [concrete = constants.%X] // CHECK:STDOUT: %.loc13_51.1: %tuple.type.24b = tuple_literal (%X.ref.loc13_47, %X.ref.loc13_50) [concrete = constants.%tuple] // CHECK:STDOUT: %.loc13_51.2: type = converted %.loc13_51.1, constants.%tuple.type.359 [concrete = constants.%tuple.type.359] -// CHECK:STDOUT: %.loc13_22.1: type = splice_block %.loc13_22.3 [concrete = constants.%tuple.type.359] { -// CHECK:STDOUT: %X.ref.loc13_18: type = name_ref X, file.%X.decl [concrete = constants.%X] -// CHECK:STDOUT: %X.ref.loc13_21: type = name_ref X, file.%X.decl [concrete = constants.%X] -// CHECK:STDOUT: %.loc13_22.2: %tuple.type.24b = tuple_literal (%X.ref.loc13_18, %X.ref.loc13_21) [concrete = constants.%tuple] -// CHECK:STDOUT: %.loc13_22.3: type = converted %.loc13_22.2, constants.%tuple.type.359 [concrete = constants.%tuple.type.359] -// CHECK:STDOUT: } // CHECK:STDOUT: %.loc13_32.2: ref %X = temporary %.loc13_32.1, %Make.call.loc13_32 // CHECK:STDOUT: %.loc13_32.3: %X = acquire_value %.loc13_32.2 // CHECK:STDOUT: %.loc13_40.2: ref %X = temporary %.loc13_40.1, %Make.call.loc13_40 // CHECK:STDOUT: %.loc13_40.3: %X = acquire_value %.loc13_40.2 // CHECK:STDOUT: %tuple: %tuple.type.359 = tuple_value (%.loc13_32.3, %.loc13_40.3) // CHECK:STDOUT: %.loc13_41.2: %tuple.type.359 = converted %.loc13_41.1, %tuple +// CHECK:STDOUT: %.loc13_22.1: type = splice_block %.loc13_22.3 [concrete = constants.%tuple.type.359] { +// CHECK:STDOUT: %X.ref.loc13_18: type = name_ref X, file.%X.decl [concrete = constants.%X] +// CHECK:STDOUT: %X.ref.loc13_21: type = name_ref X, file.%X.decl [concrete = constants.%X] +// CHECK:STDOUT: %.loc13_22.2: %tuple.type.24b = tuple_literal (%X.ref.loc13_18, %X.ref.loc13_21) [concrete = constants.%tuple] +// CHECK:STDOUT: %.loc13_22.3: type = converted %.loc13_22.2, constants.%tuple.type.359 [concrete = constants.%tuple.type.359] +// CHECK:STDOUT: } // CHECK:STDOUT: %a: %tuple.type.359 = value_binding a, %.loc13_41.2 // CHECK:STDOUT: %Destroy.Op.bound.loc13_40: = bound_method %.loc13_40.2, constants.%Destroy.Op.1a2547.2 // CHECK:STDOUT: %Destroy.Op.call.loc13_40: init %empty_tuple.type = call %Destroy.Op.bound.loc13_40(%.loc13_40.2) @@ -264,8 +268,8 @@ let n: {.x: ()} = {.x = ()} as {.x = ()}; // CHECK:STDOUT: fn @Var() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.3ee = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.3ee = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.3ee = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type.3ee = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %tuple.type.359 = var %b.var_patt // CHECK:STDOUT: %Make.ref.loc20_27: %Make.type = name_ref Make, file.%Make.decl [concrete = constants.%Make] @@ -306,10 +310,14 @@ let n: {.x: ()} = {.x = ()} as {.x = ()}; // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %pattern_type.6cb: type = pattern_type %X [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %m.patt: %pattern_type.6cb = value_binding_pattern m [concrete] // CHECK:STDOUT: %ptr.db8: type = ptr_type %X [concrete] // CHECK:STDOUT: %pattern_type.990: type = pattern_type %ptr.db8 [concrete] +// CHECK:STDOUT: %q.patt: %pattern_type.990 = value_binding_pattern q [concrete] // CHECK:STDOUT: %Make.type: type = fn_type @Make [concrete] // CHECK:STDOUT: %Make: %Make.type = struct_value () [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.6cb = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.6cb = var_pattern %x.patt [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.2: type = fn_type @Destroy.Op.loc24_3.2 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.2: %Destroy.Op.type.1d8f74.2 = struct_value () [concrete] // CHECK:STDOUT: } @@ -317,7 +325,7 @@ let n: {.x: ()} = {.x = ()} as {.x = ()}; // CHECK:STDOUT: fn @Value(%n.param: %X) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %m.patt: %pattern_type.6cb = value_binding_pattern m [concrete] +// CHECK:STDOUT: %m.patt: %pattern_type.6cb = value_binding_pattern m [concrete = constants.%m.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %n.ref: %X = name_ref n, %n // CHECK:STDOUT: %X.ref.loc10_26: type = name_ref X, file.%X.decl [concrete = constants.%X] @@ -329,7 +337,7 @@ let n: {.x: ()} = {.x = ()} as {.x = ()}; // CHECK:STDOUT: fn @Reference(%p.param: %ptr.db8) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %q.patt: %pattern_type.990 = value_binding_pattern q [concrete] +// CHECK:STDOUT: %q.patt: %pattern_type.990 = value_binding_pattern q [concrete = constants.%q.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %p.ref: %ptr.db8 = name_ref p, %p // CHECK:STDOUT: %.loc16_24: ref %X = deref %p.ref @@ -346,8 +354,8 @@ let n: {.x: ()} = {.x = ()} as {.x = ()}; // CHECK:STDOUT: fn @Initializing() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.6cb = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.6cb = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.6cb = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.6cb = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %X = var %x.var_patt // CHECK:STDOUT: %Make.ref: %Make.type = name_ref Make, file.%Make.decl [concrete = constants.%Make] @@ -386,6 +394,7 @@ let n: {.x: ()} = {.x = ()} as {.x = ()}; // CHECK:STDOUT: %X.as.As.impl.Convert: %X.as.As.impl.Convert.type = struct_value () [concrete] // CHECK:STDOUT: %As.facet.9dc: %As.type.f20 = facet_value %X, (%As.impl_witness.915) [concrete] // CHECK:STDOUT: %As.WithSelf.Convert.type.f49: type = fn_type @As.WithSelf.Convert, @As.WithSelf(%Y, %As.facet.9dc) [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.7ab = value_binding_pattern n [concrete] // CHECK:STDOUT: %.db2: type = fn_type_with_self_type %As.WithSelf.Convert.type.f49, %As.facet.9dc [concrete] // CHECK:STDOUT: %X.as.As.impl.Convert.bound: = bound_method %X.val, %X.as.As.impl.Convert [concrete] // CHECK:STDOUT: %.650: ref %X = temporary invalid, %X.val [concrete] @@ -393,11 +402,11 @@ let n: {.x: ()} = {.x = ()} as {.x = ()}; // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: %pattern_type.7ab = value_binding_pattern n [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.7ab = value_binding_pattern n [concrete = constants.%n.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %Y.ref: type = name_ref Y, %Y.decl [concrete = constants.%Y] // CHECK:STDOUT: %.loc19_29.1: ref %Y = temporary @__global_init.%.loc19_29.1, @__global_init.%.loc19_29.2 // CHECK:STDOUT: %.loc19_29.2: %Y = acquire_value %.loc19_29.1 +// CHECK:STDOUT: %Y.ref: type = name_ref Y, %Y.decl [concrete = constants.%Y] // CHECK:STDOUT: %n: %Y = value_binding n, %.loc19_29.2 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/as/const.carbon b/toolchain/check/testdata/as/const.carbon index e1f665003302..845b943d9b5a 100644 --- a/toolchain/check/testdata/as/const.carbon +++ b/toolchain/check/testdata/as/const.carbon @@ -103,10 +103,15 @@ fn Use() { // CHECK:STDOUT: %ptr.db8: type = ptr_type %X [concrete] // CHECK:STDOUT: %const: type = const_type %X [concrete] // CHECK:STDOUT: %pattern_type.dfd: type = pattern_type %const [concrete] +// CHECK:STDOUT: %i.patt: %pattern_type.dfd = ref_binding_pattern i [concrete] +// CHECK:STDOUT: %i.var_patt: %pattern_type.dfd = var_pattern %i.patt [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.dfd = value_binding_pattern v [concrete] // CHECK:STDOUT: %ptr.faf: type = ptr_type %const [concrete] // CHECK:STDOUT: %pattern_type.7f7: type = pattern_type %ptr.faf [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.7f7 = value_binding_pattern a [concrete] // CHECK:STDOUT: %reference.var: ref %const = var file.%reference.var_patt [concrete] // CHECK:STDOUT: %addr.c2d: %ptr.faf = addr_of %reference.var [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.7f7 = value_binding_pattern b [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.3: type = fn_type @Destroy.Op.loc14_3.3 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.3: %Destroy.Op.type.1d8f74.3 = struct_value () [concrete] // CHECK:STDOUT: } @@ -114,8 +119,8 @@ fn Use() { // CHECK:STDOUT: fn @Use() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %i.patt: %pattern_type.dfd = ref_binding_pattern i [concrete] -// CHECK:STDOUT: %i.var_patt: %pattern_type.dfd = var_pattern %i.patt [concrete] +// CHECK:STDOUT: %i.patt: %pattern_type.dfd = ref_binding_pattern i [concrete = constants.%i.patt] +// CHECK:STDOUT: %i.var_patt: %pattern_type.dfd = var_pattern %i.patt [concrete = constants.%i.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %i.var: ref %const = var %i.var_patt // CHECK:STDOUT: %Init.ref: %Init.type = name_ref Init, file.%Init.decl [concrete = constants.%Init] @@ -132,7 +137,7 @@ fn Use() { // CHECK:STDOUT: } // CHECK:STDOUT: %i: ref %const = ref_binding i, %i.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %pattern_type.dfd = value_binding_pattern v [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.dfd = value_binding_pattern v [concrete = constants.%v.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %value.ref: %X = name_ref value, file.%value // CHECK:STDOUT: %X.ref.loc15_42: type = name_ref X, file.%X.decl [concrete = constants.%X] @@ -145,7 +150,7 @@ fn Use() { // CHECK:STDOUT: } // CHECK:STDOUT: %v: %const = value_binding v, %.loc15_33.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.7f7 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.7f7 = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %reference.ref: ref %X = name_ref reference, file.%reference [concrete = file.%reference.var] // CHECK:STDOUT: %X.ref.loc16_49: type = name_ref X, file.%X.decl [concrete = constants.%X] @@ -160,7 +165,7 @@ fn Use() { // CHECK:STDOUT: } // CHECK:STDOUT: %a: %ptr.faf = value_binding a, %addr // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.7f7 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.7f7 = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %ptr.ref: %ptr.db8 = name_ref ptr, file.%ptr.loc9_8 // CHECK:STDOUT: %X.ref.loc17_41: type = name_ref X, file.%X.decl [concrete = constants.%X] @@ -206,6 +211,9 @@ fn Use() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Init: %Init.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.6cb: type = pattern_type %X [concrete] +// CHECK:STDOUT: %i.patt: %pattern_type.6cb = ref_binding_pattern i [concrete] +// CHECK:STDOUT: %i.var_patt: %pattern_type.6cb = var_pattern %i.patt [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.6cb = value_binding_pattern v [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.2: type = fn_type @Destroy.Op.loc12_3.2 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.2: %Destroy.Op.type.1d8f74.2 = struct_value () [concrete] // CHECK:STDOUT: } @@ -213,8 +221,8 @@ fn Use() { // CHECK:STDOUT: fn @Use() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %i.patt: %pattern_type.6cb = ref_binding_pattern i [concrete] -// CHECK:STDOUT: %i.var_patt: %pattern_type.6cb = var_pattern %i.patt [concrete] +// CHECK:STDOUT: %i.patt: %pattern_type.6cb = ref_binding_pattern i [concrete = constants.%i.patt] +// CHECK:STDOUT: %i.var_patt: %pattern_type.6cb = var_pattern %i.patt [concrete = constants.%i.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %i.var: ref %X = var %i.var_patt // CHECK:STDOUT: %Init.ref: %Init.type = name_ref Init, file.%Init.decl [concrete = constants.%Init] @@ -227,7 +235,7 @@ fn Use() { // CHECK:STDOUT: %X.ref.loc12_17: type = name_ref X, file.%X.decl [concrete = constants.%X] // CHECK:STDOUT: %i: ref %X = ref_binding i, %i.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %pattern_type.6cb = value_binding_pattern v [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.6cb = value_binding_pattern v [concrete = constants.%v.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %value.ref: %const = name_ref value, file.%value // CHECK:STDOUT: %X.ref.loc13_30: type = name_ref X, file.%X.decl [concrete = constants.%X] @@ -260,14 +268,16 @@ fn Use() { // CHECK:STDOUT: %ptr.faf: type = ptr_type %const [concrete] // CHECK:STDOUT: %ptr.db8: type = ptr_type %X [concrete] // CHECK:STDOUT: %pattern_type.990: type = pattern_type %ptr.db8 [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.990 = value_binding_pattern a [concrete] // CHECK:STDOUT: %reference.var: ref %X = var file.%reference.var_patt [concrete] // CHECK:STDOUT: %addr.c0f: %ptr.db8 = addr_of %reference.var [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.990 = value_binding_pattern b [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Use() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.990 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.990 = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %reference.ref: ref %const = name_ref reference, file.%reference [concrete = file.%reference.var] // CHECK:STDOUT: %X.ref.loc11_44: type = name_ref X, file.%X.decl [concrete = constants.%X] @@ -280,7 +290,7 @@ fn Use() { // CHECK:STDOUT: } // CHECK:STDOUT: %a: %ptr.db8 = value_binding a, %addr // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.990 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.990 = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %ptr.ref: %ptr.faf = name_ref ptr, file.%ptr.loc7_8 // CHECK:STDOUT: %X.ref.loc12_36: type = name_ref X, file.%X.decl [concrete = constants.%X] diff --git a/toolchain/check/testdata/as/maybe_unformed.carbon b/toolchain/check/testdata/as/maybe_unformed.carbon index 02296b8bb808..51f17cb4fb75 100644 --- a/toolchain/check/testdata/as/maybe_unformed.carbon +++ b/toolchain/check/testdata/as/maybe_unformed.carbon @@ -144,8 +144,10 @@ fn Use() { // CHECK:STDOUT: %MaybeUnformed.198: type = class_type @MaybeUnformed, @MaybeUnformed(%X) [concrete] // CHECK:STDOUT: %ptr.b8c: type = ptr_type %MaybeUnformed.198 [concrete] // CHECK:STDOUT: %pattern_type.abe: type = pattern_type %ptr.b8c [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.abe = value_binding_pattern a [concrete] // CHECK:STDOUT: %reference.var: ref %MaybeUnformed.198 = var file.%reference.var_patt [concrete] // CHECK:STDOUT: %addr.d37: %ptr.b8c = addr_of %reference.var [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.abe = value_binding_pattern b [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -162,7 +164,7 @@ fn Use() { // CHECK:STDOUT: fn @Use() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.abe = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.abe = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %reference.ref: ref %X = name_ref reference, file.%reference [concrete = file.%reference.var] // CHECK:STDOUT: %Core.ref.loc12_57: = name_ref Core, imports.%Core [concrete = imports.%Core] @@ -181,7 +183,7 @@ fn Use() { // CHECK:STDOUT: } // CHECK:STDOUT: %a: %ptr.b8c = value_binding a, %addr // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.abe = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.abe = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %ptr.ref: %ptr.db8 = name_ref ptr, file.%ptr.loc7_8 // CHECK:STDOUT: %Core.ref.loc13_49: = name_ref Core, imports.%Core [concrete = imports.%Core] @@ -220,8 +222,11 @@ fn Use() { // CHECK:STDOUT: %MaybeUnformed.198: type = class_type @MaybeUnformed, @MaybeUnformed(%X) [concrete] // CHECK:STDOUT: %.f01: type = maybe_unformed_type %X [concrete] // CHECK:STDOUT: %pattern_type.009: type = pattern_type %MaybeUnformed.198 [concrete] +// CHECK:STDOUT: %i.patt: %pattern_type.009 = ref_binding_pattern i [concrete] +// CHECK:STDOUT: %i.var_patt: %pattern_type.009 = var_pattern %i.patt [concrete] // CHECK:STDOUT: %As.type.116: type = generic_interface_type @As [concrete] // CHECK:STDOUT: %As.generic: %As.type.116 = struct_value () [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.009 = value_binding_pattern v [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.4: type = fn_type @Destroy.Op.loc19_3.4 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.4: %Destroy.Op.type.1d8f74.4 = struct_value () [concrete] @@ -243,8 +248,8 @@ fn Use() { // CHECK:STDOUT: fn @Use() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %i.patt: %pattern_type.009 = ref_binding_pattern i [concrete] -// CHECK:STDOUT: %i.var_patt: %pattern_type.009 = var_pattern %i.patt [concrete] +// CHECK:STDOUT: %i.patt: %pattern_type.009 = ref_binding_pattern i [concrete = constants.%i.patt] +// CHECK:STDOUT: %i.var_patt: %pattern_type.009 = var_pattern %i.patt [concrete = constants.%i.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %i.var: ref %MaybeUnformed.198 = var %i.var_patt // CHECK:STDOUT: %Init.ref: %Init.type = name_ref Init, file.%Init.decl [concrete = constants.%Init] @@ -264,7 +269,7 @@ fn Use() { // CHECK:STDOUT: } // CHECK:STDOUT: %i: ref %MaybeUnformed.198 = ref_binding i, %i.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %pattern_type.009 = value_binding_pattern v [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.009 = value_binding_pattern v [concrete = constants.%v.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %value.ref: %X = name_ref value, file.%value // CHECK:STDOUT: %Core.ref.loc27_50: = name_ref Core, imports.%Core [concrete = imports.%Core] @@ -313,16 +318,19 @@ fn Use() { // CHECK:STDOUT: %MaybeUnformed.198: type = class_type @MaybeUnformed, @MaybeUnformed(%X) [concrete] // CHECK:STDOUT: %ptr.b8c: type = ptr_type %MaybeUnformed.198 [concrete] // CHECK:STDOUT: %pattern_type.6cb: type = pattern_type %X [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.6cb = value_binding_pattern v [concrete] // CHECK:STDOUT: %ptr.db8: type = ptr_type %X [concrete] // CHECK:STDOUT: %pattern_type.990: type = pattern_type %ptr.db8 [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.990 = value_binding_pattern a [concrete] // CHECK:STDOUT: %reference.var: ref %X = var file.%reference.var_patt [concrete] // CHECK:STDOUT: %addr.8ef: %ptr.db8 = addr_of %reference.var [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.990 = value_binding_pattern b [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Use() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %pattern_type.6cb = value_binding_pattern v [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.6cb = value_binding_pattern v [concrete = constants.%v.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %value.ref: %MaybeUnformed.198 = name_ref value, file.%value // CHECK:STDOUT: %X.ref.loc13_37: type = name_ref X, file.%X.decl [concrete = constants.%X] @@ -331,7 +339,7 @@ fn Use() { // CHECK:STDOUT: %X.ref.loc13_17: type = name_ref X, file.%X.decl [concrete = constants.%X] // CHECK:STDOUT: %v: %X = value_binding v, %.loc13_34.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.990 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.990 = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %reference.ref: ref %MaybeUnformed.198 = name_ref reference, file.%reference [concrete = file.%reference.var] // CHECK:STDOUT: %X.ref.loc14_44: type = name_ref X, file.%X.decl [concrete = constants.%X] @@ -344,7 +352,7 @@ fn Use() { // CHECK:STDOUT: } // CHECK:STDOUT: %a: %ptr.db8 = value_binding a, %addr // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.990 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.990 = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %ptr.ref: %ptr.b8c = name_ref ptr, file.%ptr.loc9_8 // CHECK:STDOUT: %X.ref.loc15_36: type = name_ref X, file.%X.decl [concrete = constants.%X] diff --git a/toolchain/check/testdata/as/partial.carbon b/toolchain/check/testdata/as/partial.carbon index 1b0b61ed6b2a..301333ecae8c 100644 --- a/toolchain/check/testdata/as/partial.carbon +++ b/toolchain/check/testdata/as/partial.carbon @@ -117,10 +117,15 @@ fn Use() { // CHECK:STDOUT: %ptr.db8: type = ptr_type %X [concrete] // CHECK:STDOUT: %.d74: type = partial_type %X [concrete] // CHECK:STDOUT: %pattern_type.53b: type = pattern_type %.d74 [concrete] +// CHECK:STDOUT: %i.patt: %pattern_type.53b = ref_binding_pattern i [concrete] +// CHECK:STDOUT: %i.var_patt: %pattern_type.53b = var_pattern %i.patt [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.53b = value_binding_pattern v [concrete] // CHECK:STDOUT: %ptr.44a: type = ptr_type %.d74 [concrete] // CHECK:STDOUT: %pattern_type.12c: type = pattern_type %ptr.44a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.12c = value_binding_pattern a [concrete] // CHECK:STDOUT: %reference.var: ref %.d74 = var file.%reference.var_patt [concrete] // CHECK:STDOUT: %addr.b93: %ptr.44a = addr_of %reference.var [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.12c = value_binding_pattern b [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.2: type = fn_type @Destroy.Op.loc14_3.2 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.2: %Destroy.Op.type.1d8f74.2 = struct_value () [concrete] // CHECK:STDOUT: } @@ -128,8 +133,8 @@ fn Use() { // CHECK:STDOUT: fn @Use() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %i.patt: %pattern_type.53b = ref_binding_pattern i [concrete] -// CHECK:STDOUT: %i.var_patt: %pattern_type.53b = var_pattern %i.patt [concrete] +// CHECK:STDOUT: %i.patt: %pattern_type.53b = ref_binding_pattern i [concrete = constants.%i.patt] +// CHECK:STDOUT: %i.var_patt: %pattern_type.53b = var_pattern %i.patt [concrete = constants.%i.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %i.var: ref %.d74 = var %i.var_patt // CHECK:STDOUT: %Init.ref: %Init.type = name_ref Init, file.%Init.decl [concrete = constants.%Init] @@ -146,7 +151,7 @@ fn Use() { // CHECK:STDOUT: } // CHECK:STDOUT: %i: ref %.d74 = ref_binding i, %i.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %pattern_type.53b = value_binding_pattern v [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.53b = value_binding_pattern v [concrete = constants.%v.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %value.ref: %X = name_ref value, file.%value // CHECK:STDOUT: %X.ref.loc15_46: type = name_ref X, file.%X.decl [concrete = constants.%X] @@ -159,7 +164,7 @@ fn Use() { // CHECK:STDOUT: } // CHECK:STDOUT: %v: %.d74 = value_binding v, %.loc15_35.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.12c = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.12c = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %reference.ref: ref %X = name_ref reference, file.%reference [concrete = file.%reference.var] // CHECK:STDOUT: %X.ref.loc16_53: type = name_ref X, file.%X.decl [concrete = constants.%X] @@ -174,7 +179,7 @@ fn Use() { // CHECK:STDOUT: } // CHECK:STDOUT: %a: %ptr.44a = value_binding a, %addr // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.12c = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.12c = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %ptr.ref: %ptr.db8 = name_ref ptr, file.%ptr.loc9_8 // CHECK:STDOUT: %X.ref.loc17_45: type = name_ref X, file.%X.decl [concrete = constants.%X] @@ -215,6 +220,12 @@ fn Use() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Init: %Init.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.6cb: type = pattern_type %X [concrete] +// CHECK:STDOUT: %i.patt: %pattern_type.6cb = ref_binding_pattern i [concrete] +// CHECK:STDOUT: %i.var_patt: %pattern_type.6cb = var_pattern %i.patt [concrete] +// CHECK:STDOUT: %j.patt: %pattern_type.6cb = ref_binding_pattern j [concrete] +// CHECK:STDOUT: %j.var_patt: %pattern_type.6cb = var_pattern %j.patt [concrete] +// CHECK:STDOUT: %k.patt: %pattern_type.6cb = ref_binding_pattern k [concrete] +// CHECK:STDOUT: %k.var_patt: %pattern_type.6cb = var_pattern %k.patt [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.2: type = fn_type @Destroy.Op.loc12_3.2 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.2: %Destroy.Op.type.1d8f74.2 = struct_value () [concrete] // CHECK:STDOUT: } @@ -222,8 +233,8 @@ fn Use() { // CHECK:STDOUT: fn @Use() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %i.patt: %pattern_type.6cb = ref_binding_pattern i [concrete] -// CHECK:STDOUT: %i.var_patt: %pattern_type.6cb = var_pattern %i.patt [concrete] +// CHECK:STDOUT: %i.patt: %pattern_type.6cb = ref_binding_pattern i [concrete = constants.%i.patt] +// CHECK:STDOUT: %i.var_patt: %pattern_type.6cb = var_pattern %i.patt [concrete = constants.%i.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %i.var: ref %X = var %i.var_patt // CHECK:STDOUT: %Init.ref.loc10: %Init.type = name_ref Init, file.%Init.decl [concrete = constants.%Init] @@ -235,8 +246,8 @@ fn Use() { // CHECK:STDOUT: %X.ref.loc10: type = name_ref X, file.%X.decl [concrete = constants.%X] // CHECK:STDOUT: %i: ref %X = ref_binding i, %i.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %j.patt: %pattern_type.6cb = ref_binding_pattern j [concrete] -// CHECK:STDOUT: %j.var_patt: %pattern_type.6cb = var_pattern %j.patt [concrete] +// CHECK:STDOUT: %j.patt: %pattern_type.6cb = ref_binding_pattern j [concrete = constants.%j.patt] +// CHECK:STDOUT: %j.var_patt: %pattern_type.6cb = var_pattern %j.patt [concrete = constants.%j.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %j.var: ref %X = var %j.var_patt // CHECK:STDOUT: %Init.ref.loc11: %Init.type = name_ref Init, file.%Init.decl [concrete = constants.%Init] @@ -249,8 +260,8 @@ fn Use() { // CHECK:STDOUT: %X.ref.loc11_17: type = name_ref X, file.%X.decl [concrete = constants.%X] // CHECK:STDOUT: %j: ref %X = ref_binding j, %j.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %k.patt: %pattern_type.6cb = ref_binding_pattern k [concrete] -// CHECK:STDOUT: %k.var_patt: %pattern_type.6cb = var_pattern %k.patt [concrete] +// CHECK:STDOUT: %k.patt: %pattern_type.6cb = ref_binding_pattern k [concrete = constants.%k.patt] +// CHECK:STDOUT: %k.var_patt: %pattern_type.6cb = var_pattern %k.patt [concrete = constants.%k.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %k.var: ref %X = var %k.var_patt // CHECK:STDOUT: %Init.ref.loc12: %Init.type = name_ref Init, file.%Init.decl [concrete = constants.%Init] @@ -285,16 +296,19 @@ fn Use() { // CHECK:STDOUT: %.d74: type = partial_type %X [concrete] // CHECK:STDOUT: %ptr.44a: type = ptr_type %.d74 [concrete] // CHECK:STDOUT: %pattern_type.6cb: type = pattern_type %X [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.6cb = value_binding_pattern v [concrete] // CHECK:STDOUT: %ptr.db8: type = ptr_type %X [concrete] // CHECK:STDOUT: %pattern_type.990: type = pattern_type %ptr.db8 [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.990 = value_binding_pattern a [concrete] // CHECK:STDOUT: %reference.var: ref %X = var file.%reference.var_patt [concrete] // CHECK:STDOUT: %addr.433: %ptr.db8 = addr_of %reference.var [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.990 = value_binding_pattern b [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Use() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %pattern_type.6cb = value_binding_pattern v [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.6cb = value_binding_pattern v [concrete = constants.%v.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %value.ref: %.d74 = name_ref value, file.%value // CHECK:STDOUT: %X.ref.loc14_37: type = name_ref X, file.%X.decl [concrete = constants.%X] @@ -303,7 +317,7 @@ fn Use() { // CHECK:STDOUT: %X.ref.loc14_17: type = name_ref X, file.%X.decl [concrete = constants.%X] // CHECK:STDOUT: %v: %X = value_binding v, %.loc14_34.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.990 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.990 = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %reference.ref: ref %.d74 = name_ref reference, file.%reference [concrete = file.%reference.var] // CHECK:STDOUT: %X.ref.loc15_44: type = name_ref X, file.%X.decl [concrete = constants.%X] @@ -316,7 +330,7 @@ fn Use() { // CHECK:STDOUT: } // CHECK:STDOUT: %a: %ptr.db8 = value_binding a, %addr // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.990 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.990 = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %ptr.ref: %ptr.44a = name_ref ptr, file.%ptr.loc10_8 // CHECK:STDOUT: %X.ref.loc16_36: type = name_ref X, file.%X.decl [concrete = constants.%X] diff --git a/toolchain/check/testdata/as/var_init.carbon b/toolchain/check/testdata/as/var_init.carbon index db3cab637713..d2c7f33b93ec 100644 --- a/toolchain/check/testdata/as/var_init.carbon +++ b/toolchain/check/testdata/as/var_init.carbon @@ -41,6 +41,8 @@ fn Convert(unused t: ()) { // CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.7cc = facet_value %empty_tuple.type, (%ImplicitAs.impl_witness) [concrete] // CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.type.8de: type = fn_type @ImplicitAs.WithSelf.Convert, @ImplicitAs.WithSelf(%X, %ImplicitAs.facet) [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.6cb = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.6cb = var_pattern %x.patt [concrete] // CHECK:STDOUT: %.ce8: type = fn_type_with_self_type %ImplicitAs.WithSelf.Convert.type.8de, %ImplicitAs.facet [concrete] // CHECK:STDOUT: %empty_tuple.type.as.ImplicitAs.impl.Convert.bound: = bound_method %empty_tuple, %empty_tuple.type.as.ImplicitAs.impl.Convert [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.2: type = fn_type @Destroy.Op.loc12_3.2 [concrete] @@ -50,8 +52,8 @@ fn Convert(unused t: ()) { // CHECK:STDOUT: fn @Convert(%t.param: %empty_tuple.type) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.6cb = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.6cb = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.6cb = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.6cb = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %X = var %x.var_patt // CHECK:STDOUT: %.loc12_22.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] diff --git a/toolchain/check/testdata/basics/dump_sem_ir_ranges.carbon b/toolchain/check/testdata/basics/dump_sem_ir_ranges.carbon index 9b09f3909a0b..6b077b747a5d 100644 --- a/toolchain/check/testdata/basics/dump_sem_ir_ranges.carbon +++ b/toolchain/check/testdata/basics/dump_sem_ir_ranges.carbon @@ -108,16 +108,20 @@ library "[[@TEST_NAME]]"; // CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] // CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] // CHECK:STDOUT: %.262: Core.Form = init_form %empty_tuple.type [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern %return.param_patt, %empty_tuple.type [concrete] // CHECK:STDOUT: %B.type: type = fn_type @B [concrete] // CHECK:STDOUT: %B: %B.type = struct_value () [concrete] // CHECK:STDOUT: %C.type: type = fn_type @C [concrete] // CHECK:STDOUT: %C: %C.type = struct_value () [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.cb1 = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.cb1 = var_pattern %c.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %C.decl: %C.type = fn_decl @C [concrete = constants.%C] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern %return.param_patt, %.loc17_12.2 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern %return.param_patt, %.loc17_12.2 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc17_12.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc17_12.2: type = converted %.loc17_12.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -140,8 +144,8 @@ library "[[@TEST_NAME]]"; // CHECK:STDOUT: fn @C() -> out %return.param: %empty_tuple.type { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.cb1 = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.cb1 = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.cb1 = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type.cb1 = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %empty_tuple.type = var %c.var_patt // CHECK:STDOUT: %.loc18_16.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] diff --git a/toolchain/check/testdata/basics/duplicate_name_same_line.carbon b/toolchain/check/testdata/basics/duplicate_name_same_line.carbon index 80db247ce65e..b50ae7750242 100644 --- a/toolchain/check/testdata/basics/duplicate_name_same_line.carbon +++ b/toolchain/check/testdata/basics/duplicate_name_same_line.carbon @@ -26,6 +26,10 @@ fn A() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %n.patt.785a0d.1: %pattern_type.cb1 = ref_binding_pattern n [concrete] +// CHECK:STDOUT: %n.var_patt.961036.1: %pattern_type.cb1 = var_pattern %n.patt.785a0d.1 [concrete] +// CHECK:STDOUT: %n.patt.785a0d.2: %pattern_type.cb1 = ref_binding_pattern n [concrete] +// CHECK:STDOUT: %n.var_patt.961036.2: %pattern_type.cb1 = var_pattern %n.patt.785a0d.2 [concrete] // CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] // CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -36,8 +40,8 @@ fn A() { // CHECK:STDOUT: // CHECK:STDOUT: !if.then: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt.loc18_17: %pattern_type.cb1 = ref_binding_pattern n [concrete] -// CHECK:STDOUT: %n.var_patt.loc18_5: %pattern_type.cb1 = var_pattern %n.patt.loc18_17 [concrete] +// CHECK:STDOUT: %n.patt.loc18_17: %pattern_type.cb1 = ref_binding_pattern n [concrete = constants.%n.patt.785a0d.1] +// CHECK:STDOUT: %n.var_patt.loc18_5: %pattern_type.cb1 = var_pattern %n.patt.loc18_17 [concrete = constants.%n.var_patt.961036.1] // CHECK:STDOUT: } // CHECK:STDOUT: %n.var.loc18_5: ref %empty_tuple.type = var %n.var_patt.loc18_5 // CHECK:STDOUT: %.loc18_25.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] @@ -53,8 +57,8 @@ fn A() { // CHECK:STDOUT: // CHECK:STDOUT: !if.else: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt.loc18_49: %pattern_type.cb1 = ref_binding_pattern n [concrete] -// CHECK:STDOUT: %n.var_patt.loc18_37: %pattern_type.cb1 = var_pattern %n.patt.loc18_49 [concrete] +// CHECK:STDOUT: %n.patt.loc18_49: %pattern_type.cb1 = ref_binding_pattern n [concrete = constants.%n.patt.785a0d.2] +// CHECK:STDOUT: %n.var_patt.loc18_37: %pattern_type.cb1 = var_pattern %n.patt.loc18_49 [concrete = constants.%n.var_patt.961036.2] // CHECK:STDOUT: } // CHECK:STDOUT: %n.var.loc18_37: ref %empty_tuple.type = var %n.var_patt.loc18_37 // CHECK:STDOUT: %.loc18_57.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] diff --git a/toolchain/check/testdata/basics/include_in_dumps.carbon b/toolchain/check/testdata/basics/include_in_dumps.carbon index f3f2b55a0f4b..dc2a1e7ae9e0 100644 --- a/toolchain/check/testdata/basics/include_in_dumps.carbon +++ b/toolchain/check/testdata/basics/include_in_dumps.carbon @@ -123,6 +123,8 @@ fn F(c: C) { c.(I.Op)(); } // CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] // CHECK:STDOUT: %pattern_type.c60: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt.a33: %pattern_type.c60 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.696: %pattern_type.c60 = at_binding_pattern self, %self.param_patt.a33 [symbolic] // CHECK:STDOUT: %I.WithSelf.Op.type.dce: type = fn_type @I.WithSelf.Op, @I.WithSelf(%Self) [symbolic] // CHECK:STDOUT: %I.WithSelf.Op.c70: %I.WithSelf.Op.type.dce = struct_value () [symbolic] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] @@ -130,6 +132,8 @@ fn F(c: C) { c.(I.Op)(); } // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness @C.as.I.impl.%I.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %self.param_patt.303: %pattern_type.98b = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.49a: %pattern_type.98b = at_binding_pattern self, %self.param_patt.303 [concrete] // CHECK:STDOUT: %I.facet: %I.type = facet_value %C, (%I.impl_witness) [concrete] // CHECK:STDOUT: %I.WithSelf.Op.type.194: type = fn_type @I.WithSelf.Op, @I.WithSelf(%I.facet) [concrete] // CHECK:STDOUT: %I.WithSelf.Op.95d: %I.WithSelf.Op.type.194 = struct_value () [concrete] @@ -145,8 +149,8 @@ fn F(c: C) { c.(I.Op)(); } // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %I.WithSelf.Op.decl: @I.WithSelf.%I.WithSelf.Op.type (%I.WithSelf.Op.type.dce) = fn_decl @I.WithSelf.Op [symbolic = @I.WithSelf.%I.WithSelf.Op (constants.%I.WithSelf.Op.c70)] { -// CHECK:STDOUT: %self.param_patt: @I.WithSelf.Op.%pattern_type (%pattern_type.c60) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @I.WithSelf.Op.%pattern_type (%pattern_type.c60) = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc8_9.1: @I.WithSelf.Op.%pattern_type (%pattern_type.c60) = value_param_pattern [symbolic = %self.param_patt.loc8_9.2 (constants.%self.param_patt.a33)] +// CHECK:STDOUT: %self.patt.loc8_9.1: @I.WithSelf.Op.%pattern_type (%pattern_type.c60) = at_binding_pattern self, %self.param_patt.loc8_9.1 [symbolic = %self.patt.loc8_9.2 (constants.%self.patt.696)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @I.WithSelf.Op.%Self.as_type.loc8_9.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc8_9.1: type = splice_block %.loc8_9.2 [symbolic = %Self.as_type.loc8_9.1 (constants.%Self.as_type)] { @@ -170,6 +174,8 @@ fn F(c: C) { c.(I.Op)(); } // CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc8_9.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc8_9.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc8_9.1 [symbolic = %pattern_type (constants.%pattern_type.c60)] +// CHECK:STDOUT: %self.param_patt.loc8_9.2: @I.WithSelf.Op.%pattern_type (%pattern_type.c60) = value_param_pattern [symbolic = %self.param_patt.loc8_9.2 (constants.%self.param_patt.a33)] +// CHECK:STDOUT: %self.patt.loc8_9.2: @I.WithSelf.Op.%pattern_type (%pattern_type.c60) = at_binding_pattern self, %self.param_patt.loc8_9.2 [symbolic = %self.patt.loc8_9.2 (constants.%self.patt.696)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @I.WithSelf.Op.%Self.as_type.loc8_9.1 (%Self.as_type)); // CHECK:STDOUT: } @@ -185,6 +191,8 @@ fn F(c: C) { c.(I.Op)(); } // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc8_9.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.c60 +// CHECK:STDOUT: %self.param_patt.loc8_9.2 => constants.%self.param_patt.a33 +// CHECK:STDOUT: %self.patt.loc8_9.2 => constants.%self.patt.696 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I.WithSelf(constants.%I.facet) { @@ -198,6 +206,8 @@ fn F(c: C) { c.(I.Op)(); } // CHECK:STDOUT: %Self => constants.%I.facet // CHECK:STDOUT: %Self.as_type.loc8_9.1 => constants.%C // CHECK:STDOUT: %pattern_type => constants.%pattern_type.98b +// CHECK:STDOUT: %self.param_patt.loc8_9.2 => constants.%self.param_patt.303 +// CHECK:STDOUT: %self.patt.loc8_9.2 => constants.%self.patt.49a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_included.carbon @@ -207,6 +217,8 @@ fn F(c: C) { c.(I.Op)(); } // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.98b = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = at_binding_pattern c, %c.param_patt [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] @@ -216,6 +228,8 @@ fn F(c: C) { c.(I.Op)(); } // CHECK:STDOUT: %I.WithSelf.Op.fcf: %I.WithSelf.Op.type.351 = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] // CHECK:STDOUT: %pattern_type.b3a: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt.58e: %pattern_type.b3a = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.300: %pattern_type.b3a = at_binding_pattern self, %self.param_patt.58e [symbolic] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] // CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, imports.%Main.import_ref.421 [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness imports.%I.impl_witness_table [concrete] @@ -258,8 +272,8 @@ fn F(c: C) { c.(I.Op)(); } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %c.param_patt: %pattern_type.98b = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.98b = at_binding_pattern c, %c.param_patt [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.98b = value_param_pattern [concrete = constants.%c.param_patt] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] @@ -303,6 +317,8 @@ fn F(c: C) { c.(I.Op)(); } // CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.b3a)] +// CHECK:STDOUT: %self.param_patt: @I.WithSelf.Op.%pattern_type (%pattern_type.b3a) = value_param_pattern [symbolic = %self.param_patt (constants.%self.param_patt.58e)] +// CHECK:STDOUT: %self.patt: @I.WithSelf.Op.%pattern_type (%pattern_type.b3a) = at_binding_pattern self, %self.param_patt [symbolic = %self.patt (constants.%self.patt.300)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -320,6 +336,8 @@ fn F(c: C) { c.(I.Op)(); } // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.b3a +// CHECK:STDOUT: %self.param_patt => constants.%self.param_patt.58e +// CHECK:STDOUT: %self.patt => constants.%self.patt.300 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I.WithSelf(constants.%I.facet) { @@ -334,6 +352,8 @@ fn F(c: C) { c.(I.Op)(); } // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.98b = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = at_binding_pattern c, %c.param_patt [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] @@ -374,8 +394,8 @@ fn F(c: C) { c.(I.Op)(); } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %c.param_patt: %pattern_type.98b = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.98b = at_binding_pattern c, %c.param_patt [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.98b = value_param_pattern [concrete = constants.%c.param_patt] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] diff --git a/toolchain/check/testdata/basics/parens.carbon b/toolchain/check/testdata/basics/parens.carbon index 5c80e4db9caa..246db27ba066 100644 --- a/toolchain/check/testdata/basics/parens.carbon +++ b/toolchain/check/testdata/basics/parens.carbon @@ -22,6 +22,8 @@ var b: i32 = ((2)); // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.6b6 = var_pattern %a.patt [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -39,6 +41,8 @@ var b: i32 = ((2)); // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39, @Core.IntLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete] // CHECK:STDOUT: %bound_method.953: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_1.0c6: %i32 = int_value 1 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.9f3: = bound_method %int_2.ecc, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] // CHECK:STDOUT: %bound_method.3cb: = bound_method %int_2.ecc, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] @@ -66,15 +70,15 @@ var b: i32 = ((2)); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.6b6 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.6b6 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %i32 = var %a.var_patt [concrete] // CHECK:STDOUT: %i32.loc14: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %a: ref %i32 = ref_binding a, %a.var [concrete = %a.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var %b.var_patt [concrete] // CHECK:STDOUT: %i32.loc15: type = type_literal constants.%i32 [concrete = constants.%i32] diff --git a/toolchain/check/testdata/basics/raw_identifier.carbon b/toolchain/check/testdata/basics/raw_identifier.carbon index b9029a1b4ad7..1197c500b86e 100644 --- a/toolchain/check/testdata/basics/raw_identifier.carbon +++ b/toolchain/check/testdata/basics/raw_identifier.carbon @@ -29,11 +29,17 @@ fn C(r#if: ()) -> () { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type = at_binding_pattern n, %n.param_patt [concrete] // CHECK:STDOUT: %.262: Core.Form = init_form %empty_tuple.type [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %empty_tuple.type [concrete] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: %B.type: type = fn_type @B [concrete] // CHECK:STDOUT: %B: %B.type = struct_value () [concrete] +// CHECK:STDOUT: %if.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %if.patt: %pattern_type = at_binding_pattern r#if, %if.param_patt [concrete] // CHECK:STDOUT: %C.type: type = fn_type @C [concrete] // CHECK:STDOUT: %C: %C.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -45,10 +51,10 @@ fn C(r#if: ()) -> () { // CHECK:STDOUT: .C = %C.decl // CHECK:STDOUT: } // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] { -// CHECK:STDOUT: %n.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %n.patt: %pattern_type = at_binding_pattern n, %n.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %.loc14_17.2 [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type = value_param_pattern [concrete = constants.%n.param_patt] +// CHECK:STDOUT: %n.patt: %pattern_type = at_binding_pattern n, %n.param_patt [concrete = constants.%n.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %.loc14_17.2 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc14_17.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc14_17.2: type = converted %.loc14_17.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -63,10 +69,10 @@ fn C(r#if: ()) -> () { // CHECK:STDOUT: %return: ref %empty_tuple.type = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %B.decl: %B.type = fn_decl @B [concrete = constants.%B] { -// CHECK:STDOUT: %n.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %n.patt: %pattern_type = at_binding_pattern n, %n.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %.loc18_19.2 [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type = value_param_pattern [concrete = constants.%n.param_patt] +// CHECK:STDOUT: %n.patt: %pattern_type = at_binding_pattern n, %n.param_patt [concrete = constants.%n.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %.loc18_19.2 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc18_19.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc18_19.2: type = converted %.loc18_19.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -81,10 +87,10 @@ fn C(r#if: ()) -> () { // CHECK:STDOUT: %return: ref %empty_tuple.type = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: %C.type = fn_decl @C [concrete = constants.%C] { -// CHECK:STDOUT: %if.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %if.patt: %pattern_type = at_binding_pattern r#if, %if.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %.loc22_20.2 [concrete] +// CHECK:STDOUT: %if.param_patt: %pattern_type = value_param_pattern [concrete = constants.%if.param_patt] +// CHECK:STDOUT: %if.patt: %pattern_type = at_binding_pattern r#if, %if.param_patt [concrete = constants.%if.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %.loc22_20.2 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc22_20.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc22_20.2: type = converted %.loc22_20.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] diff --git a/toolchain/check/testdata/basics/raw_sem_ir/bundle.carbon b/toolchain/check/testdata/basics/raw_sem_ir/bundle.carbon index 2eadcac1ee02..ac071035b358 100644 --- a/toolchain/check/testdata/basics/raw_sem_ir/bundle.carbon +++ b/toolchain/check/testdata/basics/raw_sem_ir/bundle.carbon @@ -27,24 +27,24 @@ fn F(Form:! Core.Form) ->? Form; // CHECK:STDOUT: import_ir70000002: {decl_id: inst70000010, is_export: false} // CHECK:STDOUT: import_ir70000003: {decl_id: inst70000010, is_export: false} // CHECK:STDOUT: import_ir_insts: -// CHECK:STDOUT: import_ir_inst0: {ir_id: import_ir70000003, inst_id: inst50000020} +// CHECK:STDOUT: import_ir_inst0: {ir_id: import_ir70000003, inst_id: inst50000022} // CHECK:STDOUT: clang_decls: {} // CHECK:STDOUT: clang_decl_signatures: {} // CHECK:STDOUT: name_scopes: -// CHECK:STDOUT: name_scope0: {inst: instF, parent_scope: name_scope, has_error: false, extended_scopes: [], names: {name(Core): inst70000011, name0: inst7000002F}} +// CHECK:STDOUT: name_scope0: {inst: instF, parent_scope: name_scope, has_error: false, extended_scopes: [], names: {name(Core): inst70000011, name0: inst70000033}} // CHECK:STDOUT: name_scope70000001: {inst: inst70000011, parent_scope: name_scope0, has_error: false, extended_scopes: [], names: {name1: inst70000016}} // CHECK:STDOUT: entity_names: // CHECK:STDOUT: entity_name70000000: {name: name(PeriodSelf), parent_scope: name_scope, index: -1, is_template: 0, is_unused: 0, form: inst} // CHECK:STDOUT: entity_name70000001: {name: name1, parent_scope: name_scope70000001, index: -1, is_template: 0, is_unused: 0, form: inst} // CHECK:STDOUT: entity_name70000002: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: inst} // CHECK:STDOUT: functions: -// CHECK:STDOUT: function70000000: {name: name0, parent_scope: name_scope0, call_param_patterns_id: inst_block70000007, call_params_id: inst_block70000008, return_type_inst_id: inst70000022, return_form_inst_id: inst7000001F, return_pattern_id: inst70000029} +// CHECK:STDOUT: function70000000: {name: name0, parent_scope: name_scope0, call_param_patterns_id: inst_block70000007, call_params_id: inst_block70000008, return_type_inst_id: inst70000024, return_form_inst_id: inst70000021, return_pattern_id: inst7000002B} // CHECK:STDOUT: classes: {} // CHECK:STDOUT: interfaces: {} // CHECK:STDOUT: associated_constants: {} // CHECK:STDOUT: impls: {} // CHECK:STDOUT: generics: -// CHECK:STDOUT: generic70000000: {decl: inst7000002F, bindings: inst_block7000000B, self_specific_id: specific70000000, decl_block_id: inst_block7000000D, definition_block_id: inst_block} +// CHECK:STDOUT: generic70000000: {decl: inst70000033, bindings: inst_block7000000B, self_specific_id: specific70000000, decl_block_id: inst_block7000000D, definition_block_id: inst_block} // CHECK:STDOUT: specifics: // CHECK:STDOUT: specific70000000: {generic: generic70000000, args: inst_block7000000C, decl_block_id: inst_block7000000E, decl_has_error: 0, definition_block_id: inst_block, definition_has_error: 0} // CHECK:STDOUT: specific_interfaces: {} @@ -76,13 +76,13 @@ fn F(Form:! Core.Form) ->? Form; // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 0 // CHECK:STDOUT: alignment: 1 -// CHECK:STDOUT: 'type(inst70000037)': -// CHECK:STDOUT: value_repr: {kind: none, type: type(inst70000038)} +// CHECK:STDOUT: 'type(inst7000003C)': +// CHECK:STDOUT: value_repr: {kind: none, type: type(inst7000003D)} // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 0 // CHECK:STDOUT: alignment: 1 -// CHECK:STDOUT: 'type(inst70000038)': -// CHECK:STDOUT: value_repr: {kind: none, type: type(inst70000038)} +// CHECK:STDOUT: 'type(inst7000003D)': +// CHECK:STDOUT: value_repr: {kind: none, type: type(inst7000003D)} // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 0 // CHECK:STDOUT: alignment: 1 @@ -99,42 +99,47 @@ fn F(Form:! Core.Form) ->? Form; // CHECK:STDOUT: inst70000016: {kind: ImportRefLoaded, arg0: import_ir_inst0, arg1: entity_name70000001, type: type(TypeType)} // CHECK:STDOUT: inst70000017: {kind: NameRef, arg0: name1, arg1: inst70000016, type: type(TypeType)} // CHECK:STDOUT: inst70000018: {kind: PatternType, arg0: inst(FormType), type: type(TypeType)} -// CHECK:STDOUT: inst70000019: {kind: SymbolicBinding, arg0: entity_name70000002, arg1: inst, type: type(inst(FormType))} -// CHECK:STDOUT: inst7000001A: {kind: SymbolicBinding, arg0: entity_name70000002, arg1: inst, type: type(inst(FormType))} -// CHECK:STDOUT: inst7000001B: {kind: SymbolicBinding, arg0: entity_name70000002, arg1: inst, type: type(inst(FormType))} -// CHECK:STDOUT: inst7000001C: {kind: SymbolicBindingPattern, arg0: entity_name70000002, type: type(inst70000018)} -// CHECK:STDOUT: inst7000001D: {kind: NameRef, arg0: name1, arg1: inst70000019, type: type(inst(FormType))} -// CHECK:STDOUT: inst7000001E: {kind: RefineFormAction, arg0: inst7000001D, type: type(inst(InstType))} -// CHECK:STDOUT: inst7000001F: {kind: SpliceInst, arg0: inst7000001E, type: type(inst(FormType))} -// CHECK:STDOUT: inst70000020: {kind: SpliceInst, arg0: inst7000001E, type: type(inst(FormType))} -// CHECK:STDOUT: inst70000021: {kind: SpliceInst, arg0: inst7000001E, type: type(inst(FormType))} -// CHECK:STDOUT: inst70000022: {kind: TypeComponentOf, arg0: inst70000020, type: type(TypeType)} -// CHECK:STDOUT: inst70000023: {kind: PatternType, arg0: inst70000022, type: type(TypeType)} -// CHECK:STDOUT: inst70000024: {kind: OutFormParamPatternAction, arg0: inst7000001F, type: type(inst(InstType))} -// CHECK:STDOUT: inst70000025: {kind: SpliceInst, arg0: inst70000024, type: type(symbolic_constant7000000A)} -// CHECK:STDOUT: inst70000026: {kind: SpliceInst, arg0: inst70000024, type: type(symbolic_constant70000006)} -// CHECK:STDOUT: inst70000027: {kind: TypeComponentOf, arg0: inst70000021, type: type(TypeType)} -// CHECK:STDOUT: inst70000028: {kind: SpliceInst, arg0: inst70000024, type: type(symbolic_constant7000000A)} -// CHECK:STDOUT: inst70000029: {kind: ReturnSlotPattern, arg0: inst70000025, arg1: inst70000022, type: type(symbolic_constant7000000C)} -// CHECK:STDOUT: inst7000002A: {kind: PatternType, arg0: inst70000027, type: type(TypeType)} -// CHECK:STDOUT: inst7000002B: {kind: SpliceBlock, arg0: inst_block70000005, arg1: inst70000017, type: type(TypeType)} -// CHECK:STDOUT: inst7000002C: {kind: CalleePatternMatchAction, arg0: bundle70000000, type: type(inst(InstType))} -// CHECK:STDOUT: inst7000002D: {kind: SpliceInst, arg0: inst7000002C, type: type(symbolic_constant7000000A)} -// CHECK:STDOUT: inst7000002E: {kind: ReturnSlot, arg0: inst70000022, arg1: inst7000002D, type: type(symbolic_constant7000000A)} -// CHECK:STDOUT: inst7000002F: {kind: FunctionDecl, arg0: function70000000, arg1: inst_block7000000A, type: type(inst70000037)} -// CHECK:STDOUT: inst70000030: {kind: RefineFormAction, arg0: inst7000001A, type: type(inst(InstType))} -// CHECK:STDOUT: inst70000031: {kind: SpliceInst, arg0: inst70000030, type: type(inst(FormType))} -// CHECK:STDOUT: inst70000032: {kind: OutFormParamPatternAction, arg0: inst70000031, type: type(inst(InstType))} -// CHECK:STDOUT: inst70000033: {kind: TypeComponentOf, arg0: inst70000031, type: type(TypeType)} -// CHECK:STDOUT: inst70000034: {kind: SpliceInst, arg0: inst70000032, type: type(symbolic_constant70000011)} -// CHECK:STDOUT: inst70000035: {kind: PatternType, arg0: inst70000033, type: type(TypeType)} -// CHECK:STDOUT: inst70000036: {kind: CalleePatternMatchAction, arg0: bundle70000001, type: type(inst(InstType))} -// CHECK:STDOUT: inst70000037: {kind: FunctionType, arg0: function70000000, arg1: specific, type: type(TypeType)} -// CHECK:STDOUT: inst70000038: {kind: TupleType, arg0: inst_block_empty, type: type(TypeType)} -// CHECK:STDOUT: inst70000039: {kind: StructValue, arg0: inst_block_empty, type: type(inst70000037)} +// CHECK:STDOUT: inst70000019: {kind: SymbolicBindingPattern, arg0: entity_name70000002, type: type(inst70000018)} +// CHECK:STDOUT: inst7000001A: {kind: SymbolicBindingPattern, arg0: entity_name70000002, type: type(inst70000018)} +// CHECK:STDOUT: inst7000001B: {kind: SymbolicBindingPattern, arg0: entity_name70000002, type: type(inst70000018)} +// CHECK:STDOUT: inst7000001C: {kind: SymbolicBinding, arg0: entity_name70000002, arg1: inst, type: type(inst(FormType))} +// CHECK:STDOUT: inst7000001D: {kind: SymbolicBinding, arg0: entity_name70000002, arg1: inst, type: type(inst(FormType))} +// CHECK:STDOUT: inst7000001E: {kind: SymbolicBinding, arg0: entity_name70000002, arg1: inst, type: type(inst(FormType))} +// CHECK:STDOUT: inst7000001F: {kind: NameRef, arg0: name1, arg1: inst7000001C, type: type(inst(FormType))} +// CHECK:STDOUT: inst70000020: {kind: RefineFormAction, arg0: inst7000001F, type: type(inst(InstType))} +// CHECK:STDOUT: inst70000021: {kind: SpliceInst, arg0: inst70000020, type: type(inst(FormType))} +// CHECK:STDOUT: inst70000022: {kind: SpliceInst, arg0: inst70000020, type: type(inst(FormType))} +// CHECK:STDOUT: inst70000023: {kind: SpliceInst, arg0: inst70000020, type: type(inst(FormType))} +// CHECK:STDOUT: inst70000024: {kind: TypeComponentOf, arg0: inst70000022, type: type(TypeType)} +// CHECK:STDOUT: inst70000025: {kind: PatternType, arg0: inst70000024, type: type(TypeType)} +// CHECK:STDOUT: inst70000026: {kind: OutFormParamPatternAction, arg0: inst70000021, type: type(inst(InstType))} +// CHECK:STDOUT: inst70000027: {kind: SpliceInst, arg0: inst70000026, type: type(symbolic_constant7000000C)} +// CHECK:STDOUT: inst70000028: {kind: SpliceInst, arg0: inst70000026, type: type(symbolic_constant70000008)} +// CHECK:STDOUT: inst70000029: {kind: TypeComponentOf, arg0: inst70000023, type: type(TypeType)} +// CHECK:STDOUT: inst7000002A: {kind: SpliceInst, arg0: inst70000026, type: type(symbolic_constant7000000C)} +// CHECK:STDOUT: inst7000002B: {kind: ReturnSlotPattern, arg0: inst70000027, arg1: inst70000024, type: type(symbolic_constant7000000F)} +// CHECK:STDOUT: inst7000002C: {kind: ReturnSlotPattern, arg0: inst70000028, arg1: inst70000024, type: type(symbolic_constant70000009)} +// CHECK:STDOUT: inst7000002D: {kind: PatternType, arg0: inst70000029, type: type(TypeType)} +// CHECK:STDOUT: inst7000002E: {kind: ReturnSlotPattern, arg0: inst7000002A, arg1: inst70000029, type: type(symbolic_constant7000000F)} +// CHECK:STDOUT: inst7000002F: {kind: SpliceBlock, arg0: inst_block70000005, arg1: inst70000017, type: type(TypeType)} +// CHECK:STDOUT: inst70000030: {kind: CalleePatternMatchAction, arg0: bundle70000000, type: type(inst(InstType))} +// CHECK:STDOUT: inst70000031: {kind: SpliceInst, arg0: inst70000030, type: type(symbolic_constant7000000C)} +// CHECK:STDOUT: inst70000032: {kind: ReturnSlot, arg0: inst70000024, arg1: inst70000031, type: type(symbolic_constant7000000C)} +// CHECK:STDOUT: inst70000033: {kind: FunctionDecl, arg0: function70000000, arg1: inst_block7000000A, type: type(inst7000003C)} +// CHECK:STDOUT: inst70000034: {kind: RefineFormAction, arg0: inst7000001D, type: type(inst(InstType))} +// CHECK:STDOUT: inst70000035: {kind: SpliceInst, arg0: inst70000034, type: type(inst(FormType))} +// CHECK:STDOUT: inst70000036: {kind: OutFormParamPatternAction, arg0: inst70000035, type: type(inst(InstType))} +// CHECK:STDOUT: inst70000037: {kind: TypeComponentOf, arg0: inst70000035, type: type(TypeType)} +// CHECK:STDOUT: inst70000038: {kind: SpliceInst, arg0: inst70000036, type: type(symbolic_constant70000015)} +// CHECK:STDOUT: inst70000039: {kind: PatternType, arg0: inst70000037, type: type(TypeType)} +// CHECK:STDOUT: inst7000003A: {kind: ReturnSlotPattern, arg0: inst70000038, arg1: inst70000037, type: type(symbolic_constant70000017)} +// CHECK:STDOUT: inst7000003B: {kind: CalleePatternMatchAction, arg0: bundle70000001, type: type(inst(InstType))} +// CHECK:STDOUT: inst7000003C: {kind: FunctionType, arg0: function70000000, arg1: specific, type: type(TypeType)} +// CHECK:STDOUT: inst7000003D: {kind: TupleType, arg0: inst_block_empty, type: type(TypeType)} +// CHECK:STDOUT: inst7000003E: {kind: StructValue, arg0: inst_block_empty, type: type(inst7000003C)} // CHECK:STDOUT: bundles: -// CHECK:STDOUT: bundle70000000: {arg0: inst70000025, arg1: call_param0} -// CHECK:STDOUT: bundle70000001: {arg0: inst70000034, arg1: call_param0} +// CHECK:STDOUT: bundle70000000: {arg0: inst70000027, arg1: call_param0} +// CHECK:STDOUT: bundle70000001: {arg0: inst70000038, arg1: call_param0} // CHECK:STDOUT: constant_values: // CHECK:STDOUT: values: // CHECK:STDOUT: instF: concrete_constant(instF) @@ -149,60 +154,70 @@ fn F(Form:! Core.Form) ->? Form; // CHECK:STDOUT: inst70000019: symbolic_constant70000002 // CHECK:STDOUT: inst7000001A: symbolic_constant70000001 // CHECK:STDOUT: inst7000001B: symbolic_constant70000002 -// CHECK:STDOUT: inst7000001C: concrete_constant(inst7000001C) -// CHECK:STDOUT: inst7000001D: symbolic_constant70000002 -// CHECK:STDOUT: inst7000001E: symbolic_constant70000003 -// CHECK:STDOUT: inst7000001F: symbolic_constant70000005 -// CHECK:STDOUT: inst70000020: symbolic_constant70000004 -// CHECK:STDOUT: inst70000021: symbolic_constant70000005 +// CHECK:STDOUT: inst7000001C: symbolic_constant70000004 +// CHECK:STDOUT: inst7000001D: symbolic_constant70000003 +// CHECK:STDOUT: inst7000001E: symbolic_constant70000004 +// CHECK:STDOUT: inst7000001F: symbolic_constant70000004 +// CHECK:STDOUT: inst70000020: symbolic_constant70000005 +// CHECK:STDOUT: inst70000021: symbolic_constant70000007 // CHECK:STDOUT: inst70000022: symbolic_constant70000006 // CHECK:STDOUT: inst70000023: symbolic_constant70000007 // CHECK:STDOUT: inst70000024: symbolic_constant70000008 -// CHECK:STDOUT: inst70000025: symbolic_constant7000000B -// CHECK:STDOUT: inst70000026: symbolic_constant70000009 -// CHECK:STDOUT: inst70000027: symbolic_constant7000000A +// CHECK:STDOUT: inst70000025: symbolic_constant70000009 +// CHECK:STDOUT: inst70000026: symbolic_constant7000000A +// CHECK:STDOUT: inst70000027: symbolic_constant7000000D // CHECK:STDOUT: inst70000028: symbolic_constant7000000B -// CHECK:STDOUT: inst70000029: concrete_constant(inst70000029) -// CHECK:STDOUT: inst7000002A: symbolic_constant7000000C -// CHECK:STDOUT: inst7000002B: concrete_constant(inst(FormType)) -// CHECK:STDOUT: inst7000002C: symbolic_constant7000000D -// CHECK:STDOUT: inst7000002F: concrete_constant(inst70000039) -// CHECK:STDOUT: inst70000030: symbolic_constant7000000E -// CHECK:STDOUT: inst70000031: symbolic_constant7000000F -// CHECK:STDOUT: inst70000032: symbolic_constant70000010 -// CHECK:STDOUT: inst70000033: symbolic_constant70000011 +// CHECK:STDOUT: inst70000029: symbolic_constant7000000C +// CHECK:STDOUT: inst7000002A: symbolic_constant7000000D +// CHECK:STDOUT: inst7000002B: symbolic_constant70000010 +// CHECK:STDOUT: inst7000002C: symbolic_constant7000000E +// CHECK:STDOUT: inst7000002D: symbolic_constant7000000F +// CHECK:STDOUT: inst7000002E: symbolic_constant70000010 +// CHECK:STDOUT: inst7000002F: concrete_constant(inst(FormType)) +// CHECK:STDOUT: inst70000030: symbolic_constant70000011 +// CHECK:STDOUT: inst70000033: concrete_constant(inst7000003E) // CHECK:STDOUT: inst70000034: symbolic_constant70000012 // CHECK:STDOUT: inst70000035: symbolic_constant70000013 // CHECK:STDOUT: inst70000036: symbolic_constant70000014 -// CHECK:STDOUT: inst70000037: concrete_constant(inst70000037) -// CHECK:STDOUT: inst70000038: concrete_constant(inst70000038) -// CHECK:STDOUT: inst70000039: concrete_constant(inst70000039) +// CHECK:STDOUT: inst70000037: symbolic_constant70000015 +// CHECK:STDOUT: inst70000038: symbolic_constant70000016 +// CHECK:STDOUT: inst70000039: symbolic_constant70000017 +// CHECK:STDOUT: inst7000003A: symbolic_constant70000018 +// CHECK:STDOUT: inst7000003B: symbolic_constant70000019 +// CHECK:STDOUT: inst7000003C: concrete_constant(inst7000003C) +// CHECK:STDOUT: inst7000003D: concrete_constant(inst7000003D) +// CHECK:STDOUT: inst7000003E: concrete_constant(inst7000003E) // CHECK:STDOUT: symbolic_constants: // CHECK:STDOUT: symbolic_constant70000000: {inst: inst70000014, kind: self, attached: null} // CHECK:STDOUT: symbolic_constant70000001: {inst: inst7000001A, kind: checked, attached: null} // CHECK:STDOUT: symbolic_constant70000002: {inst: inst7000001A, kind: checked, attached: {generic: generic70000000, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant70000003: {inst: inst7000001E, kind: template, attached: {generic: generic70000000, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant70000004: {inst: inst70000020, kind: template, attached: null} +// CHECK:STDOUT: symbolic_constant70000003: {inst: inst7000001D, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant70000004: {inst: inst7000001D, kind: checked, attached: {generic: generic70000000, index: generic_inst_in_decl1}} // CHECK:STDOUT: symbolic_constant70000005: {inst: inst70000020, kind: template, attached: {generic: generic70000000, index: generic_inst_in_decl2}} // CHECK:STDOUT: symbolic_constant70000006: {inst: inst70000022, kind: template, attached: null} -// CHECK:STDOUT: symbolic_constant70000007: {inst: inst70000023, kind: template, attached: null} -// CHECK:STDOUT: symbolic_constant70000008: {inst: inst70000024, kind: template, attached: {generic: generic70000000, index: generic_inst_in_decl3}} -// CHECK:STDOUT: symbolic_constant70000009: {inst: inst70000026, kind: template, attached: null} -// CHECK:STDOUT: symbolic_constant7000000A: {inst: inst70000022, kind: template, attached: {generic: generic70000000, index: generic_inst_in_decl4}} -// CHECK:STDOUT: symbolic_constant7000000B: {inst: inst70000026, kind: template, attached: {generic: generic70000000, index: generic_inst_in_decl5}} -// CHECK:STDOUT: symbolic_constant7000000C: {inst: inst70000023, kind: template, attached: {generic: generic70000000, index: generic_inst_in_decl6}} -// CHECK:STDOUT: symbolic_constant7000000D: {inst: inst7000002C, kind: template, attached: {generic: generic70000000, index: generic_inst_in_decl7}} -// CHECK:STDOUT: symbolic_constant7000000E: {inst: inst70000030, kind: template, attached: null} -// CHECK:STDOUT: symbolic_constant7000000F: {inst: inst70000031, kind: template, attached: null} -// CHECK:STDOUT: symbolic_constant70000010: {inst: inst70000032, kind: template, attached: null} -// CHECK:STDOUT: symbolic_constant70000011: {inst: inst70000033, kind: template, attached: null} +// CHECK:STDOUT: symbolic_constant70000007: {inst: inst70000022, kind: template, attached: {generic: generic70000000, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant70000008: {inst: inst70000024, kind: template, attached: null} +// CHECK:STDOUT: symbolic_constant70000009: {inst: inst70000025, kind: template, attached: null} +// CHECK:STDOUT: symbolic_constant7000000A: {inst: inst70000026, kind: template, attached: {generic: generic70000000, index: generic_inst_in_decl4}} +// CHECK:STDOUT: symbolic_constant7000000B: {inst: inst70000028, kind: template, attached: null} +// CHECK:STDOUT: symbolic_constant7000000C: {inst: inst70000024, kind: template, attached: {generic: generic70000000, index: generic_inst_in_decl5}} +// CHECK:STDOUT: symbolic_constant7000000D: {inst: inst70000028, kind: template, attached: {generic: generic70000000, index: generic_inst_in_decl6}} +// CHECK:STDOUT: symbolic_constant7000000E: {inst: inst7000002C, kind: template, attached: null} +// CHECK:STDOUT: symbolic_constant7000000F: {inst: inst70000025, kind: template, attached: {generic: generic70000000, index: generic_inst_in_decl7}} +// CHECK:STDOUT: symbolic_constant70000010: {inst: inst7000002C, kind: template, attached: {generic: generic70000000, index: generic_inst_in_decl8}} +// CHECK:STDOUT: symbolic_constant70000011: {inst: inst70000030, kind: template, attached: {generic: generic70000000, index: generic_inst_in_decl9}} // CHECK:STDOUT: symbolic_constant70000012: {inst: inst70000034, kind: template, attached: null} // CHECK:STDOUT: symbolic_constant70000013: {inst: inst70000035, kind: template, attached: null} // CHECK:STDOUT: symbolic_constant70000014: {inst: inst70000036, kind: template, attached: null} +// CHECK:STDOUT: symbolic_constant70000015: {inst: inst70000037, kind: template, attached: null} +// CHECK:STDOUT: symbolic_constant70000016: {inst: inst70000038, kind: template, attached: null} +// CHECK:STDOUT: symbolic_constant70000017: {inst: inst70000039, kind: template, attached: null} +// CHECK:STDOUT: symbolic_constant70000018: {inst: inst7000003A, kind: template, attached: null} +// CHECK:STDOUT: symbolic_constant70000019: {inst: inst7000003B, kind: template, attached: null} // CHECK:STDOUT: inst_blocks: // CHECK:STDOUT: inst_block_empty: {} // CHECK:STDOUT: exports: -// CHECK:STDOUT: 0: inst7000002F +// CHECK:STDOUT: 0: inst70000033 // CHECK:STDOUT: generated: {} // CHECK:STDOUT: imports: // CHECK:STDOUT: 0: inst70000011 @@ -213,48 +228,52 @@ fn F(Form:! Core.Form) ->? Form; // CHECK:STDOUT: 1: inst70000015 // CHECK:STDOUT: 2: inst70000017 // CHECK:STDOUT: inst_block70000006: -// CHECK:STDOUT: 0: inst7000001C -// CHECK:STDOUT: inst_block70000007: -// CHECK:STDOUT: 0: inst70000025 -// CHECK:STDOUT: inst_block70000008: -// CHECK:STDOUT: 0: inst7000002D -// CHECK:STDOUT: inst_block70000009: -// CHECK:STDOUT: 0: inst7000001C -// CHECK:STDOUT: 1: inst70000029 -// CHECK:STDOUT: inst_block7000000A: -// CHECK:STDOUT: 0: inst7000001D -// CHECK:STDOUT: 1: inst7000001F -// CHECK:STDOUT: 2: inst70000025 -// CHECK:STDOUT: 3: inst7000002B -// CHECK:STDOUT: 4: inst70000019 -// CHECK:STDOUT: 5: inst7000002D -// CHECK:STDOUT: 6: inst7000002E -// CHECK:STDOUT: inst_block7000000B: // CHECK:STDOUT: 0: inst70000019 +// CHECK:STDOUT: inst_block70000007: +// CHECK:STDOUT: 0: inst70000027 +// CHECK:STDOUT: inst_block70000008: +// CHECK:STDOUT: 0: inst70000031 +// CHECK:STDOUT: inst_block70000009: +// CHECK:STDOUT: 0: inst70000019 +// CHECK:STDOUT: 1: inst7000002B +// CHECK:STDOUT: inst_block7000000A: +// CHECK:STDOUT: 0: inst7000001F +// CHECK:STDOUT: 1: inst70000021 +// CHECK:STDOUT: 2: inst70000027 +// CHECK:STDOUT: 3: inst7000002F +// CHECK:STDOUT: 4: inst7000001C +// CHECK:STDOUT: 5: inst70000031 +// CHECK:STDOUT: 6: inst70000032 +// CHECK:STDOUT: inst_block7000000B: +// CHECK:STDOUT: 0: inst7000001C // CHECK:STDOUT: inst_block7000000C: -// CHECK:STDOUT: 0: inst7000001A +// CHECK:STDOUT: 0: inst7000001D // CHECK:STDOUT: inst_block7000000D: // CHECK:STDOUT: 0: inst7000001B // CHECK:STDOUT: 1: inst7000001E -// CHECK:STDOUT: 2: inst70000021 -// CHECK:STDOUT: 3: inst70000024 -// CHECK:STDOUT: 4: inst70000027 -// CHECK:STDOUT: 5: inst70000028 +// CHECK:STDOUT: 2: inst70000020 +// CHECK:STDOUT: 3: inst70000023 +// CHECK:STDOUT: 4: inst70000026 +// CHECK:STDOUT: 5: inst70000029 // CHECK:STDOUT: 6: inst7000002A -// CHECK:STDOUT: 7: inst7000002C +// CHECK:STDOUT: 7: inst7000002D +// CHECK:STDOUT: 8: inst7000002E +// CHECK:STDOUT: 9: inst70000030 // CHECK:STDOUT: inst_block7000000E: // CHECK:STDOUT: 0: inst7000001A -// CHECK:STDOUT: 1: inst70000030 -// CHECK:STDOUT: 2: inst70000031 -// CHECK:STDOUT: 3: inst70000032 -// CHECK:STDOUT: 4: inst70000033 -// CHECK:STDOUT: 5: inst70000034 -// CHECK:STDOUT: 6: inst70000035 -// CHECK:STDOUT: 7: inst70000036 +// CHECK:STDOUT: 1: inst7000001D +// CHECK:STDOUT: 2: inst70000034 +// CHECK:STDOUT: 3: inst70000035 +// CHECK:STDOUT: 4: inst70000036 +// CHECK:STDOUT: 5: inst70000037 +// CHECK:STDOUT: 6: inst70000038 +// CHECK:STDOUT: 7: inst70000039 +// CHECK:STDOUT: 8: inst7000003A +// CHECK:STDOUT: 9: inst7000003B // CHECK:STDOUT: inst_block7000000F: // CHECK:STDOUT: 0: instF // CHECK:STDOUT: 1: inst70000010 -// CHECK:STDOUT: 2: inst7000002F +// CHECK:STDOUT: 2: inst70000033 // CHECK:STDOUT: value_stores: // CHECK:STDOUT: shared_values: // CHECK:STDOUT: ints: {} diff --git a/toolchain/check/testdata/basics/raw_sem_ir/cpp_interop.carbon b/toolchain/check/testdata/basics/raw_sem_ir/cpp_interop.carbon index b16ee0af6fea..6fdb17779693 100644 --- a/toolchain/check/testdata/basics/raw_sem_ir/cpp_interop.carbon +++ b/toolchain/check/testdata/basics/raw_sem_ir/cpp_interop.carbon @@ -56,18 +56,18 @@ fn G(x: Cpp.X) { // CHECK:STDOUT: clang_decl_id50000000: {key: {decl: "namespace Carbon {\n}"}, inst_id: instF} // CHECK:STDOUT: clang_decl_id50000001: {key: {decl: ""}, inst_id: inst50000011} // CHECK:STDOUT: clang_decl_id50000002: {key: {decl: "struct X {}"}, inst_id: inst50000013} -// CHECK:STDOUT: clang_decl_id50000003: {key: {decl: "X * _Nonnull p"}, inst_id: inst50000022} -// CHECK:STDOUT: clang_decl_id50000004: {key: {decl: "void f(X x = {})", clang_decl_signature_id: clang_decl_signature_id50000000}, inst_id: inst5000002D} -// CHECK:STDOUT: clang_decl_id50000005: {key: {decl: "inline void f__carbon_thunk()", clang_decl_signature_id: clang_decl_signature_id50000000}, inst_id: inst50000030} -// CHECK:STDOUT: clang_decl_id50000006: {key: {decl: "void f(X x = {})", clang_decl_signature_id: clang_decl_signature_id50000001}, inst_id: inst5000003B} -// CHECK:STDOUT: clang_decl_id50000007: {key: {decl: "inline void f__carbon_thunk(X * _Nonnull x)", clang_decl_signature_id: clang_decl_signature_id50000001}, inst_id: inst50000043} -// CHECK:STDOUT: clang_decl_id50000008: {key: {decl: "X * _Nonnull global"}, inst_id: inst5000004E} +// CHECK:STDOUT: clang_decl_id50000003: {key: {decl: "X * _Nonnull p"}, inst_id: inst50000024} +// CHECK:STDOUT: clang_decl_id50000004: {key: {decl: "void f(X x = {})", clang_decl_signature_id: clang_decl_signature_id50000000}, inst_id: inst5000002F} +// CHECK:STDOUT: clang_decl_id50000005: {key: {decl: "inline void f__carbon_thunk()", clang_decl_signature_id: clang_decl_signature_id50000000}, inst_id: inst50000032} +// CHECK:STDOUT: clang_decl_id50000006: {key: {decl: "void f(X x = {})", clang_decl_signature_id: clang_decl_signature_id50000001}, inst_id: inst5000003D} +// CHECK:STDOUT: clang_decl_id50000007: {key: {decl: "inline void f__carbon_thunk(X * _Nonnull x)", clang_decl_signature_id: clang_decl_signature_id50000001}, inst_id: inst50000047} +// CHECK:STDOUT: clang_decl_id50000008: {key: {decl: "X * _Nonnull global"}, inst_id: inst50000054} // CHECK:STDOUT: clang_decl_signatures: // CHECK:STDOUT: clang_decl_signature_id50000000: {kind: normal, num_params: 0} // CHECK:STDOUT: clang_decl_signature_id50000001: {kind: normal, num_params: 1, modes: [value]} // CHECK:STDOUT: name_scopes: -// CHECK:STDOUT: name_scope0: {inst: instF, parent_scope: name_scope, has_error: false, extended_scopes: [], names: {name(Cpp): inst50000011, name0: inst5000001C}} -// CHECK:STDOUT: name_scope50000001: {inst: inst50000011, parent_scope: name_scope0, has_error: false, extended_scopes: [], names: {name2: inst50000013, name3: inst5000002A, name4: inst5000004E}} +// CHECK:STDOUT: name_scope0: {inst: instF, parent_scope: name_scope, has_error: false, extended_scopes: [], names: {name(Cpp): inst50000011, name0: inst5000001E}} +// CHECK:STDOUT: name_scope50000001: {inst: inst50000011, parent_scope: name_scope0, has_error: false, extended_scopes: [], names: {name2: inst50000013, name3: inst5000002C, name4: inst50000054}} // CHECK:STDOUT: name_scope50000002: {inst: inst50000013, parent_scope: name_scope50000001, has_error: false, extended_scopes: [], names: {}} // CHECK:STDOUT: entity_names: // CHECK:STDOUT: entity_name50000000: {name: name1, parent_scope: name_scope, index: -1, is_template: 0, is_unused: 0, form: inst} @@ -81,7 +81,7 @@ fn G(x: Cpp.X) { // CHECK:STDOUT: function50000003: {name: name3, parent_scope: name_scope50000001, call_param_patterns_id: inst_block5000000F, call_params_id: inst_block50000010} // CHECK:STDOUT: function50000004: {name: name6, parent_scope: name_scope50000001, call_param_patterns_id: inst_block50000015, call_params_id: inst_block50000016} // CHECK:STDOUT: classes: -// CHECK:STDOUT: class50000000: {name: name2, parent_scope: name_scope50000001, self_type_id: type(inst50000014), inheritance_kind: Base, is_dynamic: 0, scope_id: name_scope50000002, body_block_id: inst_block5000000C, adapt_id: inst, base_id: inst, complete_type_witness_id: inst50000025, vtable_decl_id: inst}} +// CHECK:STDOUT: class50000000: {name: name2, parent_scope: name_scope50000001, self_type_id: type(inst50000014), inheritance_kind: Base, is_dynamic: 0, scope_id: name_scope50000002, body_block_id: inst_block5000000C, adapt_id: inst, base_id: inst, complete_type_witness_id: inst50000027, vtable_decl_id: inst}} // CHECK:STDOUT: interfaces: {} // CHECK:STDOUT: associated_constants: {} // CHECK:STDOUT: impls: {} @@ -91,9 +91,9 @@ fn G(x: Cpp.X) { // CHECK:STDOUT: struct_type_fields: // CHECK:STDOUT: struct_type_fields_empty: {} // CHECK:STDOUT: struct_type_fields50000001: -// CHECK:STDOUT: 0: {name_id: name5, type_inst_id: inst50000020} +// CHECK:STDOUT: 0: {name_id: name5, type_inst_id: inst50000022} // CHECK:STDOUT: struct_type_fields50000002: -// CHECK:STDOUT: 0: {name_id: name5, type_inst_id: inst50000020} +// CHECK:STDOUT: 0: {name_id: name5, type_inst_id: inst50000022} // CHECK:STDOUT: types: // CHECK:STDOUT: 'type(TypeType)': // CHECK:STDOUT: value_repr: {kind: copy, type: type(TypeType)} @@ -120,18 +120,18 @@ fn G(x: Cpp.X) { // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 0 // CHECK:STDOUT: alignment: 1 -// CHECK:STDOUT: 'type(inst5000001D)': -// CHECK:STDOUT: value_repr: {kind: none, type: type(inst5000001E)} -// CHECK:STDOUT: object_layout: -// CHECK:STDOUT: size: 0 -// CHECK:STDOUT: alignment: 1 -// CHECK:STDOUT: 'type(inst5000001E)': -// CHECK:STDOUT: value_repr: {kind: none, type: type(inst5000001E)} +// CHECK:STDOUT: 'type(inst5000001F)': +// CHECK:STDOUT: value_repr: {kind: none, type: type(inst50000020)} // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 0 // CHECK:STDOUT: alignment: 1 // CHECK:STDOUT: 'type(inst50000020)': -// CHECK:STDOUT: value_repr: {kind: copy, type: type(inst50000020)} +// CHECK:STDOUT: value_repr: {kind: none, type: type(inst50000020)} +// CHECK:STDOUT: object_layout: +// CHECK:STDOUT: size: 0 +// CHECK:STDOUT: alignment: 1 +// CHECK:STDOUT: 'type(inst50000022)': +// CHECK:STDOUT: value_repr: {kind: copy, type: type(inst50000022)} // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 8 // CHECK:STDOUT: alignment: 8 @@ -140,43 +140,43 @@ fn G(x: Cpp.X) { // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 0 // CHECK:STDOUT: alignment: 1 -// CHECK:STDOUT: 'type(inst50000027)': -// CHECK:STDOUT: value_repr: {kind: copy, type: type(inst50000027)} +// CHECK:STDOUT: 'type(inst50000029)': +// CHECK:STDOUT: value_repr: {kind: copy, type: type(inst50000029)} // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 8 // CHECK:STDOUT: alignment: 8 -// CHECK:STDOUT: 'type(inst50000024)': -// CHECK:STDOUT: value_repr: {kind: pointer, type: type(inst50000027)} +// CHECK:STDOUT: 'type(inst50000026)': +// CHECK:STDOUT: value_repr: {kind: pointer, type: type(inst50000029)} // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 8 // CHECK:STDOUT: alignment: 8 // CHECK:STDOUT: 'type(inst50000014)': -// CHECK:STDOUT: value_repr: {kind: pointer, type: type(inst50000027)} +// CHECK:STDOUT: value_repr: {kind: pointer, type: type(inst50000029)} // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 8 // CHECK:STDOUT: alignment: 8 -// CHECK:STDOUT: 'type(inst50000029)': -// CHECK:STDOUT: value_repr: {kind: none, type: type(inst5000001E)} +// CHECK:STDOUT: 'type(inst5000002B)': +// CHECK:STDOUT: value_repr: {kind: none, type: type(inst50000020)} // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 0 // CHECK:STDOUT: alignment: 1 -// CHECK:STDOUT: 'type(inst5000002E)': -// CHECK:STDOUT: value_repr: {kind: none, type: type(inst5000001E)} +// CHECK:STDOUT: 'type(inst50000030)': +// CHECK:STDOUT: value_repr: {kind: none, type: type(inst50000020)} // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 0 // CHECK:STDOUT: alignment: 1 -// CHECK:STDOUT: 'type(inst50000031)': -// CHECK:STDOUT: value_repr: {kind: none, type: type(inst5000001E)} +// CHECK:STDOUT: 'type(inst50000033)': +// CHECK:STDOUT: value_repr: {kind: none, type: type(inst50000020)} // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 0 // CHECK:STDOUT: alignment: 1 -// CHECK:STDOUT: 'type(inst5000003C)': -// CHECK:STDOUT: value_repr: {kind: none, type: type(inst5000001E)} +// CHECK:STDOUT: 'type(inst5000003E)': +// CHECK:STDOUT: value_repr: {kind: none, type: type(inst50000020)} // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 0 // CHECK:STDOUT: alignment: 1 -// CHECK:STDOUT: 'type(inst50000044)': -// CHECK:STDOUT: value_repr: {kind: none, type: type(inst5000001E)} +// CHECK:STDOUT: 'type(inst50000048)': +// CHECK:STDOUT: value_repr: {kind: none, type: type(inst50000020)} // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 0 // CHECK:STDOUT: alignment: 1 @@ -206,69 +206,75 @@ fn G(x: Cpp.X) { // CHECK:STDOUT: inst50000015: {kind: NameRef, arg0: name2, arg1: inst50000013, type: type(TypeType)} // CHECK:STDOUT: inst50000016: {kind: PatternType, arg0: inst50000014, type: type(TypeType)} // CHECK:STDOUT: inst50000017: {kind: ValueParamPattern, arg0: name1, type: type(inst50000016)} -// CHECK:STDOUT: inst50000018: {kind: ValueBinding, arg0: entity_name50000000, arg1: inst5000001A, type: type(inst50000014)} +// CHECK:STDOUT: inst50000018: {kind: ValueParamPattern, arg0: name1, type: type(inst50000016)} // CHECK:STDOUT: inst50000019: {kind: WrapperBindingPattern, arg0: entity_name50000000, arg1: inst50000017, type: type(inst50000016)} -// CHECK:STDOUT: inst5000001A: {kind: ValueParam, arg0: call_param0, arg1: name1, type: type(inst50000014)} -// CHECK:STDOUT: inst5000001B: {kind: SpliceBlock, arg0: inst_block50000005, arg1: inst50000015, type: type(TypeType)} -// CHECK:STDOUT: inst5000001C: {kind: FunctionDecl, arg0: function50000000, arg1: inst_block5000000A, type: type(inst5000001D)} -// CHECK:STDOUT: inst5000001D: {kind: FunctionType, arg0: function50000000, arg1: specific, type: type(TypeType)} -// CHECK:STDOUT: inst5000001E: {kind: TupleType, arg0: inst_block_empty, type: type(TypeType)} -// CHECK:STDOUT: inst5000001F: {kind: StructValue, arg0: inst_block_empty, type: type(inst5000001D)} -// CHECK:STDOUT: inst50000020: {kind: PointerType, arg0: inst50000014, type: type(TypeType)} -// CHECK:STDOUT: inst50000021: {kind: UnboundElementType, arg0: inst50000014, arg1: inst50000020, type: type(TypeType)} -// CHECK:STDOUT: inst50000022: {kind: FieldDecl, arg0: name5, arg1: field50000000, type: type(inst50000021)} -// CHECK:STDOUT: inst50000023: {kind: CustomLayoutType, arg0: struct_type_fields50000001, arg1: custom_layout50000001, type: type(TypeType)} -// CHECK:STDOUT: inst50000024: {kind: CustomLayoutType, arg0: struct_type_fields50000002, arg1: custom_layout50000001, type: type(TypeType)} -// CHECK:STDOUT: inst50000025: {kind: CompleteTypeWitness, arg0: inst50000023, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst50000026: {kind: CompleteTypeWitness, arg0: inst50000024, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst50000027: {kind: PointerType, arg0: inst50000024, type: type(TypeType)} -// CHECK:STDOUT: inst50000028: {kind: NameRef, arg0: name(Cpp), arg1: inst50000011, type: type(inst(NamespaceType))} -// CHECK:STDOUT: inst50000029: {kind: CppOverloadSetType, arg0: cpp_overload_set50000000, arg1: specific, type: type(TypeType)} -// CHECK:STDOUT: inst5000002A: {kind: CppOverloadSetValue, arg0: cpp_overload_set50000000, type: type(inst50000029)} -// CHECK:STDOUT: inst5000002B: {kind: CppOverloadSetValue, arg0: cpp_overload_set50000000, type: type(inst50000029)} -// CHECK:STDOUT: inst5000002C: {kind: NameRef, arg0: name3, arg1: inst5000002A, type: type(inst50000029)} -// CHECK:STDOUT: inst5000002D: {kind: FunctionDecl, arg0: function50000001, arg1: inst_block_empty, type: type(inst5000002E)} -// CHECK:STDOUT: inst5000002E: {kind: FunctionType, arg0: function50000001, arg1: specific, type: type(TypeType)} -// CHECK:STDOUT: inst5000002F: {kind: StructValue, arg0: inst_block_empty, type: type(inst5000002E)} -// CHECK:STDOUT: inst50000030: {kind: FunctionDecl, arg0: function50000002, arg1: inst_block_empty, type: type(inst50000031)} -// CHECK:STDOUT: inst50000031: {kind: FunctionType, arg0: function50000002, arg1: specific, type: type(TypeType)} -// CHECK:STDOUT: inst50000032: {kind: StructValue, arg0: inst_block_empty, type: type(inst50000031)} -// CHECK:STDOUT: inst50000033: {kind: Call, arg0: inst50000030, arg1: inst_block_empty, type: type(inst5000001E)} -// CHECK:STDOUT: inst50000034: {kind: NameRef, arg0: name(Cpp), arg1: inst50000011, type: type(inst(NamespaceType))} -// CHECK:STDOUT: inst50000035: {kind: NameRef, arg0: name3, arg1: inst5000002A, type: type(inst50000029)} -// CHECK:STDOUT: inst50000036: {kind: NameRef, arg0: name1, arg1: inst50000018, type: type(inst50000014)} -// CHECK:STDOUT: inst50000037: {kind: ValueParamPattern, arg0: name1, type: type(inst50000016)} -// CHECK:STDOUT: inst50000038: {kind: ValueBinding, arg0: entity_name50000001, arg1: inst5000003A, type: type(inst50000014)} -// CHECK:STDOUT: inst50000039: {kind: WrapperBindingPattern, arg0: entity_name50000001, arg1: inst50000037, type: type(inst50000016)} -// CHECK:STDOUT: inst5000003A: {kind: ValueParam, arg0: call_param0, arg1: name1, type: type(inst50000014)} -// CHECK:STDOUT: inst5000003B: {kind: FunctionDecl, arg0: function50000003, arg1: inst_block50000012, type: type(inst5000003C)} -// CHECK:STDOUT: inst5000003C: {kind: FunctionType, arg0: function50000003, arg1: specific, type: type(TypeType)} -// CHECK:STDOUT: inst5000003D: {kind: StructValue, arg0: inst_block_empty, type: type(inst5000003C)} -// CHECK:STDOUT: inst5000003E: {kind: PatternType, arg0: inst50000020, type: type(TypeType)} -// CHECK:STDOUT: inst5000003F: {kind: ValueParamPattern, arg0: name1, type: type(inst5000003E)} -// CHECK:STDOUT: inst50000040: {kind: ValueBinding, arg0: entity_name50000002, arg1: inst50000042, type: type(inst50000020)} -// CHECK:STDOUT: inst50000041: {kind: WrapperBindingPattern, arg0: entity_name50000002, arg1: inst5000003F, type: type(inst5000003E)} -// CHECK:STDOUT: inst50000042: {kind: ValueParam, arg0: call_param0, arg1: name1, type: type(inst50000020)} -// CHECK:STDOUT: inst50000043: {kind: FunctionDecl, arg0: function50000004, arg1: inst_block50000018, type: type(inst50000044)} -// CHECK:STDOUT: inst50000044: {kind: FunctionType, arg0: function50000004, arg1: specific, type: type(TypeType)} -// CHECK:STDOUT: inst50000045: {kind: StructValue, arg0: inst_block_empty, type: type(inst50000044)} -// CHECK:STDOUT: inst50000046: {kind: ValueAsRef, arg0: inst50000036, type: type(inst50000014)} -// CHECK:STDOUT: inst50000047: {kind: AddrOf, arg0: inst50000046, type: type(inst50000020)} -// CHECK:STDOUT: inst50000048: {kind: Call, arg0: inst50000043, arg1: inst_block5000001A, type: type(inst5000001E)} -// CHECK:STDOUT: inst50000049: {kind: NameRef, arg0: name(Cpp), arg1: inst50000011, type: type(inst(NamespaceType))} -// CHECK:STDOUT: inst5000004A: {kind: NameRef, arg0: name3, arg1: inst5000002A, type: type(inst50000029)} -// CHECK:STDOUT: inst5000004B: {kind: NameRef, arg0: name(Cpp), arg1: inst50000011, type: type(inst(NamespaceType))} -// CHECK:STDOUT: inst5000004C: {kind: RefBindingPattern, arg0: entity_name50000003, type: type(inst5000003E)} -// CHECK:STDOUT: inst5000004D: {kind: VarPattern, arg0: inst5000004C, type: type(inst5000003E)} -// CHECK:STDOUT: inst5000004E: {kind: VarStorage, arg0: inst5000004D, type: type(inst50000020)} -// CHECK:STDOUT: inst5000004F: {kind: NameRef, arg0: name4, arg1: inst5000004E, type: type(inst50000020)} -// CHECK:STDOUT: inst50000050: {kind: AcquireValue, arg0: inst5000004F, type: type(inst50000020)} -// CHECK:STDOUT: inst50000051: {kind: Deref, arg0: inst50000050, type: type(inst50000014)} -// CHECK:STDOUT: inst50000052: {kind: AcquireValue, arg0: inst50000051, type: type(inst50000014)} -// CHECK:STDOUT: inst50000053: {kind: ValueAsRef, arg0: inst50000052, type: type(inst50000014)} -// CHECK:STDOUT: inst50000054: {kind: AddrOf, arg0: inst50000053, type: type(inst50000020)} -// CHECK:STDOUT: inst50000055: {kind: Call, arg0: inst50000043, arg1: inst_block5000001C, type: type(inst5000001E)} -// CHECK:STDOUT: inst50000056: {kind: Return} +// CHECK:STDOUT: inst5000001A: {kind: WrapperBindingPattern, arg0: entity_name50000000, arg1: inst50000018, type: type(inst50000016)} +// CHECK:STDOUT: inst5000001B: {kind: ValueBinding, arg0: entity_name50000000, arg1: inst5000001C, type: type(inst50000014)} +// CHECK:STDOUT: inst5000001C: {kind: ValueParam, arg0: call_param0, arg1: name1, type: type(inst50000014)} +// CHECK:STDOUT: inst5000001D: {kind: SpliceBlock, arg0: inst_block50000005, arg1: inst50000015, type: type(TypeType)} +// CHECK:STDOUT: inst5000001E: {kind: FunctionDecl, arg0: function50000000, arg1: inst_block5000000A, type: type(inst5000001F)} +// CHECK:STDOUT: inst5000001F: {kind: FunctionType, arg0: function50000000, arg1: specific, type: type(TypeType)} +// CHECK:STDOUT: inst50000020: {kind: TupleType, arg0: inst_block_empty, type: type(TypeType)} +// CHECK:STDOUT: inst50000021: {kind: StructValue, arg0: inst_block_empty, type: type(inst5000001F)} +// CHECK:STDOUT: inst50000022: {kind: PointerType, arg0: inst50000014, type: type(TypeType)} +// CHECK:STDOUT: inst50000023: {kind: UnboundElementType, arg0: inst50000014, arg1: inst50000022, type: type(TypeType)} +// CHECK:STDOUT: inst50000024: {kind: FieldDecl, arg0: name5, arg1: field50000000, type: type(inst50000023)} +// CHECK:STDOUT: inst50000025: {kind: CustomLayoutType, arg0: struct_type_fields50000001, arg1: custom_layout50000001, type: type(TypeType)} +// CHECK:STDOUT: inst50000026: {kind: CustomLayoutType, arg0: struct_type_fields50000002, arg1: custom_layout50000001, type: type(TypeType)} +// CHECK:STDOUT: inst50000027: {kind: CompleteTypeWitness, arg0: inst50000025, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst50000028: {kind: CompleteTypeWitness, arg0: inst50000026, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst50000029: {kind: PointerType, arg0: inst50000026, type: type(TypeType)} +// CHECK:STDOUT: inst5000002A: {kind: NameRef, arg0: name(Cpp), arg1: inst50000011, type: type(inst(NamespaceType))} +// CHECK:STDOUT: inst5000002B: {kind: CppOverloadSetType, arg0: cpp_overload_set50000000, arg1: specific, type: type(TypeType)} +// CHECK:STDOUT: inst5000002C: {kind: CppOverloadSetValue, arg0: cpp_overload_set50000000, type: type(inst5000002B)} +// CHECK:STDOUT: inst5000002D: {kind: CppOverloadSetValue, arg0: cpp_overload_set50000000, type: type(inst5000002B)} +// CHECK:STDOUT: inst5000002E: {kind: NameRef, arg0: name3, arg1: inst5000002C, type: type(inst5000002B)} +// CHECK:STDOUT: inst5000002F: {kind: FunctionDecl, arg0: function50000001, arg1: inst_block_empty, type: type(inst50000030)} +// CHECK:STDOUT: inst50000030: {kind: FunctionType, arg0: function50000001, arg1: specific, type: type(TypeType)} +// CHECK:STDOUT: inst50000031: {kind: StructValue, arg0: inst_block_empty, type: type(inst50000030)} +// CHECK:STDOUT: inst50000032: {kind: FunctionDecl, arg0: function50000002, arg1: inst_block_empty, type: type(inst50000033)} +// CHECK:STDOUT: inst50000033: {kind: FunctionType, arg0: function50000002, arg1: specific, type: type(TypeType)} +// CHECK:STDOUT: inst50000034: {kind: StructValue, arg0: inst_block_empty, type: type(inst50000033)} +// CHECK:STDOUT: inst50000035: {kind: Call, arg0: inst50000032, arg1: inst_block_empty, type: type(inst50000020)} +// CHECK:STDOUT: inst50000036: {kind: NameRef, arg0: name(Cpp), arg1: inst50000011, type: type(inst(NamespaceType))} +// CHECK:STDOUT: inst50000037: {kind: NameRef, arg0: name3, arg1: inst5000002C, type: type(inst5000002B)} +// CHECK:STDOUT: inst50000038: {kind: NameRef, arg0: name1, arg1: inst5000001B, type: type(inst50000014)} +// CHECK:STDOUT: inst50000039: {kind: ValueParamPattern, arg0: name1, type: type(inst50000016)} +// CHECK:STDOUT: inst5000003A: {kind: WrapperBindingPattern, arg0: entity_name50000001, arg1: inst50000039, type: type(inst50000016)} +// CHECK:STDOUT: inst5000003B: {kind: ValueBinding, arg0: entity_name50000001, arg1: inst5000003C, type: type(inst50000014)} +// CHECK:STDOUT: inst5000003C: {kind: ValueParam, arg0: call_param0, arg1: name1, type: type(inst50000014)} +// CHECK:STDOUT: inst5000003D: {kind: FunctionDecl, arg0: function50000003, arg1: inst_block50000012, type: type(inst5000003E)} +// CHECK:STDOUT: inst5000003E: {kind: FunctionType, arg0: function50000003, arg1: specific, type: type(TypeType)} +// CHECK:STDOUT: inst5000003F: {kind: StructValue, arg0: inst_block_empty, type: type(inst5000003E)} +// CHECK:STDOUT: inst50000040: {kind: PatternType, arg0: inst50000022, type: type(TypeType)} +// CHECK:STDOUT: inst50000041: {kind: ValueParamPattern, arg0: name1, type: type(inst50000040)} +// CHECK:STDOUT: inst50000042: {kind: ValueParamPattern, arg0: name1, type: type(inst50000040)} +// CHECK:STDOUT: inst50000043: {kind: WrapperBindingPattern, arg0: entity_name50000002, arg1: inst50000041, type: type(inst50000040)} +// CHECK:STDOUT: inst50000044: {kind: WrapperBindingPattern, arg0: entity_name50000000, arg1: inst50000042, type: type(inst50000040)} +// CHECK:STDOUT: inst50000045: {kind: ValueBinding, arg0: entity_name50000002, arg1: inst50000046, type: type(inst50000022)} +// CHECK:STDOUT: inst50000046: {kind: ValueParam, arg0: call_param0, arg1: name1, type: type(inst50000022)} +// CHECK:STDOUT: inst50000047: {kind: FunctionDecl, arg0: function50000004, arg1: inst_block50000018, type: type(inst50000048)} +// CHECK:STDOUT: inst50000048: {kind: FunctionType, arg0: function50000004, arg1: specific, type: type(TypeType)} +// CHECK:STDOUT: inst50000049: {kind: StructValue, arg0: inst_block_empty, type: type(inst50000048)} +// CHECK:STDOUT: inst5000004A: {kind: ValueAsRef, arg0: inst50000038, type: type(inst50000014)} +// CHECK:STDOUT: inst5000004B: {kind: AddrOf, arg0: inst5000004A, type: type(inst50000022)} +// CHECK:STDOUT: inst5000004C: {kind: Call, arg0: inst50000047, arg1: inst_block5000001A, type: type(inst50000020)} +// CHECK:STDOUT: inst5000004D: {kind: NameRef, arg0: name(Cpp), arg1: inst50000011, type: type(inst(NamespaceType))} +// CHECK:STDOUT: inst5000004E: {kind: NameRef, arg0: name3, arg1: inst5000002C, type: type(inst5000002B)} +// CHECK:STDOUT: inst5000004F: {kind: NameRef, arg0: name(Cpp), arg1: inst50000011, type: type(inst(NamespaceType))} +// CHECK:STDOUT: inst50000050: {kind: RefBindingPattern, arg0: entity_name50000003, type: type(inst50000040)} +// CHECK:STDOUT: inst50000051: {kind: RefBindingPattern, arg0: entity_name50000003, type: type(inst50000040)} +// CHECK:STDOUT: inst50000052: {kind: VarPattern, arg0: inst50000050, type: type(inst50000040)} +// CHECK:STDOUT: inst50000053: {kind: VarPattern, arg0: inst50000051, type: type(inst50000040)} +// CHECK:STDOUT: inst50000054: {kind: VarStorage, arg0: inst50000052, type: type(inst50000022)} +// CHECK:STDOUT: inst50000055: {kind: NameRef, arg0: name4, arg1: inst50000054, type: type(inst50000022)} +// CHECK:STDOUT: inst50000056: {kind: AcquireValue, arg0: inst50000055, type: type(inst50000022)} +// CHECK:STDOUT: inst50000057: {kind: Deref, arg0: inst50000056, type: type(inst50000014)} +// CHECK:STDOUT: inst50000058: {kind: AcquireValue, arg0: inst50000057, type: type(inst50000014)} +// CHECK:STDOUT: inst50000059: {kind: ValueAsRef, arg0: inst50000058, type: type(inst50000014)} +// CHECK:STDOUT: inst5000005A: {kind: AddrOf, arg0: inst50000059, type: type(inst50000022)} +// CHECK:STDOUT: inst5000005B: {kind: Call, arg0: inst50000047, arg1: inst_block5000001C, type: type(inst50000020)} +// CHECK:STDOUT: inst5000005C: {kind: Return} // CHECK:STDOUT: bundles: {} // CHECK:STDOUT: constant_values: // CHECK:STDOUT: values: @@ -294,69 +300,75 @@ fn G(x: Cpp.X) { // CHECK:STDOUT: inst50000014: concrete_constant(inst50000014) // CHECK:STDOUT: inst50000015: concrete_constant(inst50000014) // CHECK:STDOUT: inst50000016: concrete_constant(inst50000016) -// CHECK:STDOUT: inst50000017: concrete_constant(inst50000017) -// CHECK:STDOUT: inst50000019: concrete_constant(inst50000019) -// CHECK:STDOUT: inst5000001B: concrete_constant(inst50000014) -// CHECK:STDOUT: inst5000001C: concrete_constant(inst5000001F) -// CHECK:STDOUT: inst5000001D: concrete_constant(inst5000001D) -// CHECK:STDOUT: inst5000001E: concrete_constant(inst5000001E) +// CHECK:STDOUT: inst50000017: concrete_constant(inst50000018) +// CHECK:STDOUT: inst50000018: concrete_constant(inst50000018) +// CHECK:STDOUT: inst50000019: concrete_constant(inst5000001A) +// CHECK:STDOUT: inst5000001A: concrete_constant(inst5000001A) +// CHECK:STDOUT: inst5000001D: concrete_constant(inst50000014) +// CHECK:STDOUT: inst5000001E: concrete_constant(inst50000021) // CHECK:STDOUT: inst5000001F: concrete_constant(inst5000001F) // CHECK:STDOUT: inst50000020: concrete_constant(inst50000020) // CHECK:STDOUT: inst50000021: concrete_constant(inst50000021) // CHECK:STDOUT: inst50000022: concrete_constant(inst50000022) -// CHECK:STDOUT: inst50000023: concrete_constant(inst50000024) +// CHECK:STDOUT: inst50000023: concrete_constant(inst50000023) // CHECK:STDOUT: inst50000024: concrete_constant(inst50000024) // CHECK:STDOUT: inst50000025: concrete_constant(inst50000026) // CHECK:STDOUT: inst50000026: concrete_constant(inst50000026) -// CHECK:STDOUT: inst50000027: concrete_constant(inst50000027) -// CHECK:STDOUT: inst50000028: concrete_constant(inst50000011) +// CHECK:STDOUT: inst50000027: concrete_constant(inst50000028) +// CHECK:STDOUT: inst50000028: concrete_constant(inst50000028) // CHECK:STDOUT: inst50000029: concrete_constant(inst50000029) -// CHECK:STDOUT: inst5000002A: concrete_constant(inst5000002B) +// CHECK:STDOUT: inst5000002A: concrete_constant(inst50000011) // CHECK:STDOUT: inst5000002B: concrete_constant(inst5000002B) -// CHECK:STDOUT: inst5000002C: concrete_constant(inst5000002B) -// CHECK:STDOUT: inst5000002D: concrete_constant(inst5000002F) -// CHECK:STDOUT: inst5000002E: concrete_constant(inst5000002E) -// CHECK:STDOUT: inst5000002F: concrete_constant(inst5000002F) -// CHECK:STDOUT: inst50000030: concrete_constant(inst50000032) +// CHECK:STDOUT: inst5000002C: concrete_constant(inst5000002D) +// CHECK:STDOUT: inst5000002D: concrete_constant(inst5000002D) +// CHECK:STDOUT: inst5000002E: concrete_constant(inst5000002D) +// CHECK:STDOUT: inst5000002F: concrete_constant(inst50000031) +// CHECK:STDOUT: inst50000030: concrete_constant(inst50000030) // CHECK:STDOUT: inst50000031: concrete_constant(inst50000031) -// CHECK:STDOUT: inst50000032: concrete_constant(inst50000032) -// CHECK:STDOUT: inst50000034: concrete_constant(inst50000011) -// CHECK:STDOUT: inst50000035: concrete_constant(inst5000002B) -// CHECK:STDOUT: inst50000037: concrete_constant(inst50000037) -// CHECK:STDOUT: inst50000039: concrete_constant(inst50000039) -// CHECK:STDOUT: inst5000003B: concrete_constant(inst5000003D) -// CHECK:STDOUT: inst5000003C: concrete_constant(inst5000003C) -// CHECK:STDOUT: inst5000003D: concrete_constant(inst5000003D) +// CHECK:STDOUT: inst50000032: concrete_constant(inst50000034) +// CHECK:STDOUT: inst50000033: concrete_constant(inst50000033) +// CHECK:STDOUT: inst50000034: concrete_constant(inst50000034) +// CHECK:STDOUT: inst50000036: concrete_constant(inst50000011) +// CHECK:STDOUT: inst50000037: concrete_constant(inst5000002D) +// CHECK:STDOUT: inst50000039: concrete_constant(inst50000018) +// CHECK:STDOUT: inst5000003A: concrete_constant(inst5000001A) +// CHECK:STDOUT: inst5000003D: concrete_constant(inst5000003F) // CHECK:STDOUT: inst5000003E: concrete_constant(inst5000003E) // CHECK:STDOUT: inst5000003F: concrete_constant(inst5000003F) -// CHECK:STDOUT: inst50000041: concrete_constant(inst50000041) -// CHECK:STDOUT: inst50000043: concrete_constant(inst50000045) +// CHECK:STDOUT: inst50000040: concrete_constant(inst50000040) +// CHECK:STDOUT: inst50000041: concrete_constant(inst50000042) +// CHECK:STDOUT: inst50000042: concrete_constant(inst50000042) +// CHECK:STDOUT: inst50000043: concrete_constant(inst50000044) // CHECK:STDOUT: inst50000044: concrete_constant(inst50000044) -// CHECK:STDOUT: inst50000045: concrete_constant(inst50000045) -// CHECK:STDOUT: inst50000049: concrete_constant(inst50000011) -// CHECK:STDOUT: inst5000004A: concrete_constant(inst5000002B) -// CHECK:STDOUT: inst5000004B: concrete_constant(inst50000011) -// CHECK:STDOUT: inst5000004C: concrete_constant(inst5000004C) -// CHECK:STDOUT: inst5000004D: concrete_constant(inst5000004D) -// CHECK:STDOUT: inst5000004E: concrete_constant(inst5000004E) -// CHECK:STDOUT: inst5000004F: concrete_constant(inst5000004E) +// CHECK:STDOUT: inst50000047: concrete_constant(inst50000049) +// CHECK:STDOUT: inst50000048: concrete_constant(inst50000048) +// CHECK:STDOUT: inst50000049: concrete_constant(inst50000049) +// CHECK:STDOUT: inst5000004D: concrete_constant(inst50000011) +// CHECK:STDOUT: inst5000004E: concrete_constant(inst5000002D) +// CHECK:STDOUT: inst5000004F: concrete_constant(inst50000011) +// CHECK:STDOUT: inst50000050: concrete_constant(inst50000051) +// CHECK:STDOUT: inst50000051: concrete_constant(inst50000051) +// CHECK:STDOUT: inst50000052: concrete_constant(inst50000053) +// CHECK:STDOUT: inst50000053: concrete_constant(inst50000053) +// CHECK:STDOUT: inst50000054: concrete_constant(inst50000054) +// CHECK:STDOUT: inst50000055: concrete_constant(inst50000054) // CHECK:STDOUT: symbolic_constants: {} // CHECK:STDOUT: inst_blocks: // CHECK:STDOUT: inst_block_empty: {} // CHECK:STDOUT: exports: -// CHECK:STDOUT: 0: inst5000001C +// CHECK:STDOUT: 0: inst5000001E // CHECK:STDOUT: generated: {} // CHECK:STDOUT: imports: // CHECK:STDOUT: 0: inst50000011 // CHECK:STDOUT: 1: inst50000013 -// CHECK:STDOUT: 2: inst5000002A -// CHECK:STDOUT: 3: inst5000002D -// CHECK:STDOUT: 4: inst50000030 -// CHECK:STDOUT: 5: inst5000003B -// CHECK:STDOUT: 6: inst50000043 -// CHECK:STDOUT: 7: inst5000004C -// CHECK:STDOUT: 8: inst5000004D -// CHECK:STDOUT: 9: inst5000004E +// CHECK:STDOUT: 2: inst5000002C +// CHECK:STDOUT: 3: inst5000002F +// CHECK:STDOUT: 4: inst50000032 +// CHECK:STDOUT: 5: inst5000003D +// CHECK:STDOUT: 6: inst50000047 +// CHECK:STDOUT: 7: inst50000050 +// CHECK:STDOUT: 8: inst50000052 +// CHECK:STDOUT: 9: inst50000054 // CHECK:STDOUT: global_init: {} // CHECK:STDOUT: inst_block50000005: // CHECK:STDOUT: 0: inst50000012 @@ -366,77 +378,77 @@ fn G(x: Cpp.X) { // CHECK:STDOUT: inst_block50000007: // CHECK:STDOUT: 0: inst50000017 // CHECK:STDOUT: inst_block50000008: -// CHECK:STDOUT: 0: inst5000001A +// CHECK:STDOUT: 0: inst5000001C // CHECK:STDOUT: inst_block50000009: // CHECK:STDOUT: 0: inst50000017 // CHECK:STDOUT: 1: inst50000019 // CHECK:STDOUT: inst_block5000000A: -// CHECK:STDOUT: 0: inst5000001A -// CHECK:STDOUT: 1: inst5000001B -// CHECK:STDOUT: 2: inst50000018 +// CHECK:STDOUT: 0: inst5000001C +// CHECK:STDOUT: 1: inst5000001D +// CHECK:STDOUT: 2: inst5000001B // CHECK:STDOUT: inst_block5000000B: -// CHECK:STDOUT: 0: inst50000028 -// CHECK:STDOUT: 1: inst5000002C -// CHECK:STDOUT: 2: inst50000033 -// CHECK:STDOUT: 3: inst50000034 -// CHECK:STDOUT: 4: inst50000035 -// CHECK:STDOUT: 5: inst50000036 -// CHECK:STDOUT: 6: inst50000046 -// CHECK:STDOUT: 7: inst50000047 -// CHECK:STDOUT: 8: inst50000048 -// CHECK:STDOUT: 9: inst50000049 -// CHECK:STDOUT: 10: inst5000004A -// CHECK:STDOUT: 11: inst5000004B -// CHECK:STDOUT: 12: inst5000004F -// CHECK:STDOUT: 13: inst50000050 -// CHECK:STDOUT: 14: inst50000051 -// CHECK:STDOUT: 15: inst50000052 -// CHECK:STDOUT: 16: inst50000053 -// CHECK:STDOUT: 17: inst50000054 -// CHECK:STDOUT: 18: inst50000055 -// CHECK:STDOUT: 19: inst50000056 +// CHECK:STDOUT: 0: inst5000002A +// CHECK:STDOUT: 1: inst5000002E +// CHECK:STDOUT: 2: inst50000035 +// CHECK:STDOUT: 3: inst50000036 +// CHECK:STDOUT: 4: inst50000037 +// CHECK:STDOUT: 5: inst50000038 +// CHECK:STDOUT: 6: inst5000004A +// CHECK:STDOUT: 7: inst5000004B +// CHECK:STDOUT: 8: inst5000004C +// CHECK:STDOUT: 9: inst5000004D +// CHECK:STDOUT: 10: inst5000004E +// CHECK:STDOUT: 11: inst5000004F +// CHECK:STDOUT: 12: inst50000055 +// CHECK:STDOUT: 13: inst50000056 +// CHECK:STDOUT: 14: inst50000057 +// CHECK:STDOUT: 15: inst50000058 +// CHECK:STDOUT: 16: inst50000059 +// CHECK:STDOUT: 17: inst5000005A +// CHECK:STDOUT: 18: inst5000005B +// CHECK:STDOUT: 19: inst5000005C // CHECK:STDOUT: inst_block5000000C: -// CHECK:STDOUT: 0: inst50000022 -// CHECK:STDOUT: 1: inst50000023 -// CHECK:STDOUT: 2: inst50000025 +// CHECK:STDOUT: 0: inst50000024 +// CHECK:STDOUT: 1: inst50000025 +// CHECK:STDOUT: 2: inst50000027 // CHECK:STDOUT: inst_block5000000D: {} // CHECK:STDOUT: inst_block5000000E: -// CHECK:STDOUT: 0: inst50000039 +// CHECK:STDOUT: 0: inst5000003A // CHECK:STDOUT: inst_block5000000F: -// CHECK:STDOUT: 0: inst50000037 +// CHECK:STDOUT: 0: inst50000039 // CHECK:STDOUT: inst_block50000010: -// CHECK:STDOUT: 0: inst5000003A +// CHECK:STDOUT: 0: inst5000003C // CHECK:STDOUT: inst_block50000011: -// CHECK:STDOUT: 0: inst50000037 -// CHECK:STDOUT: 1: inst50000039 +// CHECK:STDOUT: 0: inst50000039 +// CHECK:STDOUT: 1: inst5000003A // CHECK:STDOUT: inst_block50000012: -// CHECK:STDOUT: 0: inst5000003A -// CHECK:STDOUT: 1: inst50000038 +// CHECK:STDOUT: 0: inst5000003C +// CHECK:STDOUT: 1: inst5000003B // CHECK:STDOUT: inst_block50000013: {} // CHECK:STDOUT: inst_block50000014: -// CHECK:STDOUT: 0: inst50000041 +// CHECK:STDOUT: 0: inst50000043 // CHECK:STDOUT: inst_block50000015: -// CHECK:STDOUT: 0: inst5000003F +// CHECK:STDOUT: 0: inst50000041 // CHECK:STDOUT: inst_block50000016: -// CHECK:STDOUT: 0: inst50000042 +// CHECK:STDOUT: 0: inst50000046 // CHECK:STDOUT: inst_block50000017: -// CHECK:STDOUT: 0: inst5000003F -// CHECK:STDOUT: 1: inst50000041 +// CHECK:STDOUT: 0: inst50000041 +// CHECK:STDOUT: 1: inst50000043 // CHECK:STDOUT: inst_block50000018: -// CHECK:STDOUT: 0: inst50000042 -// CHECK:STDOUT: 1: inst50000040 +// CHECK:STDOUT: 0: inst50000046 +// CHECK:STDOUT: 1: inst50000045 // CHECK:STDOUT: inst_block50000019: -// CHECK:STDOUT: 0: inst50000036 +// CHECK:STDOUT: 0: inst50000038 // CHECK:STDOUT: inst_block5000001A: -// CHECK:STDOUT: 0: inst50000047 +// CHECK:STDOUT: 0: inst5000004B // CHECK:STDOUT: inst_block5000001B: -// CHECK:STDOUT: 0: inst50000052 +// CHECK:STDOUT: 0: inst50000058 // CHECK:STDOUT: inst_block5000001C: -// CHECK:STDOUT: 0: inst50000054 +// CHECK:STDOUT: 0: inst5000005A // CHECK:STDOUT: inst_block5000001D: // CHECK:STDOUT: 0: instF // CHECK:STDOUT: 1: inst50000010 -// CHECK:STDOUT: 2: inst5000001C +// CHECK:STDOUT: 2: inst5000001E // CHECK:STDOUT: value_stores: // CHECK:STDOUT: shared_values: // CHECK:STDOUT: ints: {} diff --git a/toolchain/check/testdata/basics/raw_sem_ir/non_core_interfaces.carbon b/toolchain/check/testdata/basics/raw_sem_ir/non_core_interfaces.carbon index 70da44caa46c..06a4fdb65c39 100644 --- a/toolchain/check/testdata/basics/raw_sem_ir/non_core_interfaces.carbon +++ b/toolchain/check/testdata/basics/raw_sem_ir/non_core_interfaces.carbon @@ -212,7 +212,7 @@ fn UseLocalCopy[T:! Copy](_: T.T1, _: T.T2) {} // CHECK:STDOUT: clang_decls: {} // CHECK:STDOUT: clang_decl_signatures: {} // CHECK:STDOUT: name_scopes: -// CHECK:STDOUT: name_scope0: {inst: instF, parent_scope: name_scope, has_error: false, extended_scopes: [], names: {name0: inst50000011, name1: inst50000012, name4: inst50000060, name7: inst50000095}} +// CHECK:STDOUT: name_scope0: {inst: instF, parent_scope: name_scope, has_error: false, extended_scopes: [], names: {name0: inst50000011, name1: inst50000012, name4: inst5000006A, name7: inst500000A9}} // CHECK:STDOUT: name_scope50000001: {inst: inst50000011, parent_scope: name_scope0, has_error: false, extended_scopes: [], names: {name6: inst50000025}} // CHECK:STDOUT: name_scope50000002: {inst: inst50000012, parent_scope: name_scope0, has_error: false, extended_scopes: [], names: {name(SelfType): inst50000014}} // CHECK:STDOUT: name_scope50000003: {inst: inst50000017, parent_scope: name_scope50000002, has_error: false, extended_scopes: [], names: {name2: inst5000001B, name3: inst5000001F}} @@ -242,15 +242,15 @@ fn UseLocalCopy[T:! Copy](_: T.T1, _: T.T2) {} // CHECK:STDOUT: associated_constants: // CHECK:STDOUT: assoc_const50000000: {name: name2, parent_scope: name_scope50000003, decl_id: inst50000019, default_value_id: inst} // CHECK:STDOUT: assoc_const50000001: {name: name3, parent_scope: name_scope50000003, decl_id: inst5000001E, default_value_id: inst} -// CHECK:STDOUT: assoc_const50000002: {name: name2, parent_scope: name_scope50000005, decl_id: inst50000041, default_value_id: inst} -// CHECK:STDOUT: assoc_const50000003: {name: name3, parent_scope: name_scope50000005, decl_id: inst50000052, default_value_id: inst} +// CHECK:STDOUT: assoc_const50000002: {name: name2, parent_scope: name_scope50000005, decl_id: inst50000043, default_value_id: inst} +// CHECK:STDOUT: assoc_const50000003: {name: name3, parent_scope: name_scope50000005, decl_id: inst50000058, default_value_id: inst} // CHECK:STDOUT: impls: {} // CHECK:STDOUT: generics: // CHECK:STDOUT: generic50000000: {decl: inst, bindings: inst_block, self_specific_id: specific, decl_block_id: inst_block, definition_block_id: inst_block} // CHECK:STDOUT: generic50000001: {decl: inst50000017, bindings: inst_block50000005, self_specific_id: specific50000000, decl_block_id: inst_block_empty, definition_block_id: inst_block_empty} // CHECK:STDOUT: generic50000002: {decl: inst50000028, bindings: inst_block50000010, self_specific_id: specific50000001, decl_block_id: inst_block_empty, definition_block_id: inst_block_empty} -// CHECK:STDOUT: generic50000003: {decl: inst50000060, bindings: inst_block5000001C, self_specific_id: specific50000003, decl_block_id: inst_block5000001D, definition_block_id: inst_block50000020} -// CHECK:STDOUT: generic50000004: {decl: inst50000095, bindings: inst_block5000002C, self_specific_id: specific50000005, decl_block_id: inst_block5000002D, definition_block_id: inst_block50000030} +// CHECK:STDOUT: generic50000003: {decl: inst5000006A, bindings: inst_block5000001C, self_specific_id: specific50000003, decl_block_id: inst_block5000001D, definition_block_id: inst_block50000020} +// CHECK:STDOUT: generic50000004: {decl: inst500000A9, bindings: inst_block5000002C, self_specific_id: specific50000005, decl_block_id: inst_block5000002D, definition_block_id: inst_block50000030} // CHECK:STDOUT: specifics: // CHECK:STDOUT: specific50000000: {generic: generic50000001, args: inst_block50000006, decl_block_id: inst_block_empty, decl_has_error: 0, definition_block_id: inst_block_empty, definition_has_error: 0} // CHECK:STDOUT: specific50000001: {generic: generic50000002, args: inst_block50000011, decl_block_id: inst_block_empty, decl_has_error: 0, definition_block_id: inst_block_empty, definition_has_error: 0} @@ -299,23 +299,23 @@ fn UseLocalCopy[T:! Copy](_: T.T1, _: T.T2) {} // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 0 // CHECK:STDOUT: alignment: 1 -// CHECK:STDOUT: 'type(inst50000061)': -// CHECK:STDOUT: value_repr: {kind: none, type: type(inst50000062)} +// CHECK:STDOUT: 'type(inst5000006B)': +// CHECK:STDOUT: value_repr: {kind: none, type: type(inst5000006C)} // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 0 // CHECK:STDOUT: alignment: 1 -// CHECK:STDOUT: 'type(inst50000062)': -// CHECK:STDOUT: value_repr: {kind: none, type: type(inst50000062)} +// CHECK:STDOUT: 'type(inst5000006C)': +// CHECK:STDOUT: value_repr: {kind: none, type: type(inst5000006C)} // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 0 // CHECK:STDOUT: alignment: 1 -// CHECK:STDOUT: 'type(symbolic_constant50000009)': -// CHECK:STDOUT: value_repr: {kind: dependent, type: type(symbolic_constant50000009)} +// CHECK:STDOUT: 'type(symbolic_constant5000000B)': +// CHECK:STDOUT: value_repr: {kind: dependent, type: type(symbolic_constant5000000B)} // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 0 // CHECK:STDOUT: alignment: 0 -// CHECK:STDOUT: 'type(symbolic_constant5000000E)': -// CHECK:STDOUT: value_repr: {kind: dependent, type: type(symbolic_constant5000000E)} +// CHECK:STDOUT: 'type(symbolic_constant50000014)': +// CHECK:STDOUT: value_repr: {kind: dependent, type: type(symbolic_constant50000014)} // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 0 // CHECK:STDOUT: alignment: 0 @@ -324,18 +324,18 @@ fn UseLocalCopy[T:! Copy](_: T.T1, _: T.T2) {} // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 0 // CHECK:STDOUT: alignment: 1 -// CHECK:STDOUT: 'type(inst50000096)': -// CHECK:STDOUT: value_repr: {kind: none, type: type(inst50000062)} +// CHECK:STDOUT: 'type(inst500000AA)': +// CHECK:STDOUT: value_repr: {kind: none, type: type(inst5000006C)} // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 0 // CHECK:STDOUT: alignment: 1 -// CHECK:STDOUT: 'type(symbolic_constant5000001B)': -// CHECK:STDOUT: value_repr: {kind: dependent, type: type(symbolic_constant5000001B)} +// CHECK:STDOUT: 'type(symbolic_constant50000027)': +// CHECK:STDOUT: value_repr: {kind: dependent, type: type(symbolic_constant50000027)} // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 0 // CHECK:STDOUT: alignment: 0 -// CHECK:STDOUT: 'type(symbolic_constant50000020)': -// CHECK:STDOUT: value_repr: {kind: dependent, type: type(symbolic_constant50000020)} +// CHECK:STDOUT: 'type(symbolic_constant50000030)': +// CHECK:STDOUT: value_repr: {kind: dependent, type: type(symbolic_constant50000030)} // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 0 // CHECK:STDOUT: alignment: 0 @@ -371,123 +371,143 @@ fn UseLocalCopy[T:! Copy](_: T.T1, _: T.T2) {} // CHECK:STDOUT: inst50000027: {kind: FacetType, arg0: facet_type50000002, type: type(TypeType)} // CHECK:STDOUT: inst50000028: {kind: InterfaceWithSelfDecl, arg0: interface50000001} // CHECK:STDOUT: inst50000029: {kind: SymbolicBinding, arg0: entity_name50000003, arg1: inst, type: type(inst50000027)} -// CHECK:STDOUT: inst5000002A: {kind: ImportRefLoaded, arg0: import_ir_inst3, arg1: entity_name, type: type(inst5000003B)} -// CHECK:STDOUT: inst5000002B: {kind: ImportRefLoaded, arg0: import_ir_inst4, arg1: entity_name, type: type(inst5000003B)} +// CHECK:STDOUT: inst5000002A: {kind: ImportRefLoaded, arg0: import_ir_inst3, arg1: entity_name, type: type(inst5000003D)} +// CHECK:STDOUT: inst5000002B: {kind: ImportRefLoaded, arg0: import_ir_inst4, arg1: entity_name, type: type(inst5000003D)} // CHECK:STDOUT: inst5000002C: {kind: ImportRefUnloaded, arg0: import_ir_inst5, arg1: entity_name50000004} // CHECK:STDOUT: inst5000002D: {kind: ImportRefUnloaded, arg0: import_ir_inst6, arg1: entity_name50000005} // CHECK:STDOUT: inst5000002E: {kind: ImportRefLoaded, arg0: import_ir_inst7, arg1: entity_name, type: type(inst50000027)} // CHECK:STDOUT: inst5000002F: {kind: ImportRefUnloaded, arg0: import_ir_inst8, arg1: entity_name} // CHECK:STDOUT: inst50000030: {kind: NameRef, arg0: name6, arg1: inst50000025, type: type(TypeType)} // CHECK:STDOUT: inst50000031: {kind: PatternType, arg0: inst50000027, type: type(TypeType)} -// CHECK:STDOUT: inst50000032: {kind: SymbolicBinding, arg0: entity_name50000007, arg1: inst, type: type(inst50000027)} -// CHECK:STDOUT: inst50000033: {kind: SymbolicBinding, arg0: entity_name50000007, arg1: inst, type: type(inst50000027)} -// CHECK:STDOUT: inst50000034: {kind: SymbolicBinding, arg0: entity_name50000007, arg1: inst, type: type(inst50000027)} -// CHECK:STDOUT: inst50000035: {kind: SymbolicBindingPattern, arg0: entity_name50000007, type: type(inst50000031)} -// CHECK:STDOUT: inst50000036: {kind: NameRef, arg0: name5, arg1: inst50000032, type: type(inst50000027)} -// CHECK:STDOUT: inst50000037: {kind: FacetAccessType, arg0: inst50000036, type: type(TypeType)} -// CHECK:STDOUT: inst50000038: {kind: FacetAccessType, arg0: inst50000033, type: type(TypeType)} -// CHECK:STDOUT: inst50000039: {kind: FacetAccessType, arg0: inst50000034, type: type(TypeType)} -// CHECK:STDOUT: inst5000003A: {kind: Converted, arg0: inst50000036, arg1: inst50000037, type: type(TypeType)} -// CHECK:STDOUT: inst5000003B: {kind: AssociatedEntityType, arg0: interface50000001, arg1: specific, type: type(TypeType)} -// CHECK:STDOUT: inst5000003C: {kind: ImportRefLoaded, arg0: import_ir_inst9, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst5000003D: {kind: AssociatedEntity, arg0: element0, arg1: inst5000003C, type: type(inst5000003B)} -// CHECK:STDOUT: inst5000003E: {kind: NameRef, arg0: name2, arg1: inst5000002A, type: type(inst5000003B)} -// CHECK:STDOUT: inst5000003F: {kind: LookupImplWitness, arg0: inst50000033, arg1: specific_interface50000000, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst50000040: {kind: LookupImplWitness, arg0: inst50000033, arg1: specific_interface50000000, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst50000041: {kind: AssociatedConstantDecl, arg0: assoc_const50000002, arg1: inst_block_empty, type: type(TypeType)} -// CHECK:STDOUT: inst50000042: {kind: ImplWitnessAccess, arg0: inst50000040, arg1: element0, type: type(TypeType)} -// CHECK:STDOUT: inst50000043: {kind: ImplWitnessAccess, arg0: inst50000040, arg1: element0, type: type(TypeType)} -// CHECK:STDOUT: inst50000044: {kind: LookupImplWitness, arg0: inst50000034, arg1: specific_interface50000000, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst50000045: {kind: ImplWitnessAccess, arg0: inst50000044, arg1: element0, type: type(TypeType)} -// CHECK:STDOUT: inst50000046: {kind: PatternType, arg0: inst50000043, type: type(TypeType)} -// CHECK:STDOUT: inst50000047: {kind: ValueParamPattern, arg0: name(Underscore), type: type(symbolic_constant5000000D)} +// CHECK:STDOUT: inst50000032: {kind: SymbolicBindingPattern, arg0: entity_name50000007, type: type(inst50000031)} +// CHECK:STDOUT: inst50000033: {kind: SymbolicBindingPattern, arg0: entity_name50000007, type: type(inst50000031)} +// CHECK:STDOUT: inst50000034: {kind: SymbolicBindingPattern, arg0: entity_name50000007, type: type(inst50000031)} +// CHECK:STDOUT: inst50000035: {kind: SymbolicBinding, arg0: entity_name50000007, arg1: inst, type: type(inst50000027)} +// CHECK:STDOUT: inst50000036: {kind: SymbolicBinding, arg0: entity_name50000007, arg1: inst, type: type(inst50000027)} +// CHECK:STDOUT: inst50000037: {kind: SymbolicBinding, arg0: entity_name50000007, arg1: inst, type: type(inst50000027)} +// CHECK:STDOUT: inst50000038: {kind: NameRef, arg0: name5, arg1: inst50000035, type: type(inst50000027)} +// CHECK:STDOUT: inst50000039: {kind: FacetAccessType, arg0: inst50000038, type: type(TypeType)} +// CHECK:STDOUT: inst5000003A: {kind: FacetAccessType, arg0: inst50000036, type: type(TypeType)} +// CHECK:STDOUT: inst5000003B: {kind: FacetAccessType, arg0: inst50000037, type: type(TypeType)} +// CHECK:STDOUT: inst5000003C: {kind: Converted, arg0: inst50000038, arg1: inst50000039, type: type(TypeType)} +// CHECK:STDOUT: inst5000003D: {kind: AssociatedEntityType, arg0: interface50000001, arg1: specific, type: type(TypeType)} +// CHECK:STDOUT: inst5000003E: {kind: ImportRefLoaded, arg0: import_ir_inst9, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst5000003F: {kind: AssociatedEntity, arg0: element0, arg1: inst5000003E, type: type(inst5000003D)} +// CHECK:STDOUT: inst50000040: {kind: NameRef, arg0: name2, arg1: inst5000002A, type: type(inst5000003D)} +// CHECK:STDOUT: inst50000041: {kind: LookupImplWitness, arg0: inst50000036, arg1: specific_interface50000000, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst50000042: {kind: LookupImplWitness, arg0: inst50000036, arg1: specific_interface50000000, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst50000043: {kind: AssociatedConstantDecl, arg0: assoc_const50000002, arg1: inst_block_empty, type: type(TypeType)} +// CHECK:STDOUT: inst50000044: {kind: ImplWitnessAccess, arg0: inst50000042, arg1: element0, type: type(TypeType)} +// CHECK:STDOUT: inst50000045: {kind: ImplWitnessAccess, arg0: inst50000042, arg1: element0, type: type(TypeType)} +// CHECK:STDOUT: inst50000046: {kind: LookupImplWitness, arg0: inst50000037, arg1: specific_interface50000000, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst50000047: {kind: ImplWitnessAccess, arg0: inst50000046, arg1: element0, type: type(TypeType)} // CHECK:STDOUT: inst50000048: {kind: PatternType, arg0: inst50000045, type: type(TypeType)} -// CHECK:STDOUT: inst50000049: {kind: ValueBinding, arg0: entity_name50000008, arg1: inst5000005C, type: type(symbolic_constant5000000B)} -// CHECK:STDOUT: inst5000004A: {kind: WrapperBindingPattern, arg0: entity_name50000008, arg1: inst50000047, type: type(symbolic_constant5000000D)} -// CHECK:STDOUT: inst5000004B: {kind: NameRef, arg0: name5, arg1: inst50000032, type: type(inst50000027)} -// CHECK:STDOUT: inst5000004C: {kind: FacetAccessType, arg0: inst5000004B, type: type(TypeType)} -// CHECK:STDOUT: inst5000004D: {kind: Converted, arg0: inst5000004B, arg1: inst5000004C, type: type(TypeType)} -// CHECK:STDOUT: inst5000004E: {kind: ImportRefLoaded, arg0: import_ir_instB, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst5000004F: {kind: AssociatedEntity, arg0: element1, arg1: inst5000004E, type: type(inst5000003B)} -// CHECK:STDOUT: inst50000050: {kind: NameRef, arg0: name3, arg1: inst5000002B, type: type(inst5000003B)} -// CHECK:STDOUT: inst50000051: {kind: LookupImplWitness, arg0: inst50000033, arg1: specific_interface50000000, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst50000052: {kind: AssociatedConstantDecl, arg0: assoc_const50000003, arg1: inst_block_empty, type: type(TypeType)} -// CHECK:STDOUT: inst50000053: {kind: ImplWitnessAccess, arg0: inst50000040, arg1: element1, type: type(TypeType)} -// CHECK:STDOUT: inst50000054: {kind: ImplWitnessAccess, arg0: inst50000040, arg1: element1, type: type(TypeType)} -// CHECK:STDOUT: inst50000055: {kind: ImplWitnessAccess, arg0: inst50000044, arg1: element1, type: type(TypeType)} -// CHECK:STDOUT: inst50000056: {kind: PatternType, arg0: inst50000054, type: type(TypeType)} -// CHECK:STDOUT: inst50000057: {kind: ValueParamPattern, arg0: name(Underscore), type: type(symbolic_constant50000011)} -// CHECK:STDOUT: inst50000058: {kind: PatternType, arg0: inst50000055, type: type(TypeType)} -// CHECK:STDOUT: inst50000059: {kind: ValueBinding, arg0: entity_name50000009, arg1: inst5000005E, type: type(symbolic_constant5000000F)} -// CHECK:STDOUT: inst5000005A: {kind: WrapperBindingPattern, arg0: entity_name50000009, arg1: inst50000057, type: type(symbolic_constant50000011)} -// CHECK:STDOUT: inst5000005B: {kind: SpliceBlock, arg0: inst_block5000000E, arg1: inst50000030, type: type(TypeType)} -// CHECK:STDOUT: inst5000005C: {kind: ValueParam, arg0: call_param0, arg1: name(Underscore), type: type(symbolic_constant5000000B)} -// CHECK:STDOUT: inst5000005D: {kind: SpliceBlock, arg0: inst_block50000013, arg1: inst50000042, type: type(TypeType)} -// CHECK:STDOUT: inst5000005E: {kind: ValueParam, arg0: call_param1, arg1: name(Underscore), type: type(symbolic_constant5000000F)} -// CHECK:STDOUT: inst5000005F: {kind: SpliceBlock, arg0: inst_block50000016, arg1: inst50000053, type: type(TypeType)} -// CHECK:STDOUT: inst50000060: {kind: FunctionDecl, arg0: function50000000, arg1: inst_block5000001B, type: type(inst50000061)} -// CHECK:STDOUT: inst50000061: {kind: FunctionType, arg0: function50000000, arg1: specific, type: type(TypeType)} -// CHECK:STDOUT: inst50000062: {kind: TupleType, arg0: inst_block_empty, type: type(TypeType)} -// CHECK:STDOUT: inst50000063: {kind: StructValue, arg0: inst_block_empty, type: type(inst50000061)} -// CHECK:STDOUT: inst50000064: {kind: RequireCompleteType, arg0: inst50000043, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst50000065: {kind: RequireCompleteType, arg0: inst50000043, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst50000066: {kind: RequireCompleteType, arg0: inst50000045, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst50000067: {kind: RequireCompleteType, arg0: inst50000054, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst50000068: {kind: RequireCompleteType, arg0: inst50000054, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst50000069: {kind: RequireCompleteType, arg0: inst50000055, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst5000006A: {kind: Return} -// CHECK:STDOUT: inst5000006B: {kind: SymbolicBinding, arg0: entity_name50000001, arg1: inst, type: type(inst50000021)} -// CHECK:STDOUT: inst5000006C: {kind: NameRef, arg0: name1, arg1: inst50000012, type: type(TypeType)} -// CHECK:STDOUT: inst5000006D: {kind: PatternType, arg0: inst50000013, type: type(TypeType)} -// CHECK:STDOUT: inst5000006E: {kind: SymbolicBinding, arg0: entity_name5000000A, arg1: inst, type: type(inst50000013)} -// CHECK:STDOUT: inst5000006F: {kind: SymbolicBinding, arg0: entity_name50000007, arg1: inst, type: type(inst50000013)} -// CHECK:STDOUT: inst50000070: {kind: SymbolicBinding, arg0: entity_name50000007, arg1: inst, type: type(inst50000013)} -// CHECK:STDOUT: inst50000071: {kind: SymbolicBindingPattern, arg0: entity_name5000000A, type: type(inst5000006D)} -// CHECK:STDOUT: inst50000072: {kind: NameRef, arg0: name5, arg1: inst5000006E, type: type(inst50000013)} -// CHECK:STDOUT: inst50000073: {kind: FacetAccessType, arg0: inst50000072, type: type(TypeType)} -// CHECK:STDOUT: inst50000074: {kind: FacetAccessType, arg0: inst5000006F, type: type(TypeType)} -// CHECK:STDOUT: inst50000075: {kind: FacetAccessType, arg0: inst50000070, type: type(TypeType)} -// CHECK:STDOUT: inst50000076: {kind: Converted, arg0: inst50000072, arg1: inst50000073, type: type(TypeType)} -// CHECK:STDOUT: inst50000077: {kind: NameRef, arg0: name2, arg1: inst5000001B, type: type(inst5000001A)} -// CHECK:STDOUT: inst50000078: {kind: LookupImplWitness, arg0: inst5000006F, arg1: specific_interface50000001, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst50000079: {kind: LookupImplWitness, arg0: inst5000006F, arg1: specific_interface50000001, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst5000007A: {kind: ImplWitnessAccess, arg0: inst50000079, arg1: element0, type: type(TypeType)} -// CHECK:STDOUT: inst5000007B: {kind: ImplWitnessAccess, arg0: inst50000079, arg1: element0, type: type(TypeType)} -// CHECK:STDOUT: inst5000007C: {kind: LookupImplWitness, arg0: inst50000070, arg1: specific_interface50000001, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst5000007D: {kind: ImplWitnessAccess, arg0: inst5000007C, arg1: element0, type: type(TypeType)} -// CHECK:STDOUT: inst5000007E: {kind: PatternType, arg0: inst5000007B, type: type(TypeType)} -// CHECK:STDOUT: inst5000007F: {kind: ValueParamPattern, arg0: name(Underscore), type: type(symbolic_constant5000001F)} -// CHECK:STDOUT: inst50000080: {kind: PatternType, arg0: inst5000007D, type: type(TypeType)} -// CHECK:STDOUT: inst50000081: {kind: ValueBinding, arg0: entity_name5000000B, arg1: inst50000091, type: type(symbolic_constant5000001D)} -// CHECK:STDOUT: inst50000082: {kind: WrapperBindingPattern, arg0: entity_name5000000B, arg1: inst5000007F, type: type(symbolic_constant5000001F)} -// CHECK:STDOUT: inst50000083: {kind: NameRef, arg0: name5, arg1: inst5000006E, type: type(inst50000013)} -// CHECK:STDOUT: inst50000084: {kind: FacetAccessType, arg0: inst50000083, type: type(TypeType)} -// CHECK:STDOUT: inst50000085: {kind: Converted, arg0: inst50000083, arg1: inst50000084, type: type(TypeType)} -// CHECK:STDOUT: inst50000086: {kind: NameRef, arg0: name3, arg1: inst5000001F, type: type(inst5000001A)} -// CHECK:STDOUT: inst50000087: {kind: LookupImplWitness, arg0: inst5000006F, arg1: specific_interface50000001, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst50000088: {kind: ImplWitnessAccess, arg0: inst50000079, arg1: element1, type: type(TypeType)} -// CHECK:STDOUT: inst50000089: {kind: ImplWitnessAccess, arg0: inst50000079, arg1: element1, type: type(TypeType)} -// CHECK:STDOUT: inst5000008A: {kind: ImplWitnessAccess, arg0: inst5000007C, arg1: element1, type: type(TypeType)} -// CHECK:STDOUT: inst5000008B: {kind: PatternType, arg0: inst50000089, type: type(TypeType)} -// CHECK:STDOUT: inst5000008C: {kind: ValueParamPattern, arg0: name(Underscore), type: type(symbolic_constant50000023)} -// CHECK:STDOUT: inst5000008D: {kind: PatternType, arg0: inst5000008A, type: type(TypeType)} -// CHECK:STDOUT: inst5000008E: {kind: ValueBinding, arg0: entity_name5000000C, arg1: inst50000093, type: type(symbolic_constant50000021)} -// CHECK:STDOUT: inst5000008F: {kind: WrapperBindingPattern, arg0: entity_name5000000C, arg1: inst5000008C, type: type(symbolic_constant50000023)} -// CHECK:STDOUT: inst50000090: {kind: SpliceBlock, arg0: inst_block50000021, arg1: inst5000006C, type: type(TypeType)} -// CHECK:STDOUT: inst50000091: {kind: ValueParam, arg0: call_param0, arg1: name(Underscore), type: type(symbolic_constant5000001D)} -// CHECK:STDOUT: inst50000092: {kind: SpliceBlock, arg0: inst_block50000023, arg1: inst5000007A, type: type(TypeType)} -// CHECK:STDOUT: inst50000093: {kind: ValueParam, arg0: call_param1, arg1: name(Underscore), type: type(symbolic_constant50000021)} -// CHECK:STDOUT: inst50000094: {kind: SpliceBlock, arg0: inst_block50000026, arg1: inst50000088, type: type(TypeType)} -// CHECK:STDOUT: inst50000095: {kind: FunctionDecl, arg0: function50000001, arg1: inst_block5000002B, type: type(inst50000096)} -// CHECK:STDOUT: inst50000096: {kind: FunctionType, arg0: function50000001, arg1: specific, type: type(TypeType)} -// CHECK:STDOUT: inst50000097: {kind: StructValue, arg0: inst_block_empty, type: type(inst50000096)} -// CHECK:STDOUT: inst50000098: {kind: RequireCompleteType, arg0: inst5000007B, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst50000099: {kind: RequireCompleteType, arg0: inst5000007B, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst5000009A: {kind: RequireCompleteType, arg0: inst5000007D, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst5000009B: {kind: RequireCompleteType, arg0: inst50000089, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst5000009C: {kind: RequireCompleteType, arg0: inst50000089, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst5000009D: {kind: RequireCompleteType, arg0: inst5000008A, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst5000009E: {kind: Return} +// CHECK:STDOUT: inst50000049: {kind: ValueParamPattern, arg0: name(Underscore), type: type(symbolic_constant50000010)} +// CHECK:STDOUT: inst5000004A: {kind: ValueParamPattern, arg0: name(Underscore), type: type(symbolic_constant5000000E)} +// CHECK:STDOUT: inst5000004B: {kind: PatternType, arg0: inst50000047, type: type(TypeType)} +// CHECK:STDOUT: inst5000004C: {kind: ValueParamPattern, arg0: name(Underscore), type: type(symbolic_constant50000010)} +// CHECK:STDOUT: inst5000004D: {kind: WrapperBindingPattern, arg0: entity_name50000008, arg1: inst50000049, type: type(symbolic_constant50000010)} +// CHECK:STDOUT: inst5000004E: {kind: WrapperBindingPattern, arg0: entity_name50000008, arg1: inst5000004A, type: type(symbolic_constant5000000E)} +// CHECK:STDOUT: inst5000004F: {kind: WrapperBindingPattern, arg0: entity_name50000008, arg1: inst5000004C, type: type(symbolic_constant50000010)} +// CHECK:STDOUT: inst50000050: {kind: ValueBinding, arg0: entity_name50000008, arg1: inst50000066, type: type(symbolic_constant5000000D)} +// CHECK:STDOUT: inst50000051: {kind: NameRef, arg0: name5, arg1: inst50000035, type: type(inst50000027)} +// CHECK:STDOUT: inst50000052: {kind: FacetAccessType, arg0: inst50000051, type: type(TypeType)} +// CHECK:STDOUT: inst50000053: {kind: Converted, arg0: inst50000051, arg1: inst50000052, type: type(TypeType)} +// CHECK:STDOUT: inst50000054: {kind: ImportRefLoaded, arg0: import_ir_instB, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst50000055: {kind: AssociatedEntity, arg0: element1, arg1: inst50000054, type: type(inst5000003D)} +// CHECK:STDOUT: inst50000056: {kind: NameRef, arg0: name3, arg1: inst5000002B, type: type(inst5000003D)} +// CHECK:STDOUT: inst50000057: {kind: LookupImplWitness, arg0: inst50000036, arg1: specific_interface50000000, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst50000058: {kind: AssociatedConstantDecl, arg0: assoc_const50000003, arg1: inst_block_empty, type: type(TypeType)} +// CHECK:STDOUT: inst50000059: {kind: ImplWitnessAccess, arg0: inst50000042, arg1: element1, type: type(TypeType)} +// CHECK:STDOUT: inst5000005A: {kind: ImplWitnessAccess, arg0: inst50000042, arg1: element1, type: type(TypeType)} +// CHECK:STDOUT: inst5000005B: {kind: ImplWitnessAccess, arg0: inst50000046, arg1: element1, type: type(TypeType)} +// CHECK:STDOUT: inst5000005C: {kind: PatternType, arg0: inst5000005A, type: type(TypeType)} +// CHECK:STDOUT: inst5000005D: {kind: ValueParamPattern, arg0: name(Underscore), type: type(symbolic_constant50000018)} +// CHECK:STDOUT: inst5000005E: {kind: ValueParamPattern, arg0: name(Underscore), type: type(symbolic_constant50000016)} +// CHECK:STDOUT: inst5000005F: {kind: PatternType, arg0: inst5000005B, type: type(TypeType)} +// CHECK:STDOUT: inst50000060: {kind: ValueParamPattern, arg0: name(Underscore), type: type(symbolic_constant50000018)} +// CHECK:STDOUT: inst50000061: {kind: WrapperBindingPattern, arg0: entity_name50000009, arg1: inst5000005D, type: type(symbolic_constant50000018)} +// CHECK:STDOUT: inst50000062: {kind: WrapperBindingPattern, arg0: entity_name50000008, arg1: inst5000005E, type: type(symbolic_constant50000016)} +// CHECK:STDOUT: inst50000063: {kind: WrapperBindingPattern, arg0: entity_name50000008, arg1: inst50000060, type: type(symbolic_constant50000018)} +// CHECK:STDOUT: inst50000064: {kind: ValueBinding, arg0: entity_name50000009, arg1: inst50000068, type: type(symbolic_constant50000015)} +// CHECK:STDOUT: inst50000065: {kind: SpliceBlock, arg0: inst_block5000000E, arg1: inst50000030, type: type(TypeType)} +// CHECK:STDOUT: inst50000066: {kind: ValueParam, arg0: call_param0, arg1: name(Underscore), type: type(symbolic_constant5000000D)} +// CHECK:STDOUT: inst50000067: {kind: SpliceBlock, arg0: inst_block50000013, arg1: inst50000044, type: type(TypeType)} +// CHECK:STDOUT: inst50000068: {kind: ValueParam, arg0: call_param1, arg1: name(Underscore), type: type(symbolic_constant50000015)} +// CHECK:STDOUT: inst50000069: {kind: SpliceBlock, arg0: inst_block50000016, arg1: inst50000059, type: type(TypeType)} +// CHECK:STDOUT: inst5000006A: {kind: FunctionDecl, arg0: function50000000, arg1: inst_block5000001B, type: type(inst5000006B)} +// CHECK:STDOUT: inst5000006B: {kind: FunctionType, arg0: function50000000, arg1: specific, type: type(TypeType)} +// CHECK:STDOUT: inst5000006C: {kind: TupleType, arg0: inst_block_empty, type: type(TypeType)} +// CHECK:STDOUT: inst5000006D: {kind: StructValue, arg0: inst_block_empty, type: type(inst5000006B)} +// CHECK:STDOUT: inst5000006E: {kind: RequireCompleteType, arg0: inst50000045, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst5000006F: {kind: RequireCompleteType, arg0: inst50000045, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst50000070: {kind: RequireCompleteType, arg0: inst50000047, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst50000071: {kind: RequireCompleteType, arg0: inst5000005A, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst50000072: {kind: RequireCompleteType, arg0: inst5000005A, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst50000073: {kind: RequireCompleteType, arg0: inst5000005B, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst50000074: {kind: Return} +// CHECK:STDOUT: inst50000075: {kind: SymbolicBinding, arg0: entity_name50000001, arg1: inst, type: type(inst50000021)} +// CHECK:STDOUT: inst50000076: {kind: NameRef, arg0: name1, arg1: inst50000012, type: type(TypeType)} +// CHECK:STDOUT: inst50000077: {kind: PatternType, arg0: inst50000013, type: type(TypeType)} +// CHECK:STDOUT: inst50000078: {kind: SymbolicBindingPattern, arg0: entity_name5000000A, type: type(inst50000077)} +// CHECK:STDOUT: inst50000079: {kind: SymbolicBindingPattern, arg0: entity_name50000007, type: type(inst50000077)} +// CHECK:STDOUT: inst5000007A: {kind: SymbolicBindingPattern, arg0: entity_name50000007, type: type(inst50000077)} +// CHECK:STDOUT: inst5000007B: {kind: SymbolicBinding, arg0: entity_name5000000A, arg1: inst, type: type(inst50000013)} +// CHECK:STDOUT: inst5000007C: {kind: SymbolicBinding, arg0: entity_name50000007, arg1: inst, type: type(inst50000013)} +// CHECK:STDOUT: inst5000007D: {kind: SymbolicBinding, arg0: entity_name50000007, arg1: inst, type: type(inst50000013)} +// CHECK:STDOUT: inst5000007E: {kind: NameRef, arg0: name5, arg1: inst5000007B, type: type(inst50000013)} +// CHECK:STDOUT: inst5000007F: {kind: FacetAccessType, arg0: inst5000007E, type: type(TypeType)} +// CHECK:STDOUT: inst50000080: {kind: FacetAccessType, arg0: inst5000007C, type: type(TypeType)} +// CHECK:STDOUT: inst50000081: {kind: FacetAccessType, arg0: inst5000007D, type: type(TypeType)} +// CHECK:STDOUT: inst50000082: {kind: Converted, arg0: inst5000007E, arg1: inst5000007F, type: type(TypeType)} +// CHECK:STDOUT: inst50000083: {kind: NameRef, arg0: name2, arg1: inst5000001B, type: type(inst5000001A)} +// CHECK:STDOUT: inst50000084: {kind: LookupImplWitness, arg0: inst5000007C, arg1: specific_interface50000001, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst50000085: {kind: LookupImplWitness, arg0: inst5000007C, arg1: specific_interface50000001, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst50000086: {kind: ImplWitnessAccess, arg0: inst50000085, arg1: element0, type: type(TypeType)} +// CHECK:STDOUT: inst50000087: {kind: ImplWitnessAccess, arg0: inst50000085, arg1: element0, type: type(TypeType)} +// CHECK:STDOUT: inst50000088: {kind: LookupImplWitness, arg0: inst5000007D, arg1: specific_interface50000001, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst50000089: {kind: ImplWitnessAccess, arg0: inst50000088, arg1: element0, type: type(TypeType)} +// CHECK:STDOUT: inst5000008A: {kind: PatternType, arg0: inst50000087, type: type(TypeType)} +// CHECK:STDOUT: inst5000008B: {kind: ValueParamPattern, arg0: name(Underscore), type: type(symbolic_constant5000002C)} +// CHECK:STDOUT: inst5000008C: {kind: ValueParamPattern, arg0: name(Underscore), type: type(symbolic_constant5000002A)} +// CHECK:STDOUT: inst5000008D: {kind: PatternType, arg0: inst50000089, type: type(TypeType)} +// CHECK:STDOUT: inst5000008E: {kind: ValueParamPattern, arg0: name(Underscore), type: type(symbolic_constant5000002C)} +// CHECK:STDOUT: inst5000008F: {kind: WrapperBindingPattern, arg0: entity_name5000000B, arg1: inst5000008B, type: type(symbolic_constant5000002C)} +// CHECK:STDOUT: inst50000090: {kind: WrapperBindingPattern, arg0: entity_name50000008, arg1: inst5000008C, type: type(symbolic_constant5000002A)} +// CHECK:STDOUT: inst50000091: {kind: WrapperBindingPattern, arg0: entity_name50000008, arg1: inst5000008E, type: type(symbolic_constant5000002C)} +// CHECK:STDOUT: inst50000092: {kind: ValueBinding, arg0: entity_name5000000B, arg1: inst500000A5, type: type(symbolic_constant50000029)} +// CHECK:STDOUT: inst50000093: {kind: NameRef, arg0: name5, arg1: inst5000007B, type: type(inst50000013)} +// CHECK:STDOUT: inst50000094: {kind: FacetAccessType, arg0: inst50000093, type: type(TypeType)} +// CHECK:STDOUT: inst50000095: {kind: Converted, arg0: inst50000093, arg1: inst50000094, type: type(TypeType)} +// CHECK:STDOUT: inst50000096: {kind: NameRef, arg0: name3, arg1: inst5000001F, type: type(inst5000001A)} +// CHECK:STDOUT: inst50000097: {kind: LookupImplWitness, arg0: inst5000007C, arg1: specific_interface50000001, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst50000098: {kind: ImplWitnessAccess, arg0: inst50000085, arg1: element1, type: type(TypeType)} +// CHECK:STDOUT: inst50000099: {kind: ImplWitnessAccess, arg0: inst50000085, arg1: element1, type: type(TypeType)} +// CHECK:STDOUT: inst5000009A: {kind: ImplWitnessAccess, arg0: inst50000088, arg1: element1, type: type(TypeType)} +// CHECK:STDOUT: inst5000009B: {kind: PatternType, arg0: inst50000099, type: type(TypeType)} +// CHECK:STDOUT: inst5000009C: {kind: ValueParamPattern, arg0: name(Underscore), type: type(symbolic_constant50000034)} +// CHECK:STDOUT: inst5000009D: {kind: ValueParamPattern, arg0: name(Underscore), type: type(symbolic_constant50000032)} +// CHECK:STDOUT: inst5000009E: {kind: PatternType, arg0: inst5000009A, type: type(TypeType)} +// CHECK:STDOUT: inst5000009F: {kind: ValueParamPattern, arg0: name(Underscore), type: type(symbolic_constant50000034)} +// CHECK:STDOUT: inst500000A0: {kind: WrapperBindingPattern, arg0: entity_name5000000C, arg1: inst5000009C, type: type(symbolic_constant50000034)} +// CHECK:STDOUT: inst500000A1: {kind: WrapperBindingPattern, arg0: entity_name50000008, arg1: inst5000009D, type: type(symbolic_constant50000032)} +// CHECK:STDOUT: inst500000A2: {kind: WrapperBindingPattern, arg0: entity_name50000008, arg1: inst5000009F, type: type(symbolic_constant50000034)} +// CHECK:STDOUT: inst500000A3: {kind: ValueBinding, arg0: entity_name5000000C, arg1: inst500000A7, type: type(symbolic_constant50000031)} +// CHECK:STDOUT: inst500000A4: {kind: SpliceBlock, arg0: inst_block50000021, arg1: inst50000076, type: type(TypeType)} +// CHECK:STDOUT: inst500000A5: {kind: ValueParam, arg0: call_param0, arg1: name(Underscore), type: type(symbolic_constant50000029)} +// CHECK:STDOUT: inst500000A6: {kind: SpliceBlock, arg0: inst_block50000023, arg1: inst50000086, type: type(TypeType)} +// CHECK:STDOUT: inst500000A7: {kind: ValueParam, arg0: call_param1, arg1: name(Underscore), type: type(symbolic_constant50000031)} +// CHECK:STDOUT: inst500000A8: {kind: SpliceBlock, arg0: inst_block50000026, arg1: inst50000098, type: type(TypeType)} +// CHECK:STDOUT: inst500000A9: {kind: FunctionDecl, arg0: function50000001, arg1: inst_block5000002B, type: type(inst500000AA)} +// CHECK:STDOUT: inst500000AA: {kind: FunctionType, arg0: function50000001, arg1: specific, type: type(TypeType)} +// CHECK:STDOUT: inst500000AB: {kind: StructValue, arg0: inst_block_empty, type: type(inst500000AA)} +// CHECK:STDOUT: inst500000AC: {kind: RequireCompleteType, arg0: inst50000087, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst500000AD: {kind: RequireCompleteType, arg0: inst50000087, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst500000AE: {kind: RequireCompleteType, arg0: inst50000089, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst500000AF: {kind: RequireCompleteType, arg0: inst50000099, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst500000B0: {kind: RequireCompleteType, arg0: inst50000099, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst500000B1: {kind: RequireCompleteType, arg0: inst5000009A, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst500000B2: {kind: Return} // CHECK:STDOUT: bundles: {} // CHECK:STDOUT: constant_values: // CHECK:STDOUT: values: @@ -517,8 +537,8 @@ fn UseLocalCopy[T:! Copy](_: T.T1, _: T.T2) {} // CHECK:STDOUT: inst50000027: concrete_constant(inst50000027) // CHECK:STDOUT: inst50000028: concrete_constant(inst50000028) // CHECK:STDOUT: inst50000029: symbolic_constant50000003 -// CHECK:STDOUT: inst5000002A: concrete_constant(inst5000003D) -// CHECK:STDOUT: inst5000002B: concrete_constant(inst5000004F) +// CHECK:STDOUT: inst5000002A: concrete_constant(inst5000003F) +// CHECK:STDOUT: inst5000002B: concrete_constant(inst50000055) // CHECK:STDOUT: inst5000002C: constant // CHECK:STDOUT: inst5000002D: constant // CHECK:STDOUT: inst5000002E: symbolic_constant50000003 @@ -528,98 +548,118 @@ fn UseLocalCopy[T:! Copy](_: T.T1, _: T.T2) {} // CHECK:STDOUT: inst50000032: symbolic_constant50000005 // CHECK:STDOUT: inst50000033: symbolic_constant50000004 // CHECK:STDOUT: inst50000034: symbolic_constant50000005 -// CHECK:STDOUT: inst50000035: concrete_constant(inst50000035) -// CHECK:STDOUT: inst50000036: symbolic_constant50000005 +// CHECK:STDOUT: inst50000035: symbolic_constant50000007 +// CHECK:STDOUT: inst50000036: symbolic_constant50000006 // CHECK:STDOUT: inst50000037: symbolic_constant50000007 -// CHECK:STDOUT: inst50000038: symbolic_constant50000006 -// CHECK:STDOUT: inst50000039: symbolic_constant50000007 -// CHECK:STDOUT: inst5000003A: symbolic_constant50000007 -// CHECK:STDOUT: inst5000003B: concrete_constant(inst5000003B) -// CHECK:STDOUT: inst5000003C: concrete_constant(inst50000041) +// CHECK:STDOUT: inst50000038: symbolic_constant50000007 +// CHECK:STDOUT: inst50000039: symbolic_constant50000009 +// CHECK:STDOUT: inst5000003A: symbolic_constant50000008 +// CHECK:STDOUT: inst5000003B: symbolic_constant50000009 +// CHECK:STDOUT: inst5000003C: symbolic_constant50000009 // CHECK:STDOUT: inst5000003D: concrete_constant(inst5000003D) -// CHECK:STDOUT: inst5000003E: concrete_constant(inst5000003D) -// CHECK:STDOUT: inst50000040: symbolic_constant50000008 -// CHECK:STDOUT: inst50000041: concrete_constant(inst50000041) -// CHECK:STDOUT: inst50000042: symbolic_constant5000000B -// CHECK:STDOUT: inst50000043: symbolic_constant50000009 -// CHECK:STDOUT: inst50000044: symbolic_constant5000000A +// CHECK:STDOUT: inst5000003E: concrete_constant(inst50000043) +// CHECK:STDOUT: inst5000003F: concrete_constant(inst5000003F) +// CHECK:STDOUT: inst50000040: concrete_constant(inst5000003F) +// CHECK:STDOUT: inst50000042: symbolic_constant5000000A +// CHECK:STDOUT: inst50000043: concrete_constant(inst50000043) +// CHECK:STDOUT: inst50000044: symbolic_constant5000000D // CHECK:STDOUT: inst50000045: symbolic_constant5000000B // CHECK:STDOUT: inst50000046: symbolic_constant5000000C -// CHECK:STDOUT: inst50000047: concrete_constant(inst50000047) -// CHECK:STDOUT: inst50000048: symbolic_constant5000000D -// CHECK:STDOUT: inst5000004A: concrete_constant(inst5000004A) -// CHECK:STDOUT: inst5000004B: symbolic_constant50000005 -// CHECK:STDOUT: inst5000004C: symbolic_constant50000007 -// CHECK:STDOUT: inst5000004D: symbolic_constant50000007 -// CHECK:STDOUT: inst5000004E: concrete_constant(inst50000052) -// CHECK:STDOUT: inst5000004F: concrete_constant(inst5000004F) -// CHECK:STDOUT: inst50000050: concrete_constant(inst5000004F) -// CHECK:STDOUT: inst50000052: concrete_constant(inst50000052) -// CHECK:STDOUT: inst50000053: symbolic_constant5000000F -// CHECK:STDOUT: inst50000054: symbolic_constant5000000E -// CHECK:STDOUT: inst50000055: symbolic_constant5000000F -// CHECK:STDOUT: inst50000056: symbolic_constant50000010 -// CHECK:STDOUT: inst50000057: concrete_constant(inst50000057) -// CHECK:STDOUT: inst50000058: symbolic_constant50000011 -// CHECK:STDOUT: inst5000005A: concrete_constant(inst5000005A) -// CHECK:STDOUT: inst5000005B: concrete_constant(inst50000027) -// CHECK:STDOUT: inst5000005D: symbolic_constant5000000B -// CHECK:STDOUT: inst5000005F: symbolic_constant5000000F -// CHECK:STDOUT: inst50000060: concrete_constant(inst50000063) -// CHECK:STDOUT: inst50000061: concrete_constant(inst50000061) -// CHECK:STDOUT: inst50000062: concrete_constant(inst50000062) -// CHECK:STDOUT: inst50000063: concrete_constant(inst50000063) -// CHECK:STDOUT: inst50000064: symbolic_constant50000013 -// CHECK:STDOUT: inst50000065: symbolic_constant50000012 -// CHECK:STDOUT: inst50000066: symbolic_constant50000013 -// CHECK:STDOUT: inst50000067: symbolic_constant50000015 -// CHECK:STDOUT: inst50000068: symbolic_constant50000014 +// CHECK:STDOUT: inst50000047: symbolic_constant5000000D +// CHECK:STDOUT: inst50000048: symbolic_constant5000000E +// CHECK:STDOUT: inst50000049: symbolic_constant50000011 +// CHECK:STDOUT: inst5000004A: symbolic_constant5000000F +// CHECK:STDOUT: inst5000004B: symbolic_constant50000010 +// CHECK:STDOUT: inst5000004C: symbolic_constant50000011 +// CHECK:STDOUT: inst5000004D: symbolic_constant50000013 +// CHECK:STDOUT: inst5000004E: symbolic_constant50000012 +// CHECK:STDOUT: inst5000004F: symbolic_constant50000013 +// CHECK:STDOUT: inst50000051: symbolic_constant50000007 +// CHECK:STDOUT: inst50000052: symbolic_constant50000009 +// CHECK:STDOUT: inst50000053: symbolic_constant50000009 +// CHECK:STDOUT: inst50000054: concrete_constant(inst50000058) +// CHECK:STDOUT: inst50000055: concrete_constant(inst50000055) +// CHECK:STDOUT: inst50000056: concrete_constant(inst50000055) +// CHECK:STDOUT: inst50000058: concrete_constant(inst50000058) +// CHECK:STDOUT: inst50000059: symbolic_constant50000015 +// CHECK:STDOUT: inst5000005A: symbolic_constant50000014 +// CHECK:STDOUT: inst5000005B: symbolic_constant50000015 +// CHECK:STDOUT: inst5000005C: symbolic_constant50000016 +// CHECK:STDOUT: inst5000005D: symbolic_constant50000019 +// CHECK:STDOUT: inst5000005E: symbolic_constant50000017 +// CHECK:STDOUT: inst5000005F: symbolic_constant50000018 +// CHECK:STDOUT: inst50000060: symbolic_constant50000019 +// CHECK:STDOUT: inst50000061: symbolic_constant5000001B +// CHECK:STDOUT: inst50000062: symbolic_constant5000001A +// CHECK:STDOUT: inst50000063: symbolic_constant5000001B +// CHECK:STDOUT: inst50000065: concrete_constant(inst50000027) +// CHECK:STDOUT: inst50000067: symbolic_constant5000000D // CHECK:STDOUT: inst50000069: symbolic_constant50000015 -// CHECK:STDOUT: inst5000006B: symbolic_constant50000002 -// CHECK:STDOUT: inst5000006C: concrete_constant(inst50000013) +// CHECK:STDOUT: inst5000006A: concrete_constant(inst5000006D) +// CHECK:STDOUT: inst5000006B: concrete_constant(inst5000006B) +// CHECK:STDOUT: inst5000006C: concrete_constant(inst5000006C) // CHECK:STDOUT: inst5000006D: concrete_constant(inst5000006D) -// CHECK:STDOUT: inst5000006E: symbolic_constant50000017 -// CHECK:STDOUT: inst5000006F: symbolic_constant50000016 -// CHECK:STDOUT: inst50000070: symbolic_constant50000017 -// CHECK:STDOUT: inst50000071: concrete_constant(inst50000071) -// CHECK:STDOUT: inst50000072: symbolic_constant50000017 -// CHECK:STDOUT: inst50000073: symbolic_constant50000019 -// CHECK:STDOUT: inst50000074: symbolic_constant50000018 -// CHECK:STDOUT: inst50000075: symbolic_constant50000019 -// CHECK:STDOUT: inst50000076: symbolic_constant50000019 -// CHECK:STDOUT: inst50000077: concrete_constant(inst5000001C) -// CHECK:STDOUT: inst50000079: symbolic_constant5000001A -// CHECK:STDOUT: inst5000007A: symbolic_constant5000001D -// CHECK:STDOUT: inst5000007B: symbolic_constant5000001B -// CHECK:STDOUT: inst5000007C: symbolic_constant5000001C -// CHECK:STDOUT: inst5000007D: symbolic_constant5000001D -// CHECK:STDOUT: inst5000007E: symbolic_constant5000001E -// CHECK:STDOUT: inst5000007F: concrete_constant(inst5000007F) -// CHECK:STDOUT: inst50000080: symbolic_constant5000001F -// CHECK:STDOUT: inst50000082: concrete_constant(inst50000082) -// CHECK:STDOUT: inst50000083: symbolic_constant50000017 -// CHECK:STDOUT: inst50000084: symbolic_constant50000019 -// CHECK:STDOUT: inst50000085: symbolic_constant50000019 -// CHECK:STDOUT: inst50000086: concrete_constant(inst50000020) -// CHECK:STDOUT: inst50000088: symbolic_constant50000021 -// CHECK:STDOUT: inst50000089: symbolic_constant50000020 -// CHECK:STDOUT: inst5000008A: symbolic_constant50000021 -// CHECK:STDOUT: inst5000008B: symbolic_constant50000022 -// CHECK:STDOUT: inst5000008C: concrete_constant(inst5000008C) -// CHECK:STDOUT: inst5000008D: symbolic_constant50000023 -// CHECK:STDOUT: inst5000008F: concrete_constant(inst5000008F) -// CHECK:STDOUT: inst50000090: concrete_constant(inst50000013) -// CHECK:STDOUT: inst50000092: symbolic_constant5000001D -// CHECK:STDOUT: inst50000094: symbolic_constant50000021 -// CHECK:STDOUT: inst50000095: concrete_constant(inst50000097) -// CHECK:STDOUT: inst50000096: concrete_constant(inst50000096) -// CHECK:STDOUT: inst50000097: concrete_constant(inst50000097) -// CHECK:STDOUT: inst50000098: symbolic_constant50000025 -// CHECK:STDOUT: inst50000099: symbolic_constant50000024 -// CHECK:STDOUT: inst5000009A: symbolic_constant50000025 -// CHECK:STDOUT: inst5000009B: symbolic_constant50000027 -// CHECK:STDOUT: inst5000009C: symbolic_constant50000026 -// CHECK:STDOUT: inst5000009D: symbolic_constant50000027 +// CHECK:STDOUT: inst5000006E: symbolic_constant5000001D +// CHECK:STDOUT: inst5000006F: symbolic_constant5000001C +// CHECK:STDOUT: inst50000070: symbolic_constant5000001D +// CHECK:STDOUT: inst50000071: symbolic_constant5000001F +// CHECK:STDOUT: inst50000072: symbolic_constant5000001E +// CHECK:STDOUT: inst50000073: symbolic_constant5000001F +// CHECK:STDOUT: inst50000075: symbolic_constant50000002 +// CHECK:STDOUT: inst50000076: concrete_constant(inst50000013) +// CHECK:STDOUT: inst50000077: concrete_constant(inst50000077) +// CHECK:STDOUT: inst50000078: symbolic_constant50000021 +// CHECK:STDOUT: inst50000079: symbolic_constant50000020 +// CHECK:STDOUT: inst5000007A: symbolic_constant50000021 +// CHECK:STDOUT: inst5000007B: symbolic_constant50000023 +// CHECK:STDOUT: inst5000007C: symbolic_constant50000022 +// CHECK:STDOUT: inst5000007D: symbolic_constant50000023 +// CHECK:STDOUT: inst5000007E: symbolic_constant50000023 +// CHECK:STDOUT: inst5000007F: symbolic_constant50000025 +// CHECK:STDOUT: inst50000080: symbolic_constant50000024 +// CHECK:STDOUT: inst50000081: symbolic_constant50000025 +// CHECK:STDOUT: inst50000082: symbolic_constant50000025 +// CHECK:STDOUT: inst50000083: concrete_constant(inst5000001C) +// CHECK:STDOUT: inst50000085: symbolic_constant50000026 +// CHECK:STDOUT: inst50000086: symbolic_constant50000029 +// CHECK:STDOUT: inst50000087: symbolic_constant50000027 +// CHECK:STDOUT: inst50000088: symbolic_constant50000028 +// CHECK:STDOUT: inst50000089: symbolic_constant50000029 +// CHECK:STDOUT: inst5000008A: symbolic_constant5000002A +// CHECK:STDOUT: inst5000008B: symbolic_constant5000002D +// CHECK:STDOUT: inst5000008C: symbolic_constant5000002B +// CHECK:STDOUT: inst5000008D: symbolic_constant5000002C +// CHECK:STDOUT: inst5000008E: symbolic_constant5000002D +// CHECK:STDOUT: inst5000008F: symbolic_constant5000002F +// CHECK:STDOUT: inst50000090: symbolic_constant5000002E +// CHECK:STDOUT: inst50000091: symbolic_constant5000002F +// CHECK:STDOUT: inst50000093: symbolic_constant50000023 +// CHECK:STDOUT: inst50000094: symbolic_constant50000025 +// CHECK:STDOUT: inst50000095: symbolic_constant50000025 +// CHECK:STDOUT: inst50000096: concrete_constant(inst50000020) +// CHECK:STDOUT: inst50000098: symbolic_constant50000031 +// CHECK:STDOUT: inst50000099: symbolic_constant50000030 +// CHECK:STDOUT: inst5000009A: symbolic_constant50000031 +// CHECK:STDOUT: inst5000009B: symbolic_constant50000032 +// CHECK:STDOUT: inst5000009C: symbolic_constant50000035 +// CHECK:STDOUT: inst5000009D: symbolic_constant50000033 +// CHECK:STDOUT: inst5000009E: symbolic_constant50000034 +// CHECK:STDOUT: inst5000009F: symbolic_constant50000035 +// CHECK:STDOUT: inst500000A0: symbolic_constant50000037 +// CHECK:STDOUT: inst500000A1: symbolic_constant50000036 +// CHECK:STDOUT: inst500000A2: symbolic_constant50000037 +// CHECK:STDOUT: inst500000A4: concrete_constant(inst50000013) +// CHECK:STDOUT: inst500000A6: symbolic_constant50000029 +// CHECK:STDOUT: inst500000A8: symbolic_constant50000031 +// CHECK:STDOUT: inst500000A9: concrete_constant(inst500000AB) +// CHECK:STDOUT: inst500000AA: concrete_constant(inst500000AA) +// CHECK:STDOUT: inst500000AB: concrete_constant(inst500000AB) +// CHECK:STDOUT: inst500000AC: symbolic_constant50000039 +// CHECK:STDOUT: inst500000AD: symbolic_constant50000038 +// CHECK:STDOUT: inst500000AE: symbolic_constant50000039 +// CHECK:STDOUT: inst500000AF: symbolic_constant5000003B +// CHECK:STDOUT: inst500000B0: symbolic_constant5000003A +// CHECK:STDOUT: inst500000B1: symbolic_constant5000003B // CHECK:STDOUT: symbolic_constants: // CHECK:STDOUT: symbolic_constant50000000: {inst: inst50000015, kind: checked, attached: null} // CHECK:STDOUT: symbolic_constant50000001: {inst: inst50000015, kind: checked, attached: {generic: generic50000000, index: generic_inst_in_def0}} @@ -627,46 +667,66 @@ fn UseLocalCopy[T:! Copy](_: T.T1, _: T.T2) {} // CHECK:STDOUT: symbolic_constant50000003: {inst: inst50000029, kind: checked, attached: null} // CHECK:STDOUT: symbolic_constant50000004: {inst: inst50000033, kind: checked, attached: null} // CHECK:STDOUT: symbolic_constant50000005: {inst: inst50000033, kind: checked, attached: {generic: generic50000003, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant50000006: {inst: inst50000038, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant50000007: {inst: inst50000038, kind: checked, attached: {generic: generic50000003, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant50000008: {inst: inst50000040, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant50000009: {inst: inst50000043, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant5000000A: {inst: inst50000040, kind: checked, attached: {generic: generic50000003, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant5000000B: {inst: inst50000043, kind: checked, attached: {generic: generic50000003, index: generic_inst_in_decl3}} -// CHECK:STDOUT: symbolic_constant5000000C: {inst: inst50000046, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant5000000D: {inst: inst50000046, kind: checked, attached: {generic: generic50000003, index: generic_inst_in_decl4}} -// CHECK:STDOUT: symbolic_constant5000000E: {inst: inst50000054, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant5000000F: {inst: inst50000054, kind: checked, attached: {generic: generic50000003, index: generic_inst_in_decl5}} -// CHECK:STDOUT: symbolic_constant50000010: {inst: inst50000056, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant50000011: {inst: inst50000056, kind: checked, attached: {generic: generic50000003, index: generic_inst_in_decl6}} -// CHECK:STDOUT: symbolic_constant50000012: {inst: inst50000065, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant50000013: {inst: inst50000065, kind: checked, attached: {generic: generic50000003, index: generic_inst_in_def0}} -// CHECK:STDOUT: symbolic_constant50000014: {inst: inst50000068, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant50000015: {inst: inst50000068, kind: checked, attached: {generic: generic50000003, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant50000016: {inst: inst5000006F, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant50000017: {inst: inst5000006F, kind: checked, attached: {generic: generic50000004, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant50000018: {inst: inst50000074, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant50000019: {inst: inst50000074, kind: checked, attached: {generic: generic50000004, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant5000001A: {inst: inst50000079, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant5000001B: {inst: inst5000007B, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant5000001C: {inst: inst50000079, kind: checked, attached: {generic: generic50000004, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant5000001D: {inst: inst5000007B, kind: checked, attached: {generic: generic50000004, index: generic_inst_in_decl3}} -// CHECK:STDOUT: symbolic_constant5000001E: {inst: inst5000007E, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant5000001F: {inst: inst5000007E, kind: checked, attached: {generic: generic50000004, index: generic_inst_in_decl4}} -// CHECK:STDOUT: symbolic_constant50000020: {inst: inst50000089, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant50000021: {inst: inst50000089, kind: checked, attached: {generic: generic50000004, index: generic_inst_in_decl5}} -// CHECK:STDOUT: symbolic_constant50000022: {inst: inst5000008B, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant50000023: {inst: inst5000008B, kind: checked, attached: {generic: generic50000004, index: generic_inst_in_decl6}} -// CHECK:STDOUT: symbolic_constant50000024: {inst: inst50000099, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant50000025: {inst: inst50000099, kind: checked, attached: {generic: generic50000004, index: generic_inst_in_def0}} -// CHECK:STDOUT: symbolic_constant50000026: {inst: inst5000009C, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant50000027: {inst: inst5000009C, kind: checked, attached: {generic: generic50000004, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant50000006: {inst: inst50000036, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant50000007: {inst: inst50000036, kind: checked, attached: {generic: generic50000003, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant50000008: {inst: inst5000003A, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant50000009: {inst: inst5000003A, kind: checked, attached: {generic: generic50000003, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant5000000A: {inst: inst50000042, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant5000000B: {inst: inst50000045, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant5000000C: {inst: inst50000042, kind: checked, attached: {generic: generic50000003, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant5000000D: {inst: inst50000045, kind: checked, attached: {generic: generic50000003, index: generic_inst_in_decl4}} +// CHECK:STDOUT: symbolic_constant5000000E: {inst: inst50000048, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant5000000F: {inst: inst5000004A, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant50000010: {inst: inst50000048, kind: checked, attached: {generic: generic50000003, index: generic_inst_in_decl5}} +// CHECK:STDOUT: symbolic_constant50000011: {inst: inst5000004A, kind: checked, attached: {generic: generic50000003, index: generic_inst_in_decl6}} +// CHECK:STDOUT: symbolic_constant50000012: {inst: inst5000004E, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant50000013: {inst: inst5000004E, kind: checked, attached: {generic: generic50000003, index: generic_inst_in_decl7}} +// CHECK:STDOUT: symbolic_constant50000014: {inst: inst5000005A, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant50000015: {inst: inst5000005A, kind: checked, attached: {generic: generic50000003, index: generic_inst_in_decl8}} +// CHECK:STDOUT: symbolic_constant50000016: {inst: inst5000005C, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant50000017: {inst: inst5000005E, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant50000018: {inst: inst5000005C, kind: checked, attached: {generic: generic50000003, index: generic_inst_in_decl9}} +// CHECK:STDOUT: symbolic_constant50000019: {inst: inst5000005E, kind: checked, attached: {generic: generic50000003, index: generic_inst_in_decl10}} +// CHECK:STDOUT: symbolic_constant5000001A: {inst: inst50000062, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant5000001B: {inst: inst50000062, kind: checked, attached: {generic: generic50000003, index: generic_inst_in_decl11}} +// CHECK:STDOUT: symbolic_constant5000001C: {inst: inst5000006F, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant5000001D: {inst: inst5000006F, kind: checked, attached: {generic: generic50000003, index: generic_inst_in_def0}} +// CHECK:STDOUT: symbolic_constant5000001E: {inst: inst50000072, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant5000001F: {inst: inst50000072, kind: checked, attached: {generic: generic50000003, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant50000020: {inst: inst50000079, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant50000021: {inst: inst50000079, kind: checked, attached: {generic: generic50000004, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant50000022: {inst: inst5000007C, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant50000023: {inst: inst5000007C, kind: checked, attached: {generic: generic50000004, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant50000024: {inst: inst50000080, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant50000025: {inst: inst50000080, kind: checked, attached: {generic: generic50000004, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant50000026: {inst: inst50000085, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant50000027: {inst: inst50000087, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant50000028: {inst: inst50000085, kind: checked, attached: {generic: generic50000004, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant50000029: {inst: inst50000087, kind: checked, attached: {generic: generic50000004, index: generic_inst_in_decl4}} +// CHECK:STDOUT: symbolic_constant5000002A: {inst: inst5000008A, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant5000002B: {inst: inst5000008C, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant5000002C: {inst: inst5000008A, kind: checked, attached: {generic: generic50000004, index: generic_inst_in_decl5}} +// CHECK:STDOUT: symbolic_constant5000002D: {inst: inst5000008C, kind: checked, attached: {generic: generic50000004, index: generic_inst_in_decl6}} +// CHECK:STDOUT: symbolic_constant5000002E: {inst: inst50000090, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant5000002F: {inst: inst50000090, kind: checked, attached: {generic: generic50000004, index: generic_inst_in_decl7}} +// CHECK:STDOUT: symbolic_constant50000030: {inst: inst50000099, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant50000031: {inst: inst50000099, kind: checked, attached: {generic: generic50000004, index: generic_inst_in_decl8}} +// CHECK:STDOUT: symbolic_constant50000032: {inst: inst5000009B, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant50000033: {inst: inst5000009D, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant50000034: {inst: inst5000009B, kind: checked, attached: {generic: generic50000004, index: generic_inst_in_decl9}} +// CHECK:STDOUT: symbolic_constant50000035: {inst: inst5000009D, kind: checked, attached: {generic: generic50000004, index: generic_inst_in_decl10}} +// CHECK:STDOUT: symbolic_constant50000036: {inst: inst500000A1, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant50000037: {inst: inst500000A1, kind: checked, attached: {generic: generic50000004, index: generic_inst_in_decl11}} +// CHECK:STDOUT: symbolic_constant50000038: {inst: inst500000AD, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant50000039: {inst: inst500000AD, kind: checked, attached: {generic: generic50000004, index: generic_inst_in_def0}} +// CHECK:STDOUT: symbolic_constant5000003A: {inst: inst500000B0, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant5000003B: {inst: inst500000B0, kind: checked, attached: {generic: generic50000004, index: generic_inst_in_def1}} // CHECK:STDOUT: inst_blocks: // CHECK:STDOUT: inst_block_empty: {} // CHECK:STDOUT: exports: // CHECK:STDOUT: 0: inst50000012 -// CHECK:STDOUT: 1: inst50000060 -// CHECK:STDOUT: 2: inst50000095 +// CHECK:STDOUT: 1: inst5000006A +// CHECK:STDOUT: 2: inst500000A9 // CHECK:STDOUT: generated: {} // CHECK:STDOUT: imports: // CHECK:STDOUT: 0: inst50000011 @@ -679,10 +739,10 @@ fn UseLocalCopy[T:! Copy](_: T.T1, _: T.T2) {} // CHECK:STDOUT: 7: inst5000002D // CHECK:STDOUT: 8: inst5000002E // CHECK:STDOUT: 9: inst5000002F -// CHECK:STDOUT: 10: inst5000003C -// CHECK:STDOUT: 11: inst50000041 -// CHECK:STDOUT: 12: inst5000004E -// CHECK:STDOUT: 13: inst50000052 +// CHECK:STDOUT: 10: inst5000003E +// CHECK:STDOUT: 11: inst50000043 +// CHECK:STDOUT: 12: inst50000054 +// CHECK:STDOUT: 13: inst50000058 // CHECK:STDOUT: global_init: {} // CHECK:STDOUT: inst_block50000005: // CHECK:STDOUT: 0: inst50000014 @@ -717,144 +777,164 @@ fn UseLocalCopy[T:! Copy](_: T.T1, _: T.T2) {} // CHECK:STDOUT: inst_block50000011: // CHECK:STDOUT: 0: inst50000029 // CHECK:STDOUT: inst_block50000012: -// CHECK:STDOUT: 0: inst50000035 -// CHECK:STDOUT: inst_block50000013: -// CHECK:STDOUT: 0: inst50000036 -// CHECK:STDOUT: 1: inst50000037 -// CHECK:STDOUT: 2: inst5000003A -// CHECK:STDOUT: 3: inst5000003E -// CHECK:STDOUT: 4: inst50000042 -// CHECK:STDOUT: inst_block50000014: -// CHECK:STDOUT: 0: inst50000033 -// CHECK:STDOUT: inst_block50000015: -// CHECK:STDOUT: 0: inst50000040 -// CHECK:STDOUT: inst_block50000016: -// CHECK:STDOUT: 0: inst5000004B -// CHECK:STDOUT: 1: inst5000004C -// CHECK:STDOUT: 2: inst5000004D -// CHECK:STDOUT: 3: inst50000050 -// CHECK:STDOUT: 4: inst50000053 -// CHECK:STDOUT: inst_block50000017: -// CHECK:STDOUT: 0: inst5000004A -// CHECK:STDOUT: 1: inst5000005A -// CHECK:STDOUT: inst_block50000018: -// CHECK:STDOUT: 0: inst50000047 -// CHECK:STDOUT: 1: inst50000057 -// CHECK:STDOUT: inst_block50000019: -// CHECK:STDOUT: 0: inst5000005C -// CHECK:STDOUT: 1: inst5000005E -// CHECK:STDOUT: inst_block5000001A: -// CHECK:STDOUT: 0: inst50000035 -// CHECK:STDOUT: 1: inst50000047 -// CHECK:STDOUT: 2: inst5000004A -// CHECK:STDOUT: 3: inst50000057 -// CHECK:STDOUT: 4: inst5000005A -// CHECK:STDOUT: inst_block5000001B: -// CHECK:STDOUT: 0: inst5000005B -// CHECK:STDOUT: 1: inst50000032 -// CHECK:STDOUT: 2: inst5000005C -// CHECK:STDOUT: 3: inst5000005D -// CHECK:STDOUT: 4: inst50000049 -// CHECK:STDOUT: 5: inst5000005E -// CHECK:STDOUT: 6: inst5000005F -// CHECK:STDOUT: 7: inst50000059 -// CHECK:STDOUT: inst_block5000001C: // CHECK:STDOUT: 0: inst50000032 +// CHECK:STDOUT: inst_block50000013: +// CHECK:STDOUT: 0: inst50000038 +// CHECK:STDOUT: 1: inst50000039 +// CHECK:STDOUT: 2: inst5000003C +// CHECK:STDOUT: 3: inst50000040 +// CHECK:STDOUT: 4: inst50000044 +// CHECK:STDOUT: inst_block50000014: +// CHECK:STDOUT: 0: inst50000036 +// CHECK:STDOUT: inst_block50000015: +// CHECK:STDOUT: 0: inst50000042 +// CHECK:STDOUT: inst_block50000016: +// CHECK:STDOUT: 0: inst50000051 +// CHECK:STDOUT: 1: inst50000052 +// CHECK:STDOUT: 2: inst50000053 +// CHECK:STDOUT: 3: inst50000056 +// CHECK:STDOUT: 4: inst50000059 +// CHECK:STDOUT: inst_block50000017: +// CHECK:STDOUT: 0: inst5000004D +// CHECK:STDOUT: 1: inst50000061 +// CHECK:STDOUT: inst_block50000018: +// CHECK:STDOUT: 0: inst50000049 +// CHECK:STDOUT: 1: inst5000005D +// CHECK:STDOUT: inst_block50000019: +// CHECK:STDOUT: 0: inst50000066 +// CHECK:STDOUT: 1: inst50000068 +// CHECK:STDOUT: inst_block5000001A: +// CHECK:STDOUT: 0: inst50000032 +// CHECK:STDOUT: 1: inst50000049 +// CHECK:STDOUT: 2: inst5000004D +// CHECK:STDOUT: 3: inst5000005D +// CHECK:STDOUT: 4: inst50000061 +// CHECK:STDOUT: inst_block5000001B: +// CHECK:STDOUT: 0: inst50000065 +// CHECK:STDOUT: 1: inst50000035 +// CHECK:STDOUT: 2: inst50000066 +// CHECK:STDOUT: 3: inst50000067 +// CHECK:STDOUT: 4: inst50000050 +// CHECK:STDOUT: 5: inst50000068 +// CHECK:STDOUT: 6: inst50000069 +// CHECK:STDOUT: 7: inst50000064 +// CHECK:STDOUT: inst_block5000001C: +// CHECK:STDOUT: 0: inst50000035 // CHECK:STDOUT: inst_block5000001D: // CHECK:STDOUT: 0: inst50000034 -// CHECK:STDOUT: 1: inst50000039 -// CHECK:STDOUT: 2: inst50000044 -// CHECK:STDOUT: 3: inst50000045 -// CHECK:STDOUT: 4: inst50000048 -// CHECK:STDOUT: 5: inst50000055 -// CHECK:STDOUT: 6: inst50000058 +// CHECK:STDOUT: 1: inst50000037 +// CHECK:STDOUT: 2: inst5000003B +// CHECK:STDOUT: 3: inst50000046 +// CHECK:STDOUT: 4: inst50000047 +// CHECK:STDOUT: 5: inst5000004B +// CHECK:STDOUT: 6: inst5000004C +// CHECK:STDOUT: 7: inst5000004F +// CHECK:STDOUT: 8: inst5000005B +// CHECK:STDOUT: 9: inst5000005F +// CHECK:STDOUT: 10: inst50000060 +// CHECK:STDOUT: 11: inst50000063 // CHECK:STDOUT: inst_block5000001E: // CHECK:STDOUT: 0: inst50000033 -// CHECK:STDOUT: 1: inst50000038 -// CHECK:STDOUT: 2: inst50000040 -// CHECK:STDOUT: 3: inst50000043 -// CHECK:STDOUT: 4: inst50000046 -// CHECK:STDOUT: 5: inst50000054 -// CHECK:STDOUT: 6: inst50000056 +// CHECK:STDOUT: 1: inst50000036 +// CHECK:STDOUT: 2: inst5000003A +// CHECK:STDOUT: 3: inst50000042 +// CHECK:STDOUT: 4: inst50000045 +// CHECK:STDOUT: 5: inst50000048 +// CHECK:STDOUT: 6: inst5000004A +// CHECK:STDOUT: 7: inst5000004E +// CHECK:STDOUT: 8: inst5000005A +// CHECK:STDOUT: 9: inst5000005C +// CHECK:STDOUT: 10: inst5000005E +// CHECK:STDOUT: 11: inst50000062 // CHECK:STDOUT: inst_block5000001F: -// CHECK:STDOUT: 0: inst5000006A +// CHECK:STDOUT: 0: inst50000074 // CHECK:STDOUT: inst_block50000020: -// CHECK:STDOUT: 0: inst50000066 -// CHECK:STDOUT: 1: inst50000069 -// CHECK:STDOUT: inst_block50000021: -// CHECK:STDOUT: 0: inst5000006B -// CHECK:STDOUT: 1: inst5000006C -// CHECK:STDOUT: inst_block50000022: -// CHECK:STDOUT: 0: inst50000071 -// CHECK:STDOUT: inst_block50000023: -// CHECK:STDOUT: 0: inst50000072 +// CHECK:STDOUT: 0: inst50000070 // CHECK:STDOUT: 1: inst50000073 -// CHECK:STDOUT: 2: inst50000076 -// CHECK:STDOUT: 3: inst50000077 -// CHECK:STDOUT: 4: inst5000007A -// CHECK:STDOUT: inst_block50000024: -// CHECK:STDOUT: 0: inst5000006F -// CHECK:STDOUT: inst_block50000025: -// CHECK:STDOUT: 0: inst50000079 -// CHECK:STDOUT: inst_block50000026: -// CHECK:STDOUT: 0: inst50000083 -// CHECK:STDOUT: 1: inst50000084 -// CHECK:STDOUT: 2: inst50000085 -// CHECK:STDOUT: 3: inst50000086 -// CHECK:STDOUT: 4: inst50000088 -// CHECK:STDOUT: inst_block50000027: -// CHECK:STDOUT: 0: inst50000082 -// CHECK:STDOUT: 1: inst5000008F -// CHECK:STDOUT: inst_block50000028: -// CHECK:STDOUT: 0: inst5000007F -// CHECK:STDOUT: 1: inst5000008C -// CHECK:STDOUT: inst_block50000029: -// CHECK:STDOUT: 0: inst50000091 -// CHECK:STDOUT: 1: inst50000093 -// CHECK:STDOUT: inst_block5000002A: -// CHECK:STDOUT: 0: inst50000071 +// CHECK:STDOUT: inst_block50000021: +// CHECK:STDOUT: 0: inst50000075 +// CHECK:STDOUT: 1: inst50000076 +// CHECK:STDOUT: inst_block50000022: +// CHECK:STDOUT: 0: inst50000078 +// CHECK:STDOUT: inst_block50000023: +// CHECK:STDOUT: 0: inst5000007E // CHECK:STDOUT: 1: inst5000007F // CHECK:STDOUT: 2: inst50000082 -// CHECK:STDOUT: 3: inst5000008C -// CHECK:STDOUT: 4: inst5000008F +// CHECK:STDOUT: 3: inst50000083 +// CHECK:STDOUT: 4: inst50000086 +// CHECK:STDOUT: inst_block50000024: +// CHECK:STDOUT: 0: inst5000007C +// CHECK:STDOUT: inst_block50000025: +// CHECK:STDOUT: 0: inst50000085 +// CHECK:STDOUT: inst_block50000026: +// CHECK:STDOUT: 0: inst50000093 +// CHECK:STDOUT: 1: inst50000094 +// CHECK:STDOUT: 2: inst50000095 +// CHECK:STDOUT: 3: inst50000096 +// CHECK:STDOUT: 4: inst50000098 +// CHECK:STDOUT: inst_block50000027: +// CHECK:STDOUT: 0: inst5000008F +// CHECK:STDOUT: 1: inst500000A0 +// CHECK:STDOUT: inst_block50000028: +// CHECK:STDOUT: 0: inst5000008B +// CHECK:STDOUT: 1: inst5000009C +// CHECK:STDOUT: inst_block50000029: +// CHECK:STDOUT: 0: inst500000A5 +// CHECK:STDOUT: 1: inst500000A7 +// CHECK:STDOUT: inst_block5000002A: +// CHECK:STDOUT: 0: inst50000078 +// CHECK:STDOUT: 1: inst5000008B +// CHECK:STDOUT: 2: inst5000008F +// CHECK:STDOUT: 3: inst5000009C +// CHECK:STDOUT: 4: inst500000A0 // CHECK:STDOUT: inst_block5000002B: -// CHECK:STDOUT: 0: inst50000090 -// CHECK:STDOUT: 1: inst5000006E -// CHECK:STDOUT: 2: inst50000091 -// CHECK:STDOUT: 3: inst50000092 -// CHECK:STDOUT: 4: inst50000081 -// CHECK:STDOUT: 5: inst50000093 -// CHECK:STDOUT: 6: inst50000094 -// CHECK:STDOUT: 7: inst5000008E +// CHECK:STDOUT: 0: inst500000A4 +// CHECK:STDOUT: 1: inst5000007B +// CHECK:STDOUT: 2: inst500000A5 +// CHECK:STDOUT: 3: inst500000A6 +// CHECK:STDOUT: 4: inst50000092 +// CHECK:STDOUT: 5: inst500000A7 +// CHECK:STDOUT: 6: inst500000A8 +// CHECK:STDOUT: 7: inst500000A3 // CHECK:STDOUT: inst_block5000002C: -// CHECK:STDOUT: 0: inst5000006E +// CHECK:STDOUT: 0: inst5000007B // CHECK:STDOUT: inst_block5000002D: -// CHECK:STDOUT: 0: inst50000070 -// CHECK:STDOUT: 1: inst50000075 -// CHECK:STDOUT: 2: inst5000007C -// CHECK:STDOUT: 3: inst5000007D -// CHECK:STDOUT: 4: inst50000080 -// CHECK:STDOUT: 5: inst5000008A -// CHECK:STDOUT: 6: inst5000008D +// CHECK:STDOUT: 0: inst5000007A +// CHECK:STDOUT: 1: inst5000007D +// CHECK:STDOUT: 2: inst50000081 +// CHECK:STDOUT: 3: inst50000088 +// CHECK:STDOUT: 4: inst50000089 +// CHECK:STDOUT: 5: inst5000008D +// CHECK:STDOUT: 6: inst5000008E +// CHECK:STDOUT: 7: inst50000091 +// CHECK:STDOUT: 8: inst5000009A +// CHECK:STDOUT: 9: inst5000009E +// CHECK:STDOUT: 10: inst5000009F +// CHECK:STDOUT: 11: inst500000A2 // CHECK:STDOUT: inst_block5000002E: -// CHECK:STDOUT: 0: inst5000006F -// CHECK:STDOUT: 1: inst50000074 -// CHECK:STDOUT: 2: inst50000079 -// CHECK:STDOUT: 3: inst5000007B -// CHECK:STDOUT: 4: inst5000007E -// CHECK:STDOUT: 5: inst50000089 -// CHECK:STDOUT: 6: inst5000008B +// CHECK:STDOUT: 0: inst50000079 +// CHECK:STDOUT: 1: inst5000007C +// CHECK:STDOUT: 2: inst50000080 +// CHECK:STDOUT: 3: inst50000085 +// CHECK:STDOUT: 4: inst50000087 +// CHECK:STDOUT: 5: inst5000008A +// CHECK:STDOUT: 6: inst5000008C +// CHECK:STDOUT: 7: inst50000090 +// CHECK:STDOUT: 8: inst50000099 +// CHECK:STDOUT: 9: inst5000009B +// CHECK:STDOUT: 10: inst5000009D +// CHECK:STDOUT: 11: inst500000A1 // CHECK:STDOUT: inst_block5000002F: -// CHECK:STDOUT: 0: inst5000009E +// CHECK:STDOUT: 0: inst500000B2 // CHECK:STDOUT: inst_block50000030: -// CHECK:STDOUT: 0: inst5000009A -// CHECK:STDOUT: 1: inst5000009D +// CHECK:STDOUT: 0: inst500000AE +// CHECK:STDOUT: 1: inst500000B1 // CHECK:STDOUT: inst_block50000031: // CHECK:STDOUT: 0: instF // CHECK:STDOUT: 1: inst50000010 // CHECK:STDOUT: 2: inst50000012 -// CHECK:STDOUT: 3: inst50000060 -// CHECK:STDOUT: 4: inst50000095 +// CHECK:STDOUT: 3: inst5000006A +// CHECK:STDOUT: 4: inst500000A9 // CHECK:STDOUT: value_stores: // CHECK:STDOUT: shared_values: // CHECK:STDOUT: ints: {} diff --git a/toolchain/check/testdata/basics/raw_sem_ir/one_file.carbon b/toolchain/check/testdata/basics/raw_sem_ir/one_file.carbon index b52cc6095cf7..cb6d42b2b870 100644 --- a/toolchain/check/testdata/basics/raw_sem_ir/one_file.carbon +++ b/toolchain/check/testdata/basics/raw_sem_ir/one_file.carbon @@ -42,236 +42,304 @@ fn Foo[T:! type](p: T*) -> (T*, ()) { // CHECK:STDOUT: import_ir_inst0: {ir_id: import_ir78000004, inst_id: inst70000010} // CHECK:STDOUT: import_ir_inst1: {ir_id: import_ir78000004, inst_id: inst70000010} // CHECK:STDOUT: import_ir_inst2: {ir_id: import_ir78000004, inst_id: inst70000015} -// CHECK:STDOUT: import_ir_inst3: {ir_id: import_ir78000004, inst_id: inst70000035} -// CHECK:STDOUT: import_ir_inst4: {ir_id: import_ir78000004, inst_id: inst7000002D} +// CHECK:STDOUT: import_ir_inst3: {ir_id: import_ir78000004, inst_id: inst7000003D} +// CHECK:STDOUT: import_ir_inst4: {ir_id: import_ir78000004, inst_id: inst70000035} // CHECK:STDOUT: import_ir_inst5: {ir_id: import_ir78000004, inst_id: inst70000012} -// CHECK:STDOUT: import_ir_inst6: {ir_id: import_ir78000004, inst_id: inst7000002D} -// CHECK:STDOUT: import_ir_inst7: {ir_id: import_ir78000004, inst_id: inst70000027} -// CHECK:STDOUT: import_ir_inst8: {ir_id: import_ir78000004, inst_id: inst70000028} -// CHECK:STDOUT: import_ir_inst9: {ir_id: import_ir78000004, inst_id: inst7000001D} -// CHECK:STDOUT: import_ir_instA: {ir_id: import_ir78000004, inst_id: inst70000020} -// CHECK:STDOUT: import_ir_instB: {ir_id: import_ir78000004, inst_id: inst70000023} -// CHECK:STDOUT: import_ir_instC: {ir_id: import_ir78000004, inst_id: inst70000024} -// CHECK:STDOUT: import_ir_instD: {ir_id: import_ir78000004, inst_id: inst70000012} -// CHECK:STDOUT: import_ir_instE: {ir_id: import_ir78000004, inst_id: inst70000017} -// CHECK:STDOUT: import_ir_instF: {ir_id: import_ir78000004, inst_id: inst7000001A} -// CHECK:STDOUT: import_ir_inst10: {ir_id: import_ir78000004, inst_id: inst7000001E} -// CHECK:STDOUT: import_ir_inst11: {ir_id: import_ir78000004, inst_id: inst70000026} -// CHECK:STDOUT: import_ir_inst12: {ir_id: import_ir78000004, inst_id: inst70000031} -// CHECK:STDOUT: import_ir_inst13: {ir_id: import_ir78000004, inst_id: inst70000032} -// CHECK:STDOUT: import_ir_inst14: {ir_id: import_ir78000004, inst_id: inst70000033} -// CHECK:STDOUT: import_ir_inst15: {ir_id: import_ir78000004, inst_id: inst70000012} -// CHECK:STDOUT: import_ir_inst16: {ir_id: import_ir78000004, inst_id: inst7000002D} -// CHECK:STDOUT: import_ir_inst17: {ir_id: import_ir78000004, inst_id: inst70000086} -// CHECK:STDOUT: import_ir_inst18: {ir_id: import_ir78000004, inst_id: inst70000084} -// CHECK:STDOUT: import_ir_inst19: {ir_id: import_ir78000004, inst_id: inst7000009D} -// CHECK:STDOUT: import_ir_inst1A: {ir_id: import_ir78000004, inst_id: inst70000085} -// CHECK:STDOUT: import_ir_inst1B: {ir_id: import_ir78000004, inst_id: inst7000009D} -// CHECK:STDOUT: import_ir_inst1C: {ir_id: import_ir78000004, inst_id: inst70000098} -// CHECK:STDOUT: import_ir_inst1D: {ir_id: import_ir78000004, inst_id: inst70000099} -// CHECK:STDOUT: import_ir_inst1E: {ir_id: import_ir78000004, inst_id: inst70000090} -// CHECK:STDOUT: import_ir_inst1F: {ir_id: import_ir78000004, inst_id: inst70000093} -// CHECK:STDOUT: import_ir_inst20: {ir_id: import_ir78000004, inst_id: inst70000094} -// CHECK:STDOUT: import_ir_inst21: {ir_id: import_ir78000004, inst_id: inst70000095} -// CHECK:STDOUT: import_ir_inst22: {ir_id: import_ir78000004, inst_id: inst70000076} -// CHECK:STDOUT: import_ir_inst23: {ir_id: import_ir78000004, inst_id: inst7000008C} -// CHECK:STDOUT: import_ir_inst24: {ir_id: import_ir78000004, inst_id: inst7000008D} -// CHECK:STDOUT: import_ir_inst25: {ir_id: import_ir78000004, inst_id: inst7000008E} -// CHECK:STDOUT: import_ir_inst26: {ir_id: import_ir78000004, inst_id: inst70000091} -// CHECK:STDOUT: import_ir_inst27: {ir_id: import_ir78000004, inst_id: inst70000097} -// CHECK:STDOUT: import_ir_inst28: {ir_id: import_ir78000004, inst_id: inst700000A7} -// CHECK:STDOUT: import_ir_inst29: {ir_id: import_ir78000004, inst_id: inst700000AE} -// CHECK:STDOUT: import_ir_inst2A: {ir_id: import_ir78000004, inst_id: inst700000BA} -// CHECK:STDOUT: import_ir_inst2B: {ir_id: import_ir78000004, inst_id: inst700000BB} -// CHECK:STDOUT: import_ir_inst2C: {ir_id: import_ir78000004, inst_id: inst700000BC} -// CHECK:STDOUT: import_ir_inst2D: {ir_id: import_ir78000004, inst_id: inst700000BD} -// CHECK:STDOUT: import_ir_inst2E: {ir_id: import_ir78000004, inst_id: inst700000C4} -// CHECK:STDOUT: import_ir_inst2F: {ir_id: import_ir78000004, inst_id: inst70000079} -// CHECK:STDOUT: import_ir_inst30: {ir_id: import_ir78000004, inst_id: inst7000007F} -// CHECK:STDOUT: import_ir_inst31: {ir_id: import_ir78000004, inst_id: inst70000082} -// CHECK:STDOUT: import_ir_inst32: {ir_id: import_ir78000004, inst_id: inst70000076} -// CHECK:STDOUT: import_ir_inst33: {ir_id: import_ir78000004, inst_id: inst70000078} -// CHECK:STDOUT: import_ir_inst34: {ir_id: import_ir78000004, inst_id: inst7000007D} -// CHECK:STDOUT: import_ir_inst35: {ir_id: import_ir78000004, inst_id: inst70000081} -// CHECK:STDOUT: import_ir_inst36: {ir_id: import_ir78000004, inst_id: inst70000088} -// CHECK:STDOUT: import_ir_inst37: {ir_id: import_ir78000004, inst_id: inst700000A0} -// CHECK:STDOUT: import_ir_inst38: {ir_id: import_ir78000004, inst_id: inst700000A1} -// CHECK:STDOUT: import_ir_inst39: {ir_id: import_ir78000004, inst_id: inst700000D4} -// CHECK:STDOUT: import_ir_inst3A: {ir_id: import_ir78000004, inst_id: inst700000D2} -// CHECK:STDOUT: import_ir_inst3B: {ir_id: import_ir78000004, inst_id: inst700000D0} -// CHECK:STDOUT: import_ir_inst3C: {ir_id: import_ir78000004, inst_id: inst700000D1} -// CHECK:STDOUT: import_ir_inst3D: {ir_id: import_ir78000004, inst_id: inst700000ED} -// CHECK:STDOUT: import_ir_inst3E: {ir_id: import_ir78000004, inst_id: inst700000EB} -// CHECK:STDOUT: import_ir_inst3F: {ir_id: import_ir78000004, inst_id: inst700000E9} -// CHECK:STDOUT: import_ir_inst40: {ir_id: import_ir78000004, inst_id: inst700000EA} -// CHECK:STDOUT: import_ir_inst41: {ir_id: import_ir78000004, inst_id: inst70000106} -// CHECK:STDOUT: import_ir_inst42: {ir_id: import_ir78000004, inst_id: inst70000104} -// CHECK:STDOUT: import_ir_inst43: {ir_id: import_ir78000004, inst_id: inst70000102} -// CHECK:STDOUT: import_ir_inst44: {ir_id: import_ir78000004, inst_id: inst70000103} -// CHECK:STDOUT: import_ir_inst45: {ir_id: import_ir78000004, inst_id: inst7000011F} -// CHECK:STDOUT: import_ir_inst46: {ir_id: import_ir78000004, inst_id: inst7000011D} -// CHECK:STDOUT: import_ir_inst47: {ir_id: import_ir78000004, inst_id: inst7000011B} -// CHECK:STDOUT: import_ir_inst48: {ir_id: import_ir78000004, inst_id: inst7000011C} -// CHECK:STDOUT: import_ir_inst49: {ir_id: import_ir78000004, inst_id: inst70000142} -// CHECK:STDOUT: import_ir_inst4A: {ir_id: import_ir78000004, inst_id: inst70000140} -// CHECK:STDOUT: import_ir_inst4B: {ir_id: import_ir78000004, inst_id: inst70000156} -// CHECK:STDOUT: import_ir_inst4C: {ir_id: import_ir78000004, inst_id: inst70000141} -// CHECK:STDOUT: import_ir_inst4D: {ir_id: import_ir78000004, inst_id: inst70000139} -// CHECK:STDOUT: import_ir_inst4E: {ir_id: import_ir78000004, inst_id: inst7000013B} -// CHECK:STDOUT: import_ir_inst4F: {ir_id: import_ir78000004, inst_id: inst7000013E} -// CHECK:STDOUT: import_ir_inst50: {ir_id: import_ir78000004, inst_id: inst70000136} -// CHECK:STDOUT: import_ir_inst51: {ir_id: import_ir78000004, inst_id: inst70000138} -// CHECK:STDOUT: import_ir_inst52: {ir_id: import_ir78000004, inst_id: inst7000013D} -// CHECK:STDOUT: import_ir_inst53: {ir_id: import_ir78000004, inst_id: inst70000144} -// CHECK:STDOUT: import_ir_inst54: {ir_id: import_ir78000004, inst_id: inst70000156} -// CHECK:STDOUT: import_ir_inst55: {ir_id: import_ir78000004, inst_id: inst70000151} -// CHECK:STDOUT: import_ir_inst56: {ir_id: import_ir78000004, inst_id: inst70000152} -// CHECK:STDOUT: import_ir_inst57: {ir_id: import_ir78000004, inst_id: inst70000149} -// CHECK:STDOUT: import_ir_inst58: {ir_id: import_ir78000004, inst_id: inst7000014C} -// CHECK:STDOUT: import_ir_inst59: {ir_id: import_ir78000004, inst_id: inst7000014D} -// CHECK:STDOUT: import_ir_inst5A: {ir_id: import_ir78000004, inst_id: inst7000014E} -// CHECK:STDOUT: import_ir_inst5B: {ir_id: import_ir78000004, inst_id: inst70000136} -// CHECK:STDOUT: import_ir_inst5C: {ir_id: import_ir78000004, inst_id: inst70000146} -// CHECK:STDOUT: import_ir_inst5D: {ir_id: import_ir78000004, inst_id: inst70000147} -// CHECK:STDOUT: import_ir_inst5E: {ir_id: import_ir78000004, inst_id: inst7000014A} -// CHECK:STDOUT: import_ir_inst5F: {ir_id: import_ir78000004, inst_id: inst70000150} -// CHECK:STDOUT: import_ir_inst60: {ir_id: import_ir78000004, inst_id: inst70000159} -// CHECK:STDOUT: import_ir_inst61: {ir_id: import_ir78000004, inst_id: inst7000015A} -// CHECK:STDOUT: import_ir_inst62: {ir_id: import_ir78000004, inst_id: inst7000015D} -// CHECK:STDOUT: import_ir_inst63: {ir_id: import_ir78000004, inst_id: inst70000165} -// CHECK:STDOUT: import_ir_inst64: {ir_id: import_ir78000004, inst_id: inst70000163} -// CHECK:STDOUT: import_ir_inst65: {ir_id: import_ir78000004, inst_id: inst70000161} -// CHECK:STDOUT: import_ir_inst66: {ir_id: import_ir78000004, inst_id: inst70000162} -// CHECK:STDOUT: import_ir_inst67: {ir_id: import_ir78000004, inst_id: inst7000017E} -// CHECK:STDOUT: import_ir_inst68: {ir_id: import_ir78000004, inst_id: inst7000017C} -// CHECK:STDOUT: import_ir_inst69: {ir_id: import_ir78000004, inst_id: inst7000017A} -// CHECK:STDOUT: import_ir_inst6A: {ir_id: import_ir78000004, inst_id: inst7000017B} -// CHECK:STDOUT: import_ir_inst6B: {ir_id: import_ir78000004, inst_id: inst700001B4} -// CHECK:STDOUT: import_ir_inst6C: {ir_id: import_ir78000004, inst_id: inst700001B2} -// CHECK:STDOUT: import_ir_inst6D: {ir_id: import_ir78000004, inst_id: inst700001CF} -// CHECK:STDOUT: import_ir_inst6E: {ir_id: import_ir78000004, inst_id: inst700001B3} -// CHECK:STDOUT: import_ir_inst6F: {ir_id: import_ir78000004, inst_id: inst700001CF} -// CHECK:STDOUT: import_ir_inst70: {ir_id: import_ir78000004, inst_id: inst700001CA} -// CHECK:STDOUT: import_ir_inst71: {ir_id: import_ir78000004, inst_id: inst700001CB} -// CHECK:STDOUT: import_ir_inst72: {ir_id: import_ir78000004, inst_id: inst700001C2} -// CHECK:STDOUT: import_ir_inst73: {ir_id: import_ir78000004, inst_id: inst700001C5} -// CHECK:STDOUT: import_ir_inst74: {ir_id: import_ir78000004, inst_id: inst700001C6} -// CHECK:STDOUT: import_ir_inst75: {ir_id: import_ir78000004, inst_id: inst700001C7} -// CHECK:STDOUT: import_ir_inst76: {ir_id: import_ir78000004, inst_id: inst70000195} -// CHECK:STDOUT: import_ir_inst77: {ir_id: import_ir78000004, inst_id: inst7000019A} -// CHECK:STDOUT: import_ir_inst78: {ir_id: import_ir78000004, inst_id: inst700001BC} -// CHECK:STDOUT: import_ir_inst79: {ir_id: import_ir78000004, inst_id: inst700001BD} -// CHECK:STDOUT: import_ir_inst7A: {ir_id: import_ir78000004, inst_id: inst700001BE} -// CHECK:STDOUT: import_ir_inst7B: {ir_id: import_ir78000004, inst_id: inst700001BF} -// CHECK:STDOUT: import_ir_inst7C: {ir_id: import_ir78000004, inst_id: inst700001C0} -// CHECK:STDOUT: import_ir_inst7D: {ir_id: import_ir78000004, inst_id: inst700001C3} -// CHECK:STDOUT: import_ir_inst7E: {ir_id: import_ir78000004, inst_id: inst700001C9} -// CHECK:STDOUT: import_ir_inst7F: {ir_id: import_ir78000004, inst_id: inst700001DA} -// CHECK:STDOUT: import_ir_inst80: {ir_id: import_ir78000004, inst_id: inst700001E0} -// CHECK:STDOUT: import_ir_inst81: {ir_id: import_ir78000004, inst_id: inst700001E4} -// CHECK:STDOUT: import_ir_inst82: {ir_id: import_ir78000004, inst_id: inst700001E5} -// CHECK:STDOUT: import_ir_inst83: {ir_id: import_ir78000004, inst_id: inst700001E6} -// CHECK:STDOUT: import_ir_inst84: {ir_id: import_ir78000004, inst_id: inst700001E7} -// CHECK:STDOUT: import_ir_inst85: {ir_id: import_ir78000004, inst_id: inst700001EB} -// CHECK:STDOUT: import_ir_inst86: {ir_id: import_ir78000004, inst_id: inst700001F5} -// CHECK:STDOUT: import_ir_inst87: {ir_id: import_ir78000004, inst_id: inst700001FE} -// CHECK:STDOUT: import_ir_inst88: {ir_id: import_ir78000004, inst_id: inst700001FF} -// CHECK:STDOUT: import_ir_inst89: {ir_id: import_ir78000004, inst_id: inst70000200} -// CHECK:STDOUT: import_ir_inst8A: {ir_id: import_ir78000004, inst_id: inst70000201} -// CHECK:STDOUT: import_ir_inst8B: {ir_id: import_ir78000004, inst_id: inst70000208} -// CHECK:STDOUT: import_ir_inst8C: {ir_id: import_ir78000004, inst_id: inst7000019D} -// CHECK:STDOUT: import_ir_inst8D: {ir_id: import_ir78000004, inst_id: inst70000197} -// CHECK:STDOUT: import_ir_inst8E: {ir_id: import_ir78000004, inst_id: inst700001AD} -// CHECK:STDOUT: import_ir_inst8F: {ir_id: import_ir78000004, inst_id: inst700001AF} -// CHECK:STDOUT: import_ir_inst90: {ir_id: import_ir78000004, inst_id: inst70000195} -// CHECK:STDOUT: import_ir_inst91: {ir_id: import_ir78000004, inst_id: inst7000019A} -// CHECK:STDOUT: import_ir_inst92: {ir_id: import_ir78000004, inst_id: inst70000196} -// CHECK:STDOUT: import_ir_inst93: {ir_id: import_ir78000004, inst_id: inst7000019C} -// CHECK:STDOUT: import_ir_inst94: {ir_id: import_ir78000004, inst_id: inst700001A3} -// CHECK:STDOUT: import_ir_inst95: {ir_id: import_ir78000004, inst_id: inst700001A6} -// CHECK:STDOUT: import_ir_inst96: {ir_id: import_ir78000004, inst_id: inst700001AA} -// CHECK:STDOUT: import_ir_inst97: {ir_id: import_ir78000004, inst_id: inst700001AE} -// CHECK:STDOUT: import_ir_inst98: {ir_id: import_ir78000004, inst_id: inst700001B6} -// CHECK:STDOUT: import_ir_inst99: {ir_id: import_ir78000004, inst_id: inst700001D2} -// CHECK:STDOUT: import_ir_inst9A: {ir_id: import_ir78000004, inst_id: inst700001D3} -// CHECK:STDOUT: import_ir_inst9B: {ir_id: import_ir78000004, inst_id: inst70000242} -// CHECK:STDOUT: import_ir_inst9C: {ir_id: import_ir78000004, inst_id: inst70000240} -// CHECK:STDOUT: import_ir_inst9D: {ir_id: import_ir78000004, inst_id: inst70000261} -// CHECK:STDOUT: import_ir_inst9E: {ir_id: import_ir78000004, inst_id: inst70000241} -// CHECK:STDOUT: import_ir_inst9F: {ir_id: import_ir78000004, inst_id: inst70000261} -// CHECK:STDOUT: import_ir_instA0: {ir_id: import_ir78000004, inst_id: inst7000025C} -// CHECK:STDOUT: import_ir_instA1: {ir_id: import_ir78000004, inst_id: inst7000025D} -// CHECK:STDOUT: import_ir_instA2: {ir_id: import_ir78000004, inst_id: inst70000254} -// CHECK:STDOUT: import_ir_instA3: {ir_id: import_ir78000004, inst_id: inst70000257} -// CHECK:STDOUT: import_ir_instA4: {ir_id: import_ir78000004, inst_id: inst70000258} -// CHECK:STDOUT: import_ir_instA5: {ir_id: import_ir78000004, inst_id: inst70000259} -// CHECK:STDOUT: import_ir_instA6: {ir_id: import_ir78000004, inst_id: inst70000219} -// CHECK:STDOUT: import_ir_instA7: {ir_id: import_ir78000004, inst_id: inst7000021E} -// CHECK:STDOUT: import_ir_instA8: {ir_id: import_ir78000004, inst_id: inst70000223} -// CHECK:STDOUT: import_ir_instA9: {ir_id: import_ir78000004, inst_id: inst7000024C} -// CHECK:STDOUT: import_ir_instAA: {ir_id: import_ir78000004, inst_id: inst7000024D} -// CHECK:STDOUT: import_ir_instAB: {ir_id: import_ir78000004, inst_id: inst7000024E} -// CHECK:STDOUT: import_ir_instAC: {ir_id: import_ir78000004, inst_id: inst7000024F} -// CHECK:STDOUT: import_ir_instAD: {ir_id: import_ir78000004, inst_id: inst70000250} -// CHECK:STDOUT: import_ir_instAE: {ir_id: import_ir78000004, inst_id: inst70000251} -// CHECK:STDOUT: import_ir_instAF: {ir_id: import_ir78000004, inst_id: inst70000252} -// CHECK:STDOUT: import_ir_instB0: {ir_id: import_ir78000004, inst_id: inst70000255} -// CHECK:STDOUT: import_ir_instB1: {ir_id: import_ir78000004, inst_id: inst7000025B} -// CHECK:STDOUT: import_ir_instB2: {ir_id: import_ir78000004, inst_id: inst7000026C} -// CHECK:STDOUT: import_ir_instB3: {ir_id: import_ir78000004, inst_id: inst70000271} -// CHECK:STDOUT: import_ir_instB4: {ir_id: import_ir78000004, inst_id: inst70000275} -// CHECK:STDOUT: import_ir_instB5: {ir_id: import_ir78000004, inst_id: inst70000276} -// CHECK:STDOUT: import_ir_instB6: {ir_id: import_ir78000004, inst_id: inst70000277} -// CHECK:STDOUT: import_ir_instB7: {ir_id: import_ir78000004, inst_id: inst70000278} -// CHECK:STDOUT: import_ir_instB8: {ir_id: import_ir78000004, inst_id: inst7000027C} -// CHECK:STDOUT: import_ir_instB9: {ir_id: import_ir78000004, inst_id: inst70000284} -// CHECK:STDOUT: import_ir_instBA: {ir_id: import_ir78000004, inst_id: inst70000288} -// CHECK:STDOUT: import_ir_instBB: {ir_id: import_ir78000004, inst_id: inst70000289} -// CHECK:STDOUT: import_ir_instBC: {ir_id: import_ir78000004, inst_id: inst7000028A} -// CHECK:STDOUT: import_ir_instBD: {ir_id: import_ir78000004, inst_id: inst7000028B} -// CHECK:STDOUT: import_ir_instBE: {ir_id: import_ir78000004, inst_id: inst7000028F} -// CHECK:STDOUT: import_ir_instBF: {ir_id: import_ir78000004, inst_id: inst70000299} -// CHECK:STDOUT: import_ir_instC0: {ir_id: import_ir78000004, inst_id: inst700002A2} -// CHECK:STDOUT: import_ir_instC1: {ir_id: import_ir78000004, inst_id: inst700002A3} -// CHECK:STDOUT: import_ir_instC2: {ir_id: import_ir78000004, inst_id: inst700002A4} -// CHECK:STDOUT: import_ir_instC3: {ir_id: import_ir78000004, inst_id: inst700002A5} -// CHECK:STDOUT: import_ir_instC4: {ir_id: import_ir78000004, inst_id: inst700002AC} -// CHECK:STDOUT: import_ir_instC5: {ir_id: import_ir78000004, inst_id: inst70000226} -// CHECK:STDOUT: import_ir_instC6: {ir_id: import_ir78000004, inst_id: inst70000220} -// CHECK:STDOUT: import_ir_instC7: {ir_id: import_ir78000004, inst_id: inst7000021B} -// CHECK:STDOUT: import_ir_instC8: {ir_id: import_ir78000004, inst_id: inst7000023A} -// CHECK:STDOUT: import_ir_instC9: {ir_id: import_ir78000004, inst_id: inst7000023C} -// CHECK:STDOUT: import_ir_instCA: {ir_id: import_ir78000004, inst_id: inst70000219} -// CHECK:STDOUT: import_ir_instCB: {ir_id: import_ir78000004, inst_id: inst7000021E} -// CHECK:STDOUT: import_ir_instCC: {ir_id: import_ir78000004, inst_id: inst70000223} -// CHECK:STDOUT: import_ir_instCD: {ir_id: import_ir78000004, inst_id: inst7000021A} -// CHECK:STDOUT: import_ir_instCE: {ir_id: import_ir78000004, inst_id: inst7000021F} -// CHECK:STDOUT: import_ir_instCF: {ir_id: import_ir78000004, inst_id: inst70000225} -// CHECK:STDOUT: import_ir_instD0: {ir_id: import_ir78000004, inst_id: inst7000022D} -// CHECK:STDOUT: import_ir_instD1: {ir_id: import_ir78000004, inst_id: inst70000230} -// CHECK:STDOUT: import_ir_instD2: {ir_id: import_ir78000004, inst_id: inst70000233} -// CHECK:STDOUT: import_ir_instD3: {ir_id: import_ir78000004, inst_id: inst70000237} -// CHECK:STDOUT: import_ir_instD4: {ir_id: import_ir78000004, inst_id: inst7000023B} -// CHECK:STDOUT: import_ir_instD5: {ir_id: import_ir78000004, inst_id: inst70000244} -// CHECK:STDOUT: import_ir_instD6: {ir_id: import_ir78000004, inst_id: inst70000264} -// CHECK:STDOUT: import_ir_instD7: {ir_id: import_ir78000004, inst_id: inst70000265} +// CHECK:STDOUT: import_ir_inst6: {ir_id: import_ir78000004, inst_id: inst70000035} +// CHECK:STDOUT: import_ir_inst7: {ir_id: import_ir78000004, inst_id: inst7000002C} +// CHECK:STDOUT: import_ir_inst8: {ir_id: import_ir78000004, inst_id: inst7000001E} +// CHECK:STDOUT: import_ir_inst9: {ir_id: import_ir78000004, inst_id: inst7000002C} +// CHECK:STDOUT: import_ir_instA: {ir_id: import_ir78000004, inst_id: inst7000001E} +// CHECK:STDOUT: import_ir_instB: {ir_id: import_ir78000004, inst_id: inst7000001D} +// CHECK:STDOUT: import_ir_instC: {ir_id: import_ir78000004, inst_id: inst7000002B} +// CHECK:STDOUT: import_ir_instD: {ir_id: import_ir78000004, inst_id: inst70000021} +// CHECK:STDOUT: import_ir_instE: {ir_id: import_ir78000004, inst_id: inst70000021} +// CHECK:STDOUT: import_ir_instF: {ir_id: import_ir78000004, inst_id: inst70000027} +// CHECK:STDOUT: import_ir_inst10: {ir_id: import_ir78000004, inst_id: inst70000028} +// CHECK:STDOUT: import_ir_inst11: {ir_id: import_ir78000004, inst_id: inst7000002E} +// CHECK:STDOUT: import_ir_inst12: {ir_id: import_ir78000004, inst_id: inst70000012} +// CHECK:STDOUT: import_ir_inst13: {ir_id: import_ir78000004, inst_id: inst70000017} +// CHECK:STDOUT: import_ir_inst14: {ir_id: import_ir78000004, inst_id: inst7000001A} +// CHECK:STDOUT: import_ir_inst15: {ir_id: import_ir78000004, inst_id: inst7000001F} +// CHECK:STDOUT: import_ir_inst16: {ir_id: import_ir78000004, inst_id: inst70000020} +// CHECK:STDOUT: import_ir_inst17: {ir_id: import_ir78000004, inst_id: inst70000023} +// CHECK:STDOUT: import_ir_inst18: {ir_id: import_ir78000004, inst_id: inst7000002A} +// CHECK:STDOUT: import_ir_inst19: {ir_id: import_ir78000004, inst_id: inst7000002D} +// CHECK:STDOUT: import_ir_inst1A: {ir_id: import_ir78000004, inst_id: inst70000030} +// CHECK:STDOUT: import_ir_inst1B: {ir_id: import_ir78000004, inst_id: inst7000002C} +// CHECK:STDOUT: import_ir_inst1C: {ir_id: import_ir78000004, inst_id: inst7000001E} +// CHECK:STDOUT: import_ir_inst1D: {ir_id: import_ir78000004, inst_id: inst70000039} +// CHECK:STDOUT: import_ir_inst1E: {ir_id: import_ir78000004, inst_id: inst7000003A} +// CHECK:STDOUT: import_ir_inst1F: {ir_id: import_ir78000004, inst_id: inst7000003B} +// CHECK:STDOUT: import_ir_inst20: {ir_id: import_ir78000004, inst_id: inst70000012} +// CHECK:STDOUT: import_ir_inst21: {ir_id: import_ir78000004, inst_id: inst70000035} +// CHECK:STDOUT: import_ir_inst22: {ir_id: import_ir78000004, inst_id: inst70000092} +// CHECK:STDOUT: import_ir_inst23: {ir_id: import_ir78000004, inst_id: inst70000090} +// CHECK:STDOUT: import_ir_inst24: {ir_id: import_ir78000004, inst_id: inst700000B1} +// CHECK:STDOUT: import_ir_inst25: {ir_id: import_ir78000004, inst_id: inst70000091} +// CHECK:STDOUT: import_ir_inst26: {ir_id: import_ir78000004, inst_id: inst700000B1} +// CHECK:STDOUT: import_ir_inst27: {ir_id: import_ir78000004, inst_id: inst700000A9} +// CHECK:STDOUT: import_ir_inst28: {ir_id: import_ir78000004, inst_id: inst7000009D} +// CHECK:STDOUT: import_ir_inst29: {ir_id: import_ir78000004, inst_id: inst700000A9} +// CHECK:STDOUT: import_ir_inst2A: {ir_id: import_ir78000004, inst_id: inst7000009D} +// CHECK:STDOUT: import_ir_inst2B: {ir_id: import_ir78000004, inst_id: inst7000009C} +// CHECK:STDOUT: import_ir_inst2C: {ir_id: import_ir78000004, inst_id: inst700000A8} +// CHECK:STDOUT: import_ir_inst2D: {ir_id: import_ir78000004, inst_id: inst700000A0} +// CHECK:STDOUT: import_ir_inst2E: {ir_id: import_ir78000004, inst_id: inst700000A0} +// CHECK:STDOUT: import_ir_inst2F: {ir_id: import_ir78000004, inst_id: inst700000A4} +// CHECK:STDOUT: import_ir_inst30: {ir_id: import_ir78000004, inst_id: inst700000A5} +// CHECK:STDOUT: import_ir_inst31: {ir_id: import_ir78000004, inst_id: inst700000AB} +// CHECK:STDOUT: import_ir_inst32: {ir_id: import_ir78000004, inst_id: inst70000083} +// CHECK:STDOUT: import_ir_inst33: {ir_id: import_ir78000004, inst_id: inst70000098} +// CHECK:STDOUT: import_ir_inst34: {ir_id: import_ir78000004, inst_id: inst70000099} +// CHECK:STDOUT: import_ir_inst35: {ir_id: import_ir78000004, inst_id: inst7000009A} +// CHECK:STDOUT: import_ir_inst36: {ir_id: import_ir78000004, inst_id: inst7000009E} +// CHECK:STDOUT: import_ir_inst37: {ir_id: import_ir78000004, inst_id: inst7000009F} +// CHECK:STDOUT: import_ir_inst38: {ir_id: import_ir78000004, inst_id: inst700000A2} +// CHECK:STDOUT: import_ir_inst39: {ir_id: import_ir78000004, inst_id: inst700000A7} +// CHECK:STDOUT: import_ir_inst3A: {ir_id: import_ir78000004, inst_id: inst700000AA} +// CHECK:STDOUT: import_ir_inst3B: {ir_id: import_ir78000004, inst_id: inst700000AD} +// CHECK:STDOUT: import_ir_inst3C: {ir_id: import_ir78000004, inst_id: inst700000D9} +// CHECK:STDOUT: import_ir_inst3D: {ir_id: import_ir78000004, inst_id: inst700000D6} +// CHECK:STDOUT: import_ir_inst3E: {ir_id: import_ir78000004, inst_id: inst700000BB} +// CHECK:STDOUT: import_ir_inst3F: {ir_id: import_ir78000004, inst_id: inst700000C2} +// CHECK:STDOUT: import_ir_inst40: {ir_id: import_ir78000004, inst_id: inst700000CE} +// CHECK:STDOUT: import_ir_inst41: {ir_id: import_ir78000004, inst_id: inst700000CF} +// CHECK:STDOUT: import_ir_inst42: {ir_id: import_ir78000004, inst_id: inst700000D0} +// CHECK:STDOUT: import_ir_inst43: {ir_id: import_ir78000004, inst_id: inst700000D1} +// CHECK:STDOUT: import_ir_inst44: {ir_id: import_ir78000004, inst_id: inst700000DD} +// CHECK:STDOUT: import_ir_inst45: {ir_id: import_ir78000004, inst_id: inst700000A9} +// CHECK:STDOUT: import_ir_inst46: {ir_id: import_ir78000004, inst_id: inst7000009D} +// CHECK:STDOUT: import_ir_inst47: {ir_id: import_ir78000004, inst_id: inst70000080} +// CHECK:STDOUT: import_ir_inst48: {ir_id: import_ir78000004, inst_id: inst7000008B} +// CHECK:STDOUT: import_ir_inst49: {ir_id: import_ir78000004, inst_id: inst7000008E} +// CHECK:STDOUT: import_ir_inst4A: {ir_id: import_ir78000004, inst_id: inst70000083} +// CHECK:STDOUT: import_ir_inst4B: {ir_id: import_ir78000004, inst_id: inst70000082} +// CHECK:STDOUT: import_ir_inst4C: {ir_id: import_ir78000004, inst_id: inst70000085} +// CHECK:STDOUT: import_ir_inst4D: {ir_id: import_ir78000004, inst_id: inst70000089} +// CHECK:STDOUT: import_ir_inst4E: {ir_id: import_ir78000004, inst_id: inst7000008D} +// CHECK:STDOUT: import_ir_inst4F: {ir_id: import_ir78000004, inst_id: inst70000094} +// CHECK:STDOUT: import_ir_inst50: {ir_id: import_ir78000004, inst_id: inst700000B4} +// CHECK:STDOUT: import_ir_inst51: {ir_id: import_ir78000004, inst_id: inst700000B5} +// CHECK:STDOUT: import_ir_inst52: {ir_id: import_ir78000004, inst_id: inst700000ED} +// CHECK:STDOUT: import_ir_inst53: {ir_id: import_ir78000004, inst_id: inst700000EB} +// CHECK:STDOUT: import_ir_inst54: {ir_id: import_ir78000004, inst_id: inst700000E9} +// CHECK:STDOUT: import_ir_inst55: {ir_id: import_ir78000004, inst_id: inst700000EA} +// CHECK:STDOUT: import_ir_inst56: {ir_id: import_ir78000004, inst_id: inst7000010A} +// CHECK:STDOUT: import_ir_inst57: {ir_id: import_ir78000004, inst_id: inst70000108} +// CHECK:STDOUT: import_ir_inst58: {ir_id: import_ir78000004, inst_id: inst70000106} +// CHECK:STDOUT: import_ir_inst59: {ir_id: import_ir78000004, inst_id: inst70000107} +// CHECK:STDOUT: import_ir_inst5A: {ir_id: import_ir78000004, inst_id: inst70000127} +// CHECK:STDOUT: import_ir_inst5B: {ir_id: import_ir78000004, inst_id: inst70000125} +// CHECK:STDOUT: import_ir_inst5C: {ir_id: import_ir78000004, inst_id: inst70000123} +// CHECK:STDOUT: import_ir_inst5D: {ir_id: import_ir78000004, inst_id: inst70000124} +// CHECK:STDOUT: import_ir_inst5E: {ir_id: import_ir78000004, inst_id: inst70000144} +// CHECK:STDOUT: import_ir_inst5F: {ir_id: import_ir78000004, inst_id: inst70000142} +// CHECK:STDOUT: import_ir_inst60: {ir_id: import_ir78000004, inst_id: inst70000140} +// CHECK:STDOUT: import_ir_inst61: {ir_id: import_ir78000004, inst_id: inst70000141} +// CHECK:STDOUT: import_ir_inst62: {ir_id: import_ir78000004, inst_id: inst7000016D} +// CHECK:STDOUT: import_ir_inst63: {ir_id: import_ir78000004, inst_id: inst7000016B} +// CHECK:STDOUT: import_ir_inst64: {ir_id: import_ir78000004, inst_id: inst70000189} +// CHECK:STDOUT: import_ir_inst65: {ir_id: import_ir78000004, inst_id: inst7000016C} +// CHECK:STDOUT: import_ir_inst66: {ir_id: import_ir78000004, inst_id: inst7000015F} +// CHECK:STDOUT: import_ir_inst67: {ir_id: import_ir78000004, inst_id: inst70000166} +// CHECK:STDOUT: import_ir_inst68: {ir_id: import_ir78000004, inst_id: inst70000169} +// CHECK:STDOUT: import_ir_inst69: {ir_id: import_ir78000004, inst_id: inst70000162} +// CHECK:STDOUT: import_ir_inst6A: {ir_id: import_ir78000004, inst_id: inst70000161} +// CHECK:STDOUT: import_ir_inst6B: {ir_id: import_ir78000004, inst_id: inst70000164} +// CHECK:STDOUT: import_ir_inst6C: {ir_id: import_ir78000004, inst_id: inst70000168} +// CHECK:STDOUT: import_ir_inst6D: {ir_id: import_ir78000004, inst_id: inst7000016F} +// CHECK:STDOUT: import_ir_inst6E: {ir_id: import_ir78000004, inst_id: inst70000189} +// CHECK:STDOUT: import_ir_inst6F: {ir_id: import_ir78000004, inst_id: inst70000181} +// CHECK:STDOUT: import_ir_inst70: {ir_id: import_ir78000004, inst_id: inst70000175} +// CHECK:STDOUT: import_ir_inst71: {ir_id: import_ir78000004, inst_id: inst70000181} +// CHECK:STDOUT: import_ir_inst72: {ir_id: import_ir78000004, inst_id: inst70000175} +// CHECK:STDOUT: import_ir_inst73: {ir_id: import_ir78000004, inst_id: inst70000174} +// CHECK:STDOUT: import_ir_inst74: {ir_id: import_ir78000004, inst_id: inst70000180} +// CHECK:STDOUT: import_ir_inst75: {ir_id: import_ir78000004, inst_id: inst70000178} +// CHECK:STDOUT: import_ir_inst76: {ir_id: import_ir78000004, inst_id: inst70000178} +// CHECK:STDOUT: import_ir_inst77: {ir_id: import_ir78000004, inst_id: inst7000017C} +// CHECK:STDOUT: import_ir_inst78: {ir_id: import_ir78000004, inst_id: inst7000017D} +// CHECK:STDOUT: import_ir_inst79: {ir_id: import_ir78000004, inst_id: inst70000183} +// CHECK:STDOUT: import_ir_inst7A: {ir_id: import_ir78000004, inst_id: inst70000162} +// CHECK:STDOUT: import_ir_inst7B: {ir_id: import_ir78000004, inst_id: inst70000171} +// CHECK:STDOUT: import_ir_inst7C: {ir_id: import_ir78000004, inst_id: inst70000172} +// CHECK:STDOUT: import_ir_inst7D: {ir_id: import_ir78000004, inst_id: inst70000176} +// CHECK:STDOUT: import_ir_inst7E: {ir_id: import_ir78000004, inst_id: inst70000177} +// CHECK:STDOUT: import_ir_inst7F: {ir_id: import_ir78000004, inst_id: inst7000017A} +// CHECK:STDOUT: import_ir_inst80: {ir_id: import_ir78000004, inst_id: inst7000017F} +// CHECK:STDOUT: import_ir_inst81: {ir_id: import_ir78000004, inst_id: inst70000182} +// CHECK:STDOUT: import_ir_inst82: {ir_id: import_ir78000004, inst_id: inst70000185} +// CHECK:STDOUT: import_ir_inst83: {ir_id: import_ir78000004, inst_id: inst70000181} +// CHECK:STDOUT: import_ir_inst84: {ir_id: import_ir78000004, inst_id: inst70000175} +// CHECK:STDOUT: import_ir_inst85: {ir_id: import_ir78000004, inst_id: inst7000018C} +// CHECK:STDOUT: import_ir_inst86: {ir_id: import_ir78000004, inst_id: inst7000018D} +// CHECK:STDOUT: import_ir_inst87: {ir_id: import_ir78000004, inst_id: inst70000190} +// CHECK:STDOUT: import_ir_inst88: {ir_id: import_ir78000004, inst_id: inst70000198} +// CHECK:STDOUT: import_ir_inst89: {ir_id: import_ir78000004, inst_id: inst70000196} +// CHECK:STDOUT: import_ir_inst8A: {ir_id: import_ir78000004, inst_id: inst70000194} +// CHECK:STDOUT: import_ir_inst8B: {ir_id: import_ir78000004, inst_id: inst70000195} +// CHECK:STDOUT: import_ir_inst8C: {ir_id: import_ir78000004, inst_id: inst700001B3} +// CHECK:STDOUT: import_ir_inst8D: {ir_id: import_ir78000004, inst_id: inst700001B1} +// CHECK:STDOUT: import_ir_inst8E: {ir_id: import_ir78000004, inst_id: inst700001AF} +// CHECK:STDOUT: import_ir_inst8F: {ir_id: import_ir78000004, inst_id: inst700001B0} +// CHECK:STDOUT: import_ir_inst90: {ir_id: import_ir78000004, inst_id: inst700001F0} +// CHECK:STDOUT: import_ir_inst91: {ir_id: import_ir78000004, inst_id: inst700001EE} +// CHECK:STDOUT: import_ir_inst92: {ir_id: import_ir78000004, inst_id: inst70000213} +// CHECK:STDOUT: import_ir_inst93: {ir_id: import_ir78000004, inst_id: inst700001EF} +// CHECK:STDOUT: import_ir_inst94: {ir_id: import_ir78000004, inst_id: inst70000213} +// CHECK:STDOUT: import_ir_inst95: {ir_id: import_ir78000004, inst_id: inst7000020B} +// CHECK:STDOUT: import_ir_inst96: {ir_id: import_ir78000004, inst_id: inst700001FF} +// CHECK:STDOUT: import_ir_inst97: {ir_id: import_ir78000004, inst_id: inst7000020B} +// CHECK:STDOUT: import_ir_inst98: {ir_id: import_ir78000004, inst_id: inst700001FF} +// CHECK:STDOUT: import_ir_inst99: {ir_id: import_ir78000004, inst_id: inst700001FE} +// CHECK:STDOUT: import_ir_inst9A: {ir_id: import_ir78000004, inst_id: inst7000020A} +// CHECK:STDOUT: import_ir_inst9B: {ir_id: import_ir78000004, inst_id: inst70000202} +// CHECK:STDOUT: import_ir_inst9C: {ir_id: import_ir78000004, inst_id: inst70000202} +// CHECK:STDOUT: import_ir_inst9D: {ir_id: import_ir78000004, inst_id: inst70000206} +// CHECK:STDOUT: import_ir_inst9E: {ir_id: import_ir78000004, inst_id: inst70000207} +// CHECK:STDOUT: import_ir_inst9F: {ir_id: import_ir78000004, inst_id: inst7000020D} +// CHECK:STDOUT: import_ir_instA0: {ir_id: import_ir78000004, inst_id: inst700001D0} +// CHECK:STDOUT: import_ir_instA1: {ir_id: import_ir78000004, inst_id: inst700001D7} +// CHECK:STDOUT: import_ir_instA2: {ir_id: import_ir78000004, inst_id: inst700001F8} +// CHECK:STDOUT: import_ir_instA3: {ir_id: import_ir78000004, inst_id: inst700001F9} +// CHECK:STDOUT: import_ir_instA4: {ir_id: import_ir78000004, inst_id: inst700001FA} +// CHECK:STDOUT: import_ir_instA5: {ir_id: import_ir78000004, inst_id: inst700001FB} +// CHECK:STDOUT: import_ir_instA6: {ir_id: import_ir78000004, inst_id: inst700001FC} +// CHECK:STDOUT: import_ir_instA7: {ir_id: import_ir78000004, inst_id: inst70000200} +// CHECK:STDOUT: import_ir_instA8: {ir_id: import_ir78000004, inst_id: inst70000201} +// CHECK:STDOUT: import_ir_instA9: {ir_id: import_ir78000004, inst_id: inst70000204} +// CHECK:STDOUT: import_ir_instAA: {ir_id: import_ir78000004, inst_id: inst70000209} +// CHECK:STDOUT: import_ir_instAB: {ir_id: import_ir78000004, inst_id: inst7000020C} +// CHECK:STDOUT: import_ir_instAC: {ir_id: import_ir78000004, inst_id: inst7000020F} +// CHECK:STDOUT: import_ir_instAD: {ir_id: import_ir78000004, inst_id: inst7000024E} +// CHECK:STDOUT: import_ir_instAE: {ir_id: import_ir78000004, inst_id: inst7000024B} +// CHECK:STDOUT: import_ir_instAF: {ir_id: import_ir78000004, inst_id: inst7000021E} +// CHECK:STDOUT: import_ir_instB0: {ir_id: import_ir78000004, inst_id: inst70000224} +// CHECK:STDOUT: import_ir_instB1: {ir_id: import_ir78000004, inst_id: inst70000228} +// CHECK:STDOUT: import_ir_instB2: {ir_id: import_ir78000004, inst_id: inst70000229} +// CHECK:STDOUT: import_ir_instB3: {ir_id: import_ir78000004, inst_id: inst7000022A} +// CHECK:STDOUT: import_ir_instB4: {ir_id: import_ir78000004, inst_id: inst7000022B} +// CHECK:STDOUT: import_ir_instB5: {ir_id: import_ir78000004, inst_id: inst70000230} +// CHECK:STDOUT: import_ir_instB6: {ir_id: import_ir78000004, inst_id: inst7000023A} +// CHECK:STDOUT: import_ir_instB7: {ir_id: import_ir78000004, inst_id: inst70000243} +// CHECK:STDOUT: import_ir_instB8: {ir_id: import_ir78000004, inst_id: inst70000244} +// CHECK:STDOUT: import_ir_instB9: {ir_id: import_ir78000004, inst_id: inst70000245} +// CHECK:STDOUT: import_ir_instBA: {ir_id: import_ir78000004, inst_id: inst70000246} +// CHECK:STDOUT: import_ir_instBB: {ir_id: import_ir78000004, inst_id: inst70000252} +// CHECK:STDOUT: import_ir_instBC: {ir_id: import_ir78000004, inst_id: inst7000020B} +// CHECK:STDOUT: import_ir_instBD: {ir_id: import_ir78000004, inst_id: inst700001FF} +// CHECK:STDOUT: import_ir_instBE: {ir_id: import_ir78000004, inst_id: inst700001CE} +// CHECK:STDOUT: import_ir_instBF: {ir_id: import_ir78000004, inst_id: inst700001D4} +// CHECK:STDOUT: import_ir_instC0: {ir_id: import_ir78000004, inst_id: inst700001E9} +// CHECK:STDOUT: import_ir_instC1: {ir_id: import_ir78000004, inst_id: inst700001EB} +// CHECK:STDOUT: import_ir_instC2: {ir_id: import_ir78000004, inst_id: inst700001D0} +// CHECK:STDOUT: import_ir_instC3: {ir_id: import_ir78000004, inst_id: inst700001D7} +// CHECK:STDOUT: import_ir_instC4: {ir_id: import_ir78000004, inst_id: inst700001CF} +// CHECK:STDOUT: import_ir_instC5: {ir_id: import_ir78000004, inst_id: inst700001D1} +// CHECK:STDOUT: import_ir_instC6: {ir_id: import_ir78000004, inst_id: inst700001D6} +// CHECK:STDOUT: import_ir_instC7: {ir_id: import_ir78000004, inst_id: inst700001D9} +// CHECK:STDOUT: import_ir_instC8: {ir_id: import_ir78000004, inst_id: inst700001DF} +// CHECK:STDOUT: import_ir_instC9: {ir_id: import_ir78000004, inst_id: inst700001E2} +// CHECK:STDOUT: import_ir_instCA: {ir_id: import_ir78000004, inst_id: inst700001E6} +// CHECK:STDOUT: import_ir_instCB: {ir_id: import_ir78000004, inst_id: inst700001EA} +// CHECK:STDOUT: import_ir_instCC: {ir_id: import_ir78000004, inst_id: inst700001F2} +// CHECK:STDOUT: import_ir_instCD: {ir_id: import_ir78000004, inst_id: inst70000216} +// CHECK:STDOUT: import_ir_instCE: {ir_id: import_ir78000004, inst_id: inst70000217} +// CHECK:STDOUT: import_ir_instCF: {ir_id: import_ir78000004, inst_id: inst70000290} +// CHECK:STDOUT: import_ir_instD0: {ir_id: import_ir78000004, inst_id: inst7000028E} +// CHECK:STDOUT: import_ir_instD1: {ir_id: import_ir78000004, inst_id: inst700002B7} +// CHECK:STDOUT: import_ir_instD2: {ir_id: import_ir78000004, inst_id: inst7000028F} +// CHECK:STDOUT: import_ir_instD3: {ir_id: import_ir78000004, inst_id: inst700002B7} +// CHECK:STDOUT: import_ir_instD4: {ir_id: import_ir78000004, inst_id: inst700002AF} +// CHECK:STDOUT: import_ir_instD5: {ir_id: import_ir78000004, inst_id: inst700002A3} +// CHECK:STDOUT: import_ir_instD6: {ir_id: import_ir78000004, inst_id: inst700002AF} +// CHECK:STDOUT: import_ir_instD7: {ir_id: import_ir78000004, inst_id: inst700002A3} +// CHECK:STDOUT: import_ir_instD8: {ir_id: import_ir78000004, inst_id: inst700002A2} +// CHECK:STDOUT: import_ir_instD9: {ir_id: import_ir78000004, inst_id: inst700002AE} +// CHECK:STDOUT: import_ir_instDA: {ir_id: import_ir78000004, inst_id: inst700002A6} +// CHECK:STDOUT: import_ir_instDB: {ir_id: import_ir78000004, inst_id: inst700002A6} +// CHECK:STDOUT: import_ir_instDC: {ir_id: import_ir78000004, inst_id: inst700002AA} +// CHECK:STDOUT: import_ir_instDD: {ir_id: import_ir78000004, inst_id: inst700002AB} +// CHECK:STDOUT: import_ir_instDE: {ir_id: import_ir78000004, inst_id: inst700002B1} +// CHECK:STDOUT: import_ir_instDF: {ir_id: import_ir78000004, inst_id: inst70000265} +// CHECK:STDOUT: import_ir_instE0: {ir_id: import_ir78000004, inst_id: inst7000026B} +// CHECK:STDOUT: import_ir_instE1: {ir_id: import_ir78000004, inst_id: inst70000272} +// CHECK:STDOUT: import_ir_instE2: {ir_id: import_ir78000004, inst_id: inst7000029A} +// CHECK:STDOUT: import_ir_instE3: {ir_id: import_ir78000004, inst_id: inst7000029B} +// CHECK:STDOUT: import_ir_instE4: {ir_id: import_ir78000004, inst_id: inst7000029C} +// CHECK:STDOUT: import_ir_instE5: {ir_id: import_ir78000004, inst_id: inst7000029D} +// CHECK:STDOUT: import_ir_instE6: {ir_id: import_ir78000004, inst_id: inst7000029E} +// CHECK:STDOUT: import_ir_instE7: {ir_id: import_ir78000004, inst_id: inst7000029F} +// CHECK:STDOUT: import_ir_instE8: {ir_id: import_ir78000004, inst_id: inst700002A0} +// CHECK:STDOUT: import_ir_instE9: {ir_id: import_ir78000004, inst_id: inst700002A4} +// CHECK:STDOUT: import_ir_instEA: {ir_id: import_ir78000004, inst_id: inst700002A5} +// CHECK:STDOUT: import_ir_instEB: {ir_id: import_ir78000004, inst_id: inst700002A8} +// CHECK:STDOUT: import_ir_instEC: {ir_id: import_ir78000004, inst_id: inst700002AD} +// CHECK:STDOUT: import_ir_instED: {ir_id: import_ir78000004, inst_id: inst700002B0} +// CHECK:STDOUT: import_ir_instEE: {ir_id: import_ir78000004, inst_id: inst700002B3} +// CHECK:STDOUT: import_ir_instEF: {ir_id: import_ir78000004, inst_id: inst70000305} +// CHECK:STDOUT: import_ir_instF0: {ir_id: import_ir78000004, inst_id: inst70000302} +// CHECK:STDOUT: import_ir_instF1: {ir_id: import_ir78000004, inst_id: inst700002C2} +// CHECK:STDOUT: import_ir_instF2: {ir_id: import_ir78000004, inst_id: inst700002C7} +// CHECK:STDOUT: import_ir_instF3: {ir_id: import_ir78000004, inst_id: inst700002CB} +// CHECK:STDOUT: import_ir_instF4: {ir_id: import_ir78000004, inst_id: inst700002CC} +// CHECK:STDOUT: import_ir_instF5: {ir_id: import_ir78000004, inst_id: inst700002CD} +// CHECK:STDOUT: import_ir_instF6: {ir_id: import_ir78000004, inst_id: inst700002CE} +// CHECK:STDOUT: import_ir_instF7: {ir_id: import_ir78000004, inst_id: inst700002D3} +// CHECK:STDOUT: import_ir_instF8: {ir_id: import_ir78000004, inst_id: inst700002DB} +// CHECK:STDOUT: import_ir_instF9: {ir_id: import_ir78000004, inst_id: inst700002DF} +// CHECK:STDOUT: import_ir_instFA: {ir_id: import_ir78000004, inst_id: inst700002E0} +// CHECK:STDOUT: import_ir_instFB: {ir_id: import_ir78000004, inst_id: inst700002E1} +// CHECK:STDOUT: import_ir_instFC: {ir_id: import_ir78000004, inst_id: inst700002E2} +// CHECK:STDOUT: import_ir_instFD: {ir_id: import_ir78000004, inst_id: inst700002E7} +// CHECK:STDOUT: import_ir_instFE: {ir_id: import_ir78000004, inst_id: inst700002F1} +// CHECK:STDOUT: import_ir_instFF: {ir_id: import_ir78000004, inst_id: inst700002FA} +// CHECK:STDOUT: import_ir_inst100: {ir_id: import_ir78000004, inst_id: inst700002FB} +// CHECK:STDOUT: import_ir_inst101: {ir_id: import_ir78000004, inst_id: inst700002FC} +// CHECK:STDOUT: import_ir_inst102: {ir_id: import_ir78000004, inst_id: inst700002FD} +// CHECK:STDOUT: import_ir_inst103: {ir_id: import_ir78000004, inst_id: inst70000309} +// CHECK:STDOUT: import_ir_inst104: {ir_id: import_ir78000004, inst_id: inst700002AF} +// CHECK:STDOUT: import_ir_inst105: {ir_id: import_ir78000004, inst_id: inst700002A3} +// CHECK:STDOUT: import_ir_inst106: {ir_id: import_ir78000004, inst_id: inst70000263} +// CHECK:STDOUT: import_ir_inst107: {ir_id: import_ir78000004, inst_id: inst70000269} +// CHECK:STDOUT: import_ir_inst108: {ir_id: import_ir78000004, inst_id: inst7000026F} +// CHECK:STDOUT: import_ir_inst109: {ir_id: import_ir78000004, inst_id: inst70000288} +// CHECK:STDOUT: import_ir_inst10A: {ir_id: import_ir78000004, inst_id: inst7000028A} +// CHECK:STDOUT: import_ir_inst10B: {ir_id: import_ir78000004, inst_id: inst70000265} +// CHECK:STDOUT: import_ir_inst10C: {ir_id: import_ir78000004, inst_id: inst7000026B} +// CHECK:STDOUT: import_ir_inst10D: {ir_id: import_ir78000004, inst_id: inst70000272} +// CHECK:STDOUT: import_ir_inst10E: {ir_id: import_ir78000004, inst_id: inst70000264} +// CHECK:STDOUT: import_ir_inst10F: {ir_id: import_ir78000004, inst_id: inst70000266} +// CHECK:STDOUT: import_ir_inst110: {ir_id: import_ir78000004, inst_id: inst7000026A} +// CHECK:STDOUT: import_ir_inst111: {ir_id: import_ir78000004, inst_id: inst7000026C} +// CHECK:STDOUT: import_ir_inst112: {ir_id: import_ir78000004, inst_id: inst70000271} +// CHECK:STDOUT: import_ir_inst113: {ir_id: import_ir78000004, inst_id: inst70000274} +// CHECK:STDOUT: import_ir_inst114: {ir_id: import_ir78000004, inst_id: inst7000027B} +// CHECK:STDOUT: import_ir_inst115: {ir_id: import_ir78000004, inst_id: inst7000027E} +// CHECK:STDOUT: import_ir_inst116: {ir_id: import_ir78000004, inst_id: inst70000281} +// CHECK:STDOUT: import_ir_inst117: {ir_id: import_ir78000004, inst_id: inst70000285} +// CHECK:STDOUT: import_ir_inst118: {ir_id: import_ir78000004, inst_id: inst70000289} +// CHECK:STDOUT: import_ir_inst119: {ir_id: import_ir78000004, inst_id: inst70000292} +// CHECK:STDOUT: import_ir_inst11A: {ir_id: import_ir78000004, inst_id: inst700002BA} +// CHECK:STDOUT: import_ir_inst11B: {ir_id: import_ir78000004, inst_id: inst700002BB} // CHECK:STDOUT: clang_decls: {} // CHECK:STDOUT: clang_decl_signatures: {} // CHECK:STDOUT: name_scopes: -// CHECK:STDOUT: name_scope0: {inst: instF, parent_scope: name_scope, has_error: false, extended_scopes: [], names: {name(Core): inst78000011, name0: inst7800003E}} -// CHECK:STDOUT: name_scope78000001: {inst: inst78000011, parent_scope: name_scope0, has_error: false, extended_scopes: [], names: {name3: inst7800004E}} -// CHECK:STDOUT: name_scope78000002: {inst: inst7800004F, parent_scope: name_scope78000001, has_error: false, extended_scopes: [], names: {name(SelfType): inst7800006A}} -// CHECK:STDOUT: name_scope78000003: {inst: inst78000051, parent_scope: name_scope78000002, has_error: false, extended_scopes: [], names: {name4: inst78000053}} -// CHECK:STDOUT: name_scope78000004: {inst: inst78000070, parent_scope: name_scope, has_error: false, extended_scopes: [], names: {}} -// CHECK:STDOUT: name_scope78000005: {inst: inst780000A5, parent_scope: name_scope, has_error: false, extended_scopes: [], names: {}} -// CHECK:STDOUT: name_scope78000006: {inst: inst780000A9, parent_scope: name_scope, has_error: false, extended_scopes: [], names: {}} -// CHECK:STDOUT: name_scope78000007: {inst: inst780000AD, parent_scope: name_scope, has_error: false, extended_scopes: [], names: {}} -// CHECK:STDOUT: name_scope78000008: {inst: inst780000B1, parent_scope: name_scope, has_error: false, extended_scopes: [], names: {}} -// CHECK:STDOUT: name_scope78000009: {inst: inst780000B5, parent_scope: name_scope, has_error: false, extended_scopes: [], names: {}} -// CHECK:STDOUT: name_scope7800000A: {inst: inst780000D3, parent_scope: name_scope, has_error: false, extended_scopes: [], names: {}} -// CHECK:STDOUT: name_scope7800000B: {inst: inst780000D7, parent_scope: name_scope, has_error: false, extended_scopes: [], names: {}} -// CHECK:STDOUT: name_scope7800000C: {inst: inst780000DB, parent_scope: name_scope, has_error: false, extended_scopes: [], names: {}} -// CHECK:STDOUT: name_scope7800000D: {inst: inst7800011F, parent_scope: name_scope, has_error: false, extended_scopes: [], names: {}} +// CHECK:STDOUT: name_scope0: {inst: instF, parent_scope: name_scope, has_error: false, extended_scopes: [], names: {name(Core): inst78000011, name0: inst78000048}} +// CHECK:STDOUT: name_scope78000001: {inst: inst78000011, parent_scope: name_scope0, has_error: false, extended_scopes: [], names: {name3: inst78000058}} +// CHECK:STDOUT: name_scope78000002: {inst: inst78000059, parent_scope: name_scope78000001, has_error: false, extended_scopes: [], names: {name(SelfType): inst78000083}} +// CHECK:STDOUT: name_scope78000003: {inst: inst7800005B, parent_scope: name_scope78000002, has_error: false, extended_scopes: [], names: {name4: inst7800005D}} +// CHECK:STDOUT: name_scope78000004: {inst: inst78000089, parent_scope: name_scope, has_error: false, extended_scopes: [], names: {}} +// CHECK:STDOUT: name_scope78000005: {inst: inst780000D5, parent_scope: name_scope, has_error: false, extended_scopes: [], names: {}} +// CHECK:STDOUT: name_scope78000006: {inst: inst780000D9, parent_scope: name_scope, has_error: false, extended_scopes: [], names: {}} +// CHECK:STDOUT: name_scope78000007: {inst: inst780000DD, parent_scope: name_scope, has_error: false, extended_scopes: [], names: {}} +// CHECK:STDOUT: name_scope78000008: {inst: inst780000E1, parent_scope: name_scope, has_error: false, extended_scopes: [], names: {}} +// CHECK:STDOUT: name_scope78000009: {inst: inst780000E5, parent_scope: name_scope, has_error: false, extended_scopes: [], names: {}} +// CHECK:STDOUT: name_scope7800000A: {inst: inst78000113, parent_scope: name_scope, has_error: false, extended_scopes: [], names: {}} +// CHECK:STDOUT: name_scope7800000B: {inst: inst78000117, parent_scope: name_scope, has_error: false, extended_scopes: [], names: {}} +// CHECK:STDOUT: name_scope7800000C: {inst: inst7800011B, parent_scope: name_scope, has_error: false, extended_scopes: [], names: {}} +// CHECK:STDOUT: name_scope7800000D: {inst: inst78000177, parent_scope: name_scope, has_error: false, extended_scopes: [], names: {}} // CHECK:STDOUT: entity_names: // CHECK:STDOUT: entity_name78000000: {name: name(PeriodSelf), parent_scope: name_scope, index: -1, is_template: 0, is_unused: 0, form: inst} // CHECK:STDOUT: entity_name78000001: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: inst} @@ -281,78 +349,102 @@ fn Foo[T:! type](p: T*) -> (T*, ()) { // CHECK:STDOUT: entity_name78000005: {name: name4, parent_scope: name_scope78000003, index: -1, is_template: 0, is_unused: 0, form: inst} // CHECK:STDOUT: entity_name78000006: {name: name(SelfType), parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: inst} // CHECK:STDOUT: entity_name78000007: {name: name(SelfValue), parent_scope: name_scope, index: -1, is_template: 0, is_unused: 0, form: inst} -// CHECK:STDOUT: entity_name78000008: {name: name(SelfType), parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name78000008: {name: name(SelfValue), parent_scope: name_scope, index: -1, is_template: 0, is_unused: 0, form: inst} // CHECK:STDOUT: entity_name78000009: {name: name(SelfType), parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: inst} -// CHECK:STDOUT: entity_name7800000A: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: inst} -// CHECK:STDOUT: entity_name7800000B: {name: name(SelfValue), parent_scope: name_scope, index: -1, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name7800000A: {name: name(SelfValue), parent_scope: name_scope, index: -1, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name7800000B: {name: name(SelfType), parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: inst} // CHECK:STDOUT: entity_name7800000C: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: inst} // CHECK:STDOUT: entity_name7800000D: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: inst} -// CHECK:STDOUT: entity_name7800000E: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: inst} -// CHECK:STDOUT: entity_name7800000F: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name7800000E: {name: name(SelfValue), parent_scope: name_scope, index: -1, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name7800000F: {name: name(SelfValue), parent_scope: name_scope, index: -1, is_template: 0, is_unused: 0, form: inst} // CHECK:STDOUT: entity_name78000010: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: inst} // CHECK:STDOUT: entity_name78000011: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: inst} -// CHECK:STDOUT: entity_name78000012: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: inst} -// CHECK:STDOUT: entity_name78000013: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: inst} -// CHECK:STDOUT: entity_name78000014: {name: name(SelfValue), parent_scope: name_scope, index: -1, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name78000012: {name: name(SelfValue), parent_scope: name_scope, index: -1, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name78000013: {name: name(SelfValue), parent_scope: name_scope, index: -1, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name78000014: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: inst} // CHECK:STDOUT: entity_name78000015: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: inst} -// CHECK:STDOUT: entity_name78000016: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: inst} -// CHECK:STDOUT: entity_name78000017: {name: name(SelfValue), parent_scope: name_scope, index: -1, is_template: 0, is_unused: 0, form: inst} -// CHECK:STDOUT: entity_name78000018: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name78000016: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name78000017: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name78000018: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: inst} // CHECK:STDOUT: entity_name78000019: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: inst} -// CHECK:STDOUT: entity_name7800001A: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name7800001A: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: inst} // CHECK:STDOUT: entity_name7800001B: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: inst} -// CHECK:STDOUT: entity_name7800001C: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: inst} -// CHECK:STDOUT: entity_name7800001D: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: inst} -// CHECK:STDOUT: entity_name7800001E: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name7800001C: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name7800001D: {name: name(SelfValue), parent_scope: name_scope, index: -1, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name7800001E: {name: name(SelfValue), parent_scope: name_scope, index: -1, is_template: 0, is_unused: 0, form: inst} // CHECK:STDOUT: entity_name7800001F: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: inst} -// CHECK:STDOUT: entity_name78000020: {name: name6, parent_scope: name_scope, index: 2, is_template: 0, is_unused: 0, form: inst} -// CHECK:STDOUT: entity_name78000021: {name: name(SelfValue), parent_scope: name_scope, index: -1, is_template: 0, is_unused: 0, form: inst} -// CHECK:STDOUT: entity_name78000022: {name: name6, parent_scope: name_scope, index: 2, is_template: 0, is_unused: 0, form: inst} -// CHECK:STDOUT: entity_name78000023: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: inst} -// CHECK:STDOUT: entity_name78000024: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: inst} -// CHECK:STDOUT: entity_name78000025: {name: name6, parent_scope: name_scope, index: 2, is_template: 0, is_unused: 0, form: inst} -// CHECK:STDOUT: entity_name78000026: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: inst} -// CHECK:STDOUT: entity_name78000027: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: inst} -// CHECK:STDOUT: entity_name78000028: {name: name6, parent_scope: name_scope, index: 2, is_template: 0, is_unused: 0, form: inst} -// CHECK:STDOUT: entity_name78000029: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: inst} -// CHECK:STDOUT: entity_name7800002A: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: inst} -// CHECK:STDOUT: entity_name7800002B: {name: name6, parent_scope: name_scope, index: 2, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name78000020: {name: name(SelfValue), parent_scope: name_scope, index: -1, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name78000021: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name78000022: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name78000023: {name: name(SelfValue), parent_scope: name_scope, index: -1, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name78000024: {name: name(SelfValue), parent_scope: name_scope, index: -1, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name78000025: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name78000026: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name78000027: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name78000028: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name78000029: {name: name(SelfValue), parent_scope: name_scope, index: -1, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name7800002A: {name: name(SelfValue), parent_scope: name_scope, index: -1, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name7800002B: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: inst} // CHECK:STDOUT: entity_name7800002C: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: inst} // CHECK:STDOUT: entity_name7800002D: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name7800002E: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name7800002F: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name78000030: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name78000031: {name: name6, parent_scope: name_scope, index: 2, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name78000032: {name: name6, parent_scope: name_scope, index: 2, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name78000033: {name: name(SelfValue), parent_scope: name_scope, index: -1, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name78000034: {name: name(SelfValue), parent_scope: name_scope, index: -1, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name78000035: {name: name6, parent_scope: name_scope, index: 2, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name78000036: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name78000037: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name78000038: {name: name6, parent_scope: name_scope, index: 2, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name78000039: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name7800003A: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name7800003B: {name: name(SelfValue), parent_scope: name_scope, index: -1, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name7800003C: {name: name(SelfValue), parent_scope: name_scope, index: -1, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name7800003D: {name: name6, parent_scope: name_scope, index: 2, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name7800003E: {name: name6, parent_scope: name_scope, index: 2, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name7800003F: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name78000040: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name78000041: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name78000042: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name78000043: {name: name6, parent_scope: name_scope, index: 2, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name78000044: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: inst} +// CHECK:STDOUT: entity_name78000045: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: inst} // CHECK:STDOUT: functions: -// CHECK:STDOUT: function78000000: {name: name0, parent_scope: name_scope0, call_param_patterns_id: inst_block78000010, call_params_id: inst_block78000011, return_type_inst_id: inst78000030, return_form_inst_id: inst78000032, return_pattern_id: inst78000038, body: [inst_block78000018]} -// CHECK:STDOUT: function78000001: {name: name4, parent_scope: name_scope78000003, call_param_patterns_id: inst_block7800001E, return_type_inst_id: inst78000060, return_form_inst_id: inst78000061, return_pattern_id: inst7800005C} -// CHECK:STDOUT: function78000002: {name: name4, parent_scope: name_scope78000004, call_param_patterns_id: inst_block78000029, return_type_inst_id: inst78000080, return_form_inst_id: inst78000081, return_pattern_id: inst7800007C} -// CHECK:STDOUT: function78000003: {name: name4, parent_scope: name_scope78000009, call_param_patterns_id: inst_block7800003F, return_type_inst_id: inst780000C8, return_form_inst_id: inst780000C9, return_pattern_id: inst780000C4} -// CHECK:STDOUT: function78000004: {name: name4, parent_scope: name_scope7800000C, call_param_patterns_id: inst_block7800004C, return_type_inst_id: inst780000ED, return_form_inst_id: inst780000EE, return_pattern_id: inst780000E9} -// CHECK:STDOUT: function78000005: {name: name4, parent_scope: name_scope7800000D, call_param_patterns_id: inst_block78000068, return_type_inst_id: inst78000131, return_form_inst_id: inst78000132, return_pattern_id: inst7800012D} +// CHECK:STDOUT: function78000000: {name: name0, parent_scope: name_scope0, call_param_patterns_id: inst_block78000010, call_params_id: inst_block78000011, return_type_inst_id: inst78000036, return_form_inst_id: inst78000038, return_pattern_id: inst78000040, body: [inst_block78000018]} +// CHECK:STDOUT: function78000001: {name: name4, parent_scope: name_scope78000003, call_param_patterns_id: inst_block7800001E, return_type_inst_id: inst78000072, return_form_inst_id: inst78000073, return_pattern_id: inst78000074} +// CHECK:STDOUT: function78000002: {name: name4, parent_scope: name_scope78000004, call_param_patterns_id: inst_block78000029, return_type_inst_id: inst780000A3, return_form_inst_id: inst780000A4, return_pattern_id: inst780000A5} +// CHECK:STDOUT: function78000003: {name: name4, parent_scope: name_scope78000009, call_param_patterns_id: inst_block7800003F, return_type_inst_id: inst78000101, return_form_inst_id: inst78000102, return_pattern_id: inst78000103} +// CHECK:STDOUT: function78000004: {name: name4, parent_scope: name_scope7800000C, call_param_patterns_id: inst_block7800004C, return_type_inst_id: inst78000136, return_form_inst_id: inst78000137, return_pattern_id: inst78000138} +// CHECK:STDOUT: function78000005: {name: name4, parent_scope: name_scope7800000D, call_param_patterns_id: inst_block78000068, return_type_inst_id: inst78000192, return_form_inst_id: inst78000193, return_pattern_id: inst78000194} // CHECK:STDOUT: classes: {} // CHECK:STDOUT: interfaces: // CHECK:STDOUT: interface78000000: {name: name3, parent_scope: name_scope78000001, require_impls_block_id: require_block_empty, core_interface: Copy} // CHECK:STDOUT: associated_constants: {} // CHECK:STDOUT: impls: -// CHECK:STDOUT: impl78000000: {self: inst7800009B, constraint: inst7800009C, witness: inst7800006F} -// CHECK:STDOUT: impl78000001: {self: inst780000A6, constraint: inst780000A7, witness: inst780000A4} -// CHECK:STDOUT: impl78000002: {self: inst780000AA, constraint: inst780000AB, witness: inst780000A8} -// CHECK:STDOUT: impl78000003: {self: inst780000AE, constraint: inst780000AF, witness: inst780000AC} -// CHECK:STDOUT: impl78000004: {self: inst780000B2, constraint: inst780000B3, witness: inst780000B0} -// CHECK:STDOUT: impl78000005: {self: inst780000BA, constraint: inst780000BB, witness: inst780000B4} -// CHECK:STDOUT: impl78000006: {self: inst780000D4, constraint: inst780000D5, witness: inst780000D2} -// CHECK:STDOUT: impl78000007: {self: inst780000D8, constraint: inst780000D9, witness: inst780000D6} -// CHECK:STDOUT: impl78000008: {self: inst78000111, constraint: inst78000112, witness: inst780000DA} -// CHECK:STDOUT: impl78000009: {self: inst7800015F, constraint: inst78000160, witness: inst7800011E} +// CHECK:STDOUT: impl78000000: {self: inst780000CA, constraint: inst780000CB, witness: inst78000088} +// CHECK:STDOUT: impl78000001: {self: inst780000D6, constraint: inst780000D7, witness: inst780000D4} +// CHECK:STDOUT: impl78000002: {self: inst780000DA, constraint: inst780000DB, witness: inst780000D8} +// CHECK:STDOUT: impl78000003: {self: inst780000DE, constraint: inst780000DF, witness: inst780000DC} +// CHECK:STDOUT: impl78000004: {self: inst780000E2, constraint: inst780000E3, witness: inst780000E0} +// CHECK:STDOUT: impl78000005: {self: inst780000EA, constraint: inst780000EB, witness: inst780000E4} +// CHECK:STDOUT: impl78000006: {self: inst78000114, constraint: inst78000115, witness: inst78000112} +// CHECK:STDOUT: impl78000007: {self: inst78000118, constraint: inst78000119, witness: inst78000116} +// CHECK:STDOUT: impl78000008: {self: inst78000167, constraint: inst78000168, witness: inst7800011A} +// CHECK:STDOUT: impl78000009: {self: inst780001CD, constraint: inst780001CE, witness: inst78000176} // CHECK:STDOUT: generics: -// CHECK:STDOUT: generic78000000: {decl: inst7800003E, bindings: inst_block78000014, self_specific_id: specific78000000, decl_block_id: inst_block78000016, definition_block_id: inst_block7800008B} -// CHECK:STDOUT: generic78000001: {decl: inst78000051, bindings: inst_block7800001B, self_specific_id: specific78000001, decl_block_id: inst_block_empty, definition_block_id: inst_block78000024} -// CHECK:STDOUT: generic78000002: {decl: inst78000056, bindings: inst_block78000020, self_specific_id: specific78000002, decl_block_id: inst_block78000021, definition_block_id: inst_block} -// CHECK:STDOUT: generic78000003: {decl: inst78000070, bindings: inst_block78000034, self_specific_id: specific78000004, decl_block_id: inst_block78000036, definition_block_id: inst_block78000038} -// CHECK:STDOUT: generic78000004: {decl: inst78000077, bindings: inst_block7800002B, self_specific_id: specific78000007, decl_block_id: inst_block7800002C, definition_block_id: inst_block78000031} -// CHECK:STDOUT: generic78000005: {decl: inst780000B5, bindings: inst_block7800003C, self_specific_id: specific7800000B, decl_block_id: inst_block7800003E, definition_block_id: inst_block78000045} -// CHECK:STDOUT: generic78000006: {decl: inst780000C0, bindings: inst_block78000041, self_specific_id: specific7800000D, decl_block_id: inst_block78000042, definition_block_id: inst_block_empty} -// CHECK:STDOUT: generic78000007: {decl: inst780000DB, bindings: inst_block7800005B, self_specific_id: specific7800000E, decl_block_id: inst_block7800005F, definition_block_id: inst_block78000061} -// CHECK:STDOUT: generic78000008: {decl: inst780000E2, bindings: inst_block7800004E, self_specific_id: specific78000011, decl_block_id: inst_block78000050, definition_block_id: inst_block78000058} -// CHECK:STDOUT: generic78000009: {decl: inst7800011F, bindings: inst_block78000079, self_specific_id: specific78000017, decl_block_id: inst_block7800007D, definition_block_id: inst_block7800007F} -// CHECK:STDOUT: generic7800000A: {decl: inst78000126, bindings: inst_block7800006A, self_specific_id: specific7800001A, decl_block_id: inst_block7800006C, definition_block_id: inst_block78000076} +// CHECK:STDOUT: generic78000000: {decl: inst78000048, bindings: inst_block78000014, self_specific_id: specific78000000, decl_block_id: inst_block78000016, definition_block_id: inst_block7800008B} +// CHECK:STDOUT: generic78000001: {decl: inst7800005B, bindings: inst_block7800001B, self_specific_id: specific78000001, decl_block_id: inst_block_empty, definition_block_id: inst_block78000024} +// CHECK:STDOUT: generic78000002: {decl: inst78000060, bindings: inst_block78000020, self_specific_id: specific78000002, decl_block_id: inst_block78000021, definition_block_id: inst_block} +// CHECK:STDOUT: generic78000003: {decl: inst78000089, bindings: inst_block78000034, self_specific_id: specific78000004, decl_block_id: inst_block78000036, definition_block_id: inst_block78000038} +// CHECK:STDOUT: generic78000004: {decl: inst78000090, bindings: inst_block7800002B, self_specific_id: specific78000007, decl_block_id: inst_block7800002C, definition_block_id: inst_block78000031} +// CHECK:STDOUT: generic78000005: {decl: inst780000E5, bindings: inst_block7800003C, self_specific_id: specific7800000B, decl_block_id: inst_block7800003E, definition_block_id: inst_block78000045} +// CHECK:STDOUT: generic78000006: {decl: inst780000F1, bindings: inst_block78000041, self_specific_id: specific7800000D, decl_block_id: inst_block78000042, definition_block_id: inst_block_empty} +// CHECK:STDOUT: generic78000007: {decl: inst7800011B, bindings: inst_block7800005B, self_specific_id: specific7800000E, decl_block_id: inst_block7800005F, definition_block_id: inst_block78000061} +// CHECK:STDOUT: generic78000008: {decl: inst78000122, bindings: inst_block7800004E, self_specific_id: specific78000011, decl_block_id: inst_block78000050, definition_block_id: inst_block78000058} +// CHECK:STDOUT: generic78000009: {decl: inst78000177, bindings: inst_block78000079, self_specific_id: specific78000017, decl_block_id: inst_block7800007D, definition_block_id: inst_block7800007F} +// CHECK:STDOUT: generic7800000A: {decl: inst7800017E, bindings: inst_block7800006A, self_specific_id: specific7800001A, decl_block_id: inst_block7800006C, definition_block_id: inst_block78000076} // CHECK:STDOUT: specifics: // CHECK:STDOUT: specific78000000: {generic: generic78000000, args: inst_block78000015, decl_block_id: inst_block78000017, decl_has_error: 0, definition_block_id: inst_block, definition_has_error: 0} // CHECK:STDOUT: specific78000001: {generic: generic78000001, args: inst_block7800001C, decl_block_id: inst_block_empty, decl_has_error: 0, definition_block_id: inst_block7800001D, definition_has_error: 0} @@ -423,28 +515,28 @@ fn Foo[T:! type](p: T*) -> (T*, ()) { // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 0 // CHECK:STDOUT: alignment: 1 -// CHECK:STDOUT: 'type(inst78000026)': -// CHECK:STDOUT: value_repr: {kind: none, type: type(inst78000026)} +// CHECK:STDOUT: 'type(inst7800002C)': +// CHECK:STDOUT: value_repr: {kind: none, type: type(inst7800002C)} // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 0 // CHECK:STDOUT: alignment: 1 -// CHECK:STDOUT: 'type(inst7800002D)': -// CHECK:STDOUT: value_repr: {kind: copy, type: type(inst7800002D)} +// CHECK:STDOUT: 'type(inst78000033)': +// CHECK:STDOUT: value_repr: {kind: copy, type: type(inst78000033)} // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 8 // CHECK:STDOUT: alignment: 8 -// CHECK:STDOUT: 'type(inst78000029)': -// CHECK:STDOUT: value_repr: {kind: pointer, type: type(inst7800002D)} +// CHECK:STDOUT: 'type(inst7800002F)': +// CHECK:STDOUT: value_repr: {kind: pointer, type: type(inst78000033)} // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 0 // CHECK:STDOUT: alignment: 1 -// CHECK:STDOUT: 'type(inst7800003F)': -// CHECK:STDOUT: value_repr: {kind: none, type: type(inst78000026)} +// CHECK:STDOUT: 'type(inst78000049)': +// CHECK:STDOUT: value_repr: {kind: none, type: type(inst7800002C)} // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 0 // CHECK:STDOUT: alignment: 1 -// CHECK:STDOUT: 'type(symbolic_constant78000003)': -// CHECK:STDOUT: value_repr: {kind: copy, type: type(symbolic_constant78000003)} +// CHECK:STDOUT: 'type(symbolic_constant78000005)': +// CHECK:STDOUT: value_repr: {kind: copy, type: type(symbolic_constant78000005)} // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 8 // CHECK:STDOUT: alignment: 8 @@ -453,28 +545,28 @@ fn Foo[T:! type](p: T*) -> (T*, ()) { // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 0 // CHECK:STDOUT: alignment: 1 -// CHECK:STDOUT: 'type(symbolic_constant78000011)': -// CHECK:STDOUT: value_repr: {kind: copy, type: type(symbolic_constant78000011)} +// CHECK:STDOUT: 'type(symbolic_constant7800001B)': +// CHECK:STDOUT: value_repr: {kind: copy, type: type(symbolic_constant7800001B)} // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 8 // CHECK:STDOUT: alignment: 8 -// CHECK:STDOUT: 'type(symbolic_constant78000009)': -// CHECK:STDOUT: value_repr: {kind: pointer, type: type(symbolic_constant78000011)} +// CHECK:STDOUT: 'type(symbolic_constant7800000F)': +// CHECK:STDOUT: value_repr: {kind: pointer, type: type(symbolic_constant7800001B)} // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 8 // CHECK:STDOUT: alignment: 8 -// CHECK:STDOUT: 'type(symbolic_constant78000004)': -// CHECK:STDOUT: value_repr: {kind: copy, type: type(symbolic_constant78000004)} +// CHECK:STDOUT: 'type(symbolic_constant78000006)': +// CHECK:STDOUT: value_repr: {kind: copy, type: type(symbolic_constant78000006)} // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 8 // CHECK:STDOUT: alignment: 8 -// CHECK:STDOUT: 'type(symbolic_constant7800000A)': -// CHECK:STDOUT: value_repr: {kind: pointer, type: type(symbolic_constant78000011)} +// CHECK:STDOUT: 'type(symbolic_constant78000010)': +// CHECK:STDOUT: value_repr: {kind: pointer, type: type(symbolic_constant7800001B)} // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 8 // CHECK:STDOUT: alignment: 8 -// CHECK:STDOUT: 'type(inst78000050)': -// CHECK:STDOUT: value_repr: {kind: copy, type: type(inst78000050)} +// CHECK:STDOUT: 'type(inst7800005A)': +// CHECK:STDOUT: value_repr: {kind: copy, type: type(inst7800005A)} // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 0 // CHECK:STDOUT: alignment: 1 @@ -488,13 +580,13 @@ fn Foo[T:! type](p: T*) -> (T*, ()) { // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 0 // CHECK:STDOUT: alignment: 1 -// CHECK:STDOUT: 'type(symbolic_constant78000145)': -// CHECK:STDOUT: value_repr: {kind: none, type: type(inst78000026)} +// CHECK:STDOUT: 'type(symbolic_constant780001C3)': +// CHECK:STDOUT: value_repr: {kind: none, type: type(inst7800002C)} // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 0 // CHECK:STDOUT: alignment: 1 -// CHECK:STDOUT: 'type(symbolic_constant7800014A)': -// CHECK:STDOUT: value_repr: {kind: none, type: type(inst78000026)} +// CHECK:STDOUT: 'type(symbolic_constant780001C8)': +// CHECK:STDOUT: value_repr: {kind: none, type: type(inst7800002C)} // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 0 // CHECK:STDOUT: alignment: 1 @@ -515,383 +607,500 @@ fn Foo[T:! type](p: T*) -> (T*, ()) { // CHECK:STDOUT: inst78000014: {kind: SymbolicBinding, arg0: entity_name78000000, arg1: inst, type: type(inst78000012)} // CHECK:STDOUT: inst78000015: {kind: TypeLiteral, arg0: inst(TypeType), type: type(TypeType)} // CHECK:STDOUT: inst78000016: {kind: PatternType, arg0: inst(TypeType), type: type(TypeType)} -// CHECK:STDOUT: inst78000017: {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst, type: type(TypeType)} -// CHECK:STDOUT: inst78000018: {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst, type: type(TypeType)} -// CHECK:STDOUT: inst78000019: {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst, type: type(TypeType)} -// CHECK:STDOUT: inst7800001A: {kind: SymbolicBindingPattern, arg0: entity_name78000001, type: type(inst78000016)} -// CHECK:STDOUT: inst7800001B: {kind: NameRef, arg0: name1, arg1: inst78000017, type: type(TypeType)} -// CHECK:STDOUT: inst7800001C: {kind: PointerType, arg0: inst7800001B, type: type(TypeType)} -// CHECK:STDOUT: inst7800001D: {kind: PointerType, arg0: inst78000018, type: type(TypeType)} -// CHECK:STDOUT: inst7800001E: {kind: PointerType, arg0: inst78000019, type: type(TypeType)} -// CHECK:STDOUT: inst7800001F: {kind: PatternType, arg0: inst7800001D, type: type(TypeType)} -// CHECK:STDOUT: inst78000020: {kind: ValueParamPattern, arg0: name2, type: type(symbolic_constant78000006)} -// CHECK:STDOUT: inst78000021: {kind: PatternType, arg0: inst7800001E, type: type(TypeType)} -// CHECK:STDOUT: inst78000022: {kind: ValueBinding, arg0: entity_name78000002, arg1: inst7800003A, type: type(symbolic_constant78000004)} -// CHECK:STDOUT: inst78000023: {kind: WrapperBindingPattern, arg0: entity_name78000002, arg1: inst78000020, type: type(symbolic_constant78000006)} -// CHECK:STDOUT: inst78000024: {kind: NameRef, arg0: name1, arg1: inst78000017, type: type(TypeType)} -// CHECK:STDOUT: inst78000025: {kind: PointerType, arg0: inst78000024, type: type(TypeType)} -// CHECK:STDOUT: inst78000026: {kind: TupleType, arg0: inst_block_empty, type: type(TypeType)} -// CHECK:STDOUT: inst78000027: {kind: TupleLiteral, arg0: inst_block_empty, type: type(inst78000026)} -// CHECK:STDOUT: inst78000028: {kind: TupleValue, arg0: inst_block_empty, type: type(inst78000026)} -// CHECK:STDOUT: inst78000029: {kind: TupleType, arg0: inst_block7800000A, type: type(TypeType)} -// CHECK:STDOUT: inst7800002A: {kind: TupleLiteral, arg0: inst_block78000009, type: type(inst78000029)} -// CHECK:STDOUT: inst7800002B: {kind: TupleValue, arg0: inst_block7800000B, type: type(inst78000029)} -// CHECK:STDOUT: inst7800002C: {kind: TupleValue, arg0: inst_block7800000C, type: type(inst78000029)} -// CHECK:STDOUT: inst7800002D: {kind: PointerType, arg0: inst78000029, type: type(TypeType)} -// CHECK:STDOUT: inst7800002E: {kind: Converted, arg0: inst78000028, arg1: inst78000026, type: type(TypeType)} -// CHECK:STDOUT: inst7800002F: {kind: TupleType, arg0: inst_block7800000E, type: type(TypeType)} -// CHECK:STDOUT: inst78000030: {kind: Converted, arg0: inst7800002A, arg1: inst7800002F, type: type(TypeType)} -// CHECK:STDOUT: inst78000031: {kind: TupleType, arg0: inst_block7800000F, type: type(TypeType)} -// CHECK:STDOUT: inst78000032: {kind: InitForm, arg0: inst78000030, type: type(inst(FormType))} -// CHECK:STDOUT: inst78000033: {kind: InitForm, arg0: inst7800002F, type: type(inst(FormType))} -// CHECK:STDOUT: inst78000034: {kind: InitForm, arg0: inst78000031, type: type(inst(FormType))} -// CHECK:STDOUT: inst78000035: {kind: PatternType, arg0: inst7800002F, type: type(TypeType)} -// CHECK:STDOUT: inst78000036: {kind: OutParamPattern, arg0: name(ReturnSlot), type: type(symbolic_constant7800000E)} -// CHECK:STDOUT: inst78000037: {kind: PatternType, arg0: inst78000031, type: type(TypeType)} -// CHECK:STDOUT: inst78000038: {kind: ReturnSlotPattern, arg0: inst78000036, arg1: inst78000030, type: type(symbolic_constant7800000E)} -// CHECK:STDOUT: inst78000039: {kind: SpliceBlock, arg0: inst_block78000005, arg1: inst78000015, type: type(TypeType)} -// CHECK:STDOUT: inst7800003A: {kind: ValueParam, arg0: call_param0, arg1: name2, type: type(symbolic_constant78000004)} -// CHECK:STDOUT: inst7800003B: {kind: SpliceBlock, arg0: inst_block78000007, arg1: inst7800001C, type: type(TypeType)} -// CHECK:STDOUT: inst7800003C: {kind: OutParam, arg0: call_param1, arg1: name(ReturnSlot), type: type(symbolic_constant7800000A)} -// CHECK:STDOUT: inst7800003D: {kind: ReturnSlot, arg0: inst7800002F, arg1: inst7800003C, type: type(symbolic_constant7800000A)} -// CHECK:STDOUT: inst7800003E: {kind: FunctionDecl, arg0: function78000000, arg1: inst_block78000013, type: type(inst7800003F)} -// CHECK:STDOUT: inst7800003F: {kind: FunctionType, arg0: function78000000, arg1: specific, type: type(TypeType)} -// CHECK:STDOUT: inst78000040: {kind: StructValue, arg0: inst_block_empty, type: type(inst7800003F)} -// CHECK:STDOUT: inst78000041: {kind: RequireCompleteType, arg0: inst7800001D, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst78000042: {kind: RequireCompleteType, arg0: inst7800001D, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst78000043: {kind: RequireCompleteType, arg0: inst7800001E, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst78000044: {kind: PointerType, arg0: inst7800002F, type: type(TypeType)} -// CHECK:STDOUT: inst78000045: {kind: RequireCompleteType, arg0: inst7800002F, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst78000046: {kind: RequireCompleteType, arg0: inst7800002F, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst78000047: {kind: RequireCompleteType, arg0: inst78000031, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst78000048: {kind: NameRef, arg0: name2, arg1: inst78000022, type: type(symbolic_constant78000004)} -// CHECK:STDOUT: inst78000049: {kind: TupleLiteral, arg0: inst_block_empty, type: type(inst78000026)} -// CHECK:STDOUT: inst7800004A: {kind: TupleLiteral, arg0: inst_block78000019, type: type(symbolic_constant7800000A)} -// CHECK:STDOUT: inst7800004B: {kind: RequireCompleteType, arg0: inst7800002F, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst7800004C: {kind: TupleAccess, arg0: inst7800003C, arg1: element0, type: type(symbolic_constant78000004)} -// CHECK:STDOUT: inst7800004D: {kind: RequireCompleteType, arg0: inst7800001D, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst7800004E: {kind: ImportRefLoaded, arg0: import_ir_inst0, arg1: entity_name78000003, type: type(TypeType)} -// CHECK:STDOUT: inst7800004F: {kind: InterfaceDecl, arg0: interface78000000, arg1: inst_block_empty, type: type(TypeType)} -// CHECK:STDOUT: inst78000050: {kind: FacetType, arg0: facet_type78000001, type: type(TypeType)} -// CHECK:STDOUT: inst78000051: {kind: InterfaceWithSelfDecl, arg0: interface78000000} -// CHECK:STDOUT: inst78000052: {kind: SymbolicBinding, arg0: entity_name78000004, arg1: inst, type: type(inst78000050)} -// CHECK:STDOUT: inst78000053: {kind: ImportRefLoaded, arg0: import_ir_inst3, arg1: entity_name, type: type(inst7800006B)} -// CHECK:STDOUT: inst78000054: {kind: ImportRefUnloaded, arg0: import_ir_inst4, arg1: entity_name78000005} -// CHECK:STDOUT: inst78000055: {kind: ImportRefLoaded, arg0: import_ir_inst5, arg1: entity_name, type: type(inst78000050)} -// CHECK:STDOUT: inst78000056: {kind: FunctionDecl, arg0: function78000001, arg1: inst_block_empty, type: type(symbolic_constant78000015)} -// CHECK:STDOUT: inst78000057: {kind: FunctionType, arg0: function78000001, arg1: specific78000001, type: type(TypeType)} -// CHECK:STDOUT: inst78000058: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant78000015)} -// CHECK:STDOUT: inst78000059: {kind: FacetAccessType, arg0: inst78000052, type: type(TypeType)} -// CHECK:STDOUT: inst7800005A: {kind: PatternType, arg0: inst78000059, type: type(TypeType)} -// CHECK:STDOUT: inst7800005B: {kind: OutParamPattern, arg0: name(ReturnSlot), type: type(symbolic_constant7800001B)} -// CHECK:STDOUT: inst7800005C: {kind: ReturnSlotPattern, arg0: inst7800005B, arg1: inst, type: type(symbolic_constant7800001B)} -// CHECK:STDOUT: inst7800005D: {kind: ValueParamPattern, arg0: name(SelfValue), type: type(symbolic_constant7800001B)} -// CHECK:STDOUT: inst7800005E: {kind: WrapperBindingPattern, arg0: entity_name78000007, arg1: inst7800005D, type: type(symbolic_constant7800001B)} -// CHECK:STDOUT: inst7800005F: {kind: InitForm, arg0: inst78000059, type: type(inst(FormType))} -// CHECK:STDOUT: inst78000060: {kind: ImportRefLoaded, arg0: import_ir_instB, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst78000061: {kind: ImportRefLoaded, arg0: import_ir_instC, arg1: entity_name, type: type(inst(FormType))} -// CHECK:STDOUT: inst78000062: {kind: ImportRefLoaded, arg0: import_ir_instD, arg1: entity_name, type: type(inst78000050)} -// CHECK:STDOUT: inst78000063: {kind: SymbolicBinding, arg0: entity_name78000004, arg1: inst, type: type(inst78000050)} -// CHECK:STDOUT: inst78000064: {kind: FacetAccessType, arg0: inst78000063, type: type(TypeType)} -// CHECK:STDOUT: inst78000065: {kind: PatternType, arg0: inst78000064, type: type(TypeType)} -// CHECK:STDOUT: inst78000066: {kind: InitForm, arg0: inst78000064, type: type(inst(FormType))} -// CHECK:STDOUT: inst78000067: {kind: SymbolicBinding, arg0: entity_name78000004, arg1: inst, type: type(inst78000050)} -// CHECK:STDOUT: inst78000068: {kind: FunctionType, arg0: function78000001, arg1: specific78000003, type: type(TypeType)} -// CHECK:STDOUT: inst78000069: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant78000029)} -// CHECK:STDOUT: inst7800006A: {kind: ImportRefUnloaded, arg0: import_ir_inst15, arg1: entity_name} -// CHECK:STDOUT: inst7800006B: {kind: AssociatedEntityType, arg0: interface78000000, arg1: specific, type: type(TypeType)} -// CHECK:STDOUT: inst7800006C: {kind: ImportRefLoaded, arg0: import_ir_inst16, arg1: entity_name, type: type(symbolic_constant78000019)} -// CHECK:STDOUT: inst7800006D: {kind: AssociatedEntity, arg0: element0, arg1: inst7800006C, type: type(inst7800006B)} -// CHECK:STDOUT: inst7800006E: {kind: LookupImplWitness, arg0: inst7800001D, arg1: specific_interface78000000, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst7800006F: {kind: ImportRefUnloaded, arg0: import_ir_inst17, arg1: entity_name} -// CHECK:STDOUT: inst78000070: {kind: ImplDecl, arg0: impl78000000, arg1: inst_block_empty} -// CHECK:STDOUT: inst78000071: {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst, type: type(inst78000050)} -// CHECK:STDOUT: inst78000072: {kind: FacetAccessType, arg0: inst78000071, type: type(TypeType)} -// CHECK:STDOUT: inst78000073: {kind: ConstType, arg0: inst78000072, type: type(TypeType)} -// CHECK:STDOUT: inst78000074: {kind: ImportRefUnloaded, arg0: import_ir_inst19, arg1: entity_name} -// CHECK:STDOUT: inst78000075: {kind: ImplWitnessTable, arg0: inst_block78000025, arg1: impl78000000} -// CHECK:STDOUT: inst78000076: {kind: ImplWitness, arg0: inst78000075, arg1: specific78000004, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst78000077: {kind: FunctionDecl, arg0: function78000002, arg1: inst_block_empty, type: type(symbolic_constant78000031)} -// CHECK:STDOUT: inst78000078: {kind: FunctionType, arg0: function78000002, arg1: specific78000004, type: type(TypeType)} -// CHECK:STDOUT: inst78000079: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant78000031)} -// CHECK:STDOUT: inst7800007A: {kind: PatternType, arg0: inst78000073, type: type(TypeType)} -// CHECK:STDOUT: inst7800007B: {kind: OutParamPattern, arg0: name(ReturnSlot), type: type(symbolic_constant78000036)} -// CHECK:STDOUT: inst7800007C: {kind: ReturnSlotPattern, arg0: inst7800007B, arg1: inst, type: type(symbolic_constant78000036)} -// CHECK:STDOUT: inst7800007D: {kind: ValueParamPattern, arg0: name(SelfValue), type: type(symbolic_constant78000036)} -// CHECK:STDOUT: inst7800007E: {kind: WrapperBindingPattern, arg0: entity_name7800000B, arg1: inst7800007D, type: type(symbolic_constant78000036)} -// CHECK:STDOUT: inst7800007F: {kind: InitForm, arg0: inst78000073, type: type(inst(FormType))} -// CHECK:STDOUT: inst78000080: {kind: ImportRefLoaded, arg0: import_ir_inst20, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst78000081: {kind: ImportRefLoaded, arg0: import_ir_inst21, arg1: entity_name, type: type(inst(FormType))} -// CHECK:STDOUT: inst78000082: {kind: ImportRefLoaded, arg0: import_ir_inst22, arg1: entity_name, type: type(inst78000050)} -// CHECK:STDOUT: inst78000083: {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst, type: type(inst78000050)} -// CHECK:STDOUT: inst78000084: {kind: FacetAccessType, arg0: inst78000083, type: type(TypeType)} -// CHECK:STDOUT: inst78000085: {kind: ConstType, arg0: inst78000084, type: type(TypeType)} -// CHECK:STDOUT: inst78000086: {kind: PatternType, arg0: inst78000085, type: type(TypeType)} -// CHECK:STDOUT: inst78000087: {kind: InitForm, arg0: inst78000085, type: type(inst(FormType))} -// CHECK:STDOUT: inst78000088: {kind: LookupImplWitness, arg0: inst78000071, arg1: specific_interface78000000, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst78000089: {kind: FunctionType, arg0: function78000001, arg1: specific78000005, type: type(TypeType)} -// CHECK:STDOUT: inst7800008A: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant78000045)} -// CHECK:STDOUT: inst7800008B: {kind: FunctionTypeWithSelfType, arg0: inst78000089, arg1: inst78000071, type: type(TypeType)} -// CHECK:STDOUT: inst7800008C: {kind: ImplWitnessAccess, arg0: inst78000088, arg1: element0, type: type(symbolic_constant78000047)} -// CHECK:STDOUT: inst7800008D: {kind: SpecificImplFunction, arg0: inst7800008C, arg1: specific78000006, type: type(inst(SpecificFunctionType))} -// CHECK:STDOUT: inst7800008E: {kind: InitForm, arg0: inst78000072, type: type(inst(FormType))} -// CHECK:STDOUT: inst7800008F: {kind: PatternType, arg0: inst78000072, type: type(TypeType)} -// CHECK:STDOUT: inst78000090: {kind: RequireCompleteType, arg0: inst78000072, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst78000091: {kind: RequireCompleteType, arg0: inst78000073, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst78000092: {kind: RequireCompleteType, arg0: inst78000085, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst78000093: {kind: RequireCompleteType, arg0: inst78000084, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst78000094: {kind: FunctionType, arg0: function78000001, arg1: specific78000008, type: type(TypeType)} -// CHECK:STDOUT: inst78000095: {kind: FunctionTypeWithSelfType, arg0: inst78000094, arg1: inst78000083, type: type(TypeType)} -// CHECK:STDOUT: inst78000096: {kind: LookupImplWitness, arg0: inst78000083, arg1: specific_interface78000000, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst78000097: {kind: ImplWitnessAccess, arg0: inst78000096, arg1: element0, type: type(symbolic_constant78000058)} -// CHECK:STDOUT: inst78000098: {kind: SpecificImplFunction, arg0: inst78000097, arg1: specific78000009, type: type(inst(SpecificFunctionType))} -// CHECK:STDOUT: inst78000099: {kind: PatternType, arg0: inst78000050, type: type(TypeType)} -// CHECK:STDOUT: inst7800009A: {kind: SymbolicBindingPattern, arg0: entity_name7800000F, type: type(inst78000099)} -// CHECK:STDOUT: inst7800009B: {kind: ImportRefLoaded, arg0: import_ir_inst30, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst7800009C: {kind: ImportRefLoaded, arg0: import_ir_inst31, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst7800009D: {kind: ImportRefLoaded, arg0: import_ir_inst32, arg1: entity_name, type: type(inst78000050)} -// CHECK:STDOUT: inst7800009E: {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst, type: type(inst78000050)} -// CHECK:STDOUT: inst7800009F: {kind: FacetAccessType, arg0: inst7800009E, type: type(TypeType)} -// CHECK:STDOUT: inst780000A0: {kind: ConstType, arg0: inst7800009F, type: type(TypeType)} -// CHECK:STDOUT: inst780000A1: {kind: ImplWitness, arg0: inst78000075, arg1: specific7800000A, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst780000A2: {kind: FunctionType, arg0: function78000002, arg1: specific7800000A, type: type(TypeType)} -// CHECK:STDOUT: inst780000A3: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant78000064)} -// CHECK:STDOUT: inst780000A4: {kind: ImportRefUnloaded, arg0: import_ir_inst39, arg1: entity_name} -// CHECK:STDOUT: inst780000A5: {kind: ImplDecl, arg0: impl78000001, arg1: inst_block_empty} -// CHECK:STDOUT: inst780000A6: {kind: ImportRefLoaded, arg0: import_ir_inst3B, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst780000A7: {kind: ImportRefLoaded, arg0: import_ir_inst3C, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst780000A8: {kind: ImportRefUnloaded, arg0: import_ir_inst3D, arg1: entity_name} -// CHECK:STDOUT: inst780000A9: {kind: ImplDecl, arg0: impl78000002, arg1: inst_block_empty} -// CHECK:STDOUT: inst780000AA: {kind: ImportRefLoaded, arg0: import_ir_inst3F, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst780000AB: {kind: ImportRefLoaded, arg0: import_ir_inst40, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst780000AC: {kind: ImportRefUnloaded, arg0: import_ir_inst41, arg1: entity_name} -// CHECK:STDOUT: inst780000AD: {kind: ImplDecl, arg0: impl78000003, arg1: inst_block_empty} -// CHECK:STDOUT: inst780000AE: {kind: ImportRefLoaded, arg0: import_ir_inst43, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst780000AF: {kind: ImportRefLoaded, arg0: import_ir_inst44, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst780000B0: {kind: ImportRefUnloaded, arg0: import_ir_inst45, arg1: entity_name} -// CHECK:STDOUT: inst780000B1: {kind: ImplDecl, arg0: impl78000004, arg1: inst_block_empty} -// CHECK:STDOUT: inst780000B2: {kind: ImportRefLoaded, arg0: import_ir_inst47, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst780000B3: {kind: ImportRefLoaded, arg0: import_ir_inst48, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst780000B4: {kind: ImportRefLoaded, arg0: import_ir_inst49, arg1: entity_name, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst780000B5: {kind: ImplDecl, arg0: impl78000005, arg1: inst_block_empty} -// CHECK:STDOUT: inst780000B6: {kind: ImportRefUnloaded, arg0: import_ir_inst4B, arg1: entity_name} -// CHECK:STDOUT: inst780000B7: {kind: ImplWitnessTable, arg0: inst_block78000039, arg1: impl78000005} -// CHECK:STDOUT: inst780000B8: {kind: ImplWitness, arg0: inst780000B7, arg1: specific7800000B, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst780000B9: {kind: SymbolicBindingPattern, arg0: entity_name78000013, type: type(inst78000016)} -// CHECK:STDOUT: inst780000BA: {kind: ImportRefLoaded, arg0: import_ir_inst4E, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst780000BB: {kind: ImportRefLoaded, arg0: import_ir_inst4F, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst780000BC: {kind: ImportRefLoaded, arg0: import_ir_inst50, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst780000BD: {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst, type: type(TypeType)} -// CHECK:STDOUT: inst780000BE: {kind: PointerType, arg0: inst780000BD, type: type(TypeType)} -// CHECK:STDOUT: inst780000BF: {kind: ImplWitness, arg0: inst780000B7, arg1: specific7800000C, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst780000C0: {kind: FunctionDecl, arg0: function78000003, arg1: inst_block_empty, type: type(symbolic_constant78000070)} -// CHECK:STDOUT: inst780000C1: {kind: FunctionType, arg0: function78000003, arg1: specific7800000B, type: type(TypeType)} -// CHECK:STDOUT: inst780000C2: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant78000070)} -// CHECK:STDOUT: inst780000C3: {kind: OutParamPattern, arg0: name(ReturnSlot), type: type(symbolic_constant78000074)} -// CHECK:STDOUT: inst780000C4: {kind: ReturnSlotPattern, arg0: inst780000C3, arg1: inst, type: type(symbolic_constant78000074)} -// CHECK:STDOUT: inst780000C5: {kind: ValueParamPattern, arg0: name(SelfValue), type: type(symbolic_constant78000074)} -// CHECK:STDOUT: inst780000C6: {kind: WrapperBindingPattern, arg0: entity_name78000014, arg1: inst780000C5, type: type(symbolic_constant78000074)} -// CHECK:STDOUT: inst780000C7: {kind: InitForm, arg0: inst7800001D, type: type(inst(FormType))} -// CHECK:STDOUT: inst780000C8: {kind: ImportRefLoaded, arg0: import_ir_inst59, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst780000C9: {kind: ImportRefLoaded, arg0: import_ir_inst5A, arg1: entity_name, type: type(inst(FormType))} -// CHECK:STDOUT: inst780000CA: {kind: ImportRefLoaded, arg0: import_ir_inst5B, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst780000CB: {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst, type: type(TypeType)} -// CHECK:STDOUT: inst780000CC: {kind: PointerType, arg0: inst780000CB, type: type(TypeType)} -// CHECK:STDOUT: inst780000CD: {kind: PatternType, arg0: inst780000CC, type: type(TypeType)} -// CHECK:STDOUT: inst780000CE: {kind: InitForm, arg0: inst780000CC, type: type(inst(FormType))} -// CHECK:STDOUT: inst780000CF: {kind: FunctionType, arg0: function78000003, arg1: specific7800000C, type: type(TypeType)} -// CHECK:STDOUT: inst780000D0: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant78000080)} -// CHECK:STDOUT: inst780000D1: {kind: RequireCompleteType, arg0: inst780000BE, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst780000D2: {kind: ImportRefUnloaded, arg0: import_ir_inst63, arg1: entity_name} -// CHECK:STDOUT: inst780000D3: {kind: ImplDecl, arg0: impl78000006, arg1: inst_block_empty} -// CHECK:STDOUT: inst780000D4: {kind: ImportRefLoaded, arg0: import_ir_inst65, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst780000D5: {kind: ImportRefLoaded, arg0: import_ir_inst66, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst780000D6: {kind: ImportRefUnloaded, arg0: import_ir_inst67, arg1: entity_name} -// CHECK:STDOUT: inst780000D7: {kind: ImplDecl, arg0: impl78000007, arg1: inst_block_empty} -// CHECK:STDOUT: inst780000D8: {kind: ImportRefLoaded, arg0: import_ir_inst69, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst780000D9: {kind: ImportRefLoaded, arg0: import_ir_inst6A, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst780000DA: {kind: ImportRefUnloaded, arg0: import_ir_inst6B, arg1: entity_name} -// CHECK:STDOUT: inst780000DB: {kind: ImplDecl, arg0: impl78000008, arg1: inst_block_empty} -// CHECK:STDOUT: inst780000DC: {kind: SymbolicBinding, arg0: entity_name78000016, arg1: inst, type: type(inst78000050)} -// CHECK:STDOUT: inst780000DD: {kind: FacetAccessType, arg0: inst780000DC, type: type(TypeType)} -// CHECK:STDOUT: inst780000DE: {kind: TupleType, arg0: inst_block78000046, type: type(TypeType)} -// CHECK:STDOUT: inst780000DF: {kind: ImportRefUnloaded, arg0: import_ir_inst6D, arg1: entity_name} -// CHECK:STDOUT: inst780000E0: {kind: ImplWitnessTable, arg0: inst_block78000047, arg1: impl78000008} -// CHECK:STDOUT: inst780000E1: {kind: ImplWitness, arg0: inst780000E0, arg1: specific7800000E, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst780000E2: {kind: FunctionDecl, arg0: function78000004, arg1: inst_block_empty, type: type(symbolic_constant78000089)} -// CHECK:STDOUT: inst780000E3: {kind: FunctionType, arg0: function78000004, arg1: specific7800000E, type: type(TypeType)} -// CHECK:STDOUT: inst780000E4: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant78000089)} -// CHECK:STDOUT: inst780000E5: {kind: TupleType, arg0: inst_block78000049, type: type(TypeType)} -// CHECK:STDOUT: inst780000E6: {kind: TupleValue, arg0: inst_block78000048, type: type(inst780000E5)} -// CHECK:STDOUT: inst780000E7: {kind: PatternType, arg0: inst780000DE, type: type(TypeType)} -// CHECK:STDOUT: inst780000E8: {kind: OutParamPattern, arg0: name(ReturnSlot), type: type(symbolic_constant7800008F)} -// CHECK:STDOUT: inst780000E9: {kind: ReturnSlotPattern, arg0: inst780000E8, arg1: inst, type: type(symbolic_constant7800008F)} -// CHECK:STDOUT: inst780000EA: {kind: ValueParamPattern, arg0: name(SelfValue), type: type(symbolic_constant7800008F)} -// CHECK:STDOUT: inst780000EB: {kind: WrapperBindingPattern, arg0: entity_name78000017, arg1: inst780000EA, type: type(symbolic_constant7800008F)} -// CHECK:STDOUT: inst780000EC: {kind: InitForm, arg0: inst780000DE, type: type(inst(FormType))} -// CHECK:STDOUT: inst780000ED: {kind: ImportRefLoaded, arg0: import_ir_inst74, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst780000EE: {kind: ImportRefLoaded, arg0: import_ir_inst75, arg1: entity_name, type: type(inst(FormType))} -// CHECK:STDOUT: inst780000EF: {kind: ImportRefLoaded, arg0: import_ir_inst76, arg1: entity_name, type: type(inst78000050)} -// CHECK:STDOUT: inst780000F0: {kind: ImportRefLoaded, arg0: import_ir_inst77, arg1: entity_name, type: type(inst78000050)} -// CHECK:STDOUT: inst780000F1: {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst, type: type(inst78000050)} -// CHECK:STDOUT: inst780000F2: {kind: FacetAccessType, arg0: inst780000F1, type: type(TypeType)} -// CHECK:STDOUT: inst780000F3: {kind: SymbolicBinding, arg0: entity_name78000016, arg1: inst, type: type(inst78000050)} -// CHECK:STDOUT: inst780000F4: {kind: FacetAccessType, arg0: inst780000F3, type: type(TypeType)} -// CHECK:STDOUT: inst780000F5: {kind: TupleType, arg0: inst_block7800004F, type: type(TypeType)} -// CHECK:STDOUT: inst780000F6: {kind: PatternType, arg0: inst780000F5, type: type(TypeType)} -// CHECK:STDOUT: inst780000F7: {kind: InitForm, arg0: inst780000F5, type: type(inst(FormType))} -// CHECK:STDOUT: inst780000F8: {kind: LookupImplWitness, arg0: inst780000DC, arg1: specific_interface78000000, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst780000F9: {kind: FunctionType, arg0: function78000001, arg1: specific7800000F, type: type(TypeType)} -// CHECK:STDOUT: inst780000FA: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant780000A3)} -// CHECK:STDOUT: inst780000FB: {kind: FunctionTypeWithSelfType, arg0: inst780000F9, arg1: inst780000DC, type: type(TypeType)} -// CHECK:STDOUT: inst780000FC: {kind: ImplWitnessAccess, arg0: inst780000F8, arg1: element0, type: type(symbolic_constant780000A5)} -// CHECK:STDOUT: inst780000FD: {kind: SpecificImplFunction, arg0: inst780000FC, arg1: specific78000010, type: type(inst(SpecificFunctionType))} -// CHECK:STDOUT: inst780000FE: {kind: InitForm, arg0: inst780000DD, type: type(inst(FormType))} -// CHECK:STDOUT: inst780000FF: {kind: PatternType, arg0: inst780000DD, type: type(TypeType)} -// CHECK:STDOUT: inst78000100: {kind: RequireCompleteType, arg0: inst780000DD, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst78000101: {kind: RequireCompleteType, arg0: inst780000DE, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst78000102: {kind: RequireCompleteType, arg0: inst780000F5, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst78000103: {kind: RequireCompleteType, arg0: inst780000F2, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst78000104: {kind: FunctionType, arg0: function78000001, arg1: specific78000012, type: type(TypeType)} -// CHECK:STDOUT: inst78000105: {kind: FunctionTypeWithSelfType, arg0: inst78000104, arg1: inst780000F1, type: type(TypeType)} -// CHECK:STDOUT: inst78000106: {kind: LookupImplWitness, arg0: inst780000F1, arg1: specific_interface78000000, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst78000107: {kind: ImplWitnessAccess, arg0: inst78000106, arg1: element0, type: type(symbolic_constant780000BC)} -// CHECK:STDOUT: inst78000108: {kind: SpecificImplFunction, arg0: inst78000107, arg1: specific78000013, type: type(inst(SpecificFunctionType))} -// CHECK:STDOUT: inst78000109: {kind: RequireCompleteType, arg0: inst780000F4, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst7800010A: {kind: FunctionType, arg0: function78000001, arg1: specific78000014, type: type(TypeType)} -// CHECK:STDOUT: inst7800010B: {kind: FunctionTypeWithSelfType, arg0: inst7800010A, arg1: inst780000F3, type: type(TypeType)} -// CHECK:STDOUT: inst7800010C: {kind: LookupImplWitness, arg0: inst780000F3, arg1: specific_interface78000000, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst7800010D: {kind: ImplWitnessAccess, arg0: inst7800010C, arg1: element0, type: type(symbolic_constant780000C2)} -// CHECK:STDOUT: inst7800010E: {kind: SpecificImplFunction, arg0: inst7800010D, arg1: specific78000015, type: type(inst(SpecificFunctionType))} -// CHECK:STDOUT: inst7800010F: {kind: SymbolicBindingPattern, arg0: entity_name7800001E, type: type(inst78000099)} -// CHECK:STDOUT: inst78000110: {kind: SymbolicBindingPattern, arg0: entity_name7800001F, type: type(inst78000099)} -// CHECK:STDOUT: inst78000111: {kind: ImportRefLoaded, arg0: import_ir_inst8E, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst78000112: {kind: ImportRefLoaded, arg0: import_ir_inst8F, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst78000113: {kind: ImportRefLoaded, arg0: import_ir_inst90, arg1: entity_name, type: type(inst78000050)} -// CHECK:STDOUT: inst78000114: {kind: ImportRefLoaded, arg0: import_ir_inst91, arg1: entity_name, type: type(inst78000050)} -// CHECK:STDOUT: inst78000115: {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst, type: type(inst78000050)} -// CHECK:STDOUT: inst78000116: {kind: SymbolicBinding, arg0: entity_name78000016, arg1: inst, type: type(inst78000050)} -// CHECK:STDOUT: inst78000117: {kind: TupleValue, arg0: inst_block7800005C, type: type(inst780000E5)} -// CHECK:STDOUT: inst78000118: {kind: FacetAccessType, arg0: inst78000115, type: type(TypeType)} -// CHECK:STDOUT: inst78000119: {kind: FacetAccessType, arg0: inst78000116, type: type(TypeType)} -// CHECK:STDOUT: inst7800011A: {kind: TupleType, arg0: inst_block7800005D, type: type(TypeType)} -// CHECK:STDOUT: inst7800011B: {kind: ImplWitness, arg0: inst780000E0, arg1: specific78000016, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst7800011C: {kind: FunctionType, arg0: function78000004, arg1: specific78000016, type: type(TypeType)} -// CHECK:STDOUT: inst7800011D: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant780000D4)} -// CHECK:STDOUT: inst7800011E: {kind: ImportRefUnloaded, arg0: import_ir_inst9B, arg1: entity_name} -// CHECK:STDOUT: inst7800011F: {kind: ImplDecl, arg0: impl78000009, arg1: inst_block_empty} -// CHECK:STDOUT: inst78000120: {kind: SymbolicBinding, arg0: entity_name78000020, arg1: inst, type: type(inst78000050)} -// CHECK:STDOUT: inst78000121: {kind: FacetAccessType, arg0: inst78000120, type: type(TypeType)} -// CHECK:STDOUT: inst78000122: {kind: TupleType, arg0: inst_block78000062, type: type(TypeType)} -// CHECK:STDOUT: inst78000123: {kind: ImportRefUnloaded, arg0: import_ir_inst9D, arg1: entity_name} -// CHECK:STDOUT: inst78000124: {kind: ImplWitnessTable, arg0: inst_block78000063, arg1: impl78000009} -// CHECK:STDOUT: inst78000125: {kind: ImplWitness, arg0: inst78000124, arg1: specific78000017, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst78000126: {kind: FunctionDecl, arg0: function78000005, arg1: inst_block_empty, type: type(symbolic_constant780000DC)} -// CHECK:STDOUT: inst78000127: {kind: FunctionType, arg0: function78000005, arg1: specific78000017, type: type(TypeType)} -// CHECK:STDOUT: inst78000128: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant780000DC)} -// CHECK:STDOUT: inst78000129: {kind: TupleType, arg0: inst_block78000065, type: type(TypeType)} -// CHECK:STDOUT: inst7800012A: {kind: TupleValue, arg0: inst_block78000064, type: type(inst78000129)} -// CHECK:STDOUT: inst7800012B: {kind: PatternType, arg0: inst78000122, type: type(TypeType)} -// CHECK:STDOUT: inst7800012C: {kind: OutParamPattern, arg0: name(ReturnSlot), type: type(symbolic_constant780000E2)} -// CHECK:STDOUT: inst7800012D: {kind: ReturnSlotPattern, arg0: inst7800012C, arg1: inst, type: type(symbolic_constant780000E2)} -// CHECK:STDOUT: inst7800012E: {kind: ValueParamPattern, arg0: name(SelfValue), type: type(symbolic_constant780000E2)} -// CHECK:STDOUT: inst7800012F: {kind: WrapperBindingPattern, arg0: entity_name78000021, arg1: inst7800012E, type: type(symbolic_constant780000E2)} -// CHECK:STDOUT: inst78000130: {kind: InitForm, arg0: inst78000122, type: type(inst(FormType))} -// CHECK:STDOUT: inst78000131: {kind: ImportRefLoaded, arg0: import_ir_instA4, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst78000132: {kind: ImportRefLoaded, arg0: import_ir_instA5, arg1: entity_name, type: type(inst(FormType))} -// CHECK:STDOUT: inst78000133: {kind: ImportRefLoaded, arg0: import_ir_instA6, arg1: entity_name, type: type(inst78000050)} -// CHECK:STDOUT: inst78000134: {kind: ImportRefLoaded, arg0: import_ir_instA7, arg1: entity_name, type: type(inst78000050)} -// CHECK:STDOUT: inst78000135: {kind: ImportRefLoaded, arg0: import_ir_instA8, arg1: entity_name, type: type(inst78000050)} -// CHECK:STDOUT: inst78000136: {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst, type: type(inst78000050)} -// CHECK:STDOUT: inst78000137: {kind: FacetAccessType, arg0: inst78000136, type: type(TypeType)} -// CHECK:STDOUT: inst78000138: {kind: SymbolicBinding, arg0: entity_name78000016, arg1: inst, type: type(inst78000050)} -// CHECK:STDOUT: inst78000139: {kind: FacetAccessType, arg0: inst78000138, type: type(TypeType)} -// CHECK:STDOUT: inst7800013A: {kind: SymbolicBinding, arg0: entity_name78000020, arg1: inst, type: type(inst78000050)} -// CHECK:STDOUT: inst7800013B: {kind: FacetAccessType, arg0: inst7800013A, type: type(TypeType)} -// CHECK:STDOUT: inst7800013C: {kind: TupleType, arg0: inst_block7800006B, type: type(TypeType)} -// CHECK:STDOUT: inst7800013D: {kind: PatternType, arg0: inst7800013C, type: type(TypeType)} -// CHECK:STDOUT: inst7800013E: {kind: InitForm, arg0: inst7800013C, type: type(inst(FormType))} -// CHECK:STDOUT: inst7800013F: {kind: LookupImplWitness, arg0: inst78000120, arg1: specific_interface78000000, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst78000140: {kind: FunctionType, arg0: function78000001, arg1: specific78000018, type: type(TypeType)} -// CHECK:STDOUT: inst78000141: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant780000FB)} -// CHECK:STDOUT: inst78000142: {kind: FunctionTypeWithSelfType, arg0: inst78000140, arg1: inst78000120, type: type(TypeType)} -// CHECK:STDOUT: inst78000143: {kind: ImplWitnessAccess, arg0: inst7800013F, arg1: element0, type: type(symbolic_constant780000FD)} -// CHECK:STDOUT: inst78000144: {kind: SpecificImplFunction, arg0: inst78000143, arg1: specific78000019, type: type(inst(SpecificFunctionType))} -// CHECK:STDOUT: inst78000145: {kind: InitForm, arg0: inst78000121, type: type(inst(FormType))} -// CHECK:STDOUT: inst78000146: {kind: PatternType, arg0: inst78000121, type: type(TypeType)} -// CHECK:STDOUT: inst78000147: {kind: RequireCompleteType, arg0: inst78000121, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst78000148: {kind: RequireCompleteType, arg0: inst78000122, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst78000149: {kind: RequireCompleteType, arg0: inst7800013C, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst7800014A: {kind: RequireCompleteType, arg0: inst78000137, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst7800014B: {kind: FunctionType, arg0: function78000001, arg1: specific7800001B, type: type(TypeType)} -// CHECK:STDOUT: inst7800014C: {kind: FunctionTypeWithSelfType, arg0: inst7800014B, arg1: inst78000136, type: type(TypeType)} -// CHECK:STDOUT: inst7800014D: {kind: LookupImplWitness, arg0: inst78000136, arg1: specific_interface78000000, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst7800014E: {kind: ImplWitnessAccess, arg0: inst7800014D, arg1: element0, type: type(symbolic_constant7800011A)} -// CHECK:STDOUT: inst7800014F: {kind: SpecificImplFunction, arg0: inst7800014E, arg1: specific7800001C, type: type(inst(SpecificFunctionType))} -// CHECK:STDOUT: inst78000150: {kind: RequireCompleteType, arg0: inst78000139, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst78000151: {kind: FunctionType, arg0: function78000001, arg1: specific7800001D, type: type(TypeType)} -// CHECK:STDOUT: inst78000152: {kind: FunctionTypeWithSelfType, arg0: inst78000151, arg1: inst78000138, type: type(TypeType)} -// CHECK:STDOUT: inst78000153: {kind: LookupImplWitness, arg0: inst78000138, arg1: specific_interface78000000, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst78000154: {kind: ImplWitnessAccess, arg0: inst78000153, arg1: element0, type: type(symbolic_constant78000120)} -// CHECK:STDOUT: inst78000155: {kind: SpecificImplFunction, arg0: inst78000154, arg1: specific7800001E, type: type(inst(SpecificFunctionType))} -// CHECK:STDOUT: inst78000156: {kind: RequireCompleteType, arg0: inst7800013B, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst78000157: {kind: FunctionType, arg0: function78000001, arg1: specific7800001F, type: type(TypeType)} -// CHECK:STDOUT: inst78000158: {kind: FunctionTypeWithSelfType, arg0: inst78000157, arg1: inst7800013A, type: type(TypeType)} -// CHECK:STDOUT: inst78000159: {kind: LookupImplWitness, arg0: inst7800013A, arg1: specific_interface78000000, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst7800015A: {kind: ImplWitnessAccess, arg0: inst78000159, arg1: element0, type: type(symbolic_constant78000126)} -// CHECK:STDOUT: inst7800015B: {kind: SpecificImplFunction, arg0: inst7800015A, arg1: specific78000020, type: type(inst(SpecificFunctionType))} -// CHECK:STDOUT: inst7800015C: {kind: SymbolicBindingPattern, arg0: entity_name7800002B, type: type(inst78000099)} -// CHECK:STDOUT: inst7800015D: {kind: SymbolicBindingPattern, arg0: entity_name7800002C, type: type(inst78000099)} -// CHECK:STDOUT: inst7800015E: {kind: SymbolicBindingPattern, arg0: entity_name7800002D, type: type(inst78000099)} -// CHECK:STDOUT: inst7800015F: {kind: ImportRefLoaded, arg0: import_ir_instC8, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst78000160: {kind: ImportRefLoaded, arg0: import_ir_instC9, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst78000161: {kind: ImportRefLoaded, arg0: import_ir_instCA, arg1: entity_name, type: type(inst78000050)} -// CHECK:STDOUT: inst78000162: {kind: ImportRefLoaded, arg0: import_ir_instCB, arg1: entity_name, type: type(inst78000050)} -// CHECK:STDOUT: inst78000163: {kind: ImportRefLoaded, arg0: import_ir_instCC, arg1: entity_name, type: type(inst78000050)} -// CHECK:STDOUT: inst78000164: {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst, type: type(inst78000050)} -// CHECK:STDOUT: inst78000165: {kind: SymbolicBinding, arg0: entity_name78000016, arg1: inst, type: type(inst78000050)} -// CHECK:STDOUT: inst78000166: {kind: SymbolicBinding, arg0: entity_name78000020, arg1: inst, type: type(inst78000050)} -// CHECK:STDOUT: inst78000167: {kind: TupleValue, arg0: inst_block7800007A, type: type(inst78000129)} -// CHECK:STDOUT: inst78000168: {kind: FacetAccessType, arg0: inst78000164, type: type(TypeType)} -// CHECK:STDOUT: inst78000169: {kind: FacetAccessType, arg0: inst78000165, type: type(TypeType)} -// CHECK:STDOUT: inst7800016A: {kind: FacetAccessType, arg0: inst78000166, type: type(TypeType)} -// CHECK:STDOUT: inst7800016B: {kind: TupleType, arg0: inst_block7800007B, type: type(TypeType)} -// CHECK:STDOUT: inst7800016C: {kind: ImplWitness, arg0: inst78000124, arg1: specific78000021, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst7800016D: {kind: FunctionType, arg0: function78000005, arg1: specific78000021, type: type(TypeType)} -// CHECK:STDOUT: inst7800016E: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant7800013C)} -// CHECK:STDOUT: inst7800016F: {kind: LookupImplWitness, arg0: inst7800001D, arg1: specific_interface78000000, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst78000170: {kind: RequireSpecificDefinition, arg0: specific7800000B, type: type(inst(RequireSpecificDefinitionType))} -// CHECK:STDOUT: inst78000171: {kind: RequireSpecificDefinition, arg0: specific7800000B, type: type(inst(RequireSpecificDefinitionType))} -// CHECK:STDOUT: inst78000172: {kind: RequireSpecificDefinition, arg0: specific78000022, type: type(inst(RequireSpecificDefinitionType))} -// CHECK:STDOUT: inst78000173: {kind: FacetValue, arg0: inst7800001D, arg1: inst_block78000082, type: type(inst78000050)} -// CHECK:STDOUT: inst78000174: {kind: FunctionType, arg0: function78000001, arg1: specific78000023, type: type(TypeType)} -// CHECK:STDOUT: inst78000175: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant78000143)} -// CHECK:STDOUT: inst78000176: {kind: FunctionTypeWithSelfType, arg0: inst78000174, arg1: inst78000173, type: type(TypeType)} -// CHECK:STDOUT: inst78000177: {kind: ImplWitnessAccess, arg0: inst7800016F, arg1: element0, type: type(symbolic_constant7800014A)} -// CHECK:STDOUT: inst78000178: {kind: ImplWitnessAccess, arg0: inst7800016F, arg1: element0, type: type(symbolic_constant78000145)} -// CHECK:STDOUT: inst78000179: {kind: LookupImplWitness, arg0: inst7800001E, arg1: specific_interface78000000, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst7800017A: {kind: FacetValue, arg0: inst7800001E, arg1: inst_block78000085, type: type(inst78000050)} -// CHECK:STDOUT: inst7800017B: {kind: FunctionType, arg0: function78000001, arg1: specific78000024, type: type(TypeType)} -// CHECK:STDOUT: inst7800017C: {kind: FunctionTypeWithSelfType, arg0: inst7800017B, arg1: inst7800017A, type: type(TypeType)} -// CHECK:STDOUT: inst7800017D: {kind: ImplWitnessAccess, arg0: inst78000179, arg1: element0, type: type(symbolic_constant7800014A)} -// CHECK:STDOUT: inst7800017E: {kind: BoundMethod, arg0: inst78000048, arg1: inst78000177, type: type(inst(BoundMethodType))} -// CHECK:STDOUT: inst7800017F: {kind: LookupImplWitness, arg0: inst7800001D, arg1: specific_interface78000000, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst78000180: {kind: RequireSpecificDefinition, arg0: specific7800000B, type: type(inst(RequireSpecificDefinitionType))} -// CHECK:STDOUT: inst78000181: {kind: FacetValue, arg0: inst7800001D, arg1: inst_block78000082, type: type(inst78000050)} -// CHECK:STDOUT: inst78000182: {kind: Converted, arg0: inst7800001D, arg1: inst78000181, type: type(inst78000050)} -// CHECK:STDOUT: inst78000183: {kind: SpecificImplFunction, arg0: inst78000177, arg1: specific78000025, type: type(inst(SpecificFunctionType))} -// CHECK:STDOUT: inst78000184: {kind: SpecificImplFunction, arg0: inst78000178, arg1: specific78000025, type: type(inst(SpecificFunctionType))} -// CHECK:STDOUT: inst78000185: {kind: SpecificImplFunction, arg0: inst7800017D, arg1: specific78000026, type: type(inst(SpecificFunctionType))} -// CHECK:STDOUT: inst78000186: {kind: BoundMethod, arg0: inst78000048, arg1: inst78000183, type: type(inst(BoundMethodType))} -// CHECK:STDOUT: inst78000187: {kind: Call, arg0: inst78000186, arg1: inst_block78000089, type: type(symbolic_constant78000004)} -// CHECK:STDOUT: inst78000188: {kind: InPlaceInit, arg0: inst78000187, arg1: inst7800004C, type: type(symbolic_constant78000004)} -// CHECK:STDOUT: inst78000189: {kind: TupleAccess, arg0: inst7800003C, arg1: element1, type: type(inst78000026)} -// CHECK:STDOUT: inst7800018A: {kind: TupleInit, arg0: inst_block_empty, arg1: inst78000189, type: type(inst78000026)} -// CHECK:STDOUT: inst7800018B: {kind: Converted, arg0: inst78000049, arg1: inst7800018A, type: type(inst78000026)} -// CHECK:STDOUT: inst7800018C: {kind: InPlaceInit, arg0: inst7800018B, arg1: inst78000189, type: type(inst78000026)} -// CHECK:STDOUT: inst7800018D: {kind: TupleInit, arg0: inst_block7800008A, arg1: inst7800003C, type: type(symbolic_constant7800000A)} -// CHECK:STDOUT: inst7800018E: {kind: Converted, arg0: inst7800004A, arg1: inst7800018D, type: type(symbolic_constant7800000A)} -// CHECK:STDOUT: inst7800018F: {kind: ReturnExpr, arg0: inst7800018E, arg1: inst7800003C} +// CHECK:STDOUT: inst78000017: {kind: SymbolicBindingPattern, arg0: entity_name78000001, type: type(inst78000016)} +// CHECK:STDOUT: inst78000018: {kind: SymbolicBindingPattern, arg0: entity_name78000001, type: type(inst78000016)} +// CHECK:STDOUT: inst78000019: {kind: SymbolicBindingPattern, arg0: entity_name78000001, type: type(inst78000016)} +// CHECK:STDOUT: inst7800001A: {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst, type: type(TypeType)} +// CHECK:STDOUT: inst7800001B: {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst, type: type(TypeType)} +// CHECK:STDOUT: inst7800001C: {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst, type: type(TypeType)} +// CHECK:STDOUT: inst7800001D: {kind: NameRef, arg0: name1, arg1: inst7800001A, type: type(TypeType)} +// CHECK:STDOUT: inst7800001E: {kind: PointerType, arg0: inst7800001D, type: type(TypeType)} +// CHECK:STDOUT: inst7800001F: {kind: PointerType, arg0: inst7800001B, type: type(TypeType)} +// CHECK:STDOUT: inst78000020: {kind: PointerType, arg0: inst7800001C, type: type(TypeType)} +// CHECK:STDOUT: inst78000021: {kind: PatternType, arg0: inst7800001F, type: type(TypeType)} +// CHECK:STDOUT: inst78000022: {kind: ValueParamPattern, arg0: name2, type: type(symbolic_constant78000009)} +// CHECK:STDOUT: inst78000023: {kind: ValueParamPattern, arg0: name2, type: type(symbolic_constant78000007)} +// CHECK:STDOUT: inst78000024: {kind: PatternType, arg0: inst78000020, type: type(TypeType)} +// CHECK:STDOUT: inst78000025: {kind: ValueParamPattern, arg0: name2, type: type(symbolic_constant78000009)} +// CHECK:STDOUT: inst78000026: {kind: WrapperBindingPattern, arg0: entity_name78000002, arg1: inst78000022, type: type(symbolic_constant78000009)} +// CHECK:STDOUT: inst78000027: {kind: WrapperBindingPattern, arg0: entity_name78000002, arg1: inst78000023, type: type(symbolic_constant78000007)} +// CHECK:STDOUT: inst78000028: {kind: WrapperBindingPattern, arg0: entity_name78000002, arg1: inst78000025, type: type(symbolic_constant78000009)} +// CHECK:STDOUT: inst78000029: {kind: ValueBinding, arg0: entity_name78000002, arg1: inst78000044, type: type(symbolic_constant78000006)} +// CHECK:STDOUT: inst7800002A: {kind: NameRef, arg0: name1, arg1: inst7800001A, type: type(TypeType)} +// CHECK:STDOUT: inst7800002B: {kind: PointerType, arg0: inst7800002A, type: type(TypeType)} +// CHECK:STDOUT: inst7800002C: {kind: TupleType, arg0: inst_block_empty, type: type(TypeType)} +// CHECK:STDOUT: inst7800002D: {kind: TupleLiteral, arg0: inst_block_empty, type: type(inst7800002C)} +// CHECK:STDOUT: inst7800002E: {kind: TupleValue, arg0: inst_block_empty, type: type(inst7800002C)} +// CHECK:STDOUT: inst7800002F: {kind: TupleType, arg0: inst_block7800000A, type: type(TypeType)} +// CHECK:STDOUT: inst78000030: {kind: TupleLiteral, arg0: inst_block78000009, type: type(inst7800002F)} +// CHECK:STDOUT: inst78000031: {kind: TupleValue, arg0: inst_block7800000B, type: type(inst7800002F)} +// CHECK:STDOUT: inst78000032: {kind: TupleValue, arg0: inst_block7800000C, type: type(inst7800002F)} +// CHECK:STDOUT: inst78000033: {kind: PointerType, arg0: inst7800002F, type: type(TypeType)} +// CHECK:STDOUT: inst78000034: {kind: Converted, arg0: inst7800002E, arg1: inst7800002C, type: type(TypeType)} +// CHECK:STDOUT: inst78000035: {kind: TupleType, arg0: inst_block7800000E, type: type(TypeType)} +// CHECK:STDOUT: inst78000036: {kind: Converted, arg0: inst78000030, arg1: inst78000035, type: type(TypeType)} +// CHECK:STDOUT: inst78000037: {kind: TupleType, arg0: inst_block7800000F, type: type(TypeType)} +// CHECK:STDOUT: inst78000038: {kind: InitForm, arg0: inst78000036, type: type(inst(FormType))} +// CHECK:STDOUT: inst78000039: {kind: InitForm, arg0: inst78000035, type: type(inst(FormType))} +// CHECK:STDOUT: inst7800003A: {kind: InitForm, arg0: inst78000037, type: type(inst(FormType))} +// CHECK:STDOUT: inst7800003B: {kind: PatternType, arg0: inst78000035, type: type(TypeType)} +// CHECK:STDOUT: inst7800003C: {kind: OutParamPattern, arg0: name(ReturnSlot), type: type(symbolic_constant78000015)} +// CHECK:STDOUT: inst7800003D: {kind: OutParamPattern, arg0: name(ReturnSlot), type: type(symbolic_constant78000013)} +// CHECK:STDOUT: inst7800003E: {kind: PatternType, arg0: inst78000037, type: type(TypeType)} +// CHECK:STDOUT: inst7800003F: {kind: OutParamPattern, arg0: name(ReturnSlot), type: type(symbolic_constant78000015)} +// CHECK:STDOUT: inst78000040: {kind: ReturnSlotPattern, arg0: inst7800003C, arg1: inst78000036, type: type(symbolic_constant78000015)} +// CHECK:STDOUT: inst78000041: {kind: ReturnSlotPattern, arg0: inst7800003D, arg1: inst78000035, type: type(symbolic_constant78000013)} +// CHECK:STDOUT: inst78000042: {kind: ReturnSlotPattern, arg0: inst7800003F, arg1: inst78000037, type: type(symbolic_constant78000015)} +// CHECK:STDOUT: inst78000043: {kind: SpliceBlock, arg0: inst_block78000005, arg1: inst78000015, type: type(TypeType)} +// CHECK:STDOUT: inst78000044: {kind: ValueParam, arg0: call_param0, arg1: name2, type: type(symbolic_constant78000006)} +// CHECK:STDOUT: inst78000045: {kind: SpliceBlock, arg0: inst_block78000007, arg1: inst7800001E, type: type(TypeType)} +// CHECK:STDOUT: inst78000046: {kind: OutParam, arg0: call_param1, arg1: name(ReturnSlot), type: type(symbolic_constant78000010)} +// CHECK:STDOUT: inst78000047: {kind: ReturnSlot, arg0: inst78000035, arg1: inst78000046, type: type(symbolic_constant78000010)} +// CHECK:STDOUT: inst78000048: {kind: FunctionDecl, arg0: function78000000, arg1: inst_block78000013, type: type(inst78000049)} +// CHECK:STDOUT: inst78000049: {kind: FunctionType, arg0: function78000000, arg1: specific, type: type(TypeType)} +// CHECK:STDOUT: inst7800004A: {kind: StructValue, arg0: inst_block_empty, type: type(inst78000049)} +// CHECK:STDOUT: inst7800004B: {kind: RequireCompleteType, arg0: inst7800001F, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst7800004C: {kind: RequireCompleteType, arg0: inst7800001F, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst7800004D: {kind: RequireCompleteType, arg0: inst78000020, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst7800004E: {kind: PointerType, arg0: inst78000035, type: type(TypeType)} +// CHECK:STDOUT: inst7800004F: {kind: RequireCompleteType, arg0: inst78000035, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000050: {kind: RequireCompleteType, arg0: inst78000035, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000051: {kind: RequireCompleteType, arg0: inst78000037, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000052: {kind: NameRef, arg0: name2, arg1: inst78000029, type: type(symbolic_constant78000006)} +// CHECK:STDOUT: inst78000053: {kind: TupleLiteral, arg0: inst_block_empty, type: type(inst7800002C)} +// CHECK:STDOUT: inst78000054: {kind: TupleLiteral, arg0: inst_block78000019, type: type(symbolic_constant78000010)} +// CHECK:STDOUT: inst78000055: {kind: RequireCompleteType, arg0: inst78000035, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000056: {kind: TupleAccess, arg0: inst78000046, arg1: element0, type: type(symbolic_constant78000006)} +// CHECK:STDOUT: inst78000057: {kind: RequireCompleteType, arg0: inst7800001F, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000058: {kind: ImportRefLoaded, arg0: import_ir_inst0, arg1: entity_name78000003, type: type(TypeType)} +// CHECK:STDOUT: inst78000059: {kind: InterfaceDecl, arg0: interface78000000, arg1: inst_block_empty, type: type(TypeType)} +// CHECK:STDOUT: inst7800005A: {kind: FacetType, arg0: facet_type78000001, type: type(TypeType)} +// CHECK:STDOUT: inst7800005B: {kind: InterfaceWithSelfDecl, arg0: interface78000000} +// CHECK:STDOUT: inst7800005C: {kind: SymbolicBinding, arg0: entity_name78000004, arg1: inst, type: type(inst7800005A)} +// CHECK:STDOUT: inst7800005D: {kind: ImportRefLoaded, arg0: import_ir_inst3, arg1: entity_name, type: type(inst78000084)} +// CHECK:STDOUT: inst7800005E: {kind: ImportRefUnloaded, arg0: import_ir_inst4, arg1: entity_name78000005} +// CHECK:STDOUT: inst7800005F: {kind: ImportRefLoaded, arg0: import_ir_inst5, arg1: entity_name, type: type(inst7800005A)} +// CHECK:STDOUT: inst78000060: {kind: FunctionDecl, arg0: function78000001, arg1: inst_block_empty, type: type(symbolic_constant7800001F)} +// CHECK:STDOUT: inst78000061: {kind: FunctionType, arg0: function78000001, arg1: specific78000001, type: type(TypeType)} +// CHECK:STDOUT: inst78000062: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant7800001F)} +// CHECK:STDOUT: inst78000063: {kind: FacetAccessType, arg0: inst7800005C, type: type(TypeType)} +// CHECK:STDOUT: inst78000064: {kind: PatternType, arg0: inst78000063, type: type(TypeType)} +// CHECK:STDOUT: inst78000065: {kind: OutParamPattern, arg0: name(ReturnSlot), type: type(symbolic_constant78000023)} +// CHECK:STDOUT: inst78000066: {kind: ImportRefLoaded, arg0: import_ir_inst7, arg1: entity_name, type: type(symbolic_constant78000023)} +// CHECK:STDOUT: inst78000067: {kind: ReturnSlotPattern, arg0: inst78000065, arg1: inst, type: type(symbolic_constant78000023)} +// CHECK:STDOUT: inst78000068: {kind: ValueParamPattern, arg0: name(SelfValue), type: type(symbolic_constant78000023)} +// CHECK:STDOUT: inst78000069: {kind: ImportRefLoaded, arg0: import_ir_inst8, arg1: entity_name, type: type(symbolic_constant78000023)} +// CHECK:STDOUT: inst7800006A: {kind: WrapperBindingPattern, arg0: entity_name78000007, arg1: inst78000068, type: type(symbolic_constant78000023)} +// CHECK:STDOUT: inst7800006B: {kind: ImportRefLoaded, arg0: import_ir_inst9, arg1: entity_name, type: type(symbolic_constant78000023)} +// CHECK:STDOUT: inst7800006C: {kind: InitForm, arg0: inst78000063, type: type(inst(FormType))} +// CHECK:STDOUT: inst7800006D: {kind: ImportRefLoaded, arg0: import_ir_instA, arg1: entity_name, type: type(symbolic_constant78000023)} +// CHECK:STDOUT: inst7800006E: {kind: ImportRefLoaded, arg0: import_ir_instB, arg1: entity_name, type: type(symbolic_constant78000028)} +// CHECK:STDOUT: inst7800006F: {kind: ImportRefLoaded, arg0: import_ir_instC, arg1: entity_name, type: type(symbolic_constant78000028)} +// CHECK:STDOUT: inst78000070: {kind: ImportRefLoaded, arg0: import_ir_instD, arg1: entity_name, type: type(symbolic_constant78000028)} +// CHECK:STDOUT: inst78000071: {kind: ImportRefLoaded, arg0: import_ir_instE, arg1: entity_name, type: type(symbolic_constant78000028)} +// CHECK:STDOUT: inst78000072: {kind: ImportRefLoaded, arg0: import_ir_instF, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst78000073: {kind: ImportRefLoaded, arg0: import_ir_inst10, arg1: entity_name, type: type(inst(FormType))} +// CHECK:STDOUT: inst78000074: {kind: ImportRefLoaded, arg0: import_ir_inst11, arg1: entity_name, type: type(symbolic_constant78000028)} +// CHECK:STDOUT: inst78000075: {kind: ImportRefLoaded, arg0: import_ir_inst12, arg1: entity_name, type: type(inst7800005A)} +// CHECK:STDOUT: inst78000076: {kind: SymbolicBinding, arg0: entity_name78000004, arg1: inst, type: type(inst7800005A)} +// CHECK:STDOUT: inst78000077: {kind: FacetAccessType, arg0: inst78000076, type: type(TypeType)} +// CHECK:STDOUT: inst78000078: {kind: PatternType, arg0: inst78000077, type: type(TypeType)} +// CHECK:STDOUT: inst78000079: {kind: ValueParamPattern, arg0: name(SelfValue), type: type(symbolic_constant7800003A)} +// CHECK:STDOUT: inst7800007A: {kind: WrapperBindingPattern, arg0: entity_name78000007, arg1: inst78000079, type: type(symbolic_constant7800003A)} +// CHECK:STDOUT: inst7800007B: {kind: InitForm, arg0: inst78000077, type: type(inst(FormType))} +// CHECK:STDOUT: inst7800007C: {kind: OutParamPattern, arg0: name(ReturnSlot), type: type(symbolic_constant7800003A)} +// CHECK:STDOUT: inst7800007D: {kind: ReturnSlotPattern, arg0: inst7800007C, arg1: inst, type: type(symbolic_constant7800003A)} +// CHECK:STDOUT: inst7800007E: {kind: ImportRefLoaded, arg0: import_ir_inst1B, arg1: entity_name, type: type(symbolic_constant78000023)} +// CHECK:STDOUT: inst7800007F: {kind: ImportRefLoaded, arg0: import_ir_inst1C, arg1: entity_name, type: type(symbolic_constant78000023)} +// CHECK:STDOUT: inst78000080: {kind: SymbolicBinding, arg0: entity_name78000004, arg1: inst, type: type(inst7800005A)} +// CHECK:STDOUT: inst78000081: {kind: FunctionType, arg0: function78000001, arg1: specific78000003, type: type(TypeType)} +// CHECK:STDOUT: inst78000082: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant78000043)} +// CHECK:STDOUT: inst78000083: {kind: ImportRefUnloaded, arg0: import_ir_inst20, arg1: entity_name} +// CHECK:STDOUT: inst78000084: {kind: AssociatedEntityType, arg0: interface78000000, arg1: specific, type: type(TypeType)} +// CHECK:STDOUT: inst78000085: {kind: ImportRefLoaded, arg0: import_ir_inst21, arg1: entity_name, type: type(symbolic_constant78000025)} +// CHECK:STDOUT: inst78000086: {kind: AssociatedEntity, arg0: element0, arg1: inst78000085, type: type(inst78000084)} +// CHECK:STDOUT: inst78000087: {kind: LookupImplWitness, arg0: inst7800001F, arg1: specific_interface78000000, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000088: {kind: ImportRefUnloaded, arg0: import_ir_inst22, arg1: entity_name} +// CHECK:STDOUT: inst78000089: {kind: ImplDecl, arg0: impl78000000, arg1: inst_block_empty} +// CHECK:STDOUT: inst7800008A: {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst, type: type(inst7800005A)} +// CHECK:STDOUT: inst7800008B: {kind: FacetAccessType, arg0: inst7800008A, type: type(TypeType)} +// CHECK:STDOUT: inst7800008C: {kind: ConstType, arg0: inst7800008B, type: type(TypeType)} +// CHECK:STDOUT: inst7800008D: {kind: ImportRefUnloaded, arg0: import_ir_inst24, arg1: entity_name} +// CHECK:STDOUT: inst7800008E: {kind: ImplWitnessTable, arg0: inst_block78000025, arg1: impl78000000} +// CHECK:STDOUT: inst7800008F: {kind: ImplWitness, arg0: inst7800008E, arg1: specific78000004, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000090: {kind: FunctionDecl, arg0: function78000002, arg1: inst_block_empty, type: type(symbolic_constant7800004B)} +// CHECK:STDOUT: inst78000091: {kind: FunctionType, arg0: function78000002, arg1: specific78000004, type: type(TypeType)} +// CHECK:STDOUT: inst78000092: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant7800004B)} +// CHECK:STDOUT: inst78000093: {kind: PatternType, arg0: inst7800008C, type: type(TypeType)} +// CHECK:STDOUT: inst78000094: {kind: OutParamPattern, arg0: name(ReturnSlot), type: type(symbolic_constant7800004E)} +// CHECK:STDOUT: inst78000095: {kind: PatternType, arg0: inst7800005A, type: type(TypeType)} +// CHECK:STDOUT: inst78000096: {kind: SymbolicBindingPattern, arg0: entity_name78000001, type: type(inst78000095)} +// CHECK:STDOUT: inst78000097: {kind: ImportRefLoaded, arg0: import_ir_inst27, arg1: entity_name, type: type(symbolic_constant7800004E)} +// CHECK:STDOUT: inst78000098: {kind: ReturnSlotPattern, arg0: inst78000094, arg1: inst, type: type(symbolic_constant7800004E)} +// CHECK:STDOUT: inst78000099: {kind: ValueParamPattern, arg0: name(SelfValue), type: type(symbolic_constant7800004E)} +// CHECK:STDOUT: inst7800009A: {kind: ImportRefLoaded, arg0: import_ir_inst28, arg1: entity_name, type: type(symbolic_constant7800004E)} +// CHECK:STDOUT: inst7800009B: {kind: WrapperBindingPattern, arg0: entity_name78000007, arg1: inst78000099, type: type(symbolic_constant7800004E)} +// CHECK:STDOUT: inst7800009C: {kind: ImportRefLoaded, arg0: import_ir_inst29, arg1: entity_name, type: type(symbolic_constant7800004E)} +// CHECK:STDOUT: inst7800009D: {kind: InitForm, arg0: inst7800008C, type: type(inst(FormType))} +// CHECK:STDOUT: inst7800009E: {kind: ImportRefLoaded, arg0: import_ir_inst2A, arg1: entity_name, type: type(symbolic_constant7800004E)} +// CHECK:STDOUT: inst7800009F: {kind: ImportRefLoaded, arg0: import_ir_inst2B, arg1: entity_name, type: type(symbolic_constant78000054)} +// CHECK:STDOUT: inst780000A0: {kind: ImportRefLoaded, arg0: import_ir_inst2C, arg1: entity_name, type: type(symbolic_constant78000054)} +// CHECK:STDOUT: inst780000A1: {kind: ImportRefLoaded, arg0: import_ir_inst2D, arg1: entity_name, type: type(symbolic_constant78000054)} +// CHECK:STDOUT: inst780000A2: {kind: ImportRefLoaded, arg0: import_ir_inst2E, arg1: entity_name, type: type(symbolic_constant78000054)} +// CHECK:STDOUT: inst780000A3: {kind: ImportRefLoaded, arg0: import_ir_inst2F, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst780000A4: {kind: ImportRefLoaded, arg0: import_ir_inst30, arg1: entity_name, type: type(inst(FormType))} +// CHECK:STDOUT: inst780000A5: {kind: ImportRefLoaded, arg0: import_ir_inst31, arg1: entity_name, type: type(symbolic_constant78000054)} +// CHECK:STDOUT: inst780000A6: {kind: ImportRefLoaded, arg0: import_ir_inst32, arg1: entity_name, type: type(inst7800005A)} +// CHECK:STDOUT: inst780000A7: {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst, type: type(inst7800005A)} +// CHECK:STDOUT: inst780000A8: {kind: FacetAccessType, arg0: inst780000A7, type: type(TypeType)} +// CHECK:STDOUT: inst780000A9: {kind: ConstType, arg0: inst780000A8, type: type(TypeType)} +// CHECK:STDOUT: inst780000AA: {kind: PatternType, arg0: inst780000A9, type: type(TypeType)} +// CHECK:STDOUT: inst780000AB: {kind: ValueParamPattern, arg0: name(SelfValue), type: type(symbolic_constant78000069)} +// CHECK:STDOUT: inst780000AC: {kind: WrapperBindingPattern, arg0: entity_name78000007, arg1: inst780000AB, type: type(symbolic_constant78000069)} +// CHECK:STDOUT: inst780000AD: {kind: InitForm, arg0: inst780000A9, type: type(inst(FormType))} +// CHECK:STDOUT: inst780000AE: {kind: OutParamPattern, arg0: name(ReturnSlot), type: type(symbolic_constant78000069)} +// CHECK:STDOUT: inst780000AF: {kind: ReturnSlotPattern, arg0: inst780000AE, arg1: inst, type: type(symbolic_constant78000069)} +// CHECK:STDOUT: inst780000B0: {kind: LookupImplWitness, arg0: inst7800008A, arg1: specific_interface78000000, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst780000B1: {kind: FunctionType, arg0: function78000001, arg1: specific78000005, type: type(TypeType)} +// CHECK:STDOUT: inst780000B2: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant78000070)} +// CHECK:STDOUT: inst780000B3: {kind: FunctionTypeWithSelfType, arg0: inst780000B1, arg1: inst7800008A, type: type(TypeType)} +// CHECK:STDOUT: inst780000B4: {kind: ImplWitnessAccess, arg0: inst780000B0, arg1: element0, type: type(symbolic_constant78000072)} +// CHECK:STDOUT: inst780000B5: {kind: SpecificImplFunction, arg0: inst780000B4, arg1: specific78000006, type: type(inst(SpecificFunctionType))} +// CHECK:STDOUT: inst780000B6: {kind: PatternType, arg0: inst7800008B, type: type(TypeType)} +// CHECK:STDOUT: inst780000B7: {kind: OutParamPattern, arg0: name(ReturnSlot), type: type(symbolic_constant78000076)} +// CHECK:STDOUT: inst780000B8: {kind: ImportRefLoaded, arg0: import_ir_inst3C, arg1: entity_name, type: type(symbolic_constant78000076)} +// CHECK:STDOUT: inst780000B9: {kind: ReturnSlotPattern, arg0: inst780000B7, arg1: inst, type: type(symbolic_constant78000076)} +// CHECK:STDOUT: inst780000BA: {kind: InitForm, arg0: inst7800008B, type: type(inst(FormType))} +// CHECK:STDOUT: inst780000BB: {kind: ValueParamPattern, arg0: name(SelfValue), type: type(symbolic_constant78000076)} +// CHECK:STDOUT: inst780000BC: {kind: ImportRefLoaded, arg0: import_ir_inst3D, arg1: entity_name, type: type(symbolic_constant78000076)} +// CHECK:STDOUT: inst780000BD: {kind: WrapperBindingPattern, arg0: entity_name78000007, arg1: inst780000BB, type: type(symbolic_constant78000076)} +// CHECK:STDOUT: inst780000BE: {kind: RequireCompleteType, arg0: inst7800008B, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst780000BF: {kind: RequireCompleteType, arg0: inst7800008C, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst780000C0: {kind: RequireCompleteType, arg0: inst780000A9, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst780000C1: {kind: RequireCompleteType, arg0: inst780000A8, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst780000C2: {kind: FunctionType, arg0: function78000001, arg1: specific78000008, type: type(TypeType)} +// CHECK:STDOUT: inst780000C3: {kind: FunctionTypeWithSelfType, arg0: inst780000C2, arg1: inst780000A7, type: type(TypeType)} +// CHECK:STDOUT: inst780000C4: {kind: LookupImplWitness, arg0: inst780000A7, arg1: specific_interface78000000, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst780000C5: {kind: ImplWitnessAccess, arg0: inst780000C4, arg1: element0, type: type(symbolic_constant78000087)} +// CHECK:STDOUT: inst780000C6: {kind: SpecificImplFunction, arg0: inst780000C5, arg1: specific78000009, type: type(inst(SpecificFunctionType))} +// CHECK:STDOUT: inst780000C7: {kind: ImportRefLoaded, arg0: import_ir_inst45, arg1: entity_name, type: type(symbolic_constant7800004E)} +// CHECK:STDOUT: inst780000C8: {kind: ImportRefLoaded, arg0: import_ir_inst46, arg1: entity_name, type: type(symbolic_constant7800004E)} +// CHECK:STDOUT: inst780000C9: {kind: ImportRefLoaded, arg0: import_ir_inst47, arg1: entity_name, type: type(inst78000095)} +// CHECK:STDOUT: inst780000CA: {kind: ImportRefLoaded, arg0: import_ir_inst48, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst780000CB: {kind: ImportRefLoaded, arg0: import_ir_inst49, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst780000CC: {kind: ImportRefLoaded, arg0: import_ir_inst4A, arg1: entity_name, type: type(inst7800005A)} +// CHECK:STDOUT: inst780000CD: {kind: SymbolicBindingPattern, arg0: entity_name78000001, type: type(inst78000095)} +// CHECK:STDOUT: inst780000CE: {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst, type: type(inst7800005A)} +// CHECK:STDOUT: inst780000CF: {kind: FacetAccessType, arg0: inst780000CE, type: type(TypeType)} +// CHECK:STDOUT: inst780000D0: {kind: ConstType, arg0: inst780000CF, type: type(TypeType)} +// CHECK:STDOUT: inst780000D1: {kind: ImplWitness, arg0: inst7800008E, arg1: specific7800000A, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst780000D2: {kind: FunctionType, arg0: function78000002, arg1: specific7800000A, type: type(TypeType)} +// CHECK:STDOUT: inst780000D3: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant78000096)} +// CHECK:STDOUT: inst780000D4: {kind: ImportRefUnloaded, arg0: import_ir_inst52, arg1: entity_name} +// CHECK:STDOUT: inst780000D5: {kind: ImplDecl, arg0: impl78000001, arg1: inst_block_empty} +// CHECK:STDOUT: inst780000D6: {kind: ImportRefLoaded, arg0: import_ir_inst54, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst780000D7: {kind: ImportRefLoaded, arg0: import_ir_inst55, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst780000D8: {kind: ImportRefUnloaded, arg0: import_ir_inst56, arg1: entity_name} +// CHECK:STDOUT: inst780000D9: {kind: ImplDecl, arg0: impl78000002, arg1: inst_block_empty} +// CHECK:STDOUT: inst780000DA: {kind: ImportRefLoaded, arg0: import_ir_inst58, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst780000DB: {kind: ImportRefLoaded, arg0: import_ir_inst59, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst780000DC: {kind: ImportRefUnloaded, arg0: import_ir_inst5A, arg1: entity_name} +// CHECK:STDOUT: inst780000DD: {kind: ImplDecl, arg0: impl78000003, arg1: inst_block_empty} +// CHECK:STDOUT: inst780000DE: {kind: ImportRefLoaded, arg0: import_ir_inst5C, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst780000DF: {kind: ImportRefLoaded, arg0: import_ir_inst5D, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst780000E0: {kind: ImportRefUnloaded, arg0: import_ir_inst5E, arg1: entity_name} +// CHECK:STDOUT: inst780000E1: {kind: ImplDecl, arg0: impl78000004, arg1: inst_block_empty} +// CHECK:STDOUT: inst780000E2: {kind: ImportRefLoaded, arg0: import_ir_inst60, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst780000E3: {kind: ImportRefLoaded, arg0: import_ir_inst61, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst780000E4: {kind: ImportRefLoaded, arg0: import_ir_inst62, arg1: entity_name, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst780000E5: {kind: ImplDecl, arg0: impl78000005, arg1: inst_block_empty} +// CHECK:STDOUT: inst780000E6: {kind: ImportRefUnloaded, arg0: import_ir_inst64, arg1: entity_name} +// CHECK:STDOUT: inst780000E7: {kind: ImplWitnessTable, arg0: inst_block78000039, arg1: impl78000005} +// CHECK:STDOUT: inst780000E8: {kind: ImplWitness, arg0: inst780000E7, arg1: specific7800000B, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst780000E9: {kind: ImportRefLoaded, arg0: import_ir_inst66, arg1: entity_name, type: type(inst78000016)} +// CHECK:STDOUT: inst780000EA: {kind: ImportRefLoaded, arg0: import_ir_inst67, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst780000EB: {kind: ImportRefLoaded, arg0: import_ir_inst68, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst780000EC: {kind: ImportRefLoaded, arg0: import_ir_inst69, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst780000ED: {kind: SymbolicBindingPattern, arg0: entity_name78000001, type: type(inst78000016)} +// CHECK:STDOUT: inst780000EE: {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst, type: type(TypeType)} +// CHECK:STDOUT: inst780000EF: {kind: PointerType, arg0: inst780000EE, type: type(TypeType)} +// CHECK:STDOUT: inst780000F0: {kind: ImplWitness, arg0: inst780000E7, arg1: specific7800000C, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst780000F1: {kind: FunctionDecl, arg0: function78000003, arg1: inst_block_empty, type: type(symbolic_constant780000A5)} +// CHECK:STDOUT: inst780000F2: {kind: FunctionType, arg0: function78000003, arg1: specific7800000B, type: type(TypeType)} +// CHECK:STDOUT: inst780000F3: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant780000A5)} +// CHECK:STDOUT: inst780000F4: {kind: OutParamPattern, arg0: name(ReturnSlot), type: type(symbolic_constant78000007)} +// CHECK:STDOUT: inst780000F5: {kind: ImportRefLoaded, arg0: import_ir_inst6F, arg1: entity_name, type: type(symbolic_constant78000007)} +// CHECK:STDOUT: inst780000F6: {kind: ReturnSlotPattern, arg0: inst780000F4, arg1: inst, type: type(symbolic_constant78000007)} +// CHECK:STDOUT: inst780000F7: {kind: ValueParamPattern, arg0: name(SelfValue), type: type(symbolic_constant78000007)} +// CHECK:STDOUT: inst780000F8: {kind: ImportRefLoaded, arg0: import_ir_inst70, arg1: entity_name, type: type(symbolic_constant78000007)} +// CHECK:STDOUT: inst780000F9: {kind: WrapperBindingPattern, arg0: entity_name78000007, arg1: inst780000F7, type: type(symbolic_constant78000007)} +// CHECK:STDOUT: inst780000FA: {kind: ImportRefLoaded, arg0: import_ir_inst71, arg1: entity_name, type: type(symbolic_constant78000007)} +// CHECK:STDOUT: inst780000FB: {kind: InitForm, arg0: inst7800001F, type: type(inst(FormType))} +// CHECK:STDOUT: inst780000FC: {kind: ImportRefLoaded, arg0: import_ir_inst72, arg1: entity_name, type: type(symbolic_constant78000007)} +// CHECK:STDOUT: inst780000FD: {kind: ImportRefLoaded, arg0: import_ir_inst73, arg1: entity_name, type: type(symbolic_constant780000AC)} +// CHECK:STDOUT: inst780000FE: {kind: ImportRefLoaded, arg0: import_ir_inst74, arg1: entity_name, type: type(symbolic_constant780000AC)} +// CHECK:STDOUT: inst780000FF: {kind: ImportRefLoaded, arg0: import_ir_inst75, arg1: entity_name, type: type(symbolic_constant780000AC)} +// CHECK:STDOUT: inst78000100: {kind: ImportRefLoaded, arg0: import_ir_inst76, arg1: entity_name, type: type(symbolic_constant780000AC)} +// CHECK:STDOUT: inst78000101: {kind: ImportRefLoaded, arg0: import_ir_inst77, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst78000102: {kind: ImportRefLoaded, arg0: import_ir_inst78, arg1: entity_name, type: type(inst(FormType))} +// CHECK:STDOUT: inst78000103: {kind: ImportRefLoaded, arg0: import_ir_inst79, arg1: entity_name, type: type(symbolic_constant780000AC)} +// CHECK:STDOUT: inst78000104: {kind: ImportRefLoaded, arg0: import_ir_inst7A, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst78000105: {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst, type: type(TypeType)} +// CHECK:STDOUT: inst78000106: {kind: PointerType, arg0: inst78000105, type: type(TypeType)} +// CHECK:STDOUT: inst78000107: {kind: PatternType, arg0: inst78000106, type: type(TypeType)} +// CHECK:STDOUT: inst78000108: {kind: ValueParamPattern, arg0: name(SelfValue), type: type(symbolic_constant780000BE)} +// CHECK:STDOUT: inst78000109: {kind: WrapperBindingPattern, arg0: entity_name78000007, arg1: inst78000108, type: type(symbolic_constant780000BE)} +// CHECK:STDOUT: inst7800010A: {kind: InitForm, arg0: inst78000106, type: type(inst(FormType))} +// CHECK:STDOUT: inst7800010B: {kind: OutParamPattern, arg0: name(ReturnSlot), type: type(symbolic_constant780000BE)} +// CHECK:STDOUT: inst7800010C: {kind: ReturnSlotPattern, arg0: inst7800010B, arg1: inst, type: type(symbolic_constant780000BE)} +// CHECK:STDOUT: inst7800010D: {kind: ImportRefLoaded, arg0: import_ir_inst83, arg1: entity_name, type: type(symbolic_constant78000007)} +// CHECK:STDOUT: inst7800010E: {kind: ImportRefLoaded, arg0: import_ir_inst84, arg1: entity_name, type: type(symbolic_constant78000007)} +// CHECK:STDOUT: inst7800010F: {kind: FunctionType, arg0: function78000003, arg1: specific7800000C, type: type(TypeType)} +// CHECK:STDOUT: inst78000110: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant780000C5)} +// CHECK:STDOUT: inst78000111: {kind: RequireCompleteType, arg0: inst780000EF, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000112: {kind: ImportRefUnloaded, arg0: import_ir_inst88, arg1: entity_name} +// CHECK:STDOUT: inst78000113: {kind: ImplDecl, arg0: impl78000006, arg1: inst_block_empty} +// CHECK:STDOUT: inst78000114: {kind: ImportRefLoaded, arg0: import_ir_inst8A, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst78000115: {kind: ImportRefLoaded, arg0: import_ir_inst8B, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst78000116: {kind: ImportRefUnloaded, arg0: import_ir_inst8C, arg1: entity_name} +// CHECK:STDOUT: inst78000117: {kind: ImplDecl, arg0: impl78000007, arg1: inst_block_empty} +// CHECK:STDOUT: inst78000118: {kind: ImportRefLoaded, arg0: import_ir_inst8E, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst78000119: {kind: ImportRefLoaded, arg0: import_ir_inst8F, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst7800011A: {kind: ImportRefUnloaded, arg0: import_ir_inst90, arg1: entity_name} +// CHECK:STDOUT: inst7800011B: {kind: ImplDecl, arg0: impl78000008, arg1: inst_block_empty} +// CHECK:STDOUT: inst7800011C: {kind: SymbolicBinding, arg0: entity_name78000021, arg1: inst, type: type(inst7800005A)} +// CHECK:STDOUT: inst7800011D: {kind: FacetAccessType, arg0: inst7800011C, type: type(TypeType)} +// CHECK:STDOUT: inst7800011E: {kind: TupleType, arg0: inst_block78000046, type: type(TypeType)} +// CHECK:STDOUT: inst7800011F: {kind: ImportRefUnloaded, arg0: import_ir_inst92, arg1: entity_name} +// CHECK:STDOUT: inst78000120: {kind: ImplWitnessTable, arg0: inst_block78000047, arg1: impl78000008} +// CHECK:STDOUT: inst78000121: {kind: ImplWitness, arg0: inst78000120, arg1: specific7800000E, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000122: {kind: FunctionDecl, arg0: function78000004, arg1: inst_block_empty, type: type(symbolic_constant780000CE)} +// CHECK:STDOUT: inst78000123: {kind: FunctionType, arg0: function78000004, arg1: specific7800000E, type: type(TypeType)} +// CHECK:STDOUT: inst78000124: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant780000CE)} +// CHECK:STDOUT: inst78000125: {kind: PatternType, arg0: inst7800011E, type: type(TypeType)} +// CHECK:STDOUT: inst78000126: {kind: OutParamPattern, arg0: name(ReturnSlot), type: type(symbolic_constant780000D1)} +// CHECK:STDOUT: inst78000127: {kind: TupleType, arg0: inst_block78000049, type: type(TypeType)} +// CHECK:STDOUT: inst78000128: {kind: TupleValue, arg0: inst_block78000048, type: type(inst78000127)} +// CHECK:STDOUT: inst78000129: {kind: SymbolicBindingPattern, arg0: entity_name78000021, type: type(inst78000095)} +// CHECK:STDOUT: inst7800012A: {kind: ImportRefLoaded, arg0: import_ir_inst95, arg1: entity_name, type: type(symbolic_constant780000D1)} +// CHECK:STDOUT: inst7800012B: {kind: ReturnSlotPattern, arg0: inst78000126, arg1: inst, type: type(symbolic_constant780000D1)} +// CHECK:STDOUT: inst7800012C: {kind: ValueParamPattern, arg0: name(SelfValue), type: type(symbolic_constant780000D1)} +// CHECK:STDOUT: inst7800012D: {kind: ImportRefLoaded, arg0: import_ir_inst96, arg1: entity_name, type: type(symbolic_constant780000D1)} +// CHECK:STDOUT: inst7800012E: {kind: WrapperBindingPattern, arg0: entity_name78000007, arg1: inst7800012C, type: type(symbolic_constant780000D1)} +// CHECK:STDOUT: inst7800012F: {kind: ImportRefLoaded, arg0: import_ir_inst97, arg1: entity_name, type: type(symbolic_constant780000D1)} +// CHECK:STDOUT: inst78000130: {kind: InitForm, arg0: inst7800011E, type: type(inst(FormType))} +// CHECK:STDOUT: inst78000131: {kind: ImportRefLoaded, arg0: import_ir_inst98, arg1: entity_name, type: type(symbolic_constant780000D1)} +// CHECK:STDOUT: inst78000132: {kind: ImportRefLoaded, arg0: import_ir_inst99, arg1: entity_name, type: type(symbolic_constant780000D8)} +// CHECK:STDOUT: inst78000133: {kind: ImportRefLoaded, arg0: import_ir_inst9A, arg1: entity_name, type: type(symbolic_constant780000D8)} +// CHECK:STDOUT: inst78000134: {kind: ImportRefLoaded, arg0: import_ir_inst9B, arg1: entity_name, type: type(symbolic_constant780000D8)} +// CHECK:STDOUT: inst78000135: {kind: ImportRefLoaded, arg0: import_ir_inst9C, arg1: entity_name, type: type(symbolic_constant780000D8)} +// CHECK:STDOUT: inst78000136: {kind: ImportRefLoaded, arg0: import_ir_inst9D, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst78000137: {kind: ImportRefLoaded, arg0: import_ir_inst9E, arg1: entity_name, type: type(inst(FormType))} +// CHECK:STDOUT: inst78000138: {kind: ImportRefLoaded, arg0: import_ir_inst9F, arg1: entity_name, type: type(symbolic_constant780000D8)} +// CHECK:STDOUT: inst78000139: {kind: ImportRefLoaded, arg0: import_ir_instA0, arg1: entity_name, type: type(inst7800005A)} +// CHECK:STDOUT: inst7800013A: {kind: ImportRefLoaded, arg0: import_ir_instA1, arg1: entity_name, type: type(inst7800005A)} +// CHECK:STDOUT: inst7800013B: {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst, type: type(inst7800005A)} +// CHECK:STDOUT: inst7800013C: {kind: FacetAccessType, arg0: inst7800013B, type: type(TypeType)} +// CHECK:STDOUT: inst7800013D: {kind: SymbolicBinding, arg0: entity_name78000021, arg1: inst, type: type(inst7800005A)} +// CHECK:STDOUT: inst7800013E: {kind: FacetAccessType, arg0: inst7800013D, type: type(TypeType)} +// CHECK:STDOUT: inst7800013F: {kind: TupleType, arg0: inst_block7800004F, type: type(TypeType)} +// CHECK:STDOUT: inst78000140: {kind: PatternType, arg0: inst7800013F, type: type(TypeType)} +// CHECK:STDOUT: inst78000141: {kind: ValueParamPattern, arg0: name(SelfValue), type: type(symbolic_constant780000F2)} +// CHECK:STDOUT: inst78000142: {kind: WrapperBindingPattern, arg0: entity_name78000007, arg1: inst78000141, type: type(symbolic_constant780000F2)} +// CHECK:STDOUT: inst78000143: {kind: InitForm, arg0: inst7800013F, type: type(inst(FormType))} +// CHECK:STDOUT: inst78000144: {kind: OutParamPattern, arg0: name(ReturnSlot), type: type(symbolic_constant780000F2)} +// CHECK:STDOUT: inst78000145: {kind: ReturnSlotPattern, arg0: inst78000144, arg1: inst, type: type(symbolic_constant780000F2)} +// CHECK:STDOUT: inst78000146: {kind: LookupImplWitness, arg0: inst7800011C, arg1: specific_interface78000000, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000147: {kind: FunctionType, arg0: function78000001, arg1: specific7800000F, type: type(TypeType)} +// CHECK:STDOUT: inst78000148: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant780000F9)} +// CHECK:STDOUT: inst78000149: {kind: FunctionTypeWithSelfType, arg0: inst78000147, arg1: inst7800011C, type: type(TypeType)} +// CHECK:STDOUT: inst7800014A: {kind: ImplWitnessAccess, arg0: inst78000146, arg1: element0, type: type(symbolic_constant780000FB)} +// CHECK:STDOUT: inst7800014B: {kind: SpecificImplFunction, arg0: inst7800014A, arg1: specific78000010, type: type(inst(SpecificFunctionType))} +// CHECK:STDOUT: inst7800014C: {kind: PatternType, arg0: inst7800011D, type: type(TypeType)} +// CHECK:STDOUT: inst7800014D: {kind: OutParamPattern, arg0: name(ReturnSlot), type: type(symbolic_constant780000FF)} +// CHECK:STDOUT: inst7800014E: {kind: ImportRefLoaded, arg0: import_ir_instAD, arg1: entity_name, type: type(symbolic_constant780000FF)} +// CHECK:STDOUT: inst7800014F: {kind: ReturnSlotPattern, arg0: inst7800014D, arg1: inst, type: type(symbolic_constant780000FF)} +// CHECK:STDOUT: inst78000150: {kind: InitForm, arg0: inst7800011D, type: type(inst(FormType))} +// CHECK:STDOUT: inst78000151: {kind: ValueParamPattern, arg0: name(SelfValue), type: type(symbolic_constant780000FF)} +// CHECK:STDOUT: inst78000152: {kind: ImportRefLoaded, arg0: import_ir_instAE, arg1: entity_name, type: type(symbolic_constant780000FF)} +// CHECK:STDOUT: inst78000153: {kind: WrapperBindingPattern, arg0: entity_name78000007, arg1: inst78000151, type: type(symbolic_constant780000FF)} +// CHECK:STDOUT: inst78000154: {kind: RequireCompleteType, arg0: inst7800011D, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000155: {kind: RequireCompleteType, arg0: inst7800011E, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000156: {kind: RequireCompleteType, arg0: inst7800013F, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000157: {kind: RequireCompleteType, arg0: inst7800013C, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000158: {kind: FunctionType, arg0: function78000001, arg1: specific78000012, type: type(TypeType)} +// CHECK:STDOUT: inst78000159: {kind: FunctionTypeWithSelfType, arg0: inst78000158, arg1: inst7800013B, type: type(TypeType)} +// CHECK:STDOUT: inst7800015A: {kind: LookupImplWitness, arg0: inst7800013B, arg1: specific_interface78000000, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst7800015B: {kind: ImplWitnessAccess, arg0: inst7800015A, arg1: element0, type: type(symbolic_constant78000116)} +// CHECK:STDOUT: inst7800015C: {kind: SpecificImplFunction, arg0: inst7800015B, arg1: specific78000013, type: type(inst(SpecificFunctionType))} +// CHECK:STDOUT: inst7800015D: {kind: RequireCompleteType, arg0: inst7800013E, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst7800015E: {kind: FunctionType, arg0: function78000001, arg1: specific78000014, type: type(TypeType)} +// CHECK:STDOUT: inst7800015F: {kind: FunctionTypeWithSelfType, arg0: inst7800015E, arg1: inst7800013D, type: type(TypeType)} +// CHECK:STDOUT: inst78000160: {kind: LookupImplWitness, arg0: inst7800013D, arg1: specific_interface78000000, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000161: {kind: ImplWitnessAccess, arg0: inst78000160, arg1: element0, type: type(symbolic_constant7800011C)} +// CHECK:STDOUT: inst78000162: {kind: SpecificImplFunction, arg0: inst78000161, arg1: specific78000015, type: type(inst(SpecificFunctionType))} +// CHECK:STDOUT: inst78000163: {kind: ImportRefLoaded, arg0: import_ir_instBC, arg1: entity_name, type: type(symbolic_constant780000D1)} +// CHECK:STDOUT: inst78000164: {kind: ImportRefLoaded, arg0: import_ir_instBD, arg1: entity_name, type: type(symbolic_constant780000D1)} +// CHECK:STDOUT: inst78000165: {kind: ImportRefLoaded, arg0: import_ir_instBE, arg1: entity_name, type: type(inst78000095)} +// CHECK:STDOUT: inst78000166: {kind: ImportRefLoaded, arg0: import_ir_instBF, arg1: entity_name, type: type(inst78000095)} +// CHECK:STDOUT: inst78000167: {kind: ImportRefLoaded, arg0: import_ir_instC0, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst78000168: {kind: ImportRefLoaded, arg0: import_ir_instC1, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst78000169: {kind: ImportRefLoaded, arg0: import_ir_instC2, arg1: entity_name, type: type(inst7800005A)} +// CHECK:STDOUT: inst7800016A: {kind: ImportRefLoaded, arg0: import_ir_instC3, arg1: entity_name, type: type(inst7800005A)} +// CHECK:STDOUT: inst7800016B: {kind: SymbolicBindingPattern, arg0: entity_name78000001, type: type(inst78000095)} +// CHECK:STDOUT: inst7800016C: {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst, type: type(inst7800005A)} +// CHECK:STDOUT: inst7800016D: {kind: SymbolicBindingPattern, arg0: entity_name78000021, type: type(inst78000095)} +// CHECK:STDOUT: inst7800016E: {kind: SymbolicBinding, arg0: entity_name78000021, arg1: inst, type: type(inst7800005A)} +// CHECK:STDOUT: inst7800016F: {kind: TupleValue, arg0: inst_block7800005C, type: type(inst78000127)} +// CHECK:STDOUT: inst78000170: {kind: FacetAccessType, arg0: inst7800016C, type: type(TypeType)} +// CHECK:STDOUT: inst78000171: {kind: FacetAccessType, arg0: inst7800016E, type: type(TypeType)} +// CHECK:STDOUT: inst78000172: {kind: TupleType, arg0: inst_block7800005D, type: type(TypeType)} +// CHECK:STDOUT: inst78000173: {kind: ImplWitness, arg0: inst78000120, arg1: specific78000016, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000174: {kind: FunctionType, arg0: function78000004, arg1: specific78000016, type: type(TypeType)} +// CHECK:STDOUT: inst78000175: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant78000134)} +// CHECK:STDOUT: inst78000176: {kind: ImportRefUnloaded, arg0: import_ir_instCF, arg1: entity_name} +// CHECK:STDOUT: inst78000177: {kind: ImplDecl, arg0: impl78000009, arg1: inst_block_empty} +// CHECK:STDOUT: inst78000178: {kind: SymbolicBinding, arg0: entity_name78000031, arg1: inst, type: type(inst7800005A)} +// CHECK:STDOUT: inst78000179: {kind: FacetAccessType, arg0: inst78000178, type: type(TypeType)} +// CHECK:STDOUT: inst7800017A: {kind: TupleType, arg0: inst_block78000062, type: type(TypeType)} +// CHECK:STDOUT: inst7800017B: {kind: ImportRefUnloaded, arg0: import_ir_instD1, arg1: entity_name} +// CHECK:STDOUT: inst7800017C: {kind: ImplWitnessTable, arg0: inst_block78000063, arg1: impl78000009} +// CHECK:STDOUT: inst7800017D: {kind: ImplWitness, arg0: inst7800017C, arg1: specific78000017, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst7800017E: {kind: FunctionDecl, arg0: function78000005, arg1: inst_block_empty, type: type(symbolic_constant7800013C)} +// CHECK:STDOUT: inst7800017F: {kind: FunctionType, arg0: function78000005, arg1: specific78000017, type: type(TypeType)} +// CHECK:STDOUT: inst78000180: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant7800013C)} +// CHECK:STDOUT: inst78000181: {kind: PatternType, arg0: inst7800017A, type: type(TypeType)} +// CHECK:STDOUT: inst78000182: {kind: OutParamPattern, arg0: name(ReturnSlot), type: type(symbolic_constant7800013F)} +// CHECK:STDOUT: inst78000183: {kind: TupleType, arg0: inst_block78000065, type: type(TypeType)} +// CHECK:STDOUT: inst78000184: {kind: TupleValue, arg0: inst_block78000064, type: type(inst78000183)} +// CHECK:STDOUT: inst78000185: {kind: SymbolicBindingPattern, arg0: entity_name78000031, type: type(inst78000095)} +// CHECK:STDOUT: inst78000186: {kind: ImportRefLoaded, arg0: import_ir_instD4, arg1: entity_name, type: type(symbolic_constant7800013F)} +// CHECK:STDOUT: inst78000187: {kind: ReturnSlotPattern, arg0: inst78000182, arg1: inst, type: type(symbolic_constant7800013F)} +// CHECK:STDOUT: inst78000188: {kind: ValueParamPattern, arg0: name(SelfValue), type: type(symbolic_constant7800013F)} +// CHECK:STDOUT: inst78000189: {kind: ImportRefLoaded, arg0: import_ir_instD5, arg1: entity_name, type: type(symbolic_constant7800013F)} +// CHECK:STDOUT: inst7800018A: {kind: WrapperBindingPattern, arg0: entity_name78000007, arg1: inst78000188, type: type(symbolic_constant7800013F)} +// CHECK:STDOUT: inst7800018B: {kind: ImportRefLoaded, arg0: import_ir_instD6, arg1: entity_name, type: type(symbolic_constant7800013F)} +// CHECK:STDOUT: inst7800018C: {kind: InitForm, arg0: inst7800017A, type: type(inst(FormType))} +// CHECK:STDOUT: inst7800018D: {kind: ImportRefLoaded, arg0: import_ir_instD7, arg1: entity_name, type: type(symbolic_constant7800013F)} +// CHECK:STDOUT: inst7800018E: {kind: ImportRefLoaded, arg0: import_ir_instD8, arg1: entity_name, type: type(symbolic_constant78000146)} +// CHECK:STDOUT: inst7800018F: {kind: ImportRefLoaded, arg0: import_ir_instD9, arg1: entity_name, type: type(symbolic_constant78000146)} +// CHECK:STDOUT: inst78000190: {kind: ImportRefLoaded, arg0: import_ir_instDA, arg1: entity_name, type: type(symbolic_constant78000146)} +// CHECK:STDOUT: inst78000191: {kind: ImportRefLoaded, arg0: import_ir_instDB, arg1: entity_name, type: type(symbolic_constant78000146)} +// CHECK:STDOUT: inst78000192: {kind: ImportRefLoaded, arg0: import_ir_instDC, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst78000193: {kind: ImportRefLoaded, arg0: import_ir_instDD, arg1: entity_name, type: type(inst(FormType))} +// CHECK:STDOUT: inst78000194: {kind: ImportRefLoaded, arg0: import_ir_instDE, arg1: entity_name, type: type(symbolic_constant78000146)} +// CHECK:STDOUT: inst78000195: {kind: ImportRefLoaded, arg0: import_ir_instDF, arg1: entity_name, type: type(inst7800005A)} +// CHECK:STDOUT: inst78000196: {kind: ImportRefLoaded, arg0: import_ir_instE0, arg1: entity_name, type: type(inst7800005A)} +// CHECK:STDOUT: inst78000197: {kind: ImportRefLoaded, arg0: import_ir_instE1, arg1: entity_name, type: type(inst7800005A)} +// CHECK:STDOUT: inst78000198: {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst, type: type(inst7800005A)} +// CHECK:STDOUT: inst78000199: {kind: FacetAccessType, arg0: inst78000198, type: type(TypeType)} +// CHECK:STDOUT: inst7800019A: {kind: SymbolicBinding, arg0: entity_name78000021, arg1: inst, type: type(inst7800005A)} +// CHECK:STDOUT: inst7800019B: {kind: FacetAccessType, arg0: inst7800019A, type: type(TypeType)} +// CHECK:STDOUT: inst7800019C: {kind: SymbolicBinding, arg0: entity_name78000031, arg1: inst, type: type(inst7800005A)} +// CHECK:STDOUT: inst7800019D: {kind: FacetAccessType, arg0: inst7800019C, type: type(TypeType)} +// CHECK:STDOUT: inst7800019E: {kind: TupleType, arg0: inst_block7800006B, type: type(TypeType)} +// CHECK:STDOUT: inst7800019F: {kind: PatternType, arg0: inst7800019E, type: type(TypeType)} +// CHECK:STDOUT: inst780001A0: {kind: ValueParamPattern, arg0: name(SelfValue), type: type(symbolic_constant78000165)} +// CHECK:STDOUT: inst780001A1: {kind: WrapperBindingPattern, arg0: entity_name78000007, arg1: inst780001A0, type: type(symbolic_constant78000165)} +// CHECK:STDOUT: inst780001A2: {kind: InitForm, arg0: inst7800019E, type: type(inst(FormType))} +// CHECK:STDOUT: inst780001A3: {kind: OutParamPattern, arg0: name(ReturnSlot), type: type(symbolic_constant78000165)} +// CHECK:STDOUT: inst780001A4: {kind: ReturnSlotPattern, arg0: inst780001A3, arg1: inst, type: type(symbolic_constant78000165)} +// CHECK:STDOUT: inst780001A5: {kind: LookupImplWitness, arg0: inst78000178, arg1: specific_interface78000000, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst780001A6: {kind: FunctionType, arg0: function78000001, arg1: specific78000018, type: type(TypeType)} +// CHECK:STDOUT: inst780001A7: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant7800016C)} +// CHECK:STDOUT: inst780001A8: {kind: FunctionTypeWithSelfType, arg0: inst780001A6, arg1: inst78000178, type: type(TypeType)} +// CHECK:STDOUT: inst780001A9: {kind: ImplWitnessAccess, arg0: inst780001A5, arg1: element0, type: type(symbolic_constant7800016E)} +// CHECK:STDOUT: inst780001AA: {kind: SpecificImplFunction, arg0: inst780001A9, arg1: specific78000019, type: type(inst(SpecificFunctionType))} +// CHECK:STDOUT: inst780001AB: {kind: PatternType, arg0: inst78000179, type: type(TypeType)} +// CHECK:STDOUT: inst780001AC: {kind: OutParamPattern, arg0: name(ReturnSlot), type: type(symbolic_constant78000172)} +// CHECK:STDOUT: inst780001AD: {kind: ImportRefLoaded, arg0: import_ir_instEF, arg1: entity_name, type: type(symbolic_constant78000172)} +// CHECK:STDOUT: inst780001AE: {kind: ReturnSlotPattern, arg0: inst780001AC, arg1: inst, type: type(symbolic_constant78000172)} +// CHECK:STDOUT: inst780001AF: {kind: InitForm, arg0: inst78000179, type: type(inst(FormType))} +// CHECK:STDOUT: inst780001B0: {kind: ValueParamPattern, arg0: name(SelfValue), type: type(symbolic_constant78000172)} +// CHECK:STDOUT: inst780001B1: {kind: ImportRefLoaded, arg0: import_ir_instF0, arg1: entity_name, type: type(symbolic_constant78000172)} +// CHECK:STDOUT: inst780001B2: {kind: WrapperBindingPattern, arg0: entity_name78000007, arg1: inst780001B0, type: type(symbolic_constant78000172)} +// CHECK:STDOUT: inst780001B3: {kind: RequireCompleteType, arg0: inst78000179, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst780001B4: {kind: RequireCompleteType, arg0: inst7800017A, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst780001B5: {kind: RequireCompleteType, arg0: inst7800019E, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst780001B6: {kind: RequireCompleteType, arg0: inst78000199, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst780001B7: {kind: FunctionType, arg0: function78000001, arg1: specific7800001B, type: type(TypeType)} +// CHECK:STDOUT: inst780001B8: {kind: FunctionTypeWithSelfType, arg0: inst780001B7, arg1: inst78000198, type: type(TypeType)} +// CHECK:STDOUT: inst780001B9: {kind: LookupImplWitness, arg0: inst78000198, arg1: specific_interface78000000, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst780001BA: {kind: ImplWitnessAccess, arg0: inst780001B9, arg1: element0, type: type(symbolic_constant7800018F)} +// CHECK:STDOUT: inst780001BB: {kind: SpecificImplFunction, arg0: inst780001BA, arg1: specific7800001C, type: type(inst(SpecificFunctionType))} +// CHECK:STDOUT: inst780001BC: {kind: RequireCompleteType, arg0: inst7800019B, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst780001BD: {kind: FunctionType, arg0: function78000001, arg1: specific7800001D, type: type(TypeType)} +// CHECK:STDOUT: inst780001BE: {kind: FunctionTypeWithSelfType, arg0: inst780001BD, arg1: inst7800019A, type: type(TypeType)} +// CHECK:STDOUT: inst780001BF: {kind: LookupImplWitness, arg0: inst7800019A, arg1: specific_interface78000000, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst780001C0: {kind: ImplWitnessAccess, arg0: inst780001BF, arg1: element0, type: type(symbolic_constant78000195)} +// CHECK:STDOUT: inst780001C1: {kind: SpecificImplFunction, arg0: inst780001C0, arg1: specific7800001E, type: type(inst(SpecificFunctionType))} +// CHECK:STDOUT: inst780001C2: {kind: RequireCompleteType, arg0: inst7800019D, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst780001C3: {kind: FunctionType, arg0: function78000001, arg1: specific7800001F, type: type(TypeType)} +// CHECK:STDOUT: inst780001C4: {kind: FunctionTypeWithSelfType, arg0: inst780001C3, arg1: inst7800019C, type: type(TypeType)} +// CHECK:STDOUT: inst780001C5: {kind: LookupImplWitness, arg0: inst7800019C, arg1: specific_interface78000000, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst780001C6: {kind: ImplWitnessAccess, arg0: inst780001C5, arg1: element0, type: type(symbolic_constant7800019B)} +// CHECK:STDOUT: inst780001C7: {kind: SpecificImplFunction, arg0: inst780001C6, arg1: specific78000020, type: type(inst(SpecificFunctionType))} +// CHECK:STDOUT: inst780001C8: {kind: ImportRefLoaded, arg0: import_ir_inst104, arg1: entity_name, type: type(symbolic_constant7800013F)} +// CHECK:STDOUT: inst780001C9: {kind: ImportRefLoaded, arg0: import_ir_inst105, arg1: entity_name, type: type(symbolic_constant7800013F)} +// CHECK:STDOUT: inst780001CA: {kind: ImportRefLoaded, arg0: import_ir_inst106, arg1: entity_name, type: type(inst78000095)} +// CHECK:STDOUT: inst780001CB: {kind: ImportRefLoaded, arg0: import_ir_inst107, arg1: entity_name, type: type(inst78000095)} +// CHECK:STDOUT: inst780001CC: {kind: ImportRefLoaded, arg0: import_ir_inst108, arg1: entity_name, type: type(inst78000095)} +// CHECK:STDOUT: inst780001CD: {kind: ImportRefLoaded, arg0: import_ir_inst109, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst780001CE: {kind: ImportRefLoaded, arg0: import_ir_inst10A, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst780001CF: {kind: ImportRefLoaded, arg0: import_ir_inst10B, arg1: entity_name, type: type(inst7800005A)} +// CHECK:STDOUT: inst780001D0: {kind: ImportRefLoaded, arg0: import_ir_inst10C, arg1: entity_name, type: type(inst7800005A)} +// CHECK:STDOUT: inst780001D1: {kind: ImportRefLoaded, arg0: import_ir_inst10D, arg1: entity_name, type: type(inst7800005A)} +// CHECK:STDOUT: inst780001D2: {kind: SymbolicBindingPattern, arg0: entity_name78000001, type: type(inst78000095)} +// CHECK:STDOUT: inst780001D3: {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst, type: type(inst7800005A)} +// CHECK:STDOUT: inst780001D4: {kind: SymbolicBindingPattern, arg0: entity_name78000021, type: type(inst78000095)} +// CHECK:STDOUT: inst780001D5: {kind: SymbolicBinding, arg0: entity_name78000021, arg1: inst, type: type(inst7800005A)} +// CHECK:STDOUT: inst780001D6: {kind: SymbolicBindingPattern, arg0: entity_name78000031, type: type(inst78000095)} +// CHECK:STDOUT: inst780001D7: {kind: SymbolicBinding, arg0: entity_name78000031, arg1: inst, type: type(inst7800005A)} +// CHECK:STDOUT: inst780001D8: {kind: TupleValue, arg0: inst_block7800007A, type: type(inst78000183)} +// CHECK:STDOUT: inst780001D9: {kind: FacetAccessType, arg0: inst780001D3, type: type(TypeType)} +// CHECK:STDOUT: inst780001DA: {kind: FacetAccessType, arg0: inst780001D5, type: type(TypeType)} +// CHECK:STDOUT: inst780001DB: {kind: FacetAccessType, arg0: inst780001D7, type: type(TypeType)} +// CHECK:STDOUT: inst780001DC: {kind: TupleType, arg0: inst_block7800007B, type: type(TypeType)} +// CHECK:STDOUT: inst780001DD: {kind: ImplWitness, arg0: inst7800017C, arg1: specific78000021, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst780001DE: {kind: FunctionType, arg0: function78000005, arg1: specific78000021, type: type(TypeType)} +// CHECK:STDOUT: inst780001DF: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant780001BA)} +// CHECK:STDOUT: inst780001E0: {kind: LookupImplWitness, arg0: inst7800001F, arg1: specific_interface78000000, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst780001E1: {kind: RequireSpecificDefinition, arg0: specific7800000B, type: type(inst(RequireSpecificDefinitionType))} +// CHECK:STDOUT: inst780001E2: {kind: RequireSpecificDefinition, arg0: specific7800000B, type: type(inst(RequireSpecificDefinitionType))} +// CHECK:STDOUT: inst780001E3: {kind: RequireSpecificDefinition, arg0: specific78000022, type: type(inst(RequireSpecificDefinitionType))} +// CHECK:STDOUT: inst780001E4: {kind: FacetValue, arg0: inst7800001F, arg1: inst_block78000082, type: type(inst7800005A)} +// CHECK:STDOUT: inst780001E5: {kind: FunctionType, arg0: function78000001, arg1: specific78000023, type: type(TypeType)} +// CHECK:STDOUT: inst780001E6: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant780001C1)} +// CHECK:STDOUT: inst780001E7: {kind: FunctionTypeWithSelfType, arg0: inst780001E5, arg1: inst780001E4, type: type(TypeType)} +// CHECK:STDOUT: inst780001E8: {kind: ImplWitnessAccess, arg0: inst780001E0, arg1: element0, type: type(symbolic_constant780001C8)} +// CHECK:STDOUT: inst780001E9: {kind: ImplWitnessAccess, arg0: inst780001E0, arg1: element0, type: type(symbolic_constant780001C3)} +// CHECK:STDOUT: inst780001EA: {kind: LookupImplWitness, arg0: inst78000020, arg1: specific_interface78000000, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst780001EB: {kind: FacetValue, arg0: inst78000020, arg1: inst_block78000085, type: type(inst7800005A)} +// CHECK:STDOUT: inst780001EC: {kind: FunctionType, arg0: function78000001, arg1: specific78000024, type: type(TypeType)} +// CHECK:STDOUT: inst780001ED: {kind: FunctionTypeWithSelfType, arg0: inst780001EC, arg1: inst780001EB, type: type(TypeType)} +// CHECK:STDOUT: inst780001EE: {kind: ImplWitnessAccess, arg0: inst780001EA, arg1: element0, type: type(symbolic_constant780001C8)} +// CHECK:STDOUT: inst780001EF: {kind: BoundMethod, arg0: inst78000052, arg1: inst780001E8, type: type(inst(BoundMethodType))} +// CHECK:STDOUT: inst780001F0: {kind: LookupImplWitness, arg0: inst7800001F, arg1: specific_interface78000000, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst780001F1: {kind: RequireSpecificDefinition, arg0: specific7800000B, type: type(inst(RequireSpecificDefinitionType))} +// CHECK:STDOUT: inst780001F2: {kind: FacetValue, arg0: inst7800001F, arg1: inst_block78000082, type: type(inst7800005A)} +// CHECK:STDOUT: inst780001F3: {kind: Converted, arg0: inst7800001F, arg1: inst780001F2, type: type(inst7800005A)} +// CHECK:STDOUT: inst780001F4: {kind: LookupImplWitness, arg0: inst7800001F, arg1: specific_interface78000000, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst780001F5: {kind: RequireSpecificDefinition, arg0: specific7800000B, type: type(inst(RequireSpecificDefinitionType))} +// CHECK:STDOUT: inst780001F6: {kind: FacetValue, arg0: inst7800001F, arg1: inst_block78000082, type: type(inst7800005A)} +// CHECK:STDOUT: inst780001F7: {kind: Converted, arg0: inst7800001F, arg1: inst780001F6, type: type(inst7800005A)} +// CHECK:STDOUT: inst780001F8: {kind: SpecificImplFunction, arg0: inst780001E8, arg1: specific78000025, type: type(inst(SpecificFunctionType))} +// CHECK:STDOUT: inst780001F9: {kind: SpecificImplFunction, arg0: inst780001E9, arg1: specific78000025, type: type(inst(SpecificFunctionType))} +// CHECK:STDOUT: inst780001FA: {kind: SpecificImplFunction, arg0: inst780001EE, arg1: specific78000026, type: type(inst(SpecificFunctionType))} +// CHECK:STDOUT: inst780001FB: {kind: BoundMethod, arg0: inst78000052, arg1: inst780001F8, type: type(inst(BoundMethodType))} +// CHECK:STDOUT: inst780001FC: {kind: Call, arg0: inst780001FB, arg1: inst_block78000089, type: type(symbolic_constant78000006)} +// CHECK:STDOUT: inst780001FD: {kind: InPlaceInit, arg0: inst780001FC, arg1: inst78000056, type: type(symbolic_constant78000006)} +// CHECK:STDOUT: inst780001FE: {kind: TupleAccess, arg0: inst78000046, arg1: element1, type: type(inst7800002C)} +// CHECK:STDOUT: inst780001FF: {kind: TupleInit, arg0: inst_block_empty, arg1: inst780001FE, type: type(inst7800002C)} +// CHECK:STDOUT: inst78000200: {kind: Converted, arg0: inst78000053, arg1: inst780001FF, type: type(inst7800002C)} +// CHECK:STDOUT: inst78000201: {kind: InPlaceInit, arg0: inst78000200, arg1: inst780001FE, type: type(inst7800002C)} +// CHECK:STDOUT: inst78000202: {kind: TupleInit, arg0: inst_block7800008A, arg1: inst78000046, type: type(symbolic_constant78000010)} +// CHECK:STDOUT: inst78000203: {kind: Converted, arg0: inst78000054, arg1: inst78000202, type: type(symbolic_constant78000010)} +// CHECK:STDOUT: inst78000204: {kind: ReturnExpr, arg0: inst78000203, arg1: inst78000046} // CHECK:STDOUT: bundles: {} // CHECK:STDOUT: constant_values: // CHECK:STDOUT: values: @@ -905,233 +1114,233 @@ fn Foo[T:! type](p: T*) -> (T*, ()) { // CHECK:STDOUT: inst78000017: symbolic_constant78000002 // CHECK:STDOUT: inst78000018: symbolic_constant78000001 // CHECK:STDOUT: inst78000019: symbolic_constant78000002 -// CHECK:STDOUT: inst7800001A: concrete_constant(inst7800001A) -// CHECK:STDOUT: inst7800001B: symbolic_constant78000002 +// CHECK:STDOUT: inst7800001A: symbolic_constant78000004 +// CHECK:STDOUT: inst7800001B: symbolic_constant78000003 // CHECK:STDOUT: inst7800001C: symbolic_constant78000004 -// CHECK:STDOUT: inst7800001D: symbolic_constant78000003 -// CHECK:STDOUT: inst7800001E: symbolic_constant78000004 +// CHECK:STDOUT: inst7800001D: symbolic_constant78000004 +// CHECK:STDOUT: inst7800001E: symbolic_constant78000006 // CHECK:STDOUT: inst7800001F: symbolic_constant78000005 -// CHECK:STDOUT: inst78000020: concrete_constant(inst78000020) -// CHECK:STDOUT: inst78000021: symbolic_constant78000006 -// CHECK:STDOUT: inst78000023: concrete_constant(inst78000023) -// CHECK:STDOUT: inst78000024: symbolic_constant78000002 -// CHECK:STDOUT: inst78000025: symbolic_constant78000004 -// CHECK:STDOUT: inst78000026: concrete_constant(inst78000026) -// CHECK:STDOUT: inst78000027: concrete_constant(inst78000028) -// CHECK:STDOUT: inst78000028: concrete_constant(inst78000028) -// CHECK:STDOUT: inst78000029: concrete_constant(inst78000029) -// CHECK:STDOUT: inst7800002A: symbolic_constant78000008 -// CHECK:STDOUT: inst7800002B: symbolic_constant78000007 -// CHECK:STDOUT: inst7800002C: symbolic_constant78000008 -// CHECK:STDOUT: inst7800002D: concrete_constant(inst7800002D) -// CHECK:STDOUT: inst7800002E: concrete_constant(inst78000026) -// CHECK:STDOUT: inst7800002F: symbolic_constant78000009 -// CHECK:STDOUT: inst78000030: symbolic_constant7800000A -// CHECK:STDOUT: inst78000031: symbolic_constant7800000A -// CHECK:STDOUT: inst78000032: symbolic_constant7800000C -// CHECK:STDOUT: inst78000033: symbolic_constant7800000B -// CHECK:STDOUT: inst78000034: symbolic_constant7800000C -// CHECK:STDOUT: inst78000035: symbolic_constant7800000D -// CHECK:STDOUT: inst78000036: concrete_constant(inst78000036) -// CHECK:STDOUT: inst78000037: symbolic_constant7800000E -// CHECK:STDOUT: inst78000038: concrete_constant(inst78000038) -// CHECK:STDOUT: inst78000039: concrete_constant(inst(TypeType)) -// CHECK:STDOUT: inst7800003B: symbolic_constant78000004 -// CHECK:STDOUT: inst7800003E: concrete_constant(inst78000040) -// CHECK:STDOUT: inst7800003F: concrete_constant(inst7800003F) -// CHECK:STDOUT: inst78000040: concrete_constant(inst78000040) -// CHECK:STDOUT: inst78000041: symbolic_constant78000010 -// CHECK:STDOUT: inst78000042: symbolic_constant7800000F -// CHECK:STDOUT: inst78000043: symbolic_constant78000010 -// CHECK:STDOUT: inst78000044: symbolic_constant78000011 -// CHECK:STDOUT: inst78000045: symbolic_constant78000013 -// CHECK:STDOUT: inst78000046: symbolic_constant78000012 -// CHECK:STDOUT: inst78000047: symbolic_constant78000013 -// CHECK:STDOUT: inst78000049: concrete_constant(inst78000028) -// CHECK:STDOUT: inst7800004B: symbolic_constant78000013 -// CHECK:STDOUT: inst7800004D: symbolic_constant78000010 -// CHECK:STDOUT: inst7800004E: concrete_constant(inst78000050) -// CHECK:STDOUT: inst7800004F: concrete_constant(inst78000050) -// CHECK:STDOUT: inst78000050: concrete_constant(inst78000050) -// CHECK:STDOUT: inst78000051: concrete_constant(inst78000051) -// CHECK:STDOUT: inst78000052: symbolic_constant78000014 -// CHECK:STDOUT: inst78000053: concrete_constant(inst7800006D) -// CHECK:STDOUT: inst78000054: constant -// CHECK:STDOUT: inst78000055: symbolic_constant78000014 -// CHECK:STDOUT: inst78000056: symbolic_constant78000017 -// CHECK:STDOUT: inst78000057: symbolic_constant78000015 -// CHECK:STDOUT: inst78000058: symbolic_constant78000016 -// CHECK:STDOUT: inst78000059: symbolic_constant78000018 -// CHECK:STDOUT: inst7800005A: symbolic_constant7800001A +// CHECK:STDOUT: inst78000020: symbolic_constant78000006 +// CHECK:STDOUT: inst78000021: symbolic_constant78000007 +// CHECK:STDOUT: inst78000022: symbolic_constant7800000A +// CHECK:STDOUT: inst78000023: symbolic_constant78000008 +// CHECK:STDOUT: inst78000024: symbolic_constant78000009 +// CHECK:STDOUT: inst78000025: symbolic_constant7800000A +// CHECK:STDOUT: inst78000026: symbolic_constant7800000C +// CHECK:STDOUT: inst78000027: symbolic_constant7800000B +// CHECK:STDOUT: inst78000028: symbolic_constant7800000C +// CHECK:STDOUT: inst7800002A: symbolic_constant78000004 +// CHECK:STDOUT: inst7800002B: symbolic_constant78000006 +// CHECK:STDOUT: inst7800002C: concrete_constant(inst7800002C) +// CHECK:STDOUT: inst7800002D: concrete_constant(inst7800002E) +// CHECK:STDOUT: inst7800002E: concrete_constant(inst7800002E) +// CHECK:STDOUT: inst7800002F: concrete_constant(inst7800002F) +// CHECK:STDOUT: inst78000030: symbolic_constant7800000E +// CHECK:STDOUT: inst78000031: symbolic_constant7800000D +// CHECK:STDOUT: inst78000032: symbolic_constant7800000E +// CHECK:STDOUT: inst78000033: concrete_constant(inst78000033) +// CHECK:STDOUT: inst78000034: concrete_constant(inst7800002C) +// CHECK:STDOUT: inst78000035: symbolic_constant7800000F +// CHECK:STDOUT: inst78000036: symbolic_constant78000010 +// CHECK:STDOUT: inst78000037: symbolic_constant78000010 +// CHECK:STDOUT: inst78000038: symbolic_constant78000012 +// CHECK:STDOUT: inst78000039: symbolic_constant78000011 +// CHECK:STDOUT: inst7800003A: symbolic_constant78000012 +// CHECK:STDOUT: inst7800003B: symbolic_constant78000013 +// CHECK:STDOUT: inst7800003C: symbolic_constant78000016 +// CHECK:STDOUT: inst7800003D: symbolic_constant78000014 +// CHECK:STDOUT: inst7800003E: symbolic_constant78000015 +// CHECK:STDOUT: inst7800003F: symbolic_constant78000016 +// CHECK:STDOUT: inst78000040: symbolic_constant78000018 +// CHECK:STDOUT: inst78000041: symbolic_constant78000017 +// CHECK:STDOUT: inst78000042: symbolic_constant78000018 +// CHECK:STDOUT: inst78000043: concrete_constant(inst(TypeType)) +// CHECK:STDOUT: inst78000045: symbolic_constant78000006 +// CHECK:STDOUT: inst78000048: concrete_constant(inst7800004A) +// CHECK:STDOUT: inst78000049: concrete_constant(inst78000049) +// CHECK:STDOUT: inst7800004A: concrete_constant(inst7800004A) +// CHECK:STDOUT: inst7800004B: symbolic_constant7800001A +// CHECK:STDOUT: inst7800004C: symbolic_constant78000019 +// CHECK:STDOUT: inst7800004D: symbolic_constant7800001A +// CHECK:STDOUT: inst7800004E: symbolic_constant7800001B +// CHECK:STDOUT: inst7800004F: symbolic_constant7800001D +// CHECK:STDOUT: inst78000050: symbolic_constant7800001C +// CHECK:STDOUT: inst78000051: symbolic_constant7800001D +// CHECK:STDOUT: inst78000053: concrete_constant(inst7800002E) +// CHECK:STDOUT: inst78000055: symbolic_constant7800001D +// CHECK:STDOUT: inst78000057: symbolic_constant7800001A +// CHECK:STDOUT: inst78000058: concrete_constant(inst7800005A) +// CHECK:STDOUT: inst78000059: concrete_constant(inst7800005A) +// CHECK:STDOUT: inst7800005A: concrete_constant(inst7800005A) // CHECK:STDOUT: inst7800005B: concrete_constant(inst7800005B) -// CHECK:STDOUT: inst7800005C: concrete_constant(inst7800005C) -// CHECK:STDOUT: inst7800005D: concrete_constant(inst7800005D) -// CHECK:STDOUT: inst7800005E: concrete_constant(inst7800005E) -// CHECK:STDOUT: inst7800005F: symbolic_constant7800001C +// CHECK:STDOUT: inst7800005C: symbolic_constant7800001E +// CHECK:STDOUT: inst7800005D: concrete_constant(inst78000086) +// CHECK:STDOUT: inst7800005E: constant +// CHECK:STDOUT: inst7800005F: symbolic_constant7800001E // CHECK:STDOUT: inst78000060: symbolic_constant78000021 -// CHECK:STDOUT: inst78000061: symbolic_constant78000020 -// CHECK:STDOUT: inst78000062: symbolic_constant78000014 +// CHECK:STDOUT: inst78000061: symbolic_constant7800001F +// CHECK:STDOUT: inst78000062: symbolic_constant78000020 // CHECK:STDOUT: inst78000063: symbolic_constant78000022 // CHECK:STDOUT: inst78000064: symbolic_constant78000023 // CHECK:STDOUT: inst78000065: symbolic_constant78000024 -// CHECK:STDOUT: inst78000066: symbolic_constant78000025 -// CHECK:STDOUT: inst78000067: symbolic_constant78000028 +// CHECK:STDOUT: inst78000066: symbolic_constant78000024 +// CHECK:STDOUT: inst78000067: symbolic_constant78000026 // CHECK:STDOUT: inst78000068: symbolic_constant78000029 -// CHECK:STDOUT: inst78000069: symbolic_constant7800002A -// CHECK:STDOUT: inst7800006A: constant -// CHECK:STDOUT: inst7800006B: concrete_constant(inst7800006B) -// CHECK:STDOUT: inst7800006C: symbolic_constant78000017 -// CHECK:STDOUT: inst7800006D: concrete_constant(inst7800006D) -// CHECK:STDOUT: inst7800006F: constant -// CHECK:STDOUT: inst78000070: concrete_constant(inst78000070) +// CHECK:STDOUT: inst78000069: symbolic_constant78000029 +// CHECK:STDOUT: inst7800006A: symbolic_constant7800002A +// CHECK:STDOUT: inst7800006B: symbolic_constant78000024 +// CHECK:STDOUT: inst7800006C: symbolic_constant7800002E +// CHECK:STDOUT: inst7800006D: symbolic_constant78000029 +// CHECK:STDOUT: inst7800006E: symbolic_constant78000037 +// CHECK:STDOUT: inst7800006F: symbolic_constant78000036 +// CHECK:STDOUT: inst78000070: symbolic_constant7800002B // CHECK:STDOUT: inst78000071: symbolic_constant7800002B -// CHECK:STDOUT: inst78000072: symbolic_constant7800002C -// CHECK:STDOUT: inst78000073: symbolic_constant7800002D -// CHECK:STDOUT: inst78000074: constant -// CHECK:STDOUT: inst78000075: concrete_constant(inst78000075) -// CHECK:STDOUT: inst78000076: symbolic_constant7800002F -// CHECK:STDOUT: inst78000077: symbolic_constant78000033 -// CHECK:STDOUT: inst78000078: symbolic_constant78000031 -// CHECK:STDOUT: inst78000079: symbolic_constant78000032 -// CHECK:STDOUT: inst7800007A: symbolic_constant78000035 -// CHECK:STDOUT: inst7800007B: concrete_constant(inst7800007B) -// CHECK:STDOUT: inst7800007C: concrete_constant(inst7800007C) -// CHECK:STDOUT: inst7800007D: concrete_constant(inst7800007D) -// CHECK:STDOUT: inst7800007E: concrete_constant(inst7800007E) -// CHECK:STDOUT: inst7800007F: symbolic_constant78000037 -// CHECK:STDOUT: inst78000080: symbolic_constant7800003E -// CHECK:STDOUT: inst78000081: symbolic_constant7800003D -// CHECK:STDOUT: inst78000082: symbolic_constant7800003C -// CHECK:STDOUT: inst78000083: symbolic_constant7800003F -// CHECK:STDOUT: inst78000084: symbolic_constant78000040 -// CHECK:STDOUT: inst78000085: symbolic_constant78000041 -// CHECK:STDOUT: inst78000086: symbolic_constant78000042 -// CHECK:STDOUT: inst78000087: symbolic_constant78000043 -// CHECK:STDOUT: inst78000088: symbolic_constant78000044 -// CHECK:STDOUT: inst78000089: symbolic_constant78000045 -// CHECK:STDOUT: inst7800008A: symbolic_constant78000046 -// CHECK:STDOUT: inst7800008B: symbolic_constant78000047 -// CHECK:STDOUT: inst7800008C: symbolic_constant78000048 -// CHECK:STDOUT: inst7800008D: symbolic_constant78000049 -// CHECK:STDOUT: inst7800008E: symbolic_constant7800004B -// CHECK:STDOUT: inst7800008F: symbolic_constant7800004C -// CHECK:STDOUT: inst78000090: symbolic_constant78000051 -// CHECK:STDOUT: inst78000091: symbolic_constant78000053 -// CHECK:STDOUT: inst78000092: symbolic_constant78000055 -// CHECK:STDOUT: inst78000093: symbolic_constant78000056 -// CHECK:STDOUT: inst78000094: symbolic_constant78000057 -// CHECK:STDOUT: inst78000095: symbolic_constant78000058 -// CHECK:STDOUT: inst78000096: symbolic_constant78000059 -// CHECK:STDOUT: inst78000097: symbolic_constant7800005A -// CHECK:STDOUT: inst78000098: symbolic_constant7800005B -// CHECK:STDOUT: inst78000099: concrete_constant(inst78000099) -// CHECK:STDOUT: inst7800009A: concrete_constant(inst7800009A) -// CHECK:STDOUT: inst7800009B: symbolic_constant7800002E -// CHECK:STDOUT: inst7800009C: concrete_constant(inst78000050) -// CHECK:STDOUT: inst7800009D: symbolic_constant7800003C -// CHECK:STDOUT: inst7800009E: symbolic_constant7800005F -// CHECK:STDOUT: inst7800009F: symbolic_constant78000060 -// CHECK:STDOUT: inst780000A0: symbolic_constant78000061 -// CHECK:STDOUT: inst780000A1: symbolic_constant78000062 -// CHECK:STDOUT: inst780000A2: symbolic_constant78000064 -// CHECK:STDOUT: inst780000A3: symbolic_constant78000065 -// CHECK:STDOUT: inst780000A4: constant -// CHECK:STDOUT: inst780000A5: concrete_constant(inst780000A5) -// CHECK:STDOUT: inst780000A6: concrete_constant(inst(BoolType)) -// CHECK:STDOUT: inst780000A7: concrete_constant(inst78000050) -// CHECK:STDOUT: inst780000A8: constant -// CHECK:STDOUT: inst780000A9: concrete_constant(inst780000A9) -// CHECK:STDOUT: inst780000AA: concrete_constant(inst(CharLiteralType)) -// CHECK:STDOUT: inst780000AB: concrete_constant(inst78000050) -// CHECK:STDOUT: inst780000AC: constant -// CHECK:STDOUT: inst780000AD: concrete_constant(inst780000AD) -// CHECK:STDOUT: inst780000AE: concrete_constant(inst(FloatLiteralType)) -// CHECK:STDOUT: inst780000AF: concrete_constant(inst78000050) -// CHECK:STDOUT: inst780000B0: constant -// CHECK:STDOUT: inst780000B1: concrete_constant(inst780000B1) -// CHECK:STDOUT: inst780000B2: concrete_constant(inst(IntLiteralType)) -// CHECK:STDOUT: inst780000B3: concrete_constant(inst78000050) -// CHECK:STDOUT: inst780000B4: symbolic_constant7800013F -// CHECK:STDOUT: inst780000B5: concrete_constant(inst780000B5) -// CHECK:STDOUT: inst780000B6: constant -// CHECK:STDOUT: inst780000B7: concrete_constant(inst780000B7) -// CHECK:STDOUT: inst780000B8: symbolic_constant78000067 -// CHECK:STDOUT: inst780000B9: concrete_constant(inst780000B9) -// CHECK:STDOUT: inst780000BA: symbolic_constant78000066 -// CHECK:STDOUT: inst780000BB: concrete_constant(inst78000050) -// CHECK:STDOUT: inst780000BC: symbolic_constant7800006B -// CHECK:STDOUT: inst780000BD: symbolic_constant7800006C -// CHECK:STDOUT: inst780000BE: symbolic_constant7800006D -// CHECK:STDOUT: inst780000BF: symbolic_constant7800006E -// CHECK:STDOUT: inst780000C0: symbolic_constant78000072 -// CHECK:STDOUT: inst780000C1: symbolic_constant78000070 -// CHECK:STDOUT: inst780000C2: symbolic_constant78000071 -// CHECK:STDOUT: inst780000C3: concrete_constant(inst780000C3) -// CHECK:STDOUT: inst780000C4: concrete_constant(inst780000C4) -// CHECK:STDOUT: inst780000C5: concrete_constant(inst780000C5) -// CHECK:STDOUT: inst780000C6: concrete_constant(inst780000C6) -// CHECK:STDOUT: inst780000C7: symbolic_constant78000075 -// CHECK:STDOUT: inst780000C8: symbolic_constant7800007A -// CHECK:STDOUT: inst780000C9: symbolic_constant78000079 -// CHECK:STDOUT: inst780000CA: symbolic_constant7800006B -// CHECK:STDOUT: inst780000CB: symbolic_constant7800007B -// CHECK:STDOUT: inst780000CC: symbolic_constant7800007C -// CHECK:STDOUT: inst780000CD: symbolic_constant7800007D -// CHECK:STDOUT: inst780000CE: symbolic_constant7800007E -// CHECK:STDOUT: inst780000CF: symbolic_constant78000080 -// CHECK:STDOUT: inst780000D0: symbolic_constant78000081 -// CHECK:STDOUT: inst780000D1: symbolic_constant78000082 -// CHECK:STDOUT: inst780000D2: constant -// CHECK:STDOUT: inst780000D3: concrete_constant(inst780000D3) -// CHECK:STDOUT: inst780000D4: concrete_constant(inst(TypeType)) -// CHECK:STDOUT: inst780000D5: concrete_constant(inst78000050) -// CHECK:STDOUT: inst780000D6: constant -// CHECK:STDOUT: inst780000D7: concrete_constant(inst780000D7) -// CHECK:STDOUT: inst780000D8: concrete_constant(inst78000026) -// CHECK:STDOUT: inst780000D9: concrete_constant(inst78000050) -// CHECK:STDOUT: inst780000DA: constant -// CHECK:STDOUT: inst780000DB: concrete_constant(inst780000DB) -// CHECK:STDOUT: inst780000DC: symbolic_constant78000083 -// CHECK:STDOUT: inst780000DD: symbolic_constant78000084 -// CHECK:STDOUT: inst780000DE: symbolic_constant78000085 -// CHECK:STDOUT: inst780000DF: constant -// CHECK:STDOUT: inst780000E0: concrete_constant(inst780000E0) -// CHECK:STDOUT: inst780000E1: symbolic_constant78000087 -// CHECK:STDOUT: inst780000E2: symbolic_constant7800008B -// CHECK:STDOUT: inst780000E3: symbolic_constant78000089 -// CHECK:STDOUT: inst780000E4: symbolic_constant7800008A +// CHECK:STDOUT: inst78000072: symbolic_constant78000035 +// CHECK:STDOUT: inst78000073: symbolic_constant78000034 +// CHECK:STDOUT: inst78000074: symbolic_constant78000027 +// CHECK:STDOUT: inst78000075: symbolic_constant7800001E +// CHECK:STDOUT: inst78000076: symbolic_constant78000038 +// CHECK:STDOUT: inst78000077: symbolic_constant78000039 +// CHECK:STDOUT: inst78000078: symbolic_constant7800003A +// CHECK:STDOUT: inst78000079: symbolic_constant7800003B +// CHECK:STDOUT: inst7800007A: symbolic_constant7800003C +// CHECK:STDOUT: inst7800007B: symbolic_constant7800003D +// CHECK:STDOUT: inst7800007C: symbolic_constant7800003E +// CHECK:STDOUT: inst7800007D: symbolic_constant7800003F +// CHECK:STDOUT: inst7800007E: symbolic_constant78000024 +// CHECK:STDOUT: inst7800007F: symbolic_constant78000029 +// CHECK:STDOUT: inst78000080: symbolic_constant78000042 +// CHECK:STDOUT: inst78000081: symbolic_constant78000043 +// CHECK:STDOUT: inst78000082: symbolic_constant78000044 +// CHECK:STDOUT: inst78000083: constant +// CHECK:STDOUT: inst78000084: concrete_constant(inst78000084) +// CHECK:STDOUT: inst78000085: symbolic_constant78000021 +// CHECK:STDOUT: inst78000086: concrete_constant(inst78000086) +// CHECK:STDOUT: inst78000088: constant +// CHECK:STDOUT: inst78000089: concrete_constant(inst78000089) +// CHECK:STDOUT: inst7800008A: symbolic_constant78000045 +// CHECK:STDOUT: inst7800008B: symbolic_constant78000046 +// CHECK:STDOUT: inst7800008C: symbolic_constant78000047 +// CHECK:STDOUT: inst7800008D: constant +// CHECK:STDOUT: inst7800008E: concrete_constant(inst7800008E) +// CHECK:STDOUT: inst7800008F: symbolic_constant78000049 +// CHECK:STDOUT: inst78000090: symbolic_constant7800004D +// CHECK:STDOUT: inst78000091: symbolic_constant7800004B +// CHECK:STDOUT: inst78000092: symbolic_constant7800004C +// CHECK:STDOUT: inst78000093: symbolic_constant7800004E +// CHECK:STDOUT: inst78000094: symbolic_constant7800004F +// CHECK:STDOUT: inst78000095: concrete_constant(inst78000095) +// CHECK:STDOUT: inst78000096: symbolic_constant78000051 +// CHECK:STDOUT: inst78000097: symbolic_constant7800004F +// CHECK:STDOUT: inst78000098: symbolic_constant78000052 +// CHECK:STDOUT: inst78000099: symbolic_constant78000055 +// CHECK:STDOUT: inst7800009A: symbolic_constant78000055 +// CHECK:STDOUT: inst7800009B: symbolic_constant78000056 +// CHECK:STDOUT: inst7800009C: symbolic_constant7800004F +// CHECK:STDOUT: inst7800009D: symbolic_constant7800005A +// CHECK:STDOUT: inst7800009E: symbolic_constant78000055 +// CHECK:STDOUT: inst7800009F: symbolic_constant78000065 +// CHECK:STDOUT: inst780000A0: symbolic_constant78000064 +// CHECK:STDOUT: inst780000A1: symbolic_constant78000057 +// CHECK:STDOUT: inst780000A2: symbolic_constant78000057 +// CHECK:STDOUT: inst780000A3: symbolic_constant78000063 +// CHECK:STDOUT: inst780000A4: symbolic_constant78000062 +// CHECK:STDOUT: inst780000A5: symbolic_constant78000053 +// CHECK:STDOUT: inst780000A6: symbolic_constant78000061 +// CHECK:STDOUT: inst780000A7: symbolic_constant78000066 +// CHECK:STDOUT: inst780000A8: symbolic_constant78000067 +// CHECK:STDOUT: inst780000A9: symbolic_constant78000068 +// CHECK:STDOUT: inst780000AA: symbolic_constant78000069 +// CHECK:STDOUT: inst780000AB: symbolic_constant7800006A +// CHECK:STDOUT: inst780000AC: symbolic_constant7800006B +// CHECK:STDOUT: inst780000AD: symbolic_constant7800006C +// CHECK:STDOUT: inst780000AE: symbolic_constant7800006D +// CHECK:STDOUT: inst780000AF: symbolic_constant7800006E +// CHECK:STDOUT: inst780000B0: symbolic_constant7800006F +// CHECK:STDOUT: inst780000B1: symbolic_constant78000070 +// CHECK:STDOUT: inst780000B2: symbolic_constant78000071 +// CHECK:STDOUT: inst780000B3: symbolic_constant78000072 +// CHECK:STDOUT: inst780000B4: symbolic_constant78000073 +// CHECK:STDOUT: inst780000B5: symbolic_constant78000074 +// CHECK:STDOUT: inst780000B6: symbolic_constant78000076 +// CHECK:STDOUT: inst780000B7: symbolic_constant78000077 +// CHECK:STDOUT: inst780000B8: symbolic_constant78000077 +// CHECK:STDOUT: inst780000B9: symbolic_constant78000078 +// CHECK:STDOUT: inst780000BA: symbolic_constant78000079 +// CHECK:STDOUT: inst780000BB: symbolic_constant7800007A +// CHECK:STDOUT: inst780000BC: symbolic_constant7800007A +// CHECK:STDOUT: inst780000BD: symbolic_constant7800007B +// CHECK:STDOUT: inst780000BE: symbolic_constant78000080 +// CHECK:STDOUT: inst780000BF: symbolic_constant78000082 +// CHECK:STDOUT: inst780000C0: symbolic_constant78000084 +// CHECK:STDOUT: inst780000C1: symbolic_constant78000085 +// CHECK:STDOUT: inst780000C2: symbolic_constant78000086 +// CHECK:STDOUT: inst780000C3: symbolic_constant78000087 +// CHECK:STDOUT: inst780000C4: symbolic_constant78000088 +// CHECK:STDOUT: inst780000C5: symbolic_constant78000089 +// CHECK:STDOUT: inst780000C6: symbolic_constant7800008A +// CHECK:STDOUT: inst780000C7: symbolic_constant7800004F +// CHECK:STDOUT: inst780000C8: symbolic_constant78000055 +// CHECK:STDOUT: inst780000C9: symbolic_constant7800008F +// CHECK:STDOUT: inst780000CA: symbolic_constant78000048 +// CHECK:STDOUT: inst780000CB: concrete_constant(inst7800005A) +// CHECK:STDOUT: inst780000CC: symbolic_constant78000061 +// CHECK:STDOUT: inst780000CD: symbolic_constant78000090 +// CHECK:STDOUT: inst780000CE: symbolic_constant78000091 +// CHECK:STDOUT: inst780000CF: symbolic_constant78000092 +// CHECK:STDOUT: inst780000D0: symbolic_constant78000093 +// CHECK:STDOUT: inst780000D1: symbolic_constant78000094 +// CHECK:STDOUT: inst780000D2: symbolic_constant78000096 +// CHECK:STDOUT: inst780000D3: symbolic_constant78000097 +// CHECK:STDOUT: inst780000D4: constant +// CHECK:STDOUT: inst780000D5: concrete_constant(inst780000D5) +// CHECK:STDOUT: inst780000D6: concrete_constant(inst(BoolType)) +// CHECK:STDOUT: inst780000D7: concrete_constant(inst7800005A) +// CHECK:STDOUT: inst780000D8: constant +// CHECK:STDOUT: inst780000D9: concrete_constant(inst780000D9) +// CHECK:STDOUT: inst780000DA: concrete_constant(inst(CharLiteralType)) +// CHECK:STDOUT: inst780000DB: concrete_constant(inst7800005A) +// CHECK:STDOUT: inst780000DC: constant +// CHECK:STDOUT: inst780000DD: concrete_constant(inst780000DD) +// CHECK:STDOUT: inst780000DE: concrete_constant(inst(FloatLiteralType)) +// CHECK:STDOUT: inst780000DF: concrete_constant(inst7800005A) +// CHECK:STDOUT: inst780000E0: constant +// CHECK:STDOUT: inst780000E1: concrete_constant(inst780000E1) +// CHECK:STDOUT: inst780000E2: concrete_constant(inst(IntLiteralType)) +// CHECK:STDOUT: inst780000E3: concrete_constant(inst7800005A) +// CHECK:STDOUT: inst780000E4: symbolic_constant780001BD // CHECK:STDOUT: inst780000E5: concrete_constant(inst780000E5) -// CHECK:STDOUT: inst780000E6: symbolic_constant7800008D -// CHECK:STDOUT: inst780000E7: symbolic_constant7800008E -// CHECK:STDOUT: inst780000E8: concrete_constant(inst780000E8) -// CHECK:STDOUT: inst780000E9: concrete_constant(inst780000E9) -// CHECK:STDOUT: inst780000EA: concrete_constant(inst780000EA) -// CHECK:STDOUT: inst780000EB: concrete_constant(inst780000EB) -// CHECK:STDOUT: inst780000EC: symbolic_constant78000090 -// CHECK:STDOUT: inst780000ED: symbolic_constant7800009A -// CHECK:STDOUT: inst780000EE: symbolic_constant78000099 -// CHECK:STDOUT: inst780000EF: symbolic_constant78000098 -// CHECK:STDOUT: inst780000F0: symbolic_constant78000097 -// CHECK:STDOUT: inst780000F1: symbolic_constant7800009B -// CHECK:STDOUT: inst780000F2: symbolic_constant7800009C -// CHECK:STDOUT: inst780000F3: symbolic_constant7800009D -// CHECK:STDOUT: inst780000F4: symbolic_constant7800009E -// CHECK:STDOUT: inst780000F5: symbolic_constant7800009F -// CHECK:STDOUT: inst780000F6: symbolic_constant780000A0 -// CHECK:STDOUT: inst780000F7: symbolic_constant780000A1 -// CHECK:STDOUT: inst780000F8: symbolic_constant780000A2 -// CHECK:STDOUT: inst780000F9: symbolic_constant780000A3 -// CHECK:STDOUT: inst780000FA: symbolic_constant780000A4 -// CHECK:STDOUT: inst780000FB: symbolic_constant780000A5 -// CHECK:STDOUT: inst780000FC: symbolic_constant780000A6 -// CHECK:STDOUT: inst780000FD: symbolic_constant780000A7 -// CHECK:STDOUT: inst780000FE: symbolic_constant780000A9 -// CHECK:STDOUT: inst780000FF: symbolic_constant780000AA +// CHECK:STDOUT: inst780000E6: constant +// CHECK:STDOUT: inst780000E7: concrete_constant(inst780000E7) +// CHECK:STDOUT: inst780000E8: symbolic_constant78000099 +// CHECK:STDOUT: inst780000E9: symbolic_constant7800009F +// CHECK:STDOUT: inst780000EA: symbolic_constant78000098 +// CHECK:STDOUT: inst780000EB: concrete_constant(inst7800005A) +// CHECK:STDOUT: inst780000EC: symbolic_constant7800009E +// CHECK:STDOUT: inst780000ED: symbolic_constant780000A0 +// CHECK:STDOUT: inst780000EE: symbolic_constant780000A1 +// CHECK:STDOUT: inst780000EF: symbolic_constant780000A2 +// CHECK:STDOUT: inst780000F0: symbolic_constant780000A3 +// CHECK:STDOUT: inst780000F1: symbolic_constant780000A7 +// CHECK:STDOUT: inst780000F2: symbolic_constant780000A5 +// CHECK:STDOUT: inst780000F3: symbolic_constant780000A6 +// CHECK:STDOUT: inst780000F4: symbolic_constant780000A8 +// CHECK:STDOUT: inst780000F5: symbolic_constant780000A8 +// CHECK:STDOUT: inst780000F6: symbolic_constant780000AA +// CHECK:STDOUT: inst780000F7: symbolic_constant780000AD +// CHECK:STDOUT: inst780000F8: symbolic_constant780000AD +// CHECK:STDOUT: inst780000F9: symbolic_constant780000AE +// CHECK:STDOUT: inst780000FA: symbolic_constant780000A8 +// CHECK:STDOUT: inst780000FB: symbolic_constant780000B2 +// CHECK:STDOUT: inst780000FC: symbolic_constant780000AD +// CHECK:STDOUT: inst780000FD: symbolic_constant780000BB +// CHECK:STDOUT: inst780000FE: symbolic_constant780000BA +// CHECK:STDOUT: inst780000FF: symbolic_constant780000AF // CHECK:STDOUT: inst78000100: symbolic_constant780000AF -// CHECK:STDOUT: inst78000101: symbolic_constant780000B7 -// CHECK:STDOUT: inst78000102: symbolic_constant780000B9 -// CHECK:STDOUT: inst78000103: symbolic_constant780000BA -// CHECK:STDOUT: inst78000104: symbolic_constant780000BB +// CHECK:STDOUT: inst78000101: symbolic_constant780000B9 +// CHECK:STDOUT: inst78000102: symbolic_constant780000B8 +// CHECK:STDOUT: inst78000103: symbolic_constant780000AB +// CHECK:STDOUT: inst78000104: symbolic_constant7800009E // CHECK:STDOUT: inst78000105: symbolic_constant780000BC // CHECK:STDOUT: inst78000106: symbolic_constant780000BD // CHECK:STDOUT: inst78000107: symbolic_constant780000BE @@ -1140,1120 +1349,1485 @@ fn Foo[T:! type](p: T*) -> (T*, ()) { // CHECK:STDOUT: inst7800010A: symbolic_constant780000C1 // CHECK:STDOUT: inst7800010B: symbolic_constant780000C2 // CHECK:STDOUT: inst7800010C: symbolic_constant780000C3 -// CHECK:STDOUT: inst7800010D: symbolic_constant780000C4 -// CHECK:STDOUT: inst7800010E: symbolic_constant780000C5 -// CHECK:STDOUT: inst7800010F: concrete_constant(inst7800010F) -// CHECK:STDOUT: inst78000110: concrete_constant(inst78000110) -// CHECK:STDOUT: inst78000111: symbolic_constant78000086 -// CHECK:STDOUT: inst78000112: concrete_constant(inst78000050) -// CHECK:STDOUT: inst78000113: symbolic_constant78000098 -// CHECK:STDOUT: inst78000114: symbolic_constant78000097 -// CHECK:STDOUT: inst78000115: symbolic_constant780000CC -// CHECK:STDOUT: inst78000116: symbolic_constant780000CD -// CHECK:STDOUT: inst78000117: symbolic_constant780000CE -// CHECK:STDOUT: inst78000118: symbolic_constant780000CF -// CHECK:STDOUT: inst78000119: symbolic_constant780000D0 -// CHECK:STDOUT: inst7800011A: symbolic_constant780000D1 -// CHECK:STDOUT: inst7800011B: symbolic_constant780000D2 -// CHECK:STDOUT: inst7800011C: symbolic_constant780000D4 -// CHECK:STDOUT: inst7800011D: symbolic_constant780000D5 -// CHECK:STDOUT: inst7800011E: constant -// CHECK:STDOUT: inst7800011F: concrete_constant(inst7800011F) -// CHECK:STDOUT: inst78000120: symbolic_constant780000D6 -// CHECK:STDOUT: inst78000121: symbolic_constant780000D7 -// CHECK:STDOUT: inst78000122: symbolic_constant780000D8 -// CHECK:STDOUT: inst78000123: constant -// CHECK:STDOUT: inst78000124: concrete_constant(inst78000124) -// CHECK:STDOUT: inst78000125: symbolic_constant780000DA -// CHECK:STDOUT: inst78000126: symbolic_constant780000DE -// CHECK:STDOUT: inst78000127: symbolic_constant780000DC -// CHECK:STDOUT: inst78000128: symbolic_constant780000DD -// CHECK:STDOUT: inst78000129: concrete_constant(inst78000129) -// CHECK:STDOUT: inst7800012A: symbolic_constant780000E0 -// CHECK:STDOUT: inst7800012B: symbolic_constant780000E1 -// CHECK:STDOUT: inst7800012C: concrete_constant(inst7800012C) -// CHECK:STDOUT: inst7800012D: concrete_constant(inst7800012D) -// CHECK:STDOUT: inst7800012E: concrete_constant(inst7800012E) -// CHECK:STDOUT: inst7800012F: concrete_constant(inst7800012F) -// CHECK:STDOUT: inst78000130: symbolic_constant780000E3 -// CHECK:STDOUT: inst78000131: symbolic_constant780000F0 -// CHECK:STDOUT: inst78000132: symbolic_constant780000EF -// CHECK:STDOUT: inst78000133: symbolic_constant780000EE -// CHECK:STDOUT: inst78000134: symbolic_constant780000ED -// CHECK:STDOUT: inst78000135: symbolic_constant780000EC -// CHECK:STDOUT: inst78000136: symbolic_constant780000F1 -// CHECK:STDOUT: inst78000137: symbolic_constant780000F2 -// CHECK:STDOUT: inst78000138: symbolic_constant780000F3 -// CHECK:STDOUT: inst78000139: symbolic_constant780000F4 -// CHECK:STDOUT: inst7800013A: symbolic_constant780000F5 -// CHECK:STDOUT: inst7800013B: symbolic_constant780000F6 -// CHECK:STDOUT: inst7800013C: symbolic_constant780000F7 -// CHECK:STDOUT: inst7800013D: symbolic_constant780000F8 -// CHECK:STDOUT: inst7800013E: symbolic_constant780000F9 -// CHECK:STDOUT: inst7800013F: symbolic_constant780000FA -// CHECK:STDOUT: inst78000140: symbolic_constant780000FB -// CHECK:STDOUT: inst78000141: symbolic_constant780000FC -// CHECK:STDOUT: inst78000142: symbolic_constant780000FD -// CHECK:STDOUT: inst78000143: symbolic_constant780000FE -// CHECK:STDOUT: inst78000144: symbolic_constant780000FF -// CHECK:STDOUT: inst78000145: symbolic_constant78000101 -// CHECK:STDOUT: inst78000146: symbolic_constant78000102 -// CHECK:STDOUT: inst78000147: symbolic_constant78000107 -// CHECK:STDOUT: inst78000148: symbolic_constant78000115 -// CHECK:STDOUT: inst78000149: symbolic_constant78000117 -// CHECK:STDOUT: inst7800014A: symbolic_constant78000118 -// CHECK:STDOUT: inst7800014B: symbolic_constant78000119 -// CHECK:STDOUT: inst7800014C: symbolic_constant7800011A -// CHECK:STDOUT: inst7800014D: symbolic_constant7800011B -// CHECK:STDOUT: inst7800014E: symbolic_constant7800011C -// CHECK:STDOUT: inst7800014F: symbolic_constant7800011D -// CHECK:STDOUT: inst78000150: symbolic_constant7800011E -// CHECK:STDOUT: inst78000151: symbolic_constant7800011F -// CHECK:STDOUT: inst78000152: symbolic_constant78000120 -// CHECK:STDOUT: inst78000153: symbolic_constant78000121 -// CHECK:STDOUT: inst78000154: symbolic_constant78000122 -// CHECK:STDOUT: inst78000155: symbolic_constant78000123 -// CHECK:STDOUT: inst78000156: symbolic_constant78000124 -// CHECK:STDOUT: inst78000157: symbolic_constant78000125 -// CHECK:STDOUT: inst78000158: symbolic_constant78000126 -// CHECK:STDOUT: inst78000159: symbolic_constant78000127 -// CHECK:STDOUT: inst7800015A: symbolic_constant78000128 -// CHECK:STDOUT: inst7800015B: symbolic_constant78000129 -// CHECK:STDOUT: inst7800015C: concrete_constant(inst7800015C) -// CHECK:STDOUT: inst7800015D: concrete_constant(inst7800015D) -// CHECK:STDOUT: inst7800015E: concrete_constant(inst7800015E) -// CHECK:STDOUT: inst7800015F: symbolic_constant780000D9 -// CHECK:STDOUT: inst78000160: concrete_constant(inst78000050) -// CHECK:STDOUT: inst78000161: symbolic_constant780000EE -// CHECK:STDOUT: inst78000162: symbolic_constant780000ED -// CHECK:STDOUT: inst78000163: symbolic_constant780000EC -// CHECK:STDOUT: inst78000164: symbolic_constant78000132 -// CHECK:STDOUT: inst78000165: symbolic_constant78000133 -// CHECK:STDOUT: inst78000166: symbolic_constant78000134 -// CHECK:STDOUT: inst78000167: symbolic_constant78000135 -// CHECK:STDOUT: inst78000168: symbolic_constant78000136 -// CHECK:STDOUT: inst78000169: symbolic_constant78000137 -// CHECK:STDOUT: inst7800016A: symbolic_constant78000138 -// CHECK:STDOUT: inst7800016B: symbolic_constant78000139 -// CHECK:STDOUT: inst7800016C: symbolic_constant7800013A -// CHECK:STDOUT: inst7800016D: symbolic_constant7800013C -// CHECK:STDOUT: inst7800016E: symbolic_constant7800013D -// CHECK:STDOUT: inst7800016F: symbolic_constant7800013E -// CHECK:STDOUT: inst78000170: symbolic_constant78000141 -// CHECK:STDOUT: inst78000171: symbolic_constant78000140 -// CHECK:STDOUT: inst78000172: symbolic_constant78000141 -// CHECK:STDOUT: inst78000173: symbolic_constant78000142 -// CHECK:STDOUT: inst78000174: symbolic_constant78000143 -// CHECK:STDOUT: inst78000175: symbolic_constant78000144 -// CHECK:STDOUT: inst78000176: symbolic_constant78000145 -// CHECK:STDOUT: inst78000177: symbolic_constant7800014B -// CHECK:STDOUT: inst78000178: symbolic_constant78000146 -// CHECK:STDOUT: inst78000179: symbolic_constant78000147 -// CHECK:STDOUT: inst7800017A: symbolic_constant78000148 -// CHECK:STDOUT: inst7800017B: symbolic_constant78000149 -// CHECK:STDOUT: inst7800017C: symbolic_constant7800014A -// CHECK:STDOUT: inst7800017D: symbolic_constant7800014B -// CHECK:STDOUT: inst78000180: symbolic_constant78000141 -// CHECK:STDOUT: inst78000181: symbolic_constant78000148 -// CHECK:STDOUT: inst78000182: symbolic_constant78000148 -// CHECK:STDOUT: inst78000183: symbolic_constant7800014D -// CHECK:STDOUT: inst78000184: symbolic_constant7800014C -// CHECK:STDOUT: inst78000185: symbolic_constant7800014D -// CHECK:STDOUT: inst7800018A: concrete_constant(inst78000028) -// CHECK:STDOUT: inst7800018B: concrete_constant(inst78000028) -// CHECK:STDOUT: inst7800018C: concrete_constant(inst78000028) +// CHECK:STDOUT: inst7800010D: symbolic_constant780000A8 +// CHECK:STDOUT: inst7800010E: symbolic_constant780000AD +// CHECK:STDOUT: inst7800010F: symbolic_constant780000C5 +// CHECK:STDOUT: inst78000110: symbolic_constant780000C6 +// CHECK:STDOUT: inst78000111: symbolic_constant780000C7 +// CHECK:STDOUT: inst78000112: constant +// CHECK:STDOUT: inst78000113: concrete_constant(inst78000113) +// CHECK:STDOUT: inst78000114: concrete_constant(inst(TypeType)) +// CHECK:STDOUT: inst78000115: concrete_constant(inst7800005A) +// CHECK:STDOUT: inst78000116: constant +// CHECK:STDOUT: inst78000117: concrete_constant(inst78000117) +// CHECK:STDOUT: inst78000118: concrete_constant(inst7800002C) +// CHECK:STDOUT: inst78000119: concrete_constant(inst7800005A) +// CHECK:STDOUT: inst7800011A: constant +// CHECK:STDOUT: inst7800011B: concrete_constant(inst7800011B) +// CHECK:STDOUT: inst7800011C: symbolic_constant780000C8 +// CHECK:STDOUT: inst7800011D: symbolic_constant780000C9 +// CHECK:STDOUT: inst7800011E: symbolic_constant780000CA +// CHECK:STDOUT: inst7800011F: constant +// CHECK:STDOUT: inst78000120: concrete_constant(inst78000120) +// CHECK:STDOUT: inst78000121: symbolic_constant780000CC +// CHECK:STDOUT: inst78000122: symbolic_constant780000D0 +// CHECK:STDOUT: inst78000123: symbolic_constant780000CE +// CHECK:STDOUT: inst78000124: symbolic_constant780000CF +// CHECK:STDOUT: inst78000125: symbolic_constant780000D1 +// CHECK:STDOUT: inst78000126: symbolic_constant780000D2 +// CHECK:STDOUT: inst78000127: concrete_constant(inst78000127) +// CHECK:STDOUT: inst78000128: symbolic_constant780000D4 +// CHECK:STDOUT: inst78000129: symbolic_constant780000D5 +// CHECK:STDOUT: inst7800012A: symbolic_constant780000D2 +// CHECK:STDOUT: inst7800012B: symbolic_constant780000D6 +// CHECK:STDOUT: inst7800012C: symbolic_constant780000D9 +// CHECK:STDOUT: inst7800012D: symbolic_constant780000D9 +// CHECK:STDOUT: inst7800012E: symbolic_constant780000DA +// CHECK:STDOUT: inst7800012F: symbolic_constant780000D2 +// CHECK:STDOUT: inst78000130: symbolic_constant780000DE +// CHECK:STDOUT: inst78000131: symbolic_constant780000D9 +// CHECK:STDOUT: inst78000132: symbolic_constant780000EC +// CHECK:STDOUT: inst78000133: symbolic_constant780000EB +// CHECK:STDOUT: inst78000134: symbolic_constant780000DB +// CHECK:STDOUT: inst78000135: symbolic_constant780000DB +// CHECK:STDOUT: inst78000136: symbolic_constant780000EA +// CHECK:STDOUT: inst78000137: symbolic_constant780000E9 +// CHECK:STDOUT: inst78000138: symbolic_constant780000D7 +// CHECK:STDOUT: inst78000139: symbolic_constant780000E8 +// CHECK:STDOUT: inst7800013A: symbolic_constant780000E7 +// CHECK:STDOUT: inst7800013B: symbolic_constant780000ED +// CHECK:STDOUT: inst7800013C: symbolic_constant780000EE +// CHECK:STDOUT: inst7800013D: symbolic_constant780000EF +// CHECK:STDOUT: inst7800013E: symbolic_constant780000F0 +// CHECK:STDOUT: inst7800013F: symbolic_constant780000F1 +// CHECK:STDOUT: inst78000140: symbolic_constant780000F2 +// CHECK:STDOUT: inst78000141: symbolic_constant780000F3 +// CHECK:STDOUT: inst78000142: symbolic_constant780000F4 +// CHECK:STDOUT: inst78000143: symbolic_constant780000F5 +// CHECK:STDOUT: inst78000144: symbolic_constant780000F6 +// CHECK:STDOUT: inst78000145: symbolic_constant780000F7 +// CHECK:STDOUT: inst78000146: symbolic_constant780000F8 +// CHECK:STDOUT: inst78000147: symbolic_constant780000F9 +// CHECK:STDOUT: inst78000148: symbolic_constant780000FA +// CHECK:STDOUT: inst78000149: symbolic_constant780000FB +// CHECK:STDOUT: inst7800014A: symbolic_constant780000FC +// CHECK:STDOUT: inst7800014B: symbolic_constant780000FD +// CHECK:STDOUT: inst7800014C: symbolic_constant780000FF +// CHECK:STDOUT: inst7800014D: symbolic_constant78000100 +// CHECK:STDOUT: inst7800014E: symbolic_constant78000100 +// CHECK:STDOUT: inst7800014F: symbolic_constant78000101 +// CHECK:STDOUT: inst78000150: symbolic_constant78000102 +// CHECK:STDOUT: inst78000151: symbolic_constant78000103 +// CHECK:STDOUT: inst78000152: symbolic_constant78000103 +// CHECK:STDOUT: inst78000153: symbolic_constant78000104 +// CHECK:STDOUT: inst78000154: symbolic_constant78000109 +// CHECK:STDOUT: inst78000155: symbolic_constant78000111 +// CHECK:STDOUT: inst78000156: symbolic_constant78000113 +// CHECK:STDOUT: inst78000157: symbolic_constant78000114 +// CHECK:STDOUT: inst78000158: symbolic_constant78000115 +// CHECK:STDOUT: inst78000159: symbolic_constant78000116 +// CHECK:STDOUT: inst7800015A: symbolic_constant78000117 +// CHECK:STDOUT: inst7800015B: symbolic_constant78000118 +// CHECK:STDOUT: inst7800015C: symbolic_constant78000119 +// CHECK:STDOUT: inst7800015D: symbolic_constant7800011A +// CHECK:STDOUT: inst7800015E: symbolic_constant7800011B +// CHECK:STDOUT: inst7800015F: symbolic_constant7800011C +// CHECK:STDOUT: inst78000160: symbolic_constant7800011D +// CHECK:STDOUT: inst78000161: symbolic_constant7800011E +// CHECK:STDOUT: inst78000162: symbolic_constant7800011F +// CHECK:STDOUT: inst78000163: symbolic_constant780000D2 +// CHECK:STDOUT: inst78000164: symbolic_constant780000D9 +// CHECK:STDOUT: inst78000165: symbolic_constant78000129 +// CHECK:STDOUT: inst78000166: symbolic_constant78000128 +// CHECK:STDOUT: inst78000167: symbolic_constant780000CB +// CHECK:STDOUT: inst78000168: concrete_constant(inst7800005A) +// CHECK:STDOUT: inst78000169: symbolic_constant780000E8 +// CHECK:STDOUT: inst7800016A: symbolic_constant780000E7 +// CHECK:STDOUT: inst7800016B: symbolic_constant7800012A +// CHECK:STDOUT: inst7800016C: symbolic_constant7800012B +// CHECK:STDOUT: inst7800016D: symbolic_constant7800012C +// CHECK:STDOUT: inst7800016E: symbolic_constant7800012D +// CHECK:STDOUT: inst7800016F: symbolic_constant7800012E +// CHECK:STDOUT: inst78000170: symbolic_constant7800012F +// CHECK:STDOUT: inst78000171: symbolic_constant78000130 +// CHECK:STDOUT: inst78000172: symbolic_constant78000131 +// CHECK:STDOUT: inst78000173: symbolic_constant78000132 +// CHECK:STDOUT: inst78000174: symbolic_constant78000134 +// CHECK:STDOUT: inst78000175: symbolic_constant78000135 +// CHECK:STDOUT: inst78000176: constant +// CHECK:STDOUT: inst78000177: concrete_constant(inst78000177) +// CHECK:STDOUT: inst78000178: symbolic_constant78000136 +// CHECK:STDOUT: inst78000179: symbolic_constant78000137 +// CHECK:STDOUT: inst7800017A: symbolic_constant78000138 +// CHECK:STDOUT: inst7800017B: constant +// CHECK:STDOUT: inst7800017C: concrete_constant(inst7800017C) +// CHECK:STDOUT: inst7800017D: symbolic_constant7800013A +// CHECK:STDOUT: inst7800017E: symbolic_constant7800013E +// CHECK:STDOUT: inst7800017F: symbolic_constant7800013C +// CHECK:STDOUT: inst78000180: symbolic_constant7800013D +// CHECK:STDOUT: inst78000181: symbolic_constant7800013F +// CHECK:STDOUT: inst78000182: symbolic_constant78000140 +// CHECK:STDOUT: inst78000183: concrete_constant(inst78000183) +// CHECK:STDOUT: inst78000184: symbolic_constant78000142 +// CHECK:STDOUT: inst78000185: symbolic_constant78000143 +// CHECK:STDOUT: inst78000186: symbolic_constant78000140 +// CHECK:STDOUT: inst78000187: symbolic_constant78000144 +// CHECK:STDOUT: inst78000188: symbolic_constant78000147 +// CHECK:STDOUT: inst78000189: symbolic_constant78000147 +// CHECK:STDOUT: inst7800018A: symbolic_constant78000148 +// CHECK:STDOUT: inst7800018B: symbolic_constant78000140 +// CHECK:STDOUT: inst7800018C: symbolic_constant7800014C +// CHECK:STDOUT: inst7800018D: symbolic_constant78000147 +// CHECK:STDOUT: inst7800018E: symbolic_constant7800015D +// CHECK:STDOUT: inst7800018F: symbolic_constant7800015C +// CHECK:STDOUT: inst78000190: symbolic_constant78000149 +// CHECK:STDOUT: inst78000191: symbolic_constant78000149 +// CHECK:STDOUT: inst78000192: symbolic_constant7800015B +// CHECK:STDOUT: inst78000193: symbolic_constant7800015A +// CHECK:STDOUT: inst78000194: symbolic_constant78000145 +// CHECK:STDOUT: inst78000195: symbolic_constant78000159 +// CHECK:STDOUT: inst78000196: symbolic_constant78000158 +// CHECK:STDOUT: inst78000197: symbolic_constant78000157 +// CHECK:STDOUT: inst78000198: symbolic_constant7800015E +// CHECK:STDOUT: inst78000199: symbolic_constant7800015F +// CHECK:STDOUT: inst7800019A: symbolic_constant78000160 +// CHECK:STDOUT: inst7800019B: symbolic_constant78000161 +// CHECK:STDOUT: inst7800019C: symbolic_constant78000162 +// CHECK:STDOUT: inst7800019D: symbolic_constant78000163 +// CHECK:STDOUT: inst7800019E: symbolic_constant78000164 +// CHECK:STDOUT: inst7800019F: symbolic_constant78000165 +// CHECK:STDOUT: inst780001A0: symbolic_constant78000166 +// CHECK:STDOUT: inst780001A1: symbolic_constant78000167 +// CHECK:STDOUT: inst780001A2: symbolic_constant78000168 +// CHECK:STDOUT: inst780001A3: symbolic_constant78000169 +// CHECK:STDOUT: inst780001A4: symbolic_constant7800016A +// CHECK:STDOUT: inst780001A5: symbolic_constant7800016B +// CHECK:STDOUT: inst780001A6: symbolic_constant7800016C +// CHECK:STDOUT: inst780001A7: symbolic_constant7800016D +// CHECK:STDOUT: inst780001A8: symbolic_constant7800016E +// CHECK:STDOUT: inst780001A9: symbolic_constant7800016F +// CHECK:STDOUT: inst780001AA: symbolic_constant78000170 +// CHECK:STDOUT: inst780001AB: symbolic_constant78000172 +// CHECK:STDOUT: inst780001AC: symbolic_constant78000173 +// CHECK:STDOUT: inst780001AD: symbolic_constant78000173 +// CHECK:STDOUT: inst780001AE: symbolic_constant78000174 +// CHECK:STDOUT: inst780001AF: symbolic_constant78000175 +// CHECK:STDOUT: inst780001B0: symbolic_constant78000176 +// CHECK:STDOUT: inst780001B1: symbolic_constant78000176 +// CHECK:STDOUT: inst780001B2: symbolic_constant78000177 +// CHECK:STDOUT: inst780001B3: symbolic_constant7800017C +// CHECK:STDOUT: inst780001B4: symbolic_constant7800018A +// CHECK:STDOUT: inst780001B5: symbolic_constant7800018C +// CHECK:STDOUT: inst780001B6: symbolic_constant7800018D +// CHECK:STDOUT: inst780001B7: symbolic_constant7800018E +// CHECK:STDOUT: inst780001B8: symbolic_constant7800018F +// CHECK:STDOUT: inst780001B9: symbolic_constant78000190 +// CHECK:STDOUT: inst780001BA: symbolic_constant78000191 +// CHECK:STDOUT: inst780001BB: symbolic_constant78000192 +// CHECK:STDOUT: inst780001BC: symbolic_constant78000193 +// CHECK:STDOUT: inst780001BD: symbolic_constant78000194 +// CHECK:STDOUT: inst780001BE: symbolic_constant78000195 +// CHECK:STDOUT: inst780001BF: symbolic_constant78000196 +// CHECK:STDOUT: inst780001C0: symbolic_constant78000197 +// CHECK:STDOUT: inst780001C1: symbolic_constant78000198 +// CHECK:STDOUT: inst780001C2: symbolic_constant78000199 +// CHECK:STDOUT: inst780001C3: symbolic_constant7800019A +// CHECK:STDOUT: inst780001C4: symbolic_constant7800019B +// CHECK:STDOUT: inst780001C5: symbolic_constant7800019C +// CHECK:STDOUT: inst780001C6: symbolic_constant7800019D +// CHECK:STDOUT: inst780001C7: symbolic_constant7800019E +// CHECK:STDOUT: inst780001C8: symbolic_constant78000140 +// CHECK:STDOUT: inst780001C9: symbolic_constant78000147 +// CHECK:STDOUT: inst780001CA: symbolic_constant780001AC +// CHECK:STDOUT: inst780001CB: symbolic_constant780001AB +// CHECK:STDOUT: inst780001CC: symbolic_constant780001AA +// CHECK:STDOUT: inst780001CD: symbolic_constant78000139 +// CHECK:STDOUT: inst780001CE: concrete_constant(inst7800005A) +// CHECK:STDOUT: inst780001CF: symbolic_constant78000159 +// CHECK:STDOUT: inst780001D0: symbolic_constant78000158 +// CHECK:STDOUT: inst780001D1: symbolic_constant78000157 +// CHECK:STDOUT: inst780001D2: symbolic_constant780001AD +// CHECK:STDOUT: inst780001D3: symbolic_constant780001AE +// CHECK:STDOUT: inst780001D4: symbolic_constant780001AF +// CHECK:STDOUT: inst780001D5: symbolic_constant780001B0 +// CHECK:STDOUT: inst780001D6: symbolic_constant780001B1 +// CHECK:STDOUT: inst780001D7: symbolic_constant780001B2 +// CHECK:STDOUT: inst780001D8: symbolic_constant780001B3 +// CHECK:STDOUT: inst780001D9: symbolic_constant780001B4 +// CHECK:STDOUT: inst780001DA: symbolic_constant780001B5 +// CHECK:STDOUT: inst780001DB: symbolic_constant780001B6 +// CHECK:STDOUT: inst780001DC: symbolic_constant780001B7 +// CHECK:STDOUT: inst780001DD: symbolic_constant780001B8 +// CHECK:STDOUT: inst780001DE: symbolic_constant780001BA +// CHECK:STDOUT: inst780001DF: symbolic_constant780001BB +// CHECK:STDOUT: inst780001E0: symbolic_constant780001BC +// CHECK:STDOUT: inst780001E1: symbolic_constant780001BF +// CHECK:STDOUT: inst780001E2: symbolic_constant780001BE +// CHECK:STDOUT: inst780001E3: symbolic_constant780001BF +// CHECK:STDOUT: inst780001E4: symbolic_constant780001C0 +// CHECK:STDOUT: inst780001E5: symbolic_constant780001C1 +// CHECK:STDOUT: inst780001E6: symbolic_constant780001C2 +// CHECK:STDOUT: inst780001E7: symbolic_constant780001C3 +// CHECK:STDOUT: inst780001E8: symbolic_constant780001C9 +// CHECK:STDOUT: inst780001E9: symbolic_constant780001C4 +// CHECK:STDOUT: inst780001EA: symbolic_constant780001C5 +// CHECK:STDOUT: inst780001EB: symbolic_constant780001C6 +// CHECK:STDOUT: inst780001EC: symbolic_constant780001C7 +// CHECK:STDOUT: inst780001ED: symbolic_constant780001C8 +// CHECK:STDOUT: inst780001EE: symbolic_constant780001C9 +// CHECK:STDOUT: inst780001F1: symbolic_constant780001BF +// CHECK:STDOUT: inst780001F2: symbolic_constant780001C6 +// CHECK:STDOUT: inst780001F3: symbolic_constant780001C6 +// CHECK:STDOUT: inst780001F5: symbolic_constant780001BF +// CHECK:STDOUT: inst780001F6: symbolic_constant780001C6 +// CHECK:STDOUT: inst780001F7: symbolic_constant780001C6 +// CHECK:STDOUT: inst780001F8: symbolic_constant780001CB +// CHECK:STDOUT: inst780001F9: symbolic_constant780001CA +// CHECK:STDOUT: inst780001FA: symbolic_constant780001CB +// CHECK:STDOUT: inst780001FF: concrete_constant(inst7800002E) +// CHECK:STDOUT: inst78000200: concrete_constant(inst7800002E) +// CHECK:STDOUT: inst78000201: concrete_constant(inst7800002E) // CHECK:STDOUT: symbolic_constants: // CHECK:STDOUT: symbolic_constant78000000: {inst: inst78000014, kind: self, attached: null} // CHECK:STDOUT: symbolic_constant78000001: {inst: inst78000018, kind: checked, attached: null} // CHECK:STDOUT: symbolic_constant78000002: {inst: inst78000018, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant78000003: {inst: inst7800001D, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant78000004: {inst: inst7800001D, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant78000003: {inst: inst7800001B, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000004: {inst: inst7800001B, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_decl1}} // CHECK:STDOUT: symbolic_constant78000005: {inst: inst7800001F, kind: checked, attached: null} // CHECK:STDOUT: symbolic_constant78000006: {inst: inst7800001F, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant78000007: {inst: inst7800002B, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant78000008: {inst: inst7800002B, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_decl3}} -// CHECK:STDOUT: symbolic_constant78000009: {inst: inst7800002F, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant7800000A: {inst: inst7800002F, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_decl4}} -// CHECK:STDOUT: symbolic_constant7800000B: {inst: inst78000033, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant7800000C: {inst: inst78000033, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_decl5}} -// CHECK:STDOUT: symbolic_constant7800000D: {inst: inst78000035, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant7800000E: {inst: inst78000035, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_decl6}} -// CHECK:STDOUT: symbolic_constant7800000F: {inst: inst78000042, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant78000010: {inst: inst78000042, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_def0}} -// CHECK:STDOUT: symbolic_constant78000011: {inst: inst78000044, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant78000012: {inst: inst78000046, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant78000013: {inst: inst78000046, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant78000014: {inst: inst78000052, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant78000015: {inst: inst78000057, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant78000016: {inst: inst78000058, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant78000017: {inst: inst78000058, kind: checked, attached: {generic: generic78000001, index: generic_inst_in_def2}} -// CHECK:STDOUT: symbolic_constant78000018: {inst: inst78000059, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant78000019: {inst: inst78000057, kind: checked, attached: {generic: generic78000001, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant7800001A: {inst: inst7800005A, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant7800001B: {inst: inst7800005A, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant7800001C: {inst: inst7800005F, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant7800001D: {inst: inst7800005F, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl3}} -// CHECK:STDOUT: symbolic_constant7800001E: {inst: inst78000059, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant7800001F: {inst: inst78000052, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant78000020: {inst: inst7800005F, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl3}} -// CHECK:STDOUT: symbolic_constant78000021: {inst: inst78000059, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant78000022: {inst: inst78000052, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant78000023: {inst: inst78000059, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant78000024: {inst: inst7800005A, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant78000025: {inst: inst7800005F, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl3}} -// CHECK:STDOUT: symbolic_constant78000026: {inst: inst78000058, kind: checked, attached: {generic: generic78000001, index: generic_inst_in_def2}} -// CHECK:STDOUT: symbolic_constant78000027: {inst: inst78000052, kind: checked, attached: {generic: generic78000001, index: generic_inst_in_def0}} -// CHECK:STDOUT: symbolic_constant78000028: {inst: inst78000052, kind: checked, attached: {generic: generic78000001, index: generic_inst_in_def0}} -// CHECK:STDOUT: symbolic_constant78000029: {inst: inst78000057, kind: checked, attached: {generic: generic78000001, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant7800002A: {inst: inst78000058, kind: checked, attached: {generic: generic78000001, index: generic_inst_in_def2}} -// CHECK:STDOUT: symbolic_constant7800002B: {inst: inst78000071, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant7800002C: {inst: inst78000072, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant7800002D: {inst: inst78000073, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant7800002E: {inst: inst78000073, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant7800002F: {inst: inst78000076, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant78000030: {inst: inst78000076, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_decl3}} -// CHECK:STDOUT: symbolic_constant78000031: {inst: inst78000078, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant78000032: {inst: inst78000079, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant78000033: {inst: inst78000079, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant78000034: {inst: inst78000078, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_def0}} -// CHECK:STDOUT: symbolic_constant78000035: {inst: inst7800007A, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant78000036: {inst: inst7800007A, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl3}} -// CHECK:STDOUT: symbolic_constant78000037: {inst: inst7800007F, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant78000038: {inst: inst7800007F, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl4}} -// CHECK:STDOUT: symbolic_constant78000039: {inst: inst78000073, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant7800003A: {inst: inst78000072, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant7800003B: {inst: inst78000071, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant7800003C: {inst: inst78000071, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant7800003D: {inst: inst7800007F, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl4}} -// CHECK:STDOUT: symbolic_constant7800003E: {inst: inst78000073, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant7800003F: {inst: inst78000071, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant78000040: {inst: inst78000072, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant78000041: {inst: inst78000073, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant78000042: {inst: inst7800007A, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl3}} -// CHECK:STDOUT: symbolic_constant78000043: {inst: inst7800007F, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl4}} -// CHECK:STDOUT: symbolic_constant78000044: {inst: inst78000088, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant78000045: {inst: inst78000089, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant78000046: {inst: inst7800008A, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant78000047: {inst: inst7800008B, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant78000048: {inst: inst7800008C, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant78000049: {inst: inst7800008D, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant7800004A: {inst: inst7800008D, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def6}} -// CHECK:STDOUT: symbolic_constant7800004B: {inst: inst7800008E, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant7800004C: {inst: inst7800008F, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant7800004D: {inst: inst7800008C, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def5}} -// CHECK:STDOUT: symbolic_constant7800004E: {inst: inst78000088, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def4}} -// CHECK:STDOUT: symbolic_constant7800004F: {inst: inst7800008B, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def3}} -// CHECK:STDOUT: symbolic_constant78000050: {inst: inst78000089, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def2}} -// CHECK:STDOUT: symbolic_constant78000051: {inst: inst78000090, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant78000052: {inst: inst78000090, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant78000053: {inst: inst78000091, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant78000054: {inst: inst78000091, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def0}} -// CHECK:STDOUT: symbolic_constant78000055: {inst: inst78000091, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def0}} -// CHECK:STDOUT: symbolic_constant78000056: {inst: inst78000090, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant78000057: {inst: inst78000089, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def2}} -// CHECK:STDOUT: symbolic_constant78000058: {inst: inst7800008B, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def3}} -// CHECK:STDOUT: symbolic_constant78000059: {inst: inst78000088, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def4}} -// CHECK:STDOUT: symbolic_constant7800005A: {inst: inst7800008C, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def5}} -// CHECK:STDOUT: symbolic_constant7800005B: {inst: inst7800008D, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def6}} -// CHECK:STDOUT: symbolic_constant7800005C: {inst: inst78000073, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant7800005D: {inst: inst78000072, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant7800005E: {inst: inst78000071, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant7800005F: {inst: inst78000071, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant78000060: {inst: inst78000072, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant78000061: {inst: inst78000073, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant78000062: {inst: inst78000076, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_decl3}} -// CHECK:STDOUT: symbolic_constant78000063: {inst: inst78000079, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant78000064: {inst: inst78000078, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_def0}} -// CHECK:STDOUT: symbolic_constant78000065: {inst: inst78000079, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant78000066: {inst: inst7800001D, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant78000067: {inst: inst780000B8, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant78000068: {inst: inst780000B8, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant78000069: {inst: inst7800001D, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant7800006A: {inst: inst78000018, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant7800006B: {inst: inst78000018, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant7800006C: {inst: inst78000018, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant7800006D: {inst: inst7800001D, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant7800006E: {inst: inst780000B8, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant7800006F: {inst: inst78000042, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_def2}} -// CHECK:STDOUT: symbolic_constant78000070: {inst: inst780000C1, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant78000071: {inst: inst780000C2, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant78000072: {inst: inst780000C2, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant78000073: {inst: inst780000C1, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_def0}} -// CHECK:STDOUT: symbolic_constant78000074: {inst: inst7800001F, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant78000075: {inst: inst780000C7, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant78000076: {inst: inst780000C7, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl3}} -// CHECK:STDOUT: symbolic_constant78000077: {inst: inst7800001D, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant78000078: {inst: inst78000018, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant78000079: {inst: inst780000C7, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl3}} -// CHECK:STDOUT: symbolic_constant7800007A: {inst: inst7800001D, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant7800007B: {inst: inst78000018, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant7800007C: {inst: inst7800001D, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant7800007D: {inst: inst7800001F, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant7800007E: {inst: inst780000C7, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl3}} -// CHECK:STDOUT: symbolic_constant7800007F: {inst: inst780000C2, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant78000080: {inst: inst780000C1, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_def0}} -// CHECK:STDOUT: symbolic_constant78000081: {inst: inst780000C2, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant78000082: {inst: inst78000042, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_def2}} -// CHECK:STDOUT: symbolic_constant78000083: {inst: inst780000DC, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant78000084: {inst: inst780000DD, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant78000085: {inst: inst780000DE, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant78000086: {inst: inst780000DE, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl5}} -// CHECK:STDOUT: symbolic_constant78000087: {inst: inst780000E1, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant78000088: {inst: inst780000E1, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl6}} -// CHECK:STDOUT: symbolic_constant78000089: {inst: inst780000E3, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant7800008A: {inst: inst780000E4, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant7800008B: {inst: inst780000E4, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant7800008C: {inst: inst780000E3, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_def0}} -// CHECK:STDOUT: symbolic_constant7800008D: {inst: inst780000E6, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant7800008E: {inst: inst780000E7, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant7800008F: {inst: inst780000E7, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl5}} -// CHECK:STDOUT: symbolic_constant78000090: {inst: inst780000EC, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant78000091: {inst: inst780000EC, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl6}} -// CHECK:STDOUT: symbolic_constant78000092: {inst: inst780000DE, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl4}} -// CHECK:STDOUT: symbolic_constant78000093: {inst: inst780000DD, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl3}} -// CHECK:STDOUT: symbolic_constant78000094: {inst: inst780000DC, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant78000095: {inst: inst78000072, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant78000096: {inst: inst78000071, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant78000097: {inst: inst780000DC, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant78000098: {inst: inst78000071, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant78000099: {inst: inst780000EC, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl6}} -// CHECK:STDOUT: symbolic_constant7800009A: {inst: inst780000DE, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl4}} -// CHECK:STDOUT: symbolic_constant7800009B: {inst: inst78000071, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant7800009C: {inst: inst78000072, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant7800009D: {inst: inst780000DC, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant7800009E: {inst: inst780000DD, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl3}} -// CHECK:STDOUT: symbolic_constant7800009F: {inst: inst780000DE, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl4}} -// CHECK:STDOUT: symbolic_constant780000A0: {inst: inst780000E7, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl5}} -// CHECK:STDOUT: symbolic_constant780000A1: {inst: inst780000EC, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl6}} -// CHECK:STDOUT: symbolic_constant780000A2: {inst: inst780000F8, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant780000A3: {inst: inst780000F9, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant780000A4: {inst: inst780000FA, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant780000A5: {inst: inst780000FB, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant780000A6: {inst: inst780000FC, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant780000A7: {inst: inst780000FD, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant780000A8: {inst: inst780000FD, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def12}} -// CHECK:STDOUT: symbolic_constant780000A9: {inst: inst780000FE, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant780000AA: {inst: inst780000FF, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant780000AB: {inst: inst780000FC, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def11}} -// CHECK:STDOUT: symbolic_constant780000AC: {inst: inst780000F8, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def10}} -// CHECK:STDOUT: symbolic_constant780000AD: {inst: inst780000FB, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def9}} -// CHECK:STDOUT: symbolic_constant780000AE: {inst: inst780000F9, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def8}} -// CHECK:STDOUT: symbolic_constant780000AF: {inst: inst78000100, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant780000B0: {inst: inst78000100, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def7}} -// CHECK:STDOUT: symbolic_constant780000B1: {inst: inst7800008D, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def6}} -// CHECK:STDOUT: symbolic_constant780000B2: {inst: inst7800008C, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def5}} -// CHECK:STDOUT: symbolic_constant780000B3: {inst: inst78000088, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def4}} -// CHECK:STDOUT: symbolic_constant780000B4: {inst: inst7800008B, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def3}} -// CHECK:STDOUT: symbolic_constant780000B5: {inst: inst78000089, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def2}} -// CHECK:STDOUT: symbolic_constant780000B6: {inst: inst78000090, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant780000B7: {inst: inst78000101, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant780000B8: {inst: inst78000101, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def0}} -// CHECK:STDOUT: symbolic_constant780000B9: {inst: inst78000101, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def0}} -// CHECK:STDOUT: symbolic_constant780000BA: {inst: inst78000090, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant780000BB: {inst: inst78000089, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def2}} -// CHECK:STDOUT: symbolic_constant780000BC: {inst: inst7800008B, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def3}} -// CHECK:STDOUT: symbolic_constant780000BD: {inst: inst78000088, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def4}} -// CHECK:STDOUT: symbolic_constant780000BE: {inst: inst7800008C, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def5}} -// CHECK:STDOUT: symbolic_constant780000BF: {inst: inst7800008D, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def6}} -// CHECK:STDOUT: symbolic_constant780000C0: {inst: inst78000100, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def7}} -// CHECK:STDOUT: symbolic_constant780000C1: {inst: inst780000F9, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def8}} -// CHECK:STDOUT: symbolic_constant780000C2: {inst: inst780000FB, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def9}} -// CHECK:STDOUT: symbolic_constant780000C3: {inst: inst780000F8, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def10}} -// CHECK:STDOUT: symbolic_constant780000C4: {inst: inst780000FC, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def11}} -// CHECK:STDOUT: symbolic_constant780000C5: {inst: inst780000FD, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def12}} -// CHECK:STDOUT: symbolic_constant780000C6: {inst: inst780000DE, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl5}} -// CHECK:STDOUT: symbolic_constant780000C7: {inst: inst780000DD, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl4}} -// CHECK:STDOUT: symbolic_constant780000C8: {inst: inst78000072, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl3}} -// CHECK:STDOUT: symbolic_constant780000C9: {inst: inst780000E6, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant780000CA: {inst: inst780000DC, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant780000CB: {inst: inst78000071, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant780000CC: {inst: inst78000071, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant780000CD: {inst: inst780000DC, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant780000CE: {inst: inst780000E6, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant780000CF: {inst: inst78000072, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl3}} -// CHECK:STDOUT: symbolic_constant780000D0: {inst: inst780000DD, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl4}} -// CHECK:STDOUT: symbolic_constant780000D1: {inst: inst780000DE, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl5}} -// CHECK:STDOUT: symbolic_constant780000D2: {inst: inst780000E1, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl6}} -// CHECK:STDOUT: symbolic_constant780000D3: {inst: inst780000E4, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant780000D4: {inst: inst780000E3, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_def0}} -// CHECK:STDOUT: symbolic_constant780000D5: {inst: inst780000E4, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant780000D6: {inst: inst78000120, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant780000D7: {inst: inst78000121, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant780000D8: {inst: inst78000122, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant780000D9: {inst: inst78000122, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl7}} -// CHECK:STDOUT: symbolic_constant780000DA: {inst: inst78000125, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant780000DB: {inst: inst78000125, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl8}} -// CHECK:STDOUT: symbolic_constant780000DC: {inst: inst78000127, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant780000DD: {inst: inst78000128, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant780000DE: {inst: inst78000128, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant780000DF: {inst: inst78000127, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_def0}} -// CHECK:STDOUT: symbolic_constant780000E0: {inst: inst7800012A, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant780000E1: {inst: inst7800012B, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant780000E2: {inst: inst7800012B, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl7}} -// CHECK:STDOUT: symbolic_constant780000E3: {inst: inst78000130, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant780000E4: {inst: inst78000130, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl8}} -// CHECK:STDOUT: symbolic_constant780000E5: {inst: inst78000122, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl6}} -// CHECK:STDOUT: symbolic_constant780000E6: {inst: inst78000121, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl5}} -// CHECK:STDOUT: symbolic_constant780000E7: {inst: inst78000120, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl4}} -// CHECK:STDOUT: symbolic_constant780000E8: {inst: inst780000DD, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl3}} -// CHECK:STDOUT: symbolic_constant780000E9: {inst: inst780000DC, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant780000EA: {inst: inst78000072, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant780000EB: {inst: inst78000071, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant780000EC: {inst: inst78000120, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant780000ED: {inst: inst780000DC, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant780000EE: {inst: inst78000071, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant780000EF: {inst: inst78000130, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl8}} -// CHECK:STDOUT: symbolic_constant780000F0: {inst: inst78000122, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl6}} -// CHECK:STDOUT: symbolic_constant780000F1: {inst: inst78000071, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant780000F2: {inst: inst78000072, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant780000F3: {inst: inst780000DC, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant780000F4: {inst: inst780000DD, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl3}} -// CHECK:STDOUT: symbolic_constant780000F5: {inst: inst78000120, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl4}} -// CHECK:STDOUT: symbolic_constant780000F6: {inst: inst78000121, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl5}} -// CHECK:STDOUT: symbolic_constant780000F7: {inst: inst78000122, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl6}} -// CHECK:STDOUT: symbolic_constant780000F8: {inst: inst7800012B, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl7}} -// CHECK:STDOUT: symbolic_constant780000F9: {inst: inst78000130, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl8}} -// CHECK:STDOUT: symbolic_constant780000FA: {inst: inst7800013F, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant780000FB: {inst: inst78000140, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant780000FC: {inst: inst78000141, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant780000FD: {inst: inst78000142, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant780000FE: {inst: inst78000143, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant780000FF: {inst: inst78000144, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant78000100: {inst: inst78000144, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def18}} -// CHECK:STDOUT: symbolic_constant78000101: {inst: inst78000145, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant78000102: {inst: inst78000146, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant78000103: {inst: inst78000143, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def17}} -// CHECK:STDOUT: symbolic_constant78000104: {inst: inst7800013F, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def16}} -// CHECK:STDOUT: symbolic_constant78000105: {inst: inst78000142, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def15}} -// CHECK:STDOUT: symbolic_constant78000106: {inst: inst78000140, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def14}} -// CHECK:STDOUT: symbolic_constant78000107: {inst: inst78000147, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant78000108: {inst: inst78000147, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def13}} -// CHECK:STDOUT: symbolic_constant78000109: {inst: inst780000FD, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def12}} -// CHECK:STDOUT: symbolic_constant7800010A: {inst: inst780000FC, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def11}} -// CHECK:STDOUT: symbolic_constant7800010B: {inst: inst780000F8, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def10}} -// CHECK:STDOUT: symbolic_constant7800010C: {inst: inst780000FB, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def9}} -// CHECK:STDOUT: symbolic_constant7800010D: {inst: inst780000F9, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def8}} -// CHECK:STDOUT: symbolic_constant7800010E: {inst: inst78000100, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def7}} -// CHECK:STDOUT: symbolic_constant7800010F: {inst: inst7800008D, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def6}} -// CHECK:STDOUT: symbolic_constant78000110: {inst: inst7800008C, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def5}} -// CHECK:STDOUT: symbolic_constant78000111: {inst: inst78000088, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def4}} -// CHECK:STDOUT: symbolic_constant78000112: {inst: inst7800008B, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def3}} -// CHECK:STDOUT: symbolic_constant78000113: {inst: inst78000089, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def2}} -// CHECK:STDOUT: symbolic_constant78000114: {inst: inst78000090, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant78000115: {inst: inst78000148, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant78000116: {inst: inst78000148, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def0}} -// CHECK:STDOUT: symbolic_constant78000117: {inst: inst78000148, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def0}} -// CHECK:STDOUT: symbolic_constant78000118: {inst: inst78000090, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant78000119: {inst: inst78000089, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def2}} -// CHECK:STDOUT: symbolic_constant7800011A: {inst: inst7800008B, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def3}} -// CHECK:STDOUT: symbolic_constant7800011B: {inst: inst78000088, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def4}} -// CHECK:STDOUT: symbolic_constant7800011C: {inst: inst7800008C, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def5}} -// CHECK:STDOUT: symbolic_constant7800011D: {inst: inst7800008D, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def6}} -// CHECK:STDOUT: symbolic_constant7800011E: {inst: inst78000100, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def7}} -// CHECK:STDOUT: symbolic_constant7800011F: {inst: inst780000F9, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def8}} -// CHECK:STDOUT: symbolic_constant78000120: {inst: inst780000FB, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def9}} -// CHECK:STDOUT: symbolic_constant78000121: {inst: inst780000F8, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def10}} -// CHECK:STDOUT: symbolic_constant78000122: {inst: inst780000FC, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def11}} -// CHECK:STDOUT: symbolic_constant78000123: {inst: inst780000FD, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def12}} -// CHECK:STDOUT: symbolic_constant78000124: {inst: inst78000147, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def13}} -// CHECK:STDOUT: symbolic_constant78000125: {inst: inst78000140, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def14}} -// CHECK:STDOUT: symbolic_constant78000126: {inst: inst78000142, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def15}} -// CHECK:STDOUT: symbolic_constant78000127: {inst: inst7800013F, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def16}} -// CHECK:STDOUT: symbolic_constant78000128: {inst: inst78000143, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def17}} -// CHECK:STDOUT: symbolic_constant78000129: {inst: inst78000144, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def18}} -// CHECK:STDOUT: symbolic_constant7800012A: {inst: inst78000122, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl7}} -// CHECK:STDOUT: symbolic_constant7800012B: {inst: inst78000121, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl6}} -// CHECK:STDOUT: symbolic_constant7800012C: {inst: inst780000DD, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl5}} -// CHECK:STDOUT: symbolic_constant7800012D: {inst: inst78000072, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl4}} -// CHECK:STDOUT: symbolic_constant7800012E: {inst: inst7800012A, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl3}} -// CHECK:STDOUT: symbolic_constant7800012F: {inst: inst78000120, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant78000130: {inst: inst780000DC, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant78000131: {inst: inst78000071, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant78000132: {inst: inst78000071, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant78000133: {inst: inst780000DC, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant78000134: {inst: inst78000120, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant78000135: {inst: inst7800012A, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl3}} -// CHECK:STDOUT: symbolic_constant78000136: {inst: inst78000072, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl4}} -// CHECK:STDOUT: symbolic_constant78000137: {inst: inst780000DD, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl5}} -// CHECK:STDOUT: symbolic_constant78000138: {inst: inst78000121, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl6}} -// CHECK:STDOUT: symbolic_constant78000139: {inst: inst78000122, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl7}} -// CHECK:STDOUT: symbolic_constant7800013A: {inst: inst78000125, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl8}} -// CHECK:STDOUT: symbolic_constant7800013B: {inst: inst78000128, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant7800013C: {inst: inst78000127, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_def0}} -// CHECK:STDOUT: symbolic_constant7800013D: {inst: inst78000128, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant7800013E: {inst: inst7800016F, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant7800013F: {inst: inst780000B8, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant78000140: {inst: inst78000171, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant78000141: {inst: inst78000171, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_def2}} -// CHECK:STDOUT: symbolic_constant78000142: {inst: inst78000173, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant78000143: {inst: inst78000174, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant78000144: {inst: inst78000175, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant78000145: {inst: inst78000176, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant78000146: {inst: inst78000178, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant78000147: {inst: inst7800016F, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_def3}} -// CHECK:STDOUT: symbolic_constant78000148: {inst: inst78000173, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_def4}} -// CHECK:STDOUT: symbolic_constant78000149: {inst: inst78000174, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_def5}} -// CHECK:STDOUT: symbolic_constant7800014A: {inst: inst78000176, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_def6}} -// CHECK:STDOUT: symbolic_constant7800014B: {inst: inst78000178, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_def7}} -// CHECK:STDOUT: symbolic_constant7800014C: {inst: inst78000184, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant7800014D: {inst: inst78000184, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_def8}} +// CHECK:STDOUT: symbolic_constant78000007: {inst: inst78000021, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000008: {inst: inst78000023, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000009: {inst: inst78000021, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant7800000A: {inst: inst78000023, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_decl4}} +// CHECK:STDOUT: symbolic_constant7800000B: {inst: inst78000027, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800000C: {inst: inst78000027, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_decl5}} +// CHECK:STDOUT: symbolic_constant7800000D: {inst: inst78000031, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800000E: {inst: inst78000031, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_decl6}} +// CHECK:STDOUT: symbolic_constant7800000F: {inst: inst78000035, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000010: {inst: inst78000035, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_decl7}} +// CHECK:STDOUT: symbolic_constant78000011: {inst: inst78000039, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000012: {inst: inst78000039, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_decl8}} +// CHECK:STDOUT: symbolic_constant78000013: {inst: inst7800003B, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000014: {inst: inst7800003D, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000015: {inst: inst7800003B, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_decl9}} +// CHECK:STDOUT: symbolic_constant78000016: {inst: inst7800003D, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_decl10}} +// CHECK:STDOUT: symbolic_constant78000017: {inst: inst78000041, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000018: {inst: inst78000041, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_decl11}} +// CHECK:STDOUT: symbolic_constant78000019: {inst: inst7800004C, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800001A: {inst: inst7800004C, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_def0}} +// CHECK:STDOUT: symbolic_constant7800001B: {inst: inst7800004E, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800001C: {inst: inst78000050, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800001D: {inst: inst78000050, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant7800001E: {inst: inst7800005C, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800001F: {inst: inst78000061, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000020: {inst: inst78000062, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000021: {inst: inst78000062, kind: checked, attached: {generic: generic78000001, index: generic_inst_in_def2}} +// CHECK:STDOUT: symbolic_constant78000022: {inst: inst78000063, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000023: {inst: inst78000064, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000024: {inst: inst78000065, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000025: {inst: inst78000061, kind: checked, attached: {generic: generic78000001, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant78000026: {inst: inst78000067, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000027: {inst: inst78000067, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl7}} +// CHECK:STDOUT: symbolic_constant78000028: {inst: inst78000064, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant78000029: {inst: inst78000068, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800002A: {inst: inst7800006A, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800002B: {inst: inst7800006A, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl4}} +// CHECK:STDOUT: symbolic_constant7800002C: {inst: inst78000067, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl7}} +// CHECK:STDOUT: symbolic_constant7800002D: {inst: inst78000065, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl6}} +// CHECK:STDOUT: symbolic_constant7800002E: {inst: inst7800006C, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800002F: {inst: inst7800006C, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl5}} +// CHECK:STDOUT: symbolic_constant78000030: {inst: inst7800006A, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl4}} +// CHECK:STDOUT: symbolic_constant78000031: {inst: inst78000068, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant78000032: {inst: inst78000063, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant78000033: {inst: inst7800005C, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant78000034: {inst: inst7800006C, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl5}} +// CHECK:STDOUT: symbolic_constant78000035: {inst: inst78000063, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant78000036: {inst: inst78000065, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl6}} +// CHECK:STDOUT: symbolic_constant78000037: {inst: inst78000068, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant78000038: {inst: inst7800005C, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant78000039: {inst: inst78000063, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant7800003A: {inst: inst78000064, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant7800003B: {inst: inst78000068, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant7800003C: {inst: inst7800006A, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl4}} +// CHECK:STDOUT: symbolic_constant7800003D: {inst: inst7800006C, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl5}} +// CHECK:STDOUT: symbolic_constant7800003E: {inst: inst78000065, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl6}} +// CHECK:STDOUT: symbolic_constant7800003F: {inst: inst78000067, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl7}} +// CHECK:STDOUT: symbolic_constant78000040: {inst: inst78000062, kind: checked, attached: {generic: generic78000001, index: generic_inst_in_def2}} +// CHECK:STDOUT: symbolic_constant78000041: {inst: inst7800005C, kind: checked, attached: {generic: generic78000001, index: generic_inst_in_def0}} +// CHECK:STDOUT: symbolic_constant78000042: {inst: inst7800005C, kind: checked, attached: {generic: generic78000001, index: generic_inst_in_def0}} +// CHECK:STDOUT: symbolic_constant78000043: {inst: inst78000061, kind: checked, attached: {generic: generic78000001, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant78000044: {inst: inst78000062, kind: checked, attached: {generic: generic78000001, index: generic_inst_in_def2}} +// CHECK:STDOUT: symbolic_constant78000045: {inst: inst7800008A, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000046: {inst: inst7800008B, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000047: {inst: inst7800008C, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000048: {inst: inst7800008C, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant78000049: {inst: inst7800008F, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800004A: {inst: inst7800008F, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_decl4}} +// CHECK:STDOUT: symbolic_constant7800004B: {inst: inst78000091, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800004C: {inst: inst78000092, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800004D: {inst: inst78000092, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant7800004E: {inst: inst78000093, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800004F: {inst: inst78000094, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000050: {inst: inst78000091, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_def0}} +// CHECK:STDOUT: symbolic_constant78000051: {inst: inst78000096, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000052: {inst: inst78000098, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000053: {inst: inst78000098, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl8}} +// CHECK:STDOUT: symbolic_constant78000054: {inst: inst78000093, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant78000055: {inst: inst78000099, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000056: {inst: inst7800009B, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000057: {inst: inst7800009B, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl5}} +// CHECK:STDOUT: symbolic_constant78000058: {inst: inst78000098, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl8}} +// CHECK:STDOUT: symbolic_constant78000059: {inst: inst78000094, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl7}} +// CHECK:STDOUT: symbolic_constant7800005A: {inst: inst7800009D, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800005B: {inst: inst7800009D, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl6}} +// CHECK:STDOUT: symbolic_constant7800005C: {inst: inst7800009B, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl5}} +// CHECK:STDOUT: symbolic_constant7800005D: {inst: inst78000099, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl4}} +// CHECK:STDOUT: symbolic_constant7800005E: {inst: inst7800008C, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant7800005F: {inst: inst7800008B, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant78000060: {inst: inst7800008A, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant78000061: {inst: inst7800008A, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant78000062: {inst: inst7800009D, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl6}} +// CHECK:STDOUT: symbolic_constant78000063: {inst: inst7800008C, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant78000064: {inst: inst78000094, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl7}} +// CHECK:STDOUT: symbolic_constant78000065: {inst: inst78000099, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl4}} +// CHECK:STDOUT: symbolic_constant78000066: {inst: inst7800008A, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant78000067: {inst: inst7800008B, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant78000068: {inst: inst7800008C, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant78000069: {inst: inst78000093, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant7800006A: {inst: inst78000099, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl4}} +// CHECK:STDOUT: symbolic_constant7800006B: {inst: inst7800009B, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl5}} +// CHECK:STDOUT: symbolic_constant7800006C: {inst: inst7800009D, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl6}} +// CHECK:STDOUT: symbolic_constant7800006D: {inst: inst78000094, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl7}} +// CHECK:STDOUT: symbolic_constant7800006E: {inst: inst78000098, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl8}} +// CHECK:STDOUT: symbolic_constant7800006F: {inst: inst780000B0, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000070: {inst: inst780000B1, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000071: {inst: inst780000B2, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000072: {inst: inst780000B3, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000073: {inst: inst780000B4, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000074: {inst: inst780000B5, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000075: {inst: inst780000B5, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def6}} +// CHECK:STDOUT: symbolic_constant78000076: {inst: inst780000B6, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000077: {inst: inst780000B7, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000078: {inst: inst780000B9, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000079: {inst: inst780000BA, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800007A: {inst: inst780000BB, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800007B: {inst: inst780000BD, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800007C: {inst: inst780000B4, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def5}} +// CHECK:STDOUT: symbolic_constant7800007D: {inst: inst780000B0, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def4}} +// CHECK:STDOUT: symbolic_constant7800007E: {inst: inst780000B3, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def3}} +// CHECK:STDOUT: symbolic_constant7800007F: {inst: inst780000B1, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def2}} +// CHECK:STDOUT: symbolic_constant78000080: {inst: inst780000BE, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000081: {inst: inst780000BE, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant78000082: {inst: inst780000BF, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000083: {inst: inst780000BF, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def0}} +// CHECK:STDOUT: symbolic_constant78000084: {inst: inst780000BF, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def0}} +// CHECK:STDOUT: symbolic_constant78000085: {inst: inst780000BE, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant78000086: {inst: inst780000B1, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def2}} +// CHECK:STDOUT: symbolic_constant78000087: {inst: inst780000B3, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def3}} +// CHECK:STDOUT: symbolic_constant78000088: {inst: inst780000B0, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def4}} +// CHECK:STDOUT: symbolic_constant78000089: {inst: inst780000B4, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def5}} +// CHECK:STDOUT: symbolic_constant7800008A: {inst: inst780000B5, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def6}} +// CHECK:STDOUT: symbolic_constant7800008B: {inst: inst7800008C, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant7800008C: {inst: inst7800008B, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant7800008D: {inst: inst7800008A, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant7800008E: {inst: inst78000096, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant7800008F: {inst: inst78000096, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant78000090: {inst: inst78000096, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant78000091: {inst: inst7800008A, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant78000092: {inst: inst7800008B, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant78000093: {inst: inst7800008C, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant78000094: {inst: inst7800008F, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_decl4}} +// CHECK:STDOUT: symbolic_constant78000095: {inst: inst78000092, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant78000096: {inst: inst78000091, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_def0}} +// CHECK:STDOUT: symbolic_constant78000097: {inst: inst78000092, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant78000098: {inst: inst7800001F, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant78000099: {inst: inst780000E8, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800009A: {inst: inst780000E8, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant7800009B: {inst: inst7800001F, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant7800009C: {inst: inst7800001B, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant7800009D: {inst: inst78000018, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant7800009E: {inst: inst7800001B, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant7800009F: {inst: inst78000018, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant780000A0: {inst: inst78000018, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant780000A1: {inst: inst7800001B, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant780000A2: {inst: inst7800001F, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant780000A3: {inst: inst780000E8, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant780000A4: {inst: inst7800004C, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_def2}} +// CHECK:STDOUT: symbolic_constant780000A5: {inst: inst780000F2, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000A6: {inst: inst780000F3, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000A7: {inst: inst780000F3, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant780000A8: {inst: inst780000F4, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000A9: {inst: inst780000F2, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_def0}} +// CHECK:STDOUT: symbolic_constant780000AA: {inst: inst780000F6, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000AB: {inst: inst780000F6, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl7}} +// CHECK:STDOUT: symbolic_constant780000AC: {inst: inst78000021, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant780000AD: {inst: inst780000F7, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000AE: {inst: inst780000F9, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000AF: {inst: inst780000F9, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl4}} +// CHECK:STDOUT: symbolic_constant780000B0: {inst: inst780000F6, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl7}} +// CHECK:STDOUT: symbolic_constant780000B1: {inst: inst780000F4, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl6}} +// CHECK:STDOUT: symbolic_constant780000B2: {inst: inst780000FB, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000B3: {inst: inst780000FB, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl5}} +// CHECK:STDOUT: symbolic_constant780000B4: {inst: inst780000F9, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl4}} +// CHECK:STDOUT: symbolic_constant780000B5: {inst: inst780000F7, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant780000B6: {inst: inst7800001F, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant780000B7: {inst: inst7800001B, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant780000B8: {inst: inst780000FB, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl5}} +// CHECK:STDOUT: symbolic_constant780000B9: {inst: inst7800001F, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant780000BA: {inst: inst780000F4, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl6}} +// CHECK:STDOUT: symbolic_constant780000BB: {inst: inst780000F7, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant780000BC: {inst: inst7800001B, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant780000BD: {inst: inst7800001F, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant780000BE: {inst: inst78000021, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant780000BF: {inst: inst780000F7, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant780000C0: {inst: inst780000F9, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl4}} +// CHECK:STDOUT: symbolic_constant780000C1: {inst: inst780000FB, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl5}} +// CHECK:STDOUT: symbolic_constant780000C2: {inst: inst780000F4, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl6}} +// CHECK:STDOUT: symbolic_constant780000C3: {inst: inst780000F6, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl7}} +// CHECK:STDOUT: symbolic_constant780000C4: {inst: inst780000F3, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant780000C5: {inst: inst780000F2, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_def0}} +// CHECK:STDOUT: symbolic_constant780000C6: {inst: inst780000F3, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant780000C7: {inst: inst7800004C, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_def2}} +// CHECK:STDOUT: symbolic_constant780000C8: {inst: inst7800011C, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000C9: {inst: inst7800011D, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000CA: {inst: inst7800011E, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000CB: {inst: inst7800011E, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl7}} +// CHECK:STDOUT: symbolic_constant780000CC: {inst: inst78000121, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000CD: {inst: inst78000121, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl8}} +// CHECK:STDOUT: symbolic_constant780000CE: {inst: inst78000123, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000CF: {inst: inst78000124, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000D0: {inst: inst78000124, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant780000D1: {inst: inst78000125, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000D2: {inst: inst78000126, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000D3: {inst: inst78000123, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_def0}} +// CHECK:STDOUT: symbolic_constant780000D4: {inst: inst78000128, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000D5: {inst: inst78000129, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000D6: {inst: inst7800012B, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000D7: {inst: inst7800012B, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl10}} +// CHECK:STDOUT: symbolic_constant780000D8: {inst: inst78000125, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl5}} +// CHECK:STDOUT: symbolic_constant780000D9: {inst: inst7800012C, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000DA: {inst: inst7800012E, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000DB: {inst: inst7800012E, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl7}} +// CHECK:STDOUT: symbolic_constant780000DC: {inst: inst7800012B, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl10}} +// CHECK:STDOUT: symbolic_constant780000DD: {inst: inst78000126, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl9}} +// CHECK:STDOUT: symbolic_constant780000DE: {inst: inst78000130, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000DF: {inst: inst78000130, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl8}} +// CHECK:STDOUT: symbolic_constant780000E0: {inst: inst7800012E, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl7}} +// CHECK:STDOUT: symbolic_constant780000E1: {inst: inst7800012C, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl6}} +// CHECK:STDOUT: symbolic_constant780000E2: {inst: inst7800011E, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl4}} +// CHECK:STDOUT: symbolic_constant780000E3: {inst: inst7800011D, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant780000E4: {inst: inst7800011C, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant780000E5: {inst: inst7800008B, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant780000E6: {inst: inst7800008A, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant780000E7: {inst: inst7800011C, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant780000E8: {inst: inst7800008A, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant780000E9: {inst: inst78000130, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl8}} +// CHECK:STDOUT: symbolic_constant780000EA: {inst: inst7800011E, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl4}} +// CHECK:STDOUT: symbolic_constant780000EB: {inst: inst78000126, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl9}} +// CHECK:STDOUT: symbolic_constant780000EC: {inst: inst7800012C, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl6}} +// CHECK:STDOUT: symbolic_constant780000ED: {inst: inst7800008A, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant780000EE: {inst: inst7800008B, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant780000EF: {inst: inst7800011C, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant780000F0: {inst: inst7800011D, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant780000F1: {inst: inst7800011E, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl4}} +// CHECK:STDOUT: symbolic_constant780000F2: {inst: inst78000125, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl5}} +// CHECK:STDOUT: symbolic_constant780000F3: {inst: inst7800012C, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl6}} +// CHECK:STDOUT: symbolic_constant780000F4: {inst: inst7800012E, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl7}} +// CHECK:STDOUT: symbolic_constant780000F5: {inst: inst78000130, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl8}} +// CHECK:STDOUT: symbolic_constant780000F6: {inst: inst78000126, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl9}} +// CHECK:STDOUT: symbolic_constant780000F7: {inst: inst7800012B, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl10}} +// CHECK:STDOUT: symbolic_constant780000F8: {inst: inst78000146, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000F9: {inst: inst78000147, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000FA: {inst: inst78000148, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000FB: {inst: inst78000149, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000FC: {inst: inst7800014A, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000FD: {inst: inst7800014B, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000FE: {inst: inst7800014B, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def12}} +// CHECK:STDOUT: symbolic_constant780000FF: {inst: inst7800014C, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000100: {inst: inst7800014D, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000101: {inst: inst7800014F, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000102: {inst: inst78000150, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000103: {inst: inst78000151, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000104: {inst: inst78000153, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000105: {inst: inst7800014A, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def11}} +// CHECK:STDOUT: symbolic_constant78000106: {inst: inst78000146, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def10}} +// CHECK:STDOUT: symbolic_constant78000107: {inst: inst78000149, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def9}} +// CHECK:STDOUT: symbolic_constant78000108: {inst: inst78000147, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def8}} +// CHECK:STDOUT: symbolic_constant78000109: {inst: inst78000154, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800010A: {inst: inst78000154, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def7}} +// CHECK:STDOUT: symbolic_constant7800010B: {inst: inst780000B5, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def6}} +// CHECK:STDOUT: symbolic_constant7800010C: {inst: inst780000B4, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def5}} +// CHECK:STDOUT: symbolic_constant7800010D: {inst: inst780000B0, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def4}} +// CHECK:STDOUT: symbolic_constant7800010E: {inst: inst780000B3, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def3}} +// CHECK:STDOUT: symbolic_constant7800010F: {inst: inst780000B1, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def2}} +// CHECK:STDOUT: symbolic_constant78000110: {inst: inst780000BE, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant78000111: {inst: inst78000155, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000112: {inst: inst78000155, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def0}} +// CHECK:STDOUT: symbolic_constant78000113: {inst: inst78000155, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def0}} +// CHECK:STDOUT: symbolic_constant78000114: {inst: inst780000BE, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant78000115: {inst: inst780000B1, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def2}} +// CHECK:STDOUT: symbolic_constant78000116: {inst: inst780000B3, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def3}} +// CHECK:STDOUT: symbolic_constant78000117: {inst: inst780000B0, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def4}} +// CHECK:STDOUT: symbolic_constant78000118: {inst: inst780000B4, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def5}} +// CHECK:STDOUT: symbolic_constant78000119: {inst: inst780000B5, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def6}} +// CHECK:STDOUT: symbolic_constant7800011A: {inst: inst78000154, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def7}} +// CHECK:STDOUT: symbolic_constant7800011B: {inst: inst78000147, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def8}} +// CHECK:STDOUT: symbolic_constant7800011C: {inst: inst78000149, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def9}} +// CHECK:STDOUT: symbolic_constant7800011D: {inst: inst78000146, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def10}} +// CHECK:STDOUT: symbolic_constant7800011E: {inst: inst7800014A, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def11}} +// CHECK:STDOUT: symbolic_constant7800011F: {inst: inst7800014B, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def12}} +// CHECK:STDOUT: symbolic_constant78000120: {inst: inst7800011E, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl7}} +// CHECK:STDOUT: symbolic_constant78000121: {inst: inst7800011D, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl6}} +// CHECK:STDOUT: symbolic_constant78000122: {inst: inst7800008B, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl5}} +// CHECK:STDOUT: symbolic_constant78000123: {inst: inst78000128, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl4}} +// CHECK:STDOUT: symbolic_constant78000124: {inst: inst7800011C, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant78000125: {inst: inst78000129, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant78000126: {inst: inst7800008A, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant78000127: {inst: inst78000096, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant78000128: {inst: inst78000129, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant78000129: {inst: inst78000096, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant7800012A: {inst: inst78000096, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant7800012B: {inst: inst7800008A, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant7800012C: {inst: inst78000129, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant7800012D: {inst: inst7800011C, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant7800012E: {inst: inst78000128, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl4}} +// CHECK:STDOUT: symbolic_constant7800012F: {inst: inst7800008B, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl5}} +// CHECK:STDOUT: symbolic_constant78000130: {inst: inst7800011D, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl6}} +// CHECK:STDOUT: symbolic_constant78000131: {inst: inst7800011E, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl7}} +// CHECK:STDOUT: symbolic_constant78000132: {inst: inst78000121, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl8}} +// CHECK:STDOUT: symbolic_constant78000133: {inst: inst78000124, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant78000134: {inst: inst78000123, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_def0}} +// CHECK:STDOUT: symbolic_constant78000135: {inst: inst78000124, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant78000136: {inst: inst78000178, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000137: {inst: inst78000179, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000138: {inst: inst7800017A, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000139: {inst: inst7800017A, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl10}} +// CHECK:STDOUT: symbolic_constant7800013A: {inst: inst7800017D, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800013B: {inst: inst7800017D, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl11}} +// CHECK:STDOUT: symbolic_constant7800013C: {inst: inst7800017F, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800013D: {inst: inst78000180, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800013E: {inst: inst78000180, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant7800013F: {inst: inst78000181, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000140: {inst: inst78000182, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000141: {inst: inst7800017F, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_def0}} +// CHECK:STDOUT: symbolic_constant78000142: {inst: inst78000184, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000143: {inst: inst78000185, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000144: {inst: inst78000187, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000145: {inst: inst78000187, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl12}} +// CHECK:STDOUT: symbolic_constant78000146: {inst: inst78000181, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl7}} +// CHECK:STDOUT: symbolic_constant78000147: {inst: inst78000188, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000148: {inst: inst7800018A, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000149: {inst: inst7800018A, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl9}} +// CHECK:STDOUT: symbolic_constant7800014A: {inst: inst78000187, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl12}} +// CHECK:STDOUT: symbolic_constant7800014B: {inst: inst78000182, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl11}} +// CHECK:STDOUT: symbolic_constant7800014C: {inst: inst7800018C, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800014D: {inst: inst7800018C, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl10}} +// CHECK:STDOUT: symbolic_constant7800014E: {inst: inst7800018A, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl9}} +// CHECK:STDOUT: symbolic_constant7800014F: {inst: inst78000188, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl8}} +// CHECK:STDOUT: symbolic_constant78000150: {inst: inst7800017A, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl6}} +// CHECK:STDOUT: symbolic_constant78000151: {inst: inst78000179, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl5}} +// CHECK:STDOUT: symbolic_constant78000152: {inst: inst78000178, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl4}} +// CHECK:STDOUT: symbolic_constant78000153: {inst: inst7800011D, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant78000154: {inst: inst7800011C, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant78000155: {inst: inst7800008B, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant78000156: {inst: inst7800008A, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant78000157: {inst: inst78000178, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl5}} +// CHECK:STDOUT: symbolic_constant78000158: {inst: inst7800011C, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant78000159: {inst: inst7800008A, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant7800015A: {inst: inst7800018C, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl10}} +// CHECK:STDOUT: symbolic_constant7800015B: {inst: inst7800017A, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl6}} +// CHECK:STDOUT: symbolic_constant7800015C: {inst: inst78000182, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl11}} +// CHECK:STDOUT: symbolic_constant7800015D: {inst: inst78000188, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl8}} +// CHECK:STDOUT: symbolic_constant7800015E: {inst: inst7800008A, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant7800015F: {inst: inst7800008B, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant78000160: {inst: inst7800011C, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant78000161: {inst: inst7800011D, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant78000162: {inst: inst78000178, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl4}} +// CHECK:STDOUT: symbolic_constant78000163: {inst: inst78000179, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl5}} +// CHECK:STDOUT: symbolic_constant78000164: {inst: inst7800017A, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl6}} +// CHECK:STDOUT: symbolic_constant78000165: {inst: inst78000181, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl7}} +// CHECK:STDOUT: symbolic_constant78000166: {inst: inst78000188, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl8}} +// CHECK:STDOUT: symbolic_constant78000167: {inst: inst7800018A, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl9}} +// CHECK:STDOUT: symbolic_constant78000168: {inst: inst7800018C, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl10}} +// CHECK:STDOUT: symbolic_constant78000169: {inst: inst78000182, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl11}} +// CHECK:STDOUT: symbolic_constant7800016A: {inst: inst78000187, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl12}} +// CHECK:STDOUT: symbolic_constant7800016B: {inst: inst780001A5, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800016C: {inst: inst780001A6, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800016D: {inst: inst780001A7, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800016E: {inst: inst780001A8, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800016F: {inst: inst780001A9, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000170: {inst: inst780001AA, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000171: {inst: inst780001AA, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def18}} +// CHECK:STDOUT: symbolic_constant78000172: {inst: inst780001AB, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000173: {inst: inst780001AC, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000174: {inst: inst780001AE, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000175: {inst: inst780001AF, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000176: {inst: inst780001B0, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000177: {inst: inst780001B2, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000178: {inst: inst780001A9, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def17}} +// CHECK:STDOUT: symbolic_constant78000179: {inst: inst780001A5, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def16}} +// CHECK:STDOUT: symbolic_constant7800017A: {inst: inst780001A8, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def15}} +// CHECK:STDOUT: symbolic_constant7800017B: {inst: inst780001A6, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def14}} +// CHECK:STDOUT: symbolic_constant7800017C: {inst: inst780001B3, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800017D: {inst: inst780001B3, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def13}} +// CHECK:STDOUT: symbolic_constant7800017E: {inst: inst7800014B, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def12}} +// CHECK:STDOUT: symbolic_constant7800017F: {inst: inst7800014A, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def11}} +// CHECK:STDOUT: symbolic_constant78000180: {inst: inst78000146, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def10}} +// CHECK:STDOUT: symbolic_constant78000181: {inst: inst78000149, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def9}} +// CHECK:STDOUT: symbolic_constant78000182: {inst: inst78000147, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def8}} +// CHECK:STDOUT: symbolic_constant78000183: {inst: inst78000154, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def7}} +// CHECK:STDOUT: symbolic_constant78000184: {inst: inst780000B5, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def6}} +// CHECK:STDOUT: symbolic_constant78000185: {inst: inst780000B4, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def5}} +// CHECK:STDOUT: symbolic_constant78000186: {inst: inst780000B0, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def4}} +// CHECK:STDOUT: symbolic_constant78000187: {inst: inst780000B3, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def3}} +// CHECK:STDOUT: symbolic_constant78000188: {inst: inst780000B1, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def2}} +// CHECK:STDOUT: symbolic_constant78000189: {inst: inst780000BE, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant7800018A: {inst: inst780001B4, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800018B: {inst: inst780001B4, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def0}} +// CHECK:STDOUT: symbolic_constant7800018C: {inst: inst780001B4, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def0}} +// CHECK:STDOUT: symbolic_constant7800018D: {inst: inst780000BE, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant7800018E: {inst: inst780000B1, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def2}} +// CHECK:STDOUT: symbolic_constant7800018F: {inst: inst780000B3, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def3}} +// CHECK:STDOUT: symbolic_constant78000190: {inst: inst780000B0, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def4}} +// CHECK:STDOUT: symbolic_constant78000191: {inst: inst780000B4, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def5}} +// CHECK:STDOUT: symbolic_constant78000192: {inst: inst780000B5, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def6}} +// CHECK:STDOUT: symbolic_constant78000193: {inst: inst78000154, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def7}} +// CHECK:STDOUT: symbolic_constant78000194: {inst: inst78000147, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def8}} +// CHECK:STDOUT: symbolic_constant78000195: {inst: inst78000149, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def9}} +// CHECK:STDOUT: symbolic_constant78000196: {inst: inst78000146, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def10}} +// CHECK:STDOUT: symbolic_constant78000197: {inst: inst7800014A, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def11}} +// CHECK:STDOUT: symbolic_constant78000198: {inst: inst7800014B, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def12}} +// CHECK:STDOUT: symbolic_constant78000199: {inst: inst780001B3, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def13}} +// CHECK:STDOUT: symbolic_constant7800019A: {inst: inst780001A6, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def14}} +// CHECK:STDOUT: symbolic_constant7800019B: {inst: inst780001A8, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def15}} +// CHECK:STDOUT: symbolic_constant7800019C: {inst: inst780001A5, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def16}} +// CHECK:STDOUT: symbolic_constant7800019D: {inst: inst780001A9, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def17}} +// CHECK:STDOUT: symbolic_constant7800019E: {inst: inst780001AA, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def18}} +// CHECK:STDOUT: symbolic_constant7800019F: {inst: inst7800017A, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl10}} +// CHECK:STDOUT: symbolic_constant780001A0: {inst: inst78000179, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl9}} +// CHECK:STDOUT: symbolic_constant780001A1: {inst: inst7800011D, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl8}} +// CHECK:STDOUT: symbolic_constant780001A2: {inst: inst7800008B, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl7}} +// CHECK:STDOUT: symbolic_constant780001A3: {inst: inst78000184, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl6}} +// CHECK:STDOUT: symbolic_constant780001A4: {inst: inst78000178, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl5}} +// CHECK:STDOUT: symbolic_constant780001A5: {inst: inst78000185, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl4}} +// CHECK:STDOUT: symbolic_constant780001A6: {inst: inst7800011C, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant780001A7: {inst: inst78000129, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant780001A8: {inst: inst7800008A, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant780001A9: {inst: inst78000096, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant780001AA: {inst: inst78000185, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl4}} +// CHECK:STDOUT: symbolic_constant780001AB: {inst: inst78000129, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant780001AC: {inst: inst78000096, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant780001AD: {inst: inst78000096, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant780001AE: {inst: inst7800008A, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant780001AF: {inst: inst78000129, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant780001B0: {inst: inst7800011C, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant780001B1: {inst: inst78000185, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl4}} +// CHECK:STDOUT: symbolic_constant780001B2: {inst: inst78000178, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl5}} +// CHECK:STDOUT: symbolic_constant780001B3: {inst: inst78000184, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl6}} +// CHECK:STDOUT: symbolic_constant780001B4: {inst: inst7800008B, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl7}} +// CHECK:STDOUT: symbolic_constant780001B5: {inst: inst7800011D, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl8}} +// CHECK:STDOUT: symbolic_constant780001B6: {inst: inst78000179, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl9}} +// CHECK:STDOUT: symbolic_constant780001B7: {inst: inst7800017A, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl10}} +// CHECK:STDOUT: symbolic_constant780001B8: {inst: inst7800017D, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl11}} +// CHECK:STDOUT: symbolic_constant780001B9: {inst: inst78000180, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant780001BA: {inst: inst7800017F, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_def0}} +// CHECK:STDOUT: symbolic_constant780001BB: {inst: inst78000180, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant780001BC: {inst: inst780001E0, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780001BD: {inst: inst780000E8, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant780001BE: {inst: inst780001E2, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780001BF: {inst: inst780001E2, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_def2}} +// CHECK:STDOUT: symbolic_constant780001C0: {inst: inst780001E4, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780001C1: {inst: inst780001E5, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780001C2: {inst: inst780001E6, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780001C3: {inst: inst780001E7, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780001C4: {inst: inst780001E9, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780001C5: {inst: inst780001E0, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_def3}} +// CHECK:STDOUT: symbolic_constant780001C6: {inst: inst780001E4, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_def4}} +// CHECK:STDOUT: symbolic_constant780001C7: {inst: inst780001E5, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_def5}} +// CHECK:STDOUT: symbolic_constant780001C8: {inst: inst780001E7, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_def6}} +// CHECK:STDOUT: symbolic_constant780001C9: {inst: inst780001E9, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_def7}} +// CHECK:STDOUT: symbolic_constant780001CA: {inst: inst780001F9, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780001CB: {inst: inst780001F9, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_def8}} // CHECK:STDOUT: inst_blocks: // CHECK:STDOUT: inst_block_empty: {} // CHECK:STDOUT: exports: -// CHECK:STDOUT: 0: inst7800003E +// CHECK:STDOUT: 0: inst78000048 // CHECK:STDOUT: generated: {} // CHECK:STDOUT: imports: // CHECK:STDOUT: 0: inst78000011 -// CHECK:STDOUT: 1: inst7800004E -// CHECK:STDOUT: 2: inst7800004F -// CHECK:STDOUT: 3: inst78000051 -// CHECK:STDOUT: 4: inst78000053 -// CHECK:STDOUT: 5: inst78000054 -// CHECK:STDOUT: 6: inst78000055 -// CHECK:STDOUT: 7: inst78000056 -// CHECK:STDOUT: 8: inst7800005B -// CHECK:STDOUT: 9: inst7800005C -// CHECK:STDOUT: 10: inst7800005D -// CHECK:STDOUT: 11: inst7800005E -// CHECK:STDOUT: 12: inst78000060 -// CHECK:STDOUT: 13: inst78000061 -// CHECK:STDOUT: 14: inst78000062 -// CHECK:STDOUT: 15: inst7800006A -// CHECK:STDOUT: 16: inst7800006C -// CHECK:STDOUT: 17: inst7800006F -// CHECK:STDOUT: 18: inst78000070 -// CHECK:STDOUT: 19: inst78000074 -// CHECK:STDOUT: 20: inst78000075 -// CHECK:STDOUT: 21: inst78000077 -// CHECK:STDOUT: 22: inst7800007B -// CHECK:STDOUT: 23: inst7800007C -// CHECK:STDOUT: 24: inst7800007D -// CHECK:STDOUT: 25: inst7800007E -// CHECK:STDOUT: 26: inst78000080 -// CHECK:STDOUT: 27: inst78000081 -// CHECK:STDOUT: 28: inst78000082 -// CHECK:STDOUT: 29: inst7800009A -// CHECK:STDOUT: 30: inst7800009B +// CHECK:STDOUT: 1: inst78000058 +// CHECK:STDOUT: 2: inst78000059 +// CHECK:STDOUT: 3: inst7800005B +// CHECK:STDOUT: 4: inst7800005D +// CHECK:STDOUT: 5: inst7800005E +// CHECK:STDOUT: 6: inst7800005F +// CHECK:STDOUT: 7: inst78000060 +// CHECK:STDOUT: 8: inst78000066 +// CHECK:STDOUT: 9: inst78000069 +// CHECK:STDOUT: 10: inst7800006B +// CHECK:STDOUT: 11: inst7800006D +// CHECK:STDOUT: 12: inst7800006E +// CHECK:STDOUT: 13: inst7800006F +// CHECK:STDOUT: 14: inst78000070 +// CHECK:STDOUT: 15: inst78000071 +// CHECK:STDOUT: 16: inst78000072 +// CHECK:STDOUT: 17: inst78000073 +// CHECK:STDOUT: 18: inst78000074 +// CHECK:STDOUT: 19: inst78000075 +// CHECK:STDOUT: 20: inst7800007E +// CHECK:STDOUT: 21: inst7800007F +// CHECK:STDOUT: 22: inst78000083 +// CHECK:STDOUT: 23: inst78000085 +// CHECK:STDOUT: 24: inst78000088 +// CHECK:STDOUT: 25: inst78000089 +// CHECK:STDOUT: 26: inst7800008D +// CHECK:STDOUT: 27: inst7800008E +// CHECK:STDOUT: 28: inst78000090 +// CHECK:STDOUT: 29: inst78000097 +// CHECK:STDOUT: 30: inst7800009A // CHECK:STDOUT: 31: inst7800009C -// CHECK:STDOUT: 32: inst7800009D -// CHECK:STDOUT: 33: inst780000A4 -// CHECK:STDOUT: 34: inst780000A5 -// CHECK:STDOUT: 35: inst780000A6 -// CHECK:STDOUT: 36: inst780000A7 -// CHECK:STDOUT: 37: inst780000A8 -// CHECK:STDOUT: 38: inst780000A9 -// CHECK:STDOUT: 39: inst780000AA -// CHECK:STDOUT: 40: inst780000AB -// CHECK:STDOUT: 41: inst780000AC -// CHECK:STDOUT: 42: inst780000AD -// CHECK:STDOUT: 43: inst780000AE -// CHECK:STDOUT: 44: inst780000AF -// CHECK:STDOUT: 45: inst780000B0 -// CHECK:STDOUT: 46: inst780000B1 -// CHECK:STDOUT: 47: inst780000B2 -// CHECK:STDOUT: 48: inst780000B3 -// CHECK:STDOUT: 49: inst780000B4 -// CHECK:STDOUT: 50: inst780000B5 -// CHECK:STDOUT: 51: inst780000B6 -// CHECK:STDOUT: 52: inst780000B7 -// CHECK:STDOUT: 53: inst780000B9 -// CHECK:STDOUT: 54: inst780000BA -// CHECK:STDOUT: 55: inst780000BB -// CHECK:STDOUT: 56: inst780000BC -// CHECK:STDOUT: 57: inst780000C0 -// CHECK:STDOUT: 58: inst780000C3 -// CHECK:STDOUT: 59: inst780000C4 -// CHECK:STDOUT: 60: inst780000C5 -// CHECK:STDOUT: 61: inst780000C6 -// CHECK:STDOUT: 62: inst780000C8 -// CHECK:STDOUT: 63: inst780000C9 -// CHECK:STDOUT: 64: inst780000CA -// CHECK:STDOUT: 65: inst780000D2 -// CHECK:STDOUT: 66: inst780000D3 -// CHECK:STDOUT: 67: inst780000D4 -// CHECK:STDOUT: 68: inst780000D5 -// CHECK:STDOUT: 69: inst780000D6 -// CHECK:STDOUT: 70: inst780000D7 -// CHECK:STDOUT: 71: inst780000D8 -// CHECK:STDOUT: 72: inst780000D9 -// CHECK:STDOUT: 73: inst780000DA -// CHECK:STDOUT: 74: inst780000DB -// CHECK:STDOUT: 75: inst780000DF -// CHECK:STDOUT: 76: inst780000E0 -// CHECK:STDOUT: 77: inst780000E2 -// CHECK:STDOUT: 78: inst780000E8 -// CHECK:STDOUT: 79: inst780000E9 -// CHECK:STDOUT: 80: inst780000EA -// CHECK:STDOUT: 81: inst780000EB -// CHECK:STDOUT: 82: inst780000ED -// CHECK:STDOUT: 83: inst780000EE -// CHECK:STDOUT: 84: inst780000EF -// CHECK:STDOUT: 85: inst780000F0 -// CHECK:STDOUT: 86: inst7800010F -// CHECK:STDOUT: 87: inst78000110 -// CHECK:STDOUT: 88: inst78000111 -// CHECK:STDOUT: 89: inst78000112 -// CHECK:STDOUT: 90: inst78000113 -// CHECK:STDOUT: 91: inst78000114 -// CHECK:STDOUT: 92: inst7800011E -// CHECK:STDOUT: 93: inst7800011F -// CHECK:STDOUT: 94: inst78000123 -// CHECK:STDOUT: 95: inst78000124 -// CHECK:STDOUT: 96: inst78000126 -// CHECK:STDOUT: 97: inst7800012C -// CHECK:STDOUT: 98: inst7800012D -// CHECK:STDOUT: 99: inst7800012E -// CHECK:STDOUT: 100: inst7800012F -// CHECK:STDOUT: 101: inst78000131 -// CHECK:STDOUT: 102: inst78000132 -// CHECK:STDOUT: 103: inst78000133 -// CHECK:STDOUT: 104: inst78000134 -// CHECK:STDOUT: 105: inst78000135 -// CHECK:STDOUT: 106: inst7800015C -// CHECK:STDOUT: 107: inst7800015D -// CHECK:STDOUT: 108: inst7800015E -// CHECK:STDOUT: 109: inst7800015F -// CHECK:STDOUT: 110: inst78000160 -// CHECK:STDOUT: 111: inst78000161 -// CHECK:STDOUT: 112: inst78000162 -// CHECK:STDOUT: 113: inst78000163 +// CHECK:STDOUT: 32: inst7800009E +// CHECK:STDOUT: 33: inst7800009F +// CHECK:STDOUT: 34: inst780000A0 +// CHECK:STDOUT: 35: inst780000A1 +// CHECK:STDOUT: 36: inst780000A2 +// CHECK:STDOUT: 37: inst780000A3 +// CHECK:STDOUT: 38: inst780000A4 +// CHECK:STDOUT: 39: inst780000A5 +// CHECK:STDOUT: 40: inst780000A6 +// CHECK:STDOUT: 41: inst780000B8 +// CHECK:STDOUT: 42: inst780000BC +// CHECK:STDOUT: 43: inst780000C7 +// CHECK:STDOUT: 44: inst780000C8 +// CHECK:STDOUT: 45: inst780000C9 +// CHECK:STDOUT: 46: inst780000CA +// CHECK:STDOUT: 47: inst780000CB +// CHECK:STDOUT: 48: inst780000CC +// CHECK:STDOUT: 49: inst780000D4 +// CHECK:STDOUT: 50: inst780000D5 +// CHECK:STDOUT: 51: inst780000D6 +// CHECK:STDOUT: 52: inst780000D7 +// CHECK:STDOUT: 53: inst780000D8 +// CHECK:STDOUT: 54: inst780000D9 +// CHECK:STDOUT: 55: inst780000DA +// CHECK:STDOUT: 56: inst780000DB +// CHECK:STDOUT: 57: inst780000DC +// CHECK:STDOUT: 58: inst780000DD +// CHECK:STDOUT: 59: inst780000DE +// CHECK:STDOUT: 60: inst780000DF +// CHECK:STDOUT: 61: inst780000E0 +// CHECK:STDOUT: 62: inst780000E1 +// CHECK:STDOUT: 63: inst780000E2 +// CHECK:STDOUT: 64: inst780000E3 +// CHECK:STDOUT: 65: inst780000E4 +// CHECK:STDOUT: 66: inst780000E5 +// CHECK:STDOUT: 67: inst780000E6 +// CHECK:STDOUT: 68: inst780000E7 +// CHECK:STDOUT: 69: inst780000E9 +// CHECK:STDOUT: 70: inst780000EA +// CHECK:STDOUT: 71: inst780000EB +// CHECK:STDOUT: 72: inst780000EC +// CHECK:STDOUT: 73: inst780000F1 +// CHECK:STDOUT: 74: inst780000F5 +// CHECK:STDOUT: 75: inst780000F8 +// CHECK:STDOUT: 76: inst780000FA +// CHECK:STDOUT: 77: inst780000FC +// CHECK:STDOUT: 78: inst780000FD +// CHECK:STDOUT: 79: inst780000FE +// CHECK:STDOUT: 80: inst780000FF +// CHECK:STDOUT: 81: inst78000100 +// CHECK:STDOUT: 82: inst78000101 +// CHECK:STDOUT: 83: inst78000102 +// CHECK:STDOUT: 84: inst78000103 +// CHECK:STDOUT: 85: inst78000104 +// CHECK:STDOUT: 86: inst7800010D +// CHECK:STDOUT: 87: inst7800010E +// CHECK:STDOUT: 88: inst78000112 +// CHECK:STDOUT: 89: inst78000113 +// CHECK:STDOUT: 90: inst78000114 +// CHECK:STDOUT: 91: inst78000115 +// CHECK:STDOUT: 92: inst78000116 +// CHECK:STDOUT: 93: inst78000117 +// CHECK:STDOUT: 94: inst78000118 +// CHECK:STDOUT: 95: inst78000119 +// CHECK:STDOUT: 96: inst7800011A +// CHECK:STDOUT: 97: inst7800011B +// CHECK:STDOUT: 98: inst7800011F +// CHECK:STDOUT: 99: inst78000120 +// CHECK:STDOUT: 100: inst78000122 +// CHECK:STDOUT: 101: inst7800012A +// CHECK:STDOUT: 102: inst7800012D +// CHECK:STDOUT: 103: inst7800012F +// CHECK:STDOUT: 104: inst78000131 +// CHECK:STDOUT: 105: inst78000132 +// CHECK:STDOUT: 106: inst78000133 +// CHECK:STDOUT: 107: inst78000134 +// CHECK:STDOUT: 108: inst78000135 +// CHECK:STDOUT: 109: inst78000136 +// CHECK:STDOUT: 110: inst78000137 +// CHECK:STDOUT: 111: inst78000138 +// CHECK:STDOUT: 112: inst78000139 +// CHECK:STDOUT: 113: inst7800013A +// CHECK:STDOUT: 114: inst7800014E +// CHECK:STDOUT: 115: inst78000152 +// CHECK:STDOUT: 116: inst78000163 +// CHECK:STDOUT: 117: inst78000164 +// CHECK:STDOUT: 118: inst78000165 +// CHECK:STDOUT: 119: inst78000166 +// CHECK:STDOUT: 120: inst78000167 +// CHECK:STDOUT: 121: inst78000168 +// CHECK:STDOUT: 122: inst78000169 +// CHECK:STDOUT: 123: inst7800016A +// CHECK:STDOUT: 124: inst78000176 +// CHECK:STDOUT: 125: inst78000177 +// CHECK:STDOUT: 126: inst7800017B +// CHECK:STDOUT: 127: inst7800017C +// CHECK:STDOUT: 128: inst7800017E +// CHECK:STDOUT: 129: inst78000186 +// CHECK:STDOUT: 130: inst78000189 +// CHECK:STDOUT: 131: inst7800018B +// CHECK:STDOUT: 132: inst7800018D +// CHECK:STDOUT: 133: inst7800018E +// CHECK:STDOUT: 134: inst7800018F +// CHECK:STDOUT: 135: inst78000190 +// CHECK:STDOUT: 136: inst78000191 +// CHECK:STDOUT: 137: inst78000192 +// CHECK:STDOUT: 138: inst78000193 +// CHECK:STDOUT: 139: inst78000194 +// CHECK:STDOUT: 140: inst78000195 +// CHECK:STDOUT: 141: inst78000196 +// CHECK:STDOUT: 142: inst78000197 +// CHECK:STDOUT: 143: inst780001AD +// CHECK:STDOUT: 144: inst780001B1 +// CHECK:STDOUT: 145: inst780001C8 +// CHECK:STDOUT: 146: inst780001C9 +// CHECK:STDOUT: 147: inst780001CA +// CHECK:STDOUT: 148: inst780001CB +// CHECK:STDOUT: 149: inst780001CC +// CHECK:STDOUT: 150: inst780001CD +// CHECK:STDOUT: 151: inst780001CE +// CHECK:STDOUT: 152: inst780001CF +// CHECK:STDOUT: 153: inst780001D0 +// CHECK:STDOUT: 154: inst780001D1 // CHECK:STDOUT: global_init: {} // CHECK:STDOUT: inst_block78000005: // CHECK:STDOUT: 0: inst78000013 // CHECK:STDOUT: 1: inst78000015 // CHECK:STDOUT: inst_block78000006: -// CHECK:STDOUT: 0: inst7800001A +// CHECK:STDOUT: 0: inst78000017 // CHECK:STDOUT: inst_block78000007: -// CHECK:STDOUT: 0: inst7800001B -// CHECK:STDOUT: 1: inst7800001C +// CHECK:STDOUT: 0: inst7800001D +// CHECK:STDOUT: 1: inst7800001E // CHECK:STDOUT: inst_block78000008: -// CHECK:STDOUT: 0: inst78000023 +// CHECK:STDOUT: 0: inst78000026 // CHECK:STDOUT: inst_block78000009: -// CHECK:STDOUT: 0: inst78000025 -// CHECK:STDOUT: 1: inst78000027 +// CHECK:STDOUT: 0: inst7800002B +// CHECK:STDOUT: 1: inst7800002D // CHECK:STDOUT: inst_block7800000A: // CHECK:STDOUT: 0: inst(TypeType) -// CHECK:STDOUT: 1: inst78000026 +// CHECK:STDOUT: 1: inst7800002C // CHECK:STDOUT: inst_block7800000B: -// CHECK:STDOUT: 0: inst7800001D -// CHECK:STDOUT: 1: inst78000028 -// CHECK:STDOUT: inst_block7800000C: -// CHECK:STDOUT: 0: inst7800001E -// CHECK:STDOUT: 1: inst78000028 -// CHECK:STDOUT: inst_block7800000D: -// CHECK:STDOUT: 0: inst7800001D +// CHECK:STDOUT: 0: inst7800001F // CHECK:STDOUT: 1: inst7800002E -// CHECK:STDOUT: inst_block7800000E: -// CHECK:STDOUT: 0: inst7800001D -// CHECK:STDOUT: 1: inst78000026 -// CHECK:STDOUT: inst_block7800000F: -// CHECK:STDOUT: 0: inst7800001E -// CHECK:STDOUT: 1: inst78000026 -// CHECK:STDOUT: inst_block78000010: +// CHECK:STDOUT: inst_block7800000C: // CHECK:STDOUT: 0: inst78000020 -// CHECK:STDOUT: 1: inst78000036 -// CHECK:STDOUT: inst_block78000011: -// CHECK:STDOUT: 0: inst7800003A +// CHECK:STDOUT: 1: inst7800002E +// CHECK:STDOUT: inst_block7800000D: +// CHECK:STDOUT: 0: inst7800001F +// CHECK:STDOUT: 1: inst78000034 +// CHECK:STDOUT: inst_block7800000E: +// CHECK:STDOUT: 0: inst7800001F +// CHECK:STDOUT: 1: inst7800002C +// CHECK:STDOUT: inst_block7800000F: +// CHECK:STDOUT: 0: inst78000020 +// CHECK:STDOUT: 1: inst7800002C +// CHECK:STDOUT: inst_block78000010: +// CHECK:STDOUT: 0: inst78000022 // CHECK:STDOUT: 1: inst7800003C +// CHECK:STDOUT: inst_block78000011: +// CHECK:STDOUT: 0: inst78000044 +// CHECK:STDOUT: 1: inst78000046 // CHECK:STDOUT: inst_block78000012: -// CHECK:STDOUT: 0: inst7800001A -// CHECK:STDOUT: 1: inst78000020 -// CHECK:STDOUT: 2: inst78000023 -// CHECK:STDOUT: 3: inst78000036 -// CHECK:STDOUT: 4: inst78000038 -// CHECK:STDOUT: inst_block78000013: -// CHECK:STDOUT: 0: inst78000024 -// CHECK:STDOUT: 1: inst78000025 -// CHECK:STDOUT: 2: inst78000027 -// CHECK:STDOUT: 3: inst7800002A -// CHECK:STDOUT: 4: inst7800002E -// CHECK:STDOUT: 5: inst78000030 -// CHECK:STDOUT: 6: inst78000032 -// CHECK:STDOUT: 7: inst78000039 -// CHECK:STDOUT: 8: inst78000017 -// CHECK:STDOUT: 9: inst7800003A -// CHECK:STDOUT: 10: inst7800003B -// CHECK:STDOUT: 11: inst78000022 -// CHECK:STDOUT: 12: inst7800003C -// CHECK:STDOUT: 13: inst7800003D -// CHECK:STDOUT: inst_block78000014: // CHECK:STDOUT: 0: inst78000017 +// CHECK:STDOUT: 1: inst78000022 +// CHECK:STDOUT: 2: inst78000026 +// CHECK:STDOUT: 3: inst7800003C +// CHECK:STDOUT: 4: inst78000040 +// CHECK:STDOUT: inst_block78000013: +// CHECK:STDOUT: 0: inst7800002A +// CHECK:STDOUT: 1: inst7800002B +// CHECK:STDOUT: 2: inst7800002D +// CHECK:STDOUT: 3: inst78000030 +// CHECK:STDOUT: 4: inst78000034 +// CHECK:STDOUT: 5: inst78000036 +// CHECK:STDOUT: 6: inst78000038 +// CHECK:STDOUT: 7: inst78000043 +// CHECK:STDOUT: 8: inst7800001A +// CHECK:STDOUT: 9: inst78000044 +// CHECK:STDOUT: 10: inst78000045 +// CHECK:STDOUT: 11: inst78000029 +// CHECK:STDOUT: 12: inst78000046 +// CHECK:STDOUT: 13: inst78000047 +// CHECK:STDOUT: inst_block78000014: +// CHECK:STDOUT: 0: inst7800001A // CHECK:STDOUT: inst_block78000015: -// CHECK:STDOUT: 0: inst78000018 +// CHECK:STDOUT: 0: inst7800001B // CHECK:STDOUT: inst_block78000016: // CHECK:STDOUT: 0: inst78000019 -// CHECK:STDOUT: 1: inst7800001E -// CHECK:STDOUT: 2: inst78000021 -// CHECK:STDOUT: 3: inst7800002C -// CHECK:STDOUT: 4: inst78000031 -// CHECK:STDOUT: 5: inst78000034 -// CHECK:STDOUT: 6: inst78000037 +// CHECK:STDOUT: 1: inst7800001C +// CHECK:STDOUT: 2: inst78000020 +// CHECK:STDOUT: 3: inst78000024 +// CHECK:STDOUT: 4: inst78000025 +// CHECK:STDOUT: 5: inst78000028 +// CHECK:STDOUT: 6: inst78000032 +// CHECK:STDOUT: 7: inst78000037 +// CHECK:STDOUT: 8: inst7800003A +// CHECK:STDOUT: 9: inst7800003E +// CHECK:STDOUT: 10: inst7800003F +// CHECK:STDOUT: 11: inst78000042 // CHECK:STDOUT: inst_block78000017: // CHECK:STDOUT: 0: inst78000018 -// CHECK:STDOUT: 1: inst7800001D +// CHECK:STDOUT: 1: inst7800001B // CHECK:STDOUT: 2: inst7800001F -// CHECK:STDOUT: 3: inst7800002B -// CHECK:STDOUT: 4: inst7800002F -// CHECK:STDOUT: 5: inst78000033 -// CHECK:STDOUT: 6: inst78000035 +// CHECK:STDOUT: 3: inst78000021 +// CHECK:STDOUT: 4: inst78000023 +// CHECK:STDOUT: 5: inst78000027 +// CHECK:STDOUT: 6: inst78000031 +// CHECK:STDOUT: 7: inst78000035 +// CHECK:STDOUT: 8: inst78000039 +// CHECK:STDOUT: 9: inst7800003B +// CHECK:STDOUT: 10: inst7800003D +// CHECK:STDOUT: 11: inst78000041 // CHECK:STDOUT: inst_block78000018: -// CHECK:STDOUT: 0: inst78000048 -// CHECK:STDOUT: 1: inst78000049 -// CHECK:STDOUT: 2: inst7800004A -// CHECK:STDOUT: 3: inst78000177 -// CHECK:STDOUT: 4: inst7800017E -// CHECK:STDOUT: 5: inst78000181 -// CHECK:STDOUT: 6: inst78000182 -// CHECK:STDOUT: 7: inst78000183 -// CHECK:STDOUT: 8: inst78000186 -// CHECK:STDOUT: 9: inst78000187 -// CHECK:STDOUT: 10: inst7800004C -// CHECK:STDOUT: 11: inst78000188 -// CHECK:STDOUT: 12: inst78000189 -// CHECK:STDOUT: 13: inst7800018A -// CHECK:STDOUT: 14: inst7800018B -// CHECK:STDOUT: 15: inst7800018C -// CHECK:STDOUT: 16: inst7800018D -// CHECK:STDOUT: 17: inst7800018E -// CHECK:STDOUT: 18: inst7800018F +// CHECK:STDOUT: 0: inst78000052 +// CHECK:STDOUT: 1: inst78000053 +// CHECK:STDOUT: 2: inst78000054 +// CHECK:STDOUT: 3: inst780001E8 +// CHECK:STDOUT: 4: inst780001EF +// CHECK:STDOUT: 5: inst780001F2 +// CHECK:STDOUT: 6: inst780001F3 +// CHECK:STDOUT: 7: inst780001F6 +// CHECK:STDOUT: 8: inst780001F7 +// CHECK:STDOUT: 9: inst780001F8 +// CHECK:STDOUT: 10: inst780001FB +// CHECK:STDOUT: 11: inst780001FC +// CHECK:STDOUT: 12: inst78000056 +// CHECK:STDOUT: 13: inst780001FD +// CHECK:STDOUT: 14: inst780001FE +// CHECK:STDOUT: 15: inst780001FF +// CHECK:STDOUT: 16: inst78000200 +// CHECK:STDOUT: 17: inst78000201 +// CHECK:STDOUT: 18: inst78000202 +// CHECK:STDOUT: 19: inst78000203 +// CHECK:STDOUT: 20: inst78000204 // CHECK:STDOUT: inst_block78000019: -// CHECK:STDOUT: 0: inst78000048 -// CHECK:STDOUT: 1: inst78000049 +// CHECK:STDOUT: 0: inst78000052 +// CHECK:STDOUT: 1: inst78000053 // CHECK:STDOUT: inst_block7800001A: -// CHECK:STDOUT: 0: inst78000054 -// CHECK:STDOUT: inst_block7800001B: -// CHECK:STDOUT: 0: inst78000055 -// CHECK:STDOUT: inst_block7800001C: -// CHECK:STDOUT: 0: inst78000052 -// CHECK:STDOUT: inst_block7800001D: -// CHECK:STDOUT: 0: inst78000052 -// CHECK:STDOUT: 1: inst78000057 -// CHECK:STDOUT: 2: inst78000058 -// CHECK:STDOUT: inst_block7800001E: -// CHECK:STDOUT: 0: inst7800005D -// CHECK:STDOUT: 1: inst7800005B -// CHECK:STDOUT: inst_block7800001F: // CHECK:STDOUT: 0: inst7800005E +// CHECK:STDOUT: inst_block7800001B: +// CHECK:STDOUT: 0: inst7800005F +// CHECK:STDOUT: inst_block7800001C: +// CHECK:STDOUT: 0: inst7800005C +// CHECK:STDOUT: inst_block7800001D: +// CHECK:STDOUT: 0: inst7800005C +// CHECK:STDOUT: 1: inst78000061 +// CHECK:STDOUT: 2: inst78000062 +// CHECK:STDOUT: inst_block7800001E: +// CHECK:STDOUT: 0: inst7800006E +// CHECK:STDOUT: 1: inst7800006F +// CHECK:STDOUT: inst_block7800001F: +// CHECK:STDOUT: 0: inst78000071 // CHECK:STDOUT: inst_block78000020: -// CHECK:STDOUT: 0: inst78000062 +// CHECK:STDOUT: 0: inst78000075 // CHECK:STDOUT: inst_block78000021: -// CHECK:STDOUT: 0: inst78000063 -// CHECK:STDOUT: 1: inst78000064 -// CHECK:STDOUT: 2: inst78000065 -// CHECK:STDOUT: 3: inst78000066 +// CHECK:STDOUT: 0: inst78000076 +// CHECK:STDOUT: 1: inst78000077 +// CHECK:STDOUT: 2: inst78000078 +// CHECK:STDOUT: 3: inst78000079 +// CHECK:STDOUT: 4: inst7800007A +// CHECK:STDOUT: 5: inst7800007B +// CHECK:STDOUT: 6: inst7800007C +// CHECK:STDOUT: 7: inst7800007D // CHECK:STDOUT: inst_block78000022: -// CHECK:STDOUT: 0: inst78000052 -// CHECK:STDOUT: 1: inst78000059 -// CHECK:STDOUT: 2: inst7800005A -// CHECK:STDOUT: 3: inst7800005F +// CHECK:STDOUT: 0: inst7800005C +// CHECK:STDOUT: 1: inst78000063 +// CHECK:STDOUT: 2: inst78000064 +// CHECK:STDOUT: 3: inst78000068 +// CHECK:STDOUT: 4: inst7800006A +// CHECK:STDOUT: 5: inst7800006C +// CHECK:STDOUT: 6: inst78000065 +// CHECK:STDOUT: 7: inst78000067 // CHECK:STDOUT: inst_block78000023: -// CHECK:STDOUT: 0: inst78000067 +// CHECK:STDOUT: 0: inst78000080 // CHECK:STDOUT: inst_block78000024: -// CHECK:STDOUT: 0: inst78000067 -// CHECK:STDOUT: 1: inst78000068 -// CHECK:STDOUT: 2: inst78000069 +// CHECK:STDOUT: 0: inst78000080 +// CHECK:STDOUT: 1: inst78000081 +// CHECK:STDOUT: 2: inst78000082 // CHECK:STDOUT: inst_block78000025: -// CHECK:STDOUT: 0: inst78000074 +// CHECK:STDOUT: 0: inst7800008D // CHECK:STDOUT: inst_block78000026: -// CHECK:STDOUT: 0: inst78000071 +// CHECK:STDOUT: 0: inst7800008A // CHECK:STDOUT: inst_block78000027: -// CHECK:STDOUT: 0: inst78000071 -// CHECK:STDOUT: 1: inst78000072 -// CHECK:STDOUT: 2: inst78000073 -// CHECK:STDOUT: 3: inst78000076 +// CHECK:STDOUT: 0: inst78000096 +// CHECK:STDOUT: 1: inst7800008A +// CHECK:STDOUT: 2: inst7800008B +// CHECK:STDOUT: 3: inst7800008C +// CHECK:STDOUT: 4: inst7800008F // CHECK:STDOUT: inst_block78000028: -// CHECK:STDOUT: 0: inst78000078 -// CHECK:STDOUT: 1: inst78000079 +// CHECK:STDOUT: 0: inst78000091 +// CHECK:STDOUT: 1: inst78000092 // CHECK:STDOUT: inst_block78000029: -// CHECK:STDOUT: 0: inst7800007D -// CHECK:STDOUT: 1: inst7800007B +// CHECK:STDOUT: 0: inst7800009F +// CHECK:STDOUT: 1: inst780000A0 // CHECK:STDOUT: inst_block7800002A: -// CHECK:STDOUT: 0: inst7800007E -// CHECK:STDOUT: inst_block7800002B: -// CHECK:STDOUT: 0: inst78000082 -// CHECK:STDOUT: inst_block7800002C: -// CHECK:STDOUT: 0: inst78000083 -// CHECK:STDOUT: 1: inst78000084 -// CHECK:STDOUT: 2: inst78000085 -// CHECK:STDOUT: 3: inst78000086 -// CHECK:STDOUT: 4: inst78000087 -// CHECK:STDOUT: inst_block7800002D: -// CHECK:STDOUT: 0: inst78000071 -// CHECK:STDOUT: 1: inst78000089 -// CHECK:STDOUT: 2: inst7800008A -// CHECK:STDOUT: inst_block7800002E: -// CHECK:STDOUT: 0: inst78000071 -// CHECK:STDOUT: 1: inst78000072 -// CHECK:STDOUT: 2: inst7800008F -// CHECK:STDOUT: 3: inst7800008E -// CHECK:STDOUT: inst_block7800002F: -// CHECK:STDOUT: 0: inst78000083 -// CHECK:STDOUT: inst_block78000030: -// CHECK:STDOUT: 0: inst78000083 -// CHECK:STDOUT: inst_block78000031: -// CHECK:STDOUT: 0: inst78000092 -// CHECK:STDOUT: 1: inst78000093 -// CHECK:STDOUT: 2: inst78000094 -// CHECK:STDOUT: 3: inst78000095 -// CHECK:STDOUT: 4: inst78000096 -// CHECK:STDOUT: 5: inst78000097 -// CHECK:STDOUT: 6: inst78000098 -// CHECK:STDOUT: inst_block78000032: -// CHECK:STDOUT: 0: inst78000071 -// CHECK:STDOUT: 1: inst78000072 -// CHECK:STDOUT: 2: inst78000073 -// CHECK:STDOUT: 3: inst7800007A -// CHECK:STDOUT: 4: inst7800007F -// CHECK:STDOUT: inst_block78000033: -// CHECK:STDOUT: 0: inst7800009A -// CHECK:STDOUT: inst_block78000034: -// CHECK:STDOUT: 0: inst7800009D -// CHECK:STDOUT: inst_block78000035: -// CHECK:STDOUT: 0: inst7800009E -// CHECK:STDOUT: inst_block78000036: -// CHECK:STDOUT: 0: inst7800009E -// CHECK:STDOUT: 1: inst7800009F -// CHECK:STDOUT: 2: inst780000A0 -// CHECK:STDOUT: 3: inst780000A1 -// CHECK:STDOUT: inst_block78000037: -// CHECK:STDOUT: 0: inst7800009E -// CHECK:STDOUT: inst_block78000038: // CHECK:STDOUT: 0: inst780000A2 -// CHECK:STDOUT: 1: inst780000A3 +// CHECK:STDOUT: inst_block7800002B: +// CHECK:STDOUT: 0: inst780000A6 +// CHECK:STDOUT: inst_block7800002C: +// CHECK:STDOUT: 0: inst780000A7 +// CHECK:STDOUT: 1: inst780000A8 +// CHECK:STDOUT: 2: inst780000A9 +// CHECK:STDOUT: 3: inst780000AA +// CHECK:STDOUT: 4: inst780000AB +// CHECK:STDOUT: 5: inst780000AC +// CHECK:STDOUT: 6: inst780000AD +// CHECK:STDOUT: 7: inst780000AE +// CHECK:STDOUT: 8: inst780000AF +// CHECK:STDOUT: inst_block7800002D: +// CHECK:STDOUT: 0: inst7800008A +// CHECK:STDOUT: 1: inst780000B1 +// CHECK:STDOUT: 2: inst780000B2 +// CHECK:STDOUT: inst_block7800002E: +// CHECK:STDOUT: 0: inst7800008A +// CHECK:STDOUT: 1: inst7800008B +// CHECK:STDOUT: 2: inst780000B6 +// CHECK:STDOUT: 3: inst780000BB +// CHECK:STDOUT: 4: inst780000BD +// CHECK:STDOUT: 5: inst780000BA +// CHECK:STDOUT: 6: inst780000B7 +// CHECK:STDOUT: 7: inst780000B9 +// CHECK:STDOUT: inst_block7800002F: +// CHECK:STDOUT: 0: inst780000A7 +// CHECK:STDOUT: inst_block78000030: +// CHECK:STDOUT: 0: inst780000A7 +// CHECK:STDOUT: inst_block78000031: +// CHECK:STDOUT: 0: inst780000C0 +// CHECK:STDOUT: 1: inst780000C1 +// CHECK:STDOUT: 2: inst780000C2 +// CHECK:STDOUT: 3: inst780000C3 +// CHECK:STDOUT: 4: inst780000C4 +// CHECK:STDOUT: 5: inst780000C5 +// CHECK:STDOUT: 6: inst780000C6 +// CHECK:STDOUT: inst_block78000032: +// CHECK:STDOUT: 0: inst7800008A +// CHECK:STDOUT: 1: inst7800008B +// CHECK:STDOUT: 2: inst7800008C +// CHECK:STDOUT: 3: inst78000093 +// CHECK:STDOUT: 4: inst78000099 +// CHECK:STDOUT: 5: inst7800009B +// CHECK:STDOUT: 6: inst7800009D +// CHECK:STDOUT: 7: inst78000094 +// CHECK:STDOUT: 8: inst78000098 +// CHECK:STDOUT: inst_block78000033: +// CHECK:STDOUT: 0: inst780000C9 +// CHECK:STDOUT: inst_block78000034: +// CHECK:STDOUT: 0: inst780000CC +// CHECK:STDOUT: inst_block78000035: +// CHECK:STDOUT: 0: inst780000CE +// CHECK:STDOUT: inst_block78000036: +// CHECK:STDOUT: 0: inst780000CD +// CHECK:STDOUT: 1: inst780000CE +// CHECK:STDOUT: 2: inst780000CF +// CHECK:STDOUT: 3: inst780000D0 +// CHECK:STDOUT: 4: inst780000D1 +// CHECK:STDOUT: inst_block78000037: +// CHECK:STDOUT: 0: inst780000CE +// CHECK:STDOUT: inst_block78000038: +// CHECK:STDOUT: 0: inst780000D2 +// CHECK:STDOUT: 1: inst780000D3 // CHECK:STDOUT: inst_block78000039: -// CHECK:STDOUT: 0: inst780000B6 +// CHECK:STDOUT: 0: inst780000E6 // CHECK:STDOUT: inst_block7800003A: // CHECK:STDOUT: 0: inst78000018 -// CHECK:STDOUT: 1: inst7800001D -// CHECK:STDOUT: 2: inst780000B8 -// CHECK:STDOUT: inst_block7800003B: -// CHECK:STDOUT: 0: inst780000B9 -// CHECK:STDOUT: inst_block7800003C: -// CHECK:STDOUT: 0: inst780000BC -// CHECK:STDOUT: inst_block7800003D: -// CHECK:STDOUT: 0: inst780000BD -// CHECK:STDOUT: inst_block7800003E: -// CHECK:STDOUT: 0: inst780000BD -// CHECK:STDOUT: 1: inst780000BE -// CHECK:STDOUT: 2: inst780000BF -// CHECK:STDOUT: inst_block7800003F: -// CHECK:STDOUT: 0: inst780000C5 -// CHECK:STDOUT: 1: inst780000C3 -// CHECK:STDOUT: inst_block78000040: -// CHECK:STDOUT: 0: inst780000C6 -// CHECK:STDOUT: inst_block78000041: -// CHECK:STDOUT: 0: inst780000CA -// CHECK:STDOUT: inst_block78000042: -// CHECK:STDOUT: 0: inst780000CB -// CHECK:STDOUT: 1: inst780000CC -// CHECK:STDOUT: 2: inst780000CD -// CHECK:STDOUT: 3: inst780000CE -// CHECK:STDOUT: inst_block78000043: -// CHECK:STDOUT: 0: inst78000018 -// CHECK:STDOUT: 1: inst7800001D +// CHECK:STDOUT: 1: inst7800001B // CHECK:STDOUT: 2: inst7800001F -// CHECK:STDOUT: 3: inst780000C7 +// CHECK:STDOUT: 3: inst780000E8 +// CHECK:STDOUT: inst_block7800003B: +// CHECK:STDOUT: 0: inst780000E9 +// CHECK:STDOUT: inst_block7800003C: +// CHECK:STDOUT: 0: inst780000EC +// CHECK:STDOUT: inst_block7800003D: +// CHECK:STDOUT: 0: inst780000EE +// CHECK:STDOUT: inst_block7800003E: +// CHECK:STDOUT: 0: inst780000ED +// CHECK:STDOUT: 1: inst780000EE +// CHECK:STDOUT: 2: inst780000EF +// CHECK:STDOUT: 3: inst780000F0 +// CHECK:STDOUT: inst_block7800003F: +// CHECK:STDOUT: 0: inst780000FD +// CHECK:STDOUT: 1: inst780000FE +// CHECK:STDOUT: inst_block78000040: +// CHECK:STDOUT: 0: inst78000100 +// CHECK:STDOUT: inst_block78000041: +// CHECK:STDOUT: 0: inst78000104 +// CHECK:STDOUT: inst_block78000042: +// CHECK:STDOUT: 0: inst78000105 +// CHECK:STDOUT: 1: inst78000106 +// CHECK:STDOUT: 2: inst78000107 +// CHECK:STDOUT: 3: inst78000108 +// CHECK:STDOUT: 4: inst78000109 +// CHECK:STDOUT: 5: inst7800010A +// CHECK:STDOUT: 6: inst7800010B +// CHECK:STDOUT: 7: inst7800010C +// CHECK:STDOUT: inst_block78000043: +// CHECK:STDOUT: 0: inst7800001B +// CHECK:STDOUT: 1: inst7800001F +// CHECK:STDOUT: 2: inst78000021 +// CHECK:STDOUT: 3: inst780000F7 +// CHECK:STDOUT: 4: inst780000F9 +// CHECK:STDOUT: 5: inst780000FB +// CHECK:STDOUT: 6: inst780000F4 +// CHECK:STDOUT: 7: inst780000F6 // CHECK:STDOUT: inst_block78000044: -// CHECK:STDOUT: 0: inst780000BD +// CHECK:STDOUT: 0: inst780000EE // CHECK:STDOUT: inst_block78000045: -// CHECK:STDOUT: 0: inst780000CF -// CHECK:STDOUT: 1: inst780000D0 -// CHECK:STDOUT: 2: inst780000D1 +// CHECK:STDOUT: 0: inst7800010F +// CHECK:STDOUT: 1: inst78000110 +// CHECK:STDOUT: 2: inst78000111 // CHECK:STDOUT: inst_block78000046: -// CHECK:STDOUT: 0: inst78000072 -// CHECK:STDOUT: 1: inst780000DD +// CHECK:STDOUT: 0: inst7800008B +// CHECK:STDOUT: 1: inst7800011D // CHECK:STDOUT: inst_block78000047: -// CHECK:STDOUT: 0: inst780000DF +// CHECK:STDOUT: 0: inst7800011F // CHECK:STDOUT: inst_block78000048: -// CHECK:STDOUT: 0: inst78000071 -// CHECK:STDOUT: 1: inst780000DC +// CHECK:STDOUT: 0: inst7800008A +// CHECK:STDOUT: 1: inst7800011C // CHECK:STDOUT: inst_block78000049: -// CHECK:STDOUT: 0: inst78000050 -// CHECK:STDOUT: 1: inst78000050 +// CHECK:STDOUT: 0: inst7800005A +// CHECK:STDOUT: 1: inst7800005A // CHECK:STDOUT: inst_block7800004A: -// CHECK:STDOUT: 0: inst78000071 -// CHECK:STDOUT: 1: inst780000DC -// CHECK:STDOUT: 2: inst780000E6 -// CHECK:STDOUT: 3: inst78000072 -// CHECK:STDOUT: 4: inst780000DD -// CHECK:STDOUT: 5: inst780000DE -// CHECK:STDOUT: 6: inst780000E1 +// CHECK:STDOUT: 0: inst78000096 +// CHECK:STDOUT: 1: inst7800008A +// CHECK:STDOUT: 2: inst78000129 +// CHECK:STDOUT: 3: inst7800011C +// CHECK:STDOUT: 4: inst78000128 +// CHECK:STDOUT: 5: inst7800008B +// CHECK:STDOUT: 6: inst7800011D +// CHECK:STDOUT: 7: inst7800011E +// CHECK:STDOUT: 8: inst78000121 // CHECK:STDOUT: inst_block7800004B: -// CHECK:STDOUT: 0: inst780000E3 -// CHECK:STDOUT: 1: inst780000E4 +// CHECK:STDOUT: 0: inst78000123 +// CHECK:STDOUT: 1: inst78000124 // CHECK:STDOUT: inst_block7800004C: -// CHECK:STDOUT: 0: inst780000EA -// CHECK:STDOUT: 1: inst780000E8 +// CHECK:STDOUT: 0: inst78000132 +// CHECK:STDOUT: 1: inst78000133 // CHECK:STDOUT: inst_block7800004D: -// CHECK:STDOUT: 0: inst780000EB +// CHECK:STDOUT: 0: inst78000135 // CHECK:STDOUT: inst_block7800004E: -// CHECK:STDOUT: 0: inst780000EF -// CHECK:STDOUT: 1: inst780000F0 +// CHECK:STDOUT: 0: inst78000139 +// CHECK:STDOUT: 1: inst7800013A // CHECK:STDOUT: inst_block7800004F: -// CHECK:STDOUT: 0: inst780000F2 -// CHECK:STDOUT: 1: inst780000F4 +// CHECK:STDOUT: 0: inst7800013C +// CHECK:STDOUT: 1: inst7800013E // CHECK:STDOUT: inst_block78000050: -// CHECK:STDOUT: 0: inst780000F1 -// CHECK:STDOUT: 1: inst780000F2 -// CHECK:STDOUT: 2: inst780000F3 -// CHECK:STDOUT: 3: inst780000F4 -// CHECK:STDOUT: 4: inst780000F5 -// CHECK:STDOUT: 5: inst780000F6 -// CHECK:STDOUT: 6: inst780000F7 +// CHECK:STDOUT: 0: inst7800013B +// CHECK:STDOUT: 1: inst7800013C +// CHECK:STDOUT: 2: inst7800013D +// CHECK:STDOUT: 3: inst7800013E +// CHECK:STDOUT: 4: inst7800013F +// CHECK:STDOUT: 5: inst78000140 +// CHECK:STDOUT: 6: inst78000141 +// CHECK:STDOUT: 7: inst78000142 +// CHECK:STDOUT: 8: inst78000143 +// CHECK:STDOUT: 9: inst78000144 +// CHECK:STDOUT: 10: inst78000145 // CHECK:STDOUT: inst_block78000051: -// CHECK:STDOUT: 0: inst780000DC +// CHECK:STDOUT: 0: inst7800011C // CHECK:STDOUT: inst_block78000052: -// CHECK:STDOUT: 0: inst780000DC -// CHECK:STDOUT: 1: inst780000F9 -// CHECK:STDOUT: 2: inst780000FA +// CHECK:STDOUT: 0: inst7800011C +// CHECK:STDOUT: 1: inst78000147 +// CHECK:STDOUT: 2: inst78000148 // CHECK:STDOUT: inst_block78000053: -// CHECK:STDOUT: 0: inst780000DC -// CHECK:STDOUT: 1: inst780000DD -// CHECK:STDOUT: 2: inst780000FF -// CHECK:STDOUT: 3: inst780000FE -// CHECK:STDOUT: inst_block78000054: -// CHECK:STDOUT: 0: inst780000F1 -// CHECK:STDOUT: inst_block78000055: -// CHECK:STDOUT: 0: inst780000F1 -// CHECK:STDOUT: inst_block78000056: -// CHECK:STDOUT: 0: inst780000F3 -// CHECK:STDOUT: inst_block78000057: -// CHECK:STDOUT: 0: inst780000F3 -// CHECK:STDOUT: inst_block78000058: -// CHECK:STDOUT: 0: inst78000102 -// CHECK:STDOUT: 1: inst78000103 -// CHECK:STDOUT: 2: inst78000104 -// CHECK:STDOUT: 3: inst78000105 -// CHECK:STDOUT: 4: inst78000106 -// CHECK:STDOUT: 5: inst78000107 -// CHECK:STDOUT: 6: inst78000108 -// CHECK:STDOUT: 7: inst78000109 -// CHECK:STDOUT: 8: inst7800010A -// CHECK:STDOUT: 9: inst7800010B -// CHECK:STDOUT: 10: inst7800010C -// CHECK:STDOUT: 11: inst7800010D -// CHECK:STDOUT: 12: inst7800010E -// CHECK:STDOUT: inst_block78000059: -// CHECK:STDOUT: 0: inst78000071 -// CHECK:STDOUT: 1: inst78000072 -// CHECK:STDOUT: 2: inst780000DC -// CHECK:STDOUT: 3: inst780000DD -// CHECK:STDOUT: 4: inst780000DE -// CHECK:STDOUT: 5: inst780000E7 -// CHECK:STDOUT: 6: inst780000EC -// CHECK:STDOUT: inst_block7800005A: -// CHECK:STDOUT: 0: inst78000110 -// CHECK:STDOUT: 1: inst7800010F -// CHECK:STDOUT: inst_block7800005B: -// CHECK:STDOUT: 0: inst78000113 -// CHECK:STDOUT: 1: inst78000114 -// CHECK:STDOUT: inst_block7800005C: -// CHECK:STDOUT: 0: inst78000115 -// CHECK:STDOUT: 1: inst78000116 -// CHECK:STDOUT: inst_block7800005D: -// CHECK:STDOUT: 0: inst78000118 -// CHECK:STDOUT: 1: inst78000119 -// CHECK:STDOUT: inst_block7800005E: -// CHECK:STDOUT: 0: inst78000115 -// CHECK:STDOUT: 1: inst78000116 -// CHECK:STDOUT: inst_block7800005F: -// CHECK:STDOUT: 0: inst78000115 -// CHECK:STDOUT: 1: inst78000116 -// CHECK:STDOUT: 2: inst78000117 -// CHECK:STDOUT: 3: inst78000118 -// CHECK:STDOUT: 4: inst78000119 -// CHECK:STDOUT: 5: inst7800011A -// CHECK:STDOUT: 6: inst7800011B -// CHECK:STDOUT: inst_block78000060: -// CHECK:STDOUT: 0: inst78000115 -// CHECK:STDOUT: 1: inst78000116 -// CHECK:STDOUT: inst_block78000061: // CHECK:STDOUT: 0: inst7800011C // CHECK:STDOUT: 1: inst7800011D -// CHECK:STDOUT: inst_block78000062: -// CHECK:STDOUT: 0: inst78000072 -// CHECK:STDOUT: 1: inst780000DD -// CHECK:STDOUT: 2: inst78000121 -// CHECK:STDOUT: inst_block78000063: -// CHECK:STDOUT: 0: inst78000123 -// CHECK:STDOUT: inst_block78000064: -// CHECK:STDOUT: 0: inst78000071 -// CHECK:STDOUT: 1: inst780000DC -// CHECK:STDOUT: 2: inst78000120 -// CHECK:STDOUT: inst_block78000065: -// CHECK:STDOUT: 0: inst78000050 -// CHECK:STDOUT: 1: inst78000050 -// CHECK:STDOUT: 2: inst78000050 -// CHECK:STDOUT: inst_block78000066: -// CHECK:STDOUT: 0: inst78000071 -// CHECK:STDOUT: 1: inst780000DC -// CHECK:STDOUT: 2: inst78000120 -// CHECK:STDOUT: 3: inst7800012A -// CHECK:STDOUT: 4: inst78000072 -// CHECK:STDOUT: 5: inst780000DD -// CHECK:STDOUT: 6: inst78000121 -// CHECK:STDOUT: 7: inst78000122 -// CHECK:STDOUT: 8: inst78000125 -// CHECK:STDOUT: inst_block78000067: -// CHECK:STDOUT: 0: inst78000127 -// CHECK:STDOUT: 1: inst78000128 -// CHECK:STDOUT: inst_block78000068: -// CHECK:STDOUT: 0: inst7800012E -// CHECK:STDOUT: 1: inst7800012C -// CHECK:STDOUT: inst_block78000069: -// CHECK:STDOUT: 0: inst7800012F -// CHECK:STDOUT: inst_block7800006A: -// CHECK:STDOUT: 0: inst78000133 -// CHECK:STDOUT: 1: inst78000134 -// CHECK:STDOUT: 2: inst78000135 -// CHECK:STDOUT: inst_block7800006B: -// CHECK:STDOUT: 0: inst78000137 -// CHECK:STDOUT: 1: inst78000139 -// CHECK:STDOUT: 2: inst7800013B -// CHECK:STDOUT: inst_block7800006C: -// CHECK:STDOUT: 0: inst78000136 -// CHECK:STDOUT: 1: inst78000137 -// CHECK:STDOUT: 2: inst78000138 -// CHECK:STDOUT: 3: inst78000139 -// CHECK:STDOUT: 4: inst7800013A -// CHECK:STDOUT: 5: inst7800013B -// CHECK:STDOUT: 6: inst7800013C -// CHECK:STDOUT: 7: inst7800013D -// CHECK:STDOUT: 8: inst7800013E -// CHECK:STDOUT: inst_block7800006D: -// CHECK:STDOUT: 0: inst78000120 -// CHECK:STDOUT: inst_block7800006E: -// CHECK:STDOUT: 0: inst78000120 -// CHECK:STDOUT: 1: inst78000140 -// CHECK:STDOUT: 2: inst78000141 -// CHECK:STDOUT: inst_block7800006F: -// CHECK:STDOUT: 0: inst78000120 -// CHECK:STDOUT: 1: inst78000121 -// CHECK:STDOUT: 2: inst78000146 -// CHECK:STDOUT: 3: inst78000145 -// CHECK:STDOUT: inst_block78000070: -// CHECK:STDOUT: 0: inst78000136 -// CHECK:STDOUT: inst_block78000071: -// CHECK:STDOUT: 0: inst78000136 -// CHECK:STDOUT: inst_block78000072: -// CHECK:STDOUT: 0: inst78000138 -// CHECK:STDOUT: inst_block78000073: -// CHECK:STDOUT: 0: inst78000138 -// CHECK:STDOUT: inst_block78000074: -// CHECK:STDOUT: 0: inst7800013A -// CHECK:STDOUT: inst_block78000075: -// CHECK:STDOUT: 0: inst7800013A -// CHECK:STDOUT: inst_block78000076: -// CHECK:STDOUT: 0: inst78000149 -// CHECK:STDOUT: 1: inst7800014A -// CHECK:STDOUT: 2: inst7800014B -// CHECK:STDOUT: 3: inst7800014C -// CHECK:STDOUT: 4: inst7800014D -// CHECK:STDOUT: 5: inst7800014E -// CHECK:STDOUT: 6: inst7800014F -// CHECK:STDOUT: 7: inst78000150 -// CHECK:STDOUT: 8: inst78000151 -// CHECK:STDOUT: 9: inst78000152 -// CHECK:STDOUT: 10: inst78000153 -// CHECK:STDOUT: 11: inst78000154 -// CHECK:STDOUT: 12: inst78000155 -// CHECK:STDOUT: 13: inst78000156 -// CHECK:STDOUT: 14: inst78000157 -// CHECK:STDOUT: 15: inst78000158 -// CHECK:STDOUT: 16: inst78000159 -// CHECK:STDOUT: 17: inst7800015A -// CHECK:STDOUT: 18: inst7800015B -// CHECK:STDOUT: inst_block78000077: -// CHECK:STDOUT: 0: inst78000071 -// CHECK:STDOUT: 1: inst78000072 -// CHECK:STDOUT: 2: inst780000DC -// CHECK:STDOUT: 3: inst780000DD -// CHECK:STDOUT: 4: inst78000120 -// CHECK:STDOUT: 5: inst78000121 -// CHECK:STDOUT: 6: inst78000122 -// CHECK:STDOUT: 7: inst7800012B +// CHECK:STDOUT: 2: inst7800014C +// CHECK:STDOUT: 3: inst78000151 +// CHECK:STDOUT: 4: inst78000153 +// CHECK:STDOUT: 5: inst78000150 +// CHECK:STDOUT: 6: inst7800014D +// CHECK:STDOUT: 7: inst7800014F +// CHECK:STDOUT: inst_block78000054: +// CHECK:STDOUT: 0: inst7800013B +// CHECK:STDOUT: inst_block78000055: +// CHECK:STDOUT: 0: inst7800013B +// CHECK:STDOUT: inst_block78000056: +// CHECK:STDOUT: 0: inst7800013D +// CHECK:STDOUT: inst_block78000057: +// CHECK:STDOUT: 0: inst7800013D +// CHECK:STDOUT: inst_block78000058: +// CHECK:STDOUT: 0: inst78000156 +// CHECK:STDOUT: 1: inst78000157 +// CHECK:STDOUT: 2: inst78000158 +// CHECK:STDOUT: 3: inst78000159 +// CHECK:STDOUT: 4: inst7800015A +// CHECK:STDOUT: 5: inst7800015B +// CHECK:STDOUT: 6: inst7800015C +// CHECK:STDOUT: 7: inst7800015D +// CHECK:STDOUT: 8: inst7800015E +// CHECK:STDOUT: 9: inst7800015F +// CHECK:STDOUT: 10: inst78000160 +// CHECK:STDOUT: 11: inst78000161 +// CHECK:STDOUT: 12: inst78000162 +// CHECK:STDOUT: inst_block78000059: +// CHECK:STDOUT: 0: inst7800008A +// CHECK:STDOUT: 1: inst7800008B +// CHECK:STDOUT: 2: inst7800011C +// CHECK:STDOUT: 3: inst7800011D +// CHECK:STDOUT: 4: inst7800011E +// CHECK:STDOUT: 5: inst78000125 +// CHECK:STDOUT: 6: inst7800012C +// CHECK:STDOUT: 7: inst7800012E // CHECK:STDOUT: 8: inst78000130 -// CHECK:STDOUT: inst_block78000078: -// CHECK:STDOUT: 0: inst7800015E -// CHECK:STDOUT: 1: inst7800015D -// CHECK:STDOUT: 2: inst7800015C -// CHECK:STDOUT: inst_block78000079: -// CHECK:STDOUT: 0: inst78000161 -// CHECK:STDOUT: 1: inst78000162 -// CHECK:STDOUT: 2: inst78000163 -// CHECK:STDOUT: inst_block7800007A: -// CHECK:STDOUT: 0: inst78000164 -// CHECK:STDOUT: 1: inst78000165 -// CHECK:STDOUT: 2: inst78000166 -// CHECK:STDOUT: inst_block7800007B: -// CHECK:STDOUT: 0: inst78000168 -// CHECK:STDOUT: 1: inst78000169 -// CHECK:STDOUT: 2: inst7800016A -// CHECK:STDOUT: inst_block7800007C: -// CHECK:STDOUT: 0: inst78000164 -// CHECK:STDOUT: 1: inst78000165 -// CHECK:STDOUT: 2: inst78000166 -// CHECK:STDOUT: inst_block7800007D: -// CHECK:STDOUT: 0: inst78000164 -// CHECK:STDOUT: 1: inst78000165 -// CHECK:STDOUT: 2: inst78000166 -// CHECK:STDOUT: 3: inst78000167 -// CHECK:STDOUT: 4: inst78000168 -// CHECK:STDOUT: 5: inst78000169 -// CHECK:STDOUT: 6: inst7800016A -// CHECK:STDOUT: 7: inst7800016B -// CHECK:STDOUT: 8: inst7800016C -// CHECK:STDOUT: inst_block7800007E: -// CHECK:STDOUT: 0: inst78000164 -// CHECK:STDOUT: 1: inst78000165 -// CHECK:STDOUT: 2: inst78000166 -// CHECK:STDOUT: inst_block7800007F: -// CHECK:STDOUT: 0: inst7800016D +// CHECK:STDOUT: 9: inst78000126 +// CHECK:STDOUT: 10: inst7800012B +// CHECK:STDOUT: inst_block7800005A: +// CHECK:STDOUT: 0: inst78000165 +// CHECK:STDOUT: 1: inst78000166 +// CHECK:STDOUT: inst_block7800005B: +// CHECK:STDOUT: 0: inst78000169 +// CHECK:STDOUT: 1: inst7800016A +// CHECK:STDOUT: inst_block7800005C: +// CHECK:STDOUT: 0: inst7800016C // CHECK:STDOUT: 1: inst7800016E +// CHECK:STDOUT: inst_block7800005D: +// CHECK:STDOUT: 0: inst78000170 +// CHECK:STDOUT: 1: inst78000171 +// CHECK:STDOUT: inst_block7800005E: +// CHECK:STDOUT: 0: inst7800016C +// CHECK:STDOUT: 1: inst7800016E +// CHECK:STDOUT: inst_block7800005F: +// CHECK:STDOUT: 0: inst7800016B +// CHECK:STDOUT: 1: inst7800016C +// CHECK:STDOUT: 2: inst7800016D +// CHECK:STDOUT: 3: inst7800016E +// CHECK:STDOUT: 4: inst7800016F +// CHECK:STDOUT: 5: inst78000170 +// CHECK:STDOUT: 6: inst78000171 +// CHECK:STDOUT: 7: inst78000172 +// CHECK:STDOUT: 8: inst78000173 +// CHECK:STDOUT: inst_block78000060: +// CHECK:STDOUT: 0: inst7800016C +// CHECK:STDOUT: 1: inst7800016E +// CHECK:STDOUT: inst_block78000061: +// CHECK:STDOUT: 0: inst78000174 +// CHECK:STDOUT: 1: inst78000175 +// CHECK:STDOUT: inst_block78000062: +// CHECK:STDOUT: 0: inst7800008B +// CHECK:STDOUT: 1: inst7800011D +// CHECK:STDOUT: 2: inst78000179 +// CHECK:STDOUT: inst_block78000063: +// CHECK:STDOUT: 0: inst7800017B +// CHECK:STDOUT: inst_block78000064: +// CHECK:STDOUT: 0: inst7800008A +// CHECK:STDOUT: 1: inst7800011C +// CHECK:STDOUT: 2: inst78000178 +// CHECK:STDOUT: inst_block78000065: +// CHECK:STDOUT: 0: inst7800005A +// CHECK:STDOUT: 1: inst7800005A +// CHECK:STDOUT: 2: inst7800005A +// CHECK:STDOUT: inst_block78000066: +// CHECK:STDOUT: 0: inst78000096 +// CHECK:STDOUT: 1: inst7800008A +// CHECK:STDOUT: 2: inst78000129 +// CHECK:STDOUT: 3: inst7800011C +// CHECK:STDOUT: 4: inst78000185 +// CHECK:STDOUT: 5: inst78000178 +// CHECK:STDOUT: 6: inst78000184 +// CHECK:STDOUT: 7: inst7800008B +// CHECK:STDOUT: 8: inst7800011D +// CHECK:STDOUT: 9: inst78000179 +// CHECK:STDOUT: 10: inst7800017A +// CHECK:STDOUT: 11: inst7800017D +// CHECK:STDOUT: inst_block78000067: +// CHECK:STDOUT: 0: inst7800017F +// CHECK:STDOUT: 1: inst78000180 +// CHECK:STDOUT: inst_block78000068: +// CHECK:STDOUT: 0: inst7800018E +// CHECK:STDOUT: 1: inst7800018F +// CHECK:STDOUT: inst_block78000069: +// CHECK:STDOUT: 0: inst78000191 +// CHECK:STDOUT: inst_block7800006A: +// CHECK:STDOUT: 0: inst78000195 +// CHECK:STDOUT: 1: inst78000196 +// CHECK:STDOUT: 2: inst78000197 +// CHECK:STDOUT: inst_block7800006B: +// CHECK:STDOUT: 0: inst78000199 +// CHECK:STDOUT: 1: inst7800019B +// CHECK:STDOUT: 2: inst7800019D +// CHECK:STDOUT: inst_block7800006C: +// CHECK:STDOUT: 0: inst78000198 +// CHECK:STDOUT: 1: inst78000199 +// CHECK:STDOUT: 2: inst7800019A +// CHECK:STDOUT: 3: inst7800019B +// CHECK:STDOUT: 4: inst7800019C +// CHECK:STDOUT: 5: inst7800019D +// CHECK:STDOUT: 6: inst7800019E +// CHECK:STDOUT: 7: inst7800019F +// CHECK:STDOUT: 8: inst780001A0 +// CHECK:STDOUT: 9: inst780001A1 +// CHECK:STDOUT: 10: inst780001A2 +// CHECK:STDOUT: 11: inst780001A3 +// CHECK:STDOUT: 12: inst780001A4 +// CHECK:STDOUT: inst_block7800006D: +// CHECK:STDOUT: 0: inst78000178 +// CHECK:STDOUT: inst_block7800006E: +// CHECK:STDOUT: 0: inst78000178 +// CHECK:STDOUT: 1: inst780001A6 +// CHECK:STDOUT: 2: inst780001A7 +// CHECK:STDOUT: inst_block7800006F: +// CHECK:STDOUT: 0: inst78000178 +// CHECK:STDOUT: 1: inst78000179 +// CHECK:STDOUT: 2: inst780001AB +// CHECK:STDOUT: 3: inst780001B0 +// CHECK:STDOUT: 4: inst780001B2 +// CHECK:STDOUT: 5: inst780001AF +// CHECK:STDOUT: 6: inst780001AC +// CHECK:STDOUT: 7: inst780001AE +// CHECK:STDOUT: inst_block78000070: +// CHECK:STDOUT: 0: inst78000198 +// CHECK:STDOUT: inst_block78000071: +// CHECK:STDOUT: 0: inst78000198 +// CHECK:STDOUT: inst_block78000072: +// CHECK:STDOUT: 0: inst7800019A +// CHECK:STDOUT: inst_block78000073: +// CHECK:STDOUT: 0: inst7800019A +// CHECK:STDOUT: inst_block78000074: +// CHECK:STDOUT: 0: inst7800019C +// CHECK:STDOUT: inst_block78000075: +// CHECK:STDOUT: 0: inst7800019C +// CHECK:STDOUT: inst_block78000076: +// CHECK:STDOUT: 0: inst780001B5 +// CHECK:STDOUT: 1: inst780001B6 +// CHECK:STDOUT: 2: inst780001B7 +// CHECK:STDOUT: 3: inst780001B8 +// CHECK:STDOUT: 4: inst780001B9 +// CHECK:STDOUT: 5: inst780001BA +// CHECK:STDOUT: 6: inst780001BB +// CHECK:STDOUT: 7: inst780001BC +// CHECK:STDOUT: 8: inst780001BD +// CHECK:STDOUT: 9: inst780001BE +// CHECK:STDOUT: 10: inst780001BF +// CHECK:STDOUT: 11: inst780001C0 +// CHECK:STDOUT: 12: inst780001C1 +// CHECK:STDOUT: 13: inst780001C2 +// CHECK:STDOUT: 14: inst780001C3 +// CHECK:STDOUT: 15: inst780001C4 +// CHECK:STDOUT: 16: inst780001C5 +// CHECK:STDOUT: 17: inst780001C6 +// CHECK:STDOUT: 18: inst780001C7 +// CHECK:STDOUT: inst_block78000077: +// CHECK:STDOUT: 0: inst7800008A +// CHECK:STDOUT: 1: inst7800008B +// CHECK:STDOUT: 2: inst7800011C +// CHECK:STDOUT: 3: inst7800011D +// CHECK:STDOUT: 4: inst78000178 +// CHECK:STDOUT: 5: inst78000179 +// CHECK:STDOUT: 6: inst7800017A +// CHECK:STDOUT: 7: inst78000181 +// CHECK:STDOUT: 8: inst78000188 +// CHECK:STDOUT: 9: inst7800018A +// CHECK:STDOUT: 10: inst7800018C +// CHECK:STDOUT: 11: inst78000182 +// CHECK:STDOUT: 12: inst78000187 +// CHECK:STDOUT: inst_block78000078: +// CHECK:STDOUT: 0: inst780001CA +// CHECK:STDOUT: 1: inst780001CB +// CHECK:STDOUT: 2: inst780001CC +// CHECK:STDOUT: inst_block78000079: +// CHECK:STDOUT: 0: inst780001CF +// CHECK:STDOUT: 1: inst780001D0 +// CHECK:STDOUT: 2: inst780001D1 +// CHECK:STDOUT: inst_block7800007A: +// CHECK:STDOUT: 0: inst780001D3 +// CHECK:STDOUT: 1: inst780001D5 +// CHECK:STDOUT: 2: inst780001D7 +// CHECK:STDOUT: inst_block7800007B: +// CHECK:STDOUT: 0: inst780001D9 +// CHECK:STDOUT: 1: inst780001DA +// CHECK:STDOUT: 2: inst780001DB +// CHECK:STDOUT: inst_block7800007C: +// CHECK:STDOUT: 0: inst780001D3 +// CHECK:STDOUT: 1: inst780001D5 +// CHECK:STDOUT: 2: inst780001D7 +// CHECK:STDOUT: inst_block7800007D: +// CHECK:STDOUT: 0: inst780001D2 +// CHECK:STDOUT: 1: inst780001D3 +// CHECK:STDOUT: 2: inst780001D4 +// CHECK:STDOUT: 3: inst780001D5 +// CHECK:STDOUT: 4: inst780001D6 +// CHECK:STDOUT: 5: inst780001D7 +// CHECK:STDOUT: 6: inst780001D8 +// CHECK:STDOUT: 7: inst780001D9 +// CHECK:STDOUT: 8: inst780001DA +// CHECK:STDOUT: 9: inst780001DB +// CHECK:STDOUT: 10: inst780001DC +// CHECK:STDOUT: 11: inst780001DD +// CHECK:STDOUT: inst_block7800007E: +// CHECK:STDOUT: 0: inst780001D3 +// CHECK:STDOUT: 1: inst780001D5 +// CHECK:STDOUT: 2: inst780001D7 +// CHECK:STDOUT: inst_block7800007F: +// CHECK:STDOUT: 0: inst780001DE +// CHECK:STDOUT: 1: inst780001DF // CHECK:STDOUT: inst_block78000080: -// CHECK:STDOUT: 0: inst780000C1 -// CHECK:STDOUT: 1: inst780000C2 -// CHECK:STDOUT: 2: inst78000042 +// CHECK:STDOUT: 0: inst780000F2 +// CHECK:STDOUT: 1: inst780000F3 +// CHECK:STDOUT: 2: inst7800004C // CHECK:STDOUT: inst_block78000081: -// CHECK:STDOUT: 0: inst78000019 +// CHECK:STDOUT: 0: inst7800001C // CHECK:STDOUT: inst_block78000082: -// CHECK:STDOUT: 0: inst7800016F +// CHECK:STDOUT: 0: inst780001E0 // CHECK:STDOUT: inst_block78000083: -// CHECK:STDOUT: 0: inst78000173 +// CHECK:STDOUT: 0: inst780001E4 // CHECK:STDOUT: inst_block78000084: -// CHECK:STDOUT: 0: inst78000173 -// CHECK:STDOUT: 1: inst78000174 -// CHECK:STDOUT: 2: inst78000175 +// CHECK:STDOUT: 0: inst780001E4 +// CHECK:STDOUT: 1: inst780001E5 +// CHECK:STDOUT: 2: inst780001E6 // CHECK:STDOUT: inst_block78000085: -// CHECK:STDOUT: 0: inst78000179 +// CHECK:STDOUT: 0: inst780001EA // CHECK:STDOUT: inst_block78000086: -// CHECK:STDOUT: 0: inst7800017A +// CHECK:STDOUT: 0: inst780001EB // CHECK:STDOUT: inst_block78000087: -// CHECK:STDOUT: 0: inst78000173 -// CHECK:STDOUT: 1: inst7800001D -// CHECK:STDOUT: 2: inst7800001F -// CHECK:STDOUT: 3: inst780000C7 +// CHECK:STDOUT: 0: inst780001E4 +// CHECK:STDOUT: 1: inst7800001F +// CHECK:STDOUT: 2: inst78000021 +// CHECK:STDOUT: 3: inst780000F7 +// CHECK:STDOUT: 4: inst780000F9 +// CHECK:STDOUT: 5: inst780000FB +// CHECK:STDOUT: 6: inst780000F4 +// CHECK:STDOUT: 7: inst780000F6 // CHECK:STDOUT: inst_block78000088: -// CHECK:STDOUT: 0: inst7800017A +// CHECK:STDOUT: 0: inst780001EB // CHECK:STDOUT: inst_block78000089: -// CHECK:STDOUT: 0: inst78000048 +// CHECK:STDOUT: 0: inst78000052 // CHECK:STDOUT: inst_block7800008A: -// CHECK:STDOUT: 0: inst78000188 -// CHECK:STDOUT: 1: inst7800018C +// CHECK:STDOUT: 0: inst780001FD +// CHECK:STDOUT: 1: inst78000201 // CHECK:STDOUT: inst_block7800008B: -// CHECK:STDOUT: 0: inst78000043 -// CHECK:STDOUT: 1: inst78000047 -// CHECK:STDOUT: 2: inst78000172 -// CHECK:STDOUT: 3: inst78000179 -// CHECK:STDOUT: 4: inst7800017A -// CHECK:STDOUT: 5: inst7800017B -// CHECK:STDOUT: 6: inst7800017C -// CHECK:STDOUT: 7: inst7800017D -// CHECK:STDOUT: 8: inst78000185 +// CHECK:STDOUT: 0: inst7800004D +// CHECK:STDOUT: 1: inst78000051 +// CHECK:STDOUT: 2: inst780001E3 +// CHECK:STDOUT: 3: inst780001EA +// CHECK:STDOUT: 4: inst780001EB +// CHECK:STDOUT: 5: inst780001EC +// CHECK:STDOUT: 6: inst780001ED +// CHECK:STDOUT: 7: inst780001EE +// CHECK:STDOUT: 8: inst780001FA // CHECK:STDOUT: inst_block7800008C: // CHECK:STDOUT: 0: instF // CHECK:STDOUT: 1: inst78000010 -// CHECK:STDOUT: 2: inst7800003E +// CHECK:STDOUT: 2: inst78000048 // CHECK:STDOUT: value_stores: // CHECK:STDOUT: shared_values: // CHECK:STDOUT: ints: {} diff --git a/toolchain/check/testdata/basics/raw_sem_ir/one_file_with_textual_ir.carbon b/toolchain/check/testdata/basics/raw_sem_ir/one_file_with_textual_ir.carbon index 60ecd55f6733..bd248794d214 100644 --- a/toolchain/check/testdata/basics/raw_sem_ir/one_file_with_textual_ir.carbon +++ b/toolchain/check/testdata/basics/raw_sem_ir/one_file_with_textual_ir.carbon @@ -30,11 +30,11 @@ fn Foo(n: ()) -> ((), ()) { // CHECK:STDOUT: clang_decls: {} // CHECK:STDOUT: clang_decl_signatures: {} // CHECK:STDOUT: name_scopes: -// CHECK:STDOUT: name_scope0: {inst: instF, parent_scope: name_scope, has_error: false, extended_scopes: [], names: {name0: inst5000002A}} +// CHECK:STDOUT: name_scope0: {inst: instF, parent_scope: name_scope, has_error: false, extended_scopes: [], names: {name0: inst5000002E}} // CHECK:STDOUT: entity_names: // CHECK:STDOUT: entity_name50000000: {name: name1, parent_scope: name_scope, index: -1, is_template: 0, is_unused: 0, form: inst} // CHECK:STDOUT: functions: -// CHECK:STDOUT: function50000000: {name: name0, parent_scope: name_scope0, call_param_patterns_id: inst_block5000000B, call_params_id: inst_block5000000C, return_type_inst_id: inst50000020, return_form_inst_id: inst50000021, return_pattern_id: inst50000025, body: [inst_block5000000F]} +// CHECK:STDOUT: function50000000: {name: name0, parent_scope: name_scope0, call_param_patterns_id: inst_block5000000B, call_params_id: inst_block5000000C, return_type_inst_id: inst50000022, return_form_inst_id: inst50000023, return_pattern_id: inst50000028, body: [inst_block5000000F]} // CHECK:STDOUT: classes: {} // CHECK:STDOUT: interfaces: {} // CHECK:STDOUT: associated_constants: {} @@ -75,17 +75,17 @@ fn Foo(n: ()) -> ((), ()) { // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 0 // CHECK:STDOUT: alignment: 1 -// CHECK:STDOUT: 'type(inst5000001D)': -// CHECK:STDOUT: value_repr: {kind: copy, type: type(inst5000001D)} +// CHECK:STDOUT: 'type(inst5000001F)': +// CHECK:STDOUT: value_repr: {kind: copy, type: type(inst5000001F)} // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 8 // CHECK:STDOUT: alignment: 8 -// CHECK:STDOUT: 'type(inst5000001A)': -// CHECK:STDOUT: value_repr: {kind: pointer, type: type(inst5000001D)} +// CHECK:STDOUT: 'type(inst5000001C)': +// CHECK:STDOUT: value_repr: {kind: pointer, type: type(inst5000001F)} // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 0 // CHECK:STDOUT: alignment: 1 -// CHECK:STDOUT: 'type(inst5000002B)': +// CHECK:STDOUT: 'type(inst5000002F)': // CHECK:STDOUT: value_repr: {kind: none, type: type(inst50000010)} // CHECK:STDOUT: object_layout: // CHECK:STDOUT: size: 0 @@ -99,43 +99,47 @@ fn Foo(n: ()) -> ((), ()) { // CHECK:STDOUT: inst50000013: {kind: Converted, arg0: inst50000011, arg1: inst50000010, type: type(TypeType)} // CHECK:STDOUT: inst50000014: {kind: PatternType, arg0: inst50000010, type: type(TypeType)} // CHECK:STDOUT: inst50000015: {kind: ValueParamPattern, arg0: name1, type: type(inst50000014)} -// CHECK:STDOUT: inst50000016: {kind: ValueBinding, arg0: entity_name50000000, arg1: inst50000026, type: type(inst50000010)} +// CHECK:STDOUT: inst50000016: {kind: ValueParamPattern, arg0: name1, type: type(inst50000014)} // CHECK:STDOUT: inst50000017: {kind: WrapperBindingPattern, arg0: entity_name50000000, arg1: inst50000015, type: type(inst50000014)} -// CHECK:STDOUT: inst50000018: {kind: TupleLiteral, arg0: inst_block_empty, type: type(inst50000010)} -// CHECK:STDOUT: inst50000019: {kind: TupleLiteral, arg0: inst_block_empty, type: type(inst50000010)} -// CHECK:STDOUT: inst5000001A: {kind: TupleType, arg0: inst_block50000008, type: type(TypeType)} -// CHECK:STDOUT: inst5000001B: {kind: TupleLiteral, arg0: inst_block50000007, type: type(inst5000001A)} -// CHECK:STDOUT: inst5000001C: {kind: TupleValue, arg0: inst_block50000009, type: type(inst5000001A)} -// CHECK:STDOUT: inst5000001D: {kind: PointerType, arg0: inst5000001A, type: type(TypeType)} -// CHECK:STDOUT: inst5000001E: {kind: Converted, arg0: inst50000012, arg1: inst50000010, type: type(TypeType)} -// CHECK:STDOUT: inst5000001F: {kind: Converted, arg0: inst50000012, arg1: inst50000010, type: type(TypeType)} -// CHECK:STDOUT: inst50000020: {kind: Converted, arg0: inst5000001B, arg1: inst5000001A, type: type(TypeType)} -// CHECK:STDOUT: inst50000021: {kind: InitForm, arg0: inst50000020, type: type(inst(FormType))} -// CHECK:STDOUT: inst50000022: {kind: InitForm, arg0: inst5000001A, type: type(inst(FormType))} -// CHECK:STDOUT: inst50000023: {kind: PatternType, arg0: inst5000001A, type: type(TypeType)} -// CHECK:STDOUT: inst50000024: {kind: OutParamPattern, arg0: name(ReturnSlot), type: type(inst50000023)} -// CHECK:STDOUT: inst50000025: {kind: ReturnSlotPattern, arg0: inst50000024, arg1: inst50000020, type: type(inst50000023)} -// CHECK:STDOUT: inst50000026: {kind: ValueParam, arg0: call_param0, arg1: name1, type: type(inst50000010)} -// CHECK:STDOUT: inst50000027: {kind: SpliceBlock, arg0: inst_block50000005, arg1: inst50000013, type: type(TypeType)} -// CHECK:STDOUT: inst50000028: {kind: OutParam, arg0: call_param1, arg1: name(ReturnSlot), type: type(inst5000001A)} -// CHECK:STDOUT: inst50000029: {kind: ReturnSlot, arg0: inst5000001A, arg1: inst50000028, type: type(inst5000001A)} -// CHECK:STDOUT: inst5000002A: {kind: FunctionDecl, arg0: function50000000, arg1: inst_block5000000E, type: type(inst5000002B)} -// CHECK:STDOUT: inst5000002B: {kind: FunctionType, arg0: function50000000, arg1: specific, type: type(TypeType)} -// CHECK:STDOUT: inst5000002C: {kind: StructValue, arg0: inst_block_empty, type: type(inst5000002B)} -// CHECK:STDOUT: inst5000002D: {kind: NameRef, arg0: name1, arg1: inst50000016, type: type(inst50000010)} -// CHECK:STDOUT: inst5000002E: {kind: TupleLiteral, arg0: inst_block_empty, type: type(inst50000010)} -// CHECK:STDOUT: inst5000002F: {kind: TupleLiteral, arg0: inst_block50000010, type: type(inst5000001A)} -// CHECK:STDOUT: inst50000030: {kind: TupleAccess, arg0: inst50000028, arg1: element0, type: type(inst50000010)} -// CHECK:STDOUT: inst50000031: {kind: TupleInit, arg0: inst_block50000011, arg1: inst50000030, type: type(inst50000010)} -// CHECK:STDOUT: inst50000032: {kind: Converted, arg0: inst5000002D, arg1: inst50000031, type: type(inst50000010)} -// CHECK:STDOUT: inst50000033: {kind: InPlaceInit, arg0: inst50000032, arg1: inst50000030, type: type(inst50000010)} -// CHECK:STDOUT: inst50000034: {kind: TupleAccess, arg0: inst50000028, arg1: element1, type: type(inst50000010)} -// CHECK:STDOUT: inst50000035: {kind: TupleInit, arg0: inst_block_empty, arg1: inst50000034, type: type(inst50000010)} -// CHECK:STDOUT: inst50000036: {kind: Converted, arg0: inst5000002E, arg1: inst50000035, type: type(inst50000010)} +// CHECK:STDOUT: inst50000018: {kind: WrapperBindingPattern, arg0: entity_name50000000, arg1: inst50000016, type: type(inst50000014)} +// CHECK:STDOUT: inst50000019: {kind: ValueBinding, arg0: entity_name50000000, arg1: inst5000002A, type: type(inst50000010)} +// CHECK:STDOUT: inst5000001A: {kind: TupleLiteral, arg0: inst_block_empty, type: type(inst50000010)} +// CHECK:STDOUT: inst5000001B: {kind: TupleLiteral, arg0: inst_block_empty, type: type(inst50000010)} +// CHECK:STDOUT: inst5000001C: {kind: TupleType, arg0: inst_block50000008, type: type(TypeType)} +// CHECK:STDOUT: inst5000001D: {kind: TupleLiteral, arg0: inst_block50000007, type: type(inst5000001C)} +// CHECK:STDOUT: inst5000001E: {kind: TupleValue, arg0: inst_block50000009, type: type(inst5000001C)} +// CHECK:STDOUT: inst5000001F: {kind: PointerType, arg0: inst5000001C, type: type(TypeType)} +// CHECK:STDOUT: inst50000020: {kind: Converted, arg0: inst50000012, arg1: inst50000010, type: type(TypeType)} +// CHECK:STDOUT: inst50000021: {kind: Converted, arg0: inst50000012, arg1: inst50000010, type: type(TypeType)} +// CHECK:STDOUT: inst50000022: {kind: Converted, arg0: inst5000001D, arg1: inst5000001C, type: type(TypeType)} +// CHECK:STDOUT: inst50000023: {kind: InitForm, arg0: inst50000022, type: type(inst(FormType))} +// CHECK:STDOUT: inst50000024: {kind: InitForm, arg0: inst5000001C, type: type(inst(FormType))} +// CHECK:STDOUT: inst50000025: {kind: PatternType, arg0: inst5000001C, type: type(TypeType)} +// CHECK:STDOUT: inst50000026: {kind: OutParamPattern, arg0: name(ReturnSlot), type: type(inst50000025)} +// CHECK:STDOUT: inst50000027: {kind: OutParamPattern, arg0: name(ReturnSlot), type: type(inst50000025)} +// CHECK:STDOUT: inst50000028: {kind: ReturnSlotPattern, arg0: inst50000026, arg1: inst50000022, type: type(inst50000025)} +// CHECK:STDOUT: inst50000029: {kind: ReturnSlotPattern, arg0: inst50000027, arg1: inst5000001C, type: type(inst50000025)} +// CHECK:STDOUT: inst5000002A: {kind: ValueParam, arg0: call_param0, arg1: name1, type: type(inst50000010)} +// CHECK:STDOUT: inst5000002B: {kind: SpliceBlock, arg0: inst_block50000005, arg1: inst50000013, type: type(TypeType)} +// CHECK:STDOUT: inst5000002C: {kind: OutParam, arg0: call_param1, arg1: name(ReturnSlot), type: type(inst5000001C)} +// CHECK:STDOUT: inst5000002D: {kind: ReturnSlot, arg0: inst5000001C, arg1: inst5000002C, type: type(inst5000001C)} +// CHECK:STDOUT: inst5000002E: {kind: FunctionDecl, arg0: function50000000, arg1: inst_block5000000E, type: type(inst5000002F)} +// CHECK:STDOUT: inst5000002F: {kind: FunctionType, arg0: function50000000, arg1: specific, type: type(TypeType)} +// CHECK:STDOUT: inst50000030: {kind: StructValue, arg0: inst_block_empty, type: type(inst5000002F)} +// CHECK:STDOUT: inst50000031: {kind: NameRef, arg0: name1, arg1: inst50000019, type: type(inst50000010)} +// CHECK:STDOUT: inst50000032: {kind: TupleLiteral, arg0: inst_block_empty, type: type(inst50000010)} +// CHECK:STDOUT: inst50000033: {kind: TupleLiteral, arg0: inst_block50000010, type: type(inst5000001C)} +// CHECK:STDOUT: inst50000034: {kind: TupleAccess, arg0: inst5000002C, arg1: element0, type: type(inst50000010)} +// CHECK:STDOUT: inst50000035: {kind: TupleInit, arg0: inst_block50000011, arg1: inst50000034, type: type(inst50000010)} +// CHECK:STDOUT: inst50000036: {kind: Converted, arg0: inst50000031, arg1: inst50000035, type: type(inst50000010)} // CHECK:STDOUT: inst50000037: {kind: InPlaceInit, arg0: inst50000036, arg1: inst50000034, type: type(inst50000010)} -// CHECK:STDOUT: inst50000038: {kind: TupleInit, arg0: inst_block50000012, arg1: inst50000028, type: type(inst5000001A)} -// CHECK:STDOUT: inst50000039: {kind: Converted, arg0: inst5000002F, arg1: inst50000038, type: type(inst5000001A)} -// CHECK:STDOUT: inst5000003A: {kind: ReturnExpr, arg0: inst50000039, arg1: inst50000028} +// CHECK:STDOUT: inst50000038: {kind: TupleAccess, arg0: inst5000002C, arg1: element1, type: type(inst50000010)} +// CHECK:STDOUT: inst50000039: {kind: TupleInit, arg0: inst_block_empty, arg1: inst50000038, type: type(inst50000010)} +// CHECK:STDOUT: inst5000003A: {kind: Converted, arg0: inst50000032, arg1: inst50000039, type: type(inst50000010)} +// CHECK:STDOUT: inst5000003B: {kind: InPlaceInit, arg0: inst5000003A, arg1: inst50000038, type: type(inst50000010)} +// CHECK:STDOUT: inst5000003C: {kind: TupleInit, arg0: inst_block50000012, arg1: inst5000002C, type: type(inst5000001C)} +// CHECK:STDOUT: inst5000003D: {kind: Converted, arg0: inst50000033, arg1: inst5000003C, type: type(inst5000001C)} +// CHECK:STDOUT: inst5000003E: {kind: ReturnExpr, arg0: inst5000003D, arg1: inst5000002C} // CHECK:STDOUT: bundles: {} // CHECK:STDOUT: constant_values: // CHECK:STDOUT: values: @@ -145,40 +149,44 @@ fn Foo(n: ()) -> ((), ()) { // CHECK:STDOUT: inst50000012: concrete_constant(inst50000012) // CHECK:STDOUT: inst50000013: concrete_constant(inst50000010) // CHECK:STDOUT: inst50000014: concrete_constant(inst50000014) -// CHECK:STDOUT: inst50000015: concrete_constant(inst50000015) -// CHECK:STDOUT: inst50000017: concrete_constant(inst50000017) -// CHECK:STDOUT: inst50000018: concrete_constant(inst50000012) -// CHECK:STDOUT: inst50000019: concrete_constant(inst50000012) -// CHECK:STDOUT: inst5000001A: concrete_constant(inst5000001A) -// CHECK:STDOUT: inst5000001B: concrete_constant(inst5000001C) +// CHECK:STDOUT: inst50000015: concrete_constant(inst50000016) +// CHECK:STDOUT: inst50000016: concrete_constant(inst50000016) +// CHECK:STDOUT: inst50000017: concrete_constant(inst50000018) +// CHECK:STDOUT: inst50000018: concrete_constant(inst50000018) +// CHECK:STDOUT: inst5000001A: concrete_constant(inst50000012) +// CHECK:STDOUT: inst5000001B: concrete_constant(inst50000012) // CHECK:STDOUT: inst5000001C: concrete_constant(inst5000001C) -// CHECK:STDOUT: inst5000001D: concrete_constant(inst5000001D) -// CHECK:STDOUT: inst5000001E: concrete_constant(inst50000010) -// CHECK:STDOUT: inst5000001F: concrete_constant(inst50000010) -// CHECK:STDOUT: inst50000020: concrete_constant(inst5000001A) -// CHECK:STDOUT: inst50000021: concrete_constant(inst50000022) -// CHECK:STDOUT: inst50000022: concrete_constant(inst50000022) -// CHECK:STDOUT: inst50000023: concrete_constant(inst50000023) +// CHECK:STDOUT: inst5000001D: concrete_constant(inst5000001E) +// CHECK:STDOUT: inst5000001E: concrete_constant(inst5000001E) +// CHECK:STDOUT: inst5000001F: concrete_constant(inst5000001F) +// CHECK:STDOUT: inst50000020: concrete_constant(inst50000010) +// CHECK:STDOUT: inst50000021: concrete_constant(inst50000010) +// CHECK:STDOUT: inst50000022: concrete_constant(inst5000001C) +// CHECK:STDOUT: inst50000023: concrete_constant(inst50000024) // CHECK:STDOUT: inst50000024: concrete_constant(inst50000024) // CHECK:STDOUT: inst50000025: concrete_constant(inst50000025) -// CHECK:STDOUT: inst50000027: concrete_constant(inst50000010) -// CHECK:STDOUT: inst5000002A: concrete_constant(inst5000002C) -// CHECK:STDOUT: inst5000002B: concrete_constant(inst5000002B) -// CHECK:STDOUT: inst5000002C: concrete_constant(inst5000002C) -// CHECK:STDOUT: inst5000002E: concrete_constant(inst50000012) -// CHECK:STDOUT: inst50000031: concrete_constant(inst50000012) +// CHECK:STDOUT: inst50000026: concrete_constant(inst50000027) +// CHECK:STDOUT: inst50000027: concrete_constant(inst50000027) +// CHECK:STDOUT: inst50000028: concrete_constant(inst50000029) +// CHECK:STDOUT: inst50000029: concrete_constant(inst50000029) +// CHECK:STDOUT: inst5000002B: concrete_constant(inst50000010) +// CHECK:STDOUT: inst5000002E: concrete_constant(inst50000030) +// CHECK:STDOUT: inst5000002F: concrete_constant(inst5000002F) +// CHECK:STDOUT: inst50000030: concrete_constant(inst50000030) // CHECK:STDOUT: inst50000032: concrete_constant(inst50000012) -// CHECK:STDOUT: inst50000033: concrete_constant(inst50000012) // CHECK:STDOUT: inst50000035: concrete_constant(inst50000012) // CHECK:STDOUT: inst50000036: concrete_constant(inst50000012) // CHECK:STDOUT: inst50000037: concrete_constant(inst50000012) -// CHECK:STDOUT: inst50000038: concrete_constant(inst5000001C) -// CHECK:STDOUT: inst50000039: concrete_constant(inst5000001C) +// CHECK:STDOUT: inst50000039: concrete_constant(inst50000012) +// CHECK:STDOUT: inst5000003A: concrete_constant(inst50000012) +// CHECK:STDOUT: inst5000003B: concrete_constant(inst50000012) +// CHECK:STDOUT: inst5000003C: concrete_constant(inst5000001E) +// CHECK:STDOUT: inst5000003D: concrete_constant(inst5000001E) // CHECK:STDOUT: symbolic_constants: {} // CHECK:STDOUT: inst_blocks: // CHECK:STDOUT: inst_block_empty: {} // CHECK:STDOUT: exports: -// CHECK:STDOUT: 0: inst5000002A +// CHECK:STDOUT: 0: inst5000002E // CHECK:STDOUT: generated: {} // CHECK:STDOUT: imports: {} // CHECK:STDOUT: global_init: {} @@ -188,8 +196,8 @@ fn Foo(n: ()) -> ((), ()) { // CHECK:STDOUT: inst_block50000006: // CHECK:STDOUT: 0: inst50000017 // CHECK:STDOUT: inst_block50000007: -// CHECK:STDOUT: 0: inst50000018 -// CHECK:STDOUT: 1: inst50000019 +// CHECK:STDOUT: 0: inst5000001A +// CHECK:STDOUT: 1: inst5000001B // CHECK:STDOUT: inst_block50000008: // CHECK:STDOUT: 0: inst50000010 // CHECK:STDOUT: 1: inst50000010 @@ -197,57 +205,57 @@ fn Foo(n: ()) -> ((), ()) { // CHECK:STDOUT: 0: inst50000012 // CHECK:STDOUT: 1: inst50000012 // CHECK:STDOUT: inst_block5000000A: -// CHECK:STDOUT: 0: inst5000001E -// CHECK:STDOUT: 1: inst5000001F +// CHECK:STDOUT: 0: inst50000020 +// CHECK:STDOUT: 1: inst50000021 // CHECK:STDOUT: inst_block5000000B: // CHECK:STDOUT: 0: inst50000015 -// CHECK:STDOUT: 1: inst50000024 +// CHECK:STDOUT: 1: inst50000026 // CHECK:STDOUT: inst_block5000000C: -// CHECK:STDOUT: 0: inst50000026 -// CHECK:STDOUT: 1: inst50000028 +// CHECK:STDOUT: 0: inst5000002A +// CHECK:STDOUT: 1: inst5000002C // CHECK:STDOUT: inst_block5000000D: // CHECK:STDOUT: 0: inst50000015 // CHECK:STDOUT: 1: inst50000017 -// CHECK:STDOUT: 2: inst50000024 -// CHECK:STDOUT: 3: inst50000025 +// CHECK:STDOUT: 2: inst50000026 +// CHECK:STDOUT: 3: inst50000028 // CHECK:STDOUT: inst_block5000000E: -// CHECK:STDOUT: 0: inst50000018 -// CHECK:STDOUT: 1: inst50000019 -// CHECK:STDOUT: 2: inst5000001B -// CHECK:STDOUT: 3: inst5000001E -// CHECK:STDOUT: 4: inst5000001F -// CHECK:STDOUT: 5: inst50000020 -// CHECK:STDOUT: 6: inst50000021 -// CHECK:STDOUT: 7: inst50000026 -// CHECK:STDOUT: 8: inst50000027 -// CHECK:STDOUT: 9: inst50000016 -// CHECK:STDOUT: 10: inst50000028 -// CHECK:STDOUT: 11: inst50000029 +// CHECK:STDOUT: 0: inst5000001A +// CHECK:STDOUT: 1: inst5000001B +// CHECK:STDOUT: 2: inst5000001D +// CHECK:STDOUT: 3: inst50000020 +// CHECK:STDOUT: 4: inst50000021 +// CHECK:STDOUT: 5: inst50000022 +// CHECK:STDOUT: 6: inst50000023 +// CHECK:STDOUT: 7: inst5000002A +// CHECK:STDOUT: 8: inst5000002B +// CHECK:STDOUT: 9: inst50000019 +// CHECK:STDOUT: 10: inst5000002C +// CHECK:STDOUT: 11: inst5000002D // CHECK:STDOUT: inst_block5000000F: -// CHECK:STDOUT: 0: inst5000002D -// CHECK:STDOUT: 1: inst5000002E -// CHECK:STDOUT: 2: inst5000002F -// CHECK:STDOUT: 3: inst50000030 -// CHECK:STDOUT: 4: inst50000031 -// CHECK:STDOUT: 5: inst50000032 -// CHECK:STDOUT: 6: inst50000033 -// CHECK:STDOUT: 7: inst50000034 -// CHECK:STDOUT: 8: inst50000035 -// CHECK:STDOUT: 9: inst50000036 -// CHECK:STDOUT: 10: inst50000037 -// CHECK:STDOUT: 11: inst50000038 -// CHECK:STDOUT: 12: inst50000039 -// CHECK:STDOUT: 13: inst5000003A +// CHECK:STDOUT: 0: inst50000031 +// CHECK:STDOUT: 1: inst50000032 +// CHECK:STDOUT: 2: inst50000033 +// CHECK:STDOUT: 3: inst50000034 +// CHECK:STDOUT: 4: inst50000035 +// CHECK:STDOUT: 5: inst50000036 +// CHECK:STDOUT: 6: inst50000037 +// CHECK:STDOUT: 7: inst50000038 +// CHECK:STDOUT: 8: inst50000039 +// CHECK:STDOUT: 9: inst5000003A +// CHECK:STDOUT: 10: inst5000003B +// CHECK:STDOUT: 11: inst5000003C +// CHECK:STDOUT: 12: inst5000003D +// CHECK:STDOUT: 13: inst5000003E // CHECK:STDOUT: inst_block50000010: -// CHECK:STDOUT: 0: inst5000002D -// CHECK:STDOUT: 1: inst5000002E +// CHECK:STDOUT: 0: inst50000031 +// CHECK:STDOUT: 1: inst50000032 // CHECK:STDOUT: inst_block50000011: {} // CHECK:STDOUT: inst_block50000012: -// CHECK:STDOUT: 0: inst50000033 -// CHECK:STDOUT: 1: inst50000037 +// CHECK:STDOUT: 0: inst50000037 +// CHECK:STDOUT: 1: inst5000003B // CHECK:STDOUT: inst_block50000013: // CHECK:STDOUT: 0: instF -// CHECK:STDOUT: 1: inst5000002A +// CHECK:STDOUT: 1: inst5000002E // CHECK:STDOUT: value_stores: // CHECK:STDOUT: shared_values: // CHECK:STDOUT: ints: {} @@ -264,10 +272,14 @@ fn Foo(n: ()) -> ((), ()) { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.cb1 = value_param_pattern [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.cb1 = at_binding_pattern n, %n.param_patt [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (%empty_tuple.type, %empty_tuple.type) [concrete] // CHECK:STDOUT: %tuple: %tuple.type = tuple_value (%empty_tuple, %empty_tuple) [concrete] // CHECK:STDOUT: %.e3a: Core.Form = init_form %tuple.type [concrete] // CHECK:STDOUT: %pattern_type.5b8: type = pattern_type %tuple.type [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.5b8 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type.5b8 = return_slot_pattern %return.param_patt, %tuple.type [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -277,10 +289,10 @@ fn Foo(n: ()) -> ((), ()) { // CHECK:STDOUT: .Foo = %Foo.decl // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %n.param_patt: %pattern_type.cb1 = value_param_pattern [concrete] -// CHECK:STDOUT: %n.patt: %pattern_type.cb1 = at_binding_pattern n, %n.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.5b8 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.5b8 = return_slot_pattern %return.param_patt, %.loc16_25.4 [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.cb1 = value_param_pattern [concrete = constants.%n.param_patt] +// CHECK:STDOUT: %n.patt: %pattern_type.cb1 = at_binding_pattern n, %n.param_patt [concrete = constants.%n.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.5b8 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.5b8 = return_slot_pattern %return.param_patt, %.loc16_25.4 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc16_20: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc16_24: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] diff --git a/toolchain/check/testdata/builtins/bool/eq.carbon b/toolchain/check/testdata/builtins/bool/eq.carbon index 390271dd7a73..e52ce6017822 100644 --- a/toolchain/check/testdata/builtins/bool/eq.carbon +++ b/toolchain/check/testdata/builtins/bool/eq.carbon @@ -56,12 +56,14 @@ var d: C(false == false) = True(); // CHECK:STDOUT: %pattern_type.2ef: type = pattern_type %C.ac4 [concrete] // CHECK:STDOUT: %True.type: type = fn_type @True [concrete] // CHECK:STDOUT: %True: %True.type = struct_value () [concrete] +// CHECK:STDOUT: %a.patt.8de: %pattern_type.2ef = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.2ef = var_pattern %a.patt.8de [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.2ef = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.2ef = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.2ef = ref_binding_pattern a [concrete = constants.%a.patt.8de] +// CHECK:STDOUT: %a.var_patt: %pattern_type.2ef = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %C.ac4 = var %a.var_patt [concrete] // CHECK:STDOUT: %.loc12_24.1: type = splice_block %C.loc12 [concrete = constants.%C.ac4] { @@ -104,6 +106,8 @@ var d: C(false == false) = True(); // CHECK:STDOUT: %bool.as.EqWith.impl.Equal.type: type = fn_type @bool.as.EqWith.impl.Equal [concrete] // CHECK:STDOUT: %bool.as.EqWith.impl.Equal: %bool.as.EqWith.impl.Equal.type = struct_value () [concrete] // CHECK:STDOUT: %bool.as.EqWith.impl.Equal.bound.e7c: = bound_method %true, %bool.as.EqWith.impl.Equal [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.2ef = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.2ef = var_pattern %a.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -114,8 +118,8 @@ var d: C(false == false) = True(); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.2ef = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.2ef = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.2ef = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.2ef = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %C.ac4 = var %a.var_patt [concrete] // CHECK:STDOUT: %.loc10_22.1: type = splice_block %C.loc10 [concrete = constants.%C.ac4] { diff --git a/toolchain/check/testdata/builtins/bool/make_type.carbon b/toolchain/check/testdata/builtins/bool/make_type.carbon index a792f04d84fe..4d0da2138735 100644 --- a/toolchain/check/testdata/builtins/bool/make_type.carbon +++ b/toolchain/check/testdata/builtins/bool/make_type.carbon @@ -32,6 +32,7 @@ let b: Bool() = false; // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.831 = value_binding_pattern b [concrete] // CHECK:STDOUT: %false: bool = bool_literal false [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -41,7 +42,7 @@ let b: Bool() = false; // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.831 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.831 = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc7_13.1: type = splice_block %.loc7_13.3 [concrete = bool] { // CHECK:STDOUT: %Bool.ref: %Bool.type = name_ref Bool, imports.%Main.Bool [concrete = constants.%Bool] diff --git a/toolchain/check/testdata/builtins/bool/neq.carbon b/toolchain/check/testdata/builtins/bool/neq.carbon index 323665968de1..63feddfe88e7 100644 --- a/toolchain/check/testdata/builtins/bool/neq.carbon +++ b/toolchain/check/testdata/builtins/bool/neq.carbon @@ -57,12 +57,14 @@ var d: C(false != false) = False(); // CHECK:STDOUT: %pattern_type.794: type = pattern_type %C.4b2 [concrete] // CHECK:STDOUT: %False.type: type = fn_type @False [concrete] // CHECK:STDOUT: %False: %False.type = struct_value () [concrete] +// CHECK:STDOUT: %a.patt.c70: %pattern_type.794 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.794 = var_pattern %a.patt.c70 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.794 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.794 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.794 = ref_binding_pattern a [concrete = constants.%a.patt.c70] +// CHECK:STDOUT: %a.var_patt: %pattern_type.794 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %C.4b2 = var %a.var_patt [concrete] // CHECK:STDOUT: %.loc12_25.1: type = splice_block %C.loc12 [concrete = constants.%C.4b2] { @@ -106,6 +108,8 @@ var d: C(false != false) = False(); // CHECK:STDOUT: %bool.as.EqWith.impl.NotEqual.type: type = fn_type @bool.as.EqWith.impl.NotEqual [concrete] // CHECK:STDOUT: %bool.as.EqWith.impl.NotEqual: %bool.as.EqWith.impl.NotEqual.type = struct_value () [concrete] // CHECK:STDOUT: %bool.as.EqWith.impl.NotEqual.bound.598: = bound_method %true, %bool.as.EqWith.impl.NotEqual [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.794 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.794 = var_pattern %a.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -116,8 +120,8 @@ var d: C(false != false) = False(); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.794 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.794 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.794 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.794 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %C.4b2 = var %a.var_patt [concrete] // CHECK:STDOUT: %.loc10_22.1: type = splice_block %C.loc10 [concrete = constants.%C.4b2] { diff --git a/toolchain/check/testdata/builtins/char_literal/add.carbon b/toolchain/check/testdata/builtins/char_literal/add.carbon index 5df509922c21..121d1591bd7c 100644 --- a/toolchain/check/testdata/builtins/char_literal/add.carbon +++ b/toolchain/check/testdata/builtins/char_literal/add.carbon @@ -78,36 +78,39 @@ let c: CharLiteral = AddCharInt('a', Negate(98)); // CHECK:STDOUT: %pattern_type.8c6: type = pattern_type Core.CharLiteral [concrete] // CHECK:STDOUT: %AddCharInt.type: type = fn_type @AddCharInt [concrete] // CHECK:STDOUT: %AddCharInt: %AddCharInt.type = struct_value () [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.8c6 = value_binding_pattern a [concrete] // CHECK:STDOUT: %.54f: Core.CharLiteral = char_value U+0061 [concrete] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %.711: Core.CharLiteral = char_value U+0062 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.8c6 = value_binding_pattern b [concrete] // CHECK:STDOUT: %.e28: Core.CharLiteral = char_value U+007F [concrete] // CHECK:STDOUT: %.ae7: Core.CharLiteral = char_value U+0080 [concrete] +// CHECK:STDOUT: %c.patt.c30: %pattern_type.8c6 = value_binding_pattern c [concrete] // CHECK:STDOUT: %.ad8: Core.CharLiteral = char_value U+00FF [concrete] // CHECK:STDOUT: %.a8b: Core.CharLiteral = char_value U+0100 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.8c6 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.8c6 = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %CharLiteral.ref.loc12: type = name_ref CharLiteral, %CharLiteral [concrete = Core.CharLiteral] // CHECK:STDOUT: %.loc12_39.1: Core.CharLiteral = value_of_initializer @__global_init.%AddCharInt.call.loc12 [concrete = constants.%.711] // CHECK:STDOUT: %.loc12_39.2: Core.CharLiteral = converted @__global_init.%AddCharInt.call.loc12, %.loc12_39.1 [concrete = constants.%.711] +// CHECK:STDOUT: %CharLiteral.ref.loc12: type = name_ref CharLiteral, %CharLiteral [concrete = Core.CharLiteral] // CHECK:STDOUT: %a: Core.CharLiteral = value_binding a, %.loc12_39.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.8c6 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.8c6 = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %CharLiteral.ref.loc15: type = name_ref CharLiteral, %CharLiteral [concrete = Core.CharLiteral] // CHECK:STDOUT: %.loc15_44.1: Core.CharLiteral = value_of_initializer @__global_init.%AddCharInt.call.loc15 [concrete = constants.%.ae7] // CHECK:STDOUT: %.loc15_44.2: Core.CharLiteral = converted @__global_init.%AddCharInt.call.loc15, %.loc15_44.1 [concrete = constants.%.ae7] +// CHECK:STDOUT: %CharLiteral.ref.loc15: type = name_ref CharLiteral, %CharLiteral [concrete = Core.CharLiteral] // CHECK:STDOUT: %b: Core.CharLiteral = value_binding b, %.loc15_44.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.8c6 = value_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.8c6 = value_binding_pattern c [concrete = constants.%c.patt.c30] // CHECK:STDOUT: } -// CHECK:STDOUT: %CharLiteral.ref.loc16: type = name_ref CharLiteral, %CharLiteral [concrete = Core.CharLiteral] // CHECK:STDOUT: %.loc16_44.1: Core.CharLiteral = value_of_initializer @__global_init.%AddCharInt.call.loc16 [concrete = constants.%.a8b] // CHECK:STDOUT: %.loc16_44.2: Core.CharLiteral = converted @__global_init.%AddCharInt.call.loc16, %.loc16_44.1 [concrete = constants.%.a8b] +// CHECK:STDOUT: %CharLiteral.ref.loc16: type = name_ref CharLiteral, %CharLiteral [concrete = Core.CharLiteral] // CHECK:STDOUT: %c: Core.CharLiteral = value_binding c, %.loc16_44.2 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/builtins/char_literal/convert_char.carbon b/toolchain/check/testdata/builtins/char_literal/convert_char.carbon index 717d7200aaaf..977573807405 100644 --- a/toolchain/check/testdata/builtins/char_literal/convert_char.carbon +++ b/toolchain/check/testdata/builtins/char_literal/convert_char.carbon @@ -101,12 +101,15 @@ let c: UInt(8) = ToChar('\u{1E15}'); // CHECK:STDOUT: %int_8: Core.IntLiteral = int_value 8 [concrete] // CHECK:STDOUT: %u8.builtin: type = int_type unsigned, %int_8 [concrete] // CHECK:STDOUT: %pattern_type.456: type = pattern_type %u8.builtin [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.456 = value_binding_pattern a [concrete] // CHECK:STDOUT: %ToChar.type: type = fn_type @ToChar [concrete] // CHECK:STDOUT: %ToChar: %ToChar.type = struct_value () [concrete] // CHECK:STDOUT: %.dc9: Core.CharLiteral = char_value U+0000 [concrete] // CHECK:STDOUT: %int_0: %u8.builtin = int_value 0 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.456 = value_binding_pattern b [concrete] // CHECK:STDOUT: %.711: Core.CharLiteral = char_value U+0062 [concrete] // CHECK:STDOUT: %int_98: %u8.builtin = int_value 98 [concrete] +// CHECK:STDOUT: %c.patt.7eb: %pattern_type.456 = value_binding_pattern c [concrete] // CHECK:STDOUT: %.e28: Core.CharLiteral = char_value U+007F [concrete] // CHECK:STDOUT: %int_127: %u8.builtin = int_value 127 [concrete] // CHECK:STDOUT: } @@ -118,8 +121,10 @@ let c: UInt(8) = ToChar('\u{1E15}'); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.456 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.456 = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } +// CHECK:STDOUT: %.loc6_29.1: %u8.builtin = value_of_initializer @__global_init.%ToChar.call.loc6 [concrete = constants.%int_0] +// CHECK:STDOUT: %.loc6_29.2: %u8.builtin = converted @__global_init.%ToChar.call.loc6, %.loc6_29.1 [concrete = constants.%int_0] // CHECK:STDOUT: %.loc6_14.1: type = splice_block %.loc6_14.3 [concrete = constants.%u8.builtin] { // CHECK:STDOUT: %UInt.ref.loc6: %UInt.type = name_ref UInt, imports.%Main.UInt [concrete = constants.%UInt] // CHECK:STDOUT: %int_8.loc6: Core.IntLiteral = int_value 8 [concrete = constants.%int_8] @@ -127,12 +132,12 @@ let c: UInt(8) = ToChar('\u{1E15}'); // CHECK:STDOUT: %.loc6_14.2: type = value_of_initializer %UInt.call.loc6 [concrete = constants.%u8.builtin] // CHECK:STDOUT: %.loc6_14.3: type = converted %UInt.call.loc6, %.loc6_14.2 [concrete = constants.%u8.builtin] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc6_29.1: %u8.builtin = value_of_initializer @__global_init.%ToChar.call.loc6 [concrete = constants.%int_0] -// CHECK:STDOUT: %.loc6_29.2: %u8.builtin = converted @__global_init.%ToChar.call.loc6, %.loc6_29.1 [concrete = constants.%int_0] // CHECK:STDOUT: %a: %u8.builtin = value_binding a, %.loc6_29.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.456 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.456 = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } +// CHECK:STDOUT: %.loc7_28.1: %u8.builtin = value_of_initializer @__global_init.%ToChar.call.loc7 [concrete = constants.%int_98] +// CHECK:STDOUT: %.loc7_28.2: %u8.builtin = converted @__global_init.%ToChar.call.loc7, %.loc7_28.1 [concrete = constants.%int_98] // CHECK:STDOUT: %.loc7_14.1: type = splice_block %.loc7_14.3 [concrete = constants.%u8.builtin] { // CHECK:STDOUT: %UInt.ref.loc7: %UInt.type = name_ref UInt, imports.%Main.UInt [concrete = constants.%UInt] // CHECK:STDOUT: %int_8.loc7: Core.IntLiteral = int_value 8 [concrete = constants.%int_8] @@ -140,12 +145,12 @@ let c: UInt(8) = ToChar('\u{1E15}'); // CHECK:STDOUT: %.loc7_14.2: type = value_of_initializer %UInt.call.loc7 [concrete = constants.%u8.builtin] // CHECK:STDOUT: %.loc7_14.3: type = converted %UInt.call.loc7, %.loc7_14.2 [concrete = constants.%u8.builtin] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc7_28.1: %u8.builtin = value_of_initializer @__global_init.%ToChar.call.loc7 [concrete = constants.%int_98] -// CHECK:STDOUT: %.loc7_28.2: %u8.builtin = converted @__global_init.%ToChar.call.loc7, %.loc7_28.1 [concrete = constants.%int_98] // CHECK:STDOUT: %b: %u8.builtin = value_binding b, %.loc7_28.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.456 = value_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.456 = value_binding_pattern c [concrete = constants.%c.patt.7eb] // CHECK:STDOUT: } +// CHECK:STDOUT: %.loc8_33.1: %u8.builtin = value_of_initializer @__global_init.%ToChar.call.loc8 [concrete = constants.%int_127] +// CHECK:STDOUT: %.loc8_33.2: %u8.builtin = converted @__global_init.%ToChar.call.loc8, %.loc8_33.1 [concrete = constants.%int_127] // CHECK:STDOUT: %.loc8_14.1: type = splice_block %.loc8_14.3 [concrete = constants.%u8.builtin] { // CHECK:STDOUT: %UInt.ref.loc8: %UInt.type = name_ref UInt, imports.%Main.UInt [concrete = constants.%UInt] // CHECK:STDOUT: %int_8.loc8: Core.IntLiteral = int_value 8 [concrete = constants.%int_8] @@ -153,8 +158,6 @@ let c: UInt(8) = ToChar('\u{1E15}'); // CHECK:STDOUT: %.loc8_14.2: type = value_of_initializer %UInt.call.loc8 [concrete = constants.%u8.builtin] // CHECK:STDOUT: %.loc8_14.3: type = converted %UInt.call.loc8, %.loc8_14.2 [concrete = constants.%u8.builtin] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc8_33.1: %u8.builtin = value_of_initializer @__global_init.%ToChar.call.loc8 [concrete = constants.%int_127] -// CHECK:STDOUT: %.loc8_33.2: %u8.builtin = converted @__global_init.%ToChar.call.loc8, %.loc8_33.1 [concrete = constants.%int_127] // CHECK:STDOUT: %c: %u8.builtin = value_binding c, %.loc8_33.2 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/builtins/char_literal/convert_int.carbon b/toolchain/check/testdata/builtins/char_literal/convert_int.carbon index b7f6d5eff40d..0f2fc060af88 100644 --- a/toolchain/check/testdata/builtins/char_literal/convert_int.carbon +++ b/toolchain/check/testdata/builtins/char_literal/convert_int.carbon @@ -84,62 +84,68 @@ let g: u8 = ConvertToU8('\u{100}'); // CHECK:STDOUT: %pattern_type.186: type = pattern_type %u8 [concrete] // CHECK:STDOUT: %ConvertToU8.type: type = fn_type @ConvertToU8 [concrete] // CHECK:STDOUT: %ConvertToU8: %ConvertToU8.type = struct_value () [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = value_binding_pattern a [concrete] // CHECK:STDOUT: %.54f: Core.CharLiteral = char_value U+0061 [concrete] // CHECK:STDOUT: %int_97: %i32 = int_value 97 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.668 = value_binding_pattern b [concrete] // CHECK:STDOUT: %.711: Core.CharLiteral = char_value U+0062 [concrete] // CHECK:STDOUT: %int_98: %u32 = int_value 98 [concrete] +// CHECK:STDOUT: %c.patt.a8f: %pattern_type.f57 = value_binding_pattern c [concrete] // CHECK:STDOUT: %.914: Core.CharLiteral = char_value U+10FFFF [concrete] // CHECK:STDOUT: %int_1114111: %i64 = int_value 1114111 [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.b35 = value_binding_pattern d [concrete] // CHECK:STDOUT: %.dc9: Core.CharLiteral = char_value U+0000 [concrete] // CHECK:STDOUT: %int_0: %u64 = int_value 0 [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type.186 = value_binding_pattern e [concrete] // CHECK:STDOUT: %.ae7: Core.CharLiteral = char_value U+0080 [concrete] // CHECK:STDOUT: %int_128: %u8 = int_value 128 [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type.186 = value_binding_pattern f [concrete] // CHECK:STDOUT: %.ad8: Core.CharLiteral = char_value U+00FF [concrete] // CHECK:STDOUT: %int_255: %u8 = int_value 255 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc14_30.1: %i32 = value_of_initializer @__global_init.%ConvertToI32.call [concrete = constants.%int_97] // CHECK:STDOUT: %.loc14_30.2: %i32 = converted @__global_init.%ConvertToI32.call, %.loc14_30.1 [concrete = constants.%int_97] +// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %a: %i32 = value_binding a, %.loc14_30.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.668 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.668 = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %u32: type = type_literal constants.%u32 [concrete = constants.%u32] // CHECK:STDOUT: %.loc15_30.1: %u32 = value_of_initializer @__global_init.%ConvertToU32.call [concrete = constants.%int_98] // CHECK:STDOUT: %.loc15_30.2: %u32 = converted @__global_init.%ConvertToU32.call, %.loc15_30.1 [concrete = constants.%int_98] +// CHECK:STDOUT: %u32: type = type_literal constants.%u32 [concrete = constants.%u32] // CHECK:STDOUT: %b: %u32 = value_binding b, %.loc15_30.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.f57 = value_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.f57 = value_binding_pattern c [concrete = constants.%c.patt.a8f] // CHECK:STDOUT: } -// CHECK:STDOUT: %i64: type = type_literal constants.%i64 [concrete = constants.%i64] // CHECK:STDOUT: %.loc16_39.1: %i64 = value_of_initializer @__global_init.%ConvertToI64.call [concrete = constants.%int_1114111] // CHECK:STDOUT: %.loc16_39.2: %i64 = converted @__global_init.%ConvertToI64.call, %.loc16_39.1 [concrete = constants.%int_1114111] +// CHECK:STDOUT: %i64: type = type_literal constants.%i64 [concrete = constants.%i64] // CHECK:STDOUT: %c: %i64 = value_binding c, %.loc16_39.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.b35 = value_binding_pattern d [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.b35 = value_binding_pattern d [concrete = constants.%d.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %u64: type = type_literal constants.%u64 [concrete = constants.%u64] // CHECK:STDOUT: %.loc17_31.1: %u64 = value_of_initializer @__global_init.%ConvertToU64.call [concrete = constants.%int_0] // CHECK:STDOUT: %.loc17_31.2: %u64 = converted @__global_init.%ConvertToU64.call, %.loc17_31.1 [concrete = constants.%int_0] +// CHECK:STDOUT: %u64: type = type_literal constants.%u64 [concrete = constants.%u64] // CHECK:STDOUT: %d: %u64 = value_binding d, %.loc17_31.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %e.patt: %pattern_type.186 = value_binding_pattern e [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type.186 = value_binding_pattern e [concrete = constants.%e.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %u8.loc19: type = type_literal constants.%u8 [concrete = constants.%u8] // CHECK:STDOUT: %.loc19_33.1: %u8 = value_of_initializer @__global_init.%ConvertToU8.call.loc19 [concrete = constants.%int_128] // CHECK:STDOUT: %.loc19_33.2: %u8 = converted @__global_init.%ConvertToU8.call.loc19, %.loc19_33.1 [concrete = constants.%int_128] +// CHECK:STDOUT: %u8.loc19: type = type_literal constants.%u8 [concrete = constants.%u8] // CHECK:STDOUT: %e: %u8 = value_binding e, %.loc19_33.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %f.patt: %pattern_type.186 = value_binding_pattern f [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type.186 = value_binding_pattern f [concrete = constants.%f.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %u8.loc20: type = type_literal constants.%u8 [concrete = constants.%u8] // CHECK:STDOUT: %.loc20_33.1: %u8 = value_of_initializer @__global_init.%ConvertToU8.call.loc20 [concrete = constants.%int_255] // CHECK:STDOUT: %.loc20_33.2: %u8 = converted @__global_init.%ConvertToU8.call.loc20, %.loc20_33.1 [concrete = constants.%int_255] +// CHECK:STDOUT: %u8.loc20: type = type_literal constants.%u8 [concrete = constants.%u8] // CHECK:STDOUT: %f: %u8 = value_binding f, %.loc20_33.2 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/builtins/char_literal/eq.carbon b/toolchain/check/testdata/builtins/char_literal/eq.carbon index b9bc2172d6d0..ff9ed3cbf5ac 100644 --- a/toolchain/check/testdata/builtins/char_literal/eq.carbon +++ b/toolchain/check/testdata/builtins/char_literal/eq.carbon @@ -28,26 +28,28 @@ let b: bool = Eq('a', 'b'); // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %Eq.type: type = fn_type @Eq [concrete] // CHECK:STDOUT: %Eq: %Eq.type = struct_value () [concrete] +// CHECK:STDOUT: %a.patt.567: %pattern_type.831 = value_binding_pattern a [concrete] // CHECK:STDOUT: %.54f: Core.CharLiteral = char_value U+0061 [concrete] // CHECK:STDOUT: %true: bool = bool_literal true [concrete] +// CHECK:STDOUT: %b.patt.438: %pattern_type.831 = value_binding_pattern b [concrete] // CHECK:STDOUT: %.711: Core.CharLiteral = char_value U+0062 [concrete] // CHECK:STDOUT: %false: bool = bool_literal false [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.831 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.831 = value_binding_pattern a [concrete = constants.%a.patt.567] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc21_8: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc21_26.1: bool = value_of_initializer @__global_init.%Eq.call.loc21 [concrete = constants.%true] // CHECK:STDOUT: %.loc21_26.2: bool = converted @__global_init.%Eq.call.loc21, %.loc21_26.1 [concrete = constants.%true] +// CHECK:STDOUT: %.loc21_8: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %a: bool = value_binding a, %.loc21_26.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.831 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.831 = value_binding_pattern b [concrete = constants.%b.patt.438] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc22_8: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc22_26.1: bool = value_of_initializer @__global_init.%Eq.call.loc22 [concrete = constants.%false] // CHECK:STDOUT: %.loc22_26.2: bool = converted @__global_init.%Eq.call.loc22, %.loc22_26.1 [concrete = constants.%false] +// CHECK:STDOUT: %.loc22_8: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %b: bool = value_binding b, %.loc22_26.2 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/builtins/char_literal/greater.carbon b/toolchain/check/testdata/builtins/char_literal/greater.carbon index 7c9fe132a232..f536a8173e17 100644 --- a/toolchain/check/testdata/builtins/char_literal/greater.carbon +++ b/toolchain/check/testdata/builtins/char_literal/greater.carbon @@ -28,26 +28,28 @@ let b: bool = Greater('a', 'b'); // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %Greater.type: type = fn_type @Greater [concrete] // CHECK:STDOUT: %Greater: %Greater.type = struct_value () [concrete] +// CHECK:STDOUT: %a.patt.567: %pattern_type.831 = value_binding_pattern a [concrete] // CHECK:STDOUT: %.711: Core.CharLiteral = char_value U+0062 [concrete] // CHECK:STDOUT: %.54f: Core.CharLiteral = char_value U+0061 [concrete] // CHECK:STDOUT: %true: bool = bool_literal true [concrete] +// CHECK:STDOUT: %b.patt.438: %pattern_type.831 = value_binding_pattern b [concrete] // CHECK:STDOUT: %false: bool = bool_literal false [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.831 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.831 = value_binding_pattern a [concrete = constants.%a.patt.567] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc21_8: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc21_31.1: bool = value_of_initializer @__global_init.%Greater.call.loc21 [concrete = constants.%true] // CHECK:STDOUT: %.loc21_31.2: bool = converted @__global_init.%Greater.call.loc21, %.loc21_31.1 [concrete = constants.%true] +// CHECK:STDOUT: %.loc21_8: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %a: bool = value_binding a, %.loc21_31.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.831 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.831 = value_binding_pattern b [concrete = constants.%b.patt.438] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc22_8: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc22_31.1: bool = value_of_initializer @__global_init.%Greater.call.loc22 [concrete = constants.%false] // CHECK:STDOUT: %.loc22_31.2: bool = converted @__global_init.%Greater.call.loc22, %.loc22_31.1 [concrete = constants.%false] +// CHECK:STDOUT: %.loc22_8: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %b: bool = value_binding b, %.loc22_31.2 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/builtins/char_literal/greater_eq.carbon b/toolchain/check/testdata/builtins/char_literal/greater_eq.carbon index 8ef3fc711739..ef64958542bf 100644 --- a/toolchain/check/testdata/builtins/char_literal/greater_eq.carbon +++ b/toolchain/check/testdata/builtins/char_literal/greater_eq.carbon @@ -29,33 +29,36 @@ let c: bool = GreaterEq('a', 'b'); // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %GreaterEq.type: type = fn_type @GreaterEq [concrete] // CHECK:STDOUT: %GreaterEq: %GreaterEq.type = struct_value () [concrete] +// CHECK:STDOUT: %a.patt.567: %pattern_type.831 = value_binding_pattern a [concrete] // CHECK:STDOUT: %.54f: Core.CharLiteral = char_value U+0061 [concrete] // CHECK:STDOUT: %true: bool = bool_literal true [concrete] +// CHECK:STDOUT: %b.patt.438: %pattern_type.831 = value_binding_pattern b [concrete] // CHECK:STDOUT: %.711: Core.CharLiteral = char_value U+0062 [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.831 = value_binding_pattern c [concrete] // CHECK:STDOUT: %false: bool = bool_literal false [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.831 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.831 = value_binding_pattern a [concrete = constants.%a.patt.567] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc21_8: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc21_33.1: bool = value_of_initializer @__global_init.%GreaterEq.call.loc21 [concrete = constants.%true] // CHECK:STDOUT: %.loc21_33.2: bool = converted @__global_init.%GreaterEq.call.loc21, %.loc21_33.1 [concrete = constants.%true] +// CHECK:STDOUT: %.loc21_8: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %a: bool = value_binding a, %.loc21_33.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.831 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.831 = value_binding_pattern b [concrete = constants.%b.patt.438] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc22_8: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc22_33.1: bool = value_of_initializer @__global_init.%GreaterEq.call.loc22 [concrete = constants.%true] // CHECK:STDOUT: %.loc22_33.2: bool = converted @__global_init.%GreaterEq.call.loc22, %.loc22_33.1 [concrete = constants.%true] +// CHECK:STDOUT: %.loc22_8: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %b: bool = value_binding b, %.loc22_33.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.831 = value_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.831 = value_binding_pattern c [concrete = constants.%c.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc23_8: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc23_33.1: bool = value_of_initializer @__global_init.%GreaterEq.call.loc23 [concrete = constants.%false] // CHECK:STDOUT: %.loc23_33.2: bool = converted @__global_init.%GreaterEq.call.loc23, %.loc23_33.1 [concrete = constants.%false] +// CHECK:STDOUT: %.loc23_8: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %c: bool = value_binding c, %.loc23_33.2 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/builtins/char_literal/less.carbon b/toolchain/check/testdata/builtins/char_literal/less.carbon index 5838b6948a90..ab03bda131e7 100644 --- a/toolchain/check/testdata/builtins/char_literal/less.carbon +++ b/toolchain/check/testdata/builtins/char_literal/less.carbon @@ -28,26 +28,28 @@ let b: bool = Less('b', 'a'); // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %Less.type: type = fn_type @Less [concrete] // CHECK:STDOUT: %Less: %Less.type = struct_value () [concrete] +// CHECK:STDOUT: %a.patt.567: %pattern_type.831 = value_binding_pattern a [concrete] // CHECK:STDOUT: %.54f: Core.CharLiteral = char_value U+0061 [concrete] // CHECK:STDOUT: %.711: Core.CharLiteral = char_value U+0062 [concrete] // CHECK:STDOUT: %true: bool = bool_literal true [concrete] +// CHECK:STDOUT: %b.patt.438: %pattern_type.831 = value_binding_pattern b [concrete] // CHECK:STDOUT: %false: bool = bool_literal false [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.831 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.831 = value_binding_pattern a [concrete = constants.%a.patt.567] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc21_8: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc21_28.1: bool = value_of_initializer @__global_init.%Less.call.loc21 [concrete = constants.%true] // CHECK:STDOUT: %.loc21_28.2: bool = converted @__global_init.%Less.call.loc21, %.loc21_28.1 [concrete = constants.%true] +// CHECK:STDOUT: %.loc21_8: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %a: bool = value_binding a, %.loc21_28.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.831 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.831 = value_binding_pattern b [concrete = constants.%b.patt.438] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc22_8: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc22_28.1: bool = value_of_initializer @__global_init.%Less.call.loc22 [concrete = constants.%false] // CHECK:STDOUT: %.loc22_28.2: bool = converted @__global_init.%Less.call.loc22, %.loc22_28.1 [concrete = constants.%false] +// CHECK:STDOUT: %.loc22_8: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %b: bool = value_binding b, %.loc22_28.2 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/builtins/char_literal/less_eq.carbon b/toolchain/check/testdata/builtins/char_literal/less_eq.carbon index 3ede33801e71..4b6c2f0faeee 100644 --- a/toolchain/check/testdata/builtins/char_literal/less_eq.carbon +++ b/toolchain/check/testdata/builtins/char_literal/less_eq.carbon @@ -29,33 +29,36 @@ let c: bool = LessEq('b', 'a'); // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %LessEq.type: type = fn_type @LessEq [concrete] // CHECK:STDOUT: %LessEq: %LessEq.type = struct_value () [concrete] +// CHECK:STDOUT: %a.patt.567: %pattern_type.831 = value_binding_pattern a [concrete] // CHECK:STDOUT: %.54f: Core.CharLiteral = char_value U+0061 [concrete] // CHECK:STDOUT: %true: bool = bool_literal true [concrete] +// CHECK:STDOUT: %b.patt.438: %pattern_type.831 = value_binding_pattern b [concrete] // CHECK:STDOUT: %.711: Core.CharLiteral = char_value U+0062 [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.831 = value_binding_pattern c [concrete] // CHECK:STDOUT: %false: bool = bool_literal false [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.831 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.831 = value_binding_pattern a [concrete = constants.%a.patt.567] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc21_8: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc21_30.1: bool = value_of_initializer @__global_init.%LessEq.call.loc21 [concrete = constants.%true] // CHECK:STDOUT: %.loc21_30.2: bool = converted @__global_init.%LessEq.call.loc21, %.loc21_30.1 [concrete = constants.%true] +// CHECK:STDOUT: %.loc21_8: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %a: bool = value_binding a, %.loc21_30.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.831 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.831 = value_binding_pattern b [concrete = constants.%b.patt.438] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc22_8: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc22_30.1: bool = value_of_initializer @__global_init.%LessEq.call.loc22 [concrete = constants.%true] // CHECK:STDOUT: %.loc22_30.2: bool = converted @__global_init.%LessEq.call.loc22, %.loc22_30.1 [concrete = constants.%true] +// CHECK:STDOUT: %.loc22_8: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %b: bool = value_binding b, %.loc22_30.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.831 = value_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.831 = value_binding_pattern c [concrete = constants.%c.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc23_8: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc23_30.1: bool = value_of_initializer @__global_init.%LessEq.call.loc23 [concrete = constants.%false] // CHECK:STDOUT: %.loc23_30.2: bool = converted @__global_init.%LessEq.call.loc23, %.loc23_30.1 [concrete = constants.%false] +// CHECK:STDOUT: %.loc23_8: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %c: bool = value_binding c, %.loc23_30.2 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/builtins/char_literal/make_type.carbon b/toolchain/check/testdata/builtins/char_literal/make_type.carbon index 1f53b94292af..23df1054bed4 100644 --- a/toolchain/check/testdata/builtins/char_literal/make_type.carbon +++ b/toolchain/check/testdata/builtins/char_literal/make_type.carbon @@ -33,8 +33,11 @@ let not_8_bit: CharLiteral = '\u{1E15}'; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %pattern_type: type = pattern_type Core.CharLiteral [concrete] +// CHECK:STDOUT: %ascii_x.patt: %pattern_type = value_binding_pattern ascii_x [concrete] // CHECK:STDOUT: %.4ac: Core.CharLiteral = char_value U+0078 [concrete] +// CHECK:STDOUT: %not_7_bit.patt: %pattern_type = value_binding_pattern not_7_bit [concrete] // CHECK:STDOUT: %.ae7: Core.CharLiteral = char_value U+0080 [concrete] +// CHECK:STDOUT: %not_8_bit.patt: %pattern_type = value_binding_pattern not_8_bit [concrete] // CHECK:STDOUT: %.a81: Core.CharLiteral = char_value U+1E15 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -44,17 +47,17 @@ let not_8_bit: CharLiteral = '\u{1E15}'; // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %ascii_x.patt: %pattern_type = value_binding_pattern ascii_x [concrete] +// CHECK:STDOUT: %ascii_x.patt: %pattern_type = value_binding_pattern ascii_x [concrete = constants.%ascii_x.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %CharLiteral.ref.loc7: type = name_ref CharLiteral, imports.%Main.CharLiteral [concrete = Core.CharLiteral] // CHECK:STDOUT: %ascii_x: Core.CharLiteral = value_binding ascii_x, @__global_init.%.loc7 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %not_7_bit.patt: %pattern_type = value_binding_pattern not_7_bit [concrete] +// CHECK:STDOUT: %not_7_bit.patt: %pattern_type = value_binding_pattern not_7_bit [concrete = constants.%not_7_bit.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %CharLiteral.ref.loc8: type = name_ref CharLiteral, imports.%Main.CharLiteral [concrete = Core.CharLiteral] // CHECK:STDOUT: %not_7_bit: Core.CharLiteral = value_binding not_7_bit, @__global_init.%.loc8 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %not_8_bit.patt: %pattern_type = value_binding_pattern not_8_bit [concrete] +// CHECK:STDOUT: %not_8_bit.patt: %pattern_type = value_binding_pattern not_8_bit [concrete = constants.%not_8_bit.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %CharLiteral.ref.loc9: type = name_ref CharLiteral, imports.%Main.CharLiteral [concrete = Core.CharLiteral] // CHECK:STDOUT: %not_8_bit: Core.CharLiteral = value_binding not_8_bit, @__global_init.%.loc9 diff --git a/toolchain/check/testdata/builtins/char_literal/neq.carbon b/toolchain/check/testdata/builtins/char_literal/neq.carbon index baf35a0c771c..4cdc91e5b5b7 100644 --- a/toolchain/check/testdata/builtins/char_literal/neq.carbon +++ b/toolchain/check/testdata/builtins/char_literal/neq.carbon @@ -28,26 +28,28 @@ let b: bool = Neq('a', 'a'); // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %Neq.type: type = fn_type @Neq [concrete] // CHECK:STDOUT: %Neq: %Neq.type = struct_value () [concrete] +// CHECK:STDOUT: %a.patt.567: %pattern_type.831 = value_binding_pattern a [concrete] // CHECK:STDOUT: %.54f: Core.CharLiteral = char_value U+0061 [concrete] // CHECK:STDOUT: %.711: Core.CharLiteral = char_value U+0062 [concrete] // CHECK:STDOUT: %true: bool = bool_literal true [concrete] +// CHECK:STDOUT: %b.patt.438: %pattern_type.831 = value_binding_pattern b [concrete] // CHECK:STDOUT: %false: bool = bool_literal false [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.831 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.831 = value_binding_pattern a [concrete = constants.%a.patt.567] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc21_8: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc21_27.1: bool = value_of_initializer @__global_init.%Neq.call.loc21 [concrete = constants.%true] // CHECK:STDOUT: %.loc21_27.2: bool = converted @__global_init.%Neq.call.loc21, %.loc21_27.1 [concrete = constants.%true] +// CHECK:STDOUT: %.loc21_8: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %a: bool = value_binding a, %.loc21_27.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.831 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.831 = value_binding_pattern b [concrete = constants.%b.patt.438] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc22_8: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc22_27.1: bool = value_of_initializer @__global_init.%Neq.call.loc22 [concrete = constants.%false] // CHECK:STDOUT: %.loc22_27.2: bool = converted @__global_init.%Neq.call.loc22, %.loc22_27.1 [concrete = constants.%false] +// CHECK:STDOUT: %.loc22_8: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %b: bool = value_binding b, %.loc22_27.2 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/builtins/char_literal/sub_char.carbon b/toolchain/check/testdata/builtins/char_literal/sub_char.carbon index 3c5c505e3da1..9cf166ec2bd6 100644 --- a/toolchain/check/testdata/builtins/char_literal/sub_char.carbon +++ b/toolchain/check/testdata/builtins/char_literal/sub_char.carbon @@ -40,60 +40,66 @@ let min: i32 = SubCharCharToI32('\u{0}', '\u{10FFFF}'); // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %SubCharCharToI32.type: type = fn_type @SubCharCharToI32 [concrete] // CHECK:STDOUT: %SubCharCharToI32: %SubCharCharToI32.type = struct_value () [concrete] +// CHECK:STDOUT: %a.patt.b0e: %pattern_type.dc0 = value_binding_pattern a [concrete] // CHECK:STDOUT: %.711: Core.CharLiteral = char_value U+0062 [concrete] // CHECK:STDOUT: %.54f: Core.CharLiteral = char_value U+0061 [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] +// CHECK:STDOUT: %b.patt.3f7: %pattern_type.6b6 = value_binding_pattern b [concrete] // CHECK:STDOUT: %int_1.0c6: %i32 = int_value 1 [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.dc0 = value_binding_pattern c [concrete] // CHECK:STDOUT: %int_-1.638: Core.IntLiteral = int_value -1 [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.6b6 = value_binding_pattern d [concrete] // CHECK:STDOUT: %int_-1.4ef: %i32 = int_value -1 [concrete] +// CHECK:STDOUT: %max.patt: %pattern_type.6b6 = value_binding_pattern max [concrete] // CHECK:STDOUT: %.914: Core.CharLiteral = char_value U+10FFFF [concrete] // CHECK:STDOUT: %.dc9: Core.CharLiteral = char_value U+0000 [concrete] // CHECK:STDOUT: %int_1114111: %i32 = int_value 1114111 [concrete] +// CHECK:STDOUT: %min.patt: %pattern_type.6b6 = value_binding_pattern min [concrete] // CHECK:STDOUT: %int_-1114111: %i32 = int_value -1114111 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.dc0 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.dc0 = value_binding_pattern a [concrete = constants.%a.patt.b0e] // CHECK:STDOUT: } -// CHECK:STDOUT: %IntLiteral.ref.loc24: type = name_ref IntLiteral, %IntLiteral [concrete = Core.IntLiteral] // CHECK:STDOUT: %.loc24_53.1: Core.IntLiteral = value_of_initializer @__global_init.%SubCharCharToIntLiteral.call.loc24 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %.loc24_53.2: Core.IntLiteral = converted @__global_init.%SubCharCharToIntLiteral.call.loc24, %.loc24_53.1 [concrete = constants.%int_1.5b8] +// CHECK:STDOUT: %IntLiteral.ref.loc24: type = name_ref IntLiteral, %IntLiteral [concrete = Core.IntLiteral] // CHECK:STDOUT: %a: Core.IntLiteral = value_binding a, %.loc24_53.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = value_binding_pattern b [concrete = constants.%b.patt.3f7] // CHECK:STDOUT: } -// CHECK:STDOUT: %i32.loc25: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc25_39.1: %i32 = value_of_initializer @__global_init.%SubCharCharToI32.call.loc25 [concrete = constants.%int_1.0c6] // CHECK:STDOUT: %.loc25_39.2: %i32 = converted @__global_init.%SubCharCharToI32.call.loc25, %.loc25_39.1 [concrete = constants.%int_1.0c6] +// CHECK:STDOUT: %i32.loc25: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %b: %i32 = value_binding b, %.loc25_39.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.dc0 = value_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.dc0 = value_binding_pattern c [concrete = constants.%c.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %IntLiteral.ref.loc26: type = name_ref IntLiteral, %IntLiteral [concrete = Core.IntLiteral] // CHECK:STDOUT: %.loc26_53.1: Core.IntLiteral = value_of_initializer @__global_init.%SubCharCharToIntLiteral.call.loc26 [concrete = constants.%int_-1.638] // CHECK:STDOUT: %.loc26_53.2: Core.IntLiteral = converted @__global_init.%SubCharCharToIntLiteral.call.loc26, %.loc26_53.1 [concrete = constants.%int_-1.638] +// CHECK:STDOUT: %IntLiteral.ref.loc26: type = name_ref IntLiteral, %IntLiteral [concrete = Core.IntLiteral] // CHECK:STDOUT: %c: Core.IntLiteral = value_binding c, %.loc26_53.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.6b6 = value_binding_pattern d [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.6b6 = value_binding_pattern d [concrete = constants.%d.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %i32.loc27: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc27_39.1: %i32 = value_of_initializer @__global_init.%SubCharCharToI32.call.loc27 [concrete = constants.%int_-1.4ef] // CHECK:STDOUT: %.loc27_39.2: %i32 = converted @__global_init.%SubCharCharToI32.call.loc27, %.loc27_39.1 [concrete = constants.%int_-1.4ef] +// CHECK:STDOUT: %i32.loc27: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %d: %i32 = value_binding d, %.loc27_39.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %max.patt: %pattern_type.6b6 = value_binding_pattern max [concrete] +// CHECK:STDOUT: %max.patt: %pattern_type.6b6 = value_binding_pattern max [concrete = constants.%max.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %i32.loc28: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc28_54.1: %i32 = value_of_initializer @__global_init.%SubCharCharToI32.call.loc28 [concrete = constants.%int_1114111] // CHECK:STDOUT: %.loc28_54.2: %i32 = converted @__global_init.%SubCharCharToI32.call.loc28, %.loc28_54.1 [concrete = constants.%int_1114111] +// CHECK:STDOUT: %i32.loc28: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %max: %i32 = value_binding max, %.loc28_54.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %min.patt: %pattern_type.6b6 = value_binding_pattern min [concrete] +// CHECK:STDOUT: %min.patt: %pattern_type.6b6 = value_binding_pattern min [concrete = constants.%min.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %i32.loc29: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc29_54.1: %i32 = value_of_initializer @__global_init.%SubCharCharToI32.call.loc29 [concrete = constants.%int_-1114111] // CHECK:STDOUT: %.loc29_54.2: %i32 = converted @__global_init.%SubCharCharToI32.call.loc29, %.loc29_54.1 [concrete = constants.%int_-1114111] +// CHECK:STDOUT: %i32.loc29: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %min: %i32 = value_binding min, %.loc29_54.2 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/builtins/char_literal/sub_int.carbon b/toolchain/check/testdata/builtins/char_literal/sub_int.carbon index f1f323cebb38..468463eb6668 100644 --- a/toolchain/check/testdata/builtins/char_literal/sub_int.carbon +++ b/toolchain/check/testdata/builtins/char_literal/sub_int.carbon @@ -62,37 +62,40 @@ let b: CharLiteral = SubCharInt('\u{10FFFF}', Negate(1)); // CHECK:STDOUT: %SubCharInt: %SubCharInt.type = struct_value () [concrete] // CHECK:STDOUT: %Negate.type: type = fn_type @Negate [concrete] // CHECK:STDOUT: %Negate: %Negate.type = struct_value () [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.8c6 = value_binding_pattern a [concrete] // CHECK:STDOUT: %.711: Core.CharLiteral = char_value U+0062 [concrete] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %.54f: Core.CharLiteral = char_value U+0061 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.8c6 = value_binding_pattern b [concrete] // CHECK:STDOUT: %.e28: Core.CharLiteral = char_value U+007F [concrete] // CHECK:STDOUT: %int_-1: Core.IntLiteral = int_value -1 [concrete] // CHECK:STDOUT: %.ae7: Core.CharLiteral = char_value U+0080 [concrete] +// CHECK:STDOUT: %c.patt.c30: %pattern_type.8c6 = value_binding_pattern c [concrete] // CHECK:STDOUT: %.ad8: Core.CharLiteral = char_value U+00FF [concrete] // CHECK:STDOUT: %.a8b: Core.CharLiteral = char_value U+0100 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.8c6 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.8c6 = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %CharLiteral.ref.loc13: type = name_ref CharLiteral, %CharLiteral [concrete = Core.CharLiteral] // CHECK:STDOUT: %.loc13_39.1: Core.CharLiteral = value_of_initializer @__global_init.%SubCharInt.call.loc13 [concrete = constants.%.54f] // CHECK:STDOUT: %.loc13_39.2: Core.CharLiteral = converted @__global_init.%SubCharInt.call.loc13, %.loc13_39.1 [concrete = constants.%.54f] +// CHECK:STDOUT: %CharLiteral.ref.loc13: type = name_ref CharLiteral, %CharLiteral [concrete = Core.CharLiteral] // CHECK:STDOUT: %a: Core.CharLiteral = value_binding a, %.loc13_39.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.8c6 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.8c6 = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %CharLiteral.ref.loc16: type = name_ref CharLiteral, %CharLiteral [concrete = Core.CharLiteral] // CHECK:STDOUT: %.loc16_52.1: Core.CharLiteral = value_of_initializer @__global_init.%SubCharInt.call.loc16 [concrete = constants.%.ae7] // CHECK:STDOUT: %.loc16_52.2: Core.CharLiteral = converted @__global_init.%SubCharInt.call.loc16, %.loc16_52.1 [concrete = constants.%.ae7] +// CHECK:STDOUT: %CharLiteral.ref.loc16: type = name_ref CharLiteral, %CharLiteral [concrete = Core.CharLiteral] // CHECK:STDOUT: %b: Core.CharLiteral = value_binding b, %.loc16_52.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.8c6 = value_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.8c6 = value_binding_pattern c [concrete = constants.%c.patt.c30] // CHECK:STDOUT: } -// CHECK:STDOUT: %CharLiteral.ref.loc17: type = name_ref CharLiteral, %CharLiteral [concrete = Core.CharLiteral] // CHECK:STDOUT: %.loc17_52.1: Core.CharLiteral = value_of_initializer @__global_init.%SubCharInt.call.loc17 [concrete = constants.%.a8b] // CHECK:STDOUT: %.loc17_52.2: Core.CharLiteral = converted @__global_init.%SubCharInt.call.loc17, %.loc17_52.1 [concrete = constants.%.a8b] +// CHECK:STDOUT: %CharLiteral.ref.loc17: type = name_ref CharLiteral, %CharLiteral [concrete = Core.CharLiteral] // CHECK:STDOUT: %c: Core.CharLiteral = value_binding c, %.loc17_52.2 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/builtins/float/convert.carbon b/toolchain/check/testdata/builtins/float/convert.carbon index 2729445c54c5..7b8611c6b3e5 100644 --- a/toolchain/check/testdata/builtins/float/convert.carbon +++ b/toolchain/check/testdata/builtins/float/convert.carbon @@ -123,6 +123,7 @@ let b: f64 = Float32ToFloat64(1.0e30); // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %pattern_type: type = pattern_type Core.FloatLiteral [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type = value_binding_pattern f [concrete] // CHECK:STDOUT: %FloatLiteralToFloatLiteral.type: type = fn_type @FloatLiteralToFloatLiteral [concrete] // CHECK:STDOUT: %FloatLiteralToFloatLiteral: %FloatLiteralToFloatLiteral.type = struct_value () [concrete] // CHECK:STDOUT: %float: Core.FloatLiteral = float_literal_value 10e-1 [concrete] @@ -135,11 +136,11 @@ let b: f64 = Float32ToFloat64(1.0e30); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %f.patt: %pattern_type = value_binding_pattern f [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type = value_binding_pattern f [concrete = constants.%f.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %FloatLiteral.ref: type = name_ref FloatLiteral, imports.%Main.FloatLiteral [concrete = Core.FloatLiteral] // CHECK:STDOUT: %.loc6_53.1: Core.FloatLiteral = value_of_initializer @__global_init.%FloatLiteralToFloatLiteral.call [concrete = constants.%float] // CHECK:STDOUT: %.loc6_53.2: Core.FloatLiteral = converted @__global_init.%FloatLiteralToFloatLiteral.call, %.loc6_53.1 [concrete = constants.%float] +// CHECK:STDOUT: %FloatLiteral.ref: type = name_ref FloatLiteral, imports.%Main.FloatLiteral [concrete = Core.FloatLiteral] // CHECK:STDOUT: %f: Core.FloatLiteral = value_binding f, %.loc6_53.2 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -157,14 +158,18 @@ let b: f64 = Float32ToFloat64(1.0e30); // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %f64.dc1: type = class_type @Float, @Float(%int_64) [concrete] // CHECK:STDOUT: %pattern_type.fb7: type = pattern_type %f64.dc1 [concrete] +// CHECK:STDOUT: %a.patt.ae8: %pattern_type.fb7 = value_binding_pattern a [concrete] // CHECK:STDOUT: %FloatLiteralToFloat64.type: type = fn_type @FloatLiteralToFloat64 [concrete] // CHECK:STDOUT: %FloatLiteralToFloat64: %FloatLiteralToFloat64.type = struct_value () [concrete] // CHECK:STDOUT: %float.1f7: Core.FloatLiteral = float_literal_value 0e-1 [concrete] // CHECK:STDOUT: %float.895: %f64.dc1 = float_value 0 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.fb7 = value_binding_pattern b [concrete] // CHECK:STDOUT: %float.6da: Core.FloatLiteral = float_literal_value 10e-1 [concrete] // CHECK:STDOUT: %float.3b9: %f64.dc1 = float_value 1 [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.fb7 = value_binding_pattern c [concrete] // CHECK:STDOUT: %float.12a: Core.FloatLiteral = float_literal_value 10e307 [concrete] // CHECK:STDOUT: %float.672: %f64.dc1 = float_value 1.0E+308 [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.fb7 = value_binding_pattern d [concrete] // CHECK:STDOUT: %float.82f: Core.FloatLiteral = float_literal_value 10e308 [concrete] // CHECK:STDOUT: %float.7ae: %f64.dc1 = float_value +Inf [concrete] // CHECK:STDOUT: } @@ -175,32 +180,32 @@ let b: f64 = Float32ToFloat64(1.0e30); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.fb7 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.fb7 = value_binding_pattern a [concrete = constants.%a.patt.ae8] // CHECK:STDOUT: } -// CHECK:STDOUT: %f64.loc6: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %.loc6_39.1: %f64.dc1 = value_of_initializer @__global_init.%FloatLiteralToFloat64.call.loc6 [concrete = constants.%float.895] // CHECK:STDOUT: %.loc6_39.2: %f64.dc1 = converted @__global_init.%FloatLiteralToFloat64.call.loc6, %.loc6_39.1 [concrete = constants.%float.895] +// CHECK:STDOUT: %f64.loc6: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %a: %f64.dc1 = value_binding a, %.loc6_39.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.fb7 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.fb7 = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %f64.loc7: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %.loc7_39.1: %f64.dc1 = value_of_initializer @__global_init.%FloatLiteralToFloat64.call.loc7 [concrete = constants.%float.3b9] // CHECK:STDOUT: %.loc7_39.2: %f64.dc1 = converted @__global_init.%FloatLiteralToFloat64.call.loc7, %.loc7_39.1 [concrete = constants.%float.3b9] +// CHECK:STDOUT: %f64.loc7: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %b: %f64.dc1 = value_binding b, %.loc7_39.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.fb7 = value_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.fb7 = value_binding_pattern c [concrete = constants.%c.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %f64.loc8: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %.loc8_43.1: %f64.dc1 = value_of_initializer @__global_init.%FloatLiteralToFloat64.call.loc8 [concrete = constants.%float.672] // CHECK:STDOUT: %.loc8_43.2: %f64.dc1 = converted @__global_init.%FloatLiteralToFloat64.call.loc8, %.loc8_43.1 [concrete = constants.%float.672] +// CHECK:STDOUT: %f64.loc8: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %c: %f64.dc1 = value_binding c, %.loc8_43.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.fb7 = value_binding_pattern d [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.fb7 = value_binding_pattern d [concrete = constants.%d.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %f64.loc10: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %.loc10_43.1: %f64.dc1 = value_of_initializer @__global_init.%FloatLiteralToFloat64.call.loc10 [concrete = constants.%float.7ae] // CHECK:STDOUT: %.loc10_43.2: %f64.dc1 = converted @__global_init.%FloatLiteralToFloat64.call.loc10, %.loc10_43.1 [concrete = constants.%float.7ae] +// CHECK:STDOUT: %f64.loc10: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %d: %f64.dc1 = value_binding d, %.loc10_43.2 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -227,14 +232,18 @@ let b: f64 = Float32ToFloat64(1.0e30); // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %f32.c73: type = class_type @Float, @Float(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.240: type = pattern_type %f32.c73 [concrete] +// CHECK:STDOUT: %a.patt.895: %pattern_type.240 = value_binding_pattern a [concrete] // CHECK:STDOUT: %FloatLiteralToFloat32.type: type = fn_type @FloatLiteralToFloat32 [concrete] // CHECK:STDOUT: %FloatLiteralToFloat32: %FloatLiteralToFloat32.type = struct_value () [concrete] // CHECK:STDOUT: %float.1f7: Core.FloatLiteral = float_literal_value 0e-1 [concrete] // CHECK:STDOUT: %float.5cd: %f32.c73 = float_value 0 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.240 = value_binding_pattern b [concrete] // CHECK:STDOUT: %float.6da: Core.FloatLiteral = float_literal_value 10e-1 [concrete] // CHECK:STDOUT: %float.943: %f32.c73 = float_value 1 [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.240 = value_binding_pattern c [concrete] // CHECK:STDOUT: %float.8d2: Core.FloatLiteral = float_literal_value 10e37 [concrete] // CHECK:STDOUT: %float.c47: %f32.c73 = float_value 9.99999968E+37 [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.240 = value_binding_pattern d [concrete] // CHECK:STDOUT: %float.cfc: Core.FloatLiteral = float_literal_value 10e38 [concrete] // CHECK:STDOUT: %float.021: %f32.c73 = float_value +Inf [concrete] // CHECK:STDOUT: } @@ -245,32 +254,32 @@ let b: f64 = Float32ToFloat64(1.0e30); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.240 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.240 = value_binding_pattern a [concrete = constants.%a.patt.895] // CHECK:STDOUT: } -// CHECK:STDOUT: %f32.loc6: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %.loc6_39.1: %f32.c73 = value_of_initializer @__global_init.%FloatLiteralToFloat32.call.loc6 [concrete = constants.%float.5cd] // CHECK:STDOUT: %.loc6_39.2: %f32.c73 = converted @__global_init.%FloatLiteralToFloat32.call.loc6, %.loc6_39.1 [concrete = constants.%float.5cd] +// CHECK:STDOUT: %f32.loc6: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %a: %f32.c73 = value_binding a, %.loc6_39.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.240 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.240 = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %f32.loc7: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %.loc7_39.1: %f32.c73 = value_of_initializer @__global_init.%FloatLiteralToFloat32.call.loc7 [concrete = constants.%float.943] // CHECK:STDOUT: %.loc7_39.2: %f32.c73 = converted @__global_init.%FloatLiteralToFloat32.call.loc7, %.loc7_39.1 [concrete = constants.%float.943] +// CHECK:STDOUT: %f32.loc7: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %b: %f32.c73 = value_binding b, %.loc7_39.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.240 = value_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.240 = value_binding_pattern c [concrete = constants.%c.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %f32.loc8: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %.loc8_42.1: %f32.c73 = value_of_initializer @__global_init.%FloatLiteralToFloat32.call.loc8 [concrete = constants.%float.c47] // CHECK:STDOUT: %.loc8_42.2: %f32.c73 = converted @__global_init.%FloatLiteralToFloat32.call.loc8, %.loc8_42.1 [concrete = constants.%float.c47] +// CHECK:STDOUT: %f32.loc8: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %c: %f32.c73 = value_binding c, %.loc8_42.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.240 = value_binding_pattern d [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.240 = value_binding_pattern d [concrete = constants.%d.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %f32.loc10: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %.loc10_42.1: %f32.c73 = value_of_initializer @__global_init.%FloatLiteralToFloat32.call.loc10 [concrete = constants.%float.021] // CHECK:STDOUT: %.loc10_42.2: %f32.c73 = converted @__global_init.%FloatLiteralToFloat32.call.loc10, %.loc10_42.1 [concrete = constants.%float.021] +// CHECK:STDOUT: %f32.loc10: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %d: %f32.c73 = value_binding d, %.loc10_42.2 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -297,6 +306,7 @@ let b: f64 = Float32ToFloat64(1.0e30); // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %f64.dc1: type = class_type @Float, @Float(%int_64) [concrete] // CHECK:STDOUT: %pattern_type.fb7: type = pattern_type %f64.dc1 [concrete] +// CHECK:STDOUT: %a.patt.ae8: %pattern_type.fb7 = value_binding_pattern a [concrete] // CHECK:STDOUT: %Float64ToFloat64.type: type = fn_type @Float64ToFloat64 [concrete] // CHECK:STDOUT: %Float64ToFloat64: %Float64ToFloat64.type = struct_value () [concrete] // CHECK:STDOUT: %float.1f7: Core.FloatLiteral = float_literal_value 0e-1 [concrete] @@ -314,10 +324,12 @@ let b: f64 = Float32ToFloat64(1.0e30); // CHECK:STDOUT: %Core.FloatLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.FloatLiteral.as.ImplicitAs.impl.Convert.cf0, @Core.FloatLiteral.as.ImplicitAs.impl.Convert(%int_64) [concrete] // CHECK:STDOUT: %bound_method.819: = bound_method %float.1f7, %Core.FloatLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %float.895: %f64.dc1 = float_value 0 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.fb7 = value_binding_pattern b [concrete] // CHECK:STDOUT: %float.6da: Core.FloatLiteral = float_literal_value 10e-1 [concrete] // CHECK:STDOUT: %Core.FloatLiteral.as.ImplicitAs.impl.Convert.bound.757: = bound_method %float.6da, %Core.FloatLiteral.as.ImplicitAs.impl.Convert.cf0 [concrete] // CHECK:STDOUT: %bound_method.143: = bound_method %float.6da, %Core.FloatLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %float.3b9: %f64.dc1 = float_value 1 [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.fb7 = value_binding_pattern c [concrete] // CHECK:STDOUT: %float.12a: Core.FloatLiteral = float_literal_value 10e307 [concrete] // CHECK:STDOUT: %Core.FloatLiteral.as.ImplicitAs.impl.Convert.bound.2af: = bound_method %float.12a, %Core.FloatLiteral.as.ImplicitAs.impl.Convert.cf0 [concrete] // CHECK:STDOUT: %bound_method.18f: = bound_method %float.12a, %Core.FloatLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] @@ -332,25 +344,25 @@ let b: f64 = Float32ToFloat64(1.0e30); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.fb7 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.fb7 = value_binding_pattern a [concrete = constants.%a.patt.ae8] // CHECK:STDOUT: } -// CHECK:STDOUT: %f64.loc6: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %.loc6_34.1: %f64.dc1 = value_of_initializer @__global_init.%Float64ToFloat64.call.loc6 [concrete = constants.%float.895] // CHECK:STDOUT: %.loc6_34.2: %f64.dc1 = converted @__global_init.%Float64ToFloat64.call.loc6, %.loc6_34.1 [concrete = constants.%float.895] +// CHECK:STDOUT: %f64.loc6: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %a: %f64.dc1 = value_binding a, %.loc6_34.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.fb7 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.fb7 = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %f64.loc7: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %.loc7_34.1: %f64.dc1 = value_of_initializer @__global_init.%Float64ToFloat64.call.loc7 [concrete = constants.%float.3b9] // CHECK:STDOUT: %.loc7_34.2: %f64.dc1 = converted @__global_init.%Float64ToFloat64.call.loc7, %.loc7_34.1 [concrete = constants.%float.3b9] +// CHECK:STDOUT: %f64.loc7: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %b: %f64.dc1 = value_binding b, %.loc7_34.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.fb7 = value_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.fb7 = value_binding_pattern c [concrete = constants.%c.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %f64.loc8: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %.loc8_38.1: %f64.dc1 = value_of_initializer @__global_init.%Float64ToFloat64.call.loc8 [concrete = constants.%float.672] // CHECK:STDOUT: %.loc8_38.2: %f64.dc1 = converted @__global_init.%Float64ToFloat64.call.loc8, %.loc8_38.1 [concrete = constants.%float.672] +// CHECK:STDOUT: %f64.loc8: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %c: %f64.dc1 = value_binding c, %.loc8_38.2 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -395,6 +407,7 @@ let b: f64 = Float32ToFloat64(1.0e30); // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %f32.c73: type = class_type @Float, @Float(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.240: type = pattern_type %f32.c73 [concrete] +// CHECK:STDOUT: %a.patt.895: %pattern_type.240 = value_binding_pattern a [concrete] // CHECK:STDOUT: %Float32ToFloat32.type: type = fn_type @Float32ToFloat32 [concrete] // CHECK:STDOUT: %Float32ToFloat32: %Float32ToFloat32.type = struct_value () [concrete] // CHECK:STDOUT: %float.1f7: Core.FloatLiteral = float_literal_value 0e-1 [concrete] @@ -412,10 +425,12 @@ let b: f64 = Float32ToFloat64(1.0e30); // CHECK:STDOUT: %Core.FloatLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.FloatLiteral.as.ImplicitAs.impl.Convert.b37, @Core.FloatLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete] // CHECK:STDOUT: %bound_method.ff6: = bound_method %float.1f7, %Core.FloatLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %float.5cd: %f32.c73 = float_value 0 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.240 = value_binding_pattern b [concrete] // CHECK:STDOUT: %float.6da: Core.FloatLiteral = float_literal_value 10e-1 [concrete] // CHECK:STDOUT: %Core.FloatLiteral.as.ImplicitAs.impl.Convert.bound.565: = bound_method %float.6da, %Core.FloatLiteral.as.ImplicitAs.impl.Convert.b37 [concrete] // CHECK:STDOUT: %bound_method.3e4: = bound_method %float.6da, %Core.FloatLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %float.943: %f32.c73 = float_value 1 [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.240 = value_binding_pattern c [concrete] // CHECK:STDOUT: %float.8d2: Core.FloatLiteral = float_literal_value 10e37 [concrete] // CHECK:STDOUT: %Core.FloatLiteral.as.ImplicitAs.impl.Convert.bound.b87: = bound_method %float.8d2, %Core.FloatLiteral.as.ImplicitAs.impl.Convert.b37 [concrete] // CHECK:STDOUT: %bound_method.4fc: = bound_method %float.8d2, %Core.FloatLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] @@ -430,25 +445,25 @@ let b: f64 = Float32ToFloat64(1.0e30); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.240 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.240 = value_binding_pattern a [concrete = constants.%a.patt.895] // CHECK:STDOUT: } -// CHECK:STDOUT: %f32.loc6: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %.loc6_34.1: %f32.c73 = value_of_initializer @__global_init.%Float32ToFloat32.call.loc6 [concrete = constants.%float.5cd] // CHECK:STDOUT: %.loc6_34.2: %f32.c73 = converted @__global_init.%Float32ToFloat32.call.loc6, %.loc6_34.1 [concrete = constants.%float.5cd] +// CHECK:STDOUT: %f32.loc6: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %a: %f32.c73 = value_binding a, %.loc6_34.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.240 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.240 = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %f32.loc7: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %.loc7_34.1: %f32.c73 = value_of_initializer @__global_init.%Float32ToFloat32.call.loc7 [concrete = constants.%float.943] // CHECK:STDOUT: %.loc7_34.2: %f32.c73 = converted @__global_init.%Float32ToFloat32.call.loc7, %.loc7_34.1 [concrete = constants.%float.943] +// CHECK:STDOUT: %f32.loc7: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %b: %f32.c73 = value_binding b, %.loc7_34.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.240 = value_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.240 = value_binding_pattern c [concrete = constants.%c.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %f32.loc8: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %.loc8_37.1: %f32.c73 = value_of_initializer @__global_init.%Float32ToFloat32.call.loc8 [concrete = constants.%float.c47] // CHECK:STDOUT: %.loc8_37.2: %f32.c73 = converted @__global_init.%Float32ToFloat32.call.loc8, %.loc8_37.1 [concrete = constants.%float.c47] +// CHECK:STDOUT: %f32.loc8: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %c: %f32.c73 = value_binding c, %.loc8_37.2 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -493,6 +508,7 @@ let b: f64 = Float32ToFloat64(1.0e30); // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %f32.c73: type = class_type @Float, @Float(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.240: type = pattern_type %f32.c73 [concrete] +// CHECK:STDOUT: %a.patt.895: %pattern_type.240 = value_binding_pattern a [concrete] // CHECK:STDOUT: %Float64ToFloat32.type: type = fn_type @Float64ToFloat32 [concrete] // CHECK:STDOUT: %Float64ToFloat32: %Float64ToFloat32.type = struct_value () [concrete] // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] @@ -513,6 +529,7 @@ let b: f64 = Float32ToFloat64(1.0e30); // CHECK:STDOUT: %bound_method.143: = bound_method %float.6da, %Core.FloatLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %float.3b9: %f64.dc1 = float_value 1 [concrete] // CHECK:STDOUT: %float.943: %f32.c73 = float_value 1 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.240 = value_binding_pattern b [concrete] // CHECK:STDOUT: %float.cfc: Core.FloatLiteral = float_literal_value 10e38 [concrete] // CHECK:STDOUT: %Core.FloatLiteral.as.ImplicitAs.impl.Convert.bound.b1e: = bound_method %float.cfc, %Core.FloatLiteral.as.ImplicitAs.impl.Convert.cf0 [concrete] // CHECK:STDOUT: %bound_method.ac6: = bound_method %float.cfc, %Core.FloatLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] @@ -528,18 +545,18 @@ let b: f64 = Float32ToFloat64(1.0e30); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.240 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.240 = value_binding_pattern a [concrete = constants.%a.patt.895] // CHECK:STDOUT: } -// CHECK:STDOUT: %f32.loc7: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %.loc7_34.1: %f32.c73 = value_of_initializer @__global_init.%Float64ToFloat32.call.loc7 [concrete = constants.%float.943] // CHECK:STDOUT: %.loc7_34.2: %f32.c73 = converted @__global_init.%Float64ToFloat32.call.loc7, %.loc7_34.1 [concrete = constants.%float.943] +// CHECK:STDOUT: %f32.loc7: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %a: %f32.c73 = value_binding a, %.loc7_34.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.240 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.240 = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %f32.loc9: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %.loc9_37.1: %f32.c73 = value_of_initializer @__global_init.%Float64ToFloat32.call.loc9 [concrete = constants.%float.021] // CHECK:STDOUT: %.loc9_37.2: %f32.c73 = converted @__global_init.%Float64ToFloat32.call.loc9, %.loc9_37.1 [concrete = constants.%float.021] +// CHECK:STDOUT: %f32.loc9: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %b: %f32.c73 = value_binding b, %.loc9_37.2 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -574,6 +591,7 @@ let b: f64 = Float32ToFloat64(1.0e30); // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %f64.dc1: type = class_type @Float, @Float(%int_64) [concrete] // CHECK:STDOUT: %pattern_type.fb7: type = pattern_type %f64.dc1 [concrete] +// CHECK:STDOUT: %a.patt.ae8: %pattern_type.fb7 = value_binding_pattern a [concrete] // CHECK:STDOUT: %Float32ToFloat64.type: type = fn_type @Float32ToFloat64 [concrete] // CHECK:STDOUT: %Float32ToFloat64: %Float32ToFloat64.type = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] @@ -594,6 +612,7 @@ let b: f64 = Float32ToFloat64(1.0e30); // CHECK:STDOUT: %bound_method.3e4: = bound_method %float.6da, %Core.FloatLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %float.943: %f32.c73 = float_value 1 [concrete] // CHECK:STDOUT: %float.3b9: %f64.dc1 = float_value 1 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.fb7 = value_binding_pattern b [concrete] // CHECK:STDOUT: %float.c02: Core.FloatLiteral = float_literal_value 10e29 [concrete] // CHECK:STDOUT: %Core.FloatLiteral.as.ImplicitAs.impl.Convert.bound.fc1: = bound_method %float.c02, %Core.FloatLiteral.as.ImplicitAs.impl.Convert.b37 [concrete] // CHECK:STDOUT: %bound_method.1c7: = bound_method %float.c02, %Core.FloatLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] @@ -609,18 +628,18 @@ let b: f64 = Float32ToFloat64(1.0e30); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.fb7 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.fb7 = value_binding_pattern a [concrete = constants.%a.patt.ae8] // CHECK:STDOUT: } -// CHECK:STDOUT: %f64.loc7: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %.loc7_34.1: %f64.dc1 = value_of_initializer @__global_init.%Float32ToFloat64.call.loc7 [concrete = constants.%float.3b9] // CHECK:STDOUT: %.loc7_34.2: %f64.dc1 = converted @__global_init.%Float32ToFloat64.call.loc7, %.loc7_34.1 [concrete = constants.%float.3b9] +// CHECK:STDOUT: %f64.loc7: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %a: %f64.dc1 = value_binding a, %.loc7_34.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.fb7 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.fb7 = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %f64.loc8: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %.loc8_37.1: %f64.dc1 = value_of_initializer @__global_init.%Float32ToFloat64.call.loc8 [concrete = constants.%float.84e] // CHECK:STDOUT: %.loc8_37.2: %f64.dc1 = converted @__global_init.%Float32ToFloat64.call.loc8, %.loc8_37.1 [concrete = constants.%float.84e] +// CHECK:STDOUT: %f64.loc8: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %b: %f64.dc1 = value_binding b, %.loc8_37.2 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/builtins/float/convert_checked.carbon b/toolchain/check/testdata/builtins/float/convert_checked.carbon index 121a920a668f..dbe88755b19d 100644 --- a/toolchain/check/testdata/builtins/float/convert_checked.carbon +++ b/toolchain/check/testdata/builtins/float/convert_checked.carbon @@ -159,6 +159,7 @@ let convert_not_constant: f64 = Float64ToFloat64(not_constant_64); // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %pattern_type: type = pattern_type Core.FloatLiteral [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type = value_binding_pattern f [concrete] // CHECK:STDOUT: %FloatLiteralToFloatLiteral.type: type = fn_type @FloatLiteralToFloatLiteral [concrete] // CHECK:STDOUT: %FloatLiteralToFloatLiteral: %FloatLiteralToFloatLiteral.type = struct_value () [concrete] // CHECK:STDOUT: %float: Core.FloatLiteral = float_literal_value 10e-1 [concrete] @@ -171,11 +172,11 @@ let convert_not_constant: f64 = Float64ToFloat64(not_constant_64); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %f.patt: %pattern_type = value_binding_pattern f [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type = value_binding_pattern f [concrete = constants.%f.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %FloatLiteral.ref: type = name_ref FloatLiteral, imports.%Main.FloatLiteral [concrete = Core.FloatLiteral] // CHECK:STDOUT: %.loc6_53.1: Core.FloatLiteral = value_of_initializer @__global_init.%FloatLiteralToFloatLiteral.call [concrete = constants.%float] // CHECK:STDOUT: %.loc6_53.2: Core.FloatLiteral = converted @__global_init.%FloatLiteralToFloatLiteral.call, %.loc6_53.1 [concrete = constants.%float] +// CHECK:STDOUT: %FloatLiteral.ref: type = name_ref FloatLiteral, imports.%Main.FloatLiteral [concrete = Core.FloatLiteral] // CHECK:STDOUT: %f: Core.FloatLiteral = value_binding f, %.loc6_53.2 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -193,12 +194,15 @@ let convert_not_constant: f64 = Float64ToFloat64(not_constant_64); // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %f64.dc1: type = class_type @Float, @Float(%int_64) [concrete] // CHECK:STDOUT: %pattern_type.fb7: type = pattern_type %f64.dc1 [concrete] +// CHECK:STDOUT: %a.patt.ae8: %pattern_type.fb7 = value_binding_pattern a [concrete] // CHECK:STDOUT: %FloatLiteralToFloat64.type: type = fn_type @FloatLiteralToFloat64 [concrete] // CHECK:STDOUT: %FloatLiteralToFloat64: %FloatLiteralToFloat64.type = struct_value () [concrete] // CHECK:STDOUT: %float.1f7: Core.FloatLiteral = float_literal_value 0e-1 [concrete] // CHECK:STDOUT: %float.895: %f64.dc1 = float_value 0 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.fb7 = value_binding_pattern b [concrete] // CHECK:STDOUT: %float.6da: Core.FloatLiteral = float_literal_value 10e-1 [concrete] // CHECK:STDOUT: %float.3b9: %f64.dc1 = float_value 1 [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.fb7 = value_binding_pattern c [concrete] // CHECK:STDOUT: %float.12a: Core.FloatLiteral = float_literal_value 10e307 [concrete] // CHECK:STDOUT: %float.672: %f64.dc1 = float_value 1.0E+308 [concrete] // CHECK:STDOUT: } @@ -209,25 +213,25 @@ let convert_not_constant: f64 = Float64ToFloat64(not_constant_64); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.fb7 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.fb7 = value_binding_pattern a [concrete = constants.%a.patt.ae8] // CHECK:STDOUT: } -// CHECK:STDOUT: %f64.loc6: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %.loc6_39.1: %f64.dc1 = value_of_initializer @__global_init.%FloatLiteralToFloat64.call.loc6 [concrete = constants.%float.895] // CHECK:STDOUT: %.loc6_39.2: %f64.dc1 = converted @__global_init.%FloatLiteralToFloat64.call.loc6, %.loc6_39.1 [concrete = constants.%float.895] +// CHECK:STDOUT: %f64.loc6: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %a: %f64.dc1 = value_binding a, %.loc6_39.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.fb7 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.fb7 = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %f64.loc7: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %.loc7_39.1: %f64.dc1 = value_of_initializer @__global_init.%FloatLiteralToFloat64.call.loc7 [concrete = constants.%float.3b9] // CHECK:STDOUT: %.loc7_39.2: %f64.dc1 = converted @__global_init.%FloatLiteralToFloat64.call.loc7, %.loc7_39.1 [concrete = constants.%float.3b9] +// CHECK:STDOUT: %f64.loc7: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %b: %f64.dc1 = value_binding b, %.loc7_39.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.fb7 = value_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.fb7 = value_binding_pattern c [concrete = constants.%c.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %f64.loc8: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %.loc8_43.1: %f64.dc1 = value_of_initializer @__global_init.%FloatLiteralToFloat64.call.loc8 [concrete = constants.%float.672] // CHECK:STDOUT: %.loc8_43.2: %f64.dc1 = converted @__global_init.%FloatLiteralToFloat64.call.loc8, %.loc8_43.1 [concrete = constants.%float.672] +// CHECK:STDOUT: %f64.loc8: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %c: %f64.dc1 = value_binding c, %.loc8_43.2 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -251,12 +255,15 @@ let convert_not_constant: f64 = Float64ToFloat64(not_constant_64); // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %f32.c73: type = class_type @Float, @Float(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.240: type = pattern_type %f32.c73 [concrete] +// CHECK:STDOUT: %a.patt.895: %pattern_type.240 = value_binding_pattern a [concrete] // CHECK:STDOUT: %FloatLiteralToFloat32.type: type = fn_type @FloatLiteralToFloat32 [concrete] // CHECK:STDOUT: %FloatLiteralToFloat32: %FloatLiteralToFloat32.type = struct_value () [concrete] // CHECK:STDOUT: %float.1f7: Core.FloatLiteral = float_literal_value 0e-1 [concrete] // CHECK:STDOUT: %float.5cd: %f32.c73 = float_value 0 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.240 = value_binding_pattern b [concrete] // CHECK:STDOUT: %float.6da: Core.FloatLiteral = float_literal_value 10e-1 [concrete] // CHECK:STDOUT: %float.943: %f32.c73 = float_value 1 [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.240 = value_binding_pattern c [concrete] // CHECK:STDOUT: %float.8d2: Core.FloatLiteral = float_literal_value 10e37 [concrete] // CHECK:STDOUT: %float.c47: %f32.c73 = float_value 9.99999968E+37 [concrete] // CHECK:STDOUT: } @@ -267,25 +274,25 @@ let convert_not_constant: f64 = Float64ToFloat64(not_constant_64); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.240 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.240 = value_binding_pattern a [concrete = constants.%a.patt.895] // CHECK:STDOUT: } -// CHECK:STDOUT: %f32.loc6: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %.loc6_39.1: %f32.c73 = value_of_initializer @__global_init.%FloatLiteralToFloat32.call.loc6 [concrete = constants.%float.5cd] // CHECK:STDOUT: %.loc6_39.2: %f32.c73 = converted @__global_init.%FloatLiteralToFloat32.call.loc6, %.loc6_39.1 [concrete = constants.%float.5cd] +// CHECK:STDOUT: %f32.loc6: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %a: %f32.c73 = value_binding a, %.loc6_39.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.240 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.240 = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %f32.loc7: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %.loc7_39.1: %f32.c73 = value_of_initializer @__global_init.%FloatLiteralToFloat32.call.loc7 [concrete = constants.%float.943] // CHECK:STDOUT: %.loc7_39.2: %f32.c73 = converted @__global_init.%FloatLiteralToFloat32.call.loc7, %.loc7_39.1 [concrete = constants.%float.943] +// CHECK:STDOUT: %f32.loc7: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %b: %f32.c73 = value_binding b, %.loc7_39.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.240 = value_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.240 = value_binding_pattern c [concrete = constants.%c.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %f32.loc8: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %.loc8_42.1: %f32.c73 = value_of_initializer @__global_init.%FloatLiteralToFloat32.call.loc8 [concrete = constants.%float.c47] // CHECK:STDOUT: %.loc8_42.2: %f32.c73 = converted @__global_init.%FloatLiteralToFloat32.call.loc8, %.loc8_42.1 [concrete = constants.%float.c47] +// CHECK:STDOUT: %f32.loc8: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %c: %f32.c73 = value_binding c, %.loc8_42.2 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -309,6 +316,7 @@ let convert_not_constant: f64 = Float64ToFloat64(not_constant_64); // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %f64.dc1: type = class_type @Float, @Float(%int_64) [concrete] // CHECK:STDOUT: %pattern_type.fb7: type = pattern_type %f64.dc1 [concrete] +// CHECK:STDOUT: %a.patt.ae8: %pattern_type.fb7 = value_binding_pattern a [concrete] // CHECK:STDOUT: %Float64ToFloat64.type: type = fn_type @Float64ToFloat64 [concrete] // CHECK:STDOUT: %Float64ToFloat64: %Float64ToFloat64.type = struct_value () [concrete] // CHECK:STDOUT: %float.1f7: Core.FloatLiteral = float_literal_value 0e-1 [concrete] @@ -326,10 +334,12 @@ let convert_not_constant: f64 = Float64ToFloat64(not_constant_64); // CHECK:STDOUT: %Core.FloatLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.FloatLiteral.as.ImplicitAs.impl.Convert.cf0, @Core.FloatLiteral.as.ImplicitAs.impl.Convert(%int_64) [concrete] // CHECK:STDOUT: %bound_method.819: = bound_method %float.1f7, %Core.FloatLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %float.895: %f64.dc1 = float_value 0 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.fb7 = value_binding_pattern b [concrete] // CHECK:STDOUT: %float.6da: Core.FloatLiteral = float_literal_value 10e-1 [concrete] // CHECK:STDOUT: %Core.FloatLiteral.as.ImplicitAs.impl.Convert.bound.757: = bound_method %float.6da, %Core.FloatLiteral.as.ImplicitAs.impl.Convert.cf0 [concrete] // CHECK:STDOUT: %bound_method.143: = bound_method %float.6da, %Core.FloatLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %float.3b9: %f64.dc1 = float_value 1 [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.fb7 = value_binding_pattern c [concrete] // CHECK:STDOUT: %float.12a: Core.FloatLiteral = float_literal_value 10e307 [concrete] // CHECK:STDOUT: %Core.FloatLiteral.as.ImplicitAs.impl.Convert.bound.2af: = bound_method %float.12a, %Core.FloatLiteral.as.ImplicitAs.impl.Convert.cf0 [concrete] // CHECK:STDOUT: %bound_method.18f: = bound_method %float.12a, %Core.FloatLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] @@ -344,25 +354,25 @@ let convert_not_constant: f64 = Float64ToFloat64(not_constant_64); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.fb7 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.fb7 = value_binding_pattern a [concrete = constants.%a.patt.ae8] // CHECK:STDOUT: } -// CHECK:STDOUT: %f64.loc6: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %.loc6_34.1: %f64.dc1 = value_of_initializer @__global_init.%Float64ToFloat64.call.loc6 [concrete = constants.%float.895] // CHECK:STDOUT: %.loc6_34.2: %f64.dc1 = converted @__global_init.%Float64ToFloat64.call.loc6, %.loc6_34.1 [concrete = constants.%float.895] +// CHECK:STDOUT: %f64.loc6: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %a: %f64.dc1 = value_binding a, %.loc6_34.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.fb7 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.fb7 = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %f64.loc7: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %.loc7_34.1: %f64.dc1 = value_of_initializer @__global_init.%Float64ToFloat64.call.loc7 [concrete = constants.%float.3b9] // CHECK:STDOUT: %.loc7_34.2: %f64.dc1 = converted @__global_init.%Float64ToFloat64.call.loc7, %.loc7_34.1 [concrete = constants.%float.3b9] +// CHECK:STDOUT: %f64.loc7: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %b: %f64.dc1 = value_binding b, %.loc7_34.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.fb7 = value_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.fb7 = value_binding_pattern c [concrete = constants.%c.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %f64.loc8: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %.loc8_38.1: %f64.dc1 = value_of_initializer @__global_init.%Float64ToFloat64.call.loc8 [concrete = constants.%float.672] // CHECK:STDOUT: %.loc8_38.2: %f64.dc1 = converted @__global_init.%Float64ToFloat64.call.loc8, %.loc8_38.1 [concrete = constants.%float.672] +// CHECK:STDOUT: %f64.loc8: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %c: %f64.dc1 = value_binding c, %.loc8_38.2 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -407,6 +417,7 @@ let convert_not_constant: f64 = Float64ToFloat64(not_constant_64); // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %f32.c73: type = class_type @Float, @Float(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.240: type = pattern_type %f32.c73 [concrete] +// CHECK:STDOUT: %a.patt.895: %pattern_type.240 = value_binding_pattern a [concrete] // CHECK:STDOUT: %Float32ToFloat32.type: type = fn_type @Float32ToFloat32 [concrete] // CHECK:STDOUT: %Float32ToFloat32: %Float32ToFloat32.type = struct_value () [concrete] // CHECK:STDOUT: %float.1f7: Core.FloatLiteral = float_literal_value 0e-1 [concrete] @@ -424,10 +435,12 @@ let convert_not_constant: f64 = Float64ToFloat64(not_constant_64); // CHECK:STDOUT: %Core.FloatLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.FloatLiteral.as.ImplicitAs.impl.Convert.b37, @Core.FloatLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete] // CHECK:STDOUT: %bound_method.ff6: = bound_method %float.1f7, %Core.FloatLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %float.5cd: %f32.c73 = float_value 0 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.240 = value_binding_pattern b [concrete] // CHECK:STDOUT: %float.6da: Core.FloatLiteral = float_literal_value 10e-1 [concrete] // CHECK:STDOUT: %Core.FloatLiteral.as.ImplicitAs.impl.Convert.bound.565: = bound_method %float.6da, %Core.FloatLiteral.as.ImplicitAs.impl.Convert.b37 [concrete] // CHECK:STDOUT: %bound_method.3e4: = bound_method %float.6da, %Core.FloatLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %float.943: %f32.c73 = float_value 1 [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.240 = value_binding_pattern c [concrete] // CHECK:STDOUT: %float.8d2: Core.FloatLiteral = float_literal_value 10e37 [concrete] // CHECK:STDOUT: %Core.FloatLiteral.as.ImplicitAs.impl.Convert.bound.b87: = bound_method %float.8d2, %Core.FloatLiteral.as.ImplicitAs.impl.Convert.b37 [concrete] // CHECK:STDOUT: %bound_method.4fc: = bound_method %float.8d2, %Core.FloatLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] @@ -442,25 +455,25 @@ let convert_not_constant: f64 = Float64ToFloat64(not_constant_64); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.240 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.240 = value_binding_pattern a [concrete = constants.%a.patt.895] // CHECK:STDOUT: } -// CHECK:STDOUT: %f32.loc6: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %.loc6_34.1: %f32.c73 = value_of_initializer @__global_init.%Float32ToFloat32.call.loc6 [concrete = constants.%float.5cd] // CHECK:STDOUT: %.loc6_34.2: %f32.c73 = converted @__global_init.%Float32ToFloat32.call.loc6, %.loc6_34.1 [concrete = constants.%float.5cd] +// CHECK:STDOUT: %f32.loc6: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %a: %f32.c73 = value_binding a, %.loc6_34.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.240 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.240 = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %f32.loc7: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %.loc7_34.1: %f32.c73 = value_of_initializer @__global_init.%Float32ToFloat32.call.loc7 [concrete = constants.%float.943] // CHECK:STDOUT: %.loc7_34.2: %f32.c73 = converted @__global_init.%Float32ToFloat32.call.loc7, %.loc7_34.1 [concrete = constants.%float.943] +// CHECK:STDOUT: %f32.loc7: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %b: %f32.c73 = value_binding b, %.loc7_34.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.240 = value_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.240 = value_binding_pattern c [concrete = constants.%c.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %f32.loc8: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %.loc8_37.1: %f32.c73 = value_of_initializer @__global_init.%Float32ToFloat32.call.loc8 [concrete = constants.%float.c47] // CHECK:STDOUT: %.loc8_37.2: %f32.c73 = converted @__global_init.%Float32ToFloat32.call.loc8, %.loc8_37.1 [concrete = constants.%float.c47] +// CHECK:STDOUT: %f32.loc8: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %c: %f32.c73 = value_binding c, %.loc8_37.2 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -505,6 +518,7 @@ let convert_not_constant: f64 = Float64ToFloat64(not_constant_64); // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %f32.c73: type = class_type @Float, @Float(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.240: type = pattern_type %f32.c73 [concrete] +// CHECK:STDOUT: %a.patt.895: %pattern_type.240 = value_binding_pattern a [concrete] // CHECK:STDOUT: %Float64ToFloat32.type: type = fn_type @Float64ToFloat32 [concrete] // CHECK:STDOUT: %Float64ToFloat32: %Float64ToFloat32.type = struct_value () [concrete] // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] @@ -535,11 +549,11 @@ let convert_not_constant: f64 = Float64ToFloat64(not_constant_64); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.240 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.240 = value_binding_pattern a [concrete = constants.%a.patt.895] // CHECK:STDOUT: } -// CHECK:STDOUT: %f32: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %.loc6_34.1: %f32.c73 = value_of_initializer @__global_init.%Float64ToFloat32.call [concrete = constants.%float.943] // CHECK:STDOUT: %.loc6_34.2: %f32.c73 = converted @__global_init.%Float64ToFloat32.call, %.loc6_34.1 [concrete = constants.%float.943] +// CHECK:STDOUT: %f32: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %a: %f32.c73 = value_binding a, %.loc6_34.2 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -564,6 +578,7 @@ let convert_not_constant: f64 = Float64ToFloat64(not_constant_64); // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %f32.c73: type = class_type @Float, @Float(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.240: type = pattern_type %f32.c73 [concrete] +// CHECK:STDOUT: %a.patt.895: %pattern_type.240 = value_binding_pattern a [concrete] // CHECK:STDOUT: %Float64ToFloat32.type: type = fn_type @Float64ToFloat32 [concrete] // CHECK:STDOUT: %Float64ToFloat32: %Float64ToFloat32.type = struct_value () [concrete] // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] @@ -584,9 +599,11 @@ let convert_not_constant: f64 = Float64ToFloat64(not_constant_64); // CHECK:STDOUT: %Core.FloatLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.FloatLiteral.as.ImplicitAs.impl.Convert.cf0, @Core.FloatLiteral.as.ImplicitAs.impl.Convert(%int_64) [concrete] // CHECK:STDOUT: %bound_method: = bound_method %float.cfcfd2.1, %Core.FloatLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %float.7b6: %f64.dc1 = float_value 9.9999999999999994E+38 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.240 = value_binding_pattern b [concrete] // CHECK:STDOUT: %FloatLiteralToFloat32.type: type = fn_type @FloatLiteralToFloat32 [concrete] // CHECK:STDOUT: %FloatLiteralToFloat32: %FloatLiteralToFloat32.type = struct_value () [concrete] // CHECK:STDOUT: %float.cfcfd2.2: Core.FloatLiteral = float_literal_value 10e38 [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.fb7 = value_binding_pattern c [concrete] // CHECK:STDOUT: %FloatLiteralToFloat64.type: type = fn_type @FloatLiteralToFloat64 [concrete] // CHECK:STDOUT: %FloatLiteralToFloat64: %FloatLiteralToFloat64.type = struct_value () [concrete] // CHECK:STDOUT: %float.82f: Core.FloatLiteral = float_literal_value 10e308 [concrete] @@ -602,25 +619,25 @@ let convert_not_constant: f64 = Float64ToFloat64(not_constant_64); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.240 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.240 = value_binding_pattern a [concrete = constants.%a.patt.895] // CHECK:STDOUT: } -// CHECK:STDOUT: %f32.loc11: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %.loc11_37.1: %f32.c73 = value_of_initializer @__global_init.%Float64ToFloat32.call [concrete = ] // CHECK:STDOUT: %.loc11_37.2: %f32.c73 = converted @__global_init.%Float64ToFloat32.call, %.loc11_37.1 [concrete = ] +// CHECK:STDOUT: %f32.loc11: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %a: %f32.c73 = value_binding a, %.loc11_37.2 [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.240 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.240 = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %f32.loc16: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %.loc16_42.1: %f32.c73 = value_of_initializer @__global_init.%FloatLiteralToFloat32.call [concrete = ] // CHECK:STDOUT: %.loc16_42.2: %f32.c73 = converted @__global_init.%FloatLiteralToFloat32.call, %.loc16_42.1 [concrete = ] +// CHECK:STDOUT: %f32.loc16: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %b: %f32.c73 = value_binding b, %.loc16_42.2 [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.fb7 = value_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.fb7 = value_binding_pattern c [concrete = constants.%c.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %f64: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %.loc21_43.1: %f64.dc1 = value_of_initializer @__global_init.%FloatLiteralToFloat64.call [concrete = ] // CHECK:STDOUT: %.loc21_43.2: %f64.dc1 = converted @__global_init.%FloatLiteralToFloat64.call, %.loc21_43.1 [concrete = ] +// CHECK:STDOUT: %f64: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %c: %f64.dc1 = value_binding c, %.loc21_43.2 [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -651,6 +668,7 @@ let convert_not_constant: f64 = Float64ToFloat64(not_constant_64); // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %f64.dc1: type = class_type @Float, @Float(%int_64) [concrete] // CHECK:STDOUT: %pattern_type.fb7: type = pattern_type %f64.dc1 [concrete] +// CHECK:STDOUT: %a.patt.ae8: %pattern_type.fb7 = value_binding_pattern a [concrete] // CHECK:STDOUT: %Float32ToFloat64.type: type = fn_type @Float32ToFloat64 [concrete] // CHECK:STDOUT: %Float32ToFloat64: %Float32ToFloat64.type = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] @@ -671,6 +689,7 @@ let convert_not_constant: f64 = Float64ToFloat64(not_constant_64); // CHECK:STDOUT: %bound_method.3e4: = bound_method %float.6da, %Core.FloatLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %float.943: %f32.c73 = float_value 1 [concrete] // CHECK:STDOUT: %float.3b9: %f64.dc1 = float_value 1 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.fb7 = value_binding_pattern b [concrete] // CHECK:STDOUT: %float.c02: Core.FloatLiteral = float_literal_value 10e29 [concrete] // CHECK:STDOUT: %Core.FloatLiteral.as.ImplicitAs.impl.Convert.bound.fc1: = bound_method %float.c02, %Core.FloatLiteral.as.ImplicitAs.impl.Convert.b37 [concrete] // CHECK:STDOUT: %bound_method.1c7: = bound_method %float.c02, %Core.FloatLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] @@ -686,18 +705,18 @@ let convert_not_constant: f64 = Float64ToFloat64(not_constant_64); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.fb7 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.fb7 = value_binding_pattern a [concrete = constants.%a.patt.ae8] // CHECK:STDOUT: } -// CHECK:STDOUT: %f64.loc6: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %.loc6_34.1: %f64.dc1 = value_of_initializer @__global_init.%Float32ToFloat64.call.loc6 [concrete = constants.%float.3b9] // CHECK:STDOUT: %.loc6_34.2: %f64.dc1 = converted @__global_init.%Float32ToFloat64.call.loc6, %.loc6_34.1 [concrete = constants.%float.3b9] +// CHECK:STDOUT: %f64.loc6: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %a: %f64.dc1 = value_binding a, %.loc6_34.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.fb7 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.fb7 = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %f64.loc7: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %.loc7_37.1: %f64.dc1 = value_of_initializer @__global_init.%Float32ToFloat64.call.loc7 [concrete = constants.%float.84e] // CHECK:STDOUT: %.loc7_37.2: %f64.dc1 = converted @__global_init.%Float32ToFloat64.call.loc7, %.loc7_37.1 [concrete = constants.%float.84e] +// CHECK:STDOUT: %f64.loc7: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %b: %f64.dc1 = value_binding b, %.loc7_37.2 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -732,6 +751,7 @@ let convert_not_constant: f64 = Float64ToFloat64(not_constant_64); // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %f64.dc1: type = class_type @Float, @Float(%int_64) [concrete] // CHECK:STDOUT: %pattern_type.fb7: type = pattern_type %f64.dc1 [concrete] +// CHECK:STDOUT: %not_constant_64.patt: %pattern_type.fb7 = value_binding_pattern not_constant_64 [concrete] // CHECK:STDOUT: %float.1f7: Core.FloatLiteral = float_literal_value 0e-1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.91e: type = facet_type <@ImplicitAs, @ImplicitAs(%f64.dc1)> [concrete] // CHECK:STDOUT: %To: Core.IntLiteral = symbolic_binding To, 0 [symbolic] @@ -747,6 +767,7 @@ let convert_not_constant: f64 = Float64ToFloat64(not_constant_64); // CHECK:STDOUT: %Core.FloatLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.FloatLiteral.as.ImplicitAs.impl.Convert.cf0, @Core.FloatLiteral.as.ImplicitAs.impl.Convert(%int_64) [concrete] // CHECK:STDOUT: %bound_method: = bound_method %float.1f7, %Core.FloatLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %float.895: %f64.dc1 = float_value 0 [concrete] +// CHECK:STDOUT: %convert_not_constant.patt: %pattern_type.fb7 = value_binding_pattern convert_not_constant [concrete] // CHECK:STDOUT: %Float64ToFloat64.type: type = fn_type @Float64ToFloat64 [concrete] // CHECK:STDOUT: %Float64ToFloat64: %Float64ToFloat64.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -759,9 +780,8 @@ let convert_not_constant: f64 = Float64ToFloat64(not_constant_64); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %not_constant_64.patt: %pattern_type.fb7 = value_binding_pattern not_constant_64 [concrete] +// CHECK:STDOUT: %not_constant_64.patt: %pattern_type.fb7 = value_binding_pattern not_constant_64 [concrete = constants.%not_constant_64.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %f64.loc6: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %impl.elem0: %.2d7 = impl_witness_access constants.%ImplicitAs.impl_witness.43c, element0 [concrete = constants.%Core.FloatLiteral.as.ImplicitAs.impl.Convert.cf0] // CHECK:STDOUT: %bound_method.loc6_28.1: = bound_method @__global_init.%float, %impl.elem0 [concrete = constants.%Core.FloatLiteral.as.ImplicitAs.impl.Convert.bound] // CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0, @Core.FloatLiteral.as.ImplicitAs.impl.Convert(constants.%int_64) [concrete = constants.%Core.FloatLiteral.as.ImplicitAs.impl.Convert.specific_fn] @@ -769,13 +789,14 @@ let convert_not_constant: f64 = Float64ToFloat64(not_constant_64); // CHECK:STDOUT: %Core.FloatLiteral.as.ImplicitAs.impl.Convert.call: init %f64.dc1 = call %bound_method.loc6_28.2(@__global_init.%float) [concrete = constants.%float.895] // CHECK:STDOUT: %.loc6_28.1: %f64.dc1 = value_of_initializer %Core.FloatLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%float.895] // CHECK:STDOUT: %.loc6_28.2: %f64.dc1 = converted @__global_init.%float, %.loc6_28.1 [concrete = constants.%float.895] +// CHECK:STDOUT: %f64.loc6: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %not_constant_64: %f64.dc1 = value_binding not_constant_64, %.loc6_28.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %convert_not_constant.patt: %pattern_type.fb7 = value_binding_pattern convert_not_constant [concrete] +// CHECK:STDOUT: %convert_not_constant.patt: %pattern_type.fb7 = value_binding_pattern convert_not_constant [concrete = constants.%convert_not_constant.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %f64.loc15: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %.loc15_65.1: %f64.dc1 = value_of_initializer @__global_init.%Float64ToFloat64.call // CHECK:STDOUT: %.loc15_65.2: %f64.dc1 = converted @__global_init.%Float64ToFloat64.call, %.loc15_65.1 +// CHECK:STDOUT: %f64.loc15: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %convert_not_constant: %f64.dc1 = value_binding convert_not_constant, %.loc15_65.2 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/builtins/float/convert_int.carbon b/toolchain/check/testdata/builtins/float/convert_int.carbon index d5c7ac1210d1..c4457f7506cb 100644 --- a/toolchain/check/testdata/builtins/float/convert_int.carbon +++ b/toolchain/check/testdata/builtins/float/convert_int.carbon @@ -225,6 +225,7 @@ let inf_val: i32 = ConvertF64ToI32(Div(1.0, 0.0)); // CHECK:STDOUT: %pattern_type.dc0: type = pattern_type Core.IntLiteral [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %overflow.patt: %pattern_type.6b6 = value_binding_pattern overflow [concrete] // CHECK:STDOUT: %ConvertF64ToI32.type: type = fn_type @ConvertF64ToI32 [concrete] // CHECK:STDOUT: %ConvertF64ToI32: %ConvertF64ToI32.type = struct_value () [concrete] // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] @@ -246,6 +247,7 @@ let inf_val: i32 = ConvertF64ToI32(Div(1.0, 0.0)); // CHECK:STDOUT: %Core.FloatLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.FloatLiteral.as.ImplicitAs.impl.Convert.cf0, @Core.FloatLiteral.as.ImplicitAs.impl.Convert(%int_64) [concrete] // CHECK:STDOUT: %bound_method.a8b: = bound_method %float.bab60c.1, %Core.FloatLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %float.d5c: %f64.dc1 = float_value 2147483648 [concrete] +// CHECK:STDOUT: %underflow.patt: %pattern_type.6b6 = value_binding_pattern underflow [concrete] // CHECK:STDOUT: %Negate.type: type = fn_type @Negate [concrete] // CHECK:STDOUT: %Negate: %Negate.type = struct_value () [concrete] // CHECK:STDOUT: %float.449: Core.FloatLiteral = float_literal_value 21474836490e-1 [concrete] @@ -257,6 +259,7 @@ let inf_val: i32 = ConvertF64ToI32(Div(1.0, 0.0)); // CHECK:STDOUT: %UInt.generic: %UInt.type = struct_value () [concrete] // CHECK:STDOUT: %u32: type = class_type @UInt, @UInt(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.668: type = pattern_type %u32 [concrete] +// CHECK:STDOUT: %unsigned_neg.patt: %pattern_type.668 = value_binding_pattern unsigned_neg [concrete] // CHECK:STDOUT: %ConvertF64ToU32.type: type = fn_type @ConvertF64ToU32 [concrete] // CHECK:STDOUT: %ConvertF64ToU32: %ConvertF64ToU32.type = struct_value () [concrete] // CHECK:STDOUT: %float.6da: Core.FloatLiteral = float_literal_value 10e-1 [concrete] @@ -264,23 +267,35 @@ let inf_val: i32 = ConvertF64ToI32(Div(1.0, 0.0)); // CHECK:STDOUT: %bound_method.143: = bound_method %float.6da, %Core.FloatLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %float.3b9: %f64.dc1 = float_value 1 [concrete] // CHECK:STDOUT: %float.b2f: %f64.dc1 = float_value -1 [concrete] +// CHECK:STDOUT: %literal_overflow.patt: %pattern_type.6b6 = value_binding_pattern literal_overflow [concrete] // CHECK:STDOUT: %ConvertFloatLiteralToI32.type: type = fn_type @ConvertFloatLiteralToI32 [concrete] // CHECK:STDOUT: %ConvertFloatLiteralToI32: %ConvertFloatLiteralToI32.type = struct_value () [concrete] // CHECK:STDOUT: %float.bab60c.2: Core.FloatLiteral = float_literal_value 21474836480e-1 [concrete] +// CHECK:STDOUT: %giant_literal_overflow.patt: %pattern_type.6b6 = value_binding_pattern giant_literal_overflow [concrete] // CHECK:STDOUT: %float.53d: Core.FloatLiteral = float_literal_value 10e999999 [concrete] +// CHECK:STDOUT: %giant_literal_to_int_literal_overflow.patt: %pattern_type.dc0 = value_binding_pattern giant_literal_to_int_literal_overflow [concrete] // CHECK:STDOUT: %ConvertFloatLiteralToIntLiteral.type: type = fn_type @ConvertFloatLiteralToIntLiteral [concrete] // CHECK:STDOUT: %ConvertFloatLiteralToIntLiteral: %ConvertFloatLiteralToIntLiteral.type = struct_value () [concrete] // CHECK:STDOUT: %float.ef09: Core.FloatLiteral = float_literal_value 10e9999999 [concrete] +// CHECK:STDOUT: %giant_exponent_literal_overflow.patt: %pattern_type.6b6 = value_binding_pattern giant_exponent_literal_overflow [concrete] // CHECK:STDOUT: %float.f461ee.1: Core.FloatLiteral = float_literal_value 10e999999999999999999999999999999999 [concrete] +// CHECK:STDOUT: %giant_exponent_literal_to_int_literal_overflow.patt: %pattern_type.dc0 = value_binding_pattern giant_exponent_literal_to_int_literal_overflow [concrete] // CHECK:STDOUT: %float.f461ee.2: Core.FloatLiteral = float_literal_value 10e999999999999999999999999999999999 [concrete] +// CHECK:STDOUT: %literal_overflow_large_mantissa.patt: %pattern_type.6b6 = value_binding_pattern literal_overflow_large_mantissa [concrete] // CHECK:STDOUT: %float.e12922.1: Core.FloatLiteral = float_literal_value 2147483648e0 [concrete] +// CHECK:STDOUT: %literal_overflow_med_mantissa.patt: %pattern_type.6b6 = value_binding_pattern literal_overflow_med_mantissa [concrete] // CHECK:STDOUT: %float.e12922.2: Core.FloatLiteral = float_literal_value 2147483648e0 [concrete] +// CHECK:STDOUT: %literal_overflow_hex_med_mantissa.patt: %pattern_type.6b6 = value_binding_pattern literal_overflow_hex_med_mantissa [concrete] // CHECK:STDOUT: %float.ef03: Core.FloatLiteral = float_literal_value 2147483648p0 [concrete] +// CHECK:STDOUT: %literal_overflow_small_mantissa.patt: %pattern_type.6b6 = value_binding_pattern literal_overflow_small_mantissa [concrete] // CHECK:STDOUT: %float.9d5: Core.FloatLiteral = float_literal_value 10e9 [concrete] +// CHECK:STDOUT: %literal_overflow_bin_small_mantissa.patt: %pattern_type.6b6 = value_binding_pattern literal_overflow_bin_small_mantissa [concrete] // CHECK:STDOUT: %float.c0c: Core.FloatLiteral = float_literal_value 16p27 [concrete] +// CHECK:STDOUT: %literal_overflow_unsigned_neg.patt: %pattern_type.668 = value_binding_pattern literal_overflow_unsigned_neg [concrete] // CHECK:STDOUT: %ConvertFloatLiteralToU32.type: type = fn_type @ConvertFloatLiteralToU32 [concrete] // CHECK:STDOUT: %ConvertFloatLiteralToU32: %ConvertFloatLiteralToU32.type = struct_value () [concrete] // CHECK:STDOUT: %float.4f4: Core.FloatLiteral = float_literal_value 50e8 [concrete] +// CHECK:STDOUT: %literal_overflow_bin_unsigned_neg.patt: %pattern_type.668 = value_binding_pattern literal_overflow_bin_unsigned_neg [concrete] // CHECK:STDOUT: %float.97b: Core.FloatLiteral = float_literal_value 16p28 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -309,115 +324,115 @@ let inf_val: i32 = ConvertF64ToI32(Div(1.0, 0.0)); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %overflow.patt: %pattern_type.6b6 = value_binding_pattern overflow [concrete] +// CHECK:STDOUT: %overflow.patt: %pattern_type.6b6 = value_binding_pattern overflow [concrete = constants.%overflow.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %i32.loc9: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc9_49.1: %i32 = value_of_initializer @__global_init.%ConvertF64ToI32.call.loc9 [concrete = ] // CHECK:STDOUT: %.loc9_49.2: %i32 = converted @__global_init.%ConvertF64ToI32.call.loc9, %.loc9_49.1 [concrete = ] +// CHECK:STDOUT: %i32.loc9: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %overflow: %i32 = value_binding overflow, %.loc9_49.2 [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %underflow.patt: %pattern_type.6b6 = value_binding_pattern underflow [concrete] +// CHECK:STDOUT: %underflow.patt: %pattern_type.6b6 = value_binding_pattern underflow [concrete = constants.%underflow.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %i32.loc15: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc15_58.1: %i32 = value_of_initializer @__global_init.%ConvertF64ToI32.call.loc15 [concrete = ] // CHECK:STDOUT: %.loc15_58.2: %i32 = converted @__global_init.%ConvertF64ToI32.call.loc15, %.loc15_58.1 [concrete = ] +// CHECK:STDOUT: %i32.loc15: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %underflow: %i32 = value_binding underflow, %.loc15_58.2 [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %unsigned_neg.patt: %pattern_type.668 = value_binding_pattern unsigned_neg [concrete] +// CHECK:STDOUT: %unsigned_neg.patt: %pattern_type.668 = value_binding_pattern unsigned_neg [concrete = constants.%unsigned_neg.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %u32.loc21: type = type_literal constants.%u32 [concrete = constants.%u32] // CHECK:STDOUT: %.loc21_52.1: %u32 = value_of_initializer @__global_init.%ConvertF64ToU32.call [concrete = ] // CHECK:STDOUT: %.loc21_52.2: %u32 = converted @__global_init.%ConvertF64ToU32.call, %.loc21_52.1 [concrete = ] +// CHECK:STDOUT: %u32.loc21: type = type_literal constants.%u32 [concrete = constants.%u32] // CHECK:STDOUT: %unsigned_neg: %u32 = value_binding unsigned_neg, %.loc21_52.2 [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %literal_overflow.patt: %pattern_type.6b6 = value_binding_pattern literal_overflow [concrete] +// CHECK:STDOUT: %literal_overflow.patt: %pattern_type.6b6 = value_binding_pattern literal_overflow [concrete = constants.%literal_overflow.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %i32.loc27: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc27_66.1: %i32 = value_of_initializer @__global_init.%ConvertFloatLiteralToI32.call.loc27 [concrete = ] // CHECK:STDOUT: %.loc27_66.2: %i32 = converted @__global_init.%ConvertFloatLiteralToI32.call.loc27, %.loc27_66.1 [concrete = ] +// CHECK:STDOUT: %i32.loc27: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %literal_overflow: %i32 = value_binding literal_overflow, %.loc27_66.2 [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %giant_literal_overflow.patt: %pattern_type.6b6 = value_binding_pattern giant_literal_overflow [concrete] +// CHECK:STDOUT: %giant_literal_overflow.patt: %pattern_type.6b6 = value_binding_pattern giant_literal_overflow [concrete = constants.%giant_literal_overflow.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %i32.loc33: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc33_71.1: %i32 = value_of_initializer @__global_init.%ConvertFloatLiteralToI32.call.loc33 [concrete = ] // CHECK:STDOUT: %.loc33_71.2: %i32 = converted @__global_init.%ConvertFloatLiteralToI32.call.loc33, %.loc33_71.1 [concrete = ] +// CHECK:STDOUT: %i32.loc33: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %giant_literal_overflow: %i32 = value_binding giant_literal_overflow, %.loc33_71.2 [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %giant_literal_to_int_literal_overflow.patt: %pattern_type.dc0 = value_binding_pattern giant_literal_to_int_literal_overflow [concrete] +// CHECK:STDOUT: %giant_literal_to_int_literal_overflow.patt: %pattern_type.dc0 = value_binding_pattern giant_literal_to_int_literal_overflow [concrete = constants.%giant_literal_to_int_literal_overflow.patt] // CHECK:STDOUT: } +// CHECK:STDOUT: %.loc40_106.1: Core.IntLiteral = value_of_initializer @__global_init.%ConvertFloatLiteralToIntLiteral.call.loc40 [concrete = ] +// CHECK:STDOUT: %.loc40_106.2: Core.IntLiteral = converted @__global_init.%ConvertFloatLiteralToIntLiteral.call.loc40, %.loc40_106.1 [concrete = ] // CHECK:STDOUT: %.loc40_48: type = splice_block %IntLiteral.ref.loc40 [concrete = Core.IntLiteral] { // CHECK:STDOUT: %Core.ref.loc40: = name_ref Core, imports.%Core.048aa3.1 [concrete = imports.%Core.048aa3.1] // CHECK:STDOUT: %IntLiteral.ref.loc40: type = name_ref IntLiteral, imports.%Core.IntLiteral [concrete = Core.IntLiteral] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc40_106.1: Core.IntLiteral = value_of_initializer @__global_init.%ConvertFloatLiteralToIntLiteral.call.loc40 [concrete = ] -// CHECK:STDOUT: %.loc40_106.2: Core.IntLiteral = converted @__global_init.%ConvertFloatLiteralToIntLiteral.call.loc40, %.loc40_106.1 [concrete = ] // CHECK:STDOUT: %giant_literal_to_int_literal_overflow: Core.IntLiteral = value_binding giant_literal_to_int_literal_overflow, %.loc40_106.2 [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %giant_exponent_literal_overflow.patt: %pattern_type.6b6 = value_binding_pattern giant_exponent_literal_overflow [concrete] +// CHECK:STDOUT: %giant_exponent_literal_overflow.patt: %pattern_type.6b6 = value_binding_pattern giant_exponent_literal_overflow [concrete = constants.%giant_exponent_literal_overflow.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %i32.loc47: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc47_107.1: %i32 = value_of_initializer @__global_init.%ConvertFloatLiteralToI32.call.loc47 [concrete = ] // CHECK:STDOUT: %.loc47_107.2: %i32 = converted @__global_init.%ConvertFloatLiteralToI32.call.loc47, %.loc47_107.1 [concrete = ] +// CHECK:STDOUT: %i32.loc47: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %giant_exponent_literal_overflow: %i32 = value_binding giant_exponent_literal_overflow, %.loc47_107.2 [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %giant_exponent_literal_to_int_literal_overflow.patt: %pattern_type.dc0 = value_binding_pattern giant_exponent_literal_to_int_literal_overflow [concrete] +// CHECK:STDOUT: %giant_exponent_literal_to_int_literal_overflow.patt: %pattern_type.dc0 = value_binding_pattern giant_exponent_literal_to_int_literal_overflow [concrete = constants.%giant_exponent_literal_to_int_literal_overflow.patt] // CHECK:STDOUT: } +// CHECK:STDOUT: %.loc55_141.1: Core.IntLiteral = value_of_initializer @__global_init.%ConvertFloatLiteralToIntLiteral.call.loc55 [concrete = ] +// CHECK:STDOUT: %.loc55_141.2: Core.IntLiteral = converted @__global_init.%ConvertFloatLiteralToIntLiteral.call.loc55, %.loc55_141.1 [concrete = ] // CHECK:STDOUT: %.loc55_57: type = splice_block %IntLiteral.ref.loc55 [concrete = Core.IntLiteral] { // CHECK:STDOUT: %Core.ref.loc55: = name_ref Core, imports.%Core.048aa3.1 [concrete = imports.%Core.048aa3.1] // CHECK:STDOUT: %IntLiteral.ref.loc55: type = name_ref IntLiteral, imports.%Core.IntLiteral [concrete = Core.IntLiteral] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc55_141.1: Core.IntLiteral = value_of_initializer @__global_init.%ConvertFloatLiteralToIntLiteral.call.loc55 [concrete = ] -// CHECK:STDOUT: %.loc55_141.2: Core.IntLiteral = converted @__global_init.%ConvertFloatLiteralToIntLiteral.call.loc55, %.loc55_141.1 [concrete = ] // CHECK:STDOUT: %giant_exponent_literal_to_int_literal_overflow: Core.IntLiteral = value_binding giant_exponent_literal_to_int_literal_overflow, %.loc55_141.2 [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %literal_overflow_large_mantissa.patt: %pattern_type.6b6 = value_binding_pattern literal_overflow_large_mantissa [concrete] +// CHECK:STDOUT: %literal_overflow_large_mantissa.patt: %pattern_type.6b6 = value_binding_pattern literal_overflow_large_mantissa [concrete = constants.%literal_overflow_large_mantissa.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %i32.loc62: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc62_82.1: %i32 = value_of_initializer @__global_init.%ConvertFloatLiteralToI32.call.loc62 [concrete = ] // CHECK:STDOUT: %.loc62_82.2: %i32 = converted @__global_init.%ConvertFloatLiteralToI32.call.loc62, %.loc62_82.1 [concrete = ] +// CHECK:STDOUT: %i32.loc62: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %literal_overflow_large_mantissa: %i32 = value_binding literal_overflow_large_mantissa, %.loc62_82.2 [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %literal_overflow_med_mantissa.patt: %pattern_type.6b6 = value_binding_pattern literal_overflow_med_mantissa [concrete] +// CHECK:STDOUT: %literal_overflow_med_mantissa.patt: %pattern_type.6b6 = value_binding_pattern literal_overflow_med_mantissa [concrete = constants.%literal_overflow_med_mantissa.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %i32.loc69: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc69_80.1: %i32 = value_of_initializer @__global_init.%ConvertFloatLiteralToI32.call.loc69 [concrete = ] // CHECK:STDOUT: %.loc69_80.2: %i32 = converted @__global_init.%ConvertFloatLiteralToI32.call.loc69, %.loc69_80.1 [concrete = ] +// CHECK:STDOUT: %i32.loc69: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %literal_overflow_med_mantissa: %i32 = value_binding literal_overflow_med_mantissa, %.loc69_80.2 [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %literal_overflow_hex_med_mantissa.patt: %pattern_type.6b6 = value_binding_pattern literal_overflow_hex_med_mantissa [concrete] +// CHECK:STDOUT: %literal_overflow_hex_med_mantissa.patt: %pattern_type.6b6 = value_binding_pattern literal_overflow_hex_med_mantissa [concrete = constants.%literal_overflow_hex_med_mantissa.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %i32.loc76: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc76_85.1: %i32 = value_of_initializer @__global_init.%ConvertFloatLiteralToI32.call.loc76 [concrete = ] // CHECK:STDOUT: %.loc76_85.2: %i32 = converted @__global_init.%ConvertFloatLiteralToI32.call.loc76, %.loc76_85.1 [concrete = ] +// CHECK:STDOUT: %i32.loc76: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %literal_overflow_hex_med_mantissa: %i32 = value_binding literal_overflow_hex_med_mantissa, %.loc76_85.2 [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %literal_overflow_small_mantissa.patt: %pattern_type.6b6 = value_binding_pattern literal_overflow_small_mantissa [concrete] +// CHECK:STDOUT: %literal_overflow_small_mantissa.patt: %pattern_type.6b6 = value_binding_pattern literal_overflow_small_mantissa [concrete = constants.%literal_overflow_small_mantissa.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %i32.loc83: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc83_75.1: %i32 = value_of_initializer @__global_init.%ConvertFloatLiteralToI32.call.loc83 [concrete = ] // CHECK:STDOUT: %.loc83_75.2: %i32 = converted @__global_init.%ConvertFloatLiteralToI32.call.loc83, %.loc83_75.1 [concrete = ] +// CHECK:STDOUT: %i32.loc83: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %literal_overflow_small_mantissa: %i32 = value_binding literal_overflow_small_mantissa, %.loc83_75.2 [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %literal_overflow_bin_small_mantissa.patt: %pattern_type.6b6 = value_binding_pattern literal_overflow_bin_small_mantissa [concrete] +// CHECK:STDOUT: %literal_overflow_bin_small_mantissa.patt: %pattern_type.6b6 = value_binding_pattern literal_overflow_bin_small_mantissa [concrete = constants.%literal_overflow_bin_small_mantissa.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %i32.loc90: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc90_81.1: %i32 = value_of_initializer @__global_init.%ConvertFloatLiteralToI32.call.loc90 [concrete = ] // CHECK:STDOUT: %.loc90_81.2: %i32 = converted @__global_init.%ConvertFloatLiteralToI32.call.loc90, %.loc90_81.1 [concrete = ] +// CHECK:STDOUT: %i32.loc90: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %literal_overflow_bin_small_mantissa: %i32 = value_binding literal_overflow_bin_small_mantissa, %.loc90_81.2 [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %literal_overflow_unsigned_neg.patt: %pattern_type.668 = value_binding_pattern literal_overflow_unsigned_neg [concrete] +// CHECK:STDOUT: %literal_overflow_unsigned_neg.patt: %pattern_type.668 = value_binding_pattern literal_overflow_unsigned_neg [concrete = constants.%literal_overflow_unsigned_neg.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %u32.loc97: type = type_literal constants.%u32 [concrete = constants.%u32] // CHECK:STDOUT: %.loc97_72.1: %u32 = value_of_initializer @__global_init.%ConvertFloatLiteralToU32.call.loc97 [concrete = ] // CHECK:STDOUT: %.loc97_72.2: %u32 = converted @__global_init.%ConvertFloatLiteralToU32.call.loc97, %.loc97_72.1 [concrete = ] +// CHECK:STDOUT: %u32.loc97: type = type_literal constants.%u32 [concrete = constants.%u32] // CHECK:STDOUT: %literal_overflow_unsigned_neg: %u32 = value_binding literal_overflow_unsigned_neg, %.loc97_72.2 [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %literal_overflow_bin_unsigned_neg.patt: %pattern_type.668 = value_binding_pattern literal_overflow_bin_unsigned_neg [concrete] +// CHECK:STDOUT: %literal_overflow_bin_unsigned_neg.patt: %pattern_type.668 = value_binding_pattern literal_overflow_bin_unsigned_neg [concrete = constants.%literal_overflow_bin_unsigned_neg.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %u32.loc104: type = type_literal constants.%u32 [concrete = constants.%u32] // CHECK:STDOUT: %.loc104_79.1: %u32 = value_of_initializer @__global_init.%ConvertFloatLiteralToU32.call.loc104 [concrete = ] // CHECK:STDOUT: %.loc104_79.2: %u32 = converted @__global_init.%ConvertFloatLiteralToU32.call.loc104, %.loc104_79.1 [concrete = ] +// CHECK:STDOUT: %u32.loc104: type = type_literal constants.%u32 [concrete = constants.%u32] // CHECK:STDOUT: %literal_overflow_bin_unsigned_neg: %u32 = value_binding literal_overflow_bin_unsigned_neg, %.loc104_79.2 [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -506,6 +521,7 @@ let inf_val: i32 = ConvertF64ToI32(Div(1.0, 0.0)); // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %nan_val.patt: %pattern_type.6b6 = value_binding_pattern nan_val [concrete] // CHECK:STDOUT: %ConvertF64ToI32.type: type = fn_type @ConvertF64ToI32 [concrete] // CHECK:STDOUT: %ConvertF64ToI32: %ConvertF64ToI32.type = struct_value () [concrete] // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] @@ -531,6 +547,7 @@ let inf_val: i32 = ConvertF64ToI32(Div(1.0, 0.0)); // CHECK:STDOUT: %Core.FloatLiteral.as.ImplicitAs.impl.Convert.bound.af318c.2: = bound_method %float.1f75e4.2, %Core.FloatLiteral.as.ImplicitAs.impl.Convert.cf0 [concrete] // CHECK:STDOUT: %bound_method.819b88.2: = bound_method %float.1f75e4.2, %Core.FloatLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %float.a8a: %f64.dc1 = float_value NaN [concrete] +// CHECK:STDOUT: %inf_val.patt: %pattern_type.6b6 = value_binding_pattern inf_val [concrete] // CHECK:STDOUT: %float.6da: Core.FloatLiteral = float_literal_value 10e-1 [concrete] // CHECK:STDOUT: %float.1f75e4.3: Core.FloatLiteral = float_literal_value 0e-1 [concrete] // CHECK:STDOUT: %Core.FloatLiteral.as.ImplicitAs.impl.Convert.bound.757: = bound_method %float.6da, %Core.FloatLiteral.as.ImplicitAs.impl.Convert.cf0 [concrete] @@ -550,18 +567,18 @@ let inf_val: i32 = ConvertF64ToI32(Div(1.0, 0.0)); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %nan_val.patt: %pattern_type.6b6 = value_binding_pattern nan_val [concrete] +// CHECK:STDOUT: %nan_val.patt: %pattern_type.6b6 = value_binding_pattern nan_val [concrete = constants.%nan_val.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %i32.loc9: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc9_49.1: %i32 = value_of_initializer @__global_init.%ConvertF64ToI32.call.loc9 [concrete = ] // CHECK:STDOUT: %.loc9_49.2: %i32 = converted @__global_init.%ConvertF64ToI32.call.loc9, %.loc9_49.1 [concrete = ] +// CHECK:STDOUT: %i32.loc9: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %nan_val: %i32 = value_binding nan_val, %.loc9_49.2 [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %inf_val.patt: %pattern_type.6b6 = value_binding_pattern inf_val [concrete] +// CHECK:STDOUT: %inf_val.patt: %pattern_type.6b6 = value_binding_pattern inf_val [concrete = constants.%inf_val.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %i32.loc15: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc15_49.1: %i32 = value_of_initializer @__global_init.%ConvertF64ToI32.call.loc15 [concrete = ] // CHECK:STDOUT: %.loc15_49.2: %i32 = converted @__global_init.%ConvertF64ToI32.call.loc15, %.loc15_49.1 [concrete = ] +// CHECK:STDOUT: %i32.loc15: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %inf_val: %i32 = value_binding inf_val, %.loc15_49.2 [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/builtins/float_literal/make_type.carbon b/toolchain/check/testdata/builtins/float_literal/make_type.carbon index 61a01b4f77db..191a34279653 100644 --- a/toolchain/check/testdata/builtins/float_literal/make_type.carbon +++ b/toolchain/check/testdata/builtins/float_literal/make_type.carbon @@ -31,6 +31,7 @@ let f: FloatLiteral = 1.0; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %pattern_type: type = pattern_type Core.FloatLiteral [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type = value_binding_pattern f [concrete] // CHECK:STDOUT: %float: Core.FloatLiteral = float_literal_value 10e-1 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -40,7 +41,7 @@ let f: FloatLiteral = 1.0; // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %f.patt: %pattern_type = value_binding_pattern f [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type = value_binding_pattern f [concrete = constants.%f.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %FloatLiteral.ref: type = name_ref FloatLiteral, imports.%Main.FloatLiteral [concrete = Core.FloatLiteral] // CHECK:STDOUT: %f: Core.FloatLiteral = value_binding f, @__global_init.%float diff --git a/toolchain/check/testdata/builtins/form/make_type.carbon b/toolchain/check/testdata/builtins/form/make_type.carbon index 084f3707f37d..d1e365f3920e 100644 --- a/toolchain/check/testdata/builtins/form/make_type.carbon +++ b/toolchain/check/testdata/builtins/form/make_type.carbon @@ -31,6 +31,7 @@ let f: Form = form(var ()); // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %pattern_type: type = pattern_type Core.Form [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type = value_binding_pattern f [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %.262: Core.Form = init_form %empty_tuple.type [concrete] @@ -42,7 +43,7 @@ let f: Form = form(var ()); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %f.patt: %pattern_type = value_binding_pattern f [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type = value_binding_pattern f [concrete = constants.%f.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Form.ref: type = name_ref Form, imports.%Main.Form [concrete = Core.Form] // CHECK:STDOUT: %f: Core.Form = value_binding f, @__global_init.%.loc7_20 diff --git a/toolchain/check/testdata/builtins/int/add_char_literal.carbon b/toolchain/check/testdata/builtins/int/add_char_literal.carbon index add4d9aad073..86bde0d78e62 100644 --- a/toolchain/check/testdata/builtins/int/add_char_literal.carbon +++ b/toolchain/check/testdata/builtins/int/add_char_literal.carbon @@ -78,6 +78,7 @@ let c: CharLiteral = AddIntChar(Negate(98), 'a'); // CHECK:STDOUT: %pattern_type.8c6: type = pattern_type Core.CharLiteral [concrete] // CHECK:STDOUT: %AddIntChar.type: type = fn_type @AddIntChar [concrete] // CHECK:STDOUT: %AddIntChar: %AddIntChar.type = struct_value () [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.8c6 = value_binding_pattern a [concrete] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %.54f: Core.CharLiteral = char_value U+0061 [concrete] // CHECK:STDOUT: %.711: Core.CharLiteral = char_value U+0062 [concrete] @@ -85,11 +86,11 @@ let c: CharLiteral = AddIntChar(Negate(98), 'a'); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.8c6 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.8c6 = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %CharLiteral.ref: type = name_ref CharLiteral, %CharLiteral [concrete = Core.CharLiteral] // CHECK:STDOUT: %.loc12_39.1: Core.CharLiteral = value_of_initializer @__global_init.%AddIntChar.call [concrete = constants.%.711] // CHECK:STDOUT: %.loc12_39.2: Core.CharLiteral = converted @__global_init.%AddIntChar.call, %.loc12_39.1 [concrete = constants.%.711] +// CHECK:STDOUT: %CharLiteral.ref: type = name_ref CharLiteral, %CharLiteral [concrete = Core.CharLiteral] // CHECK:STDOUT: %a: Core.CharLiteral = value_binding a, %.loc12_39.2 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/builtins/int/convert_char_literal.carbon b/toolchain/check/testdata/builtins/int/convert_char_literal.carbon index 52b04448e2e1..3a1944dd929e 100644 --- a/toolchain/check/testdata/builtins/int/convert_char_literal.carbon +++ b/toolchain/check/testdata/builtins/int/convert_char_literal.carbon @@ -71,8 +71,10 @@ let c: CharLiteral = ConvertFromIntLiteral(0x110000); // CHECK:STDOUT: %u32: type = class_type @UInt, @UInt(%int_32) [concrete] // CHECK:STDOUT: %ConvertFromU32.type: type = fn_type @ConvertFromU32 [concrete] // CHECK:STDOUT: %ConvertFromU32: %ConvertFromU32.type = struct_value () [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.8c6 = value_binding_pattern a [concrete] // CHECK:STDOUT: %int_97: Core.IntLiteral = int_value 97 [concrete] // CHECK:STDOUT: %.54f: Core.CharLiteral = char_value U+0061 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.8c6 = value_binding_pattern b [concrete] // CHECK:STDOUT: %int_98.fb6: Core.IntLiteral = int_value 98 [concrete] // CHECK:STDOUT: %ImplicitAs.type.914: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %To: Core.IntLiteral = symbolic_binding To, 0 [symbolic] @@ -89,6 +91,7 @@ let c: CharLiteral = ConvertFromIntLiteral(0x110000); // CHECK:STDOUT: %bound_method.6e9: = bound_method %int_98.fb6, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn.571 [concrete] // CHECK:STDOUT: %int_98.1e6: %i32 = int_value 98 [concrete] // CHECK:STDOUT: %.711: Core.CharLiteral = char_value U+0062 [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.8c6 = value_binding_pattern c [concrete] // CHECK:STDOUT: %int_99.6d1: Core.IntLiteral = int_value 99 [concrete] // CHECK:STDOUT: %ImplicitAs.type.efe: type = facet_type <@ImplicitAs, @ImplicitAs(%u32)> [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.199: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert.2, @Core.IntLiteral.as.ImplicitAs.impl.b68(%To) [symbolic] @@ -115,25 +118,25 @@ let c: CharLiteral = ConvertFromIntLiteral(0x110000); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.8c6 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.8c6 = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %CharLiteral.ref.loc14: type = name_ref CharLiteral, %CharLiteral [concrete = Core.CharLiteral] // CHECK:STDOUT: %.loc14_46.1: Core.CharLiteral = value_of_initializer @__global_init.%ConvertFromIntLiteral.call [concrete = constants.%.54f] // CHECK:STDOUT: %.loc14_46.2: Core.CharLiteral = converted @__global_init.%ConvertFromIntLiteral.call, %.loc14_46.1 [concrete = constants.%.54f] +// CHECK:STDOUT: %CharLiteral.ref.loc14: type = name_ref CharLiteral, %CharLiteral [concrete = Core.CharLiteral] // CHECK:STDOUT: %a: Core.CharLiteral = value_binding a, %.loc14_46.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.8c6 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.8c6 = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %CharLiteral.ref.loc15: type = name_ref CharLiteral, %CharLiteral [concrete = Core.CharLiteral] // CHECK:STDOUT: %.loc15_39.1: Core.CharLiteral = value_of_initializer @__global_init.%ConvertFromI32.call [concrete = constants.%.711] // CHECK:STDOUT: %.loc15_39.2: Core.CharLiteral = converted @__global_init.%ConvertFromI32.call, %.loc15_39.1 [concrete = constants.%.711] +// CHECK:STDOUT: %CharLiteral.ref.loc15: type = name_ref CharLiteral, %CharLiteral [concrete = Core.CharLiteral] // CHECK:STDOUT: %b: Core.CharLiteral = value_binding b, %.loc15_39.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.8c6 = value_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.8c6 = value_binding_pattern c [concrete = constants.%c.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %CharLiteral.ref.loc16: type = name_ref CharLiteral, %CharLiteral [concrete = Core.CharLiteral] // CHECK:STDOUT: %.loc16_39.1: Core.CharLiteral = value_of_initializer @__global_init.%ConvertFromU32.call [concrete = constants.%.b9b] // CHECK:STDOUT: %.loc16_39.2: Core.CharLiteral = converted @__global_init.%ConvertFromU32.call, %.loc16_39.1 [concrete = constants.%.b9b] +// CHECK:STDOUT: %CharLiteral.ref.loc16: type = name_ref CharLiteral, %CharLiteral [concrete = Core.CharLiteral] // CHECK:STDOUT: %c: Core.CharLiteral = value_binding c, %.loc16_39.2 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/builtins/int/convert_checked.carbon b/toolchain/check/testdata/builtins/int/convert_checked.carbon index e427a290fc13..02f283956e7c 100644 --- a/toolchain/check/testdata/builtins/int/convert_checked.carbon +++ b/toolchain/check/testdata/builtins/int/convert_checked.carbon @@ -269,6 +269,7 @@ let convert_not_constant_widen: i64 = Int32ToInt64(not_constant); // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %u32: type = class_type @UInt, @UInt(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.668: type = pattern_type %u32 [concrete] +// CHECK:STDOUT: %SizePreserving.patt: %pattern_type.668 = value_binding_pattern SizePreserving [concrete] // CHECK:STDOUT: %Int32ToUint32.type: type = fn_type @Int32ToUint32 [concrete] // CHECK:STDOUT: %Int32ToUint32: %Int32ToUint32.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] @@ -291,12 +292,14 @@ let convert_not_constant_widen: i64 = Int32ToInt64(not_constant); // CHECK:STDOUT: %int_16: Core.IntLiteral = int_value 16 [concrete] // CHECK:STDOUT: %i16: type = class_type @Int, @Int(%int_16) [concrete] // CHECK:STDOUT: %pattern_type.203: type = pattern_type %i16 [concrete] +// CHECK:STDOUT: %Narrowing.patt: %pattern_type.203 = value_binding_pattern Narrowing [concrete] // CHECK:STDOUT: %Int32ToInt16.type: type = fn_type @Int32ToInt16 [concrete] // CHECK:STDOUT: %Int32ToInt16: %Int32ToInt16.type = struct_value () [concrete] // CHECK:STDOUT: %int_1.d17: %i16 = int_value 1 [concrete] // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %i64: type = class_type @Int, @Int(%int_64) [concrete] // CHECK:STDOUT: %pattern_type.f57: type = pattern_type %i64 [concrete] +// CHECK:STDOUT: %Widening.patt: %pattern_type.f57 = value_binding_pattern Widening [concrete] // CHECK:STDOUT: %Int32ToInt64.type: type = fn_type @Int32ToInt64 [concrete] // CHECK:STDOUT: %Int32ToInt64: %Int32ToInt64.type = struct_value () [concrete] // CHECK:STDOUT: %int_1.d98: %i64 = int_value 1 [concrete] @@ -312,25 +315,25 @@ let convert_not_constant_widen: i64 = Int32ToInt64(not_constant); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %SizePreserving.patt: %pattern_type.668 = value_binding_pattern SizePreserving [concrete] +// CHECK:STDOUT: %SizePreserving.patt: %pattern_type.668 = value_binding_pattern SizePreserving [concrete = constants.%SizePreserving.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %u32: type = type_literal constants.%u32 [concrete = constants.%u32] // CHECK:STDOUT: %.loc6_42.1: %u32 = value_of_initializer @__global_init.%Int32ToUint32.call [concrete = constants.%int_1.92d] // CHECK:STDOUT: %.loc6_42.2: %u32 = converted @__global_init.%Int32ToUint32.call, %.loc6_42.1 [concrete = constants.%int_1.92d] +// CHECK:STDOUT: %u32: type = type_literal constants.%u32 [concrete = constants.%u32] // CHECK:STDOUT: %SizePreserving: %u32 = value_binding SizePreserving, %.loc6_42.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %Narrowing.patt: %pattern_type.203 = value_binding_pattern Narrowing [concrete] +// CHECK:STDOUT: %Narrowing.patt: %pattern_type.203 = value_binding_pattern Narrowing [concrete = constants.%Narrowing.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %i16: type = type_literal constants.%i16 [concrete = constants.%i16] // CHECK:STDOUT: %.loc7_36.1: %i16 = value_of_initializer @__global_init.%Int32ToInt16.call [concrete = constants.%int_1.d17] // CHECK:STDOUT: %.loc7_36.2: %i16 = converted @__global_init.%Int32ToInt16.call, %.loc7_36.1 [concrete = constants.%int_1.d17] +// CHECK:STDOUT: %i16: type = type_literal constants.%i16 [concrete = constants.%i16] // CHECK:STDOUT: %Narrowing: %i16 = value_binding Narrowing, %.loc7_36.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %Widening.patt: %pattern_type.f57 = value_binding_pattern Widening [concrete] +// CHECK:STDOUT: %Widening.patt: %pattern_type.f57 = value_binding_pattern Widening [concrete = constants.%Widening.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %i64: type = type_literal constants.%i64 [concrete = constants.%i64] // CHECK:STDOUT: %.loc8_35.1: %i64 = value_of_initializer @__global_init.%Int32ToInt64.call [concrete = constants.%int_1.d98] // CHECK:STDOUT: %.loc8_35.2: %i64 = converted @__global_init.%Int32ToInt64.call, %.loc8_35.1 [concrete = constants.%int_1.d98] +// CHECK:STDOUT: %i64: type = type_literal constants.%i64 [concrete = constants.%i64] // CHECK:STDOUT: %Widening: %i64 = value_binding Widening, %.loc8_35.2 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/builtins/int/convert_float.carbon b/toolchain/check/testdata/builtins/int/convert_float.carbon index d439080997a1..ca9eb76ab1bb 100644 --- a/toolchain/check/testdata/builtins/int/convert_float.carbon +++ b/toolchain/check/testdata/builtins/int/convert_float.carbon @@ -73,6 +73,7 @@ let invalid: f64 = ConvertIntLiteralToFloatLiteral(-1) as f64; // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %f64.dc1: type = class_type @Float, @Float(%int_64) [concrete] // CHECK:STDOUT: %pattern_type.fb7: type = pattern_type %f64.dc1 [concrete] +// CHECK:STDOUT: %overflow.patt: %pattern_type.fb7 = value_binding_pattern overflow [concrete] // CHECK:STDOUT: %ConvertIntLiteralToF64.type: type = fn_type @ConvertIntLiteralToF64 [concrete] // CHECK:STDOUT: %ConvertIntLiteralToF64: %ConvertIntLiteralToF64.type = struct_value () [concrete] // CHECK:STDOUT: %int_1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000: Core.IntLiteral = int_value 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 [concrete] @@ -84,11 +85,11 @@ let invalid: f64 = ConvertIntLiteralToFloatLiteral(-1) as f64; // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %overflow.patt: %pattern_type.fb7 = value_binding_pattern overflow [concrete] +// CHECK:STDOUT: %overflow.patt: %pattern_type.fb7 = value_binding_pattern overflow [concrete = constants.%overflow.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %f64: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %.loc9_354.1: %f64.dc1 = value_of_initializer @__global_init.%ConvertIntLiteralToF64.call [concrete = ] // CHECK:STDOUT: %.loc9_354.2: %f64.dc1 = converted @__global_init.%ConvertIntLiteralToF64.call, %.loc9_354.1 [concrete = ] +// CHECK:STDOUT: %f64: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %overflow: %f64.dc1 = value_binding overflow, %.loc9_354.2 [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -106,6 +107,7 @@ let invalid: f64 = ConvertIntLiteralToFloatLiteral(-1) as f64; // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %f64.dc1: type = class_type @Float, @Float(%int_64) [concrete] // CHECK:STDOUT: %pattern_type.fb7: type = pattern_type %f64.dc1 [concrete] +// CHECK:STDOUT: %invalid.patt: %pattern_type.fb7 = value_binding_pattern invalid [concrete] // CHECK:STDOUT: %ConvertIntLiteralToFloatLiteral.type: type = fn_type @ConvertIntLiteralToFloatLiteral [concrete] // CHECK:STDOUT: %ConvertIntLiteralToFloatLiteral: %ConvertIntLiteralToFloatLiteral.type = struct_value () [concrete] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] @@ -142,7 +144,7 @@ let invalid: f64 = ConvertIntLiteralToFloatLiteral(-1) as f64; // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %invalid.patt: %pattern_type.fb7 = value_binding_pattern invalid [concrete] +// CHECK:STDOUT: %invalid.patt: %pattern_type.fb7 = value_binding_pattern invalid [concrete = constants.%invalid.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %f64: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %invalid: %f64.dc1 = value_binding invalid, @__global_init.%.loc9_56.2 [concrete = ] diff --git a/toolchain/check/testdata/builtins/int/convert_float_checked.carbon b/toolchain/check/testdata/builtins/int/convert_float_checked.carbon index 0c35b99ab4cf..f94de3dbb507 100644 --- a/toolchain/check/testdata/builtins/int/convert_float_checked.carbon +++ b/toolchain/check/testdata/builtins/int/convert_float_checked.carbon @@ -49,6 +49,7 @@ let lossy: f32 = ConvertIntLiteralToF32(123456789); // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %f32.c73: type = class_type @Float, @Float(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.240: type = pattern_type %f32.c73 [concrete] +// CHECK:STDOUT: %lossy.patt: %pattern_type.240 = value_binding_pattern lossy [concrete] // CHECK:STDOUT: %ConvertIntLiteralToF32.type: type = fn_type @ConvertIntLiteralToF32 [concrete] // CHECK:STDOUT: %ConvertIntLiteralToF32: %ConvertIntLiteralToF32.type = struct_value () [concrete] // CHECK:STDOUT: %int_123456789: Core.IntLiteral = int_value 123456789 [concrete] @@ -60,11 +61,11 @@ let lossy: f32 = ConvertIntLiteralToF32(123456789); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %lossy.patt: %pattern_type.240 = value_binding_pattern lossy [concrete] +// CHECK:STDOUT: %lossy.patt: %pattern_type.240 = value_binding_pattern lossy [concrete = constants.%lossy.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %f32: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %.loc9_50.1: %f32.c73 = value_of_initializer @__global_init.%ConvertIntLiteralToF32.call [concrete = ] // CHECK:STDOUT: %.loc9_50.2: %f32.c73 = converted @__global_init.%ConvertIntLiteralToF32.call, %.loc9_50.1 [concrete = ] +// CHECK:STDOUT: %f32: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %lossy: %f32.c73 = value_binding lossy, %.loc9_50.2 [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/builtins/maybe_unformed/make_type.carbon b/toolchain/check/testdata/builtins/maybe_unformed/make_type.carbon index a00f643a08ab..a6eb2d141f5e 100644 --- a/toolchain/check/testdata/builtins/maybe_unformed/make_type.carbon +++ b/toolchain/check/testdata/builtins/maybe_unformed/make_type.carbon @@ -63,6 +63,8 @@ fn ColonBangParam(T:! type) -> type = "maybe_unformed.make_type"; // CHECK:STDOUT: %.a8d: type = maybe_unformed_type %empty_struct_type [concrete] // CHECK:STDOUT: %.2ba: type = maybe_unformed_type %.a8d [concrete] // CHECK:STDOUT: %pattern_type.ce6: type = pattern_type %.2ba [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.ce6 = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.ce6 = at_binding_pattern b, %b.param_patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -73,8 +75,8 @@ fn ColonBangParam(T:! type) -> type = "maybe_unformed.make_type"; // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %b.param_patt: %pattern_type.ce6 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.ce6 = at_binding_pattern b, %b.param_patt [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.ce6 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.ce6 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %b.param: %.2ba = value_param call_param0 // CHECK:STDOUT: %.loc7_29.1: type = splice_block %.loc7_29.3 [concrete = constants.%.2ba] { @@ -102,8 +104,10 @@ fn ColonBangParam(T:! type) -> type = "maybe_unformed.make_type"; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %t.patt.10b: %pattern_type = value_binding_pattern t [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] +// CHECK:STDOUT: %u.patt: %pattern_type = value_binding_pattern u [concrete] // CHECK:STDOUT: %Make.type: type = fn_type @Make [concrete] // CHECK:STDOUT: %Make: %Make.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -114,17 +118,17 @@ fn ColonBangParam(T:! type) -> type = "maybe_unformed.make_type"; // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %t.patt: %pattern_type = value_binding_pattern t [concrete] +// CHECK:STDOUT: %t.patt: %pattern_type = value_binding_pattern t [concrete = constants.%t.patt.10b] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc7_8: type = type_literal type [concrete = type] // CHECK:STDOUT: %.loc7_16: type = converted @__global_init.%.loc7, constants.%empty_struct_type [concrete = constants.%empty_struct_type] +// CHECK:STDOUT: %.loc7_8: type = type_literal type [concrete = type] // CHECK:STDOUT: %t: type = value_binding t, %.loc7_16 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %u.patt: %pattern_type = value_binding_pattern u [concrete] +// CHECK:STDOUT: %u.patt: %pattern_type = value_binding_pattern u [concrete = constants.%u.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc8_8: type = type_literal type [concrete = type] // CHECK:STDOUT: %.loc8_21.1: type = value_of_initializer @__global_init.%Make.call // CHECK:STDOUT: %.loc8_21.2: type = converted @__global_init.%Make.call, %.loc8_21.1 +// CHECK:STDOUT: %.loc8_8: type = type_literal type [concrete = type] // CHECK:STDOUT: %u: type = value_binding u, %.loc8_21.2 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/builtins/no_op.carbon b/toolchain/check/testdata/builtins/no_op.carbon index f891266fe406..9a5d85f6c0cb 100644 --- a/toolchain/check/testdata/builtins/no_op.carbon +++ b/toolchain/check/testdata/builtins/no_op.carbon @@ -125,12 +125,14 @@ fn NoOp() -> {} = "no_op"; // CHECK:STDOUT: %NoOp: %NoOp.type = struct_value () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %empty_tuple.type = var %x.var_patt [concrete] // CHECK:STDOUT: %.loc7_9.1: type = splice_block %.loc7_9.3 [concrete = constants.%empty_tuple.type] { diff --git a/toolchain/check/testdata/builtins/pointer/is_null.carbon b/toolchain/check/testdata/builtins/pointer/is_null.carbon index 8a2dad1d86fe..dcb5ef8209a2 100644 --- a/toolchain/check/testdata/builtins/pointer/is_null.carbon +++ b/toolchain/check/testdata/builtins/pointer/is_null.carbon @@ -98,6 +98,8 @@ fn NotPointer(p: MakeUnformed({})) -> bool = "pointer.is_null"; // CHECK:STDOUT: %pattern_type.b42: type = pattern_type %.b2d [concrete] // CHECK:STDOUT: %.f34: Core.Form = init_form bool [concrete] // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] +// CHECK:STDOUT: %return.param_patt.5a1: %pattern_type.831 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.c0c: %pattern_type.831 = return_slot_pattern %return.param_patt.5a1, bool [concrete] // CHECK:STDOUT: %IsNullEmptyStruct.type: type = fn_type @IsNullEmptyStruct [concrete] // CHECK:STDOUT: %IsNullEmptyStruct: %IsNullEmptyStruct.type = struct_value () [concrete] // CHECK:STDOUT: %ptr.6b6: type = ptr_type %C [concrete] @@ -105,18 +107,22 @@ fn NotPointer(p: MakeUnformed({})) -> bool = "pointer.is_null"; // CHECK:STDOUT: %pattern_type.e22: type = pattern_type %.9e8 [concrete] // CHECK:STDOUT: %IsNullC.type: type = fn_type @IsNullC [concrete] // CHECK:STDOUT: %IsNullC: %IsNullC.type = struct_value () [concrete] +// CHECK:STDOUT: %s.param_patt: %pattern_type.b42 = value_param_pattern [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.b42 = at_binding_pattern s, %s.param_patt [concrete] // CHECK:STDOUT: %TestEmptyStruct.type: type = fn_type @TestEmptyStruct [concrete] // CHECK:STDOUT: %TestEmptyStruct: %TestEmptyStruct.type = struct_value () [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.e22 = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.e22 = at_binding_pattern c, %c.param_patt [concrete] // CHECK:STDOUT: %TestC.type: type = fn_type @TestC [concrete] // CHECK:STDOUT: %TestC: %TestC.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %TestEmptyStruct.decl: %TestEmptyStruct.type = fn_decl @TestEmptyStruct [concrete = constants.%TestEmptyStruct] { -// CHECK:STDOUT: %s.param_patt: %pattern_type.b42 = value_param_pattern [concrete] -// CHECK:STDOUT: %s.patt: %pattern_type.b42 = at_binding_pattern s, %s.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc11_45.1 [concrete] +// CHECK:STDOUT: %s.param_patt: %pattern_type.b42 = value_param_pattern [concrete = constants.%s.param_patt] +// CHECK:STDOUT: %s.patt: %pattern_type.b42 = at_binding_pattern s, %s.param_patt [concrete = constants.%s.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete = constants.%return.param_patt.5a1] +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc11_45.1 [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc11_45.1: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc11_45.2: Core.Form = init_form %.loc11_45.1 [concrete = constants.%.f34] @@ -135,10 +141,10 @@ fn NotPointer(p: MakeUnformed({})) -> bool = "pointer.is_null"; // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestC.decl: %TestC.type = fn_decl @TestC [concrete = constants.%TestC] { -// CHECK:STDOUT: %c.param_patt: %pattern_type.e22 = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.e22 = at_binding_pattern c, %c.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc15_34.1 [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.e22 = value_param_pattern [concrete = constants.%c.param_patt] +// CHECK:STDOUT: %c.patt: %pattern_type.e22 = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete = constants.%return.param_patt.5a1] +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc15_34.1 [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc15_34.1: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc15_34.2: Core.Form = init_form %.loc15_34.1 [concrete = constants.%.f34] @@ -180,6 +186,8 @@ fn NotPointer(p: MakeUnformed({})) -> bool = "pointer.is_null"; // CHECK:STDOUT: %MakeUnformed: %MakeUnformed.type = struct_value () [concrete] // CHECK:STDOUT: %.f34: Core.Form = init_form bool [concrete] // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] +// CHECK:STDOUT: %return.param_patt.5a1: %pattern_type.831 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.c0c: %pattern_type.831 = return_slot_pattern %return.param_patt.5a1, bool [concrete] // CHECK:STDOUT: %IsNull.type: type = fn_type @IsNull [concrete] // CHECK:STDOUT: %IsNull: %IsNull.type = struct_value () [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] @@ -188,12 +196,16 @@ fn NotPointer(p: MakeUnformed({})) -> bool = "pointer.is_null"; // CHECK:STDOUT: %ptr.c28: type = ptr_type %empty_struct_type [concrete] // CHECK:STDOUT: %.b2d: type = maybe_unformed_type %ptr.c28 [concrete] // CHECK:STDOUT: %pattern_type.b42: type = pattern_type %.b2d [concrete] +// CHECK:STDOUT: %s.param_patt: %pattern_type.b42 = value_param_pattern [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.b42 = at_binding_pattern s, %s.param_patt [concrete] // CHECK:STDOUT: %TestEmptyStruct.type: type = fn_type @TestEmptyStruct [concrete] // CHECK:STDOUT: %TestEmptyStruct: %TestEmptyStruct.type = struct_value () [concrete] // CHECK:STDOUT: %IsNull.specific_fn.add: = specific_function %IsNull, @IsNull(%empty_struct_type) [concrete] // CHECK:STDOUT: %ptr.6b6: type = ptr_type %C [concrete] // CHECK:STDOUT: %.9e8: type = maybe_unformed_type %ptr.6b6 [concrete] // CHECK:STDOUT: %pattern_type.e22: type = pattern_type %.9e8 [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.e22 = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.e22 = at_binding_pattern c, %c.param_patt [concrete] // CHECK:STDOUT: %TestC.type: type = fn_type @TestC [concrete] // CHECK:STDOUT: %TestC: %TestC.type = struct_value () [concrete] // CHECK:STDOUT: %IsNull.specific_fn.5e3: = specific_function %IsNull, @IsNull(%C) [concrete] @@ -201,10 +213,10 @@ fn NotPointer(p: MakeUnformed({})) -> bool = "pointer.is_null"; // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %TestEmptyStruct.decl: %TestEmptyStruct.type = fn_decl @TestEmptyStruct [concrete = constants.%TestEmptyStruct] { -// CHECK:STDOUT: %s.param_patt: %pattern_type.b42 = value_param_pattern [concrete] -// CHECK:STDOUT: %s.patt: %pattern_type.b42 = at_binding_pattern s, %s.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc10_45.1 [concrete] +// CHECK:STDOUT: %s.param_patt: %pattern_type.b42 = value_param_pattern [concrete = constants.%s.param_patt] +// CHECK:STDOUT: %s.patt: %pattern_type.b42 = at_binding_pattern s, %s.param_patt [concrete = constants.%s.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete = constants.%return.param_patt.5a1] +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc10_45.1 [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc10_45.1: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc10_45.2: Core.Form = init_form %.loc10_45.1 [concrete = constants.%.f34] @@ -223,10 +235,10 @@ fn NotPointer(p: MakeUnformed({})) -> bool = "pointer.is_null"; // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestC.decl: %TestC.type = fn_decl @TestC [concrete = constants.%TestC] { -// CHECK:STDOUT: %c.param_patt: %pattern_type.e22 = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.e22 = at_binding_pattern c, %c.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc14_34.1 [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.e22 = value_param_pattern [concrete = constants.%c.param_patt] +// CHECK:STDOUT: %c.patt: %pattern_type.e22 = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete = constants.%return.param_patt.5a1] +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc14_34.1 [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc14_34.1: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc14_34.2: Core.Form = init_form %.loc14_34.1 [concrete = constants.%.f34] diff --git a/toolchain/check/testdata/builtins/pointer/make_null.carbon b/toolchain/check/testdata/builtins/pointer/make_null.carbon index 4295f8fa0e22..1dd1f553a70d 100644 --- a/toolchain/check/testdata/builtins/pointer/make_null.carbon +++ b/toolchain/check/testdata/builtins/pointer/make_null.carbon @@ -81,12 +81,16 @@ fn NotPointer() -> MakeUnformed({}) = "pointer.make_null"; // CHECK:STDOUT: %pattern_type.e22: type = pattern_type %.9e8 [concrete] // CHECK:STDOUT: %MakeNullC.type: type = fn_type @MakeNullC [concrete] // CHECK:STDOUT: %MakeNullC: %MakeNullC.type = struct_value () [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.b42 = value_binding_pattern s [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.e22 = value_binding_pattern c [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %s.patt: %pattern_type.b42 = value_binding_pattern s [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.b42 = value_binding_pattern s [concrete = constants.%s.patt] // CHECK:STDOUT: } +// CHECK:STDOUT: %.loc11_48.1: %.b2d = value_of_initializer @__global_init.%MakeNullEmptyStruct.call +// CHECK:STDOUT: %.loc11_48.2: %.b2d = converted @__global_init.%MakeNullEmptyStruct.call, %.loc11_48.1 // CHECK:STDOUT: %.loc11_24.1: type = splice_block %.loc11_24.3 [concrete = constants.%.b2d] { // CHECK:STDOUT: %MakeUnformed.ref.loc11: %MakeUnformed.type = name_ref MakeUnformed, %MakeUnformed.decl [concrete = constants.%MakeUnformed] // CHECK:STDOUT: %.loc11_22: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] @@ -96,12 +100,12 @@ fn NotPointer() -> MakeUnformed({}) = "pointer.make_null"; // CHECK:STDOUT: %.loc11_24.2: type = value_of_initializer %MakeUnformed.call.loc11 [concrete = constants.%.b2d] // CHECK:STDOUT: %.loc11_24.3: type = converted %MakeUnformed.call.loc11, %.loc11_24.2 [concrete = constants.%.b2d] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc11_48.1: %.b2d = value_of_initializer @__global_init.%MakeNullEmptyStruct.call -// CHECK:STDOUT: %.loc11_48.2: %.b2d = converted @__global_init.%MakeNullEmptyStruct.call, %.loc11_48.1 // CHECK:STDOUT: %s: %.b2d = value_binding s, %.loc11_48.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.e22 = value_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.e22 = value_binding_pattern c [concrete = constants.%c.patt] // CHECK:STDOUT: } +// CHECK:STDOUT: %.loc12_37.1: %.9e8 = value_of_initializer @__global_init.%MakeNullC.call +// CHECK:STDOUT: %.loc12_37.2: %.9e8 = converted @__global_init.%MakeNullC.call, %.loc12_37.1 // CHECK:STDOUT: %.loc12_23.1: type = splice_block %.loc12_23.3 [concrete = constants.%.9e8] { // CHECK:STDOUT: %MakeUnformed.ref.loc12: %MakeUnformed.type = name_ref MakeUnformed, %MakeUnformed.decl [concrete = constants.%MakeUnformed] // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] @@ -110,8 +114,6 @@ fn NotPointer() -> MakeUnformed({}) = "pointer.make_null"; // CHECK:STDOUT: %.loc12_23.2: type = value_of_initializer %MakeUnformed.call.loc12 [concrete = constants.%.9e8] // CHECK:STDOUT: %.loc12_23.3: type = converted %MakeUnformed.call.loc12, %.loc12_23.2 [concrete = constants.%.9e8] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc12_37.1: %.9e8 = value_of_initializer @__global_init.%MakeNullC.call -// CHECK:STDOUT: %.loc12_37.2: %.9e8 = converted @__global_init.%MakeNullC.call, %.loc12_37.1 // CHECK:STDOUT: %c: %.9e8 = value_binding c, %.loc12_37.2 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -137,17 +139,21 @@ fn NotPointer() -> MakeUnformed({}) = "pointer.make_null"; // CHECK:STDOUT: %ptr.c28: type = ptr_type %empty_struct_type [concrete] // CHECK:STDOUT: %.b2d: type = maybe_unformed_type %ptr.c28 [concrete] // CHECK:STDOUT: %pattern_type.b42: type = pattern_type %.b2d [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.b42 = value_binding_pattern s [concrete] // CHECK:STDOUT: %MakeNull.specific_fn.391: = specific_function %MakeNull, @MakeNull(%empty_struct_type) [concrete] // CHECK:STDOUT: %ptr.6b6: type = ptr_type %C [concrete] // CHECK:STDOUT: %.9e8: type = maybe_unformed_type %ptr.6b6 [concrete] // CHECK:STDOUT: %pattern_type.e22: type = pattern_type %.9e8 [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.e22 = value_binding_pattern c [concrete] // CHECK:STDOUT: %MakeNull.specific_fn.75f: = specific_function %MakeNull, @MakeNull(%C) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %s.patt: %pattern_type.b42 = value_binding_pattern s [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.b42 = value_binding_pattern s [concrete = constants.%s.patt] // CHECK:STDOUT: } +// CHECK:STDOUT: %.loc10_39.1: %.b2d = value_of_initializer @__global_init.%MakeNull.call.loc10 +// CHECK:STDOUT: %.loc10_39.2: %.b2d = converted @__global_init.%MakeNull.call.loc10, %.loc10_39.1 // CHECK:STDOUT: %.loc10_24.1: type = splice_block %.loc10_24.3 [concrete = constants.%.b2d] { // CHECK:STDOUT: %MakeUnformed.ref.loc10: %MakeUnformed.type = name_ref MakeUnformed, %MakeUnformed.decl [concrete = constants.%MakeUnformed] // CHECK:STDOUT: %.loc10_22: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] @@ -157,12 +163,12 @@ fn NotPointer() -> MakeUnformed({}) = "pointer.make_null"; // CHECK:STDOUT: %.loc10_24.2: type = value_of_initializer %MakeUnformed.call.loc10 [concrete = constants.%.b2d] // CHECK:STDOUT: %.loc10_24.3: type = converted %MakeUnformed.call.loc10, %.loc10_24.2 [concrete = constants.%.b2d] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc10_39.1: %.b2d = value_of_initializer @__global_init.%MakeNull.call.loc10 -// CHECK:STDOUT: %.loc10_39.2: %.b2d = converted @__global_init.%MakeNull.call.loc10, %.loc10_39.1 // CHECK:STDOUT: %s: %.b2d = value_binding s, %.loc10_39.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.e22 = value_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.e22 = value_binding_pattern c [concrete = constants.%c.patt] // CHECK:STDOUT: } +// CHECK:STDOUT: %.loc11_37.1: %.9e8 = value_of_initializer @__global_init.%MakeNull.call.loc11 +// CHECK:STDOUT: %.loc11_37.2: %.9e8 = converted @__global_init.%MakeNull.call.loc11, %.loc11_37.1 // CHECK:STDOUT: %.loc11_23.1: type = splice_block %.loc11_23.3 [concrete = constants.%.9e8] { // CHECK:STDOUT: %MakeUnformed.ref.loc11: %MakeUnformed.type = name_ref MakeUnformed, %MakeUnformed.decl [concrete = constants.%MakeUnformed] // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] @@ -171,8 +177,6 @@ fn NotPointer() -> MakeUnformed({}) = "pointer.make_null"; // CHECK:STDOUT: %.loc11_23.2: type = value_of_initializer %MakeUnformed.call.loc11 [concrete = constants.%.9e8] // CHECK:STDOUT: %.loc11_23.3: type = converted %MakeUnformed.call.loc11, %.loc11_23.2 [concrete = constants.%.9e8] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc11_37.1: %.9e8 = value_of_initializer @__global_init.%MakeNull.call.loc11 -// CHECK:STDOUT: %.loc11_37.2: %.9e8 = converted @__global_init.%MakeNull.call.loc11, %.loc11_37.1 // CHECK:STDOUT: %c: %.9e8 = value_binding c, %.loc11_37.2 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/builtins/read/char.carbon b/toolchain/check/testdata/builtins/read/char.carbon index 861dcec99564..95efe053c95f 100644 --- a/toolchain/check/testdata/builtins/read/char.carbon +++ b/toolchain/check/testdata/builtins/read/char.carbon @@ -33,6 +33,8 @@ fn Main() { // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %ReadChar.type.fc4: type = fn_type @ReadChar.loc4 [concrete] // CHECK:STDOUT: %ReadChar.c25: %ReadChar.type.fc4 = struct_value () [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = value_binding_pattern n [concrete] +// CHECK:STDOUT: %m.patt: %pattern_type.6b6 = value_binding_pattern m [concrete] // CHECK:STDOUT: %ReadChar.type.490: type = fn_type @ReadChar.1 [concrete] // CHECK:STDOUT: %ReadChar.3b5: %ReadChar.type.490 = struct_value () [concrete] // CHECK:STDOUT: } @@ -52,23 +54,23 @@ fn Main() { // CHECK:STDOUT: fn @Main() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = value_binding_pattern n [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = value_binding_pattern n [concrete = constants.%n.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %ReadChar.ref.loc8: %ReadChar.type.fc4 = name_ref ReadChar, file.%ReadChar.decl [concrete = constants.%ReadChar.c25] // CHECK:STDOUT: %ReadChar.call.loc8: init %i32 = call %ReadChar.ref.loc8() -// CHECK:STDOUT: %i32.loc8: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc8_32.1: %i32 = value_of_initializer %ReadChar.call.loc8 // CHECK:STDOUT: %.loc8_32.2: %i32 = converted %ReadChar.call.loc8, %.loc8_32.1 +// CHECK:STDOUT: %i32.loc8: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %n: %i32 = value_binding n, %.loc8_32.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %m.patt: %pattern_type.6b6 = value_binding_pattern m [concrete] +// CHECK:STDOUT: %m.patt: %pattern_type.6b6 = value_binding_pattern m [concrete = constants.%m.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Core.ref: = name_ref Core, imports.%Core [concrete = imports.%Core] // CHECK:STDOUT: %ReadChar.ref.loc9: %ReadChar.type.490 = name_ref ReadChar, imports.%Core.ReadChar [concrete = constants.%ReadChar.3b5] // CHECK:STDOUT: %ReadChar.call.loc9: init %i32 = call %ReadChar.ref.loc9() -// CHECK:STDOUT: %i32.loc9: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc9_37.1: %i32 = value_of_initializer %ReadChar.call.loc9 // CHECK:STDOUT: %.loc9_37.2: %i32 = converted %ReadChar.call.loc9, %.loc9_37.1 +// CHECK:STDOUT: %i32.loc9: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %m: %i32 = value_binding m, %.loc9_37.2 // CHECK:STDOUT: // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/choice/basic.carbon b/toolchain/check/testdata/choice/basic.carbon index dbd06c3e50f4..7bee67ab8329 100644 --- a/toolchain/check/testdata/choice/basic.carbon +++ b/toolchain/check/testdata/choice/basic.carbon @@ -90,12 +90,13 @@ let never: Never = {}; // CHECK:STDOUT: %Always.val: %Always = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %.302: ref %Always = temporary invalid, %Always.val [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %Always [concrete] +// CHECK:STDOUT: %mood.patt: %pattern_type = value_binding_pattern mood [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %Always.decl: type = class_decl @Always [concrete = constants.%Always] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %mood.patt: %pattern_type = value_binding_pattern mood [concrete] +// CHECK:STDOUT: %mood.patt: %pattern_type = value_binding_pattern mood [concrete = constants.%mood.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Always.ref: type = name_ref Always, %Always.decl [concrete = constants.%Always] // CHECK:STDOUT: %mood: %Always = value_binding mood, @__global_init.%Sunny.ref @@ -197,6 +198,10 @@ let never: Never = {}; // CHECK:STDOUT: %Ordering.val.3b4: %Ordering = struct_value (%int_3.184) [concrete] // CHECK:STDOUT: %.a83: ref %Ordering = temporary invalid, %Ordering.val.3b4 [concrete] // CHECK:STDOUT: %pattern_type.542: type = pattern_type %Ordering [concrete] +// CHECK:STDOUT: %less.patt: %pattern_type.542 = value_binding_pattern less [concrete] +// CHECK:STDOUT: %equiv.patt: %pattern_type.542 = value_binding_pattern equiv [concrete] +// CHECK:STDOUT: %greater.patt: %pattern_type.542 = value_binding_pattern greater [concrete] +// CHECK:STDOUT: %inc.patt: %pattern_type.542 = value_binding_pattern inc [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -209,22 +214,22 @@ let never: Never = {}; // CHECK:STDOUT: file { // CHECK:STDOUT: %Ordering.decl: type = class_decl @Ordering [concrete = constants.%Ordering] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %less.patt: %pattern_type.542 = value_binding_pattern less [concrete] +// CHECK:STDOUT: %less.patt: %pattern_type.542 = value_binding_pattern less [concrete = constants.%less.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Ordering.ref.loc11: type = name_ref Ordering, %Ordering.decl [concrete = constants.%Ordering] // CHECK:STDOUT: %less: %Ordering = value_binding less, @__global_init.%Less.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %equiv.patt: %pattern_type.542 = value_binding_pattern equiv [concrete] +// CHECK:STDOUT: %equiv.patt: %pattern_type.542 = value_binding_pattern equiv [concrete = constants.%equiv.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Ordering.ref.loc12: type = name_ref Ordering, %Ordering.decl [concrete = constants.%Ordering] // CHECK:STDOUT: %equiv: %Ordering = value_binding equiv, @__global_init.%Equivalent.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %greater.patt: %pattern_type.542 = value_binding_pattern greater [concrete] +// CHECK:STDOUT: %greater.patt: %pattern_type.542 = value_binding_pattern greater [concrete = constants.%greater.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Ordering.ref.loc13: type = name_ref Ordering, %Ordering.decl [concrete = constants.%Ordering] // CHECK:STDOUT: %greater: %Ordering = value_binding greater, @__global_init.%Greater.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %inc.patt: %pattern_type.542 = value_binding_pattern inc [concrete] +// CHECK:STDOUT: %inc.patt: %pattern_type.542 = value_binding_pattern inc [concrete = constants.%inc.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Ordering.ref.loc14: type = name_ref Ordering, %Ordering.decl [concrete = constants.%Ordering] // CHECK:STDOUT: %inc: %Ordering = value_binding inc, @__global_init.%Incomparable.ref diff --git a/toolchain/check/testdata/choice/generic.carbon b/toolchain/check/testdata/choice/generic.carbon index 1d5c6351059a..1aae4d6e7a47 100644 --- a/toolchain/check/testdata/choice/generic.carbon +++ b/toolchain/check/testdata/choice/generic.carbon @@ -22,6 +22,7 @@ choice Always(T:! type) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Always.type: type = generic_class_type @Always [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -38,7 +39,7 @@ choice Always(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %Always.decl: %Always.type = class_decl @Always [concrete = constants.%Always.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc14_16.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_16.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc14_19.1: type = splice_block %.loc14_19.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -49,6 +50,7 @@ choice Always(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Always(%T.loc14_16.2: type) { +// CHECK:STDOUT: %T.patt.loc14_16.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_16.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc14_16.1: type = symbolic_binding T, 0 [symbolic = %T.loc14_16.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -82,6 +84,7 @@ choice Always(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Always(constants.%T) { +// CHECK:STDOUT: %T.patt.loc14_16.2 => constants.%T.patt // CHECK:STDOUT: %T.loc14_16.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/abstract/abstract.carbon b/toolchain/check/testdata/class/abstract/abstract.carbon index a7d96f0aefee..75aa6b143fb3 100644 --- a/toolchain/check/testdata/class/abstract/abstract.carbon +++ b/toolchain/check/testdata/class/abstract/abstract.carbon @@ -317,8 +317,8 @@ fn CallReturnAbstract() { // CHECK:STDOUT: fn @Var() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt: = ref_binding_pattern v [concrete = ] +// CHECK:STDOUT: %v.var_patt: = var_pattern %v.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref = var %v.var_patt [concrete = ] // CHECK:STDOUT: assign %v.var, @@ -353,8 +353,8 @@ fn CallReturnAbstract() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Abstract.decl: type = class_decl @Abstract [concrete = constants.%Abstract] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %_.patt: = ref_binding_pattern _ [concrete] -// CHECK:STDOUT: %_.param_patt: = var_param_pattern %_.patt [concrete] +// CHECK:STDOUT: %_.patt: = ref_binding_pattern _ [concrete = ] +// CHECK:STDOUT: %_.param_patt: = var_param_pattern %_.patt [concrete = ] // CHECK:STDOUT: } { // CHECK:STDOUT: %_.param: ref = ref_param call_param0 // CHECK:STDOUT: %Abstract.ref: type = name_ref Abstract, file.%Abstract.decl [concrete = constants.%Abstract] @@ -382,8 +382,11 @@ fn CallReturnAbstract() { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %Abstract [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] +// CHECK:STDOUT: %l.patt: %pattern_type = value_binding_pattern l [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -402,8 +405,8 @@ fn CallReturnAbstract() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Abstract.decl: type = class_decl @Abstract [concrete = constants.%Abstract] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %Abstract = value_param call_param0 // CHECK:STDOUT: %Abstract.ref.loc6: type = name_ref Abstract, file.%Abstract.decl [concrete = constants.%Abstract] @@ -422,7 +425,7 @@ fn CallReturnAbstract() { // CHECK:STDOUT: fn @F(%a.param: %Abstract) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %l.patt: %pattern_type = value_binding_pattern l [concrete] +// CHECK:STDOUT: %l.patt: %pattern_type = value_binding_pattern l [concrete = constants.%l.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.ref: %Abstract = name_ref a, %a // CHECK:STDOUT: %Abstract.ref.loc7: type = name_ref Abstract, file.%Abstract.decl [concrete = constants.%Abstract] @@ -483,9 +486,13 @@ fn CallReturnAbstract() { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %Abstract [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %Param.type: type = fn_type @Param [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Param: %Param.type = struct_value () [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type = at_binding_pattern p, %p.param_patt [concrete] // CHECK:STDOUT: %Call.type: type = fn_type @Call [concrete] // CHECK:STDOUT: %Call: %Call.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -507,16 +514,16 @@ fn CallReturnAbstract() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Abstract.decl: type = class_decl @Abstract [concrete = constants.%Abstract] {} {} // CHECK:STDOUT: %Param.decl: %Param.type = fn_decl @Param [concrete = constants.%Param] { -// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %Abstract = value_param call_param0 // CHECK:STDOUT: %Abstract.ref: type = name_ref Abstract, file.%Abstract.decl [concrete = constants.%Abstract] // CHECK:STDOUT: %a: %Abstract = value_binding a, %a.param // CHECK:STDOUT: } // CHECK:STDOUT: %Call.decl: %Call.type = fn_decl @Call [concrete = constants.%Call] { -// CHECK:STDOUT: %p.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type = at_binding_pattern p, %p.param_patt [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type = value_param_pattern [concrete = constants.%p.param_patt] +// CHECK:STDOUT: %p.patt: %pattern_type = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %p.param: %Abstract = value_param call_param0 // CHECK:STDOUT: %Abstract.ref: type = name_ref Abstract, file.%Abstract.decl [concrete = constants.%Abstract] @@ -556,6 +563,8 @@ fn CallReturnAbstract() { // CHECK:STDOUT: %complete_type.3c7: = complete_type_witness %struct_type.base.d.008 [concrete] // CHECK:STDOUT: %.3c6: Core.Form = init_form %Derived [concrete] // CHECK:STDOUT: %pattern_type.746: type = pattern_type %Derived [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.746 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type.746 = return_slot_pattern %return.param_patt, %Derived [concrete] // CHECK:STDOUT: %Make.type: type = fn_type @Make [concrete] // CHECK:STDOUT: %Make: %Make.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.d.e0f: type = struct_type {.base: %empty_struct_type, .d: %empty_struct_type} [concrete] @@ -584,8 +593,8 @@ fn CallReturnAbstract() { // CHECK:STDOUT: %Abstract.decl: type = class_decl @Abstract [concrete = constants.%Abstract] {} {} // CHECK:STDOUT: %Derived.decl: type = class_decl @Derived [concrete = constants.%Derived] {} {} // CHECK:STDOUT: %Make.decl: %Make.type = fn_decl @Make [concrete = constants.%Make] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.746 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.746 = return_slot_pattern %return.param_patt, %Derived.ref [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.746 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.746 = return_slot_pattern %return.param_patt, %Derived.ref [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %Derived.ref: type = name_ref Derived, file.%Derived.decl [concrete = constants.%Derived] // CHECK:STDOUT: %.loc12: Core.Form = init_form %Derived.ref [concrete = constants.%.3c6] @@ -647,7 +656,11 @@ fn CallReturnAbstract() { // CHECK:STDOUT: %struct_type.base.d: type = struct_type {.base: %Abstract, .d: %empty_struct_type} [concrete] // CHECK:STDOUT: %complete_type.3c7: = complete_type_witness %struct_type.base.d [concrete] // CHECK:STDOUT: %pattern_type.169: type = pattern_type %Abstract [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.169 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.169 = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %.749: Core.Form = init_form %Abstract [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.169 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type.169 = return_slot_pattern %return.param_patt, %Abstract [concrete] // CHECK:STDOUT: %Return.type: type = fn_type @Return [concrete] // CHECK:STDOUT: %Return: %Return.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -670,10 +683,10 @@ fn CallReturnAbstract() { // CHECK:STDOUT: %Abstract.decl: type = class_decl @Abstract [concrete = constants.%Abstract] {} {} // CHECK:STDOUT: %Derived.decl: type = class_decl @Derived [concrete = constants.%Derived] {} {} // CHECK:STDOUT: %Return.decl: %Return.type = fn_decl @Return [concrete = constants.%Return] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.169 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.169 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.169 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.169 = return_slot_pattern %return.param_patt, %Abstract.ref.loc19_27 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.169 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.169 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.169 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.169 = return_slot_pattern %return.param_patt, %Abstract.ref.loc19_27 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %Abstract.ref.loc19_27: type = name_ref Abstract, file.%Abstract.decl [concrete = constants.%Abstract] // CHECK:STDOUT: %.loc19: Core.Form = init_form %Abstract.ref.loc19_27 [concrete = constants.%.749] @@ -730,7 +743,11 @@ fn CallReturnAbstract() { // CHECK:STDOUT: %struct_type.base.d.008: type = struct_type {.base: %Abstract, .d: %empty_struct_type} [concrete] // CHECK:STDOUT: %complete_type.3c7: = complete_type_witness %struct_type.base.d.008 [concrete] // CHECK:STDOUT: %pattern_type.746: type = pattern_type %Derived [concrete] +// CHECK:STDOUT: %d.param_patt: %pattern_type.746 = value_param_pattern [concrete] +// CHECK:STDOUT: %d.patt.fac: %pattern_type.746 = at_binding_pattern d, %d.param_patt [concrete] // CHECK:STDOUT: %.469: Core.Form = init_form %empty_struct_type [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.a96 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type.a96 = return_slot_pattern %return.param_patt, %empty_struct_type [concrete] // CHECK:STDOUT: %Access.type: type = fn_type @Access [concrete] // CHECK:STDOUT: %Access: %Access.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -753,10 +770,10 @@ fn CallReturnAbstract() { // CHECK:STDOUT: %Abstract.decl: type = class_decl @Abstract [concrete = constants.%Abstract] {} {} // CHECK:STDOUT: %Derived.decl: type = class_decl @Derived [concrete = constants.%Derived] {} {} // CHECK:STDOUT: %Access.decl: %Access.type = fn_decl @Access [concrete = constants.%Access] { -// CHECK:STDOUT: %d.param_patt: %pattern_type.746 = value_param_pattern [concrete] -// CHECK:STDOUT: %d.patt: %pattern_type.746 = at_binding_pattern d, %d.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.a96 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.a96 = return_slot_pattern %return.param_patt, %.loc13_27.2 [concrete] +// CHECK:STDOUT: %d.param_patt: %pattern_type.746 = value_param_pattern [concrete = constants.%d.param_patt] +// CHECK:STDOUT: %d.patt: %pattern_type.746 = at_binding_pattern d, %d.param_patt [concrete = constants.%d.patt.fac] +// CHECK:STDOUT: %return.param_patt: %pattern_type.a96 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.a96 = return_slot_pattern %return.param_patt, %.loc13_27.2 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc13_27.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] // CHECK:STDOUT: %.loc13_27.2: type = converted %.loc13_27.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type] @@ -812,6 +829,7 @@ fn CallReturnAbstract() { // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %Abstract [concrete] +// CHECK:STDOUT: %l.patt: %pattern_type = value_binding_pattern l [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -844,7 +862,7 @@ fn CallReturnAbstract() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %l.patt: %pattern_type = value_binding_pattern l [concrete] +// CHECK:STDOUT: %l.patt: %pattern_type = value_binding_pattern l [concrete = constants.%l.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc14: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] // CHECK:STDOUT: %Abstract.ref: type = name_ref Abstract, file.%Abstract.decl [concrete = constants.%Abstract] @@ -865,6 +883,7 @@ fn CallReturnAbstract() { // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %Abstract [concrete] +// CHECK:STDOUT: %l.patt: %pattern_type = value_binding_pattern l [concrete] // CHECK:STDOUT: %empty_struct.a40: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.f5e: type = struct_type {.base: %empty_struct_type} [concrete] // CHECK:STDOUT: %struct: %struct_type.base.f5e = struct_value (%empty_struct.a40) [concrete] @@ -918,7 +937,7 @@ fn CallReturnAbstract() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %l.patt: %pattern_type = value_binding_pattern l [concrete] +// CHECK:STDOUT: %l.patt: %pattern_type = value_binding_pattern l [concrete = constants.%l.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc22_38.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct.a40] // CHECK:STDOUT: %.loc22_39.1: %struct_type.base.f5e = struct_literal (%.loc22_38.1) [concrete = constants.%struct] @@ -943,6 +962,8 @@ fn CallReturnAbstract() { // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %.749: Core.Form = init_form %Abstract [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %Abstract [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %Abstract [concrete] // CHECK:STDOUT: %ReturnAbstract.type: type = fn_type @ReturnAbstract [concrete] // CHECK:STDOUT: %ReturnAbstract: %ReturnAbstract.type = struct_value () [concrete] // CHECK:STDOUT: %CallReturnAbstract.type: type = fn_type @CallReturnAbstract [concrete] @@ -966,8 +987,8 @@ fn CallReturnAbstract() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Abstract.decl: type = class_decl @Abstract [concrete = constants.%Abstract] {} {} // CHECK:STDOUT: %ReturnAbstract.decl: %ReturnAbstract.type = fn_decl @ReturnAbstract [concrete = constants.%ReturnAbstract] { -// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %Abstract.ref [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %Abstract.ref [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %Abstract.ref: type = name_ref Abstract, file.%Abstract.decl [concrete = constants.%Abstract] // CHECK:STDOUT: %.loc6: Core.Form = init_form %Abstract.ref [concrete = constants.%.749] diff --git a/toolchain/check/testdata/class/abstract/fail_abstract_in_struct.carbon b/toolchain/check/testdata/class/abstract/fail_abstract_in_struct.carbon index e73631c56d02..53995e885d18 100644 --- a/toolchain/check/testdata/class/abstract/fail_abstract_in_struct.carbon +++ b/toolchain/check/testdata/class/abstract/fail_abstract_in_struct.carbon @@ -175,8 +175,8 @@ var v5: {.m: Abstract}; // CHECK:STDOUT: } // CHECK:STDOUT: %Abstract2.decl: type = class_decl @Abstract2 [concrete = constants.%Abstract2] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt: = ref_binding_pattern v [concrete = ] +// CHECK:STDOUT: %v.var_patt: = var_pattern %v.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref = var %v.var_patt [concrete = ] // CHECK:STDOUT: %.loc12: type = splice_block %struct_type.m2 [concrete = constants.%struct_type.m2.bb3] { @@ -207,10 +207,13 @@ var v5: {.m: Abstract}; // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.457: type = pattern_type %Abstract3 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.457 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.457 = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.m3.937: type = struct_type {.m3: %Abstract3} [concrete] // CHECK:STDOUT: %pattern_type.2be: type = pattern_type %struct_type.m3.937 [concrete] +// CHECK:STDOUT: %l.patt: %pattern_type.2be = value_binding_pattern l [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -220,8 +223,8 @@ var v5: {.m: Abstract}; // CHECK:STDOUT: } // CHECK:STDOUT: %Abstract3.decl: type = class_decl @Abstract3 [concrete = constants.%Abstract3] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.457 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.457 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.457 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.457 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %Abstract3 = value_param call_param0 // CHECK:STDOUT: %Abstract3.ref.loc6: type = name_ref Abstract3, file.%Abstract3.decl [concrete = constants.%Abstract3] @@ -240,7 +243,7 @@ var v5: {.m: Abstract}; // CHECK:STDOUT: fn @F(%a.param: %Abstract3) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %l.patt: %pattern_type.2be = value_binding_pattern l [concrete] +// CHECK:STDOUT: %l.patt: %pattern_type.2be = value_binding_pattern l [concrete = constants.%l.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.ref: %Abstract3 = name_ref a, %a // CHECK:STDOUT: %.loc14_44: %struct_type.m3.937 = struct_literal (%a.ref) @@ -271,8 +274,8 @@ var v5: {.m: Abstract}; // CHECK:STDOUT: %Abstract4.decl: type = class_decl @Abstract4 [concrete = constants.%Abstract4] {} {} // CHECK:STDOUT: %Abstract5.decl: type = class_decl @Abstract5 [concrete = constants.%Abstract5] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v2.patt: = ref_binding_pattern v2 [concrete] -// CHECK:STDOUT: %v2.var_patt: = var_pattern %v2.patt [concrete] +// CHECK:STDOUT: %v2.patt: = ref_binding_pattern v2 [concrete = ] +// CHECK:STDOUT: %v2.var_patt: = var_pattern %v2.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %v2.var: ref = var %v2.var_patt [concrete = ] // CHECK:STDOUT: %.loc13: type = splice_block %struct_type.m4.m5 [concrete = constants.%struct_type.m4.m5.5e1] { @@ -323,8 +326,8 @@ var v5: {.m: Abstract}; // CHECK:STDOUT: } // CHECK:STDOUT: %Abstract6.decl: type = class_decl @Abstract6 [concrete = constants.%Abstract6] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v3.patt: = ref_binding_pattern v3 [concrete] -// CHECK:STDOUT: %v3.var_patt: = var_pattern %v3.patt [concrete] +// CHECK:STDOUT: %v3.patt: = ref_binding_pattern v3 [concrete = ] +// CHECK:STDOUT: %v3.var_patt: = var_pattern %v3.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %v3.var: ref = var %v3.var_patt [concrete = ] // CHECK:STDOUT: %.loc12_33: type = splice_block %struct_type.m6.c1 [concrete = constants.%struct_type.m6.c1.a63] { @@ -368,8 +371,8 @@ var v5: {.m: Abstract}; // CHECK:STDOUT: } // CHECK:STDOUT: %Abstract7.decl: type = class_decl @Abstract7 [concrete = constants.%Abstract7] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v4.patt: = ref_binding_pattern v4 [concrete] -// CHECK:STDOUT: %v4.var_patt: = var_pattern %v4.patt [concrete] +// CHECK:STDOUT: %v4.patt: = ref_binding_pattern v4 [concrete = ] +// CHECK:STDOUT: %v4.var_patt: = var_pattern %v4.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %v4.var: ref = var %v4.var_patt [concrete = ] // CHECK:STDOUT: %.loc12_33: type = splice_block %struct_type.c2.m7 [concrete = constants.%struct_type.c2.m7.518] { @@ -440,8 +443,8 @@ var v5: {.m: Abstract}; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v5.patt: = ref_binding_pattern v5 [concrete] -// CHECK:STDOUT: %v5.var_patt: = var_pattern %v5.patt [concrete] +// CHECK:STDOUT: %v5.patt: = ref_binding_pattern v5 [concrete = ] +// CHECK:STDOUT: %v5.var_patt: = var_pattern %v5.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %v5.var: ref = var %v5.var_patt [concrete = ] // CHECK:STDOUT: %.loc13: type = splice_block %struct_type.m [concrete = constants.%struct_type.m.b92] { diff --git a/toolchain/check/testdata/class/abstract/fail_abstract_in_tuple.carbon b/toolchain/check/testdata/class/abstract/fail_abstract_in_tuple.carbon index 85620a00f859..305f6618f61f 100644 --- a/toolchain/check/testdata/class/abstract/fail_abstract_in_tuple.carbon +++ b/toolchain/check/testdata/class/abstract/fail_abstract_in_tuple.carbon @@ -223,8 +223,8 @@ fn Var5() { // CHECK:STDOUT: fn @Var() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt: = ref_binding_pattern v [concrete = ] +// CHECK:STDOUT: %v.var_patt: = var_pattern %v.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref = var %v.var_patt [concrete = ] // CHECK:STDOUT: assign %v.var, @@ -244,12 +244,15 @@ fn Var5() { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.457: type = pattern_type %Abstract3 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.457 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.457 = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %tuple.type.85c: type = tuple_type (type) [concrete] // CHECK:STDOUT: %tuple: %tuple.type.85c = tuple_value (%Abstract3) [concrete] // CHECK:STDOUT: %tuple.type.4cc: type = tuple_type (%Abstract3) [concrete] // CHECK:STDOUT: %pattern_type.ac0: type = pattern_type %tuple.type.4cc [concrete] +// CHECK:STDOUT: %l.patt: %pattern_type.ac0 = value_binding_pattern l [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -268,8 +271,8 @@ fn Var5() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Abstract3.decl: type = class_decl @Abstract3 [concrete = constants.%Abstract3] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.457 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.457 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.457 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.457 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %Abstract3 = value_param call_param0 // CHECK:STDOUT: %Abstract3.ref.loc6: type = name_ref Abstract3, file.%Abstract3.decl [concrete = constants.%Abstract3] @@ -288,7 +291,7 @@ fn Var5() { // CHECK:STDOUT: fn @F(%a.param: %Abstract3) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %l.patt: %pattern_type.ac0 = value_binding_pattern l [concrete] +// CHECK:STDOUT: %l.patt: %pattern_type.ac0 = value_binding_pattern l [concrete = constants.%l.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.ref: %Abstract3 = name_ref a, %a // CHECK:STDOUT: %.loc14_35: %tuple.type.4cc = tuple_literal (%a.ref) @@ -357,8 +360,8 @@ fn Var5() { // CHECK:STDOUT: fn @Var2() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v2.patt: = ref_binding_pattern v2 [concrete] -// CHECK:STDOUT: %v2.var_patt: = var_pattern %v2.patt [concrete] +// CHECK:STDOUT: %v2.patt: = ref_binding_pattern v2 [concrete = ] +// CHECK:STDOUT: %v2.var_patt: = var_pattern %v2.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %v2.var: ref = var %v2.var_patt [concrete = ] // CHECK:STDOUT: assign %v2.var, @@ -418,8 +421,8 @@ fn Var5() { // CHECK:STDOUT: fn @Var3() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v3.patt: = ref_binding_pattern v3 [concrete] -// CHECK:STDOUT: %v3.var_patt: = var_pattern %v3.patt [concrete] +// CHECK:STDOUT: %v3.patt: = ref_binding_pattern v3 [concrete = ] +// CHECK:STDOUT: %v3.var_patt: = var_pattern %v3.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %v3.var: ref = var %v3.var_patt [concrete = ] // CHECK:STDOUT: assign %v3.var, @@ -480,8 +483,8 @@ fn Var5() { // CHECK:STDOUT: fn @Var4() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v4.patt: = ref_binding_pattern v4 [concrete] -// CHECK:STDOUT: %v4.var_patt: = var_pattern %v4.patt [concrete] +// CHECK:STDOUT: %v4.patt: = ref_binding_pattern v4 [concrete = ] +// CHECK:STDOUT: %v4.var_patt: = var_pattern %v4.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %v4.var: ref = var %v4.var_patt [concrete = ] // CHECK:STDOUT: assign %v4.var, @@ -575,8 +578,8 @@ fn Var5() { // CHECK:STDOUT: fn @Var5() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v5.patt: = ref_binding_pattern v5 [concrete] -// CHECK:STDOUT: %v5.var_patt: = var_pattern %v5.patt [concrete] +// CHECK:STDOUT: %v5.patt: = ref_binding_pattern v5 [concrete = ] +// CHECK:STDOUT: %v5.var_patt: = var_pattern %v5.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %v5.var: ref = var %v5.var_patt [concrete = ] // CHECK:STDOUT: assign %v5.var, diff --git a/toolchain/check/testdata/class/access/access_modifers.carbon b/toolchain/check/testdata/class/access/access_modifers.carbon index bc06410741de..a08926616e9b 100644 --- a/toolchain/check/testdata/class/access/access_modifers.carbon +++ b/toolchain/check/testdata/class/access/access_modifers.carbon @@ -162,6 +162,7 @@ class A { // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Circle.elem: type = unbound_element_type %Circle, %i32 [concrete] +// CHECK:STDOUT: %SOME_INTERNAL_CONSTANT.patt: %pattern_type.6b6 = value_binding_pattern SOME_INTERNAL_CONSTANT [concrete] // CHECK:STDOUT: %int_5.64b: Core.IntLiteral = int_value 5 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -177,13 +178,17 @@ class A { // CHECK:STDOUT: %.1c5: type = fn_type_with_self_type %ImplicitAs.WithSelf.Convert.type.740, %ImplicitAs.facet [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.f6c: = bound_method %int_5.64b, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39, @Core.IntLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete] // CHECK:STDOUT: %bound_method.c9d: = bound_method %int_5.64b, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_5.eef: %i32 = int_value 5 [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %Circle.SomeInternalFunction.type: type = fn_type @Circle.SomeInternalFunction [concrete] // CHECK:STDOUT: %Circle.SomeInternalFunction: %Circle.SomeInternalFunction.type = struct_value () [concrete] // CHECK:STDOUT: %.816: Core.Form = init_form %Circle [concrete] // CHECK:STDOUT: %pattern_type.f70: type = pattern_type %Circle [concrete] +// CHECK:STDOUT: %return.param_patt.a4e: %pattern_type.f70 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.187: %pattern_type.f70 = return_slot_pattern %return.param_patt.a4e, %Circle [concrete] // CHECK:STDOUT: %Circle.Make.type: type = fn_type @Circle.Make [concrete] // CHECK:STDOUT: %Circle.Make: %Circle.Make.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.radius.c2c: type = struct_type {.radius: %i32} [concrete] @@ -197,6 +202,8 @@ class A { // CHECK:STDOUT: %Circle.val: %Circle = struct_value (%int_5.eef) [concrete] // CHECK:STDOUT: %Run.type: type = fn_type @Run [concrete] // CHECK:STDOUT: %Run: %Run.type = struct_value () [concrete] +// CHECK:STDOUT: %circle.patt: %pattern_type.f70 = value_binding_pattern circle [concrete] +// CHECK:STDOUT: %radius.patt.a1f: %pattern_type.6b6 = value_binding_pattern radius [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.4: type = fn_type @Destroy.Op.loc18_36.4 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.4: %Destroy.Op.type.1d8f74.4 = struct_value () [concrete] @@ -231,10 +238,9 @@ class A { // CHECK:STDOUT: class @Circle { // CHECK:STDOUT: %.loc5: %Circle.elem = field_decl radius, element0 [concrete] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %SOME_INTERNAL_CONSTANT.patt: %pattern_type.6b6 = value_binding_pattern SOME_INTERNAL_CONSTANT [concrete] +// CHECK:STDOUT: %SOME_INTERNAL_CONSTANT.patt: %pattern_type.6b6 = value_binding_pattern SOME_INTERNAL_CONSTANT [concrete = constants.%SOME_INTERNAL_CONSTANT.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_5: Core.IntLiteral = int_value 5 [concrete = constants.%int_5.64b] -// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %impl.elem0: %.1c5 = impl_witness_access constants.%ImplicitAs.impl_witness.a23, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] // CHECK:STDOUT: %bound_method.loc6_45.1: = bound_method %int_5, %impl.elem0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.f6c] // CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] @@ -242,10 +248,11 @@ class A { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call: init %i32 = call %bound_method.loc6_45.2(%int_5) [concrete = constants.%int_5.eef] // CHECK:STDOUT: %.loc6_45.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_5.eef] // CHECK:STDOUT: %.loc6_45.2: %i32 = converted %int_5, %.loc6_45.1 [concrete = constants.%int_5.eef] +// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %SOME_INTERNAL_CONSTANT: %i32 = value_binding SOME_INTERNAL_CONSTANT, %.loc6_45.2 // CHECK:STDOUT: %Circle.SomeInternalFunction.decl: %Circle.SomeInternalFunction.type = fn_decl @Circle.SomeInternalFunction [concrete = constants.%Circle.SomeInternalFunction] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc8: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -253,8 +260,8 @@ class A { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Circle.Make.decl: %Circle.Make.type = fn_decl @Circle.Make [concrete = constants.%Circle.Make] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.f70 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.f70 = return_slot_pattern %return.param_patt, %Self.ref [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.f70 = out_param_pattern [concrete = constants.%return.param_patt.a4e] +// CHECK:STDOUT: %return.patt: %pattern_type.f70 = return_slot_pattern %return.param_patt, %Self.ref [concrete = constants.%return.patt.187] // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Circle [concrete = constants.%Circle] // CHECK:STDOUT: %.loc12: Core.Form = init_form %Self.ref [concrete = constants.%.816] @@ -304,18 +311,18 @@ class A { // CHECK:STDOUT: fn @Run() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %circle.patt: %pattern_type.f70 = value_binding_pattern circle [concrete] +// CHECK:STDOUT: %circle.patt: %pattern_type.f70 = value_binding_pattern circle [concrete = constants.%circle.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Circle.ref.loc18_24: type = name_ref Circle, file.%Circle.decl [concrete = constants.%Circle] // CHECK:STDOUT: %Make.ref: %Circle.Make.type = name_ref Make, @Circle.%Circle.Make.decl [concrete = constants.%Circle.Make] // CHECK:STDOUT: %.loc18_36.1: ref %Circle = temporary_storage // CHECK:STDOUT: %Circle.Make.call: init %Circle to %.loc18_36.1 = call %Make.ref() -// CHECK:STDOUT: %Circle.ref.loc18_15: type = name_ref Circle, file.%Circle.decl [concrete = constants.%Circle] // CHECK:STDOUT: %.loc18_36.2: ref %Circle = temporary %.loc18_36.1, %Circle.Make.call // CHECK:STDOUT: %.loc18_36.3: %Circle = acquire_value %.loc18_36.2 +// CHECK:STDOUT: %Circle.ref.loc18_15: type = name_ref Circle, file.%Circle.decl [concrete = constants.%Circle] // CHECK:STDOUT: %circle: %Circle = value_binding circle, %.loc18_36.3 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %radius.patt: %pattern_type.6b6 = value_binding_pattern radius [concrete] +// CHECK:STDOUT: %radius.patt: %pattern_type.6b6 = value_binding_pattern radius [concrete = constants.%radius.patt.a1f] // CHECK:STDOUT: } // CHECK:STDOUT: %circle.ref.loc26: %Circle = name_ref circle, %circle // CHECK:STDOUT: %radius.ref.loc26: = name_ref radius, [concrete = ] @@ -365,6 +372,7 @@ class A { // CHECK:STDOUT: %complete_type.0c6: = complete_type_witness %struct_type.x [concrete] // CHECK:STDOUT: %Run.type: type = fn_type @Run [concrete] // CHECK:STDOUT: %Run: %Run.type = struct_value () [concrete] +// CHECK:STDOUT: %x.patt.939: %pattern_type.6b6 = value_binding_pattern x [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -400,7 +408,7 @@ class A { // CHECK:STDOUT: fn @Run() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = value_binding_pattern x [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = value_binding_pattern x [concrete = constants.%x.patt.939] // CHECK:STDOUT: } // CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A] // CHECK:STDOUT: %x.ref: = name_ref x, [concrete = ] @@ -421,7 +429,11 @@ class A { // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Circle.elem: type = unbound_element_type %Circle, %i32 [concrete] // CHECK:STDOUT: %pattern_type.f70: type = pattern_type %Circle [concrete] +// CHECK:STDOUT: %self.param_patt.769: %pattern_type.f70 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.cfb: %pattern_type.f70 = at_binding_pattern self, %self.param_patt.769 [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %Circle.GetRadius.type: type = fn_type @Circle.GetRadius [concrete] // CHECK:STDOUT: %Circle.GetRadius: %Circle.GetRadius.type = struct_value () [concrete] // CHECK:STDOUT: %Circle.SomeInternalFunction.type: type = fn_type @Circle.SomeInternalFunction [concrete] @@ -488,10 +500,10 @@ class A { // CHECK:STDOUT: class @Circle { // CHECK:STDOUT: %.loc5: %Circle.elem = field_decl radius, element0 [concrete] // CHECK:STDOUT: %Circle.GetRadius.decl: %Circle.GetRadius.type = fn_decl @Circle.GetRadius [concrete = constants.%Circle.GetRadius] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.f70 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.f70 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.f70 = value_param_pattern [concrete = constants.%self.param_patt.769] +// CHECK:STDOUT: %self.patt: %pattern_type.f70 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.cfb] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc7: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -502,8 +514,8 @@ class A { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Circle.SomeInternalFunction.decl: %Circle.SomeInternalFunction.type = fn_decl @Circle.SomeInternalFunction [concrete = constants.%Circle.SomeInternalFunction] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc11: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -511,10 +523,10 @@ class A { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Circle.Compute.decl: %Circle.Compute.type = fn_decl @Circle.Compute [concrete = constants.%Circle.Compute] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.f70 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.f70 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.f70 = value_param_pattern [concrete = constants.%self.param_patt.769] +// CHECK:STDOUT: %self.patt: %pattern_type.f70 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.cfb] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc15: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -578,6 +590,7 @@ class A { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %x.patt.86b: %pattern_type.6b6 = value_binding_pattern x [concrete] // CHECK:STDOUT: %int_5.64b: Core.IntLiteral = int_value 5 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -597,6 +610,7 @@ class A { // CHECK:STDOUT: %int_5.eef: %i32 = int_value 5 [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %x.patt.d88: %pattern_type.6b6 = value_binding_pattern x [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -621,7 +635,7 @@ class A { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl: type = class_decl @A [concrete = constants.%A] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = value_binding_pattern x [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = value_binding_pattern x [concrete = constants.%x.patt.d88] // CHECK:STDOUT: } // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %x: %i32 = value_binding x, @__global_init.%x.ref @@ -629,10 +643,9 @@ class A { // CHECK:STDOUT: // CHECK:STDOUT: class @A { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = value_binding_pattern x [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = value_binding_pattern x [concrete = constants.%x.patt.86b] // CHECK:STDOUT: } // CHECK:STDOUT: %int_5: Core.IntLiteral = int_value 5 [concrete = constants.%int_5.64b] -// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %impl.elem0: %.1c5 = impl_witness_access constants.%ImplicitAs.impl_witness.a23, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] // CHECK:STDOUT: %bound_method.loc5_16.1: = bound_method %int_5, %impl.elem0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] // CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] @@ -640,6 +653,7 @@ class A { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call: init %i32 = call %bound_method.loc5_16.2(%int_5) [concrete = constants.%int_5.eef] // CHECK:STDOUT: %.loc5_16.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_5.eef] // CHECK:STDOUT: %.loc5_16.2: %i32 = converted %int_5, %.loc5_16.1 [concrete = constants.%int_5.eef] +// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %x: %i32 = value_binding x, %.loc5_16.2 // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -665,6 +679,7 @@ class A { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %x.patt.86b: %pattern_type.6b6 = value_binding_pattern x [concrete] // CHECK:STDOUT: %int_5.64b: Core.IntLiteral = int_value 5 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -682,8 +697,11 @@ class A { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39, @Core.IntLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete] // CHECK:STDOUT: %bound_method: = bound_method %int_5.64b, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_5.eef: %i32 = int_value 5 [concrete] +// CHECK:STDOUT: %y.patt.e0b: %pattern_type.6b6 = value_binding_pattern y [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %x.patt.d88: %pattern_type.6b6 = value_binding_pattern x [concrete] +// CHECK:STDOUT: %y.patt.f4d: %pattern_type.6b6 = value_binding_pattern y [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -709,12 +727,12 @@ class A { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl: type = class_decl @A [concrete = constants.%A] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = value_binding_pattern x [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = value_binding_pattern x [concrete = constants.%x.patt.d88] // CHECK:STDOUT: } // CHECK:STDOUT: %i32.loc16: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %x: %i32 = value_binding x, [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %pattern_type.6b6 = value_binding_pattern y [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.6b6 = value_binding_pattern y [concrete = constants.%y.patt.f4d] // CHECK:STDOUT: } // CHECK:STDOUT: %i32.loc24: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %y: %i32 = value_binding y, [concrete = ] @@ -722,10 +740,9 @@ class A { // CHECK:STDOUT: // CHECK:STDOUT: class @A { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = value_binding_pattern x [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = value_binding_pattern x [concrete = constants.%x.patt.86b] // CHECK:STDOUT: } // CHECK:STDOUT: %int_5.loc5: Core.IntLiteral = int_value 5 [concrete = constants.%int_5.64b] -// CHECK:STDOUT: %i32.loc5: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %impl.elem0.loc5: %.1c5 = impl_witness_access constants.%ImplicitAs.impl_witness.a23, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] // CHECK:STDOUT: %bound_method.loc5_26.1: = bound_method %int_5.loc5, %impl.elem0.loc5 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] // CHECK:STDOUT: %specific_fn.loc5: = specific_function %impl.elem0.loc5, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] @@ -733,12 +750,12 @@ class A { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc5: init %i32 = call %bound_method.loc5_26.2(%int_5.loc5) [concrete = constants.%int_5.eef] // CHECK:STDOUT: %.loc5_26.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc5 [concrete = constants.%int_5.eef] // CHECK:STDOUT: %.loc5_26.2: %i32 = converted %int_5.loc5, %.loc5_26.1 [concrete = constants.%int_5.eef] +// CHECK:STDOUT: %i32.loc5: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %x: %i32 = value_binding x, %.loc5_26.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %pattern_type.6b6 = value_binding_pattern y [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.6b6 = value_binding_pattern y [concrete = constants.%y.patt.e0b] // CHECK:STDOUT: } // CHECK:STDOUT: %int_5.loc6: Core.IntLiteral = int_value 5 [concrete = constants.%int_5.64b] -// CHECK:STDOUT: %i32.loc6: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %impl.elem0.loc6: %.1c5 = impl_witness_access constants.%ImplicitAs.impl_witness.a23, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] // CHECK:STDOUT: %bound_method.loc6_24.1: = bound_method %int_5.loc6, %impl.elem0.loc6 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] // CHECK:STDOUT: %specific_fn.loc6: = specific_function %impl.elem0.loc6, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] @@ -746,6 +763,7 @@ class A { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc6: init %i32 = call %bound_method.loc6_24.2(%int_5.loc6) [concrete = constants.%int_5.eef] // CHECK:STDOUT: %.loc6_24.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc6 [concrete = constants.%int_5.eef] // CHECK:STDOUT: %.loc6_24.2: %i32 = converted %int_5.loc6, %.loc6_24.1 [concrete = constants.%int_5.eef] +// CHECK:STDOUT: %i32.loc6: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %y: %i32 = value_binding y, %.loc6_24.2 // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type diff --git a/toolchain/check/testdata/class/access/import_access.carbon b/toolchain/check/testdata/class/access/import_access.carbon index cdc53204624f..5df5c789aae2 100644 --- a/toolchain/check/testdata/class/access/import_access.carbon +++ b/toolchain/check/testdata/class/access/import_access.carbon @@ -209,6 +209,8 @@ private class Redecl {} // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %Def [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %Def.val: %Def = struct_value () [concrete] // CHECK:STDOUT: } @@ -227,8 +229,8 @@ private class Redecl {} // CHECK:STDOUT: %Test.import = import Test // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %Def = var %c.var_patt [concrete] // CHECK:STDOUT: %Def.ref: type = name_ref Def, imports.%Test.Def [concrete = constants.%Def] @@ -265,8 +267,8 @@ private class Redecl {} // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: = ref_binding_pattern c [concrete = ] +// CHECK:STDOUT: %c.var_patt: = var_pattern %c.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref = var %c.var_patt [concrete = ] // CHECK:STDOUT: %Def.ref: = name_ref Def, [concrete = ] @@ -301,8 +303,8 @@ private class Redecl {} // CHECK:STDOUT: } // CHECK:STDOUT: %Test.import = import Test // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: = ref_binding_pattern c [concrete = ] +// CHECK:STDOUT: %c.var_patt: = var_pattern %c.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref = var %c.var_patt [concrete = ] // CHECK:STDOUT: %.1: = splice_block [concrete = ] { @@ -326,6 +328,8 @@ private class Redecl {} // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %ForwardWithDef [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %ForwardWithDef.val: %ForwardWithDef = struct_value () [concrete] // CHECK:STDOUT: } @@ -344,8 +348,8 @@ private class Redecl {} // CHECK:STDOUT: %Test.import = import Test // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %ForwardWithDef = var %c.var_patt [concrete] // CHECK:STDOUT: %ForwardWithDef.ref: type = name_ref ForwardWithDef, imports.%Test.ForwardWithDef [concrete = constants.%ForwardWithDef] @@ -382,8 +386,8 @@ private class Redecl {} // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: = ref_binding_pattern c [concrete = ] +// CHECK:STDOUT: %c.var_patt: = var_pattern %c.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref = var %c.var_patt [concrete = ] // CHECK:STDOUT: %ForwardWithDef.ref: = name_ref ForwardWithDef, [concrete = ] @@ -418,8 +422,8 @@ private class Redecl {} // CHECK:STDOUT: } // CHECK:STDOUT: %Test.import = import Test // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: = ref_binding_pattern c [concrete = ] +// CHECK:STDOUT: %c.var_patt: = var_pattern %c.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref = var %c.var_patt [concrete = ] // CHECK:STDOUT: %.1: = splice_block [concrete = ] { @@ -442,6 +446,8 @@ private class Redecl {} // CHECK:STDOUT: %Forward: type = class_type @Forward [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %Forward [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = at_binding_pattern c, %c.param_patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] @@ -460,8 +466,8 @@ private class Redecl {} // CHECK:STDOUT: %Test.import = import Test // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %c.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type = at_binding_pattern c, %c.param_patt [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type = value_param_pattern [concrete = constants.%c.param_patt] +// CHECK:STDOUT: %c.patt: %pattern_type = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %ptr = value_param call_param0 // CHECK:STDOUT: %.loc4: type = splice_block %ptr [concrete = constants.%ptr] { @@ -500,8 +506,8 @@ private class Redecl {} // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %c.param_patt: = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: = at_binding_pattern c, %c.param_patt [concrete] +// CHECK:STDOUT: %c.param_patt: = value_param_pattern [concrete = ] +// CHECK:STDOUT: %c.patt: = at_binding_pattern c, %c.param_patt [concrete = ] // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: = value_param call_param0 // CHECK:STDOUT: %.loc10: type = splice_block %ptr [concrete = ] { @@ -538,8 +544,8 @@ private class Redecl {} // CHECK:STDOUT: } // CHECK:STDOUT: %Test.import = import Test // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %c.param_patt: = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: = at_binding_pattern c, %c.param_patt [concrete] +// CHECK:STDOUT: %c.param_patt: = value_param_pattern [concrete = ] +// CHECK:STDOUT: %c.patt: = at_binding_pattern c, %c.param_patt [concrete = ] // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: = value_param call_param0 // CHECK:STDOUT: %.loc10: type = splice_block %ptr [concrete = ] { diff --git a/toolchain/check/testdata/class/access/inheritance_access.carbon b/toolchain/check/testdata/class/access/inheritance_access.carbon index 8d85f85fae0f..2e333541f863 100644 --- a/toolchain/check/testdata/class/access/inheritance_access.carbon +++ b/toolchain/check/testdata/class/access/inheritance_access.carbon @@ -299,11 +299,15 @@ class B { // CHECK:STDOUT: %Circle: type = class_type @Circle [concrete] // CHECK:STDOUT: %Circle.elem: type = unbound_element_type %Circle, %Shape [concrete] // CHECK:STDOUT: %pattern_type.f70: type = pattern_type %Circle [concrete] +// CHECK:STDOUT: %self.param_patt.769: %pattern_type.f70 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.cfb: %pattern_type.f70 = at_binding_pattern self, %self.param_patt.769 [concrete] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.b59: %tuple.type.24b = tuple_value (%i32, %i32) [concrete] // CHECK:STDOUT: %tuple.type.e55: type = tuple_type (%i32, %i32) [concrete] // CHECK:STDOUT: %.c11: Core.Form = init_form %tuple.type.e55 [concrete] // CHECK:STDOUT: %pattern_type.394: type = pattern_type %tuple.type.e55 [concrete] +// CHECK:STDOUT: %return.param_patt.a90: %pattern_type.394 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.2ed: %pattern_type.394 = return_slot_pattern %return.param_patt.a90, %tuple.type.e55 [concrete] // CHECK:STDOUT: %Circle.GetPosition.type: type = fn_type @Circle.GetPosition [concrete] // CHECK:STDOUT: %Circle.GetPosition: %Circle.GetPosition.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.175: type = struct_type {.base: %Shape} [concrete] @@ -360,10 +364,10 @@ class B { // CHECK:STDOUT: %Shape.ref: type = name_ref Shape, file.%Shape.decl [concrete = constants.%Shape] // CHECK:STDOUT: %.loc10: %Circle.elem = base_decl %Shape.ref, element0 [concrete] // CHECK:STDOUT: %Circle.GetPosition.decl: %Circle.GetPosition.type = fn_decl @Circle.GetPosition [concrete = constants.%Circle.GetPosition] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.f70 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.f70 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.394 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.394 = return_slot_pattern %return.param_patt, %.loc12_36.2 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.f70 = value_param_pattern [concrete = constants.%self.param_patt.769] +// CHECK:STDOUT: %self.patt: %pattern_type.f70 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.cfb] +// CHECK:STDOUT: %return.param_patt: %pattern_type.394 = out_param_pattern [concrete = constants.%return.param_patt.a90] +// CHECK:STDOUT: %return.patt: %pattern_type.394 = return_slot_pattern %return.param_patt, %.loc12_36.2 [concrete = constants.%return.patt.2ed] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc12_28: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %i32.loc12_33: type = type_literal constants.%i32 [concrete = constants.%i32] @@ -440,6 +444,8 @@ class B { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %B.F.type: type = fn_type @B.F [concrete] // CHECK:STDOUT: %B.F: %B.F.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.cb7: type = struct_type {.base: %A} [concrete] @@ -447,9 +453,13 @@ class B { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %B [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.98b = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt: %pattern_type.98b = at_binding_pattern self, %self.param_patt [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %.262: Core.Form = init_form %empty_tuple.type [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %return.param_patt.900: %pattern_type.cb1 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.427: %pattern_type.cb1 = return_slot_pattern %return.param_patt.900, %empty_tuple.type [concrete] // CHECK:STDOUT: %C.G.type: type = fn_type @C.G [concrete] // CHECK:STDOUT: %C.G: %C.G.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.e05: type = struct_type {.base: %B} [concrete] @@ -492,8 +502,8 @@ class B { // CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A] // CHECK:STDOUT: %.loc9: %B.elem = base_decl %A.ref, element0 [concrete] // CHECK:STDOUT: %B.F.decl: %B.F.type = fn_decl @B.F [concrete = constants.%B.F] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc10: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -515,10 +525,10 @@ class B { // CHECK:STDOUT: %B.ref: type = name_ref B, file.%B.decl [concrete = constants.%B] // CHECK:STDOUT: %.loc14: %C.elem = base_decl %B.ref, element0 [concrete] // CHECK:STDOUT: %C.G.decl: %C.G.type = fn_decl @C.G [concrete = constants.%C.G] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.98b = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.98b = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern %return.param_patt, %.loc15_18.2 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.98b = value_param_pattern [concrete = constants.%self.param_patt] +// CHECK:STDOUT: %self.patt: %pattern_type.98b = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern [concrete = constants.%return.param_patt.900] +// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern %return.param_patt, %.loc15_18.2 [concrete = constants.%return.patt.427] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc15_18.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc15_18.2: type = converted %.loc15_18.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -563,6 +573,7 @@ class B { // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %SOME_CONSTANT.patt: %pattern_type.6b6 = value_binding_pattern SOME_CONSTANT [concrete] // CHECK:STDOUT: %int_5.64b: Core.IntLiteral = int_value 5 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -578,9 +589,11 @@ class B { // CHECK:STDOUT: %.1c5: type = fn_type_with_self_type %ImplicitAs.WithSelf.Convert.type.740, %ImplicitAs.facet [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound: = bound_method %int_5.64b, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39, @Core.IntLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete] // CHECK:STDOUT: %bound_method: = bound_method %int_5.64b, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_5.eef: %i32 = int_value 5 [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %A.SomeProtectedFunction.type: type = fn_type @A.SomeProtectedFunction [concrete] // CHECK:STDOUT: %A.SomeProtectedFunction: %A.SomeProtectedFunction.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] @@ -635,10 +648,9 @@ class B { // CHECK:STDOUT: // CHECK:STDOUT: class @A { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %SOME_CONSTANT.patt: %pattern_type.6b6 = value_binding_pattern SOME_CONSTANT [concrete] +// CHECK:STDOUT: %SOME_CONSTANT.patt: %pattern_type.6b6 = value_binding_pattern SOME_CONSTANT [concrete = constants.%SOME_CONSTANT.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_5: Core.IntLiteral = int_value 5 [concrete = constants.%int_5.64b] -// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %impl.elem0: %.1c5 = impl_witness_access constants.%ImplicitAs.impl_witness.a23, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] // CHECK:STDOUT: %bound_method.loc5_38.1: = bound_method %int_5, %impl.elem0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] // CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] @@ -646,10 +658,11 @@ class B { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call: init %i32 = call %bound_method.loc5_38.2(%int_5) [concrete = constants.%int_5.eef] // CHECK:STDOUT: %.loc5_38.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_5.eef] // CHECK:STDOUT: %.loc5_38.2: %i32 = converted %int_5, %.loc5_38.1 [concrete = constants.%int_5.eef] +// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %SOME_CONSTANT: %i32 = value_binding SOME_CONSTANT, %.loc5_38.2 // CHECK:STDOUT: %A.SomeProtectedFunction.decl: %A.SomeProtectedFunction.type = fn_decl @A.SomeProtectedFunction [concrete = constants.%A.SomeProtectedFunction] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc6: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -670,8 +683,8 @@ class B { // CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A] // CHECK:STDOUT: %.loc12: %B.elem = base_decl %A.ref, element0 [concrete] // CHECK:STDOUT: %B.G.decl: %B.G.type = fn_decl @B.G [concrete = constants.%B.G] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc14: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -679,8 +692,8 @@ class B { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %B.H.decl: %B.H.type = fn_decl @B.H [concrete = constants.%B.H] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc18: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -746,7 +759,11 @@ class B { // CHECK:STDOUT: %Square: type = class_type @Square [concrete] // CHECK:STDOUT: %Square.elem: type = unbound_element_type %Square, %Shape [concrete] // CHECK:STDOUT: %pattern_type.1f6: type = pattern_type %Square [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.1f6 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt: %pattern_type.1f6 = at_binding_pattern self, %self.param_patt [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] // CHECK:STDOUT: %Square.GetPosition.type: type = fn_type @Square.GetPosition [concrete] // CHECK:STDOUT: %Square.GetPosition: %Square.GetPosition.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.175: type = struct_type {.base: %Shape} [concrete] @@ -787,10 +804,10 @@ class B { // CHECK:STDOUT: %Shape.ref: type = name_ref Shape, file.%Shape.decl [concrete = constants.%Shape] // CHECK:STDOUT: %.loc9: %Square.elem = base_decl %Shape.ref, element0 [concrete] // CHECK:STDOUT: %Square.GetPosition.decl: %Square.GetPosition.type = fn_decl @Square.GetPosition [concrete = constants.%Square.GetPosition] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.1f6 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.1f6 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.1f6 = value_param_pattern [concrete = constants.%self.param_patt] +// CHECK:STDOUT: %self.patt: %pattern_type.1f6 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc11: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -1018,6 +1035,7 @@ class B { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %SOME_PRIVATE_CONSTANT.patt: %pattern_type.6b6 = value_binding_pattern SOME_PRIVATE_CONSTANT [concrete] // CHECK:STDOUT: %int_86.bd3: Core.IntLiteral = int_value 86 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -1033,6 +1051,7 @@ class B { // CHECK:STDOUT: %.1c5: type = fn_type_with_self_type %ImplicitAs.WithSelf.Convert.type.740, %ImplicitAs.facet [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound: = bound_method %int_86.bd3, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39, @Core.IntLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete] // CHECK:STDOUT: %bound_method: = bound_method %int_86.bd3, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_86.81c: %i32 = int_value 86 [concrete] @@ -1042,6 +1061,7 @@ class B { // CHECK:STDOUT: %complete_type.d5e: = complete_type_witness %struct_type.base.cb7 [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %B [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %C.G1.type: type = fn_type @C.G1 [concrete] // CHECK:STDOUT: %C.G1: %C.G1.type = struct_value () [concrete] // CHECK:STDOUT: %C.G2.type: type = fn_type @C.G2 [concrete] @@ -1094,10 +1114,9 @@ class B { // CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A] // CHECK:STDOUT: %.loc9: %B.elem = base_decl %A.ref, element0 [concrete] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %SOME_PRIVATE_CONSTANT.patt: %pattern_type.6b6 = value_binding_pattern SOME_PRIVATE_CONSTANT [concrete] +// CHECK:STDOUT: %SOME_PRIVATE_CONSTANT.patt: %pattern_type.6b6 = value_binding_pattern SOME_PRIVATE_CONSTANT [concrete = constants.%SOME_PRIVATE_CONSTANT.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_86: Core.IntLiteral = int_value 86 [concrete = constants.%int_86.bd3] -// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %impl.elem0: %.1c5 = impl_witness_access constants.%ImplicitAs.impl_witness.a23, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] // CHECK:STDOUT: %bound_method.loc11_44.1: = bound_method %int_86, %impl.elem0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] // CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] @@ -1105,6 +1124,7 @@ class B { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call: init %i32 = call %bound_method.loc11_44.2(%int_86) [concrete = constants.%int_86.81c] // CHECK:STDOUT: %.loc11_44.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_86.81c] // CHECK:STDOUT: %.loc11_44.2: %i32 = converted %int_86, %.loc11_44.1 [concrete = constants.%int_86.81c] +// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %SOME_PRIVATE_CONSTANT: %i32 = value_binding SOME_PRIVATE_CONSTANT, %.loc11_44.2 // CHECK:STDOUT: %B.Fb.decl: %B.Fb.type = fn_decl @B.Fb [concrete = constants.%B.Fb] {} {} // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base.cb7 [concrete = constants.%complete_type.d5e] @@ -1124,8 +1144,8 @@ class B { // CHECK:STDOUT: %B.ref: type = name_ref B, file.%B.decl [concrete = constants.%B] // CHECK:STDOUT: %.loc16: %C.elem = base_decl %B.ref, element0 [concrete] // CHECK:STDOUT: %C.G1.decl: %C.G1.type = fn_decl @C.G1 [concrete = constants.%C.G1] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc25: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -1261,6 +1281,7 @@ class B { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %SOME_PROTECTED_CONSTANT.patt: %pattern_type.6b6 = value_binding_pattern SOME_PROTECTED_CONSTANT [concrete] // CHECK:STDOUT: %int_5.64b: Core.IntLiteral = int_value 5 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -1276,17 +1297,23 @@ class B { // CHECK:STDOUT: %.1c5: type = fn_type_with_self_type %ImplicitAs.WithSelf.Convert.type.740, %ImplicitAs.facet [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound: = bound_method %int_5.64b, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39, @Core.IntLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete] // CHECK:STDOUT: %bound_method: = bound_method %int_5.64b, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_5.eef: %i32 = int_value 5 [concrete] +// CHECK:STDOUT: %SOME_PRIVATE_CONSTANT.patt: %pattern_type.6b6 = value_binding_pattern SOME_PRIVATE_CONSTANT [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %Internal: type = class_type @Internal [concrete] +// CHECK:STDOUT: %INTERNAL_CONSTANT.patt: %pattern_type.6b6 = value_binding_pattern INTERNAL_CONSTANT [concrete] // CHECK:STDOUT: %B: type = class_type @B [concrete] // CHECK:STDOUT: %B.elem: type = unbound_element_type %B, %Internal [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %B.G.type: type = fn_type @B.G [concrete] // CHECK:STDOUT: %B.G: %B.G.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.e39: type = pattern_type %B [concrete] +// CHECK:STDOUT: %self.param_patt.f1f: %pattern_type.e39 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.4eb: %pattern_type.e39 = at_binding_pattern self, %self.param_patt.f1f [concrete] // CHECK:STDOUT: %B.SomeFunc.type: type = fn_type @B.SomeFunc [concrete] // CHECK:STDOUT: %B.SomeFunc: %B.SomeFunc.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.internal.a00: type = struct_type {.internal: %Internal} [concrete] @@ -1321,10 +1348,9 @@ class B { // CHECK:STDOUT: // CHECK:STDOUT: class @A { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %SOME_PROTECTED_CONSTANT.patt: %pattern_type.6b6 = value_binding_pattern SOME_PROTECTED_CONSTANT [concrete] +// CHECK:STDOUT: %SOME_PROTECTED_CONSTANT.patt: %pattern_type.6b6 = value_binding_pattern SOME_PROTECTED_CONSTANT [concrete = constants.%SOME_PROTECTED_CONSTANT.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_5.loc5: Core.IntLiteral = int_value 5 [concrete = constants.%int_5.64b] -// CHECK:STDOUT: %i32.loc5: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %impl.elem0.loc5: %.1c5 = impl_witness_access constants.%ImplicitAs.impl_witness.a23, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] // CHECK:STDOUT: %bound_method.loc5_48.1: = bound_method %int_5.loc5, %impl.elem0.loc5 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] // CHECK:STDOUT: %specific_fn.loc5: = specific_function %impl.elem0.loc5, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] @@ -1332,12 +1358,12 @@ class B { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc5: init %i32 = call %bound_method.loc5_48.2(%int_5.loc5) [concrete = constants.%int_5.eef] // CHECK:STDOUT: %.loc5_48.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc5 [concrete = constants.%int_5.eef] // CHECK:STDOUT: %.loc5_48.2: %i32 = converted %int_5.loc5, %.loc5_48.1 [concrete = constants.%int_5.eef] +// CHECK:STDOUT: %i32.loc5: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %SOME_PROTECTED_CONSTANT: %i32 = value_binding SOME_PROTECTED_CONSTANT, %.loc5_48.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %SOME_PRIVATE_CONSTANT.patt: %pattern_type.6b6 = value_binding_pattern SOME_PRIVATE_CONSTANT [concrete] +// CHECK:STDOUT: %SOME_PRIVATE_CONSTANT.patt: %pattern_type.6b6 = value_binding_pattern SOME_PRIVATE_CONSTANT [concrete = constants.%SOME_PRIVATE_CONSTANT.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_5.loc6: Core.IntLiteral = int_value 5 [concrete = constants.%int_5.64b] -// CHECK:STDOUT: %i32.loc6: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %impl.elem0.loc6: %.1c5 = impl_witness_access constants.%ImplicitAs.impl_witness.a23, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] // CHECK:STDOUT: %bound_method.loc6_44.1: = bound_method %int_5.loc6, %impl.elem0.loc6 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] // CHECK:STDOUT: %specific_fn.loc6: = specific_function %impl.elem0.loc6, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] @@ -1345,6 +1371,7 @@ class B { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc6: init %i32 = call %bound_method.loc6_44.2(%int_5.loc6) [concrete = constants.%int_5.eef] // CHECK:STDOUT: %.loc6_44.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc6 [concrete = constants.%int_5.eef] // CHECK:STDOUT: %.loc6_44.2: %i32 = converted %int_5.loc6, %.loc6_44.1 [concrete = constants.%int_5.eef] +// CHECK:STDOUT: %i32.loc6: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %SOME_PRIVATE_CONSTANT: %i32 = value_binding SOME_PRIVATE_CONSTANT, %.loc6_44.2 // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -1357,10 +1384,9 @@ class B { // CHECK:STDOUT: // CHECK:STDOUT: class @Internal { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %INTERNAL_CONSTANT.patt: %pattern_type.6b6 = value_binding_pattern INTERNAL_CONSTANT [concrete] +// CHECK:STDOUT: %INTERNAL_CONSTANT.patt: %pattern_type.6b6 = value_binding_pattern INTERNAL_CONSTANT [concrete = constants.%INTERNAL_CONSTANT.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_5: Core.IntLiteral = int_value 5 [concrete = constants.%int_5.64b] -// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %impl.elem0: %.1c5 = impl_witness_access constants.%ImplicitAs.impl_witness.a23, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] // CHECK:STDOUT: %bound_method.loc10_42.1: = bound_method %int_5, %impl.elem0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] // CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] @@ -1368,6 +1394,7 @@ class B { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call: init %i32 = call %bound_method.loc10_42.2(%int_5) [concrete = constants.%int_5.eef] // CHECK:STDOUT: %.loc10_42.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_5.eef] // CHECK:STDOUT: %.loc10_42.2: %i32 = converted %int_5, %.loc10_42.1 [concrete = constants.%int_5.eef] +// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %INTERNAL_CONSTANT: %i32 = value_binding INTERNAL_CONSTANT, %.loc10_42.2 // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -1380,8 +1407,8 @@ class B { // CHECK:STDOUT: class @B { // CHECK:STDOUT: %.loc14: %B.elem = field_decl internal, element0 [concrete] // CHECK:STDOUT: %B.G.decl: %B.G.type = fn_decl @B.G [concrete = constants.%B.G] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc16: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -1389,10 +1416,10 @@ class B { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %B.SomeFunc.decl: %B.SomeFunc.type = fn_decl @B.SomeFunc [concrete = constants.%B.SomeFunc] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.e39 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.e39 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.e39 = value_param_pattern [concrete = constants.%self.param_patt.f1f] +// CHECK:STDOUT: %self.patt: %pattern_type.e39 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.4eb] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc36: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -1447,6 +1474,8 @@ class B { // CHECK:STDOUT: %B: type = class_type @B [concrete] // CHECK:STDOUT: %B.elem: type = unbound_element_type %B, %A [concrete] // CHECK:STDOUT: %pattern_type.e39: type = pattern_type %B [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.e39 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt: %pattern_type.e39 = at_binding_pattern self, %self.param_patt [concrete] // CHECK:STDOUT: %B.F.type: type = fn_type @B.F [concrete] // CHECK:STDOUT: %B.F: %B.F.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.cb7: type = struct_type {.base: %A} [concrete] @@ -1488,8 +1517,8 @@ class B { // CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A] // CHECK:STDOUT: %.loc9: %B.elem = base_decl %A.ref, element0 [concrete] // CHECK:STDOUT: %B.F.decl: %B.F.type = fn_decl @B.F [concrete = constants.%B.F] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.e39 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.e39 = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.e39 = value_param_pattern [concrete = constants.%self.param_patt] +// CHECK:STDOUT: %self.patt: %pattern_type.e39 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %B = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] @@ -1528,6 +1557,8 @@ class B { // CHECK:STDOUT: %B: type = class_type @B [concrete] // CHECK:STDOUT: %B.elem: type = unbound_element_type %B, %A [concrete] // CHECK:STDOUT: %pattern_type.e39: type = pattern_type %B [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.e39 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt: %pattern_type.e39 = at_binding_pattern self, %self.param_patt [concrete] // CHECK:STDOUT: %B.F.type: type = fn_type @B.F [concrete] // CHECK:STDOUT: %B.F: %B.F.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.cb7: type = struct_type {.base: %A} [concrete] @@ -1569,8 +1600,8 @@ class B { // CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A] // CHECK:STDOUT: %.loc9: %B.elem = base_decl %A.ref, element0 [concrete] // CHECK:STDOUT: %B.F.decl: %B.F.type = fn_decl @B.F [concrete = constants.%B.F] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.e39 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.e39 = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.e39 = value_param_pattern [concrete = constants.%self.param_patt] +// CHECK:STDOUT: %self.patt: %pattern_type.e39 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %B = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] diff --git a/toolchain/check/testdata/class/access/method_access.carbon b/toolchain/check/testdata/class/access/method_access.carbon index e02be98d19fc..e5ed733940b7 100644 --- a/toolchain/check/testdata/class/access/method_access.carbon +++ b/toolchain/check/testdata/class/access/method_access.carbon @@ -32,11 +32,15 @@ fn G(x: X) { // CHECK:STDOUT: constants { // CHECK:STDOUT: %X: type = class_type @X [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %X [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt: %pattern_type = at_binding_pattern self, %self.param_patt [concrete] // CHECK:STDOUT: %X.F.type: type = fn_type @X.F [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %X.F: %X.F.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = at_binding_pattern x, %x.param_patt [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -48,8 +52,8 @@ fn G(x: X) { // CHECK:STDOUT: } // CHECK:STDOUT: %X.decl: type = class_decl @X [concrete = constants.%X] {} {} // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %x.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type = value_param_pattern [concrete = constants.%x.param_patt] +// CHECK:STDOUT: %x.patt: %pattern_type = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %X = value_param call_param0 // CHECK:STDOUT: %X.ref: type = name_ref X, file.%X.decl [concrete = constants.%X] @@ -59,8 +63,8 @@ fn G(x: X) { // CHECK:STDOUT: // CHECK:STDOUT: class @X { // CHECK:STDOUT: %X.F.decl: %X.F.type = fn_decl @X.F [concrete = constants.%X.F] { -// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern [concrete = constants.%self.param_patt] +// CHECK:STDOUT: %self.patt: %pattern_type = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %X = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%X [concrete = constants.%X] diff --git a/toolchain/check/testdata/class/adapter/adapt.carbon b/toolchain/check/testdata/class/adapter/adapt.carbon index 8671a56e43b0..0b6fae4977a2 100644 --- a/toolchain/check/testdata/class/adapter/adapt.carbon +++ b/toolchain/check/testdata/class/adapter/adapt.carbon @@ -152,6 +152,8 @@ interface I { // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %AdaptNotExtend: type = class_type @AdaptNotExtend [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %AdaptNotExtend [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -174,8 +176,8 @@ interface I { // CHECK:STDOUT: %Adapted.decl: type = class_decl @Adapted [concrete = constants.%Adapted] {} {} // CHECK:STDOUT: %AdaptNotExtend.decl: type = class_decl @AdaptNotExtend [concrete = constants.%AdaptNotExtend] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %AdaptNotExtend = value_param call_param0 // CHECK:STDOUT: %AdaptNotExtend.ref: type = name_ref AdaptNotExtend, file.%AdaptNotExtend.decl [concrete = constants.%AdaptNotExtend] diff --git a/toolchain/check/testdata/class/adapter/adapt_copy.carbon b/toolchain/check/testdata/class/adapter/adapt_copy.carbon index 20dbb0741af9..41cecb9452e9 100644 --- a/toolchain/check/testdata/class/adapter/adapt_copy.carbon +++ b/toolchain/check/testdata/class/adapter/adapt_copy.carbon @@ -177,9 +177,15 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %complete_type.f8a: = complete_type_witness %i32.builtin [concrete] // CHECK:STDOUT: %pattern_type.3b9: type = pattern_type %AdaptCopyable [concrete] +// CHECK:STDOUT: %c.param_patt.a0c: %pattern_type.3b9 = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt.9a3: %pattern_type.3b9 = at_binding_pattern c, %c.param_patt.a0c [concrete] // CHECK:STDOUT: %.748: Core.Form = init_form %AdaptCopyable [concrete] +// CHECK:STDOUT: %return.param_patt.c61: %pattern_type.3b9 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.539: %pattern_type.3b9 = return_slot_pattern %return.param_patt.c61, %AdaptCopyable [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] +// CHECK:STDOUT: %d.patt.467: %pattern_type.3b9 = ref_binding_pattern d [concrete] +// CHECK:STDOUT: %d.var_patt.b13: %pattern_type.3b9 = var_pattern %d.patt.467 [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.3: type = fn_type @Destroy.Op.loc16_3.3 [concrete] @@ -191,10 +197,16 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %tuple.ca7: %tuple.type.24b = tuple_value (%AdaptCopyable, %u32) [concrete] // CHECK:STDOUT: %tuple.type.28f: type = tuple_type (%AdaptCopyable, %u32) [concrete] // CHECK:STDOUT: %pattern_type.c42: type = pattern_type %tuple.type.28f [concrete] +// CHECK:STDOUT: %c.param_patt.ccf: %pattern_type.c42 = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt.314: %pattern_type.c42 = at_binding_pattern c, %c.param_patt.ccf [concrete] // CHECK:STDOUT: %.ac9: Core.Form = init_form %tuple.type.28f [concrete] +// CHECK:STDOUT: %return.param_patt.1e8: %pattern_type.c42 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.ada: %pattern_type.c42 = return_slot_pattern %return.param_patt.1e8, %tuple.type.28f [concrete] // CHECK:STDOUT: %InTuple.type: type = fn_type @InTuple [concrete] // CHECK:STDOUT: %InTuple: %InTuple.type = struct_value () [concrete] // CHECK:STDOUT: %u32.builtin: type = int_type unsigned, %int_32 [concrete] +// CHECK:STDOUT: %d.patt.e01: %pattern_type.c42 = ref_binding_pattern d [concrete] +// CHECK:STDOUT: %d.var_patt.d22: %pattern_type.c42 = var_pattern %d.patt.e01 [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.6: type = fn_type @Destroy.Op.loc35_3.3 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.6: %Destroy.Op.type.1d8f74.6 = struct_value () [concrete] // CHECK:STDOUT: } @@ -224,10 +236,10 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %AdaptCopyable.decl: type = class_decl @AdaptCopyable [concrete = constants.%AdaptCopyable] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %c.param_patt: %pattern_type.3b9 = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.3b9 = at_binding_pattern c, %c.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.3b9 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.3b9 = return_slot_pattern %return.param_patt, %AdaptCopyable.ref.loc8_27 [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.3b9 = value_param_pattern [concrete = constants.%c.param_patt.a0c] +// CHECK:STDOUT: %c.patt: %pattern_type.3b9 = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt.9a3] +// CHECK:STDOUT: %return.param_patt: %pattern_type.3b9 = out_param_pattern [concrete = constants.%return.param_patt.c61] +// CHECK:STDOUT: %return.patt: %pattern_type.3b9 = return_slot_pattern %return.param_patt, %AdaptCopyable.ref.loc8_27 [concrete = constants.%return.patt.539] // CHECK:STDOUT: } { // CHECK:STDOUT: %AdaptCopyable.ref.loc8_27: type = name_ref AdaptCopyable, file.%AdaptCopyable.decl [concrete = constants.%AdaptCopyable] // CHECK:STDOUT: %.loc8: Core.Form = init_form %AdaptCopyable.ref.loc8_27 [concrete = constants.%.748] @@ -238,10 +250,10 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %return: ref %AdaptCopyable = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %InTuple.decl: %InTuple.type = fn_decl @InTuple [concrete = constants.%InTuple] { -// CHECK:STDOUT: %c.param_patt: %pattern_type.c42 = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.c42 = at_binding_pattern c, %c.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.c42 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.c42 = return_slot_pattern %return.param_patt, %.loc27_59.2 [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.c42 = value_param_pattern [concrete = constants.%c.param_patt.ccf] +// CHECK:STDOUT: %c.patt: %pattern_type.c42 = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt.314] +// CHECK:STDOUT: %return.param_patt: %pattern_type.c42 = out_param_pattern [concrete = constants.%return.param_patt.1e8] +// CHECK:STDOUT: %return.patt: %pattern_type.c42 = return_slot_pattern %return.param_patt, %.loc27_59.2 [concrete = constants.%return.patt.ada] // CHECK:STDOUT: } { // CHECK:STDOUT: %AdaptCopyable.ref.loc27_41: type = name_ref AdaptCopyable, file.%AdaptCopyable.decl [concrete = constants.%AdaptCopyable] // CHECK:STDOUT: %u32.loc27_56: type = type_literal constants.%u32 [concrete = constants.%u32] @@ -274,8 +286,8 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: fn @F(%c.param: %AdaptCopyable) -> out %return.param: %AdaptCopyable { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.3b9 = ref_binding_pattern d [concrete] -// CHECK:STDOUT: %d.var_patt: %pattern_type.3b9 = var_pattern %d.patt [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.3b9 = ref_binding_pattern d [concrete = constants.%d.patt.467] +// CHECK:STDOUT: %d.var_patt: %pattern_type.3b9 = var_pattern %d.patt [concrete = constants.%d.var_patt.b13] // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %AdaptCopyable = var %d.var_patt // CHECK:STDOUT: %c.ref: %AdaptCopyable = name_ref c, %c @@ -304,8 +316,8 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: fn @InTuple(%c.param: %tuple.type.28f) -> out %return.param: %tuple.type.28f { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.c42 = ref_binding_pattern d [concrete] -// CHECK:STDOUT: %d.var_patt: %pattern_type.c42 = var_pattern %d.patt [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.c42 = ref_binding_pattern d [concrete = constants.%d.patt.e01] +// CHECK:STDOUT: %d.var_patt: %pattern_type.c42 = var_pattern %d.patt [concrete = constants.%d.var_patt.d22] // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %tuple.type.28f = var %d.var_patt // CHECK:STDOUT: %c.ref: %tuple.type.28f = name_ref c, %c @@ -354,9 +366,15 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %complete_type.6c4: = complete_type_witness %tuple.type.e55 [concrete] // CHECK:STDOUT: %pattern_type.ea1: type = pattern_type %AdaptTuple [concrete] +// CHECK:STDOUT: %c.param_patt.a12: %pattern_type.ea1 = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt.b46: %pattern_type.ea1 = at_binding_pattern c, %c.param_patt.a12 [concrete] // CHECK:STDOUT: %.6bf: Core.Form = init_form %AdaptTuple [concrete] +// CHECK:STDOUT: %return.param_patt.511: %pattern_type.ea1 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.ead: %pattern_type.ea1 = return_slot_pattern %return.param_patt.511, %AdaptTuple [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] +// CHECK:STDOUT: %d.patt.bc4: %pattern_type.ea1 = ref_binding_pattern d [concrete] +// CHECK:STDOUT: %d.var_patt.69e: %pattern_type.ea1 = var_pattern %d.patt.bc4 [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.ac8: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N) [symbolic] // CHECK:STDOUT: %Int.as.Copy.impl.Op.5e0: %Int.as.Copy.impl.Op.type.ac8 = struct_value () [symbolic] @@ -376,10 +394,16 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %tuple.9ca: %tuple.type.24b = tuple_value (%AdaptTuple, %u32) [concrete] // CHECK:STDOUT: %tuple.type.e88: type = tuple_type (%AdaptTuple, %u32) [concrete] // CHECK:STDOUT: %pattern_type.996: type = pattern_type %tuple.type.e88 [concrete] +// CHECK:STDOUT: %c.param_patt.677: %pattern_type.996 = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt.0c5: %pattern_type.996 = at_binding_pattern c, %c.param_patt.677 [concrete] // CHECK:STDOUT: %.c2f: Core.Form = init_form %tuple.type.e88 [concrete] +// CHECK:STDOUT: %return.param_patt.446: %pattern_type.996 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.70a: %pattern_type.996 = return_slot_pattern %return.param_patt.446, %tuple.type.e88 [concrete] // CHECK:STDOUT: %InTuple.type: type = fn_type @InTuple [concrete] // CHECK:STDOUT: %InTuple: %InTuple.type = struct_value () [concrete] // CHECK:STDOUT: %u32.builtin: type = int_type unsigned, %int_32 [concrete] +// CHECK:STDOUT: %d.patt.be1: %pattern_type.996 = ref_binding_pattern d [concrete] +// CHECK:STDOUT: %d.var_patt.898: %pattern_type.996 = var_pattern %d.patt.be1 [concrete] // CHECK:STDOUT: %UInt.as.Copy.impl.Op.type.0c5: type = fn_type @UInt.as.Copy.impl.Op, @UInt.as.Copy.impl(%N) [symbolic] // CHECK:STDOUT: %UInt.as.Copy.impl.Op.38a: %UInt.as.Copy.impl.Op.type.0c5 = struct_value () [symbolic] // CHECK:STDOUT: %Copy.impl_witness.9d9: = impl_witness imports.%Copy.impl_witness_table.fe3, @UInt.as.Copy.impl(%int_32) [concrete] @@ -422,10 +446,10 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %AdaptTuple.decl: type = class_decl @AdaptTuple [concrete = constants.%AdaptTuple] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %c.param_patt: %pattern_type.ea1 = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.ea1 = at_binding_pattern c, %c.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.ea1 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.ea1 = return_slot_pattern %return.param_patt, %AdaptTuple.ref.loc8_24 [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.ea1 = value_param_pattern [concrete = constants.%c.param_patt.a12] +// CHECK:STDOUT: %c.patt: %pattern_type.ea1 = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt.b46] +// CHECK:STDOUT: %return.param_patt: %pattern_type.ea1 = out_param_pattern [concrete = constants.%return.param_patt.511] +// CHECK:STDOUT: %return.patt: %pattern_type.ea1 = return_slot_pattern %return.param_patt, %AdaptTuple.ref.loc8_24 [concrete = constants.%return.patt.ead] // CHECK:STDOUT: } { // CHECK:STDOUT: %AdaptTuple.ref.loc8_24: type = name_ref AdaptTuple, file.%AdaptTuple.decl [concrete = constants.%AdaptTuple] // CHECK:STDOUT: %.loc8: Core.Form = init_form %AdaptTuple.ref.loc8_24 [concrete = constants.%.6bf] @@ -436,10 +460,10 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %return: ref %AdaptTuple = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %InTuple.decl: %InTuple.type = fn_decl @InTuple [concrete = constants.%InTuple] { -// CHECK:STDOUT: %c.param_patt: %pattern_type.996 = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.996 = at_binding_pattern c, %c.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.996 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.996 = return_slot_pattern %return.param_patt, %.loc13_53.2 [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.996 = value_param_pattern [concrete = constants.%c.param_patt.677] +// CHECK:STDOUT: %c.patt: %pattern_type.996 = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt.0c5] +// CHECK:STDOUT: %return.param_patt: %pattern_type.996 = out_param_pattern [concrete = constants.%return.param_patt.446] +// CHECK:STDOUT: %return.patt: %pattern_type.996 = return_slot_pattern %return.param_patt, %.loc13_53.2 [concrete = constants.%return.patt.70a] // CHECK:STDOUT: } { // CHECK:STDOUT: %AdaptTuple.ref.loc13_38: type = name_ref AdaptTuple, file.%AdaptTuple.decl [concrete = constants.%AdaptTuple] // CHECK:STDOUT: %u32.loc13_50: type = type_literal constants.%u32 [concrete = constants.%u32] @@ -475,8 +499,8 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: fn @F(%c.param: %AdaptTuple) -> out %return.param: %AdaptTuple { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.ea1 = ref_binding_pattern d [concrete] -// CHECK:STDOUT: %d.var_patt: %pattern_type.ea1 = var_pattern %d.patt [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.ea1 = ref_binding_pattern d [concrete = constants.%d.patt.bc4] +// CHECK:STDOUT: %d.var_patt: %pattern_type.ea1 = var_pattern %d.patt [concrete = constants.%d.var_patt.69e] // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %AdaptTuple = var %d.var_patt // CHECK:STDOUT: %c.ref: %AdaptTuple = name_ref c, %c @@ -553,8 +577,8 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: fn @InTuple(%c.param: %tuple.type.e88) -> out %return.param: %tuple.type.e88 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.996 = ref_binding_pattern d [concrete] -// CHECK:STDOUT: %d.var_patt: %pattern_type.996 = var_pattern %d.patt [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.996 = ref_binding_pattern d [concrete = constants.%d.patt.be1] +// CHECK:STDOUT: %d.var_patt: %pattern_type.996 = var_pattern %d.patt [concrete = constants.%d.var_patt.898] // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %tuple.type.e88 = var %d.var_patt // CHECK:STDOUT: %c.ref: %tuple.type.e88 = name_ref c, %c @@ -662,9 +686,15 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %AdaptNoncopyable: type = class_type @AdaptNoncopyable [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %pattern_type.d14: type = pattern_type %AdaptNoncopyable [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.d14 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.d14 = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %.a97: Core.Form = init_form %AdaptNoncopyable [concrete] +// CHECK:STDOUT: %return.param_patt.f81: %pattern_type.d14 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.1dc: %pattern_type.d14 = return_slot_pattern %return.param_patt.f81, %AdaptNoncopyable [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.d14 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.d14 = var_pattern %b.patt [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.3: type = fn_type @Destroy.Op.loc20_3.3 [concrete] @@ -693,10 +723,10 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %Noncopyable.decl: type = class_decl @Noncopyable [concrete = constants.%Noncopyable] {} {} // CHECK:STDOUT: %AdaptNoncopyable.decl: type = class_decl @AdaptNoncopyable [concrete = constants.%AdaptNoncopyable] {} {} // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.d14 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.d14 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.d14 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.d14 = return_slot_pattern %return.param_patt, %AdaptNoncopyable.ref.loc12_30 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.d14 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.d14 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.d14 = out_param_pattern [concrete = constants.%return.param_patt.f81] +// CHECK:STDOUT: %return.patt: %pattern_type.d14 = return_slot_pattern %return.param_patt, %AdaptNoncopyable.ref.loc12_30 [concrete = constants.%return.patt.1dc] // CHECK:STDOUT: } { // CHECK:STDOUT: %AdaptNoncopyable.ref.loc12_30: type = name_ref AdaptNoncopyable, file.%AdaptNoncopyable.decl [concrete = constants.%AdaptNoncopyable] // CHECK:STDOUT: %.loc12: Core.Form = init_form %AdaptNoncopyable.ref.loc12_30 [concrete = constants.%.a97] @@ -730,8 +760,8 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: fn @G(%a.param: %AdaptNoncopyable) -> out %return.param: %AdaptNoncopyable { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.d14 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.d14 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.d14 = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type.d14 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %AdaptNoncopyable = var %b.var_patt // CHECK:STDOUT: %a.ref: %AdaptNoncopyable = name_ref a, %a @@ -776,9 +806,15 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %complete_type.591: = complete_type_witness %tuple.type.227 [concrete] // CHECK:STDOUT: %pattern_type.be3: type = pattern_type %AdaptNoncopyableIndirect [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.be3 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.be3 = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %.284: Core.Form = init_form %AdaptNoncopyableIndirect [concrete] +// CHECK:STDOUT: %return.param_patt.6c3: %pattern_type.be3 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.de6: %pattern_type.be3 = return_slot_pattern %return.param_patt.6c3, %AdaptNoncopyableIndirect [concrete] // CHECK:STDOUT: %H.type: type = fn_type @H [concrete] // CHECK:STDOUT: %H: %H.type = struct_value () [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.be3 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.be3 = var_pattern %b.patt [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.ac8: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N) [symbolic] // CHECK:STDOUT: %Int.as.Copy.impl.Op.5e0: %Int.as.Copy.impl.Op.type.ac8 = struct_value () [symbolic] @@ -820,10 +856,10 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %Noncopyable.decl: type = class_decl @Noncopyable [concrete = constants.%Noncopyable] {} {} // CHECK:STDOUT: %AdaptNoncopyableIndirect.decl: type = class_decl @AdaptNoncopyableIndirect [concrete = constants.%AdaptNoncopyableIndirect] {} {} // CHECK:STDOUT: %H.decl: %H.type = fn_decl @H [concrete = constants.%H] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.be3 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.be3 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.be3 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.be3 = return_slot_pattern %return.param_patt, %AdaptNoncopyableIndirect.ref.loc12_38 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.be3 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.be3 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.be3 = out_param_pattern [concrete = constants.%return.param_patt.6c3] +// CHECK:STDOUT: %return.patt: %pattern_type.be3 = return_slot_pattern %return.param_patt, %AdaptNoncopyableIndirect.ref.loc12_38 [concrete = constants.%return.patt.de6] // CHECK:STDOUT: } { // CHECK:STDOUT: %AdaptNoncopyableIndirect.ref.loc12_38: type = name_ref AdaptNoncopyableIndirect, file.%AdaptNoncopyableIndirect.decl [concrete = constants.%AdaptNoncopyableIndirect] // CHECK:STDOUT: %.loc12: Core.Form = init_form %AdaptNoncopyableIndirect.ref.loc12_38 [concrete = constants.%.284] @@ -861,8 +897,8 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: fn @H(%a.param: %AdaptNoncopyableIndirect) -> out %return.param: %AdaptNoncopyableIndirect { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.be3 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.be3 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.be3 = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type.be3 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %AdaptNoncopyableIndirect = var %b.var_patt // CHECK:STDOUT: %a.ref: %AdaptNoncopyableIndirect = name_ref a, %a @@ -937,9 +973,15 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %complete_type.db4: = complete_type_witness %struct_type.e.f [concrete] // CHECK:STDOUT: %pattern_type.27f: type = pattern_type %AdaptStruct [concrete] +// CHECK:STDOUT: %g.param_patt: %pattern_type.27f = value_param_pattern [concrete] +// CHECK:STDOUT: %g.patt: %pattern_type.27f = at_binding_pattern g, %g.param_patt [concrete] // CHECK:STDOUT: %.ae3: Core.Form = init_form %AdaptStruct [concrete] +// CHECK:STDOUT: %return.param_patt.427: %pattern_type.27f = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.0e8: %pattern_type.27f = return_slot_pattern %return.param_patt.427, %AdaptStruct [concrete] // CHECK:STDOUT: %I.type: type = fn_type @I [concrete] // CHECK:STDOUT: %I: %I.type = struct_value () [concrete] +// CHECK:STDOUT: %h.patt: %pattern_type.27f = ref_binding_pattern h [concrete] +// CHECK:STDOUT: %h.var_patt: %pattern_type.27f = var_pattern %h.patt [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.ac8: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N) [symbolic] // CHECK:STDOUT: %Int.as.Copy.impl.Op.5e0: %Int.as.Copy.impl.Op.type.ac8 = struct_value () [symbolic] @@ -960,10 +1002,16 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %tuple.f52: %tuple.type.24b = tuple_value (%AdaptStruct, %u32) [concrete] // CHECK:STDOUT: %tuple.type.e00: type = tuple_type (%AdaptStruct, %u32) [concrete] // CHECK:STDOUT: %pattern_type.418: type = pattern_type %tuple.type.e00 [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.418 = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.418 = at_binding_pattern c, %c.param_patt [concrete] // CHECK:STDOUT: %.70d: Core.Form = init_form %tuple.type.e00 [concrete] +// CHECK:STDOUT: %return.param_patt.9c4: %pattern_type.418 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.3e9: %pattern_type.418 = return_slot_pattern %return.param_patt.9c4, %tuple.type.e00 [concrete] // CHECK:STDOUT: %InTuple.type: type = fn_type @InTuple [concrete] // CHECK:STDOUT: %InTuple: %InTuple.type = struct_value () [concrete] // CHECK:STDOUT: %u32.builtin: type = int_type unsigned, %int_32 [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.418 = ref_binding_pattern d [concrete] +// CHECK:STDOUT: %d.var_patt: %pattern_type.418 = var_pattern %d.patt [concrete] // CHECK:STDOUT: %UInt.as.Copy.impl.Op.type.0c5: type = fn_type @UInt.as.Copy.impl.Op, @UInt.as.Copy.impl(%N) [symbolic] // CHECK:STDOUT: %UInt.as.Copy.impl.Op.38a: %UInt.as.Copy.impl.Op.type.0c5 = struct_value () [symbolic] // CHECK:STDOUT: %Copy.impl_witness.9d9: = impl_witness imports.%Copy.impl_witness_table.fe3, @UInt.as.Copy.impl(%int_32) [concrete] @@ -1006,10 +1054,10 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %AdaptStruct.decl: type = class_decl @AdaptStruct [concrete = constants.%AdaptStruct] {} {} // CHECK:STDOUT: %I.decl: %I.type = fn_decl @I [concrete = constants.%I] { -// CHECK:STDOUT: %g.param_patt: %pattern_type.27f = value_param_pattern [concrete] -// CHECK:STDOUT: %g.patt: %pattern_type.27f = at_binding_pattern g, %g.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.27f = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.27f = return_slot_pattern %return.param_patt, %AdaptStruct.ref.loc8_25 [concrete] +// CHECK:STDOUT: %g.param_patt: %pattern_type.27f = value_param_pattern [concrete = constants.%g.param_patt] +// CHECK:STDOUT: %g.patt: %pattern_type.27f = at_binding_pattern g, %g.param_patt [concrete = constants.%g.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.27f = out_param_pattern [concrete = constants.%return.param_patt.427] +// CHECK:STDOUT: %return.patt: %pattern_type.27f = return_slot_pattern %return.param_patt, %AdaptStruct.ref.loc8_25 [concrete = constants.%return.patt.0e8] // CHECK:STDOUT: } { // CHECK:STDOUT: %AdaptStruct.ref.loc8_25: type = name_ref AdaptStruct, file.%AdaptStruct.decl [concrete = constants.%AdaptStruct] // CHECK:STDOUT: %.loc8: Core.Form = init_form %AdaptStruct.ref.loc8_25 [concrete = constants.%.ae3] @@ -1020,10 +1068,10 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %return: ref %AdaptStruct = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %InTuple.decl: %InTuple.type = fn_decl @InTuple [concrete = constants.%InTuple] { -// CHECK:STDOUT: %c.param_patt: %pattern_type.418 = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.418 = at_binding_pattern c, %c.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.418 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.418 = return_slot_pattern %return.param_patt, %.loc13_55.2 [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.418 = value_param_pattern [concrete = constants.%c.param_patt] +// CHECK:STDOUT: %c.patt: %pattern_type.418 = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.418 = out_param_pattern [concrete = constants.%return.param_patt.9c4] +// CHECK:STDOUT: %return.patt: %pattern_type.418 = return_slot_pattern %return.param_patt, %.loc13_55.2 [concrete = constants.%return.patt.3e9] // CHECK:STDOUT: } { // CHECK:STDOUT: %AdaptStruct.ref.loc13_39: type = name_ref AdaptStruct, file.%AdaptStruct.decl [concrete = constants.%AdaptStruct] // CHECK:STDOUT: %u32.loc13_52: type = type_literal constants.%u32 [concrete = constants.%u32] @@ -1058,8 +1106,8 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: fn @I(%g.param: %AdaptStruct) -> out %return.param: %AdaptStruct { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %h.patt: %pattern_type.27f = ref_binding_pattern h [concrete] -// CHECK:STDOUT: %h.var_patt: %pattern_type.27f = var_pattern %h.patt [concrete] +// CHECK:STDOUT: %h.patt: %pattern_type.27f = ref_binding_pattern h [concrete = constants.%h.patt] +// CHECK:STDOUT: %h.var_patt: %pattern_type.27f = var_pattern %h.patt [concrete = constants.%h.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %h.var: ref %AdaptStruct = var %h.var_patt // CHECK:STDOUT: %g.ref: %AdaptStruct = name_ref g, %g @@ -1136,8 +1184,8 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: fn @InTuple(%c.param: %tuple.type.e00) -> out %return.param: %tuple.type.e00 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.418 = ref_binding_pattern d [concrete] -// CHECK:STDOUT: %d.var_patt: %pattern_type.418 = var_pattern %d.patt [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.418 = ref_binding_pattern d [concrete = constants.%d.patt] +// CHECK:STDOUT: %d.var_patt: %pattern_type.418 = var_pattern %d.patt [concrete = constants.%d.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %tuple.type.e00 = var %d.var_patt // CHECK:STDOUT: %c.ref: %tuple.type.e00 = name_ref c, %c diff --git a/toolchain/check/testdata/class/adapter/extend_adapt.carbon b/toolchain/check/testdata/class/adapter/extend_adapt.carbon index a112bc2ae2c2..a390debb912a 100644 --- a/toolchain/check/testdata/class/adapter/extend_adapt.carbon +++ b/toolchain/check/testdata/class/adapter/extend_adapt.carbon @@ -156,10 +156,14 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: %SomeClass.StaticMemberFunction.type: type = fn_type @SomeClass.StaticMemberFunction [concrete] // CHECK:STDOUT: %SomeClass.StaticMemberFunction: %SomeClass.StaticMemberFunction.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.54b: type = pattern_type %SomeClassAdapter [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.54b = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt: %pattern_type.54b = at_binding_pattern self, %self.param_patt [concrete] // CHECK:STDOUT: %SomeClass.AdapterMethod.type: type = fn_type @SomeClass.AdapterMethod [concrete] // CHECK:STDOUT: %SomeClass.AdapterMethod: %SomeClass.AdapterMethod.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.a.b: type = struct_type {.a: %i32, .b: %i32} [concrete] // CHECK:STDOUT: %complete_type.7b9: = complete_type_witness %struct_type.a.b [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.54b = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt.4cf: %pattern_type.54b = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %TestStaticMemberFunction.type: type = fn_type @TestStaticMemberFunction [concrete] // CHECK:STDOUT: %TestStaticMemberFunction: %TestStaticMemberFunction.type = struct_value () [concrete] // CHECK:STDOUT: %TestAdapterMethod.type: type = fn_type @TestAdapterMethod [concrete] @@ -188,16 +192,16 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: %SomeClass.decl: type = class_decl @SomeClass [concrete = constants.%SomeClass] {} {} // CHECK:STDOUT: %SomeClassAdapter.decl.loc15: type = class_decl @SomeClassAdapter [concrete = constants.%SomeClassAdapter] {} {} // CHECK:STDOUT: %TestStaticMemberFunction.decl: %TestStaticMemberFunction.type = fn_decl @TestStaticMemberFunction [concrete = constants.%TestStaticMemberFunction] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.54b = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.54b = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.54b = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.54b = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt.4cf] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %SomeClassAdapter = value_param call_param0 // CHECK:STDOUT: %SomeClassAdapter.ref: type = name_ref SomeClassAdapter, file.%SomeClassAdapter.decl.loc4 [concrete = constants.%SomeClassAdapter] // CHECK:STDOUT: %a: %SomeClassAdapter = value_binding a, %a.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestAdapterMethod.decl: %TestAdapterMethod.type = fn_decl @TestAdapterMethod [concrete = constants.%TestAdapterMethod] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.54b = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.54b = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.54b = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.54b = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt.4cf] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %SomeClassAdapter = value_param call_param0 // CHECK:STDOUT: %SomeClassAdapter.ref: type = name_ref SomeClassAdapter, file.%SomeClassAdapter.decl.loc4 [concrete = constants.%SomeClassAdapter] @@ -224,8 +228,8 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: %.loc8: %SomeClass.elem = field_decl b, element1 [concrete] // CHECK:STDOUT: %SomeClass.StaticMemberFunction.decl: %SomeClass.StaticMemberFunction.type = fn_decl @SomeClass.StaticMemberFunction [concrete = constants.%SomeClass.StaticMemberFunction] {} {} // CHECK:STDOUT: %SomeClass.AdapterMethod.decl: %SomeClass.AdapterMethod.type = fn_decl @SomeClass.AdapterMethod [concrete = constants.%SomeClass.AdapterMethod] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.54b = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.54b = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.54b = value_param_pattern [concrete = constants.%self.param_patt] +// CHECK:STDOUT: %self.patt: %pattern_type.54b = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %SomeClassAdapter = value_param call_param0 // CHECK:STDOUT: %SomeClassAdapter.ref: type = name_ref SomeClassAdapter, file.%SomeClassAdapter.decl.loc4 [concrete = constants.%SomeClassAdapter] @@ -269,6 +273,8 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: constants { // CHECK:STDOUT: %SomeClass: type = class_type @SomeClass [concrete] // CHECK:STDOUT: %pattern_type.b5d: type = pattern_type %SomeClass [concrete] +// CHECK:STDOUT: %self.param_patt.1e7: %pattern_type.b5d = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.ba7: %pattern_type.b5d = at_binding_pattern self, %self.param_patt.1e7 [concrete] // CHECK:STDOUT: %SomeClass.F.type: type = fn_type @SomeClass.F [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %SomeClass.F: %SomeClass.F.type = struct_value () [concrete] @@ -276,6 +282,8 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %SomeClassAdapter: type = class_type @SomeClassAdapter [concrete] // CHECK:STDOUT: %pattern_type.54b: type = pattern_type %SomeClassAdapter [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.54b = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.54b = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] @@ -302,8 +310,8 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: %SomeClass.decl: type = class_decl @SomeClass [concrete = constants.%SomeClass] {} {} // CHECK:STDOUT: %SomeClassAdapter.decl: type = class_decl @SomeClassAdapter [concrete = constants.%SomeClassAdapter] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.54b = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.54b = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.54b = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.54b = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %SomeClassAdapter = value_param call_param0 // CHECK:STDOUT: %SomeClassAdapter.ref: type = name_ref SomeClassAdapter, file.%SomeClassAdapter.decl [concrete = constants.%SomeClassAdapter] @@ -313,8 +321,8 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: class @SomeClass { // CHECK:STDOUT: %SomeClass.F.decl: %SomeClass.F.type = fn_decl @SomeClass.F [concrete = constants.%SomeClass.F] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.b5d = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.b5d = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.b5d = value_param_pattern [concrete = constants.%self.param_patt.1e7] +// CHECK:STDOUT: %self.patt: %pattern_type.b5d = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.ba7] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %SomeClass = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%SomeClass [concrete = constants.%SomeClass] @@ -367,7 +375,11 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: %complete_type.7b9: = complete_type_witness %struct_type.a.b [concrete] // CHECK:STDOUT: %SomeClassAdapter: type = class_type @SomeClassAdapter [concrete] // CHECK:STDOUT: %pattern_type.54b: type = pattern_type %SomeClassAdapter [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.54b = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt.4cf: %pattern_type.54b = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] @@ -396,10 +408,10 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: %SomeClass.decl: type = class_decl @SomeClass [concrete = constants.%SomeClass] {} {} // CHECK:STDOUT: %SomeClassAdapter.decl: type = class_decl @SomeClassAdapter [concrete = constants.%SomeClassAdapter] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.54b = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.54b = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.54b = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.54b = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt.4cf] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc13: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -456,8 +468,12 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: %struct_type.a.b: type = struct_type {.a: %i32, .b: %i32} [concrete] // CHECK:STDOUT: %complete_type.7b9: = complete_type_witness %struct_type.a.b [concrete] // CHECK:STDOUT: %pattern_type.9b8: type = pattern_type %StructAdapter [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.9b8 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.9b8 = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -480,10 +496,10 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %StructAdapter.decl: type = class_decl @StructAdapter [concrete = constants.%StructAdapter] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.9b8 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.9b8 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.9b8 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.9b8 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc8: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -529,8 +545,12 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: %tuple.type.e55: type = tuple_type (%i32, %i32) [concrete] // CHECK:STDOUT: %complete_type.6c4: = complete_type_witness %tuple.type.e55 [concrete] // CHECK:STDOUT: %pattern_type.59f: type = pattern_type %TupleAdapter [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.59f = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.59f = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] @@ -554,10 +574,10 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %TupleAdapter.decl: type = class_decl @TupleAdapter [concrete = constants.%TupleAdapter] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.59f = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.59f = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.59f = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.59f = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc8: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -594,8 +614,12 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %pattern_type.dc0: type = pattern_type Core.IntLiteral [concrete] +// CHECK:STDOUT: %N.param_patt: %pattern_type.dc0 = value_param_pattern [concrete] +// CHECK:STDOUT: %N.patt.eef: %pattern_type.dc0 = at_binding_pattern N, %N.param_patt [concrete] // CHECK:STDOUT: %.805: Core.Form = init_form type [concrete] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %return.param_patt.70e: %pattern_type.98f = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.3ae: %pattern_type.98f = return_slot_pattern %return.param_patt.70e, type [concrete] // CHECK:STDOUT: %MakeInt.type: type = fn_type @MakeInt [concrete] // CHECK:STDOUT: %MakeInt: %MakeInt.type = struct_value () [concrete] // CHECK:STDOUT: %IntAdapter: type = class_type @IntAdapter [concrete] @@ -603,11 +627,15 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %complete_type.f8a: = complete_type_witness %i32.builtin [concrete] // CHECK:STDOUT: %pattern_type.353: type = pattern_type %IntAdapter [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.353 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.353 = at_binding_pattern a, %a.param_patt [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: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -632,10 +660,10 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %MakeInt.decl: %MakeInt.type = fn_decl @MakeInt [concrete = constants.%MakeInt] { -// CHECK:STDOUT: %N.param_patt: %pattern_type.dc0 = value_param_pattern [concrete] -// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = at_binding_pattern N, %N.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.98f = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern %return.param_patt, %.loc4_35.1 [concrete] +// CHECK:STDOUT: %N.param_patt: %pattern_type.dc0 = value_param_pattern [concrete = constants.%N.param_patt] +// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = at_binding_pattern N, %N.param_patt [concrete = constants.%N.patt.eef] +// CHECK:STDOUT: %return.param_patt: %pattern_type.98f = out_param_pattern [concrete = constants.%return.param_patt.70e] +// CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern %return.param_patt, %.loc4_35.1 [concrete = constants.%return.patt.3ae] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_35.1: type = type_literal type [concrete = type] // CHECK:STDOUT: %.loc4_35.2: Core.Form = init_form %.loc4_35.1 [concrete = constants.%.805] @@ -650,10 +678,10 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %IntAdapter.decl: type = class_decl @IntAdapter [concrete = constants.%IntAdapter] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.353 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.353 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.353 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.353 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc10: Core.Form = init_form %i32 [concrete = constants.%.795] diff --git a/toolchain/check/testdata/class/adapter/init_adapt.carbon b/toolchain/check/testdata/class/adapter/init_adapt.carbon index 3bd86dbdd6a5..be75016f13fe 100644 --- a/toolchain/check/testdata/class/adapter/init_adapt.carbon +++ b/toolchain/check/testdata/class/adapter/init_adapt.carbon @@ -109,6 +109,7 @@ var e: C = MakeAdaptC(); // CHECK:STDOUT: %complete_type.7b9: = complete_type_witness %struct_type.a.b.b4c [concrete] // CHECK:STDOUT: %AdaptC: type = class_type @AdaptC [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt.c32: %pattern_type.98b = value_binding_pattern a [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %struct_type.a.b.cfd: type = struct_type {.a: Core.IntLiteral, .b: Core.IntLiteral} [concrete] @@ -135,12 +136,22 @@ var e: C = MakeAdaptC(); // CHECK:STDOUT: %C.val: %C = struct_value (%int_1.0c6, %int_2.295) [concrete] // CHECK:STDOUT: %.c76: ref %C = temporary invalid, %C.val [concrete] // CHECK:STDOUT: %pattern_type.720: type = pattern_type %AdaptC [concrete] +// CHECK:STDOUT: %b.patt.658: %pattern_type.720 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = value_binding_pattern c [concrete] // CHECK:STDOUT: %.a44: Core.Form = init_form %C [concrete] +// CHECK:STDOUT: %return.param_patt.89a: %pattern_type.98b = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e4a: %pattern_type.98b = return_slot_pattern %return.param_patt.89a, %C [concrete] // CHECK:STDOUT: %MakeC.type: type = fn_type @MakeC [concrete] // CHECK:STDOUT: %MakeC: %MakeC.type = struct_value () [concrete] // CHECK:STDOUT: %.624: Core.Form = init_form %AdaptC [concrete] +// CHECK:STDOUT: %return.param_patt.788: %pattern_type.720 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.794: %pattern_type.720 = return_slot_pattern %return.param_patt.788, %AdaptC [concrete] // CHECK:STDOUT: %MakeAdaptC.type: type = fn_type @MakeAdaptC [concrete] // CHECK:STDOUT: %MakeAdaptC: %MakeAdaptC.type = struct_value () [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.720 = ref_binding_pattern d [concrete] +// CHECK:STDOUT: %d.var_patt: %pattern_type.720 = var_pattern %d.patt [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type.98b = ref_binding_pattern e [concrete] +// CHECK:STDOUT: %e.var_patt: %pattern_type.98b = var_pattern %e.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -173,9 +184,8 @@ var e: C = MakeAdaptC(); // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %AdaptC.decl: type = class_decl @AdaptC [concrete = constants.%AdaptC] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.98b = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.98b = value_binding_pattern a [concrete = constants.%a.patt.c32] // CHECK:STDOUT: } -// CHECK:STDOUT: %C.ref.loc13: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %impl.elem0.loc13_27.1: %.1c5 = impl_witness_access constants.%ImplicitAs.impl_witness.a23, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] // CHECK:STDOUT: %bound_method.loc13_27.1: = bound_method @__global_init.%int_1, %impl.elem0.loc13_27.1 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.094] // CHECK:STDOUT: %specific_fn.loc13_27.1: = specific_function %impl.elem0.loc13_27.1, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] @@ -197,20 +207,21 @@ var e: C = MakeAdaptC(); // CHECK:STDOUT: %.loc13_27.9: init %C = converted @__global_init.%.loc13, %.loc13_27.8 [concrete = constants.%C.val] // CHECK:STDOUT: %.loc13_27.10: ref %C = temporary %.loc13_27.2, %.loc13_27.9 [concrete = constants.%.c76] // CHECK:STDOUT: %.loc13_27.11: %C = acquire_value %.loc13_27.10 [concrete = constants.%C.val] +// CHECK:STDOUT: %C.ref.loc13: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %a: %C = value_binding a, %.loc13_27.11 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.720 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.720 = value_binding_pattern b [concrete = constants.%b.patt.658] // CHECK:STDOUT: } // CHECK:STDOUT: %AdaptC.ref.loc15: type = name_ref AdaptC, %AdaptC.decl [concrete = constants.%AdaptC] // CHECK:STDOUT: %b: %AdaptC = value_binding b, @__global_init.%.loc15_19.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.98b = value_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = value_binding_pattern c [concrete = constants.%c.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %C.ref.loc17: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %c: %C = value_binding c, @__global_init.%.loc17_14.2 // CHECK:STDOUT: %MakeC.decl: %MakeC.type = fn_decl @MakeC [concrete = constants.%MakeC] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C.ref [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete = constants.%return.param_patt.89a] +// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C.ref [concrete = constants.%return.patt.e4a] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %.loc19: Core.Form = init_form %C.ref [concrete = constants.%.a44] @@ -218,8 +229,8 @@ var e: C = MakeAdaptC(); // CHECK:STDOUT: %return: ref %C = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %MakeAdaptC.decl: %MakeAdaptC.type = fn_decl @MakeAdaptC [concrete = constants.%MakeAdaptC] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.720 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.720 = return_slot_pattern %return.param_patt, %AdaptC.ref [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.720 = out_param_pattern [concrete = constants.%return.param_patt.788] +// CHECK:STDOUT: %return.patt: %pattern_type.720 = return_slot_pattern %return.param_patt, %AdaptC.ref [concrete = constants.%return.patt.794] // CHECK:STDOUT: } { // CHECK:STDOUT: %AdaptC.ref: type = name_ref AdaptC, file.%AdaptC.decl [concrete = constants.%AdaptC] // CHECK:STDOUT: %.loc21: Core.Form = init_form %AdaptC.ref [concrete = constants.%.624] @@ -227,15 +238,15 @@ var e: C = MakeAdaptC(); // CHECK:STDOUT: %return: ref %AdaptC = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.720 = ref_binding_pattern d [concrete] -// CHECK:STDOUT: %d.var_patt: %pattern_type.720 = var_pattern %d.patt [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.720 = ref_binding_pattern d [concrete = constants.%d.patt] +// CHECK:STDOUT: %d.var_patt: %pattern_type.720 = var_pattern %d.patt [concrete = constants.%d.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %AdaptC = var %d.var_patt [concrete] // CHECK:STDOUT: %AdaptC.ref.loc23: type = name_ref AdaptC, %AdaptC.decl [concrete = constants.%AdaptC] // CHECK:STDOUT: %d: ref %AdaptC = ref_binding d, %d.var [concrete = %d.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %e.patt: %pattern_type.98b = ref_binding_pattern e [concrete] -// CHECK:STDOUT: %e.var_patt: %pattern_type.98b = var_pattern %e.patt [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type.98b = ref_binding_pattern e [concrete = constants.%e.patt] +// CHECK:STDOUT: %e.var_patt: %pattern_type.98b = var_pattern %e.patt [concrete = constants.%e.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %e.var: ref %C = var %e.var_patt [concrete] // CHECK:STDOUT: %C.ref.loc25: type = name_ref C, %C.decl [concrete = constants.%C] @@ -312,6 +323,7 @@ var e: C = MakeAdaptC(); // CHECK:STDOUT: %complete_type.7b9: = complete_type_witness %struct_type.a.b.b4c [concrete] // CHECK:STDOUT: %AdaptC: type = class_type @AdaptC [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt.c32: %pattern_type.98b = value_binding_pattern a [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %struct_type.a.b.cfd: type = struct_type {.a: Core.IntLiteral, .b: Core.IntLiteral} [concrete] @@ -338,12 +350,22 @@ var e: C = MakeAdaptC(); // CHECK:STDOUT: %C.val: %C = struct_value (%int_1.0c6, %int_2.295) [concrete] // CHECK:STDOUT: %.c76: ref %C = temporary invalid, %C.val [concrete] // CHECK:STDOUT: %pattern_type.720: type = pattern_type %AdaptC [concrete] +// CHECK:STDOUT: %b.patt.658: %pattern_type.720 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = value_binding_pattern c [concrete] // CHECK:STDOUT: %.a44: Core.Form = init_form %C [concrete] +// CHECK:STDOUT: %return.param_patt.89a: %pattern_type.98b = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e4a: %pattern_type.98b = return_slot_pattern %return.param_patt.89a, %C [concrete] // CHECK:STDOUT: %MakeC.type: type = fn_type @MakeC [concrete] // CHECK:STDOUT: %MakeC: %MakeC.type = struct_value () [concrete] // CHECK:STDOUT: %.624: Core.Form = init_form %AdaptC [concrete] +// CHECK:STDOUT: %return.param_patt.788: %pattern_type.720 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.794: %pattern_type.720 = return_slot_pattern %return.param_patt.788, %AdaptC [concrete] // CHECK:STDOUT: %MakeAdaptC.type: type = fn_type @MakeAdaptC [concrete] // CHECK:STDOUT: %MakeAdaptC: %MakeAdaptC.type = struct_value () [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.720 = ref_binding_pattern d [concrete] +// CHECK:STDOUT: %d.var_patt: %pattern_type.720 = var_pattern %d.patt [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type.98b = ref_binding_pattern e [concrete] +// CHECK:STDOUT: %e.var_patt: %pattern_type.98b = var_pattern %e.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -376,9 +398,8 @@ var e: C = MakeAdaptC(); // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %AdaptC.decl: type = class_decl @AdaptC [concrete = constants.%AdaptC] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.98b = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.98b = value_binding_pattern a [concrete = constants.%a.patt.c32] // CHECK:STDOUT: } -// CHECK:STDOUT: %C.ref.loc13: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %impl.elem0.loc13_27.1: %.1c5 = impl_witness_access constants.%ImplicitAs.impl_witness.a23, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] // CHECK:STDOUT: %bound_method.loc13_27.1: = bound_method @__global_init.%int_1, %impl.elem0.loc13_27.1 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.094] // CHECK:STDOUT: %specific_fn.loc13_27.1: = specific_function %impl.elem0.loc13_27.1, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] @@ -400,22 +421,23 @@ var e: C = MakeAdaptC(); // CHECK:STDOUT: %.loc13_27.9: init %C = converted @__global_init.%.loc13, %.loc13_27.8 [concrete = constants.%C.val] // CHECK:STDOUT: %.loc13_27.10: ref %C = temporary %.loc13_27.2, %.loc13_27.9 [concrete = constants.%.c76] // CHECK:STDOUT: %.loc13_27.11: %C = acquire_value %.loc13_27.10 [concrete = constants.%C.val] +// CHECK:STDOUT: %C.ref.loc13: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %a: %C = value_binding a, %.loc13_27.11 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.720 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.720 = value_binding_pattern b [concrete = constants.%b.patt.658] // CHECK:STDOUT: } -// CHECK:STDOUT: %AdaptC.ref.loc24: type = name_ref AdaptC, %AdaptC.decl [concrete = constants.%AdaptC] // CHECK:STDOUT: %.loc24: %AdaptC = converted @__global_init.%a.ref, [concrete = ] +// CHECK:STDOUT: %AdaptC.ref.loc24: type = name_ref AdaptC, %AdaptC.decl [concrete = constants.%AdaptC] // CHECK:STDOUT: %b: %AdaptC = value_binding b, [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.98b = value_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = value_binding_pattern c [concrete = constants.%c.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %C.ref.loc33: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %.loc33: %C = converted @__global_init.%b.ref, [concrete = ] +// CHECK:STDOUT: %C.ref.loc33: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %c: %C = value_binding c, [concrete = ] // CHECK:STDOUT: %MakeC.decl: %MakeC.type = fn_decl @MakeC [concrete = constants.%MakeC] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C.ref [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete = constants.%return.param_patt.89a] +// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C.ref [concrete = constants.%return.patt.e4a] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %.loc35: Core.Form = init_form %C.ref [concrete = constants.%.a44] @@ -423,8 +445,8 @@ var e: C = MakeAdaptC(); // CHECK:STDOUT: %return: ref %C = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %MakeAdaptC.decl: %MakeAdaptC.type = fn_decl @MakeAdaptC [concrete = constants.%MakeAdaptC] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.720 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.720 = return_slot_pattern %return.param_patt, %AdaptC.ref [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.720 = out_param_pattern [concrete = constants.%return.param_patt.788] +// CHECK:STDOUT: %return.patt: %pattern_type.720 = return_slot_pattern %return.param_patt, %AdaptC.ref [concrete = constants.%return.patt.794] // CHECK:STDOUT: } { // CHECK:STDOUT: %AdaptC.ref: type = name_ref AdaptC, file.%AdaptC.decl [concrete = constants.%AdaptC] // CHECK:STDOUT: %.loc37: Core.Form = init_form %AdaptC.ref [concrete = constants.%.624] @@ -432,15 +454,15 @@ var e: C = MakeAdaptC(); // CHECK:STDOUT: %return: ref %AdaptC = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.720 = ref_binding_pattern d [concrete] -// CHECK:STDOUT: %d.var_patt: %pattern_type.720 = var_pattern %d.patt [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.720 = ref_binding_pattern d [concrete = constants.%d.patt] +// CHECK:STDOUT: %d.var_patt: %pattern_type.720 = var_pattern %d.patt [concrete = constants.%d.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %AdaptC = var %d.var_patt [concrete] // CHECK:STDOUT: %AdaptC.ref.loc46: type = name_ref AdaptC, %AdaptC.decl [concrete = constants.%AdaptC] // CHECK:STDOUT: %d: ref %AdaptC = ref_binding d, %d.var [concrete = %d.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %e.patt: %pattern_type.98b = ref_binding_pattern e [concrete] -// CHECK:STDOUT: %e.var_patt: %pattern_type.98b = var_pattern %e.patt [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type.98b = ref_binding_pattern e [concrete = constants.%e.patt] +// CHECK:STDOUT: %e.var_patt: %pattern_type.98b = var_pattern %e.patt [concrete = constants.%e.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %e.var: ref %C = var %e.var_patt [concrete] // CHECK:STDOUT: %C.ref.loc55: type = name_ref C, %C.decl [concrete = constants.%C] diff --git a/toolchain/check/testdata/class/basic.carbon b/toolchain/check/testdata/class/basic.carbon index 7ed375e639b4..7020f1922c8c 100644 --- a/toolchain/check/testdata/class/basic.carbon +++ b/toolchain/check/testdata/class/basic.carbon @@ -40,7 +40,11 @@ fn Run() -> i32 { // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %Class.F.type: type = fn_type @Class.F [concrete] // CHECK:STDOUT: %Class.F: %Class.F.type = struct_value () [concrete] // CHECK:STDOUT: %Class.G.type: type = fn_type @Class.G [concrete] @@ -105,10 +109,10 @@ fn Run() -> i32 { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: %Class.G.decl: %Class.G.type = fn_decl @Class.G [concrete = constants.%Class.G] { -// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc25_23 [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%n.param_patt] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete = constants.%n.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc25_23 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc25_23: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc25: Core.Form = init_form %i32.loc25_23 [concrete = constants.%.795] @@ -119,8 +123,8 @@ fn Run() -> i32 { // CHECK:STDOUT: %return.loc25: ref %i32 = return_slot %return.param.loc25 // CHECK:STDOUT: } // CHECK:STDOUT: %Run.decl: %Run.type = fn_decl @Run [concrete = constants.%Run] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc29: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -131,10 +135,10 @@ fn Run() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: class @Class { // CHECK:STDOUT: %Class.F.decl: %Class.F.type = fn_decl @Class.F [concrete = constants.%Class.F] { -// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc16_19 [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%n.param_patt] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete = constants.%n.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc16_19 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc16_19: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc16: Core.Form = init_form %i32.loc16_19 [concrete = constants.%.795] @@ -145,10 +149,10 @@ fn Run() -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Class.G.decl: %Class.G.type = fn_decl @Class.G [concrete = constants.%Class.G] { -// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc25_23 [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%n.param_patt] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete = constants.%n.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc25_23 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc20_19: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc20: Core.Form = init_form %i32.loc20_19 [concrete = constants.%.795] diff --git a/toolchain/check/testdata/class/complete_in_member_fn.carbon b/toolchain/check/testdata/class/complete_in_member_fn.carbon index e77747a03a68..a7906a565e67 100644 --- a/toolchain/check/testdata/class/complete_in_member_fn.carbon +++ b/toolchain/check/testdata/class/complete_in_member_fn.carbon @@ -23,6 +23,8 @@ class C { // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.98b = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = at_binding_pattern c, %c.param_patt [concrete] // 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] @@ -30,6 +32,8 @@ class C { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %C.F.type: type = fn_type @C.F [concrete] // CHECK:STDOUT: %C.F: %C.F.type = struct_value () [concrete] // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %i32 [concrete] @@ -71,10 +75,10 @@ class C { // CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: %C.F.decl: %C.F.type = fn_decl @C.F [concrete = constants.%C.F] { -// CHECK:STDOUT: %c.param_patt: %pattern_type.98b = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.98b = at_binding_pattern c, %c.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.98b = value_param_pattern [concrete = constants.%c.param_patt] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc16_17: Core.Form = init_form %i32 [concrete = constants.%.795] diff --git a/toolchain/check/testdata/class/cross_package_import.carbon b/toolchain/check/testdata/class/cross_package_import.carbon index f89aee999049..37c21e048c05 100644 --- a/toolchain/check/testdata/class/cross_package_import.carbon +++ b/toolchain/check/testdata/class/cross_package_import.carbon @@ -195,6 +195,8 @@ var c: Other.C = {}; // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: } @@ -222,8 +224,8 @@ var c: Other.C = {}; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Other.import = import Other // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt [concrete] // CHECK:STDOUT: %.loc6: type = splice_block %C.ref [concrete = constants.%C] { @@ -278,8 +280,8 @@ var c: Other.C = {}; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Other.import = import Other // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: = ref_binding_pattern c [concrete = ] +// CHECK:STDOUT: %c.var_patt: = var_pattern %c.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref = var %c.var_patt [concrete = ] // CHECK:STDOUT: %.loc14: type = splice_block %C.ref [concrete = constants.%C] { @@ -305,6 +307,8 @@ var c: Other.C = {}; // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: } @@ -333,8 +337,8 @@ var c: Other.C = {}; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Other.import = import Other // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt [concrete] // CHECK:STDOUT: %.loc19: type = splice_block %C.ref [concrete = constants.%C] { @@ -367,6 +371,8 @@ var c: Other.C = {}; // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: } @@ -395,8 +401,8 @@ var c: Other.C = {}; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Other.import = import Other // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt [concrete] // CHECK:STDOUT: %.loc19: type = splice_block %C.ref [concrete = constants.%C] { diff --git a/toolchain/check/testdata/class/destroy_calls.carbon b/toolchain/check/testdata/class/destroy_calls.carbon index b4dde37625d6..854be331367f 100644 --- a/toolchain/check/testdata/class/destroy_calls.carbon +++ b/toolchain/check/testdata/class/destroy_calls.carbon @@ -100,11 +100,17 @@ fn G() { F({}); } // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.9ef: type = pattern_type %A [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.9ef = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.9ef = var_pattern %a.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %A.val: %A = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.e39: type = pattern_type %B [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.e39 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.e39 = var_pattern %b.patt [concrete] // CHECK:STDOUT: %B.val: %B = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.2: type = fn_type @Destroy.Op.loc12_3.2 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.2: %Destroy.Op.type.1d8f74.2 = struct_value () [concrete] @@ -121,8 +127,8 @@ fn G() { F({}); } // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.9ef = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.9ef = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.9ef = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.9ef = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %A = var %a.var_patt // CHECK:STDOUT: %.loc10_22.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] @@ -132,8 +138,8 @@ fn G() { F({}); } // CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A] // CHECK:STDOUT: %a: ref %A = ref_binding a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.e39 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.e39 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.e39 = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type.e39 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %B = var %b.var_patt // CHECK:STDOUT: %.loc11_22.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] @@ -143,8 +149,8 @@ fn G() { F({}); } // CHECK:STDOUT: %B.ref: type = name_ref B, file.%B.decl [concrete = constants.%B] // CHECK:STDOUT: %b: ref %B = ref_binding b, %b.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt // CHECK:STDOUT: %.loc12_22.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] @@ -190,12 +196,18 @@ fn G() { F({}); } // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.9ef: type = pattern_type %A [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.9ef = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.9ef = var_pattern %a.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %A.val: %A = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.e39: type = pattern_type %B [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.e39 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.e39 = var_pattern %b.patt [concrete] // CHECK:STDOUT: %B.val: %B = struct_value () [concrete] // CHECK:STDOUT: %true: bool = bool_literal true [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.2: type = fn_type @Destroy.Op.loc13_5.2 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.2: %Destroy.Op.type.1d8f74.2 = struct_value () [concrete] @@ -212,8 +224,8 @@ fn G() { F({}); } // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.9ef = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.9ef = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.9ef = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.9ef = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %A = var %a.var_patt // CHECK:STDOUT: %.loc10_22.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] @@ -223,8 +235,8 @@ fn G() { F({}); } // CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A] // CHECK:STDOUT: %a: ref %A = ref_binding a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.e39 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.e39 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.e39 = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type.e39 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %B = var %b.var_patt // CHECK:STDOUT: %.loc11_22.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] @@ -238,8 +250,8 @@ fn G() { F({}); } // CHECK:STDOUT: // CHECK:STDOUT: !if.then: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt // CHECK:STDOUT: %.loc13_24.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] @@ -360,6 +372,8 @@ fn G() { F({}); } // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %D.dee: type = class_type @D, @D(%C) [concrete] // CHECK:STDOUT: %pattern_type.6fa: type = pattern_type %D.dee [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6fa = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.6fa = var_pattern %a.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %D.val: %D.dee = struct_value () [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.2: type = fn_type @Destroy.Op.loc9_3.2 [concrete] @@ -373,8 +387,8 @@ fn G() { F({}); } // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.6fa = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.6fa = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6fa = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.6fa = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %D.dee = var %a.var_patt // CHECK:STDOUT: %.loc9_25.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] @@ -405,6 +419,7 @@ fn G() { F({}); } // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template] // CHECK:STDOUT: %T: type = symbolic_binding T, 0, template [template] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -416,6 +431,8 @@ fn G() { F({}); } // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %C.1d0 [template] // CHECK:STDOUT: %pattern_type.ebe: type = pattern_type %C.1d0 [template] +// CHECK:STDOUT: %v.patt.f9d: %pattern_type.ebe = ref_binding_pattern v [template] +// CHECK:STDOUT: %v.var_patt.ca3: %pattern_type.ebe = var_pattern %v.patt.f9d [template] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %C.val.d4f: %C.1d0 = struct_value () [template] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] @@ -427,6 +444,8 @@ fn G() { F({}); } // CHECK:STDOUT: %specific_impl_fn: = specific_impl_function %impl.elem0, @Destroy.WithSelf.Op(%Destroy.facet.19f) [template] // CHECK:STDOUT: %C.d8e: type = class_type @C, @C(%empty_struct_type) [concrete] // CHECK:STDOUT: %pattern_type.2fd: type = pattern_type %C.d8e [concrete] +// CHECK:STDOUT: %v.patt.0e7: %pattern_type.2fd = ref_binding_pattern v [concrete] +// CHECK:STDOUT: %v.var_patt.259: %pattern_type.2fd = var_pattern %v.patt.0e7 [concrete] // CHECK:STDOUT: %C.val.58e: %C.d8e = struct_value () [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.2: type = fn_type @Destroy.Op.loc7_3.2 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.2: %Destroy.Op.type.1d8f74.2 = struct_value () [concrete] @@ -438,7 +457,7 @@ fn G() { F({}); } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0, template [concrete] +// CHECK:STDOUT: %T.patt.loc6_16.1: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc6_16.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6_19.1: type = splice_block %.loc6_19.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -449,27 +468,30 @@ fn G() { F({}); } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc6_16.2: type) { +// CHECK:STDOUT: %T.patt.loc6_16.2: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc6_16.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc6_16.1: type = symbolic_binding T, 0, template [template = %T.loc6_16.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %C.loc7_20.2: type = class_type @C, @C(%T.loc6_16.1) [template = %C.loc7_20.2 (constants.%C.1d0)] // CHECK:STDOUT: %require_complete: = require_complete_type %C.loc7_20.2 [template = %require_complete (constants.%require_complete)] // CHECK:STDOUT: %pattern_type: type = pattern_type %C.loc7_20.2 [template = %pattern_type (constants.%pattern_type.ebe)] +// CHECK:STDOUT: %v.patt.loc7_15.2: @F.%pattern_type (%pattern_type.ebe) = ref_binding_pattern v [template = %v.patt.loc7_15.2 (constants.%v.patt.f9d)] +// CHECK:STDOUT: %v.var_patt.loc7_3.2: @F.%pattern_type (%pattern_type.ebe) = var_pattern %v.patt.loc7_15.2 [template = %v.var_patt.loc7_3.2 (constants.%v.var_patt.ca3)] // CHECK:STDOUT: %C.val: @F.%C.loc7_20.2 (%C.1d0) = struct_value () [template = %C.val (constants.%C.val.d4f)] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %C.loc7_20.2, @Destroy [template = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness)] -// CHECK:STDOUT: %Destroy.facet.loc7_3.2: %Destroy.type = facet_value %C.loc7_20.2, (%Destroy.lookup_impl_witness) [template = %Destroy.facet.loc7_3.2 (constants.%Destroy.facet.19f)] -// CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.loc7_3.2) [template = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.fc4)] -// CHECK:STDOUT: %.loc7_3.3: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Destroy.facet.loc7_3.2 [template = %.loc7_3.3 (constants.%.cb3)] -// CHECK:STDOUT: %impl.elem0.loc7_3.2: @F.%.loc7_3.3 (%.cb3) = impl_witness_access %Destroy.lookup_impl_witness, element0 [template = %impl.elem0.loc7_3.2 (constants.%impl.elem0)] -// CHECK:STDOUT: %specific_impl_fn.loc7_3.2: = specific_impl_function %impl.elem0.loc7_3.2, @Destroy.WithSelf.Op(%Destroy.facet.loc7_3.2) [template = %specific_impl_fn.loc7_3.2 (constants.%specific_impl_fn)] +// CHECK:STDOUT: %Destroy.facet.loc7_3.3: %Destroy.type = facet_value %C.loc7_20.2, (%Destroy.lookup_impl_witness) [template = %Destroy.facet.loc7_3.3 (constants.%Destroy.facet.19f)] +// CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.loc7_3.3) [template = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.fc4)] +// CHECK:STDOUT: %.loc7_3.4: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Destroy.facet.loc7_3.3 [template = %.loc7_3.4 (constants.%.cb3)] +// CHECK:STDOUT: %impl.elem0.loc7_3.2: @F.%.loc7_3.4 (%.cb3) = impl_witness_access %Destroy.lookup_impl_witness, element0 [template = %impl.elem0.loc7_3.2 (constants.%impl.elem0)] +// CHECK:STDOUT: %specific_impl_fn.loc7_3.2: = specific_impl_function %impl.elem0.loc7_3.2, @Destroy.WithSelf.Op(%Destroy.facet.loc7_3.3) [template = %specific_impl_fn.loc7_3.2 (constants.%specific_impl_fn)] // CHECK:STDOUT: // CHECK:STDOUT: fn() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: @F.%pattern_type (%pattern_type.ebe) = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: @F.%pattern_type (%pattern_type.ebe) = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt.loc7_15.1: @F.%pattern_type (%pattern_type.ebe) = ref_binding_pattern v [template = %v.patt.loc7_15.2 (constants.%v.patt.f9d)] +// CHECK:STDOUT: %v.var_patt.loc7_3.1: @F.%pattern_type (%pattern_type.ebe) = var_pattern %v.patt.loc7_15.1 [template = %v.var_patt.loc7_3.2 (constants.%v.var_patt.ca3)] // CHECK:STDOUT: } -// CHECK:STDOUT: %v.var: ref @F.%C.loc7_20.2 (%C.1d0) = var %v.var_patt +// CHECK:STDOUT: %v.var: ref @F.%C.loc7_20.2 (%C.1d0) = var %v.var_patt.loc7_3.1 // CHECK:STDOUT: %.loc7_25.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] // CHECK:STDOUT: %.loc7_25.2: init @F.%C.loc7_20.2 (%C.1d0) to %v.var = class_init () [template = %C.val (constants.%C.val.d4f)] // CHECK:STDOUT: %.loc7_3.1: init @F.%C.loc7_20.2 (%C.1d0) = converted %.loc7_25.1, %.loc7_25.2 [template = %C.val (constants.%C.val.d4f)] @@ -480,10 +502,12 @@ fn G() { F({}); } // CHECK:STDOUT: %C.loc7_20.1: type = class_type @C, @C(constants.%T) [template = %C.loc7_20.2 (constants.%C.1d0)] // CHECK:STDOUT: } // CHECK:STDOUT: %v: ref @F.%C.loc7_20.2 (%C.1d0) = ref_binding v, %v.var -// CHECK:STDOUT: %impl.elem0.loc7_3.1: @F.%.loc7_3.3 (%.cb3) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [template = %impl.elem0.loc7_3.2 (constants.%impl.elem0)] +// CHECK:STDOUT: %impl.elem0.loc7_3.1: @F.%.loc7_3.4 (%.cb3) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [template = %impl.elem0.loc7_3.2 (constants.%impl.elem0)] // CHECK:STDOUT: %bound_method.loc7_3.1: = bound_method %v.var, %impl.elem0.loc7_3.1 -// CHECK:STDOUT: %Destroy.facet.loc7_3.1: %Destroy.type = facet_value constants.%C.1d0, (constants.%Destroy.lookup_impl_witness) [template = %Destroy.facet.loc7_3.2 (constants.%Destroy.facet.19f)] -// CHECK:STDOUT: %.loc7_3.2: %Destroy.type = converted constants.%C.1d0, %Destroy.facet.loc7_3.1 [template = %Destroy.facet.loc7_3.2 (constants.%Destroy.facet.19f)] +// CHECK:STDOUT: %Destroy.facet.loc7_3.1: %Destroy.type = facet_value constants.%C.1d0, (constants.%Destroy.lookup_impl_witness) [template = %Destroy.facet.loc7_3.3 (constants.%Destroy.facet.19f)] +// CHECK:STDOUT: %.loc7_3.2: %Destroy.type = converted constants.%C.1d0, %Destroy.facet.loc7_3.1 [template = %Destroy.facet.loc7_3.3 (constants.%Destroy.facet.19f)] +// CHECK:STDOUT: %Destroy.facet.loc7_3.2: %Destroy.type = facet_value constants.%C.1d0, (constants.%Destroy.lookup_impl_witness) [template = %Destroy.facet.loc7_3.3 (constants.%Destroy.facet.19f)] +// CHECK:STDOUT: %.loc7_3.3: %Destroy.type = converted constants.%C.1d0, %Destroy.facet.loc7_3.2 [template = %Destroy.facet.loc7_3.3 (constants.%Destroy.facet.19f)] // CHECK:STDOUT: %specific_impl_fn.loc7_3.1: = specific_impl_function %impl.elem0.loc7_3.1, @Destroy.WithSelf.Op(constants.%Destroy.facet.19f) [template = %specific_impl_fn.loc7_3.2 (constants.%specific_impl_fn)] // CHECK:STDOUT: %bound_method.loc7_3.2: = bound_method %v.var, %specific_impl_fn.loc7_3.1 // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc7_3.2(%v.var) @@ -499,21 +523,25 @@ fn G() { F({}); } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T) { +// CHECK:STDOUT: %T.patt.loc6_16.2 => constants.%T.patt // CHECK:STDOUT: %T.loc6_16.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%empty_struct_type) { +// CHECK:STDOUT: %T.patt.loc6_16.2 => constants.%T.patt // CHECK:STDOUT: %T.loc6_16.1 => constants.%empty_struct_type // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %C.loc7_20.2 => constants.%C.d8e // CHECK:STDOUT: %require_complete => constants.%complete_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.2fd +// CHECK:STDOUT: %v.patt.loc7_15.2 => constants.%v.patt.0e7 +// CHECK:STDOUT: %v.var_patt.loc7_3.2 => constants.%v.var_patt.259 // CHECK:STDOUT: %C.val => constants.%C.val.58e // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.df9cc1.2 -// CHECK:STDOUT: %Destroy.facet.loc7_3.2 => constants.%Destroy.facet.da3 +// CHECK:STDOUT: %Destroy.facet.loc7_3.3 => constants.%Destroy.facet.da3 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.294 -// CHECK:STDOUT: %.loc7_3.3 => constants.%.98c +// CHECK:STDOUT: %.loc7_3.4 => constants.%.98c // CHECK:STDOUT: %impl.elem0.loc7_3.2 => constants.%Destroy.Op.1a2547.2 // CHECK:STDOUT: %specific_impl_fn.loc7_3.2 => constants.%Destroy.Op.1a2547.2 // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/class/export_name.carbon b/toolchain/check/testdata/class/export_name.carbon index 10914cd6c9e0..c3c338546a48 100644 --- a/toolchain/check/testdata/class/export_name.carbon +++ b/toolchain/check/testdata/class/export_name.carbon @@ -101,6 +101,8 @@ var c: C = {}; // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: } @@ -118,8 +120,8 @@ var c: C = {}; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt [concrete] // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] diff --git a/toolchain/check/testdata/class/field/comp_time_field.carbon b/toolchain/check/testdata/class/field/comp_time_field.carbon index 0b117d5f95c8..77250b0c1d14 100644 --- a/toolchain/check/testdata/class/field/comp_time_field.carbon +++ b/toolchain/check/testdata/class/field/comp_time_field.carbon @@ -61,6 +61,8 @@ var x: Class = {}; // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %A.patt: %pattern_type = value_binding_pattern A [concrete] +// CHECK:STDOUT: %B.patt: %pattern_type = value_binding_pattern B [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: } @@ -74,7 +76,7 @@ var x: Class = {}; // CHECK:STDOUT: // CHECK:STDOUT: class @Class { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %A.patt: %pattern_type = value_binding_pattern A [concrete] +// CHECK:STDOUT: %A.patt: %pattern_type = value_binding_pattern A [concrete = constants.%A.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Class.ref.loc9: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] // CHECK:STDOUT: %.loc9_11.1: type = splice_block %.loc9_11.2 [concrete = type] { @@ -83,7 +85,7 @@ var x: Class = {}; // CHECK:STDOUT: } // CHECK:STDOUT: %A: type = value_binding A, %Class.ref.loc9 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %B.patt: %pattern_type = value_binding_pattern B [concrete] +// CHECK:STDOUT: %B.patt: %pattern_type = value_binding_pattern B [concrete = constants.%B.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Class.ref.loc15: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] // CHECK:STDOUT: %.loc15_20.1: type = splice_block %.loc15_20.2 [concrete = type] { diff --git a/toolchain/check/testdata/class/field/compound_field.carbon b/toolchain/check/testdata/class/field/compound_field.carbon index 4fada03f53cd..8f3a66cfb3c1 100644 --- a/toolchain/check/testdata/class/field/compound_field.carbon +++ b/toolchain/check/testdata/class/field/compound_field.carbon @@ -60,7 +60,11 @@ fn AccessBaseIndirect(p: Derived*) -> i32* { // CHECK:STDOUT: %struct_type.base.d.e.26c: type = struct_type {.base: %Base, .d: %i32, .e: %i32} [concrete] // CHECK:STDOUT: %complete_type.9b3: = complete_type_witness %struct_type.base.d.e.26c [concrete] // CHECK:STDOUT: %pattern_type.746: type = pattern_type %Derived [concrete] +// CHECK:STDOUT: %d.param_patt: %pattern_type.746 = value_param_pattern [concrete] +// CHECK:STDOUT: %d.patt.fac: %pattern_type.746 = at_binding_pattern d, %d.param_patt [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %AccessDerived.type: type = fn_type @AccessDerived [concrete] // CHECK:STDOUT: %AccessDerived: %AccessDerived.type = struct_value () [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -80,9 +84,13 @@ fn AccessBaseIndirect(p: Derived*) -> i32* { // CHECK:STDOUT: %AccessBase: %AccessBase.type = struct_value () [concrete] // CHECK:STDOUT: %ptr.64c: type = ptr_type %Derived [concrete] // CHECK:STDOUT: %pattern_type.56c: type = pattern_type %ptr.64c [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.56c = value_param_pattern [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.56c = at_binding_pattern p, %p.param_patt [concrete] // CHECK:STDOUT: %ptr.d08: type = ptr_type %i32 [concrete] // CHECK:STDOUT: %.952: Core.Form = init_form %ptr.d08 [concrete] // CHECK:STDOUT: %pattern_type.f00: type = pattern_type %ptr.d08 [concrete] +// CHECK:STDOUT: %return.param_patt.7dd: %pattern_type.f00 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.dbe: %pattern_type.f00 = return_slot_pattern %return.param_patt.7dd, %ptr.d08 [concrete] // CHECK:STDOUT: %AccessDerivedIndirect.type: type = fn_type @AccessDerivedIndirect [concrete] // CHECK:STDOUT: %AccessDerivedIndirect: %AccessDerivedIndirect.type = struct_value () [concrete] // CHECK:STDOUT: %Copy.impl_witness.ce1: = impl_witness imports.%Copy.impl_witness_table.4f1, @ptr.as.Copy.impl(%i32) [concrete] @@ -125,10 +133,10 @@ fn AccessBaseIndirect(p: Derived*) -> i32* { // CHECK:STDOUT: %Base.decl: type = class_decl @Base [concrete = constants.%Base] {} {} // CHECK:STDOUT: %Derived.decl: type = class_decl @Derived [concrete = constants.%Derived] {} {} // CHECK:STDOUT: %AccessDerived.decl: %AccessDerived.type = fn_decl @AccessDerived [concrete = constants.%AccessDerived] { -// CHECK:STDOUT: %d.param_patt: %pattern_type.746 = value_param_pattern [concrete] -// CHECK:STDOUT: %d.patt: %pattern_type.746 = at_binding_pattern d, %d.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %d.param_patt: %pattern_type.746 = value_param_pattern [concrete = constants.%d.param_patt] +// CHECK:STDOUT: %d.patt: %pattern_type.746 = at_binding_pattern d, %d.param_patt [concrete = constants.%d.patt.fac] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc28: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -139,10 +147,10 @@ fn AccessBaseIndirect(p: Derived*) -> i32* { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %AccessBase.decl: %AccessBase.type = fn_decl @AccessBase [concrete = constants.%AccessBase] { -// CHECK:STDOUT: %d.param_patt: %pattern_type.746 = value_param_pattern [concrete] -// CHECK:STDOUT: %d.patt: %pattern_type.746 = at_binding_pattern d, %d.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %d.param_patt: %pattern_type.746 = value_param_pattern [concrete = constants.%d.param_patt] +// CHECK:STDOUT: %d.patt: %pattern_type.746 = at_binding_pattern d, %d.param_patt [concrete = constants.%d.patt.fac] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc32: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -153,10 +161,10 @@ fn AccessBaseIndirect(p: Derived*) -> i32* { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %AccessDerivedIndirect.decl: %AccessDerivedIndirect.type = fn_decl @AccessDerivedIndirect [concrete = constants.%AccessDerivedIndirect] { -// CHECK:STDOUT: %p.param_patt: %pattern_type.56c = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.56c = at_binding_pattern p, %p.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.f00 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.f00 = return_slot_pattern %return.param_patt, %ptr.loc36_45 [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.56c = value_param_pattern [concrete = constants.%p.param_patt] +// CHECK:STDOUT: %p.patt: %pattern_type.56c = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.f00 = out_param_pattern [concrete = constants.%return.param_patt.7dd] +// CHECK:STDOUT: %return.patt: %pattern_type.f00 = return_slot_pattern %return.param_patt, %ptr.loc36_45 [concrete = constants.%return.patt.dbe] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %ptr.loc36_45: type = ptr_type %i32 [concrete = constants.%ptr.d08] @@ -171,10 +179,10 @@ fn AccessBaseIndirect(p: Derived*) -> i32* { // CHECK:STDOUT: %return: ref %ptr.d08 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %AccessBaseIndirect.decl: %AccessBaseIndirect.type = fn_decl @AccessBaseIndirect [concrete = constants.%AccessBaseIndirect] { -// CHECK:STDOUT: %p.param_patt: %pattern_type.56c = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.56c = at_binding_pattern p, %p.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.f00 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.f00 = return_slot_pattern %return.param_patt, %ptr.loc40_42 [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.56c = value_param_pattern [concrete = constants.%p.param_patt] +// CHECK:STDOUT: %p.patt: %pattern_type.56c = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.f00 = out_param_pattern [concrete = constants.%return.param_patt.7dd] +// CHECK:STDOUT: %return.patt: %pattern_type.f00 = return_slot_pattern %return.param_patt, %ptr.loc40_42 [concrete = constants.%return.patt.dbe] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %ptr.loc40_42: type = ptr_type %i32 [concrete = constants.%ptr.d08] diff --git a/toolchain/check/testdata/class/field/field_access.carbon b/toolchain/check/testdata/class/field/field_access.carbon index 4257cd6095a2..f8ac7795fa3e 100644 --- a/toolchain/check/testdata/class/field/field_access.carbon +++ b/toolchain/check/testdata/class/field/field_access.carbon @@ -43,6 +43,8 @@ fn Run() { // CHECK:STDOUT: %Run.type: type = fn_type @Run [concrete] // CHECK:STDOUT: %Run: %Run.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.f15: type = pattern_type %Class [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.f15 = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.f15 = var_pattern %c.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.150: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] @@ -73,6 +75,8 @@ fn Run() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.9f3: = bound_method %int_2.ecc, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] // CHECK:STDOUT: %bound_method.3cb: = bound_method %int_2.ecc, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_2.295: %i32 = int_value 2 [concrete] +// CHECK:STDOUT: %cj.patt: %pattern_type.6b6 = ref_binding_pattern cj [concrete] +// CHECK:STDOUT: %cj.var_patt: %pattern_type.6b6 = var_pattern %cj.patt [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.ac8: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N) [symbolic] // CHECK:STDOUT: %Int.as.Copy.impl.Op.5e0: %Int.as.Copy.impl.Op.type.ac8 = struct_value () [symbolic] @@ -83,6 +87,8 @@ fn Run() { // CHECK:STDOUT: %Copy.WithSelf.Op.type.d09: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet) [concrete] // CHECK:STDOUT: %.7a6: type = fn_type_with_self_type %Copy.WithSelf.Op.type.d09, %Copy.facet [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.4f6, @Int.as.Copy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %ck.patt: %pattern_type.6b6 = ref_binding_pattern ck [concrete] +// CHECK:STDOUT: %ck.var_patt: %pattern_type.6b6 = var_pattern %ck.patt [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.2: type = fn_type @Destroy.Op.loc25_3.2 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.2: %Destroy.Op.type.1d8f74.2 = struct_value () [concrete] @@ -139,8 +145,8 @@ fn Run() { // CHECK:STDOUT: fn @Run() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.f15 = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.f15 = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.f15 = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type.f15 = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %Class = var %c.var_patt // CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%Class, (constants.%DefaultOrUnformed.impl_witness.4e8) [concrete = constants.%DefaultOrUnformed.facet] @@ -176,8 +182,8 @@ fn Run() { // CHECK:STDOUT: %.loc23_7: init %i32 = converted %int_2, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc23 [concrete = constants.%int_2.295] // CHECK:STDOUT: assign %.loc23_4, %.loc23_7 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %cj.patt: %pattern_type.6b6 = ref_binding_pattern cj [concrete] -// CHECK:STDOUT: %cj.var_patt: %pattern_type.6b6 = var_pattern %cj.patt [concrete] +// CHECK:STDOUT: %cj.patt: %pattern_type.6b6 = ref_binding_pattern cj [concrete = constants.%cj.patt] +// CHECK:STDOUT: %cj.var_patt: %pattern_type.6b6 = var_pattern %cj.patt [concrete = constants.%cj.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %cj.var: ref %i32 = var %cj.var_patt // CHECK:STDOUT: %c.ref.loc24: ref %Class = name_ref c, %c @@ -193,8 +199,8 @@ fn Run() { // CHECK:STDOUT: %i32.loc24: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %cj: ref %i32 = ref_binding cj, %cj.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %ck.patt: %pattern_type.6b6 = ref_binding_pattern ck [concrete] -// CHECK:STDOUT: %ck.var_patt: %pattern_type.6b6 = var_pattern %ck.patt [concrete] +// CHECK:STDOUT: %ck.patt: %pattern_type.6b6 = ref_binding_pattern ck [concrete = constants.%ck.patt] +// CHECK:STDOUT: %ck.var_patt: %pattern_type.6b6 = var_pattern %ck.patt [concrete = constants.%ck.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %ck.var: ref %i32 = var %ck.var_patt // CHECK:STDOUT: %c.ref.loc25: ref %Class = name_ref c, %c diff --git a/toolchain/check/testdata/class/field/field_access_in_value.carbon b/toolchain/check/testdata/class/field/field_access_in_value.carbon index f656950b0a47..47a279ccc778 100644 --- a/toolchain/check/testdata/class/field/field_access_in_value.carbon +++ b/toolchain/check/testdata/class/field/field_access_in_value.carbon @@ -44,6 +44,8 @@ fn Test() { // CHECK:STDOUT: %Test.type: type = fn_type @Test [concrete] // CHECK:STDOUT: %Test: %Test.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.f15: type = pattern_type %Class [concrete] +// CHECK:STDOUT: %cv.patt: %pattern_type.f15 = ref_binding_pattern cv [concrete] +// CHECK:STDOUT: %cv.var_patt: %pattern_type.f15 = var_pattern %cv.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.150: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] @@ -74,6 +76,9 @@ fn Test() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.9f3: = bound_method %int_2.ecc, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] // CHECK:STDOUT: %bound_method.3cb: = bound_method %int_2.ecc, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_2.295: %i32 = int_value 2 [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.f15 = value_binding_pattern c [concrete] +// CHECK:STDOUT: %cj.patt: %pattern_type.6b6 = ref_binding_pattern cj [concrete] +// CHECK:STDOUT: %cj.var_patt: %pattern_type.6b6 = var_pattern %cj.patt [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.ac8: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N) [symbolic] // CHECK:STDOUT: %Int.as.Copy.impl.Op.5e0: %Int.as.Copy.impl.Op.type.ac8 = struct_value () [symbolic] @@ -84,6 +89,8 @@ fn Test() { // CHECK:STDOUT: %Copy.WithSelf.Op.type.d09: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet) [concrete] // CHECK:STDOUT: %.7a6: type = fn_type_with_self_type %Copy.WithSelf.Op.type.d09, %Copy.facet [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.4f6, @Int.as.Copy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %ck.patt: %pattern_type.6b6 = ref_binding_pattern ck [concrete] +// CHECK:STDOUT: %ck.var_patt: %pattern_type.6b6 = var_pattern %ck.patt [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.2: type = fn_type @Destroy.Op.loc26_3.2 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.2: %Destroy.Op.type.1d8f74.2 = struct_value () [concrete] @@ -140,8 +147,8 @@ fn Test() { // CHECK:STDOUT: fn @Test() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %cv.patt: %pattern_type.f15 = ref_binding_pattern cv [concrete] -// CHECK:STDOUT: %cv.var_patt: %pattern_type.f15 = var_pattern %cv.patt [concrete] +// CHECK:STDOUT: %cv.patt: %pattern_type.f15 = ref_binding_pattern cv [concrete = constants.%cv.patt] +// CHECK:STDOUT: %cv.var_patt: %pattern_type.f15 = var_pattern %cv.patt [concrete = constants.%cv.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %cv.var: ref %Class = var %cv.var_patt // CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%Class, (constants.%DefaultOrUnformed.impl_witness.4e8) [concrete = constants.%DefaultOrUnformed.facet] @@ -177,15 +184,15 @@ fn Test() { // CHECK:STDOUT: %.loc23_8: init %i32 = converted %int_2, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc23 [concrete = constants.%int_2.295] // CHECK:STDOUT: assign %.loc23_5, %.loc23_8 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.f15 = value_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.f15 = value_binding_pattern c [concrete = constants.%c.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %cv.ref.loc24: ref %Class = name_ref cv, %cv -// CHECK:STDOUT: %Class.ref.loc24: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] // CHECK:STDOUT: %.loc24: %Class = acquire_value %cv.ref.loc24 +// CHECK:STDOUT: %Class.ref.loc24: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] // CHECK:STDOUT: %c: %Class = value_binding c, %.loc24 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %cj.patt: %pattern_type.6b6 = ref_binding_pattern cj [concrete] -// CHECK:STDOUT: %cj.var_patt: %pattern_type.6b6 = var_pattern %cj.patt [concrete] +// CHECK:STDOUT: %cj.patt: %pattern_type.6b6 = ref_binding_pattern cj [concrete = constants.%cj.patt] +// CHECK:STDOUT: %cj.var_patt: %pattern_type.6b6 = var_pattern %cj.patt [concrete = constants.%cj.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %cj.var: ref %i32 = var %cj.var_patt // CHECK:STDOUT: %c.ref.loc25: %Class = name_ref c, %c @@ -201,8 +208,8 @@ fn Test() { // CHECK:STDOUT: %i32.loc25: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %cj: ref %i32 = ref_binding cj, %cj.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %ck.patt: %pattern_type.6b6 = ref_binding_pattern ck [concrete] -// CHECK:STDOUT: %ck.var_patt: %pattern_type.6b6 = var_pattern %ck.patt [concrete] +// CHECK:STDOUT: %ck.patt: %pattern_type.6b6 = ref_binding_pattern ck [concrete = constants.%ck.patt] +// CHECK:STDOUT: %ck.var_patt: %pattern_type.6b6 = var_pattern %ck.patt [concrete = constants.%ck.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %ck.var: ref %i32 = var %ck.var_patt // CHECK:STDOUT: %c.ref.loc26: %Class = name_ref c, %c diff --git a/toolchain/check/testdata/class/field/field_initializer.carbon b/toolchain/check/testdata/class/field/field_initializer.carbon index 1e7c092daf00..bec27310a3d8 100644 --- a/toolchain/check/testdata/class/field/field_initializer.carbon +++ b/toolchain/check/testdata/class/field/field_initializer.carbon @@ -109,6 +109,8 @@ var C: Class = {}; // CHECK:STDOUT: %struct_type.field: type = struct_type {.field: %i32} [concrete] // CHECK:STDOUT: %complete_type.935: = complete_type_witness %struct_type.field [concrete] // CHECK:STDOUT: %pattern_type.f15: type = pattern_type %Class [concrete] +// CHECK:STDOUT: %C.patt: %pattern_type.f15 = ref_binding_pattern C [concrete] +// CHECK:STDOUT: %C.var_patt: %pattern_type.f15 = var_pattern %C.patt [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %Class.val: %Class = struct_value (%int_123.2bf) [concrete] @@ -122,8 +124,8 @@ var C: Class = {}; // CHECK:STDOUT: file { // CHECK:STDOUT: %Class.decl: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %C.patt: %pattern_type.f15 = ref_binding_pattern C [concrete] -// CHECK:STDOUT: %C.var_patt: %pattern_type.f15 = var_pattern %C.patt [concrete] +// CHECK:STDOUT: %C.patt: %pattern_type.f15 = ref_binding_pattern C [concrete = constants.%C.patt] +// CHECK:STDOUT: %C.var_patt: %pattern_type.f15 = var_pattern %C.patt [concrete = constants.%C.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %C.var: ref %Class = var %C.var_patt [concrete] // CHECK:STDOUT: %Class.ref: type = name_ref Class, %Class.decl [concrete = constants.%Class] @@ -131,7 +133,7 @@ var C: Class = {}; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Class { -// CHECK:STDOUT: %.loc5_12: %Class.elem = field_decl field, element0, initializer = inst640000D4 [concrete] +// CHECK:STDOUT: %.loc5_12: %Class.elem = field_decl field, element0, initializer = inst64000105 [concrete] // CHECK:STDOUT: %int_123: Core.IntLiteral = int_value 123 [concrete = constants.%int_123.fff] // CHECK:STDOUT: %impl.elem0: %.1c5 = impl_witness_access constants.%ImplicitAs.impl_witness.a23, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] // CHECK:STDOUT: %bound_method.loc5_20.1: = bound_method %int_123, %impl.elem0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] diff --git a/toolchain/check/testdata/class/field/static.carbon b/toolchain/check/testdata/class/field/static.carbon index 85b0595a3aba..1feba5ce694b 100644 --- a/toolchain/check/testdata/class/field/static.carbon +++ b/toolchain/check/testdata/class/field/static.carbon @@ -60,12 +60,16 @@ fn F() { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %static_field.patt: %pattern_type.6b6 = ref_binding_pattern static_field [concrete] +// CHECK:STDOUT: %static_field.var_patt: %pattern_type.6b6 = var_pattern %static_field.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.150: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.53a: %T.as.DefaultOrUnformed.impl.Op.type.150 = struct_value () [symbolic] // CHECK:STDOUT: %DefaultOrUnformed.impl_witness.e52: = impl_witness imports.%DefaultOrUnformed.impl_witness_table.374, @T.as.DefaultOrUnformed.impl(%i32) [concrete] // CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %i32, (%DefaultOrUnformed.impl_witness.e52) [concrete] +// CHECK:STDOUT: %static_field_with_init.patt: %pattern_type.6b6 = ref_binding_pattern static_field_with_init [concrete] +// CHECK:STDOUT: %static_field_with_init.var_patt: %pattern_type.6b6 = var_pattern %static_field_with_init.patt [concrete] // CHECK:STDOUT: %int_123.fff: Core.IntLiteral = int_value 123 [concrete] // CHECK:STDOUT: %ImplicitAs.type.914: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %To: Core.IntLiteral = symbolic_binding To, 0 [symbolic] @@ -105,15 +109,15 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %static_field.patt: %pattern_type.6b6 = ref_binding_pattern static_field [concrete] -// CHECK:STDOUT: %static_field.var_patt: %pattern_type.6b6 = var_pattern %static_field.patt [concrete] +// CHECK:STDOUT: %static_field.patt: %pattern_type.6b6 = ref_binding_pattern static_field [concrete = constants.%static_field.patt] +// CHECK:STDOUT: %static_field.var_patt: %pattern_type.6b6 = var_pattern %static_field.patt [concrete = constants.%static_field.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %static_field.var: ref %i32 = var %static_field.var_patt [concrete] // CHECK:STDOUT: %i32.loc5: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %static_field: ref %i32 = ref_binding static_field, %static_field.var [concrete = %static_field.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %static_field_with_init.patt: %pattern_type.6b6 = ref_binding_pattern static_field_with_init [concrete] -// CHECK:STDOUT: %static_field_with_init.var_patt: %pattern_type.6b6 = var_pattern %static_field_with_init.patt [concrete] +// CHECK:STDOUT: %static_field_with_init.patt: %pattern_type.6b6 = ref_binding_pattern static_field_with_init [concrete = constants.%static_field_with_init.patt] +// CHECK:STDOUT: %static_field_with_init.var_patt: %pattern_type.6b6 = var_pattern %static_field_with_init.patt [concrete = constants.%static_field_with_init.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %static_field_with_init.var: ref %i32 = var %static_field_with_init.var_patt [concrete] // CHECK:STDOUT: %i32.loc6: type = type_literal constants.%i32 [concrete = constants.%i32] diff --git a/toolchain/check/testdata/class/forward_declared.carbon b/toolchain/check/testdata/class/forward_declared.carbon index 1b915827cb96..143c76de5f76 100644 --- a/toolchain/check/testdata/class/forward_declared.carbon +++ b/toolchain/check/testdata/class/forward_declared.carbon @@ -22,7 +22,11 @@ fn F(p: Class*) -> Class* { return p; } // CHECK:STDOUT: %Class: type = class_type @Class [concrete] // CHECK:STDOUT: %ptr.7ee: type = ptr_type %Class [concrete] // CHECK:STDOUT: %pattern_type.8c5: type = pattern_type %ptr.7ee [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.8c5 = value_param_pattern [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.8c5 = at_binding_pattern p, %p.param_patt [concrete] // CHECK:STDOUT: %.90e: Core.Form = init_form %ptr.7ee [concrete] +// CHECK:STDOUT: %return.param_patt.14e: %pattern_type.8c5 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.7b1: %pattern_type.8c5 = return_slot_pattern %return.param_patt.14e, %ptr.7ee [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -58,10 +62,10 @@ fn F(p: Class*) -> Class* { return p; } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %p.param_patt: %pattern_type.8c5 = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.8c5 = at_binding_pattern p, %p.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.8c5 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.8c5 = return_slot_pattern %return.param_patt, %ptr.loc17_25 [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.8c5 = value_param_pattern [concrete = constants.%p.param_patt] +// CHECK:STDOUT: %p.patt: %pattern_type.8c5 = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.8c5 = out_param_pattern [concrete = constants.%return.param_patt.14e] +// CHECK:STDOUT: %return.patt: %pattern_type.8c5 = return_slot_pattern %return.param_patt, %ptr.loc17_25 [concrete = constants.%return.patt.7b1] // CHECK:STDOUT: } { // CHECK:STDOUT: %Class.ref.loc17_20: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] // CHECK:STDOUT: %ptr.loc17_25: type = ptr_type %Class.ref.loc17_20 [concrete = constants.%ptr.7ee] diff --git a/toolchain/check/testdata/class/generic/adapt.carbon b/toolchain/check/testdata/class/generic/adapt.carbon index 46f7d309f78f..68ef0de97f57 100644 --- a/toolchain/check/testdata/class/generic/adapt.carbon +++ b/toolchain/check/testdata/class/generic/adapt.carbon @@ -131,11 +131,14 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.d47: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.1d0: type = class_type @C, @C(%T.67d) [symbolic] // CHECK:STDOUT: %require_complete.944: = require_complete_type %T.67d [symbolic] +// CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T.67d [symbolic] +// CHECK:STDOUT: %x.patt.719: %pattern_type.51d = ref_binding_pattern x [symbolic] // CHECK:STDOUT: %C.elem.4d5: type = unbound_element_type %C.1d0, %T.67d [symbolic] // CHECK:STDOUT: %struct_type.x.0c5: type = struct_type {.x: %T.67d} [symbolic] // CHECK:STDOUT: %complete_type.735: = complete_type_witness %struct_type.x.0c5 [symbolic] @@ -148,12 +151,17 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %C.3b7: type = class_type @C, @C(%i32) [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %complete_type.f8a: = complete_type_witness %i32.builtin [concrete] +// CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %x.patt.29f: %pattern_type.6b6 = ref_binding_pattern x [concrete] // CHECK:STDOUT: %C.elem.29b: type = unbound_element_type %C.3b7, %i32 [concrete] // CHECK:STDOUT: %struct_type.x.a15: type = struct_type {.x: %i32} [concrete] // CHECK:STDOUT: %complete_type.0c6: = complete_type_witness %struct_type.x.a15 [concrete] // CHECK:STDOUT: %pattern_type.e90: type = pattern_type %Adapter [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.e90 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.e90 = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] -// CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %Access.type: type = fn_type @Access [concrete] // CHECK:STDOUT: %Access: %Access.type = struct_value () [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -190,7 +198,7 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc4_10.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_10.2 (constants.%T.patt.d47)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_13.1: type = splice_block %.loc4_13.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -200,10 +208,10 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Adapter.decl: type = class_decl @Adapter [concrete = constants.%Adapter] {} {} // CHECK:STDOUT: %Access.decl: %Access.type = fn_decl @Access [concrete = constants.%Access] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.e90 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.e90 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc12 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.e90 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.e90 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc12 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc12: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc12: Core.Form = init_form %i32.loc12 [concrete = constants.%.795] @@ -216,10 +224,13 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc4_10.2: type) { +// CHECK:STDOUT: %T.patt.loc4_10.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_10.2 (constants.%T.patt.d47)] // CHECK:STDOUT: %T.loc4_10.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_10.1 (constants.%T.67d)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc4_10.1 [symbolic = %require_complete (constants.%require_complete.944)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc4_10.1 [symbolic = %pattern_type (constants.%pattern_type.51d)] +// CHECK:STDOUT: %x.patt: @C.%pattern_type (%pattern_type.51d) = ref_binding_pattern x [symbolic = %x.patt (constants.%x.patt.719)] // CHECK:STDOUT: %C: type = class_type @C, @C(%T.loc4_10.1) [symbolic = %C (constants.%C.1d0)] // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %T.loc4_10.1 [symbolic = %C.elem (constants.%C.elem.4d5)] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: @C.%T.loc4_10.1 (%T.67d)} [symbolic = %struct_type.x (constants.%struct_type.x.0c5)] @@ -270,14 +281,18 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%T.67d) { +// CHECK:STDOUT: %T.patt.loc4_10.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc4_10.1 => constants.%T.67d // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%i32) { +// CHECK:STDOUT: %T.patt.loc4_10.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc4_10.1 => constants.%i32 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.f8a +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.6b6 +// CHECK:STDOUT: %x.patt => constants.%x.patt.29f // CHECK:STDOUT: %C => constants.%C.3b7 // CHECK:STDOUT: %C.elem => constants.%C.elem.29b // CHECK:STDOUT: %struct_type.x => constants.%struct_type.x.a15 @@ -301,15 +316,24 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %struct_type.x.0c5: type = struct_type {.x: %T.67d} [symbolic] // CHECK:STDOUT: %complete_type.735: = complete_type_witness %struct_type.x.0c5 [symbolic] // CHECK:STDOUT: %C.1d0: type = class_type @C, @C(%T.67d) [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.d47: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %C.elem.4d5: type = unbound_element_type %C.1d0, %T.67d [symbolic] +// CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T.67d [symbolic] +// CHECK:STDOUT: %x.patt.719: %pattern_type.51d = ref_binding_pattern x [symbolic] // CHECK:STDOUT: %require_complete.944: = require_complete_type %T.67d [symbolic] // CHECK:STDOUT: %C.3b7: type = class_type @C, @C(%i32) [concrete] // CHECK:STDOUT: %struct_type.x.a15: type = struct_type {.x: %i32} [concrete] // CHECK:STDOUT: %complete_type.0c6: = complete_type_witness %struct_type.x.a15 [concrete] // CHECK:STDOUT: %C.elem.29b: type = unbound_element_type %C.3b7, %i32 [concrete] -// CHECK:STDOUT: %pattern_type.e90: type = pattern_type %Adapter [concrete] -// CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %x.patt.29f: %pattern_type.6b6 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %pattern_type.e90: type = pattern_type %Adapter [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.e90 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.e90 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %ImportedAccess.type: type = fn_type @ImportedAccess [concrete] // CHECK:STDOUT: %ImportedAccess: %ImportedAccess.type = struct_value () [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -358,10 +382,10 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %ImportedAccess.decl: %ImportedAccess.type = fn_decl @ImportedAccess [concrete = constants.%ImportedAccess] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.e90 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.e90 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc6 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.e90 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.e90 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc6 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc6: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc6: Core.Form = init_form %i32.loc6 [concrete = constants.%.795] @@ -381,10 +405,13 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(imports.%Main.import_ref.b3b: type) [from "adapt_specific_type.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt.d47)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T.67d)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic = %require_complete (constants.%require_complete.944)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.51d)] +// CHECK:STDOUT: %x.patt: @C.%pattern_type (%pattern_type.51d) = ref_binding_pattern x [symbolic = %x.patt (constants.%x.patt.719)] // CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C.1d0)] // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %T [symbolic = %C.elem (constants.%C.elem.4d5)] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: @C.%T (%T.67d)} [symbolic = %struct_type.x (constants.%struct_type.x.0c5)] @@ -419,14 +446,18 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%T.67d) { +// CHECK:STDOUT: %T.patt => constants.%T.patt.d47 // CHECK:STDOUT: %T => constants.%T.67d // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%i32) { +// CHECK:STDOUT: %T.patt => constants.%T.patt.d47 // CHECK:STDOUT: %T => constants.%i32 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.f8a +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.6b6 +// CHECK:STDOUT: %x.patt => constants.%x.patt.29f // CHECK:STDOUT: %C => constants.%C.3b7 // CHECK:STDOUT: %C.elem => constants.%C.elem.29b // CHECK:STDOUT: %struct_type.x => constants.%struct_type.x.a15 @@ -439,11 +470,14 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.1d0: type = class_type @C, @C(%T) [symbolic] // CHECK:STDOUT: %require_complete.944: = require_complete_type %T [symbolic] +// CHECK:STDOUT: %pattern_type.51d1c4.1: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %x.patt.719: %pattern_type.51d1c4.1 = ref_binding_pattern x [symbolic] // CHECK:STDOUT: %C.elem.4d5: type = unbound_element_type %C.1d0, %T [symbolic] // CHECK:STDOUT: %struct_type.x.0c5: type = struct_type {.x: %T} [symbolic] // CHECK:STDOUT: %complete_type.735: = complete_type_witness %struct_type.x.0c5 [symbolic] @@ -455,12 +489,17 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %C.3b7: type = class_type @C, @C(%i32) [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %complete_type.f8a: = complete_type_witness %i32.builtin [concrete] +// CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %x.patt.29f: %pattern_type.6b6 = ref_binding_pattern x [concrete] // CHECK:STDOUT: %C.elem.29b: type = unbound_element_type %C.3b7, %i32 [concrete] // CHECK:STDOUT: %struct_type.x.a15: type = struct_type {.x: %i32} [concrete] // CHECK:STDOUT: %complete_type.0c6: = complete_type_witness %struct_type.x.a15 [concrete] // CHECK:STDOUT: %pattern_type.e90: type = pattern_type %Adapter [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.e90 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.e90 = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] -// CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %Access.type: type = fn_type @Access [concrete] // CHECK:STDOUT: %Access: %Access.type = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] @@ -487,7 +526,7 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc4_10.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_10.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_13.1: type = splice_block %.loc4_13.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -497,10 +536,10 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Adapter.decl: type = class_decl @Adapter [concrete = constants.%Adapter] {} {} // CHECK:STDOUT: %Access.decl: %Access.type = fn_decl @Access [concrete = constants.%Access] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.e90 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.e90 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.e90 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.e90 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc12: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -513,10 +552,13 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc4_10.2: type) { +// CHECK:STDOUT: %T.patt.loc4_10.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_10.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_10.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_10.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc4_10.1 [symbolic = %require_complete (constants.%require_complete.944)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc4_10.1 [symbolic = %pattern_type (constants.%pattern_type.51d1c4.1)] +// CHECK:STDOUT: %x.patt: @C.%pattern_type (%pattern_type.51d1c4.1) = ref_binding_pattern x [symbolic = %x.patt (constants.%x.patt.719)] // CHECK:STDOUT: %C: type = class_type @C, @C(%T.loc4_10.1) [symbolic = %C (constants.%C.1d0)] // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %T.loc4_10.1 [symbolic = %C.elem (constants.%C.elem.4d5)] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: @C.%T.loc4_10.1 (%T)} [symbolic = %struct_type.x (constants.%struct_type.x.0c5)] @@ -559,14 +601,18 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_10.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_10.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%i32) { +// CHECK:STDOUT: %T.patt.loc4_10.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_10.1 => constants.%i32 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.f8a +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.6b6 +// CHECK:STDOUT: %x.patt => constants.%x.patt.29f // CHECK:STDOUT: %C => constants.%C.3b7 // CHECK:STDOUT: %C.elem => constants.%C.elem.29b // CHECK:STDOUT: %struct_type.x => constants.%struct_type.x.a15 @@ -579,11 +625,14 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.1d0: type = class_type @C, @C(%T) [symbolic] // CHECK:STDOUT: %require_complete.944: = require_complete_type %T [symbolic] +// CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %x.patt.719: %pattern_type.51d = ref_binding_pattern x [symbolic] // CHECK:STDOUT: %C.elem.4d5: type = unbound_element_type %C.1d0, %T [symbolic] // CHECK:STDOUT: %struct_type.x.0c5: type = struct_type {.x: %T} [symbolic] // CHECK:STDOUT: %complete_type.735: = complete_type_witness %struct_type.x.0c5 [symbolic] @@ -595,6 +644,8 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %C.3b7: type = class_type @C, @C(%i32) [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %complete_type.f8a: = complete_type_witness %i32.builtin [concrete] +// CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %x.patt.29f: %pattern_type.6b6 = ref_binding_pattern x [concrete] // CHECK:STDOUT: %C.elem.29b: type = unbound_element_type %C.3b7, %i32 [concrete] // CHECK:STDOUT: %struct_type.x.a15: type = struct_type {.x: %i32} [concrete] // CHECK:STDOUT: %complete_type.0c6: = complete_type_witness %struct_type.x.a15 [concrete] @@ -617,7 +668,7 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc7_10.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_10.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc7_13.1: type = splice_block %.loc7_13.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -629,10 +680,13 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc7_10.2: type) { +// CHECK:STDOUT: %T.patt.loc7_10.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_10.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc7_10.1: type = symbolic_binding T, 0 [symbolic = %T.loc7_10.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc7_10.1 [symbolic = %require_complete (constants.%require_complete.944)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc7_10.1 [symbolic = %pattern_type (constants.%pattern_type.51d)] +// CHECK:STDOUT: %x.patt: @C.%pattern_type (%pattern_type.51d) = ref_binding_pattern x [symbolic = %x.patt (constants.%x.patt.719)] // CHECK:STDOUT: %C: type = class_type @C, @C(%T.loc7_10.1) [symbolic = %C (constants.%C.1d0)] // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %T.loc7_10.1 [symbolic = %C.elem (constants.%C.elem.4d5)] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: @C.%T.loc7_10.1 (%T)} [symbolic = %struct_type.x (constants.%struct_type.x.0c5)] @@ -665,14 +719,18 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%T) { +// CHECK:STDOUT: %T.patt.loc7_10.2 => constants.%T.patt // CHECK:STDOUT: %T.loc7_10.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%i32) { +// CHECK:STDOUT: %T.patt.loc7_10.2 => constants.%T.patt // CHECK:STDOUT: %T.loc7_10.1 => constants.%i32 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.f8a +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.6b6 +// CHECK:STDOUT: %x.patt => constants.%x.patt.29f // CHECK:STDOUT: %C => constants.%C.3b7 // CHECK:STDOUT: %C.elem => constants.%C.elem.29b // CHECK:STDOUT: %struct_type.x => constants.%struct_type.x.a15 @@ -693,15 +751,24 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %struct_type.x.0c5: type = struct_type {.x: %T} [symbolic] // CHECK:STDOUT: %complete_type.735: = complete_type_witness %struct_type.x.0c5 [symbolic] // CHECK:STDOUT: %C.1d0: type = class_type @C, @C(%T) [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %C.elem.4d5: type = unbound_element_type %C.1d0, %T [symbolic] +// CHECK:STDOUT: %pattern_type.51d1c4.1: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %x.patt.719: %pattern_type.51d1c4.1 = ref_binding_pattern x [symbolic] // CHECK:STDOUT: %require_complete.944: = require_complete_type %T [symbolic] // CHECK:STDOUT: %C.3b7: type = class_type @C, @C(%i32) [concrete] // CHECK:STDOUT: %struct_type.x.a15: type = struct_type {.x: %i32} [concrete] // CHECK:STDOUT: %complete_type.0c6: = complete_type_witness %struct_type.x.a15 [concrete] // CHECK:STDOUT: %C.elem.29b: type = unbound_element_type %C.3b7, %i32 [concrete] -// CHECK:STDOUT: %pattern_type.e90: type = pattern_type %Adapter [concrete] -// CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %x.patt.29f: %pattern_type.6b6 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %pattern_type.e90: type = pattern_type %Adapter [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.e90 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.e90 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %ImportedAccess.type: type = fn_type @ImportedAccess [concrete] // CHECK:STDOUT: %ImportedAccess: %ImportedAccess.type = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] @@ -739,10 +806,10 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %ImportedAccess.decl: %ImportedAccess.type = fn_decl @ImportedAccess [concrete = constants.%ImportedAccess] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.e90 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.e90 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.e90 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.e90 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc6: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -764,10 +831,13 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(imports.%Main.import_ref.b3b: type) [from "extend_adapt_specific_type_library.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic = %require_complete (constants.%require_complete.944)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.51d1c4.1)] +// CHECK:STDOUT: %x.patt: @C.%pattern_type (%pattern_type.51d1c4.1) = ref_binding_pattern x [symbolic = %x.patt (constants.%x.patt.719)] // CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C.1d0)] // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %T [symbolic = %C.elem (constants.%C.elem.4d5)] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: @C.%T (%T)} [symbolic = %struct_type.x (constants.%struct_type.x.0c5)] @@ -792,14 +862,18 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%i32) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%i32 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.f8a +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.6b6 +// CHECK:STDOUT: %x.patt => constants.%x.patt.29f // CHECK:STDOUT: %C => constants.%C.3b7 // CHECK:STDOUT: %C.elem => constants.%C.elem.29b // CHECK:STDOUT: %struct_type.x => constants.%struct_type.x.a15 @@ -812,6 +886,7 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.d47: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Adapter.type: type = generic_class_type @Adapter [concrete] // CHECK:STDOUT: %Adapter.generic: %Adapter.type = struct_value () [concrete] @@ -825,8 +900,12 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Adapter.0d1: type = class_type @Adapter, @Adapter(%i32) [concrete] // CHECK:STDOUT: %pattern_type.493: type = pattern_type %Adapter.0d1 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.493 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.493 = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %Convert.type: type = fn_type @Convert [concrete] // CHECK:STDOUT: %Convert: %Convert.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] @@ -865,7 +944,7 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Adapter.decl: %Adapter.type = class_decl @Adapter [concrete = constants.%Adapter.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc4_16.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_16.2 (constants.%T.patt.d47)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_19.1: type = splice_block %.loc4_19.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -874,10 +953,10 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %T.loc4_16.2: type = symbolic_binding T, 0 [symbolic = %T.loc4_16.1 (constants.%T.67d)] // CHECK:STDOUT: } // CHECK:STDOUT: %Convert.decl: %Convert.type = fn_decl @Convert [concrete = constants.%Convert] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.493 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.493 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc8_32 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.493 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.493 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc8_32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc8_32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc8_32: Core.Form = init_form %i32.loc8_32 [concrete = constants.%.795] @@ -894,6 +973,7 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Adapter(%T.loc4_16.2: type) { +// CHECK:STDOUT: %T.patt.loc4_16.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_16.2 (constants.%T.patt.d47)] // CHECK:STDOUT: %T.loc4_16.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_16.1 (constants.%T.67d)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -927,10 +1007,12 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Adapter(constants.%T.67d) { +// CHECK:STDOUT: %T.patt.loc4_16.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc4_16.1 => constants.%T.67d // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Adapter(constants.%i32) { +// CHECK:STDOUT: %T.patt.loc4_16.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc4_16.1 => constants.%i32 // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -945,6 +1027,8 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %Adapter.generic: %Adapter.type = struct_value () [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %complete_type.1aa: = complete_type_witness %T.67d [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.d47: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %require_complete.944: = require_complete_type %T.67d [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %Int.type: type = generic_class_type @Int [concrete] @@ -953,8 +1037,12 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Adapter.0d1: type = class_type @Adapter, @Adapter(%i32) [concrete] // CHECK:STDOUT: %pattern_type.493: type = pattern_type %Adapter.0d1 [concrete] +// CHECK:STDOUT: %a.param_patt.fdb: %pattern_type.493 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt.113: %pattern_type.493 = at_binding_pattern a, %a.param_patt.fdb [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %ImportedConvert.type: type = fn_type @ImportedConvert [concrete] // CHECK:STDOUT: %ImportedConvert: %ImportedConvert.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] @@ -976,6 +1064,8 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %complete_type.cdf: = complete_type_witness %struct_type.n [concrete] // CHECK:STDOUT: %Adapter.347: type = class_type @Adapter, @Adapter(%C) [concrete] // CHECK:STDOUT: %pattern_type.5db: type = pattern_type %Adapter.347 [concrete] +// CHECK:STDOUT: %a.param_patt.95b: %pattern_type.5db = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt.b1b: %pattern_type.5db = at_binding_pattern a, %a.param_patt.95b [concrete] // CHECK:STDOUT: %ImportedConvertLocal.type: type = fn_type @ImportedConvertLocal [concrete] // CHECK:STDOUT: %ImportedConvertLocal: %ImportedConvertLocal.type = struct_value () [concrete] // CHECK:STDOUT: %complete_type.c1f: = complete_type_witness %C [concrete] @@ -1011,10 +1101,10 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %ImportedConvert.decl: %ImportedConvert.type = fn_decl @ImportedConvert [concrete = constants.%ImportedConvert] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.493 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.493 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc6_40 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.493 = value_param_pattern [concrete = constants.%a.param_patt.fdb] +// CHECK:STDOUT: %a.patt: %pattern_type.493 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt.113] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc6_40 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc6_40: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc6_40: Core.Form = init_form %i32.loc6_40 [concrete = constants.%.795] @@ -1030,10 +1120,10 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %ImportedConvertLocal.decl: %ImportedConvertLocal.type = fn_decl @ImportedConvertLocal [concrete = constants.%ImportedConvertLocal] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.5db = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.5db = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.5db = value_param_pattern [concrete = constants.%a.param_patt.95b] +// CHECK:STDOUT: %a.patt: %pattern_type.5db = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt.b1b] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc14_43: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -1050,6 +1140,7 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Adapter(imports.%Main.import_ref.b3b: type) [from "adapt_generic_type.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt.d47)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T.67d)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1106,10 +1197,12 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Adapter(constants.%T.67d) { +// CHECK:STDOUT: %T.patt => constants.%T.patt.d47 // CHECK:STDOUT: %T => constants.%T.67d // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Adapter(constants.%i32) { +// CHECK:STDOUT: %T.patt => constants.%T.patt.d47 // CHECK:STDOUT: %T => constants.%i32 // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1118,6 +1211,7 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Adapter(constants.%C) { +// CHECK:STDOUT: %T.patt => constants.%T.patt.d47 // CHECK:STDOUT: %T => constants.%C // CHECK:STDOUT: // CHECK:STDOUT: !definition: diff --git a/toolchain/check/testdata/class/generic/base_is_generic.carbon b/toolchain/check/testdata/class/generic/base_is_generic.carbon index ac5972223c63..1c8d820d175a 100644 --- a/toolchain/check/testdata/class/generic/base_is_generic.carbon +++ b/toolchain/check/testdata/class/generic/base_is_generic.carbon @@ -95,11 +95,14 @@ fn H() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.d47: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Base.type: type = generic_class_type @Base [concrete] // CHECK:STDOUT: %Base.generic: %Base.type = struct_value () [concrete] // CHECK:STDOUT: %Base.798: type = class_type @Base, @Base(%T.67d) [symbolic] // CHECK:STDOUT: %require_complete.944: = require_complete_type %T.67d [symbolic] +// CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T.67d [symbolic] +// CHECK:STDOUT: %x.patt.719: %pattern_type.51d = ref_binding_pattern x [symbolic] // CHECK:STDOUT: %Base.elem.a3c: type = unbound_element_type %Base.798, %T.67d [symbolic] // CHECK:STDOUT: %struct_type.x.0c5: type = struct_type {.x: %T.67d} [symbolic] // CHECK:STDOUT: %complete_type.735: = complete_type_witness %struct_type.x.0c5 [symbolic] @@ -115,6 +118,8 @@ fn H() { // CHECK:STDOUT: %complete_type.620: = complete_type_witness %struct_type.y [concrete] // CHECK:STDOUT: %Derived: type = class_type @Derived [concrete] // CHECK:STDOUT: %Base.947: type = class_type @Base, @Base(%Param) [concrete] +// CHECK:STDOUT: %pattern_type.116: type = pattern_type %Param [concrete] +// CHECK:STDOUT: %x.patt.6d5: %pattern_type.116 = ref_binding_pattern x [concrete] // CHECK:STDOUT: %Base.elem.3f2: type = unbound_element_type %Base.947, %Param [concrete] // CHECK:STDOUT: %struct_type.x.301: type = struct_type {.x: %Param} [concrete] // CHECK:STDOUT: %complete_type.38f: = complete_type_witness %struct_type.x.301 [concrete] @@ -122,7 +127,11 @@ fn H() { // CHECK:STDOUT: %struct_type.base.a1b: type = struct_type {.base: %Base.947} [concrete] // CHECK:STDOUT: %complete_type.90c: = complete_type_witness %struct_type.base.a1b [concrete] // CHECK:STDOUT: %pattern_type.746: type = pattern_type %Derived [concrete] +// CHECK:STDOUT: %d.param_patt: %pattern_type.746 = value_param_pattern [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.746 = at_binding_pattern d, %d.param_patt [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %DoubleFieldAccess.type: type = fn_type @DoubleFieldAccess [concrete] // CHECK:STDOUT: %DoubleFieldAccess: %DoubleFieldAccess.type = struct_value () [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -160,7 +169,7 @@ fn H() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Base.decl: %Base.type = class_decl @Base [concrete = constants.%Base.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc4_18.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_18.2 (constants.%T.patt.d47)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_21.1: type = splice_block %.loc4_21.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -171,10 +180,10 @@ fn H() { // CHECK:STDOUT: %Param.decl: type = class_decl @Param [concrete = constants.%Param] {} {} // CHECK:STDOUT: %Derived.decl: type = class_decl @Derived [concrete = constants.%Derived] {} {} // CHECK:STDOUT: %DoubleFieldAccess.decl: %DoubleFieldAccess.type = fn_decl @DoubleFieldAccess [concrete = constants.%DoubleFieldAccess] { -// CHECK:STDOUT: %d.param_patt: %pattern_type.746 = value_param_pattern [concrete] -// CHECK:STDOUT: %d.patt: %pattern_type.746 = at_binding_pattern d, %d.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %d.param_patt: %pattern_type.746 = value_param_pattern [concrete = constants.%d.param_patt] +// CHECK:STDOUT: %d.patt: %pattern_type.746 = at_binding_pattern d, %d.param_patt [concrete = constants.%d.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc16: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -187,10 +196,13 @@ fn H() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Base(%T.loc4_18.2: type) { +// CHECK:STDOUT: %T.patt.loc4_18.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_18.2 (constants.%T.patt.d47)] // 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: %require_complete: = require_complete_type %T.loc4_18.1 [symbolic = %require_complete (constants.%require_complete.944)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc4_18.1 [symbolic = %pattern_type (constants.%pattern_type.51d)] +// CHECK:STDOUT: %x.patt: @Base.%pattern_type (%pattern_type.51d) = ref_binding_pattern x [symbolic = %x.patt (constants.%x.patt.719)] // CHECK:STDOUT: %Base: type = class_type @Base, @Base(%T.loc4_18.1) [symbolic = %Base (constants.%Base.798)] // CHECK:STDOUT: %Base.elem: type = unbound_element_type %Base, %T.loc4_18.1 [symbolic = %Base.elem (constants.%Base.elem.a3c)] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: @Base.%T.loc4_18.1 (%T.67d)} [symbolic = %struct_type.x (constants.%struct_type.x.0c5)] @@ -254,14 +266,18 @@ fn H() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Base(constants.%T.67d) { +// CHECK:STDOUT: %T.patt.loc4_18.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc4_18.1 => constants.%T.67d // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Base(constants.%Param) { +// CHECK:STDOUT: %T.patt.loc4_18.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc4_18.1 => constants.%Param // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.620 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.116 +// CHECK:STDOUT: %x.patt => constants.%x.patt.6d5 // CHECK:STDOUT: %Base => constants.%Base.947 // CHECK:STDOUT: %Base.elem => constants.%Base.elem.3f2 // CHECK:STDOUT: %struct_type.x => constants.%struct_type.x.301 @@ -284,17 +300,27 @@ fn H() { // CHECK:STDOUT: %struct_type.x.0c5: type = struct_type {.x: %T.67d} [symbolic] // CHECK:STDOUT: %complete_type.735: = complete_type_witness %struct_type.x.0c5 [symbolic] // CHECK:STDOUT: %Base.798: type = class_type @Base, @Base(%T.67d) [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.d47: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Base.elem.a3c: type = unbound_element_type %Base.798, %T.67d [symbolic] +// CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T.67d [symbolic] +// CHECK:STDOUT: %x.patt.719: %pattern_type.51d = ref_binding_pattern x [symbolic] // CHECK:STDOUT: %require_complete.944: = require_complete_type %T.67d [symbolic] // CHECK:STDOUT: %Base.947: type = class_type @Base, @Base(%Param) [concrete] // CHECK:STDOUT: %struct_type.x.301: type = struct_type {.x: %Param} [concrete] // CHECK:STDOUT: %complete_type.38f: = complete_type_witness %struct_type.x.301 [concrete] // CHECK:STDOUT: %Base.elem.3f2: type = unbound_element_type %Base.947, %Param [concrete] +// CHECK:STDOUT: %pattern_type.116: type = pattern_type %Param [concrete] +// CHECK:STDOUT: %x.patt.6d5: %pattern_type.116 = ref_binding_pattern x [concrete] // CHECK:STDOUT: %struct_type.base.a1b: type = struct_type {.base: %Base.947} [concrete] // CHECK:STDOUT: %complete_type.90c: = complete_type_witness %struct_type.base.a1b [concrete] // CHECK:STDOUT: %pattern_type.746: type = pattern_type %Derived [concrete] +// CHECK:STDOUT: %d.param_patt: %pattern_type.746 = value_param_pattern [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.746 = at_binding_pattern d, %d.param_patt [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %ImportedDoubleFieldAccess.type: type = fn_type @ImportedDoubleFieldAccess [concrete] // CHECK:STDOUT: %ImportedDoubleFieldAccess: %ImportedDoubleFieldAccess.type = struct_value () [concrete] // CHECK:STDOUT: %Param.elem: type = unbound_element_type %Param, %i32 [concrete] @@ -352,10 +378,10 @@ fn H() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %ImportedDoubleFieldAccess.decl: %ImportedDoubleFieldAccess.type = fn_decl @ImportedDoubleFieldAccess [concrete = constants.%ImportedDoubleFieldAccess] { -// CHECK:STDOUT: %d.param_patt: %pattern_type.746 = value_param_pattern [concrete] -// CHECK:STDOUT: %d.patt: %pattern_type.746 = at_binding_pattern d, %d.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %d.param_patt: %pattern_type.746 = value_param_pattern [concrete = constants.%d.param_patt] +// CHECK:STDOUT: %d.patt: %pattern_type.746 = at_binding_pattern d, %d.param_patt [concrete = constants.%d.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc6: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -386,10 +412,13 @@ fn H() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Base(imports.%Main.import_ref.b3b: type) [from "extend_generic_base.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt.d47)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T.67d)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic = %require_complete (constants.%require_complete.944)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.51d)] +// CHECK:STDOUT: %x.patt: @Base.%pattern_type (%pattern_type.51d) = ref_binding_pattern x [symbolic = %x.patt (constants.%x.patt.719)] // CHECK:STDOUT: %Base: type = class_type @Base, @Base(%T) [symbolic = %Base (constants.%Base.798)] // CHECK:STDOUT: %Base.elem: type = unbound_element_type %Base, %T [symbolic = %Base.elem (constants.%Base.elem.a3c)] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: @Base.%T (%T.67d)} [symbolic = %struct_type.x (constants.%struct_type.x.0c5)] @@ -423,14 +452,18 @@ fn H() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Base(constants.%T.67d) { +// CHECK:STDOUT: %T.patt => constants.%T.patt.d47 // CHECK:STDOUT: %T => constants.%T.67d // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Base(constants.%Param) { +// CHECK:STDOUT: %T.patt => constants.%T.patt.d47 // CHECK:STDOUT: %T => constants.%Param // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.620 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.116 +// CHECK:STDOUT: %x.patt => constants.%x.patt.6d5 // CHECK:STDOUT: %Base => constants.%Base.947 // CHECK:STDOUT: %Base.elem => constants.%Base.elem.3f2 // CHECK:STDOUT: %struct_type.x => constants.%struct_type.x.301 @@ -443,6 +476,7 @@ fn H() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] @@ -474,7 +508,7 @@ fn H() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc4_10.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_10.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_13.1: type = splice_block %.loc4_13.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -487,6 +521,7 @@ fn H() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc4_10.2: type) { +// CHECK:STDOUT: %T.patt.loc4_10.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_10.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_10.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_10.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -532,10 +567,12 @@ fn H() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_10.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_10.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%X) { +// CHECK:STDOUT: %T.patt.loc4_10.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_10.1 => constants.%X // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -548,18 +585,22 @@ fn H() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %U: type = symbolic_binding U, 0 [symbolic] // CHECK:STDOUT: %X.type: type = generic_class_type @X [concrete] // CHECK:STDOUT: %X.generic: %X.type = struct_value () [concrete] // CHECK:STDOUT: %X.da69a4.1: type = class_type @X, @X(%U) [symbolic] // CHECK:STDOUT: %.184: Core.Form = init_form %U [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %U [symbolic] +// CHECK:STDOUT: %return.param_patt.41d: %pattern_type.51d = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.b39: %pattern_type.51d = return_slot_pattern %return.param_patt.41d, %U [symbolic] // CHECK:STDOUT: %X.G.type.4063b8.1: type = fn_type @X.G, @X(%U) [symbolic] // CHECK:STDOUT: %X.G.ff3d53.1: %X.G.type.4063b8.1 = struct_value () [symbolic] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %require_complete.944: = require_complete_type %U [symbolic] // CHECK:STDOUT: %X.G.specific_fn.196: = specific_function %X.G.ff3d53.1, @X.G(%U) [symbolic] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] @@ -580,6 +621,7 @@ fn H() { // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %complete_type.f8a: = complete_type_witness %i32.builtin [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %i.patt: %pattern_type.6b6 = value_binding_pattern i [concrete] // CHECK:STDOUT: %C.3b7: type = class_type @C, @C(%i32) [concrete] // CHECK:STDOUT: %X.c03: type = class_type @X, @X(%i32) [concrete] // CHECK:STDOUT: %X.G.type.aea: type = fn_type @X.G, @X(%i32) [concrete] @@ -588,6 +630,8 @@ fn H() { // CHECK:STDOUT: %struct_type.base.013: type = struct_type {.base: %X.c03} [concrete] // CHECK:STDOUT: %complete_type.3c0: = complete_type_witness %struct_type.base.013 [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %X.G.specific_fn.2b6: = specific_function %X.G.df3, @X.G(%i32) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -609,7 +653,7 @@ fn H() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %X.decl: %X.type = class_decl @X [concrete = constants.%X.generic] { -// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [concrete] +// CHECK:STDOUT: %U.patt.loc4_15.1: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc4_15.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_18.1: type = splice_block %.loc4_18.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -618,7 +662,7 @@ fn H() { // CHECK:STDOUT: %U.loc4_15.2: type = symbolic_binding U, 0 [symbolic = %U.loc4_15.1 (constants.%U)] // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc8_10.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_10.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8_13.1: type = splice_block %.loc8_13.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -630,6 +674,7 @@ fn H() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @X(%U.loc4_15.2: type) { +// CHECK:STDOUT: %U.patt.loc4_15.2: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc4_15.2 (constants.%U.patt)] // CHECK:STDOUT: %U.loc4_15.1: type = symbolic_binding U, 0 [symbolic = %U.loc4_15.1 (constants.%U)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -638,8 +683,8 @@ fn H() { // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %X.G.decl: @X.%X.G.type (%X.G.type.4063b8.1) = fn_decl @X.G [symbolic = @X.%X.G (constants.%X.G.ff3d53.1)] { -// CHECK:STDOUT: %return.param_patt: @X.G.%pattern_type (%pattern_type.51d) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @X.G.%pattern_type (%pattern_type.51d) = return_slot_pattern %return.param_patt, %U.ref [concrete] +// CHECK:STDOUT: %return.param_patt.loc5_13.1: @X.G.%pattern_type (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt.loc5_13.2 (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt.loc5_10.1: @X.G.%pattern_type (%pattern_type.51d) = return_slot_pattern %return.param_patt.loc5_13.1, %U.ref [symbolic = %return.patt.loc5_10.2 (constants.%return.patt.b39)] // CHECK:STDOUT: } { // CHECK:STDOUT: %U.ref: type = name_ref U, @X.%U.loc4_15.2 [symbolic = %U (constants.%U)] // CHECK:STDOUT: %.loc5_13.3: Core.Form = init_form %U.ref [symbolic = %.loc5_13.2 (constants.%.184)] @@ -657,6 +702,7 @@ fn H() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc8_10.2: type) { +// CHECK:STDOUT: %T.patt.loc8_10.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_10.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc8_10.1: type = symbolic_binding T, 0 [symbolic = %T.loc8_10.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -689,6 +735,8 @@ fn H() { // CHECK:STDOUT: %U: type = symbolic_binding U, 0 [symbolic = %U (constants.%U)] // CHECK:STDOUT: %.loc5_13.2: Core.Form = init_form %U [symbolic = %.loc5_13.2 (constants.%.184)] // CHECK:STDOUT: %pattern_type: type = pattern_type %U [symbolic = %pattern_type (constants.%pattern_type.51d)] +// CHECK:STDOUT: %return.param_patt.loc5_13.2: @X.G.%pattern_type (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt.loc5_13.2 (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt.loc5_10.2: @X.G.%pattern_type (%pattern_type.51d) = return_slot_pattern %return.param_patt.loc5_13.2, %U [symbolic = %return.patt.loc5_10.2 (constants.%return.patt.b39)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %U [symbolic = %require_complete (constants.%require_complete.944)] @@ -710,7 +758,7 @@ fn H() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %i.patt: %pattern_type.6b6 = value_binding_pattern i [concrete] +// CHECK:STDOUT: %i.patt: %pattern_type.6b6 = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %C.ref: %C.type = name_ref C, file.%C.decl [concrete = constants.%C.generic] // CHECK:STDOUT: %i32.loc13_25: type = type_literal constants.%i32 [concrete = constants.%i32] @@ -719,14 +767,15 @@ fn H() { // CHECK:STDOUT: %G.ref: %X.G.type.aea = name_ref G, %.loc13_29 [concrete = constants.%X.G.df3] // CHECK:STDOUT: %X.G.specific_fn: = specific_function %G.ref, @X.G(constants.%i32) [concrete = constants.%X.G.specific_fn.2b6] // CHECK:STDOUT: %X.G.call: init %i32 = call %X.G.specific_fn() -// CHECK:STDOUT: %i32.loc13_17: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc13_32.1: %i32 = value_of_initializer %X.G.call // CHECK:STDOUT: %.loc13_32.2: %i32 = converted %X.G.call, %.loc13_32.1 +// CHECK:STDOUT: %i32.loc13_17: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %i: %i32 = value_binding i, %.loc13_32.2 // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @X(constants.%U) { +// CHECK:STDOUT: %U.patt.loc4_15.2 => constants.%U.patt // CHECK:STDOUT: %U.loc4_15.1 => constants.%U // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -738,6 +787,8 @@ fn H() { // CHECK:STDOUT: %U => constants.%U // CHECK:STDOUT: %.loc5_13.2 => constants.%.184 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d +// CHECK:STDOUT: %return.param_patt.loc5_13.2 => constants.%return.param_patt.41d +// CHECK:STDOUT: %return.patt.loc5_10.2 => constants.%return.patt.b39 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.944 @@ -747,10 +798,12 @@ fn H() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%T) { +// CHECK:STDOUT: %T.patt.loc8_10.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_10.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @X(constants.%T) { +// CHECK:STDOUT: %U.patt.loc4_15.2 => constants.%U.patt // CHECK:STDOUT: %U.loc4_15.1 => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -759,6 +812,7 @@ fn H() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%i32) { +// CHECK:STDOUT: %T.patt.loc8_10.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_10.1 => constants.%i32 // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -771,6 +825,7 @@ fn H() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @X(constants.%i32) { +// CHECK:STDOUT: %U.patt.loc4_15.2 => constants.%U.patt // CHECK:STDOUT: %U.loc4_15.1 => constants.%i32 // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -782,6 +837,8 @@ fn H() { // CHECK:STDOUT: %U => constants.%i32 // CHECK:STDOUT: %.loc5_13.2 => constants.%.795 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.6b6 +// CHECK:STDOUT: %return.param_patt.loc5_13.2 => constants.%return.param_patt.a9a +// CHECK:STDOUT: %return.patt.loc5_10.2 => constants.%return.patt.e1b // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.f8a @@ -802,6 +859,7 @@ fn H() { // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %complete_type.f8a: = complete_type_witness %i32.builtin [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %j.patt: %pattern_type.6b6 = value_binding_pattern j [concrete] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] @@ -811,6 +869,10 @@ fn H() { // CHECK:STDOUT: %X.G.type.4063b8.1: type = fn_type @X.G, @X(%U) [symbolic] // CHECK:STDOUT: %X.G.ff3d53.1: %X.G.type.4063b8.1 = struct_value () [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %U [symbolic] +// CHECK:STDOUT: %return.param_patt.41d: %pattern_type.51d = out_param_pattern [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] +// CHECK:STDOUT: %return.patt.c39: %pattern_type.51d = return_slot_pattern %return.param_patt.41d, invalid [symbolic] // CHECK:STDOUT: %.184: Core.Form = init_form %U [symbolic] // CHECK:STDOUT: %X.G.specific_fn.196: = specific_function %X.G.ff3d53.1, @X.G(%U) [symbolic] // CHECK:STDOUT: %require_complete.944: = require_complete_type %U [symbolic] @@ -818,6 +880,7 @@ fn H() { // CHECK:STDOUT: %X.G.type.4063b8.2: type = fn_type @X.G, @X(%T) [symbolic] // CHECK:STDOUT: %X.G.ff3d53.2: %X.G.type.4063b8.2 = struct_value () [symbolic] // CHECK:STDOUT: %C.1d0: type = class_type @C, @C(%T) [symbolic] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %C.elem.bbb: type = unbound_element_type %C.1d0, %X.da69a4.2 [symbolic] // CHECK:STDOUT: %struct_type.base.8ee: type = struct_type {.base: %X.da69a4.2} [symbolic] // CHECK:STDOUT: %complete_type.584: = complete_type_witness %struct_type.base.8ee [symbolic] @@ -830,6 +893,8 @@ fn H() { // CHECK:STDOUT: %struct_type.base.013: type = struct_type {.base: %X.c03} [concrete] // CHECK:STDOUT: %complete_type.3c0: = complete_type_witness %struct_type.base.013 [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.0bc: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, invalid [concrete] // CHECK:STDOUT: %X.G.specific_fn.2b6: = specific_function %X.G.df3, @X.G(%i32) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -869,6 +934,7 @@ fn H() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(imports.%Main.import_ref.b3bc94.3: type) [from "extend_generic_symbolic_base.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -891,6 +957,7 @@ fn H() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @X(imports.%Main.import_ref.b3bc94.2: type) [from "extend_generic_symbolic_base.carbon"] { +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt (constants.%U.patt)] // CHECK:STDOUT: %U: type = symbolic_binding U, 0 [symbolic = %U (constants.%U)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -909,7 +976,7 @@ fn H() { // CHECK:STDOUT: fn @H() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %j.patt: %pattern_type.6b6 = value_binding_pattern j [concrete] +// CHECK:STDOUT: %j.patt: %pattern_type.6b6 = value_binding_pattern j [concrete = constants.%j.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %C.ref: %C.type = name_ref C, imports.%Main.C [concrete = constants.%C.generic] // CHECK:STDOUT: %i32.loc7_25: type = type_literal constants.%i32 [concrete = constants.%i32] @@ -918,9 +985,9 @@ fn H() { // CHECK:STDOUT: %G.ref: %X.G.type.aea = name_ref G, %.loc7_29 [concrete = constants.%X.G.df3] // CHECK:STDOUT: %X.G.specific_fn: = specific_function %G.ref, @X.G(constants.%i32) [concrete = constants.%X.G.specific_fn.2b6] // CHECK:STDOUT: %X.G.call: init %i32 = call %X.G.specific_fn() -// CHECK:STDOUT: %i32.loc7_17: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc7_32.1: %i32 = value_of_initializer %X.G.call // CHECK:STDOUT: %.loc7_32.2: %i32 = converted %X.G.call, %.loc7_32.1 +// CHECK:STDOUT: %i32.loc7_17: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %j: %i32 = value_binding j, %.loc7_32.2 // CHECK:STDOUT: return // CHECK:STDOUT: } @@ -929,6 +996,8 @@ fn H() { // CHECK:STDOUT: %U: type = symbolic_binding U, 0 [symbolic = %U (constants.%U)] // CHECK:STDOUT: %.1: Core.Form = init_form %U [symbolic = %.1 (constants.%.184)] // CHECK:STDOUT: %pattern_type: type = pattern_type %U [symbolic = %pattern_type (constants.%pattern_type.51d)] +// CHECK:STDOUT: %return.param_patt: @X.G.%pattern_type (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt: @X.G.%pattern_type (%pattern_type.51d) = return_slot_pattern %return.param_patt, invalid [symbolic = %return.patt (constants.%return.patt.c39)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %U [symbolic = %require_complete (constants.%require_complete.944)] @@ -940,6 +1009,7 @@ fn H() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @X(constants.%U) { +// CHECK:STDOUT: %U.patt => constants.%U.patt // CHECK:STDOUT: %U => constants.%U // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -951,6 +1021,8 @@ fn H() { // CHECK:STDOUT: %U => constants.%U // CHECK:STDOUT: %.1 => constants.%.184 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d +// CHECK:STDOUT: %return.param_patt => constants.%return.param_patt.41d +// CHECK:STDOUT: %return.patt => constants.%return.patt.c39 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.944 @@ -960,6 +1032,7 @@ fn H() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @X(constants.%T) { +// CHECK:STDOUT: %U.patt => constants.%U.patt // CHECK:STDOUT: %U => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -968,10 +1041,12 @@ fn H() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%i32) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%i32 // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -984,6 +1059,7 @@ fn H() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @X(constants.%i32) { +// CHECK:STDOUT: %U.patt => constants.%U.patt // CHECK:STDOUT: %U => constants.%i32 // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -995,6 +1071,8 @@ fn H() { // CHECK:STDOUT: %U => constants.%i32 // CHECK:STDOUT: %.1 => constants.%.795 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.6b6 +// CHECK:STDOUT: %return.param_patt => constants.%return.param_patt.a9a +// CHECK:STDOUT: %return.patt => constants.%return.patt.0bc // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.f8a diff --git a/toolchain/check/testdata/class/generic/basic.carbon b/toolchain/check/testdata/class/generic/basic.carbon index 5debf894e111..96df2a23e2fb 100644 --- a/toolchain/check/testdata/class/generic/basic.carbon +++ b/toolchain/check/testdata/class/generic/basic.carbon @@ -38,22 +38,32 @@ class Declaration(T:! type); // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %pattern_type.e81: type = pattern_type %Copy.type [concrete] +// CHECK:STDOUT: %T.patt.fe6: %pattern_type.e81 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.f84: %Copy.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Class.type: type = generic_class_type @Class [concrete] // CHECK:STDOUT: %Class.generic: %Class.type = struct_value () [concrete] // CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T.f84) [symbolic] // CHECK:STDOUT: %pattern_type.e18: type = pattern_type %Class [symbolic] +// CHECK:STDOUT: %self.param_patt.f0d: %pattern_type.e18 = ref_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.282: %pattern_type.e18 = at_binding_pattern self, %self.param_patt.f0d [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T.f84 [symbolic] // CHECK:STDOUT: %ptr.215: type = ptr_type %T.as_type [symbolic] // CHECK:STDOUT: %.4fb: Core.Form = init_form %ptr.215 [symbolic] // CHECK:STDOUT: %pattern_type.d5b: type = pattern_type %ptr.215 [symbolic] +// CHECK:STDOUT: %return.param_patt.4df: %pattern_type.d5b = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.c21: %pattern_type.d5b = return_slot_pattern %return.param_patt.4df, %ptr.215 [symbolic] // CHECK:STDOUT: %Class.GetAddr.type: type = fn_type @Class.GetAddr, @Class(%T.f84) [symbolic] // CHECK:STDOUT: %Class.GetAddr: %Class.GetAddr.type = struct_value () [symbolic] +// CHECK:STDOUT: %self.param_patt.aaa: %pattern_type.e18 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.d8a: %pattern_type.e18 = at_binding_pattern self, %self.param_patt.aaa [symbolic] // CHECK:STDOUT: %.1ce700.2: Core.Form = init_form %T.as_type [symbolic] // CHECK:STDOUT: %pattern_type.2c66b4.2: type = pattern_type %T.as_type [symbolic] +// CHECK:STDOUT: %return.param_patt.bf4475.2: %pattern_type.2c66b4.2 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.f44: %pattern_type.2c66b4.2 = return_slot_pattern %return.param_patt.bf4475.2, %T.as_type [symbolic] // CHECK:STDOUT: %Class.GetValue.type: type = fn_type @Class.GetValue, @Class(%T.f84) [symbolic] // CHECK:STDOUT: %Class.GetValue: %Class.GetValue.type = struct_value () [symbolic] // CHECK:STDOUT: %require_complete.d83: = require_complete_type %T.as_type [symbolic] +// CHECK:STDOUT: %k.patt: %pattern_type.2c66b4.2 = ref_binding_pattern k [symbolic] // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class, %T.as_type [symbolic] // CHECK:STDOUT: %struct_type.k: type = struct_type {.k: %T.as_type} [symbolic] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.k [symbolic] @@ -66,6 +76,7 @@ class Declaration(T:! type); // CHECK:STDOUT: %specific_impl_fn.e2a: = specific_impl_function %impl.elem0.bd2, @Copy.WithSelf.Op(%T.f84) [symbolic] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.d47: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Copy.lookup_impl_witness.cf6: = lookup_impl_witness %ptr.215, @Copy [symbolic] // CHECK:STDOUT: %.a33: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.as_type) [symbolic] // CHECK:STDOUT: %Copy.facet: %Copy.type = facet_value %ptr.215, (%Copy.lookup_impl_witness.cf6) [symbolic] @@ -88,7 +99,7 @@ class Declaration(T:! type); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %Class.decl: %Class.type = class_decl @Class [concrete = constants.%Class.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.e81 = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc5_14.1: %pattern_type.e81 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_14.2 (constants.%T.patt.fe6)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc5: type = splice_block %Copy.ref [concrete = constants.%Copy.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -98,7 +109,7 @@ class Declaration(T:! type); // CHECK:STDOUT: %T.loc5_14.2: %Copy.type = symbolic_binding T, 0 [symbolic = %T.loc5_14.1 (constants.%T.f84)] // CHECK:STDOUT: } // CHECK:STDOUT: %Declaration.decl: %Declaration.type = class_decl @Declaration [concrete = constants.%Declaration.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc17_20.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc17_20.2 (constants.%T.patt.d47)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc17_23.1: type = splice_block %.loc17_23.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -109,6 +120,7 @@ class Declaration(T:! type); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%T.loc5_14.2: %Copy.type) { +// CHECK:STDOUT: %T.patt.loc5_14.2: %pattern_type.e81 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_14.2 (constants.%T.patt.fe6)] // CHECK:STDOUT: %T.loc5_14.1: %Copy.type = symbolic_binding T, 0 [symbolic = %T.loc5_14.1 (constants.%T.f84)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -118,6 +130,8 @@ class Declaration(T:! type); // CHECK:STDOUT: %Class.GetValue: @Class.%Class.GetValue.type (%Class.GetValue.type) = struct_value () [symbolic = %Class.GetValue (constants.%Class.GetValue)] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T.loc5_14.1 [symbolic = %T.as_type (constants.%T.as_type)] // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type [symbolic = %require_complete (constants.%require_complete.d83)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type [symbolic = %pattern_type (constants.%pattern_type.2c66b4.2)] +// CHECK:STDOUT: %k.patt: @Class.%pattern_type (%pattern_type.2c66b4.2) = ref_binding_pattern k [symbolic = %k.patt (constants.%k.patt)] // CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T.loc5_14.1) [symbolic = %Class (constants.%Class)] // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class, %T.as_type [symbolic = %Class.elem (constants.%Class.elem)] // CHECK:STDOUT: %struct_type.k: type = struct_type {.k: @Class.%T.as_type (%T.as_type)} [symbolic = %struct_type.k (constants.%struct_type.k)] @@ -125,10 +139,10 @@ class Declaration(T:! type); // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %Class.GetAddr.decl: @Class.%Class.GetAddr.type (%Class.GetAddr.type) = fn_decl @Class.GetAddr [symbolic = @Class.%Class.GetAddr (constants.%Class.GetAddr)] { -// CHECK:STDOUT: %self.param_patt: @Class.GetAddr.%pattern_type.loc6_18 (%pattern_type.e18) = ref_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @Class.GetAddr.%pattern_type.loc6_18 (%pattern_type.e18) = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @Class.GetAddr.%pattern_type.loc6_28 (%pattern_type.d5b) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @Class.GetAddr.%pattern_type.loc6_28 (%pattern_type.d5b) = return_slot_pattern %return.param_patt, %ptr.loc6_28.2 [concrete] +// CHECK:STDOUT: %self.param_patt.loc6_18.1: @Class.GetAddr.%pattern_type.loc6_18 (%pattern_type.e18) = ref_param_pattern [symbolic = %self.param_patt.loc6_18.2 (constants.%self.param_patt.f0d)] +// CHECK:STDOUT: %self.patt.loc6_18.1: @Class.GetAddr.%pattern_type.loc6_18 (%pattern_type.e18) = at_binding_pattern self, %self.param_patt.loc6_18.1 [symbolic = %self.patt.loc6_18.2 (constants.%self.patt.282)] +// CHECK:STDOUT: %return.param_patt.loc6_28.1: @Class.GetAddr.%pattern_type.loc6_28 (%pattern_type.d5b) = out_param_pattern [symbolic = %return.param_patt.loc6_28.2 (constants.%return.param_patt.4df)] +// CHECK:STDOUT: %return.patt.loc6_24.1: @Class.GetAddr.%pattern_type.loc6_28 (%pattern_type.d5b) = return_slot_pattern %return.param_patt.loc6_28.1, %ptr.loc6_28.2 [symbolic = %return.patt.loc6_24.2 (constants.%return.patt.c21)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: %Copy.type = name_ref T, @Class.%T.loc5_14.2 [symbolic = %T (constants.%T.f84)] // CHECK:STDOUT: %T.as_type.loc6_28.2: type = facet_access_type %T.ref [symbolic = %T.as_type.loc6_28.1 (constants.%T.as_type)] @@ -145,10 +159,10 @@ class Declaration(T:! type); // CHECK:STDOUT: %return: ref @Class.GetAddr.%ptr.loc6_28.1 (%ptr.215) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Class.GetValue.decl: @Class.%Class.GetValue.type (%Class.GetValue.type) = fn_decl @Class.GetValue [symbolic = @Class.%Class.GetValue (constants.%Class.GetValue)] { -// CHECK:STDOUT: %self.param_patt: @Class.GetValue.%pattern_type.loc10_15 (%pattern_type.e18) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @Class.GetValue.%pattern_type.loc10_15 (%pattern_type.e18) = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @Class.GetValue.%pattern_type.loc10_24 (%pattern_type.2c66b4.2) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @Class.GetValue.%pattern_type.loc10_24 (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt, %.loc10_24.3 [concrete] +// CHECK:STDOUT: %self.param_patt.loc10_15.1: @Class.GetValue.%pattern_type.loc10_15 (%pattern_type.e18) = value_param_pattern [symbolic = %self.param_patt.loc10_15.2 (constants.%self.param_patt.aaa)] +// CHECK:STDOUT: %self.patt.loc10_15.1: @Class.GetValue.%pattern_type.loc10_15 (%pattern_type.e18) = at_binding_pattern self, %self.param_patt.loc10_15.1 [symbolic = %self.patt.loc10_15.2 (constants.%self.patt.d8a)] +// CHECK:STDOUT: %return.param_patt.loc10_24.1: @Class.GetValue.%pattern_type.loc10_24 (%pattern_type.2c66b4.2) = out_param_pattern [symbolic = %return.param_patt.loc10_24.2 (constants.%return.param_patt.bf4475.2)] +// CHECK:STDOUT: %return.patt.loc10_21.1: @Class.GetValue.%pattern_type.loc10_24 (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt.loc10_24.1, %.loc10_24.3 [symbolic = %return.patt.loc10_21.2 (constants.%return.patt.f44)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: %Copy.type = name_ref T, @Class.%T.loc5_14.2 [symbolic = %T (constants.%T.f84)] // CHECK:STDOUT: %T.as_type.loc10_24.2: type = facet_access_type %T.ref [symbolic = %T.as_type.loc10_24.1 (constants.%T.as_type)] @@ -177,6 +191,7 @@ class Declaration(T:! type); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Declaration(%T.loc17_20.2: type) { +// CHECK:STDOUT: %T.patt.loc17_20.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc17_20.2 (constants.%T.patt.d47)] // CHECK:STDOUT: %T.loc17_20.1: type = symbolic_binding T, 0 [symbolic = %T.loc17_20.1 (constants.%T.67d)] // CHECK:STDOUT: // CHECK:STDOUT: class; @@ -186,22 +201,26 @@ class Declaration(T:! type); // CHECK:STDOUT: %T: %Copy.type = symbolic_binding T, 0 [symbolic = %T (constants.%T.f84)] // CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T) [symbolic = %Class (constants.%Class)] // CHECK:STDOUT: %pattern_type.loc6_18: type = pattern_type %Class [symbolic = %pattern_type.loc6_18 (constants.%pattern_type.e18)] +// CHECK:STDOUT: %self.param_patt.loc6_18.2: @Class.GetAddr.%pattern_type.loc6_18 (%pattern_type.e18) = ref_param_pattern [symbolic = %self.param_patt.loc6_18.2 (constants.%self.param_patt.f0d)] +// CHECK:STDOUT: %self.patt.loc6_18.2: @Class.GetAddr.%pattern_type.loc6_18 (%pattern_type.e18) = at_binding_pattern self, %self.param_patt.loc6_18.2 [symbolic = %self.patt.loc6_18.2 (constants.%self.patt.282)] // CHECK:STDOUT: %T.as_type.loc6_28.1: type = facet_access_type %T [symbolic = %T.as_type.loc6_28.1 (constants.%T.as_type)] // CHECK:STDOUT: %ptr.loc6_28.1: type = ptr_type %T.as_type.loc6_28.1 [symbolic = %ptr.loc6_28.1 (constants.%ptr.215)] // CHECK:STDOUT: %.loc6_28.1: Core.Form = init_form %ptr.loc6_28.1 [symbolic = %.loc6_28.1 (constants.%.4fb)] // CHECK:STDOUT: %pattern_type.loc6_28: type = pattern_type %ptr.loc6_28.1 [symbolic = %pattern_type.loc6_28 (constants.%pattern_type.d5b)] +// CHECK:STDOUT: %return.param_patt.loc6_28.2: @Class.GetAddr.%pattern_type.loc6_28 (%pattern_type.d5b) = out_param_pattern [symbolic = %return.param_patt.loc6_28.2 (constants.%return.param_patt.4df)] +// CHECK:STDOUT: %return.patt.loc6_24.2: @Class.GetAddr.%pattern_type.loc6_28 (%pattern_type.d5b) = return_slot_pattern %return.param_patt.loc6_28.2, %ptr.loc6_28.1 [symbolic = %return.patt.loc6_24.2 (constants.%return.patt.c21)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc6_18: = require_complete_type %Class [symbolic = %require_complete.loc6_18 (constants.%require_complete.1dd)] // CHECK:STDOUT: %require_complete.loc6_24: = require_complete_type %ptr.loc6_28.1 [symbolic = %require_complete.loc6_24 (constants.%require_complete.94b)] // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class, %T.as_type.loc6_28.1 [symbolic = %Class.elem (constants.%Class.elem)] -// CHECK:STDOUT: %.loc7_12.2: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.as_type.loc6_28.1) [symbolic = %.loc7_12.2 (constants.%.a33)] +// CHECK:STDOUT: %.loc7_12.3: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.as_type.loc6_28.1) [symbolic = %.loc7_12.3 (constants.%.a33)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %ptr.loc6_28.1, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.cf6)] -// CHECK:STDOUT: %Copy.facet.loc7_12.2: %Copy.type = facet_value %ptr.loc6_28.1, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc7_12.2 (constants.%Copy.facet)] -// CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.loc7_12.2) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.6e0)] -// CHECK:STDOUT: %.loc7_12.3: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %Copy.facet.loc7_12.2 [symbolic = %.loc7_12.3 (constants.%.45d)] -// CHECK:STDOUT: %impl.elem0.loc7_12.2: @Class.GetAddr.%.loc7_12.3 (%.45d) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc7_12.2 (constants.%impl.elem0.c5d)] -// CHECK:STDOUT: %specific_impl_fn.loc7_12.2: = specific_impl_function %impl.elem0.loc7_12.2, @Copy.WithSelf.Op(%Copy.facet.loc7_12.2) [symbolic = %specific_impl_fn.loc7_12.2 (constants.%specific_impl_fn.5cf)] +// CHECK:STDOUT: %Copy.facet.loc7_12.3: %Copy.type = facet_value %ptr.loc6_28.1, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc7_12.3 (constants.%Copy.facet)] +// CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.loc7_12.3) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.6e0)] +// CHECK:STDOUT: %.loc7_12.4: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %Copy.facet.loc7_12.3 [symbolic = %.loc7_12.4 (constants.%.45d)] +// CHECK:STDOUT: %impl.elem0.loc7_12.2: @Class.GetAddr.%.loc7_12.4 (%.45d) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc7_12.2 (constants.%impl.elem0.c5d)] +// CHECK:STDOUT: %specific_impl_fn.loc7_12.2: = specific_impl_function %impl.elem0.loc7_12.2, @Copy.WithSelf.Op(%Copy.facet.loc7_12.3) [symbolic = %specific_impl_fn.loc7_12.2 (constants.%specific_impl_fn.5cf)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: ref @Class.GetAddr.%Class (%Class)) -> out %return.param: @Class.GetAddr.%ptr.loc6_28.1 (%ptr.215) { // CHECK:STDOUT: !entry: @@ -209,10 +228,12 @@ class Declaration(T:! type); // CHECK:STDOUT: %k.ref: @Class.GetAddr.%Class.elem (%Class.elem) = name_ref k, @Class.%.loc14 [concrete = @Class.%.loc14] // CHECK:STDOUT: %.loc7_17: ref @Class.GetAddr.%T.as_type.loc6_28.1 (%T.as_type) = class_element_access %self.ref, element0 // CHECK:STDOUT: %addr: @Class.GetAddr.%ptr.loc6_28.1 (%ptr.215) = addr_of %.loc7_17 -// CHECK:STDOUT: %impl.elem0.loc7_12.1: @Class.GetAddr.%.loc7_12.3 (%.45d) = impl_witness_access constants.%Copy.lookup_impl_witness.cf6, element0 [symbolic = %impl.elem0.loc7_12.2 (constants.%impl.elem0.c5d)] +// CHECK:STDOUT: %impl.elem0.loc7_12.1: @Class.GetAddr.%.loc7_12.4 (%.45d) = impl_witness_access constants.%Copy.lookup_impl_witness.cf6, element0 [symbolic = %impl.elem0.loc7_12.2 (constants.%impl.elem0.c5d)] // CHECK:STDOUT: %bound_method.loc7_12.1: = bound_method %addr, %impl.elem0.loc7_12.1 -// CHECK:STDOUT: %Copy.facet.loc7_12.1: %Copy.type = facet_value constants.%ptr.215, (constants.%Copy.lookup_impl_witness.cf6) [symbolic = %Copy.facet.loc7_12.2 (constants.%Copy.facet)] -// CHECK:STDOUT: %.loc7_12.1: %Copy.type = converted constants.%ptr.215, %Copy.facet.loc7_12.1 [symbolic = %Copy.facet.loc7_12.2 (constants.%Copy.facet)] +// CHECK:STDOUT: %Copy.facet.loc7_12.1: %Copy.type = facet_value constants.%ptr.215, (constants.%Copy.lookup_impl_witness.cf6) [symbolic = %Copy.facet.loc7_12.3 (constants.%Copy.facet)] +// CHECK:STDOUT: %.loc7_12.1: %Copy.type = converted constants.%ptr.215, %Copy.facet.loc7_12.1 [symbolic = %Copy.facet.loc7_12.3 (constants.%Copy.facet)] +// CHECK:STDOUT: %Copy.facet.loc7_12.2: %Copy.type = facet_value constants.%ptr.215, (constants.%Copy.lookup_impl_witness.cf6) [symbolic = %Copy.facet.loc7_12.3 (constants.%Copy.facet)] +// CHECK:STDOUT: %.loc7_12.2: %Copy.type = converted constants.%ptr.215, %Copy.facet.loc7_12.2 [symbolic = %Copy.facet.loc7_12.3 (constants.%Copy.facet)] // CHECK:STDOUT: %specific_impl_fn.loc7_12.1: = specific_impl_function %impl.elem0.loc7_12.1, @Copy.WithSelf.Op(constants.%Copy.facet) [symbolic = %specific_impl_fn.loc7_12.2 (constants.%specific_impl_fn.5cf)] // CHECK:STDOUT: %bound_method.loc7_12.2: = bound_method %addr, %specific_impl_fn.loc7_12.1 // CHECK:STDOUT: %Copy.WithSelf.Op.call: init @Class.GetAddr.%ptr.loc6_28.1 (%ptr.215) = call %bound_method.loc7_12.2(%addr) @@ -224,18 +245,22 @@ class Declaration(T:! type); // CHECK:STDOUT: %T: %Copy.type = symbolic_binding T, 0 [symbolic = %T (constants.%T.f84)] // CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T) [symbolic = %Class (constants.%Class)] // CHECK:STDOUT: %pattern_type.loc10_15: type = pattern_type %Class [symbolic = %pattern_type.loc10_15 (constants.%pattern_type.e18)] +// CHECK:STDOUT: %self.param_patt.loc10_15.2: @Class.GetValue.%pattern_type.loc10_15 (%pattern_type.e18) = value_param_pattern [symbolic = %self.param_patt.loc10_15.2 (constants.%self.param_patt.aaa)] +// CHECK:STDOUT: %self.patt.loc10_15.2: @Class.GetValue.%pattern_type.loc10_15 (%pattern_type.e18) = at_binding_pattern self, %self.param_patt.loc10_15.2 [symbolic = %self.patt.loc10_15.2 (constants.%self.patt.d8a)] // CHECK:STDOUT: %T.as_type.loc10_24.1: type = facet_access_type %T [symbolic = %T.as_type.loc10_24.1 (constants.%T.as_type)] // CHECK:STDOUT: %.loc10_24.2: Core.Form = init_form %T.as_type.loc10_24.1 [symbolic = %.loc10_24.2 (constants.%.1ce700.2)] // CHECK:STDOUT: %pattern_type.loc10_24: type = pattern_type %T.as_type.loc10_24.1 [symbolic = %pattern_type.loc10_24 (constants.%pattern_type.2c66b4.2)] +// CHECK:STDOUT: %return.param_patt.loc10_24.2: @Class.GetValue.%pattern_type.loc10_24 (%pattern_type.2c66b4.2) = out_param_pattern [symbolic = %return.param_patt.loc10_24.2 (constants.%return.param_patt.bf4475.2)] +// CHECK:STDOUT: %return.patt.loc10_21.2: @Class.GetValue.%pattern_type.loc10_24 (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt.loc10_24.2, %T.as_type.loc10_24.1 [symbolic = %return.patt.loc10_21.2 (constants.%return.patt.f44)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc10: = require_complete_type %Class [symbolic = %require_complete.loc10 (constants.%require_complete.1dd)] // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class, %T.as_type.loc10_24.1 [symbolic = %Class.elem (constants.%Class.elem)] // CHECK:STDOUT: %require_complete.loc11: = require_complete_type %T.as_type.loc10_24.1 [symbolic = %require_complete.loc11 (constants.%require_complete.d83)] // CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%T) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.c85f21.2)] -// CHECK:STDOUT: %.loc11_16.4: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %T [symbolic = %.loc11_16.4 (constants.%.c29)] +// CHECK:STDOUT: %.loc11_16.5: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %T [symbolic = %.loc11_16.5 (constants.%.c29)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %T, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.d9c)] -// CHECK:STDOUT: %impl.elem0.loc11_16.2: @Class.GetValue.%.loc11_16.4 (%.c29) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc11_16.2 (constants.%impl.elem0.bd2)] +// CHECK:STDOUT: %impl.elem0.loc11_16.2: @Class.GetValue.%.loc11_16.5 (%.c29) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc11_16.2 (constants.%impl.elem0.bd2)] // CHECK:STDOUT: %specific_impl_fn.loc11_16.2: = specific_impl_function %impl.elem0.loc11_16.2, @Copy.WithSelf.Op(%T) [symbolic = %specific_impl_fn.loc11_16.2 (constants.%specific_impl_fn.e2a)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Class.GetValue.%Class (%Class)) -> out %return.param: @Class.GetValue.%T.as_type.loc10_24.1 (%T.as_type) { @@ -244,9 +269,10 @@ class Declaration(T:! type); // CHECK:STDOUT: %k.ref: @Class.GetValue.%Class.elem (%Class.elem) = name_ref k, @Class.%.loc14 [concrete = @Class.%.loc14] // CHECK:STDOUT: %.loc11_16.1: ref @Class.GetValue.%T.as_type.loc10_24.1 (%T.as_type) = class_element_access %self.ref, element0 // CHECK:STDOUT: %.loc11_16.2: @Class.GetValue.%T.as_type.loc10_24.1 (%T.as_type) = acquire_value %.loc11_16.1 -// CHECK:STDOUT: %impl.elem0.loc11_16.1: @Class.GetValue.%.loc11_16.4 (%.c29) = impl_witness_access constants.%Copy.lookup_impl_witness.d9c, element0 [symbolic = %impl.elem0.loc11_16.2 (constants.%impl.elem0.bd2)] +// CHECK:STDOUT: %impl.elem0.loc11_16.1: @Class.GetValue.%.loc11_16.5 (%.c29) = impl_witness_access constants.%Copy.lookup_impl_witness.d9c, element0 [symbolic = %impl.elem0.loc11_16.2 (constants.%impl.elem0.bd2)] // CHECK:STDOUT: %bound_method.loc11_16.1: = bound_method %.loc11_16.2, %impl.elem0.loc11_16.1 // CHECK:STDOUT: %.loc11_16.3: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T (constants.%T.f84)] +// CHECK:STDOUT: %.loc11_16.4: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T (constants.%T.f84)] // CHECK:STDOUT: %specific_impl_fn.loc11_16.1: = specific_impl_function %impl.elem0.loc11_16.1, @Copy.WithSelf.Op(constants.%T.f84) [symbolic = %specific_impl_fn.loc11_16.2 (constants.%specific_impl_fn.e2a)] // CHECK:STDOUT: %bound_method.loc11_16.2: = bound_method %.loc11_16.2, %specific_impl_fn.loc11_16.1 // CHECK:STDOUT: %.loc10_24.1: ref @Class.GetValue.%T.as_type.loc10_24.1 (%T.as_type) = splice_block %return.param {} @@ -256,6 +282,7 @@ class Declaration(T:! type); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%T.f84) { +// CHECK:STDOUT: %T.patt.loc5_14.2 => constants.%T.patt.fe6 // CHECK:STDOUT: %T.loc5_14.1 => constants.%T.f84 // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -265,6 +292,8 @@ class Declaration(T:! type); // CHECK:STDOUT: %Class.GetValue => constants.%Class.GetValue // CHECK:STDOUT: %T.as_type => constants.%T.as_type // CHECK:STDOUT: %require_complete => constants.%require_complete.d83 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.2c66b4.2 +// CHECK:STDOUT: %k.patt => constants.%k.patt // CHECK:STDOUT: %Class => constants.%Class // CHECK:STDOUT: %Class.elem => constants.%Class.elem // CHECK:STDOUT: %struct_type.k => constants.%struct_type.k @@ -275,22 +304,31 @@ class Declaration(T:! type); // CHECK:STDOUT: %T => constants.%T.f84 // CHECK:STDOUT: %Class => constants.%Class // CHECK:STDOUT: %pattern_type.loc6_18 => constants.%pattern_type.e18 +// CHECK:STDOUT: %self.param_patt.loc6_18.2 => constants.%self.param_patt.f0d +// CHECK:STDOUT: %self.patt.loc6_18.2 => constants.%self.patt.282 // CHECK:STDOUT: %T.as_type.loc6_28.1 => constants.%T.as_type // CHECK:STDOUT: %ptr.loc6_28.1 => constants.%ptr.215 // CHECK:STDOUT: %.loc6_28.1 => constants.%.4fb // CHECK:STDOUT: %pattern_type.loc6_28 => constants.%pattern_type.d5b +// CHECK:STDOUT: %return.param_patt.loc6_28.2 => constants.%return.param_patt.4df +// CHECK:STDOUT: %return.patt.loc6_24.2 => constants.%return.patt.c21 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class.GetValue(constants.%T.f84) { // CHECK:STDOUT: %T => constants.%T.f84 // CHECK:STDOUT: %Class => constants.%Class // CHECK:STDOUT: %pattern_type.loc10_15 => constants.%pattern_type.e18 +// CHECK:STDOUT: %self.param_patt.loc10_15.2 => constants.%self.param_patt.aaa +// CHECK:STDOUT: %self.patt.loc10_15.2 => constants.%self.patt.d8a // CHECK:STDOUT: %T.as_type.loc10_24.1 => constants.%T.as_type // CHECK:STDOUT: %.loc10_24.2 => constants.%.1ce700.2 // CHECK:STDOUT: %pattern_type.loc10_24 => constants.%pattern_type.2c66b4.2 +// CHECK:STDOUT: %return.param_patt.loc10_24.2 => constants.%return.param_patt.bf4475.2 +// CHECK:STDOUT: %return.patt.loc10_21.2 => constants.%return.patt.f44 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Declaration(constants.%T.67d) { +// CHECK:STDOUT: %T.patt.loc17_20.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc17_20.1 => constants.%T.67d // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/generic/call.carbon b/toolchain/check/testdata/class/generic/call.carbon index 9e614e8fc40e..71a44f514513 100644 --- a/toolchain/check/testdata/class/generic/call.carbon +++ b/toolchain/check/testdata/class/generic/call.carbon @@ -96,6 +96,7 @@ class Outer(T:! type) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.d47: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %Int.type: type = generic_class_type @Int [concrete] @@ -103,6 +104,7 @@ class Outer(T:! type) { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %N.patt.a76: %pattern_type.6b6 = symbolic_binding_pattern N, 1 [symbolic] // CHECK:STDOUT: %N.ce9: %i32 = symbolic_binding N, 1 [symbolic] // CHECK:STDOUT: %Class.type: type = generic_class_type @Class [concrete] // CHECK:STDOUT: %Class.generic: %Class.type = struct_value () [concrete] @@ -129,6 +131,8 @@ class Outer(T:! type) { // CHECK:STDOUT: %int_5.eef: %i32 = int_value 5 [concrete] // CHECK:STDOUT: %Class.4f7: type = class_type @Class, @Class(%ptr.d08, %int_5.eef) [concrete] // CHECK:STDOUT: %pattern_type.081: type = pattern_type %Class.4f7 [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.081 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.081 = var_pattern %a.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.150: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.53a: %T.as.DefaultOrUnformed.impl.Op.type.150 = struct_value () [symbolic] @@ -144,6 +148,8 @@ class Outer(T:! type) { // CHECK:STDOUT: %int_0.3c0: %i32 = int_value 0 [concrete] // CHECK:STDOUT: %Class.958: type = class_type @Class, @Class(%empty_tuple.type, %int_0.3c0) [concrete] // CHECK:STDOUT: %pattern_type.a95: type = pattern_type %Class.958 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.a95 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.a95 = var_pattern %b.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.impl_witness.57a: = impl_witness imports.%DefaultOrUnformed.impl_witness_table.374, @T.as.DefaultOrUnformed.impl(%Class.958) [concrete] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.a07: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%Class.958) [concrete] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.7eb: %T.as.DefaultOrUnformed.impl.Op.type.a07 = struct_value () [concrete] @@ -177,8 +183,8 @@ class Outer(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: %Class.type = class_decl @Class [concrete = constants.%Class.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %N.patt: %pattern_type.6b6 = symbolic_binding_pattern N, 1 [concrete] +// CHECK:STDOUT: %T.patt.loc4_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt.d47)] +// CHECK:STDOUT: %N.patt.loc4_24.1: %pattern_type.6b6 = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc4_24.2 (constants.%N.patt.a76)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_17.1: type = splice_block %.loc4_17.2 [concrete = type] { // CHECK:STDOUT: %.Self.loc4_14: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -192,8 +198,8 @@ class Outer(T:! type) { // CHECK:STDOUT: %N.loc4_24.2: %i32 = symbolic_binding N, 1 [symbolic = %N.loc4_24.1 (constants.%N.ce9)] // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.081 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.081 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.081 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.081 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %Class.4f7 = var %a.var_patt [concrete] // CHECK:STDOUT: %.loc6_21.1: type = splice_block %Class.loc6 [concrete = constants.%Class.4f7] { @@ -212,8 +218,8 @@ class Outer(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %Class.4f7 = ref_binding a, %a.var [concrete = %a.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.a95 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.a95 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.a95 = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type.a95 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %Class.958 = var %b.var_patt [concrete] // CHECK:STDOUT: %.loc9_19.1: type = splice_block %Class.loc9 [concrete = constants.%Class.958] { @@ -234,7 +240,9 @@ class Outer(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%T.loc4_14.2: type, %N.loc4_24.2: %i32) { +// CHECK:STDOUT: %T.patt.loc4_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt.d47)] // CHECK:STDOUT: %T.loc4_14.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_14.1 (constants.%T.67d)] +// CHECK:STDOUT: %N.patt.loc4_24.2: %pattern_type.6b6 = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc4_24.2 (constants.%N.patt.a76)] // CHECK:STDOUT: %N.loc4_24.1: %i32 = symbolic_binding N, 1 [symbolic = %N.loc4_24.1 (constants.%N.ce9)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -270,19 +278,25 @@ class Outer(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%T.67d, constants.%N.ce9) { +// CHECK:STDOUT: %T.patt.loc4_14.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc4_14.1 => constants.%T.67d +// CHECK:STDOUT: %N.patt.loc4_24.2 => constants.%N.patt.a76 // CHECK:STDOUT: %N.loc4_24.1 => constants.%N.ce9 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%ptr.d08, constants.%int_5.eef) { +// CHECK:STDOUT: %T.patt.loc4_14.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc4_14.1 => constants.%ptr.d08 +// CHECK:STDOUT: %N.patt.loc4_24.2 => constants.%N.patt.a76 // CHECK:STDOUT: %N.loc4_24.1 => constants.%int_5.eef // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%empty_tuple.type, constants.%int_0.3c0) { +// CHECK:STDOUT: %T.patt.loc4_14.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc4_14.1 => constants.%empty_tuple.type +// CHECK:STDOUT: %N.patt.loc4_24.2 => constants.%N.patt.a76 // CHECK:STDOUT: %N.loc4_24.1 => constants.%int_0.3c0 // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -294,12 +308,14 @@ class Outer(T:! type) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [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: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %N.patt.a76: %pattern_type.6b6 = symbolic_binding_pattern N, 1 [symbolic] // CHECK:STDOUT: %N.ce9: %i32 = symbolic_binding N, 1 [symbolic] // CHECK:STDOUT: %Class.type: type = generic_class_type @Class [concrete] // CHECK:STDOUT: %Class.generic: %Class.type = struct_value () [concrete] @@ -326,8 +342,8 @@ class Outer(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: %Class.type = class_decl @Class [concrete = constants.%Class.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %N.patt: %pattern_type.6b6 = symbolic_binding_pattern N, 1 [concrete] +// CHECK:STDOUT: %T.patt.loc4_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %N.patt.loc4_24.1: %pattern_type.6b6 = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc4_24.2 (constants.%N.patt.a76)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_17.1: type = splice_block %.loc4_17.2 [concrete = type] { // CHECK:STDOUT: %.Self.loc4_14: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -341,8 +357,8 @@ class Outer(T:! type) { // CHECK:STDOUT: %N.loc4_24.2: %i32 = symbolic_binding N, 1 [symbolic = %N.loc4_24.1 (constants.%N.ce9)] // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: = ref_binding_pattern a [concrete = ] +// CHECK:STDOUT: %a.var_patt: = var_pattern %a.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref = var %a.var_patt [concrete = ] // CHECK:STDOUT: %.1: = splice_block [concrete = ] { @@ -354,7 +370,9 @@ class Outer(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%T.loc4_14.2: type, %N.loc4_24.2: %i32) { +// CHECK:STDOUT: %T.patt.loc4_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_14.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_14.1 (constants.%T)] +// CHECK:STDOUT: %N.patt.loc4_24.2: %pattern_type.6b6 = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc4_24.2 (constants.%N.patt.a76)] // CHECK:STDOUT: %N.loc4_24.1: %i32 = symbolic_binding N, 1 [symbolic = %N.loc4_24.1 (constants.%N.ce9)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -375,7 +393,9 @@ class Outer(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%T, constants.%N.ce9) { +// CHECK:STDOUT: %T.patt.loc4_14.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_14.1 => constants.%T +// CHECK:STDOUT: %N.patt.loc4_24.2 => constants.%N.patt.a76 // CHECK:STDOUT: %N.loc4_24.1 => constants.%N.ce9 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -385,12 +405,14 @@ class Outer(T:! type) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [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: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %N.patt.a76: %pattern_type.6b6 = symbolic_binding_pattern N, 1 [symbolic] // CHECK:STDOUT: %N.ce9: %i32 = symbolic_binding N, 1 [symbolic] // CHECK:STDOUT: %Class.type: type = generic_class_type @Class [concrete] // CHECK:STDOUT: %Class.generic: %Class.type = struct_value () [concrete] @@ -419,8 +441,8 @@ class Outer(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: %Class.type = class_decl @Class [concrete = constants.%Class.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %N.patt: %pattern_type.6b6 = symbolic_binding_pattern N, 1 [concrete] +// CHECK:STDOUT: %T.patt.loc4_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %N.patt.loc4_24.1: %pattern_type.6b6 = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc4_24.2 (constants.%N.patt.a76)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_17.1: type = splice_block %.loc4_17.2 [concrete = type] { // CHECK:STDOUT: %.Self.loc4_14: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -434,8 +456,8 @@ class Outer(T:! type) { // CHECK:STDOUT: %N.loc4_24.2: %i32 = symbolic_binding N, 1 [symbolic = %N.loc4_24.1 (constants.%N.ce9)] // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: = ref_binding_pattern a [concrete = ] +// CHECK:STDOUT: %a.var_patt: = var_pattern %a.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref = var %a.var_patt [concrete = ] // CHECK:STDOUT: %.1: = splice_block [concrete = ] { @@ -449,7 +471,9 @@ class Outer(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%T.loc4_14.2: type, %N.loc4_24.2: %i32) { +// CHECK:STDOUT: %T.patt.loc4_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_14.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_14.1 (constants.%T)] +// CHECK:STDOUT: %N.patt.loc4_24.2: %pattern_type.6b6 = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc4_24.2 (constants.%N.patt.a76)] // CHECK:STDOUT: %N.loc4_24.1: %i32 = symbolic_binding N, 1 [symbolic = %N.loc4_24.1 (constants.%N.ce9)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -470,7 +494,9 @@ class Outer(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%T, constants.%N.ce9) { +// CHECK:STDOUT: %T.patt.loc4_14.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_14.1 => constants.%T +// CHECK:STDOUT: %N.patt.loc4_24.2 => constants.%N.patt.a76 // CHECK:STDOUT: %N.loc4_24.1 => constants.%N.ce9 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -480,12 +506,14 @@ class Outer(T:! type) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [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: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %N.patt.a76: %pattern_type.6b6 = symbolic_binding_pattern N, 1 [symbolic] // CHECK:STDOUT: %N.ce9: %i32 = symbolic_binding N, 1 [symbolic] // CHECK:STDOUT: %Class.type: type = generic_class_type @Class [concrete] // CHECK:STDOUT: %Class.generic: %Class.type = struct_value () [concrete] @@ -517,8 +545,8 @@ class Outer(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: %Class.type = class_decl @Class [concrete = constants.%Class.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %N.patt: %pattern_type.6b6 = symbolic_binding_pattern N, 1 [concrete] +// CHECK:STDOUT: %T.patt.loc4_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %N.patt.loc4_24.1: %pattern_type.6b6 = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc4_24.2 (constants.%N.patt.a76)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_17.1: type = splice_block %.loc4_17.2 [concrete = type] { // CHECK:STDOUT: %.Self.loc4_14: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -532,8 +560,8 @@ class Outer(T:! type) { // CHECK:STDOUT: %N.loc4_24.2: %i32 = symbolic_binding N, 1 [symbolic = %N.loc4_24.1 (constants.%N.ce9)] // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: = ref_binding_pattern a [concrete = ] +// CHECK:STDOUT: %a.var_patt: = var_pattern %a.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref = var %a.var_patt [concrete = ] // CHECK:STDOUT: %.1: = splice_block [concrete = ] { @@ -547,7 +575,9 @@ class Outer(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%T.loc4_14.2: type, %N.loc4_24.2: %i32) { +// CHECK:STDOUT: %T.patt.loc4_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_14.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_14.1 (constants.%T)] +// CHECK:STDOUT: %N.patt.loc4_24.2: %pattern_type.6b6 = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc4_24.2 (constants.%N.patt.a76)] // CHECK:STDOUT: %N.loc4_24.1: %i32 = symbolic_binding N, 1 [symbolic = %N.loc4_24.1 (constants.%N.ce9)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -568,7 +598,9 @@ class Outer(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%T, constants.%N.ce9) { +// CHECK:STDOUT: %T.patt.loc4_14.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_14.1 => constants.%T +// CHECK:STDOUT: %N.patt.loc4_24.2 => constants.%N.patt.a76 // CHECK:STDOUT: %N.loc4_24.1 => constants.%N.ce9 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -578,30 +610,40 @@ class Outer(T:! type) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Outer.type: type = generic_class_type @Outer [concrete] // CHECK:STDOUT: %Outer.generic: %Outer.type = struct_value () [concrete] // CHECK:STDOUT: %Outer.dee: type = class_type @Outer, @Outer(%T) [symbolic] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %U: type = symbolic_binding U, 1 [symbolic] // CHECK:STDOUT: %Inner.type.8f7: type = generic_class_type @Inner, @Outer(%T) [symbolic] // CHECK:STDOUT: %Inner.generic.b3a: %Inner.type.8f7 = struct_value () [symbolic] // CHECK:STDOUT: %Inner.34b: type = class_type @Inner, @Inner(%T, %U) [symbolic] // CHECK:STDOUT: %.156: Core.Form = init_form %Outer.dee [symbolic] // CHECK:STDOUT: %pattern_type.dec: type = pattern_type %Outer.dee [symbolic] +// CHECK:STDOUT: %return.param_patt.e00: %pattern_type.dec = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.828: %pattern_type.dec = return_slot_pattern %return.param_patt.e00, %Outer.dee [symbolic] // CHECK:STDOUT: %Inner.A.type.b38: type = fn_type @Inner.A, @Inner(%T, %U) [symbolic] // CHECK:STDOUT: %Inner.A.456: %Inner.A.type.b38 = struct_value () [symbolic] // CHECK:STDOUT: %Outer.20b: type = class_type @Outer, @Outer(%U) [symbolic] // CHECK:STDOUT: %.aaf: Core.Form = init_form %Outer.20b [symbolic] // CHECK:STDOUT: %pattern_type.a71: type = pattern_type %Outer.20b [symbolic] +// CHECK:STDOUT: %return.param_patt.b47: %pattern_type.a71 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.998: %pattern_type.a71 = return_slot_pattern %return.param_patt.b47, %Outer.20b [symbolic] // CHECK:STDOUT: %Inner.B.type.374: type = fn_type @Inner.B, @Inner(%T, %U) [symbolic] // CHECK:STDOUT: %Inner.B.cc2: %Inner.B.type.374 = struct_value () [symbolic] // CHECK:STDOUT: %Inner.61d: type = class_type @Inner, @Inner(%T, %T) [symbolic] // CHECK:STDOUT: %.2f2: Core.Form = init_form %Inner.61d [symbolic] // CHECK:STDOUT: %pattern_type.5b1: type = pattern_type %Inner.61d [symbolic] +// CHECK:STDOUT: %return.param_patt.9e0: %pattern_type.5b1 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.cc5: %pattern_type.5b1 = return_slot_pattern %return.param_patt.9e0, %Inner.61d [symbolic] // CHECK:STDOUT: %Inner.C.type.5dd: type = fn_type @Inner.C, @Inner(%T, %U) [symbolic] // CHECK:STDOUT: %Inner.C.5e1: %Inner.C.type.5dd = struct_value () [symbolic] // CHECK:STDOUT: %.556: Core.Form = init_form %Inner.34b [symbolic] // CHECK:STDOUT: %pattern_type.f00: type = pattern_type %Inner.34b [symbolic] +// CHECK:STDOUT: %return.param_patt.bb4: %pattern_type.f00 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.0b0: %pattern_type.f00 = return_slot_pattern %return.param_patt.bb4, %Inner.34b [symbolic] // CHECK:STDOUT: %Inner.D.type.faa: type = fn_type @Inner.D, @Inner(%T, %U) [symbolic] // CHECK:STDOUT: %Inner.D.039: %Inner.D.type.faa = struct_value () [symbolic] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] @@ -641,7 +683,7 @@ class Outer(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Outer.decl: %Outer.type = class_decl @Outer [concrete = constants.%Outer.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc2_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc2_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc2_17.1: type = splice_block %.loc2_17.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -652,6 +694,7 @@ class Outer(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Outer(%T.loc2_14.2: type) { +// CHECK:STDOUT: %T.patt.loc2_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc2_14.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc2_14.1: type = symbolic_binding T, 0 [symbolic = %T.loc2_14.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -660,7 +703,7 @@ class Outer(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %Inner.decl: @Outer.%Inner.type (%Inner.type.8f7) = class_decl @Inner [symbolic = @Outer.%Inner.generic (constants.%Inner.generic.b3a)] { -// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [concrete] +// CHECK:STDOUT: %U.patt.loc3_16.1: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc3_16.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc3_19.1: type = splice_block %.loc3_19.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -680,6 +723,7 @@ class Outer(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Inner(@Outer.%T.loc2_14.2: type, %U.loc3_16.2: type) { +// CHECK:STDOUT: %U.patt.loc3_16.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc3_16.2 (constants.%U.patt)] // CHECK:STDOUT: %U.loc3_16.1: type = symbolic_binding U, 1 [symbolic = %U.loc3_16.1 (constants.%U)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -695,8 +739,8 @@ class Outer(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %Inner.A.decl: @Inner.%Inner.A.type (%Inner.A.type.b38) = fn_decl @Inner.A [symbolic = @Inner.%Inner.A (constants.%Inner.A.456)] { -// CHECK:STDOUT: %return.param_patt: @Inner.A.%pattern_type (%pattern_type.dec) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @Inner.A.%pattern_type (%pattern_type.dec) = return_slot_pattern %return.param_patt, %Outer.loc4_22.2 [concrete] +// CHECK:STDOUT: %return.param_patt.loc4_22.1: @Inner.A.%pattern_type (%pattern_type.dec) = out_param_pattern [symbolic = %return.param_patt.loc4_22.2 (constants.%return.param_patt.e00)] +// CHECK:STDOUT: %return.patt.loc4_12.1: @Inner.A.%pattern_type (%pattern_type.dec) = return_slot_pattern %return.param_patt.loc4_22.1, %Outer.loc4_22.2 [symbolic = %return.patt.loc4_12.2 (constants.%return.patt.828)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Outer.ref: %Outer.type = name_ref Outer, file.%Outer.decl [concrete = constants.%Outer.generic] // CHECK:STDOUT: %T.ref: type = name_ref T, @Outer.%T.loc2_14.2 [symbolic = %T (constants.%T)] @@ -706,8 +750,8 @@ class Outer(T:! type) { // CHECK:STDOUT: %return: ref @Inner.A.%Outer.loc4_22.1 (%Outer.dee) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Inner.B.decl: @Inner.%Inner.B.type (%Inner.B.type.374) = fn_decl @Inner.B [symbolic = @Inner.%Inner.B (constants.%Inner.B.cc2)] { -// CHECK:STDOUT: %return.param_patt: @Inner.B.%pattern_type (%pattern_type.a71) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @Inner.B.%pattern_type (%pattern_type.a71) = return_slot_pattern %return.param_patt, %Outer.loc7_22.2 [concrete] +// CHECK:STDOUT: %return.param_patt.loc7_22.1: @Inner.B.%pattern_type (%pattern_type.a71) = out_param_pattern [symbolic = %return.param_patt.loc7_22.2 (constants.%return.param_patt.b47)] +// CHECK:STDOUT: %return.patt.loc7_12.1: @Inner.B.%pattern_type (%pattern_type.a71) = return_slot_pattern %return.param_patt.loc7_22.1, %Outer.loc7_22.2 [symbolic = %return.patt.loc7_12.2 (constants.%return.patt.998)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Outer.ref: %Outer.type = name_ref Outer, file.%Outer.decl [concrete = constants.%Outer.generic] // CHECK:STDOUT: %U.ref: type = name_ref U, @Inner.%U.loc3_16.2 [symbolic = %U (constants.%U)] @@ -717,8 +761,8 @@ class Outer(T:! type) { // CHECK:STDOUT: %return: ref @Inner.B.%Outer.loc7_22.1 (%Outer.20b) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Inner.C.decl: @Inner.%Inner.C.type (%Inner.C.type.5dd) = fn_decl @Inner.C [symbolic = @Inner.%Inner.C (constants.%Inner.C.5e1)] { -// CHECK:STDOUT: %return.param_patt: @Inner.C.%pattern_type (%pattern_type.5b1) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @Inner.C.%pattern_type (%pattern_type.5b1) = return_slot_pattern %return.param_patt, %Inner.loc10_22.2 [concrete] +// CHECK:STDOUT: %return.param_patt.loc10_22.1: @Inner.C.%pattern_type (%pattern_type.5b1) = out_param_pattern [symbolic = %return.param_patt.loc10_22.2 (constants.%return.param_patt.9e0)] +// CHECK:STDOUT: %return.patt.loc10_12.1: @Inner.C.%pattern_type (%pattern_type.5b1) = return_slot_pattern %return.param_patt.loc10_22.1, %Inner.loc10_22.2 [symbolic = %return.patt.loc10_12.2 (constants.%return.patt.cc5)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc10_15: @Inner.C.%Inner.type (%Inner.type.8f7) = specific_constant @Outer.%Inner.decl, @Outer(constants.%T) [symbolic = %Inner.generic (constants.%Inner.generic.b3a)] // CHECK:STDOUT: %Inner.ref: @Inner.C.%Inner.type (%Inner.type.8f7) = name_ref Inner, %.loc10_15 [symbolic = %Inner.generic (constants.%Inner.generic.b3a)] @@ -729,8 +773,8 @@ class Outer(T:! type) { // CHECK:STDOUT: %return: ref @Inner.C.%Inner.loc10_22.1 (%Inner.61d) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Inner.D.decl: @Inner.%Inner.D.type (%Inner.D.type.faa) = fn_decl @Inner.D [symbolic = @Inner.%Inner.D (constants.%Inner.D.039)] { -// CHECK:STDOUT: %return.param_patt: @Inner.D.%pattern_type (%pattern_type.f00) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @Inner.D.%pattern_type (%pattern_type.f00) = return_slot_pattern %return.param_patt, %Inner.loc13_22.2 [concrete] +// CHECK:STDOUT: %return.param_patt.loc13_22.1: @Inner.D.%pattern_type (%pattern_type.f00) = out_param_pattern [symbolic = %return.param_patt.loc13_22.2 (constants.%return.param_patt.bb4)] +// CHECK:STDOUT: %return.patt.loc13_12.1: @Inner.D.%pattern_type (%pattern_type.f00) = return_slot_pattern %return.param_patt.loc13_22.1, %Inner.loc13_22.2 [symbolic = %return.patt.loc13_12.2 (constants.%return.patt.0b0)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc13_15: @Inner.D.%Inner.type (%Inner.type.8f7) = specific_constant @Outer.%Inner.decl, @Outer(constants.%T) [symbolic = %Inner.generic (constants.%Inner.generic.b3a)] // CHECK:STDOUT: %Inner.ref: @Inner.D.%Inner.type (%Inner.type.8f7) = name_ref Inner, %.loc13_15 [symbolic = %Inner.generic (constants.%Inner.generic.b3a)] @@ -761,6 +805,8 @@ class Outer(T:! type) { // CHECK:STDOUT: %Outer.loc4_22.1: type = class_type @Outer, @Outer(%T) [symbolic = %Outer.loc4_22.1 (constants.%Outer.dee)] // CHECK:STDOUT: %.loc4_22.1: Core.Form = init_form %Outer.loc4_22.1 [symbolic = %.loc4_22.1 (constants.%.156)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Outer.loc4_22.1 [symbolic = %pattern_type (constants.%pattern_type.dec)] +// CHECK:STDOUT: %return.param_patt.loc4_22.2: @Inner.A.%pattern_type (%pattern_type.dec) = out_param_pattern [symbolic = %return.param_patt.loc4_22.2 (constants.%return.param_patt.e00)] +// CHECK:STDOUT: %return.patt.loc4_12.2: @Inner.A.%pattern_type (%pattern_type.dec) = return_slot_pattern %return.param_patt.loc4_22.2, %Outer.loc4_22.1 [symbolic = %return.patt.loc4_12.2 (constants.%return.patt.828)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %Outer.loc4_22.1 [symbolic = %require_complete (constants.%require_complete.dae)] @@ -780,6 +826,8 @@ class Outer(T:! type) { // CHECK:STDOUT: %Outer.loc7_22.1: type = class_type @Outer, @Outer(%U) [symbolic = %Outer.loc7_22.1 (constants.%Outer.20b)] // CHECK:STDOUT: %.loc7_22.1: Core.Form = init_form %Outer.loc7_22.1 [symbolic = %.loc7_22.1 (constants.%.aaf)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Outer.loc7_22.1 [symbolic = %pattern_type (constants.%pattern_type.a71)] +// CHECK:STDOUT: %return.param_patt.loc7_22.2: @Inner.B.%pattern_type (%pattern_type.a71) = out_param_pattern [symbolic = %return.param_patt.loc7_22.2 (constants.%return.param_patt.b47)] +// CHECK:STDOUT: %return.patt.loc7_12.2: @Inner.B.%pattern_type (%pattern_type.a71) = return_slot_pattern %return.param_patt.loc7_22.2, %Outer.loc7_22.1 [symbolic = %return.patt.loc7_12.2 (constants.%return.patt.998)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %Outer.loc7_22.1 [symbolic = %require_complete (constants.%require_complete.7da)] @@ -801,6 +849,8 @@ class Outer(T:! type) { // CHECK:STDOUT: %Inner.loc10_22.1: type = class_type @Inner, @Inner(%T, %T) [symbolic = %Inner.loc10_22.1 (constants.%Inner.61d)] // CHECK:STDOUT: %.loc10_22.1: Core.Form = init_form %Inner.loc10_22.1 [symbolic = %.loc10_22.1 (constants.%.2f2)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Inner.loc10_22.1 [symbolic = %pattern_type (constants.%pattern_type.5b1)] +// CHECK:STDOUT: %return.param_patt.loc10_22.2: @Inner.C.%pattern_type (%pattern_type.5b1) = out_param_pattern [symbolic = %return.param_patt.loc10_22.2 (constants.%return.param_patt.9e0)] +// CHECK:STDOUT: %return.patt.loc10_12.2: @Inner.C.%pattern_type (%pattern_type.5b1) = return_slot_pattern %return.param_patt.loc10_22.2, %Inner.loc10_22.1 [symbolic = %return.patt.loc10_12.2 (constants.%return.patt.cc5)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %Inner.loc10_22.1 [symbolic = %require_complete (constants.%require_complete.25e)] @@ -823,6 +873,8 @@ class Outer(T:! type) { // CHECK:STDOUT: %Inner.loc13_22.1: type = class_type @Inner, @Inner(%T, %U) [symbolic = %Inner.loc13_22.1 (constants.%Inner.34b)] // CHECK:STDOUT: %.loc13_22.1: Core.Form = init_form %Inner.loc13_22.1 [symbolic = %.loc13_22.1 (constants.%.556)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Inner.loc13_22.1 [symbolic = %pattern_type (constants.%pattern_type.f00)] +// CHECK:STDOUT: %return.param_patt.loc13_22.2: @Inner.D.%pattern_type (%pattern_type.f00) = out_param_pattern [symbolic = %return.param_patt.loc13_22.2 (constants.%return.param_patt.bb4)] +// CHECK:STDOUT: %return.patt.loc13_12.2: @Inner.D.%pattern_type (%pattern_type.f00) = return_slot_pattern %return.param_patt.loc13_22.2, %Inner.loc13_22.1 [symbolic = %return.patt.loc13_12.2 (constants.%return.patt.0b0)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %Inner.loc13_22.1 [symbolic = %require_complete (constants.%require_complete.8ae)] @@ -838,6 +890,7 @@ class Outer(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Outer(constants.%T) { +// CHECK:STDOUT: %T.patt.loc2_14.2 => constants.%T.patt // CHECK:STDOUT: %T.loc2_14.1 => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -846,6 +899,7 @@ class Outer(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Inner(constants.%T, constants.%U) { +// CHECK:STDOUT: %U.patt.loc3_16.2 => constants.%U.patt // CHECK:STDOUT: %U.loc3_16.1 => constants.%U // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -865,9 +919,12 @@ class Outer(T:! type) { // CHECK:STDOUT: %Outer.loc4_22.1 => constants.%Outer.dee // CHECK:STDOUT: %.loc4_22.1 => constants.%.156 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.dec +// CHECK:STDOUT: %return.param_patt.loc4_22.2 => constants.%return.param_patt.e00 +// CHECK:STDOUT: %return.patt.loc4_12.2 => constants.%return.patt.828 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Outer(constants.%U) { +// CHECK:STDOUT: %T.patt.loc2_14.2 => constants.%T.patt // CHECK:STDOUT: %T.loc2_14.1 => constants.%U // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -880,9 +937,12 @@ class Outer(T:! type) { // CHECK:STDOUT: %Outer.loc7_22.1 => constants.%Outer.20b // CHECK:STDOUT: %.loc7_22.1 => constants.%.aaf // CHECK:STDOUT: %pattern_type => constants.%pattern_type.a71 +// CHECK:STDOUT: %return.param_patt.loc7_22.2 => constants.%return.param_patt.b47 +// CHECK:STDOUT: %return.patt.loc7_12.2 => constants.%return.patt.998 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Inner(constants.%T, constants.%T) { +// CHECK:STDOUT: %U.patt.loc3_16.2 => constants.%U.patt // CHECK:STDOUT: %U.loc3_16.1 => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -904,6 +964,8 @@ class Outer(T:! type) { // CHECK:STDOUT: %Inner.loc10_22.1 => constants.%Inner.61d // CHECK:STDOUT: %.loc10_22.1 => constants.%.2f2 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.5b1 +// CHECK:STDOUT: %return.param_patt.loc10_22.2 => constants.%return.param_patt.9e0 +// CHECK:STDOUT: %return.patt.loc10_12.2 => constants.%return.patt.cc5 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Inner.D(constants.%T, constants.%U) { @@ -914,5 +976,7 @@ class Outer(T:! type) { // CHECK:STDOUT: %Inner.loc13_22.1 => constants.%Inner.34b // CHECK:STDOUT: %.loc13_22.1 => constants.%.556 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.f00 +// CHECK:STDOUT: %return.param_patt.loc13_22.2 => constants.%return.param_patt.bb4 +// CHECK:STDOUT: %return.patt.loc13_12.2 => constants.%return.patt.0b0 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/generic/complete_in_conversion.carbon b/toolchain/check/testdata/class/generic/complete_in_conversion.carbon index fa9dee07e699..6b2612dbe62e 100644 --- a/toolchain/check/testdata/class/generic/complete_in_conversion.carbon +++ b/toolchain/check/testdata/class/generic/complete_in_conversion.carbon @@ -39,8 +39,12 @@ fn F(a: A(0)*) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %pattern_type.dc0: type = pattern_type Core.IntLiteral [concrete] +// CHECK:STDOUT: %N.param_patt: %pattern_type.dc0 = value_param_pattern [concrete] +// CHECK:STDOUT: %N.patt.eef: %pattern_type.dc0 = at_binding_pattern N, %N.param_patt [concrete] // CHECK:STDOUT: %.805: Core.Form = init_form type [concrete] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %return.param_patt.70e: %pattern_type.98f = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.3ae: %pattern_type.98f = return_slot_pattern %return.param_patt.70e, type [concrete] // CHECK:STDOUT: %Int.type.9c0: type = fn_type @Int.loc2 [concrete] // CHECK:STDOUT: %Int.c4a: %Int.type.9c0 = struct_value () [concrete] // CHECK:STDOUT: %B: type = class_type @B [concrete] @@ -53,6 +57,7 @@ fn F(a: A(0)*) { // CHECK:STDOUT: %Int.generic: %Int.type.6c1 = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int.1, @Int.1(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %N.patt.38a: %pattern_type.6b6 = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %N.37f: %i32 = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %A.type: type = generic_class_type @A [concrete] // CHECK:STDOUT: %A.generic: %A.type = struct_value () [concrete] @@ -71,6 +76,8 @@ fn F(a: A(0)*) { // CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.call: init Core.IntLiteral = call %bound_method.7c3(%N.37f) [symbolic] // CHECK:STDOUT: %iN.builtin.9da: type = int_type signed, %Int.as.ImplicitAs.impl.Convert.call [symbolic] // CHECK:STDOUT: %require_complete.468: = require_complete_type %iN.builtin.9da [symbolic] +// CHECK:STDOUT: %pattern_type.075: type = pattern_type %iN.builtin.9da [symbolic] +// CHECK:STDOUT: %n.patt: %pattern_type.075 = ref_binding_pattern n [symbolic] // CHECK:STDOUT: %A.elem.81f: type = unbound_element_type %A.6bc, %iN.builtin.9da [symbolic] // CHECK:STDOUT: %struct_type.base.n: type = struct_type {.base: %B, .n: %iN.builtin.9da} [symbolic] // CHECK:STDOUT: %complete_type.877: = complete_type_witness %struct_type.base.n [symbolic] @@ -89,10 +96,13 @@ fn F(a: A(0)*) { // CHECK:STDOUT: %A.32a: type = class_type @A, @A(%int_0.3c0) [concrete] // CHECK:STDOUT: %ptr.4dd: type = ptr_type %A.32a [concrete] // CHECK:STDOUT: %pattern_type.0c3: type = pattern_type %ptr.4dd [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.0c3 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.0c3 = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %ptr.432: type = ptr_type %B [concrete] // CHECK:STDOUT: %pattern_type.3c8: type = pattern_type %ptr.432 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.3c8 = value_binding_pattern b [concrete] // CHECK:STDOUT: %A.elem.dc2: type = unbound_element_type %A.32a, %B [concrete] // CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.bound.319: = bound_method %int_0.3c0, %Int.as.ImplicitAs.impl.Convert.69e [concrete] // CHECK:STDOUT: %bound_method.df0: = bound_method %int_0.3c0, %Int.as.ImplicitAs.impl.Convert.specific_fn [concrete] @@ -123,10 +133,10 @@ fn F(a: A(0)*) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Int.decl: %Int.type.9c0 = fn_decl @Int.loc2 [concrete = constants.%Int.c4a] { -// CHECK:STDOUT: %N.param_patt: %pattern_type.dc0 = value_param_pattern [concrete] -// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = at_binding_pattern N, %N.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.98f = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern %return.param_patt, %.loc2_31.1 [concrete] +// CHECK:STDOUT: %N.param_patt: %pattern_type.dc0 = value_param_pattern [concrete = constants.%N.param_patt] +// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = at_binding_pattern N, %N.param_patt [concrete = constants.%N.patt.eef] +// CHECK:STDOUT: %return.param_patt: %pattern_type.98f = out_param_pattern [concrete = constants.%return.param_patt.70e] +// CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern %return.param_patt, %.loc2_31.1 [concrete = constants.%return.patt.3ae] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc2_31.1: type = type_literal type [concrete = type] // CHECK:STDOUT: %.loc2_31.2: Core.Form = init_form %.loc2_31.1 [concrete = constants.%.805] @@ -141,7 +151,7 @@ fn F(a: A(0)*) { // CHECK:STDOUT: } // CHECK:STDOUT: %B.decl: type = class_decl @B [concrete = constants.%B] {} {} // CHECK:STDOUT: %A.decl: %A.type = class_decl @A [concrete = constants.%A.generic] { -// CHECK:STDOUT: %N.patt: %pattern_type.6b6 = symbolic_binding_pattern N, 0 [concrete] +// CHECK:STDOUT: %N.patt.loc6_10.1: %pattern_type.6b6 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc6_10.2 (constants.%N.patt.38a)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6: type = splice_block %i32 [concrete = constants.%i32] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -150,8 +160,8 @@ fn F(a: A(0)*) { // CHECK:STDOUT: %N.loc6_10.2: %i32 = symbolic_binding N, 0 [symbolic = %N.loc6_10.1 (constants.%N.37f)] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.0c3 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.0c3 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.0c3 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.0c3 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %ptr.4dd = value_param call_param0 // CHECK:STDOUT: %.loc12_13: type = splice_block %ptr.loc12 [concrete = constants.%ptr.4dd] { @@ -182,6 +192,7 @@ fn F(a: A(0)*) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @A(%N.loc6_10.2: %i32) { +// CHECK:STDOUT: %N.patt.loc6_10.2: %pattern_type.6b6 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc6_10.2 (constants.%N.patt.38a)] // CHECK:STDOUT: %N.loc6_10.1: %i32 = symbolic_binding N, 0 [symbolic = %N.loc6_10.1 (constants.%N.37f)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -192,6 +203,8 @@ fn F(a: A(0)*) { // CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.call: init Core.IntLiteral = call %bound_method(%N.loc6_10.1) [symbolic = %Int.as.ImplicitAs.impl.Convert.call (constants.%Int.as.ImplicitAs.impl.Convert.call)] // CHECK:STDOUT: %iN.builtin: type = int_type signed, %Int.as.ImplicitAs.impl.Convert.call [symbolic = %iN.builtin (constants.%iN.builtin.9da)] // CHECK:STDOUT: %require_complete: = require_complete_type %iN.builtin [symbolic = %require_complete (constants.%require_complete.468)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %iN.builtin [symbolic = %pattern_type (constants.%pattern_type.075)] +// CHECK:STDOUT: %n.patt: @A.%pattern_type (%pattern_type.075) = ref_binding_pattern n [symbolic = %n.patt (constants.%n.patt)] // CHECK:STDOUT: %A.elem.loc9: type = unbound_element_type %A, %iN.builtin [symbolic = %A.elem.loc9 (constants.%A.elem.81f)] // CHECK:STDOUT: %struct_type.base.n: type = struct_type {.base: %B, .n: @A.%iN.builtin (%iN.builtin.9da)} [symbolic = %struct_type.base.n (constants.%struct_type.base.n)] // CHECK:STDOUT: %complete_type.loc10_1.2: = complete_type_witness %struct_type.base.n [symbolic = %complete_type.loc10_1.2 (constants.%complete_type.877)] @@ -219,26 +232,28 @@ fn F(a: A(0)*) { // CHECK:STDOUT: fn @F(%a.param: %ptr.4dd) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.3c8 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.3c8 = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.ref: %ptr.4dd = name_ref a, %a -// CHECK:STDOUT: %.loc20_18: type = splice_block %ptr.loc20 [concrete = constants.%ptr.432] { -// CHECK:STDOUT: %B.ref: type = name_ref B, file.%B.decl [concrete = constants.%B] -// CHECK:STDOUT: %ptr.loc20: type = ptr_type %B.ref [concrete = constants.%ptr.432] -// CHECK:STDOUT: } // CHECK:STDOUT: %.loc20_22.1: ref %A.32a = deref %a.ref // CHECK:STDOUT: %.loc20_22.2: ref %B = class_element_access %.loc20_22.1, element0 // CHECK:STDOUT: %addr: %ptr.432 = addr_of %.loc20_22.2 // CHECK:STDOUT: %.loc20_22.3: %ptr.432 = converted %a.ref, %addr +// CHECK:STDOUT: %.loc20_18: type = splice_block %ptr.loc20 [concrete = constants.%ptr.432] { +// CHECK:STDOUT: %B.ref: type = name_ref B, file.%B.decl [concrete = constants.%B] +// CHECK:STDOUT: %ptr.loc20: type = ptr_type %B.ref [concrete = constants.%ptr.432] +// CHECK:STDOUT: } // CHECK:STDOUT: %b: %ptr.432 = value_binding b, %.loc20_22.3 // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A(constants.%N.37f) { +// CHECK:STDOUT: %N.patt.loc6_10.2 => constants.%N.patt.38a // CHECK:STDOUT: %N.loc6_10.1 => constants.%N.37f // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A(constants.%int_0.3c0) { +// CHECK:STDOUT: %N.patt.loc6_10.2 => constants.%N.patt.38a // CHECK:STDOUT: %N.loc6_10.1 => constants.%int_0.3c0 // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -249,6 +264,8 @@ fn F(a: A(0)*) { // CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.call => constants.%int_0.5c6 // CHECK:STDOUT: %iN.builtin => // CHECK:STDOUT: %require_complete => +// CHECK:STDOUT: %pattern_type => +// CHECK:STDOUT: %n.patt => // CHECK:STDOUT: %A.elem.loc9 => // CHECK:STDOUT: %struct_type.base.n => // CHECK:STDOUT: %complete_type.loc10_1.2 => diff --git a/toolchain/check/testdata/class/generic/field.carbon b/toolchain/check/testdata/class/generic/field.carbon index e78f9c55c6cc..49def9b988b4 100644 --- a/toolchain/check/testdata/class/generic/field.carbon +++ b/toolchain/check/testdata/class/generic/field.carbon @@ -39,11 +39,14 @@ fn H(U:! Core.Copy, c: Class(U)) -> U { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.d47: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Class.type: type = generic_class_type @Class [concrete] // CHECK:STDOUT: %Class.generic: %Class.type = struct_value () [concrete] // CHECK:STDOUT: %Class.7bc: type = class_type @Class, @Class(%T.67d) [symbolic] // CHECK:STDOUT: %require_complete.944: = require_complete_type %T.67d [symbolic] +// CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T.67d [symbolic] +// CHECK:STDOUT: %x.patt.719: %pattern_type.51d = ref_binding_pattern x [symbolic] // CHECK:STDOUT: %Class.elem.959: type = unbound_element_type %Class.7bc, %T.67d [symbolic] // CHECK:STDOUT: %struct_type.x.0c5: type = struct_type {.x: %T.67d} [symbolic] // CHECK:STDOUT: %complete_type.735: = complete_type_witness %struct_type.x.0c5 [symbolic] @@ -54,12 +57,17 @@ fn H(U:! Core.Copy, c: Class(U)) -> U { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Class.1b7: type = class_type @Class, @Class(%i32) [concrete] // CHECK:STDOUT: %pattern_type.5da: type = pattern_type %Class.1b7 [concrete] +// CHECK:STDOUT: %c.param_patt.b53: %pattern_type.5da = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt.a4f: %pattern_type.5da = at_binding_pattern c, %c.param_patt.b53 [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %complete_type.f8a: = complete_type_witness %i32.builtin [concrete] +// CHECK:STDOUT: %x.patt.29f: %pattern_type.6b6 = ref_binding_pattern x [concrete] // CHECK:STDOUT: %Class.elem.344: type = unbound_element_type %Class.1b7, %i32 [concrete] // CHECK:STDOUT: %struct_type.x.a15: type = struct_type {.x: %i32} [concrete] // CHECK:STDOUT: %complete_type.0c6: = complete_type_witness %struct_type.x.a15 [concrete] @@ -68,15 +76,17 @@ fn H(U:! Core.Copy, c: Class(U)) -> U { // CHECK:STDOUT: %Int.as.Copy.impl.Op.5e0: %Int.as.Copy.impl.Op.type.ac8 = struct_value () [symbolic] // CHECK:STDOUT: %T.f84: %Copy.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T.f84 [symbolic] +// CHECK:STDOUT: %pattern_type.e81: type = pattern_type %Copy.type [concrete] +// CHECK:STDOUT: %T.patt.fe6: %pattern_type.e81 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Copy.lookup_impl_witness.d9c332.1: = lookup_impl_witness %T.f84, @Copy [symbolic] // CHECK:STDOUT: %Copy.WithSelf.Op.type.c85f21.2: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%T.f84) [symbolic] // CHECK:STDOUT: %.c29330.1: type = fn_type_with_self_type %Copy.WithSelf.Op.type.c85f21.2, %T.f84 [symbolic] // CHECK:STDOUT: %impl.elem0.bd2456.1: %.c29330.1 = impl_witness_access %Copy.lookup_impl_witness.d9c332.1, element0 [symbolic] // CHECK:STDOUT: %specific_impl_fn.e2af7e.1: = specific_impl_function %impl.elem0.bd2456.1, @Copy.WithSelf.Op(%T.f84) [symbolic] -// CHECK:STDOUT: %.1ce700.2: Core.Form = init_form %T.as_type [symbolic] // CHECK:STDOUT: %pattern_type.2c66b4.2: type = pattern_type %T.as_type [symbolic] +// CHECK:STDOUT: %return.param_patt.bf4475.2: %pattern_type.2c66b4.2 = out_param_pattern [symbolic] +// CHECK:STDOUT: %.1ce700.2: Core.Form = init_form %T.as_type [symbolic] // CHECK:STDOUT: %require_complete.d83f06.1: = require_complete_type %T.as_type [symbolic] -// CHECK:STDOUT: %pattern_type.e81: type = pattern_type %Copy.type [concrete] // CHECK:STDOUT: %Copy.impl_witness.0e0: = impl_witness imports.%Copy.impl_witness_table.367, @Int.as.Copy.impl(%int_32) [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.3f6: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%int_32) [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.4f6: %Int.as.Copy.impl.Op.type.3f6 = struct_value () [concrete] @@ -86,21 +96,31 @@ fn H(U:! Core.Copy, c: Class(U)) -> U { // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.4f6, @Int.as.Copy.impl.Op(%int_32) [concrete] // CHECK:STDOUT: %Class.c74ef3.1: type = class_type @Class, @Class(%T.as_type) [symbolic] // CHECK:STDOUT: %pattern_type.6b8c16.1: type = pattern_type %Class.c74ef3.1 [symbolic] +// CHECK:STDOUT: %c.param_patt.7092f5.1: %pattern_type.6b8c16.1 = value_param_pattern [symbolic] +// CHECK:STDOUT: %c.patt.39adc7.1: %pattern_type.6b8c16.1 = at_binding_pattern c, %c.param_patt.7092f5.1 [symbolic] +// CHECK:STDOUT: %return.patt.f449d7.1: %pattern_type.2c66b4.2 = return_slot_pattern %return.param_patt.bf4475.2, %T.as_type [symbolic] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] +// CHECK:STDOUT: %x.patt.f3eeb3.1: %pattern_type.2c66b4.2 = ref_binding_pattern x [symbolic] // CHECK:STDOUT: %Class.elem.14b853.1: type = unbound_element_type %Class.c74ef3.1, %T.as_type [symbolic] // CHECK:STDOUT: %struct_type.x.ac1e9e.1: type = struct_type {.x: %T.as_type} [symbolic] // CHECK:STDOUT: %complete_type.b8dd1a.1: = complete_type_witness %struct_type.x.ac1e9e.1 [symbolic] // CHECK:STDOUT: %require_complete.3b48fd.1: = require_complete_type %Class.c74ef3.1 [symbolic] +// CHECK:STDOUT: %U.patt.fe6: %pattern_type.e81 = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %U.f84: %Copy.type = symbolic_binding U, 0 [symbolic] // CHECK:STDOUT: %U.as_type.c1c: type = facet_access_type %U.f84 [symbolic] // CHECK:STDOUT: %Class.c74ef3.2: type = class_type @Class, @Class(%U.as_type.c1c) [symbolic] // CHECK:STDOUT: %pattern_type.6b8c16.2: type = pattern_type %Class.c74ef3.2 [symbolic] +// CHECK:STDOUT: %c.param_patt.7092f5.2: %pattern_type.6b8c16.2 = value_param_pattern [symbolic] +// CHECK:STDOUT: %c.patt.39adc7.2: %pattern_type.6b8c16.2 = at_binding_pattern c, %c.param_patt.7092f5.2 [symbolic] // CHECK:STDOUT: %.1ce700.3: Core.Form = init_form %U.as_type.c1c [symbolic] // CHECK:STDOUT: %pattern_type.2c66b4.3: type = pattern_type %U.as_type.c1c [symbolic] +// CHECK:STDOUT: %return.param_patt.bf4475.3: %pattern_type.2c66b4.3 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.f449d7.2: %pattern_type.2c66b4.3 = return_slot_pattern %return.param_patt.bf4475.3, %U.as_type.c1c [symbolic] // CHECK:STDOUT: %H.type: type = fn_type @H [concrete] // CHECK:STDOUT: %H: %H.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.d83f06.2: = require_complete_type %U.as_type.c1c [symbolic] +// CHECK:STDOUT: %x.patt.f3eeb3.2: %pattern_type.2c66b4.3 = ref_binding_pattern x [symbolic] // CHECK:STDOUT: %Class.elem.14b853.2: type = unbound_element_type %Class.c74ef3.2, %U.as_type.c1c [symbolic] // CHECK:STDOUT: %struct_type.x.ac1e9e.2: type = struct_type {.x: %U.as_type.c1c} [symbolic] // CHECK:STDOUT: %complete_type.b8dd1a.2: = complete_type_witness %struct_type.x.ac1e9e.2 [symbolic] @@ -127,7 +147,7 @@ fn H(U:! Core.Copy, c: Class(U)) -> U { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %Class.decl: %Class.type = class_decl @Class [concrete = constants.%Class.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc5_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_14.2 (constants.%T.patt.d47)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc5_17.1: type = splice_block %.loc5_17.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -136,10 +156,10 @@ fn H(U:! Core.Copy, c: Class(U)) -> U { // CHECK:STDOUT: %T.loc5_14.2: type = symbolic_binding T, 0 [symbolic = %T.loc5_14.1 (constants.%T.67d)] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %c.param_patt: %pattern_type.5da = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.5da = at_binding_pattern c, %c.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc9_24 [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.5da = value_param_pattern [concrete = constants.%c.param_patt.b53] +// CHECK:STDOUT: %c.patt: %pattern_type.5da = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt.a4f] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc9_24 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc9_24: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc9_24: Core.Form = init_form %i32.loc9_24 [concrete = constants.%.795] @@ -154,11 +174,11 @@ fn H(U:! Core.Copy, c: Class(U)) -> U { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %T.patt: %pattern_type.e81 = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %c.param_patt: @G.%pattern_type.loc13_22 (%pattern_type.6b8c16.1) = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: @G.%pattern_type.loc13_22 (%pattern_type.6b8c16.1) = at_binding_pattern c, %c.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @G.%pattern_type.loc13_37 (%pattern_type.2c66b4.2) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @G.%pattern_type.loc13_37 (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt, %.loc13_37.3 [concrete] +// CHECK:STDOUT: %T.patt.loc13_7.1: %pattern_type.e81 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_7.2 (constants.%T.patt.fe6)] +// CHECK:STDOUT: %c.param_patt.loc13_22.1: @G.%pattern_type.loc13_22 (%pattern_type.6b8c16.1) = value_param_pattern [symbolic = %c.param_patt.loc13_22.2 (constants.%c.param_patt.7092f5.1)] +// CHECK:STDOUT: %c.patt.loc13_22.1: @G.%pattern_type.loc13_22 (%pattern_type.6b8c16.1) = at_binding_pattern c, %c.param_patt.loc13_22.1 [symbolic = %c.patt.loc13_22.2 (constants.%c.patt.39adc7.1)] +// CHECK:STDOUT: %return.param_patt.loc13_37.1: @G.%pattern_type.loc13_37 (%pattern_type.2c66b4.2) = out_param_pattern [symbolic = %return.param_patt.loc13_37.2 (constants.%return.param_patt.bf4475.2)] +// CHECK:STDOUT: %return.patt.loc13_34.1: @G.%pattern_type.loc13_37 (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt.loc13_37.1, %.loc13_37.3 [symbolic = %return.patt.loc13_34.2 (constants.%return.patt.f449d7.1)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc13_37: %Copy.type = name_ref T, %T.loc13_7.2 [symbolic = %T.loc13_7.1 (constants.%T.f84)] // CHECK:STDOUT: %T.as_type.loc13_37: type = facet_access_type %T.ref.loc13_37 [symbolic = %T.as_type.loc13_31.1 (constants.%T.as_type)] @@ -183,11 +203,11 @@ fn H(U:! Core.Copy, c: Class(U)) -> U { // CHECK:STDOUT: %return: ref @G.%T.as_type.loc13_31.1 (%T.as_type) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %H.decl: %H.type = fn_decl @H [concrete = constants.%H] { -// CHECK:STDOUT: %U.patt: %pattern_type.e81 = symbolic_binding_pattern U, 0 [concrete] -// CHECK:STDOUT: %c.param_patt: @H.%pattern_type.loc17_22 (%pattern_type.6b8c16.2) = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: @H.%pattern_type.loc17_22 (%pattern_type.6b8c16.2) = at_binding_pattern c, %c.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @H.%pattern_type.loc17_37 (%pattern_type.2c66b4.3) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @H.%pattern_type.loc17_37 (%pattern_type.2c66b4.3) = return_slot_pattern %return.param_patt, %.loc17_37.3 [concrete] +// CHECK:STDOUT: %U.patt.loc17_7.1: %pattern_type.e81 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc17_7.2 (constants.%U.patt.fe6)] +// CHECK:STDOUT: %c.param_patt.loc17_22.1: @H.%pattern_type.loc17_22 (%pattern_type.6b8c16.2) = value_param_pattern [symbolic = %c.param_patt.loc17_22.2 (constants.%c.param_patt.7092f5.2)] +// CHECK:STDOUT: %c.patt.loc17_22.1: @H.%pattern_type.loc17_22 (%pattern_type.6b8c16.2) = at_binding_pattern c, %c.param_patt.loc17_22.1 [symbolic = %c.patt.loc17_22.2 (constants.%c.patt.39adc7.2)] +// CHECK:STDOUT: %return.param_patt.loc17_37.1: @H.%pattern_type.loc17_37 (%pattern_type.2c66b4.3) = out_param_pattern [symbolic = %return.param_patt.loc17_37.2 (constants.%return.param_patt.bf4475.3)] +// CHECK:STDOUT: %return.patt.loc17_34.1: @H.%pattern_type.loc17_37 (%pattern_type.2c66b4.3) = return_slot_pattern %return.param_patt.loc17_37.1, %.loc17_37.3 [symbolic = %return.patt.loc17_34.2 (constants.%return.patt.f449d7.2)] // CHECK:STDOUT: } { // CHECK:STDOUT: %U.ref.loc17_37: %Copy.type = name_ref U, %U.loc17_7.2 [symbolic = %U.loc17_7.1 (constants.%U.f84)] // CHECK:STDOUT: %U.as_type.loc17_37: type = facet_access_type %U.ref.loc17_37 [symbolic = %U.as_type.loc17_31.1 (constants.%U.as_type.c1c)] @@ -214,10 +234,13 @@ fn H(U:! Core.Copy, c: Class(U)) -> U { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%T.loc5_14.2: type) { +// CHECK:STDOUT: %T.patt.loc5_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_14.2 (constants.%T.patt.d47)] // CHECK:STDOUT: %T.loc5_14.1: type = symbolic_binding T, 0 [symbolic = %T.loc5_14.1 (constants.%T.67d)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc5_14.1 [symbolic = %require_complete (constants.%require_complete.944)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc5_14.1 [symbolic = %pattern_type (constants.%pattern_type.51d)] +// CHECK:STDOUT: %x.patt: @Class.%pattern_type (%pattern_type.51d) = ref_binding_pattern x [symbolic = %x.patt (constants.%x.patt.719)] // CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T.loc5_14.1) [symbolic = %Class (constants.%Class.7bc)] // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class, %T.loc5_14.1 [symbolic = %Class.elem (constants.%Class.elem.959)] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: @Class.%T.loc5_14.1 (%T.67d)} [symbolic = %struct_type.x (constants.%struct_type.x.0c5)] @@ -250,21 +273,26 @@ fn H(U:! Core.Copy, c: Class(U)) -> U { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @G(%T.loc13_7.2: %Copy.type) { +// CHECK:STDOUT: %T.patt.loc13_7.2: %pattern_type.e81 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_7.2 (constants.%T.patt.fe6)] // CHECK:STDOUT: %T.loc13_7.1: %Copy.type = symbolic_binding T, 0 [symbolic = %T.loc13_7.1 (constants.%T.f84)] // CHECK:STDOUT: %T.as_type.loc13_31.1: type = facet_access_type %T.loc13_7.1 [symbolic = %T.as_type.loc13_31.1 (constants.%T.as_type)] // CHECK:STDOUT: %Class.loc13_31.1: type = class_type @Class, @Class(%T.as_type.loc13_31.1) [symbolic = %Class.loc13_31.1 (constants.%Class.c74ef3.1)] // CHECK:STDOUT: %pattern_type.loc13_22: type = pattern_type %Class.loc13_31.1 [symbolic = %pattern_type.loc13_22 (constants.%pattern_type.6b8c16.1)] +// CHECK:STDOUT: %c.param_patt.loc13_22.2: @G.%pattern_type.loc13_22 (%pattern_type.6b8c16.1) = value_param_pattern [symbolic = %c.param_patt.loc13_22.2 (constants.%c.param_patt.7092f5.1)] +// CHECK:STDOUT: %c.patt.loc13_22.2: @G.%pattern_type.loc13_22 (%pattern_type.6b8c16.1) = at_binding_pattern c, %c.param_patt.loc13_22.2 [symbolic = %c.patt.loc13_22.2 (constants.%c.patt.39adc7.1)] // CHECK:STDOUT: %.loc13_37.2: Core.Form = init_form %T.as_type.loc13_31.1 [symbolic = %.loc13_37.2 (constants.%.1ce700.2)] // CHECK:STDOUT: %pattern_type.loc13_37: type = pattern_type %T.as_type.loc13_31.1 [symbolic = %pattern_type.loc13_37 (constants.%pattern_type.2c66b4.2)] +// CHECK:STDOUT: %return.param_patt.loc13_37.2: @G.%pattern_type.loc13_37 (%pattern_type.2c66b4.2) = out_param_pattern [symbolic = %return.param_patt.loc13_37.2 (constants.%return.param_patt.bf4475.2)] +// CHECK:STDOUT: %return.patt.loc13_34.2: @G.%pattern_type.loc13_37 (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt.loc13_37.2, %T.as_type.loc13_31.1 [symbolic = %return.patt.loc13_34.2 (constants.%return.patt.f449d7.1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc13: = require_complete_type %Class.loc13_31.1 [symbolic = %require_complete.loc13 (constants.%require_complete.3b48fd.1)] // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class.loc13_31.1, %T.as_type.loc13_31.1 [symbolic = %Class.elem (constants.%Class.elem.14b853.1)] // CHECK:STDOUT: %require_complete.loc14: = require_complete_type %T.as_type.loc13_31.1 [symbolic = %require_complete.loc14 (constants.%require_complete.d83f06.1)] // CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%T.loc13_7.1) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.c85f21.2)] -// CHECK:STDOUT: %.loc14_11.4: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %T.loc13_7.1 [symbolic = %.loc14_11.4 (constants.%.c29330.1)] +// CHECK:STDOUT: %.loc14_11.5: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %T.loc13_7.1 [symbolic = %.loc14_11.5 (constants.%.c29330.1)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %T.loc13_7.1, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.d9c332.1)] -// CHECK:STDOUT: %impl.elem0.loc14_11.2: @G.%.loc14_11.4 (%.c29330.1) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc14_11.2 (constants.%impl.elem0.bd2456.1)] +// CHECK:STDOUT: %impl.elem0.loc14_11.2: @G.%.loc14_11.5 (%.c29330.1) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc14_11.2 (constants.%impl.elem0.bd2456.1)] // CHECK:STDOUT: %specific_impl_fn.loc14_11.2: = specific_impl_function %impl.elem0.loc14_11.2, @Copy.WithSelf.Op(%T.loc13_7.1) [symbolic = %specific_impl_fn.loc14_11.2 (constants.%specific_impl_fn.e2af7e.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%c.param: @G.%Class.loc13_31.1 (%Class.c74ef3.1)) -> out %return.param: @G.%T.as_type.loc13_31.1 (%T.as_type) { @@ -273,9 +301,10 @@ fn H(U:! Core.Copy, c: Class(U)) -> U { // CHECK:STDOUT: %x.ref: @G.%Class.elem (%Class.elem.14b853.1) = name_ref x, @Class.%.loc6 [concrete = @Class.%.loc6] // CHECK:STDOUT: %.loc14_11.1: ref @G.%T.as_type.loc13_31.1 (%T.as_type) = class_element_access %c.ref, element0 // CHECK:STDOUT: %.loc14_11.2: @G.%T.as_type.loc13_31.1 (%T.as_type) = acquire_value %.loc14_11.1 -// CHECK:STDOUT: %impl.elem0.loc14_11.1: @G.%.loc14_11.4 (%.c29330.1) = impl_witness_access constants.%Copy.lookup_impl_witness.d9c332.1, element0 [symbolic = %impl.elem0.loc14_11.2 (constants.%impl.elem0.bd2456.1)] +// CHECK:STDOUT: %impl.elem0.loc14_11.1: @G.%.loc14_11.5 (%.c29330.1) = impl_witness_access constants.%Copy.lookup_impl_witness.d9c332.1, element0 [symbolic = %impl.elem0.loc14_11.2 (constants.%impl.elem0.bd2456.1)] // CHECK:STDOUT: %bound_method.loc14_11.1: = bound_method %.loc14_11.2, %impl.elem0.loc14_11.1 // CHECK:STDOUT: %.loc14_11.3: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T.loc13_7.1 (constants.%T.f84)] +// CHECK:STDOUT: %.loc14_11.4: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T.loc13_7.1 (constants.%T.f84)] // CHECK:STDOUT: %specific_impl_fn.loc14_11.1: = specific_impl_function %impl.elem0.loc14_11.1, @Copy.WithSelf.Op(constants.%T.f84) [symbolic = %specific_impl_fn.loc14_11.2 (constants.%specific_impl_fn.e2af7e.1)] // CHECK:STDOUT: %bound_method.loc14_11.2: = bound_method %.loc14_11.2, %specific_impl_fn.loc14_11.1 // CHECK:STDOUT: %.loc13_37.1: ref @G.%T.as_type.loc13_31.1 (%T.as_type) = splice_block %return.param {} @@ -285,21 +314,26 @@ fn H(U:! Core.Copy, c: Class(U)) -> U { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @H(%U.loc17_7.2: %Copy.type) { +// CHECK:STDOUT: %U.patt.loc17_7.2: %pattern_type.e81 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc17_7.2 (constants.%U.patt.fe6)] // CHECK:STDOUT: %U.loc17_7.1: %Copy.type = symbolic_binding U, 0 [symbolic = %U.loc17_7.1 (constants.%U.f84)] // CHECK:STDOUT: %U.as_type.loc17_31.1: type = facet_access_type %U.loc17_7.1 [symbolic = %U.as_type.loc17_31.1 (constants.%U.as_type.c1c)] // CHECK:STDOUT: %Class.loc17_31.1: type = class_type @Class, @Class(%U.as_type.loc17_31.1) [symbolic = %Class.loc17_31.1 (constants.%Class.c74ef3.2)] // CHECK:STDOUT: %pattern_type.loc17_22: type = pattern_type %Class.loc17_31.1 [symbolic = %pattern_type.loc17_22 (constants.%pattern_type.6b8c16.2)] +// CHECK:STDOUT: %c.param_patt.loc17_22.2: @H.%pattern_type.loc17_22 (%pattern_type.6b8c16.2) = value_param_pattern [symbolic = %c.param_patt.loc17_22.2 (constants.%c.param_patt.7092f5.2)] +// CHECK:STDOUT: %c.patt.loc17_22.2: @H.%pattern_type.loc17_22 (%pattern_type.6b8c16.2) = at_binding_pattern c, %c.param_patt.loc17_22.2 [symbolic = %c.patt.loc17_22.2 (constants.%c.patt.39adc7.2)] // CHECK:STDOUT: %.loc17_37.2: Core.Form = init_form %U.as_type.loc17_31.1 [symbolic = %.loc17_37.2 (constants.%.1ce700.3)] // CHECK:STDOUT: %pattern_type.loc17_37: type = pattern_type %U.as_type.loc17_31.1 [symbolic = %pattern_type.loc17_37 (constants.%pattern_type.2c66b4.3)] +// CHECK:STDOUT: %return.param_patt.loc17_37.2: @H.%pattern_type.loc17_37 (%pattern_type.2c66b4.3) = out_param_pattern [symbolic = %return.param_patt.loc17_37.2 (constants.%return.param_patt.bf4475.3)] +// CHECK:STDOUT: %return.patt.loc17_34.2: @H.%pattern_type.loc17_37 (%pattern_type.2c66b4.3) = return_slot_pattern %return.param_patt.loc17_37.2, %U.as_type.loc17_31.1 [symbolic = %return.patt.loc17_34.2 (constants.%return.patt.f449d7.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc17: = require_complete_type %Class.loc17_31.1 [symbolic = %require_complete.loc17 (constants.%require_complete.3b48fd.2)] // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class.loc17_31.1, %U.as_type.loc17_31.1 [symbolic = %Class.elem (constants.%Class.elem.14b853.2)] // CHECK:STDOUT: %require_complete.loc18: = require_complete_type %U.as_type.loc17_31.1 [symbolic = %require_complete.loc18 (constants.%require_complete.d83f06.2)] // CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%U.loc17_7.1) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.c85f21.3)] -// CHECK:STDOUT: %.loc18_11.4: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %U.loc17_7.1 [symbolic = %.loc18_11.4 (constants.%.c29330.2)] +// CHECK:STDOUT: %.loc18_11.5: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %U.loc17_7.1 [symbolic = %.loc18_11.5 (constants.%.c29330.2)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %U.loc17_7.1, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.d9c332.2)] -// CHECK:STDOUT: %impl.elem0.loc18_11.2: @H.%.loc18_11.4 (%.c29330.2) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc18_11.2 (constants.%impl.elem0.bd2456.2)] +// CHECK:STDOUT: %impl.elem0.loc18_11.2: @H.%.loc18_11.5 (%.c29330.2) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc18_11.2 (constants.%impl.elem0.bd2456.2)] // CHECK:STDOUT: %specific_impl_fn.loc18_11.2: = specific_impl_function %impl.elem0.loc18_11.2, @Copy.WithSelf.Op(%U.loc17_7.1) [symbolic = %specific_impl_fn.loc18_11.2 (constants.%specific_impl_fn.e2af7e.2)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%c.param: @H.%Class.loc17_31.1 (%Class.c74ef3.2)) -> out %return.param: @H.%U.as_type.loc17_31.1 (%U.as_type.c1c) { @@ -308,9 +342,10 @@ fn H(U:! Core.Copy, c: Class(U)) -> U { // CHECK:STDOUT: %x.ref: @H.%Class.elem (%Class.elem.14b853.2) = name_ref x, @Class.%.loc6 [concrete = @Class.%.loc6] // CHECK:STDOUT: %.loc18_11.1: ref @H.%U.as_type.loc17_31.1 (%U.as_type.c1c) = class_element_access %c.ref, element0 // CHECK:STDOUT: %.loc18_11.2: @H.%U.as_type.loc17_31.1 (%U.as_type.c1c) = acquire_value %.loc18_11.1 -// CHECK:STDOUT: %impl.elem0.loc18_11.1: @H.%.loc18_11.4 (%.c29330.2) = impl_witness_access constants.%Copy.lookup_impl_witness.d9c332.2, element0 [symbolic = %impl.elem0.loc18_11.2 (constants.%impl.elem0.bd2456.2)] +// CHECK:STDOUT: %impl.elem0.loc18_11.1: @H.%.loc18_11.5 (%.c29330.2) = impl_witness_access constants.%Copy.lookup_impl_witness.d9c332.2, element0 [symbolic = %impl.elem0.loc18_11.2 (constants.%impl.elem0.bd2456.2)] // CHECK:STDOUT: %bound_method.loc18_11.1: = bound_method %.loc18_11.2, %impl.elem0.loc18_11.1 // CHECK:STDOUT: %.loc18_11.3: %Copy.type = converted constants.%U.as_type.c1c, constants.%U.f84 [symbolic = %U.loc17_7.1 (constants.%U.f84)] +// CHECK:STDOUT: %.loc18_11.4: %Copy.type = converted constants.%U.as_type.c1c, constants.%U.f84 [symbolic = %U.loc17_7.1 (constants.%U.f84)] // CHECK:STDOUT: %specific_impl_fn.loc18_11.1: = specific_impl_function %impl.elem0.loc18_11.1, @Copy.WithSelf.Op(constants.%U.f84) [symbolic = %specific_impl_fn.loc18_11.2 (constants.%specific_impl_fn.e2af7e.2)] // CHECK:STDOUT: %bound_method.loc18_11.2: = bound_method %.loc18_11.2, %specific_impl_fn.loc18_11.1 // CHECK:STDOUT: %.loc17_37.1: ref @H.%U.as_type.loc17_31.1 (%U.as_type.c1c) = splice_block %return.param {} @@ -320,14 +355,18 @@ fn H(U:! Core.Copy, c: Class(U)) -> U { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%T.67d) { +// CHECK:STDOUT: %T.patt.loc5_14.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc5_14.1 => constants.%T.67d // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%i32) { +// CHECK:STDOUT: %T.patt.loc5_14.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc5_14.1 => constants.%i32 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.f8a +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.6b6 +// CHECK:STDOUT: %x.patt => constants.%x.patt.29f // CHECK:STDOUT: %Class => constants.%Class.1b7 // CHECK:STDOUT: %Class.elem => constants.%Class.elem.344 // CHECK:STDOUT: %struct_type.x => constants.%struct_type.x.a15 @@ -335,10 +374,13 @@ fn H(U:! Core.Copy, c: Class(U)) -> U { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%T.as_type) { +// CHECK:STDOUT: %T.patt.loc5_14.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc5_14.1 => constants.%T.as_type // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.d83f06.1 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.2c66b4.2 +// CHECK:STDOUT: %x.patt => constants.%x.patt.f3eeb3.1 // CHECK:STDOUT: %Class => constants.%Class.c74ef3.1 // CHECK:STDOUT: %Class.elem => constants.%Class.elem.14b853.1 // CHECK:STDOUT: %struct_type.x => constants.%struct_type.x.ac1e9e.1 @@ -346,19 +388,27 @@ fn H(U:! Core.Copy, c: Class(U)) -> U { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%T.f84) { +// CHECK:STDOUT: %T.patt.loc13_7.2 => constants.%T.patt.fe6 // CHECK:STDOUT: %T.loc13_7.1 => constants.%T.f84 // CHECK:STDOUT: %T.as_type.loc13_31.1 => constants.%T.as_type // CHECK:STDOUT: %Class.loc13_31.1 => constants.%Class.c74ef3.1 // CHECK:STDOUT: %pattern_type.loc13_22 => constants.%pattern_type.6b8c16.1 +// CHECK:STDOUT: %c.param_patt.loc13_22.2 => constants.%c.param_patt.7092f5.1 +// CHECK:STDOUT: %c.patt.loc13_22.2 => constants.%c.patt.39adc7.1 // CHECK:STDOUT: %.loc13_37.2 => constants.%.1ce700.2 // CHECK:STDOUT: %pattern_type.loc13_37 => constants.%pattern_type.2c66b4.2 +// CHECK:STDOUT: %return.param_patt.loc13_37.2 => constants.%return.param_patt.bf4475.2 +// CHECK:STDOUT: %return.patt.loc13_34.2 => constants.%return.patt.f449d7.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%U.as_type.c1c) { +// CHECK:STDOUT: %T.patt.loc5_14.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc5_14.1 => constants.%U.as_type.c1c // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.d83f06.2 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.2c66b4.3 +// CHECK:STDOUT: %x.patt => constants.%x.patt.f3eeb3.2 // CHECK:STDOUT: %Class => constants.%Class.c74ef3.2 // CHECK:STDOUT: %Class.elem => constants.%Class.elem.14b853.2 // CHECK:STDOUT: %struct_type.x => constants.%struct_type.x.ac1e9e.2 @@ -366,11 +416,16 @@ fn H(U:! Core.Copy, c: Class(U)) -> U { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @H(constants.%U.f84) { +// CHECK:STDOUT: %U.patt.loc17_7.2 => constants.%U.patt.fe6 // CHECK:STDOUT: %U.loc17_7.1 => constants.%U.f84 // CHECK:STDOUT: %U.as_type.loc17_31.1 => constants.%U.as_type.c1c // CHECK:STDOUT: %Class.loc17_31.1 => constants.%Class.c74ef3.2 // CHECK:STDOUT: %pattern_type.loc17_22 => constants.%pattern_type.6b8c16.2 +// CHECK:STDOUT: %c.param_patt.loc17_22.2 => constants.%c.param_patt.7092f5.2 +// CHECK:STDOUT: %c.patt.loc17_22.2 => constants.%c.patt.39adc7.2 // CHECK:STDOUT: %.loc17_37.2 => constants.%.1ce700.3 // CHECK:STDOUT: %pattern_type.loc17_37 => constants.%pattern_type.2c66b4.3 +// CHECK:STDOUT: %return.param_patt.loc17_37.2 => constants.%return.param_patt.bf4475.3 +// CHECK:STDOUT: %return.patt.loc17_34.2 => constants.%return.patt.f449d7.2 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/generic/generic_vs_params.carbon b/toolchain/check/testdata/class/generic/generic_vs_params.carbon index 366de750f902..2b3149e5aeb6 100644 --- a/toolchain/check/testdata/class/generic/generic_vs_params.carbon +++ b/toolchain/check/testdata/class/generic/generic_vs_params.carbon @@ -90,6 +90,7 @@ class Foo[T:! type]; // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %GenericAndParams.type.aa5: type = generic_class_type @GenericAndParams.loc6 [concrete] // CHECK:STDOUT: %GenericAndParams.generic.128: %GenericAndParams.type.aa5 = struct_value () [concrete] @@ -98,27 +99,38 @@ class Foo[T:! type]; // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.1d0: type = class_type @C, @C(%T) [symbolic] // CHECK:STDOUT: %GenericNoParams.8d1: type = class_type @GenericNoParams, @GenericNoParams(%T) [symbolic] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %U: type = symbolic_binding U, 1 [symbolic] // CHECK:STDOUT: %GenericAndParams.type.c37: type = generic_class_type @GenericAndParams.loc10, @C(%T) [symbolic] // CHECK:STDOUT: %GenericAndParams.generic.6c8: %GenericAndParams.type.c37 = struct_value () [symbolic] // CHECK:STDOUT: %GenericAndParams.423: type = class_type @GenericAndParams.loc10, @GenericAndParams.loc10(%T, %U) [symbolic] // CHECK:STDOUT: %X: type = class_type @X [concrete] // CHECK:STDOUT: %pattern_type.2dc: type = pattern_type %NotGenericNoParams [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.2dc = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.2dc = var_pattern %a.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %NotGenericNoParams.val: %NotGenericNoParams = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.8e7: type = pattern_type %NotGenericButParams [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.8e7 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.8e7 = var_pattern %b.patt [concrete] // CHECK:STDOUT: %NotGenericButParams.val: %NotGenericButParams = struct_value () [concrete] // CHECK:STDOUT: %GenericAndParams.421: type = class_type @GenericAndParams.loc6, @GenericAndParams.loc6(%X) [concrete] // CHECK:STDOUT: %pattern_type.053: type = pattern_type %GenericAndParams.421 [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.053 = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.053 = var_pattern %c.patt [concrete] // CHECK:STDOUT: %GenericAndParams.val.83c: %GenericAndParams.421 = struct_value () [concrete] // CHECK:STDOUT: %C.a43: type = class_type @C, @C(%X) [concrete] // CHECK:STDOUT: %GenericNoParams.ee8: type = class_type @GenericNoParams, @GenericNoParams(%X) [concrete] // CHECK:STDOUT: %GenericAndParams.type.4b3: type = generic_class_type @GenericAndParams.loc10, @C(%X) [concrete] // CHECK:STDOUT: %GenericAndParams.generic.e4e: %GenericAndParams.type.4b3 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.a4a: type = pattern_type %GenericNoParams.ee8 [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.a4a = ref_binding_pattern d [concrete] +// CHECK:STDOUT: %d.var_patt: %pattern_type.a4a = var_pattern %d.patt [concrete] // CHECK:STDOUT: %GenericNoParams.val: %GenericNoParams.ee8 = struct_value () [concrete] // CHECK:STDOUT: %GenericAndParams.353: type = class_type @GenericAndParams.loc10, @GenericAndParams.loc10(%X, %X) [concrete] // CHECK:STDOUT: %pattern_type.4e2: type = pattern_type %GenericAndParams.353 [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type.4e2 = ref_binding_pattern e [concrete] +// CHECK:STDOUT: %e.var_patt: %pattern_type.4e2 = var_pattern %e.patt [concrete] // CHECK:STDOUT: %GenericAndParams.val.150: %GenericAndParams.353 = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -138,7 +150,7 @@ class Foo[T:! type]; // CHECK:STDOUT: %NotGenericNoParams.decl: type = class_decl @NotGenericNoParams [concrete = constants.%NotGenericNoParams] {} {} // CHECK:STDOUT: %NotGenericButParams.decl: %NotGenericButParams.type = class_decl @NotGenericButParams [concrete = constants.%NotGenericButParams.generic] {} {} // CHECK:STDOUT: %GenericAndParams.decl: %GenericAndParams.type.aa5 = class_decl @GenericAndParams.loc6 [concrete = constants.%GenericAndParams.generic.128] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc6_25.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_25.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6_28.1: type = splice_block %.loc6_28.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -147,7 +159,7 @@ class Foo[T:! type]; // CHECK:STDOUT: %T.loc6_25.2: type = symbolic_binding T, 0 [symbolic = %T.loc6_25.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc8_10.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_10.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8_13.1: type = splice_block %.loc8_13.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -157,15 +169,15 @@ class Foo[T:! type]; // CHECK:STDOUT: } // CHECK:STDOUT: %X.decl: type = class_decl @X [concrete = constants.%X] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.2dc = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.2dc = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.2dc = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.2dc = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %NotGenericNoParams = var %a.var_patt [concrete] // CHECK:STDOUT: %NotGenericNoParams.ref: type = name_ref NotGenericNoParams, %NotGenericNoParams.decl [concrete = constants.%NotGenericNoParams] // CHECK:STDOUT: %a: ref %NotGenericNoParams = ref_binding a, %a.var [concrete = %a.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.8e7 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.8e7 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.8e7 = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type.8e7 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %NotGenericButParams = var %b.var_patt [concrete] // CHECK:STDOUT: %.loc16: type = splice_block %NotGenericButParams [concrete = constants.%NotGenericButParams] { @@ -174,8 +186,8 @@ class Foo[T:! type]; // CHECK:STDOUT: } // CHECK:STDOUT: %b: ref %NotGenericButParams = ref_binding b, %b.var [concrete = %b.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.053 = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.053 = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.053 = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type.053 = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %GenericAndParams.421 = var %c.var_patt [concrete] // CHECK:STDOUT: %.loc17: type = splice_block %GenericAndParams.loc17 [concrete = constants.%GenericAndParams.421] { @@ -185,8 +197,8 @@ class Foo[T:! type]; // CHECK:STDOUT: } // CHECK:STDOUT: %c: ref %GenericAndParams.421 = ref_binding c, %c.var [concrete = %c.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.a4a = ref_binding_pattern d [concrete] -// CHECK:STDOUT: %d.var_patt: %pattern_type.a4a = var_pattern %d.patt [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.a4a = ref_binding_pattern d [concrete = constants.%d.patt] +// CHECK:STDOUT: %d.var_patt: %pattern_type.a4a = var_pattern %d.patt [concrete = constants.%d.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %GenericNoParams.ee8 = var %d.var_patt [concrete] // CHECK:STDOUT: %.loc18_12.1: type = splice_block %GenericNoParams.ref [concrete = constants.%GenericNoParams.ee8] { @@ -198,8 +210,8 @@ class Foo[T:! type]; // CHECK:STDOUT: } // CHECK:STDOUT: %d: ref %GenericNoParams.ee8 = ref_binding d, %d.var [concrete = %d.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %e.patt: %pattern_type.4e2 = ref_binding_pattern e [concrete] -// CHECK:STDOUT: %e.var_patt: %pattern_type.4e2 = var_pattern %e.patt [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type.4e2 = ref_binding_pattern e [concrete = constants.%e.patt] +// CHECK:STDOUT: %e.var_patt: %pattern_type.4e2 = var_pattern %e.patt [concrete = constants.%e.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %e.var: ref %GenericAndParams.353 = var %e.var_patt [concrete] // CHECK:STDOUT: %.loc19_31: type = splice_block %GenericAndParams.loc19 [concrete = constants.%GenericAndParams.353] { @@ -231,6 +243,7 @@ class Foo[T:! type]; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @GenericAndParams.loc6(%T.loc6_25.2: type) { +// CHECK:STDOUT: %T.patt.loc6_25.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_25.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc6_25.1: type = symbolic_binding T, 0 [symbolic = %T.loc6_25.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -245,6 +258,7 @@ class Foo[T:! type]; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc8_10.2: type) { +// CHECK:STDOUT: %T.patt.loc8_10.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_10.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc8_10.1: type = symbolic_binding T, 0 [symbolic = %T.loc8_10.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -255,7 +269,7 @@ class Foo[T:! type]; // CHECK:STDOUT: class { // CHECK:STDOUT: %GenericNoParams.decl: type = class_decl @GenericNoParams [symbolic = @C.%GenericNoParams (constants.%GenericNoParams.8d1)] {} {} // CHECK:STDOUT: %GenericAndParams.decl: @C.%GenericAndParams.type (%GenericAndParams.type.c37) = class_decl @GenericAndParams.loc10 [symbolic = @C.%GenericAndParams.generic (constants.%GenericAndParams.generic.6c8)] { -// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [concrete] +// CHECK:STDOUT: %U.patt.loc10_27.1: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc10_27.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc10_30.1: type = splice_block %.loc10_30.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -286,6 +300,7 @@ class Foo[T:! type]; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @GenericAndParams.loc10(@C.%T.loc8_10.2: type, %U.loc10_27.2: type) { +// CHECK:STDOUT: %U.patt.loc10_27.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc10_27.2 (constants.%U.patt)] // CHECK:STDOUT: %U.loc10_27.1: type = symbolic_binding U, 1 [symbolic = %U.loc10_27.1 (constants.%U)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -333,26 +348,31 @@ class Foo[T:! type]; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @GenericAndParams.loc6(constants.%T) { +// CHECK:STDOUT: %T.patt.loc6_25.2 => constants.%T.patt // CHECK:STDOUT: %T.loc6_25.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%T) { +// CHECK:STDOUT: %T.patt.loc8_10.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_10.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @GenericNoParams(constants.%T) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @GenericAndParams.loc10(constants.%T, constants.%U) { +// CHECK:STDOUT: %U.patt.loc10_27.2 => constants.%U.patt // CHECK:STDOUT: %U.loc10_27.1 => constants.%U // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @GenericAndParams.loc6(constants.%X) { +// CHECK:STDOUT: %T.patt.loc6_25.2 => constants.%T.patt // CHECK:STDOUT: %T.loc6_25.1 => constants.%X // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%X) { +// CHECK:STDOUT: %T.patt.loc8_10.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_10.1 => constants.%X // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -366,6 +386,7 @@ class Foo[T:! type]; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @GenericAndParams.loc10(constants.%X, constants.%X) { +// CHECK:STDOUT: %U.patt.loc10_27.2 => constants.%U.patt // CHECK:STDOUT: %U.loc10_27.1 => constants.%X // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -407,6 +428,7 @@ class Foo[T:! type]; // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] @@ -419,7 +441,7 @@ class Foo[T:! type]; // CHECK:STDOUT: } // CHECK:STDOUT: %A.decl: %A.type = class_decl @A [concrete = constants.%A.generic] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc11_7.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_7.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc11_10.1: type = splice_block %.loc11_10.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -438,6 +460,7 @@ class Foo[T:! type]; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc11_7.2: type) { +// CHECK:STDOUT: %T.patt.loc11_7.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_7.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc11_7.1: type = symbolic_binding T, 0 [symbolic = %T.loc11_7.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -452,6 +475,7 @@ class Foo[T:! type]; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T) { +// CHECK:STDOUT: %T.patt.loc11_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc11_7.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -477,6 +501,7 @@ class Foo[T:! type]; // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Foo.type: type = generic_class_type @Foo [concrete] // CHECK:STDOUT: %Foo.generic: %Foo.type = struct_value () [concrete] @@ -487,7 +512,7 @@ class Foo[T:! type]; // CHECK:STDOUT: .Foo = %Foo.decl // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl: %Foo.type = class_decl @Foo [concrete = constants.%Foo.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc8_12.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_12.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8_15.1: type = splice_block %.loc8_15.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -498,12 +523,14 @@ class Foo[T:! type]; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Foo(%T.loc8_12.2: type) { +// CHECK:STDOUT: %T.patt.loc8_12.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_12.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc8_12.1: type = symbolic_binding T, 0 [symbolic = %T.loc8_12.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo(constants.%T) { +// CHECK:STDOUT: %T.patt.loc8_12.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_12.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/generic/import.carbon b/toolchain/check/testdata/class/generic/import.carbon index bef89b0dcab5..a86e50ea9c00 100644 --- a/toolchain/check/testdata/class/generic/import.carbon +++ b/toolchain/check/testdata/class/generic/import.carbon @@ -94,6 +94,7 @@ class Class(U:! type) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Class.type: type = generic_class_type @Class [concrete] // CHECK:STDOUT: %Class.generic: %Class.type = struct_value () [concrete] @@ -107,6 +108,8 @@ class Class(U:! type) { // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %CompleteClass.elem: type = unbound_element_type %CompleteClass.bae, %i32 [symbolic] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %CompleteClass.F.type: type = fn_type @CompleteClass.F, @CompleteClass(%T) [symbolic] // CHECK:STDOUT: %CompleteClass.F: %CompleteClass.F.type = struct_value () [symbolic] // CHECK:STDOUT: %struct_type.n: type = struct_type {.n: %i32} [concrete] @@ -131,6 +134,8 @@ class Class(U:! type) { // CHECK:STDOUT: %CompleteClass.d55: type = class_type @CompleteClass, @CompleteClass(%i32) [concrete] // CHECK:STDOUT: %.290: Core.Form = init_form %CompleteClass.d55 [concrete] // CHECK:STDOUT: %pattern_type.97d: type = pattern_type %CompleteClass.d55 [concrete] +// CHECK:STDOUT: %return.param_patt.e24: %pattern_type.97d = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.639: %pattern_type.97d = return_slot_pattern %return.param_patt.e24, %CompleteClass.d55 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -157,7 +162,7 @@ class Class(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: %Class.type = class_decl @Class [concrete = constants.%Class.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc4_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_17.1: type = splice_block %.loc4_17.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -166,7 +171,7 @@ class Class(U:! type) { // CHECK:STDOUT: %T.loc4_14.2: type = symbolic_binding T, 0 [symbolic = %T.loc4_14.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %CompleteClass.decl: %CompleteClass.type = class_decl @CompleteClass [concrete = constants.%CompleteClass.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc6_22.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_22.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6_25.1: type = splice_block %.loc6_25.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -175,8 +180,8 @@ class Class(U:! type) { // CHECK:STDOUT: %T.loc6_22.2: type = symbolic_binding T, 0 [symbolic = %T.loc6_22.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.97d = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.97d = return_slot_pattern %return.param_patt, %CompleteClass [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.97d = out_param_pattern [concrete = constants.%return.param_patt.e24] +// CHECK:STDOUT: %return.patt: %pattern_type.97d = return_slot_pattern %return.param_patt, %CompleteClass [concrete = constants.%return.patt.639] // CHECK:STDOUT: } { // CHECK:STDOUT: %CompleteClass.ref: %CompleteClass.type = name_ref CompleteClass, file.%CompleteClass.decl [concrete = constants.%CompleteClass.generic] // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] @@ -188,12 +193,14 @@ class Class(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%T.loc4_14.2: type) { +// CHECK:STDOUT: %T.patt.loc4_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_14.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_14.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @CompleteClass(%T.loc6_22.2: type) { +// CHECK:STDOUT: %T.patt.loc6_22.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_22.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc6_22.1: type = symbolic_binding T, 0 [symbolic = %T.loc6_22.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -205,8 +212,8 @@ class Class(U:! type) { // CHECK:STDOUT: class { // CHECK:STDOUT: %.loc7: @CompleteClass.%CompleteClass.elem (%CompleteClass.elem) = field_decl n, element0 [concrete] // CHECK:STDOUT: %CompleteClass.F.decl: @CompleteClass.%CompleteClass.F.type (%CompleteClass.F.type) = fn_decl @CompleteClass.F [symbolic = @CompleteClass.%CompleteClass.F (constants.%CompleteClass.F)] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc8_13: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -242,10 +249,12 @@ class Class(U:! type) { // CHECK:STDOUT: fn @F() -> out %return.param: %CompleteClass.d55; // CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_14.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_14.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @CompleteClass(constants.%T) { +// CHECK:STDOUT: %T.patt.loc6_22.2 => constants.%T.patt // CHECK:STDOUT: %T.loc6_22.1 => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -258,6 +267,7 @@ class Class(U:! type) { // CHECK:STDOUT: specific @CompleteClass.F(constants.%T) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @CompleteClass(constants.%i32) { +// CHECK:STDOUT: %T.patt.loc6_22.2 => constants.%T.patt // CHECK:STDOUT: %T.loc6_22.1 => constants.%i32 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -274,11 +284,14 @@ class Class(U:! type) { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.845: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.e74 = struct_value () [symbolic] // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Class.type: type = generic_class_type @Class [concrete] // CHECK:STDOUT: %Class.generic: %Class.type = struct_value () [concrete] // CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T) [symbolic] // CHECK:STDOUT: %require_complete.944: = require_complete_type %T [symbolic] +// CHECK:STDOUT: %pattern_type.51d1c4.2: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %x.patt: %pattern_type.51d1c4.2 = ref_binding_pattern x [symbolic] // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class, %T [symbolic] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %T} [symbolic] // CHECK:STDOUT: %complete_type.735: = complete_type_witness %struct_type.x [symbolic] @@ -295,6 +308,8 @@ class Class(U:! type) { // CHECK:STDOUT: %CompleteClass.d55: type = class_type @CompleteClass, @CompleteClass(%i32) [concrete] // CHECK:STDOUT: %.290: Core.Form = init_form %CompleteClass.d55 [concrete] // CHECK:STDOUT: %pattern_type.97d: type = pattern_type %CompleteClass.d55 [concrete] +// CHECK:STDOUT: %return.param_patt.e24: %pattern_type.97d = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.639: %pattern_type.97d = return_slot_pattern %return.param_patt.e24, %CompleteClass.d55 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %CompleteClass.elem.2cc: type = unbound_element_type %CompleteClass.d55, %i32 [concrete] @@ -349,7 +364,7 @@ class Class(U:! type) { // CHECK:STDOUT: %default.import.loc2_19.2 = import // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: %Class.type = class_decl @Class [concrete = constants.%Class.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc4: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.1 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_17.1: type = splice_block %.loc4_17.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -358,8 +373,8 @@ class Class(U:! type) { // CHECK:STDOUT: %T.loc4: type = symbolic_binding T, 0 [symbolic = %T.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.97d = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.97d = return_slot_pattern %return.param_patt, %CompleteClass [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.97d = out_param_pattern [concrete = constants.%return.param_patt.e24] +// CHECK:STDOUT: %return.patt: %pattern_type.97d = return_slot_pattern %return.param_patt, %CompleteClass [concrete = constants.%return.patt.639] // CHECK:STDOUT: } { // CHECK:STDOUT: %CompleteClass.ref: %CompleteClass.type = name_ref CompleteClass, imports.%Main.CompleteClass [concrete = constants.%CompleteClass.generic] // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] @@ -371,10 +386,13 @@ class Class(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(imports.%Main.import_ref.b3bc94.1: type) { +// CHECK:STDOUT: %T.patt.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.1 (constants.%T.patt)] // CHECK:STDOUT: %T.1: type = symbolic_binding T, 0 [symbolic = %T.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.1 [symbolic = %require_complete (constants.%require_complete.944)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.1 [symbolic = %pattern_type (constants.%pattern_type.51d1c4.2)] +// CHECK:STDOUT: %x.patt: @Class.%pattern_type (%pattern_type.51d1c4.2) = ref_binding_pattern x [symbolic = %x.patt (constants.%x.patt)] // CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T.1) [symbolic = %Class (constants.%Class)] // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class, %T.1 [symbolic = %Class.elem (constants.%Class.elem)] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: @Class.%T.1 (%T)} [symbolic = %struct_type.x (constants.%struct_type.x)] @@ -393,6 +411,7 @@ class Class(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @CompleteClass(imports.%Main.import_ref.b3bc94.3: type) [from "foo.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -435,10 +454,12 @@ class Class(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%T) { +// CHECK:STDOUT: %T.patt.1 => constants.%T.patt // CHECK:STDOUT: %T.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @CompleteClass(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -451,6 +472,7 @@ class Class(U:! type) { // CHECK:STDOUT: specific @CompleteClass.F(constants.%T) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @CompleteClass(constants.%i32) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%i32 // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -471,6 +493,8 @@ class Class(U:! type) { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %UseMethod.type: type = fn_type @UseMethod [concrete] // CHECK:STDOUT: %UseMethod: %UseMethod.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] @@ -483,11 +507,15 @@ class Class(U:! type) { // CHECK:STDOUT: %CompleteClass.F.type.4ea: type = fn_type @CompleteClass.F, @CompleteClass(%T.67d) [symbolic] // CHECK:STDOUT: %CompleteClass.F.c7a: %CompleteClass.F.type.4ea = struct_value () [symbolic] // CHECK:STDOUT: %CompleteClass.elem.c1f: type = unbound_element_type %CompleteClass.bae, %i32 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.d47: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %CompleteClass.d55: type = class_type @CompleteClass, @CompleteClass(%i32) [concrete] // CHECK:STDOUT: %CompleteClass.elem.2cc: type = unbound_element_type %CompleteClass.d55, %i32 [concrete] // CHECK:STDOUT: %CompleteClass.F.type.dac: type = fn_type @CompleteClass.F, @CompleteClass(%i32) [concrete] // CHECK:STDOUT: %CompleteClass.F.623: %CompleteClass.F.type.dac = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.97d: type = pattern_type %CompleteClass.d55 [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.97d = ref_binding_pattern v [concrete] +// CHECK:STDOUT: %v.var_patt: %pattern_type.97d = var_pattern %v.patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %CompleteClass.F.specific_fn: = specific_function %CompleteClass.F.623, @CompleteClass.F(%i32) [concrete] @@ -545,8 +573,8 @@ class Class(U:! type) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %UseMethod.decl: %UseMethod.type = fn_decl @UseMethod [concrete = constants.%UseMethod] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc5 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc5 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc5: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc5: Core.Form = init_form %i32.loc5 [concrete = constants.%.795] @@ -554,8 +582,8 @@ class Class(U:! type) { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %UseField.decl: %UseField.type = fn_decl @UseField [concrete = constants.%UseField] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc10 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc10 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc10: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc10: Core.Form = init_form %i32.loc10 [concrete = constants.%.795] @@ -565,6 +593,7 @@ class Class(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @CompleteClass(imports.%Main.import_ref.b3bc94.2: type) [from "foo.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt.d47)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T.67d)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -586,8 +615,8 @@ class Class(U:! type) { // CHECK:STDOUT: fn @UseMethod() -> out %return.param: %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %pattern_type.97d = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: %pattern_type.97d = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.97d = ref_binding_pattern v [concrete = constants.%v.patt] +// CHECK:STDOUT: %v.var_patt: %pattern_type.97d = var_pattern %v.patt [concrete = constants.%v.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %CompleteClass.d55 = var %v.var_patt // CHECK:STDOUT: %F.ref.loc6: %F.type = name_ref F, imports.%Main.F [concrete = constants.%F] @@ -638,8 +667,8 @@ class Class(U:! type) { // CHECK:STDOUT: fn @UseField() -> out %return.param: %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %pattern_type.97d = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: %pattern_type.97d = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.97d = ref_binding_pattern v [concrete = constants.%v.patt] +// CHECK:STDOUT: %v.var_patt: %pattern_type.97d = var_pattern %v.patt [concrete = constants.%v.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %CompleteClass.d55 = var %v.var_patt // CHECK:STDOUT: %F.ref: %F.type = name_ref F, imports.%Main.F [concrete = constants.%F] @@ -667,6 +696,7 @@ class Class(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @CompleteClass(constants.%T.67d) { +// CHECK:STDOUT: %T.patt => constants.%T.patt.d47 // CHECK:STDOUT: %T => constants.%T.67d // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -679,6 +709,7 @@ class Class(U:! type) { // CHECK:STDOUT: specific @CompleteClass.F(constants.%T.67d) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @CompleteClass(constants.%i32) { +// CHECK:STDOUT: %T.patt => constants.%T.patt.d47 // CHECK:STDOUT: %T => constants.%i32 // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -712,12 +743,16 @@ class Class(U:! type) { // CHECK:STDOUT: %CompleteClass.F.type.4ea: type = fn_type @CompleteClass.F, @CompleteClass(%T) [symbolic] // CHECK:STDOUT: %CompleteClass.F.c7a: %CompleteClass.F.type.4ea = struct_value () [symbolic] // CHECK:STDOUT: %CompleteClass.elem.c1f: type = unbound_element_type %CompleteClass.bae, %i32 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %ptr.d08: type = ptr_type %i32 [concrete] // CHECK:STDOUT: %CompleteClass.22b: type = class_type @CompleteClass, @CompleteClass(%ptr.d08) [concrete] // CHECK:STDOUT: %CompleteClass.elem.014: type = unbound_element_type %CompleteClass.22b, %i32 [concrete] // CHECK:STDOUT: %CompleteClass.F.type.a78: type = fn_type @CompleteClass.F, @CompleteClass(%ptr.d08) [concrete] // CHECK:STDOUT: %CompleteClass.F.819: %CompleteClass.F.type.a78 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.ff3: type = pattern_type %CompleteClass.22b [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.ff3 = ref_binding_pattern v [concrete] +// CHECK:STDOUT: %v.var_patt: %pattern_type.ff3 = var_pattern %v.patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %CompleteClass.d55: type = class_type @CompleteClass, @CompleteClass(%i32) [concrete] @@ -767,6 +802,7 @@ class Class(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @CompleteClass(imports.%Main.import_ref.b3bc94.2: type) [from "foo.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -788,8 +824,8 @@ class Class(U:! type) { // CHECK:STDOUT: fn @Use() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %pattern_type.ff3 = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: %pattern_type.ff3 = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.ff3 = ref_binding_pattern v [concrete = constants.%v.patt] +// CHECK:STDOUT: %v.var_patt: %pattern_type.ff3 = var_pattern %v.patt [concrete = constants.%v.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %CompleteClass.22b = var %v.var_patt // CHECK:STDOUT: %F.ref: %F.type = name_ref F, imports.%Main.F [concrete = constants.%F] @@ -835,6 +871,7 @@ class Class(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @CompleteClass(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -847,6 +884,7 @@ class Class(U:! type) { // CHECK:STDOUT: specific @CompleteClass.F(constants.%T) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @CompleteClass(constants.%ptr.d08) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%ptr.d08 // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -857,6 +895,7 @@ class Class(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @CompleteClass(constants.%i32) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%i32 // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -872,10 +911,12 @@ class Class(U:! type) { // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %U: type = symbolic_binding U, 0 [symbolic] // CHECK:STDOUT: %Class.type.3256be.1: type = generic_class_type @Class.1 [concrete] // CHECK:STDOUT: %Class.generic.4154f7.1: %Class.type.3256be.1 = struct_value () [concrete] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Class.type.3256be.2: type = generic_class_type @Class.loc12 [concrete] // CHECK:STDOUT: %Class.generic.4154f7.2: %Class.type.3256be.2 = struct_value () [concrete] // CHECK:STDOUT: %Class.7bcfd6.2: type = class_type @Class.loc12, @Class.loc12(%U) [symbolic] @@ -904,7 +945,7 @@ class Class(U:! type) { // CHECK:STDOUT: %default.import.loc2_19.2 = import // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: %Class.type.3256be.2 = class_decl @Class.loc12 [concrete = constants.%Class.generic.4154f7.2] { -// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [concrete] +// CHECK:STDOUT: %U.patt.loc12_14.1: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc12_14.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc12_17.1: type = splice_block %.loc12_17.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -915,12 +956,14 @@ class Class(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Class.1(imports.%Main.import_ref.b3b: type) [from "foo.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Class.loc12(%U.loc12_14.2: type) { +// CHECK:STDOUT: %U.patt.loc12_14.2: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc12_14.2 (constants.%U.patt)] // CHECK:STDOUT: %U.loc12_14.1: type = symbolic_binding U, 0 [symbolic = %U.loc12_14.1 (constants.%U)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -938,10 +981,12 @@ class Class(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class.1(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class.loc12(constants.%U) { +// CHECK:STDOUT: %U.patt.loc12_14.2 => constants.%U.patt // CHECK:STDOUT: %U.loc12_14.1 => constants.%U // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/generic/init.carbon b/toolchain/check/testdata/class/generic/init.carbon index 6ef9a966931f..c8b2e99a7327 100644 --- a/toolchain/check/testdata/class/generic/init.carbon +++ b/toolchain/check/testdata/class/generic/init.carbon @@ -71,10 +71,15 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: %type.as.BitAndWith.impl.Op.bound: = bound_method %Copy.type, %type.as.BitAndWith.impl.Op [concrete] // CHECK:STDOUT: %facet_type: type = facet_type <@Destroy & @Copy> [concrete] // CHECK:STDOUT: %pattern_type.709: type = pattern_type %facet_type [concrete] +// CHECK:STDOUT: %T.patt.478: %pattern_type.709 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.283: %facet_type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.74b: type = facet_access_type %T.283 [symbolic] // CHECK:STDOUT: %pattern_type.44a: type = pattern_type %T.as_type.74b [symbolic] +// CHECK:STDOUT: %x.param_patt.e3c: %pattern_type.44a = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.a06: %pattern_type.44a = at_binding_pattern x, %x.param_patt.e3c [symbolic] // CHECK:STDOUT: %.2b9: Core.Form = init_form %T.as_type.74b [symbolic] +// CHECK:STDOUT: %return.param_patt.7e9: %pattern_type.44a = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.c4f: %pattern_type.44a = return_slot_pattern %return.param_patt.7e9, %T.as_type.74b [symbolic] // CHECK:STDOUT: %InitFromStructGeneric.type: type = fn_type @InitFromStructGeneric [concrete] // CHECK:STDOUT: %InitFromStructGeneric: %InitFromStructGeneric.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.44d: = require_complete_type %T.as_type.74b [symbolic] @@ -85,6 +90,8 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: %struct_type.k.aa4: type = struct_type {.k: %T.as_type.74b} [symbolic] // CHECK:STDOUT: %require_complete.ff5: = require_complete_type %Class.55b [symbolic] // CHECK:STDOUT: %pattern_type.0b6: type = pattern_type %Class.55b [symbolic] +// CHECK:STDOUT: %v.patt.ef6: %pattern_type.0b6 = ref_binding_pattern v [symbolic] +// CHECK:STDOUT: %v.var_patt.8cf: %pattern_type.0b6 = var_pattern %v.patt.ef6 [symbolic] // CHECK:STDOUT: %Copy.lookup_impl_witness.4df: = lookup_impl_witness %T.283, @Copy [symbolic] // CHECK:STDOUT: %Copy.facet.3f0: %Copy.type = facet_value %T.as_type.74b, (%Copy.lookup_impl_witness.4df) [symbolic] // CHECK:STDOUT: %Copy.WithSelf.Op.type.090: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.3f0) [symbolic] @@ -103,7 +110,11 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %x.param_patt.cee: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.fbe: %pattern_type.6b6 = at_binding_pattern x, %x.param_patt.cee [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %InitFromStructSpecific.type: type = fn_type @InitFromStructSpecific [concrete] // CHECK:STDOUT: %InitFromStructSpecific: %InitFromStructSpecific.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] @@ -115,6 +126,8 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: %Class.elem.8f3: type = unbound_element_type %Class.a32, %i32 [concrete] // CHECK:STDOUT: %struct_type.k.e7c: type = struct_type {.k: %i32} [concrete] // CHECK:STDOUT: %pattern_type.82c: type = pattern_type %Class.a32 [concrete] +// CHECK:STDOUT: %v.patt.675: %pattern_type.82c = ref_binding_pattern v [concrete] +// CHECK:STDOUT: %v.var_patt.68c: %pattern_type.82c = var_pattern %v.patt.675 [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.ac8: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N) [symbolic] // CHECK:STDOUT: %Int.as.Copy.impl.Op.5e0: %Int.as.Copy.impl.Op.type.ac8 = struct_value () [symbolic] // CHECK:STDOUT: %Copy.impl_witness.0e0: = impl_witness imports.%Copy.impl_witness_table.367, @Int.as.Copy.impl(%int_32) [concrete] @@ -149,11 +162,11 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %InitFromStructGeneric.decl: %InitFromStructGeneric.type = fn_decl @InitFromStructGeneric [concrete = constants.%InitFromStructGeneric] { -// CHECK:STDOUT: %T.patt: %pattern_type.709 = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %x.param_patt: @InitFromStructGeneric.%pattern_type.loc9 (%pattern_type.44a) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @InitFromStructGeneric.%pattern_type.loc9 (%pattern_type.44a) = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @InitFromStructGeneric.%pattern_type.loc9 (%pattern_type.44a) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @InitFromStructGeneric.%pattern_type.loc9 (%pattern_type.44a) = return_slot_pattern %return.param_patt, %.loc9_65.3 [concrete] +// CHECK:STDOUT: %T.patt.loc9_27.1: %pattern_type.709 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_27.2 (constants.%T.patt.478)] +// CHECK:STDOUT: %x.param_patt.loc9_57.1: @InitFromStructGeneric.%pattern_type.loc9 (%pattern_type.44a) = value_param_pattern [symbolic = %x.param_patt.loc9_57.2 (constants.%x.param_patt.e3c)] +// CHECK:STDOUT: %x.patt.loc9_57.1: @InitFromStructGeneric.%pattern_type.loc9 (%pattern_type.44a) = at_binding_pattern x, %x.param_patt.loc9_57.1 [symbolic = %x.patt.loc9_57.2 (constants.%x.patt.a06)] +// CHECK:STDOUT: %return.param_patt.loc9_65.1: @InitFromStructGeneric.%pattern_type.loc9 (%pattern_type.44a) = out_param_pattern [symbolic = %return.param_patt.loc9_65.2 (constants.%return.param_patt.7e9)] +// CHECK:STDOUT: %return.patt.loc9_62.1: @InitFromStructGeneric.%pattern_type.loc9 (%pattern_type.44a) = return_slot_pattern %return.param_patt.loc9_65.1, %.loc9_65.3 [symbolic = %return.patt.loc9_62.2 (constants.%return.patt.c4f)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc9_65: %facet_type = name_ref T, %T.loc9_27.2 [symbolic = %T.loc9_27.1 (constants.%T.283)] // CHECK:STDOUT: %T.as_type.loc9_65: type = facet_access_type %T.ref.loc9_65 [symbolic = %T.as_type.loc9_59.1 (constants.%T.as_type.74b)] @@ -183,10 +196,10 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: %return: ref @InitFromStructGeneric.%T.as_type.loc9_59.1 (%T.as_type.74b) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %InitFromStructSpecific.decl: %InitFromStructSpecific.type = fn_decl @InitFromStructSpecific [concrete = constants.%InitFromStructSpecific] { -// CHECK:STDOUT: %x.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc14_38 [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%x.param_patt.cee] +// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt.fbe] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc14_38 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc14_38: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc14: Core.Form = init_form %i32.loc14_38 [concrete = constants.%.795] @@ -199,10 +212,15 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @InitFromStructGeneric(%T.loc9_27.2: %facet_type) { +// CHECK:STDOUT: %T.patt.loc9_27.2: %pattern_type.709 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_27.2 (constants.%T.patt.478)] // CHECK:STDOUT: %T.loc9_27.1: %facet_type = symbolic_binding T, 0 [symbolic = %T.loc9_27.1 (constants.%T.283)] // CHECK:STDOUT: %T.as_type.loc9_59.1: type = facet_access_type %T.loc9_27.1 [symbolic = %T.as_type.loc9_59.1 (constants.%T.as_type.74b)] // CHECK:STDOUT: %pattern_type.loc9: type = pattern_type %T.as_type.loc9_59.1 [symbolic = %pattern_type.loc9 (constants.%pattern_type.44a)] +// CHECK:STDOUT: %x.param_patt.loc9_57.2: @InitFromStructGeneric.%pattern_type.loc9 (%pattern_type.44a) = value_param_pattern [symbolic = %x.param_patt.loc9_57.2 (constants.%x.param_patt.e3c)] +// CHECK:STDOUT: %x.patt.loc9_57.2: @InitFromStructGeneric.%pattern_type.loc9 (%pattern_type.44a) = at_binding_pattern x, %x.param_patt.loc9_57.2 [symbolic = %x.patt.loc9_57.2 (constants.%x.patt.a06)] // CHECK:STDOUT: %.loc9_65.2: Core.Form = init_form %T.as_type.loc9_59.1 [symbolic = %.loc9_65.2 (constants.%.2b9)] +// CHECK:STDOUT: %return.param_patt.loc9_65.2: @InitFromStructGeneric.%pattern_type.loc9 (%pattern_type.44a) = out_param_pattern [symbolic = %return.param_patt.loc9_65.2 (constants.%return.param_patt.7e9)] +// CHECK:STDOUT: %return.patt.loc9_62.2: @InitFromStructGeneric.%pattern_type.loc9 (%pattern_type.44a) = return_slot_pattern %return.param_patt.loc9_65.2, %T.as_type.loc9_59.1 [symbolic = %return.patt.loc9_62.2 (constants.%return.patt.c4f)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc9: = require_complete_type %T.as_type.loc9_59.1 [symbolic = %require_complete.loc9 (constants.%require_complete.44d)] @@ -211,34 +229,38 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: %Class.loc10_17.2: type = class_type @Class, @Class(%Destroy.facet.loc10_17.2) [symbolic = %Class.loc10_17.2 (constants.%Class.55b)] // CHECK:STDOUT: %require_complete.loc10: = require_complete_type %Class.loc10_17.2 [symbolic = %require_complete.loc10 (constants.%require_complete.ff5)] // CHECK:STDOUT: %pattern_type.loc10: type = pattern_type %Class.loc10_17.2 [symbolic = %pattern_type.loc10 (constants.%pattern_type.0b6)] +// CHECK:STDOUT: %v.patt.loc10_8.2: @InitFromStructGeneric.%pattern_type.loc10 (%pattern_type.0b6) = ref_binding_pattern v [symbolic = %v.patt.loc10_8.2 (constants.%v.patt.ef6)] +// CHECK:STDOUT: %v.var_patt.loc10_3.2: @InitFromStructGeneric.%pattern_type.loc10 (%pattern_type.0b6) = var_pattern %v.patt.loc10_8.2 [symbolic = %v.var_patt.loc10_3.2 (constants.%v.var_patt.8cf)] // CHECK:STDOUT: %struct_type.k: type = struct_type {.k: @InitFromStructGeneric.%T.as_type.loc9_59.1 (%T.as_type.74b)} [symbolic = %struct_type.k (constants.%struct_type.k.aa4)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %T.loc9_27.1, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.4df)] -// CHECK:STDOUT: %Copy.facet.loc10_27.2: %Copy.type = facet_value %T.as_type.loc9_59.1, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc10_27.2 (constants.%Copy.facet.3f0)] -// CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.loc10_27.2) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.090)] -// CHECK:STDOUT: %.loc10_27.2: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %Copy.facet.loc10_27.2 [symbolic = %.loc10_27.2 (constants.%.018)] -// CHECK:STDOUT: %impl.elem0.loc10_27.2: @InitFromStructGeneric.%.loc10_27.2 (%.018) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc10_27.2 (constants.%impl.elem0.170)] -// CHECK:STDOUT: %specific_impl_fn.loc10_27.2: = specific_impl_function %impl.elem0.loc10_27.2, @Copy.WithSelf.Op(%Copy.facet.loc10_27.2) [symbolic = %specific_impl_fn.loc10_27.2 (constants.%specific_impl_fn.be5)] +// CHECK:STDOUT: %Copy.facet.loc10_27.3: %Copy.type = facet_value %T.as_type.loc9_59.1, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc10_27.3 (constants.%Copy.facet.3f0)] +// CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.loc10_27.3) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.090)] +// CHECK:STDOUT: %.loc10_27.3: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %Copy.facet.loc10_27.3 [symbolic = %.loc10_27.3 (constants.%.018)] +// CHECK:STDOUT: %impl.elem0.loc10_27.2: @InitFromStructGeneric.%.loc10_27.3 (%.018) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc10_27.2 (constants.%impl.elem0.170)] +// CHECK:STDOUT: %specific_impl_fn.loc10_27.2: = specific_impl_function %impl.elem0.loc10_27.2, @Copy.WithSelf.Op(%Copy.facet.loc10_27.3) [symbolic = %specific_impl_fn.loc10_27.2 (constants.%specific_impl_fn.be5)] // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class.loc10_17.2, %T.as_type.loc9_59.1 [symbolic = %Class.elem (constants.%Class.elem.b97)] // CHECK:STDOUT: %Destroy.lookup_impl_witness.loc10_3: = lookup_impl_witness %Class.loc10_17.2, @Destroy [symbolic = %Destroy.lookup_impl_witness.loc10_3 (constants.%Destroy.lookup_impl_witness.62e)] -// CHECK:STDOUT: %Destroy.facet.loc10_3.2: %Destroy.type = facet_value %Class.loc10_17.2, (%Destroy.lookup_impl_witness.loc10_3) [symbolic = %Destroy.facet.loc10_3.2 (constants.%Destroy.facet.25e)] -// CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.loc10_3.2) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.d76)] -// CHECK:STDOUT: %.loc10_3.3: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Destroy.facet.loc10_3.2 [symbolic = %.loc10_3.3 (constants.%.0da)] -// CHECK:STDOUT: %impl.elem0.loc10_3.2: @InitFromStructGeneric.%.loc10_3.3 (%.0da) = impl_witness_access %Destroy.lookup_impl_witness.loc10_3, element0 [symbolic = %impl.elem0.loc10_3.2 (constants.%impl.elem0.730)] -// CHECK:STDOUT: %specific_impl_fn.loc10_3.2: = specific_impl_function %impl.elem0.loc10_3.2, @Destroy.WithSelf.Op(%Destroy.facet.loc10_3.2) [symbolic = %specific_impl_fn.loc10_3.2 (constants.%specific_impl_fn.fa9)] +// CHECK:STDOUT: %Destroy.facet.loc10_3.3: %Destroy.type = facet_value %Class.loc10_17.2, (%Destroy.lookup_impl_witness.loc10_3) [symbolic = %Destroy.facet.loc10_3.3 (constants.%Destroy.facet.25e)] +// CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.loc10_3.3) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.d76)] +// CHECK:STDOUT: %.loc10_3.4: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Destroy.facet.loc10_3.3 [symbolic = %.loc10_3.4 (constants.%.0da)] +// CHECK:STDOUT: %impl.elem0.loc10_3.2: @InitFromStructGeneric.%.loc10_3.4 (%.0da) = impl_witness_access %Destroy.lookup_impl_witness.loc10_3, element0 [symbolic = %impl.elem0.loc10_3.2 (constants.%impl.elem0.730)] +// CHECK:STDOUT: %specific_impl_fn.loc10_3.2: = specific_impl_function %impl.elem0.loc10_3.2, @Destroy.WithSelf.Op(%Destroy.facet.loc10_3.3) [symbolic = %specific_impl_fn.loc10_3.2 (constants.%specific_impl_fn.fa9)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%x.param: @InitFromStructGeneric.%T.as_type.loc9_59.1 (%T.as_type.74b)) -> out %return.param: @InitFromStructGeneric.%T.as_type.loc9_59.1 (%T.as_type.74b) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: @InitFromStructGeneric.%pattern_type.loc10 (%pattern_type.0b6) = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: @InitFromStructGeneric.%pattern_type.loc10 (%pattern_type.0b6) = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt.loc10_8.1: @InitFromStructGeneric.%pattern_type.loc10 (%pattern_type.0b6) = ref_binding_pattern v [symbolic = %v.patt.loc10_8.2 (constants.%v.patt.ef6)] +// CHECK:STDOUT: %v.var_patt.loc10_3.1: @InitFromStructGeneric.%pattern_type.loc10 (%pattern_type.0b6) = var_pattern %v.patt.loc10_8.1 [symbolic = %v.var_patt.loc10_3.2 (constants.%v.var_patt.8cf)] // CHECK:STDOUT: } -// CHECK:STDOUT: %v.var: ref @InitFromStructGeneric.%Class.loc10_17.2 (%Class.55b) = var %v.var_patt +// CHECK:STDOUT: %v.var: ref @InitFromStructGeneric.%Class.loc10_17.2 (%Class.55b) = var %v.var_patt.loc10_3.1 // CHECK:STDOUT: %x.ref: @InitFromStructGeneric.%T.as_type.loc9_59.1 (%T.as_type.74b) = name_ref x, %x // CHECK:STDOUT: %.loc10_28.1: @InitFromStructGeneric.%struct_type.k (%struct_type.k.aa4) = struct_literal (%x.ref) -// CHECK:STDOUT: %impl.elem0.loc10_27.1: @InitFromStructGeneric.%.loc10_27.2 (%.018) = impl_witness_access constants.%Copy.lookup_impl_witness.4df, element0 [symbolic = %impl.elem0.loc10_27.2 (constants.%impl.elem0.170)] +// CHECK:STDOUT: %impl.elem0.loc10_27.1: @InitFromStructGeneric.%.loc10_27.3 (%.018) = impl_witness_access constants.%Copy.lookup_impl_witness.4df, element0 [symbolic = %impl.elem0.loc10_27.2 (constants.%impl.elem0.170)] // CHECK:STDOUT: %bound_method.loc10_27.1: = bound_method %x.ref, %impl.elem0.loc10_27.1 -// CHECK:STDOUT: %Copy.facet.loc10_27.1: %Copy.type = facet_value constants.%T.as_type.74b, (constants.%Copy.lookup_impl_witness.4df) [symbolic = %Copy.facet.loc10_27.2 (constants.%Copy.facet.3f0)] -// CHECK:STDOUT: %.loc10_27.1: %Copy.type = converted constants.%T.as_type.74b, %Copy.facet.loc10_27.1 [symbolic = %Copy.facet.loc10_27.2 (constants.%Copy.facet.3f0)] +// CHECK:STDOUT: %Copy.facet.loc10_27.1: %Copy.type = facet_value constants.%T.as_type.74b, (constants.%Copy.lookup_impl_witness.4df) [symbolic = %Copy.facet.loc10_27.3 (constants.%Copy.facet.3f0)] +// CHECK:STDOUT: %.loc10_27.1: %Copy.type = converted constants.%T.as_type.74b, %Copy.facet.loc10_27.1 [symbolic = %Copy.facet.loc10_27.3 (constants.%Copy.facet.3f0)] +// CHECK:STDOUT: %Copy.facet.loc10_27.2: %Copy.type = facet_value constants.%T.as_type.74b, (constants.%Copy.lookup_impl_witness.4df) [symbolic = %Copy.facet.loc10_27.3 (constants.%Copy.facet.3f0)] +// CHECK:STDOUT: %.loc10_27.2: %Copy.type = converted constants.%T.as_type.74b, %Copy.facet.loc10_27.2 [symbolic = %Copy.facet.loc10_27.3 (constants.%Copy.facet.3f0)] // CHECK:STDOUT: %specific_impl_fn.loc10_27.1: = specific_impl_function %impl.elem0.loc10_27.1, @Copy.WithSelf.Op(constants.%Copy.facet.3f0) [symbolic = %specific_impl_fn.loc10_27.2 (constants.%specific_impl_fn.be5)] // CHECK:STDOUT: %bound_method.loc10_27.2: = bound_method %x.ref, %specific_impl_fn.loc10_27.1 // CHECK:STDOUT: %.loc10_28.2: ref @InitFromStructGeneric.%T.as_type.loc9_59.1 (%T.as_type.74b) = class_element_access %v.var, element0 @@ -260,18 +282,22 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: %k.ref: @InitFromStructGeneric.%Class.elem (%Class.elem.b97) = name_ref k, @Class.%.loc5 [concrete = @Class.%.loc5] // CHECK:STDOUT: %.loc11_11.1: ref @InitFromStructGeneric.%T.as_type.loc9_59.1 (%T.as_type.74b) = class_element_access %v.ref, element0 // CHECK:STDOUT: %.loc11_11.2: @InitFromStructGeneric.%T.as_type.loc9_59.1 (%T.as_type.74b) = acquire_value %.loc11_11.1 -// CHECK:STDOUT: %impl.elem0.loc11: @InitFromStructGeneric.%.loc10_27.2 (%.018) = impl_witness_access constants.%Copy.lookup_impl_witness.4df, element0 [symbolic = %impl.elem0.loc10_27.2 (constants.%impl.elem0.170)] +// CHECK:STDOUT: %impl.elem0.loc11: @InitFromStructGeneric.%.loc10_27.3 (%.018) = impl_witness_access constants.%Copy.lookup_impl_witness.4df, element0 [symbolic = %impl.elem0.loc10_27.2 (constants.%impl.elem0.170)] // CHECK:STDOUT: %bound_method.loc11_11.1: = bound_method %.loc11_11.2, %impl.elem0.loc11 -// CHECK:STDOUT: %Copy.facet.loc11: %Copy.type = facet_value constants.%T.as_type.74b, (constants.%Copy.lookup_impl_witness.4df) [symbolic = %Copy.facet.loc10_27.2 (constants.%Copy.facet.3f0)] -// CHECK:STDOUT: %.loc11_11.3: %Copy.type = converted constants.%T.as_type.74b, %Copy.facet.loc11 [symbolic = %Copy.facet.loc10_27.2 (constants.%Copy.facet.3f0)] +// CHECK:STDOUT: %Copy.facet.loc11_11.1: %Copy.type = facet_value constants.%T.as_type.74b, (constants.%Copy.lookup_impl_witness.4df) [symbolic = %Copy.facet.loc10_27.3 (constants.%Copy.facet.3f0)] +// CHECK:STDOUT: %.loc11_11.3: %Copy.type = converted constants.%T.as_type.74b, %Copy.facet.loc11_11.1 [symbolic = %Copy.facet.loc10_27.3 (constants.%Copy.facet.3f0)] +// CHECK:STDOUT: %Copy.facet.loc11_11.2: %Copy.type = facet_value constants.%T.as_type.74b, (constants.%Copy.lookup_impl_witness.4df) [symbolic = %Copy.facet.loc10_27.3 (constants.%Copy.facet.3f0)] +// CHECK:STDOUT: %.loc11_11.4: %Copy.type = converted constants.%T.as_type.74b, %Copy.facet.loc11_11.2 [symbolic = %Copy.facet.loc10_27.3 (constants.%Copy.facet.3f0)] // CHECK:STDOUT: %specific_impl_fn.loc11: = specific_impl_function %impl.elem0.loc11, @Copy.WithSelf.Op(constants.%Copy.facet.3f0) [symbolic = %specific_impl_fn.loc10_27.2 (constants.%specific_impl_fn.be5)] // CHECK:STDOUT: %bound_method.loc11_11.2: = bound_method %.loc11_11.2, %specific_impl_fn.loc11 // CHECK:STDOUT: %.loc9_65.1: ref @InitFromStructGeneric.%T.as_type.loc9_59.1 (%T.as_type.74b) = splice_block %return.param {} // CHECK:STDOUT: %Copy.WithSelf.Op.call.loc11: init @InitFromStructGeneric.%T.as_type.loc9_59.1 (%T.as_type.74b) to %.loc9_65.1 = call %bound_method.loc11_11.2(%.loc11_11.2) -// CHECK:STDOUT: %impl.elem0.loc10_3.1: @InitFromStructGeneric.%.loc10_3.3 (%.0da) = impl_witness_access constants.%Destroy.lookup_impl_witness.62e, element0 [symbolic = %impl.elem0.loc10_3.2 (constants.%impl.elem0.730)] +// CHECK:STDOUT: %impl.elem0.loc10_3.1: @InitFromStructGeneric.%.loc10_3.4 (%.0da) = impl_witness_access constants.%Destroy.lookup_impl_witness.62e, element0 [symbolic = %impl.elem0.loc10_3.2 (constants.%impl.elem0.730)] // CHECK:STDOUT: %bound_method.loc10_3.1: = bound_method %v.var, %impl.elem0.loc10_3.1 -// CHECK:STDOUT: %Destroy.facet.loc10_3.1: %Destroy.type = facet_value constants.%Class.55b, (constants.%Destroy.lookup_impl_witness.62e) [symbolic = %Destroy.facet.loc10_3.2 (constants.%Destroy.facet.25e)] -// CHECK:STDOUT: %.loc10_3.2: %Destroy.type = converted constants.%Class.55b, %Destroy.facet.loc10_3.1 [symbolic = %Destroy.facet.loc10_3.2 (constants.%Destroy.facet.25e)] +// CHECK:STDOUT: %Destroy.facet.loc10_3.1: %Destroy.type = facet_value constants.%Class.55b, (constants.%Destroy.lookup_impl_witness.62e) [symbolic = %Destroy.facet.loc10_3.3 (constants.%Destroy.facet.25e)] +// CHECK:STDOUT: %.loc10_3.2: %Destroy.type = converted constants.%Class.55b, %Destroy.facet.loc10_3.1 [symbolic = %Destroy.facet.loc10_3.3 (constants.%Destroy.facet.25e)] +// CHECK:STDOUT: %Destroy.facet.loc10_3.2: %Destroy.type = facet_value constants.%Class.55b, (constants.%Destroy.lookup_impl_witness.62e) [symbolic = %Destroy.facet.loc10_3.3 (constants.%Destroy.facet.25e)] +// CHECK:STDOUT: %.loc10_3.3: %Destroy.type = converted constants.%Class.55b, %Destroy.facet.loc10_3.2 [symbolic = %Destroy.facet.loc10_3.3 (constants.%Destroy.facet.25e)] // CHECK:STDOUT: %specific_impl_fn.loc10_3.1: = specific_impl_function %impl.elem0.loc10_3.1, @Destroy.WithSelf.Op(constants.%Destroy.facet.25e) [symbolic = %specific_impl_fn.loc10_3.2 (constants.%specific_impl_fn.fa9)] // CHECK:STDOUT: %bound_method.loc10_3.2: = bound_method %v.var, %specific_impl_fn.loc10_3.1 // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc10_3.2(%v.var) @@ -282,8 +308,8 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: fn @InitFromStructSpecific(%x.param: %i32) -> out %return.param: %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %pattern_type.82c = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: %pattern_type.82c = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.82c = ref_binding_pattern v [concrete = constants.%v.patt.675] +// CHECK:STDOUT: %v.var_patt: %pattern_type.82c = var_pattern %v.patt [concrete = constants.%v.var_patt.68c] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %Class.a32 = var %v.var_patt // CHECK:STDOUT: %x.ref: %i32 = name_ref x, %x @@ -338,10 +364,15 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @InitFromStructGeneric(constants.%T.283) { +// CHECK:STDOUT: %T.patt.loc9_27.2 => constants.%T.patt.478 // CHECK:STDOUT: %T.loc9_27.1 => constants.%T.283 // CHECK:STDOUT: %T.as_type.loc9_59.1 => constants.%T.as_type.74b // CHECK:STDOUT: %pattern_type.loc9 => constants.%pattern_type.44a +// CHECK:STDOUT: %x.param_patt.loc9_57.2 => constants.%x.param_patt.e3c +// CHECK:STDOUT: %x.patt.loc9_57.2 => constants.%x.patt.a06 // CHECK:STDOUT: %.loc9_65.2 => constants.%.2b9 +// CHECK:STDOUT: %return.param_patt.loc9_65.2 => constants.%return.param_patt.7e9 +// CHECK:STDOUT: %return.patt.loc9_62.2 => constants.%return.patt.c4f // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- adapt.carbon @@ -353,10 +384,15 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: %Adapt.generic: %Adapt.type = struct_value () [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %pattern_type.e81: type = pattern_type %Copy.type [concrete] +// CHECK:STDOUT: %T.patt.fe6: %pattern_type.e81 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.f84: %Copy.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T.f84 [symbolic] // CHECK:STDOUT: %pattern_type.2c66b4.2: type = pattern_type %T.as_type [symbolic] +// CHECK:STDOUT: %x.param_patt.1f4: %pattern_type.2c66b4.2 = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.f93: %pattern_type.2c66b4.2 = at_binding_pattern x, %x.param_patt.1f4 [symbolic] // CHECK:STDOUT: %.1ce700.2: Core.Form = init_form %T.as_type [symbolic] +// CHECK:STDOUT: %return.param_patt.bf4475.2: %pattern_type.2c66b4.2 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.f44: %pattern_type.2c66b4.2 = return_slot_pattern %return.param_patt.bf4475.2, %T.as_type [symbolic] // CHECK:STDOUT: %InitFromAdaptedGeneric.type: type = fn_type @InitFromAdaptedGeneric [concrete] // CHECK:STDOUT: %InitFromAdaptedGeneric: %InitFromAdaptedGeneric.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.d83: = require_complete_type %T.as_type [symbolic] @@ -373,7 +409,11 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %x.param_patt.cee: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.fbe: %pattern_type.6b6 = at_binding_pattern x, %x.param_patt.cee [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %InitFromAdaptedSpecific.type: type = fn_type @InitFromAdaptedSpecific [concrete] // CHECK:STDOUT: %InitFromAdaptedSpecific: %InitFromAdaptedSpecific.type = struct_value () [concrete] // CHECK:STDOUT: %Adapt.f89: type = class_type @Adapt, @Adapt(%i32) [concrete] @@ -403,11 +443,11 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %InitFromAdaptedGeneric.decl: %InitFromAdaptedGeneric.type = fn_decl @InitFromAdaptedGeneric [concrete = constants.%InitFromAdaptedGeneric] { -// CHECK:STDOUT: %T.patt: %pattern_type.e81 = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %x.param_patt: @InitFromAdaptedGeneric.%pattern_type (%pattern_type.2c66b4.2) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @InitFromAdaptedGeneric.%pattern_type (%pattern_type.2c66b4.2) = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @InitFromAdaptedGeneric.%pattern_type (%pattern_type.2c66b4.2) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @InitFromAdaptedGeneric.%pattern_type (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt, %.loc9_51.3 [concrete] +// CHECK:STDOUT: %T.patt.loc9_28.1: %pattern_type.e81 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_28.2 (constants.%T.patt.fe6)] +// CHECK:STDOUT: %x.param_patt.loc9_43.1: @InitFromAdaptedGeneric.%pattern_type (%pattern_type.2c66b4.2) = value_param_pattern [symbolic = %x.param_patt.loc9_43.2 (constants.%x.param_patt.1f4)] +// CHECK:STDOUT: %x.patt.loc9_43.1: @InitFromAdaptedGeneric.%pattern_type (%pattern_type.2c66b4.2) = at_binding_pattern x, %x.param_patt.loc9_43.1 [symbolic = %x.patt.loc9_43.2 (constants.%x.patt.f93)] +// CHECK:STDOUT: %return.param_patt.loc9_51.1: @InitFromAdaptedGeneric.%pattern_type (%pattern_type.2c66b4.2) = out_param_pattern [symbolic = %return.param_patt.loc9_51.2 (constants.%return.param_patt.bf4475.2)] +// CHECK:STDOUT: %return.patt.loc9_48.1: @InitFromAdaptedGeneric.%pattern_type (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt.loc9_51.1, %.loc9_51.3 [symbolic = %return.patt.loc9_48.2 (constants.%return.patt.f44)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc9_51: %Copy.type = name_ref T, %T.loc9_28.2 [symbolic = %T.loc9_28.1 (constants.%T.f84)] // CHECK:STDOUT: %T.as_type.loc9_51: type = facet_access_type %T.ref.loc9_51 [symbolic = %T.as_type.loc9_45.1 (constants.%T.as_type)] @@ -430,10 +470,10 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: %return: ref @InitFromAdaptedGeneric.%T.as_type.loc9_45.1 (%T.as_type) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %InitFromAdaptedSpecific.decl: %InitFromAdaptedSpecific.type = fn_decl @InitFromAdaptedSpecific [concrete = constants.%InitFromAdaptedSpecific] { -// CHECK:STDOUT: %x.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc13_39 [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%x.param_patt.cee] +// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt.fbe] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc13_39 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc13_39: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc13: Core.Form = init_form %i32.loc13_39 [concrete = constants.%.795] @@ -446,19 +486,24 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @InitFromAdaptedGeneric(%T.loc9_28.2: %Copy.type) { +// CHECK:STDOUT: %T.patt.loc9_28.2: %pattern_type.e81 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_28.2 (constants.%T.patt.fe6)] // CHECK:STDOUT: %T.loc9_28.1: %Copy.type = symbolic_binding T, 0 [symbolic = %T.loc9_28.1 (constants.%T.f84)] // CHECK:STDOUT: %T.as_type.loc9_45.1: type = facet_access_type %T.loc9_28.1 [symbolic = %T.as_type.loc9_45.1 (constants.%T.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc9_45.1 [symbolic = %pattern_type (constants.%pattern_type.2c66b4.2)] +// CHECK:STDOUT: %x.param_patt.loc9_43.2: @InitFromAdaptedGeneric.%pattern_type (%pattern_type.2c66b4.2) = value_param_pattern [symbolic = %x.param_patt.loc9_43.2 (constants.%x.param_patt.1f4)] +// CHECK:STDOUT: %x.patt.loc9_43.2: @InitFromAdaptedGeneric.%pattern_type (%pattern_type.2c66b4.2) = at_binding_pattern x, %x.param_patt.loc9_43.2 [symbolic = %x.patt.loc9_43.2 (constants.%x.patt.f93)] // CHECK:STDOUT: %.loc9_51.2: Core.Form = init_form %T.as_type.loc9_45.1 [symbolic = %.loc9_51.2 (constants.%.1ce700.2)] +// CHECK:STDOUT: %return.param_patt.loc9_51.2: @InitFromAdaptedGeneric.%pattern_type (%pattern_type.2c66b4.2) = out_param_pattern [symbolic = %return.param_patt.loc9_51.2 (constants.%return.param_patt.bf4475.2)] +// CHECK:STDOUT: %return.patt.loc9_48.2: @InitFromAdaptedGeneric.%pattern_type (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt.loc9_51.2, %T.as_type.loc9_45.1 [symbolic = %return.patt.loc9_48.2 (constants.%return.patt.f44)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc9: = require_complete_type %T.as_type.loc9_45.1 [symbolic = %require_complete.loc9 (constants.%require_complete.d83)] // CHECK:STDOUT: %Adapt.loc10_23.2: type = class_type @Adapt, @Adapt(%T.as_type.loc9_45.1) [symbolic = %Adapt.loc10_23.2 (constants.%Adapt.210)] // CHECK:STDOUT: %require_complete.loc10: = require_complete_type %Adapt.loc10_23.2 [symbolic = %require_complete.loc10 (constants.%require_complete.29a)] // CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%T.loc9_28.1) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.c85f21.2)] -// CHECK:STDOUT: %.loc10_26.4: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %T.loc9_28.1 [symbolic = %.loc10_26.4 (constants.%.c29)] +// CHECK:STDOUT: %.loc10_26.5: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %T.loc9_28.1 [symbolic = %.loc10_26.5 (constants.%.c29)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %T.loc9_28.1, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.d9c)] -// CHECK:STDOUT: %impl.elem0.loc10_26.2: @InitFromAdaptedGeneric.%.loc10_26.4 (%.c29) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc10_26.2 (constants.%impl.elem0.bd2)] +// CHECK:STDOUT: %impl.elem0.loc10_26.2: @InitFromAdaptedGeneric.%.loc10_26.5 (%.c29) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc10_26.2 (constants.%impl.elem0.bd2)] // CHECK:STDOUT: %specific_impl_fn.loc10_26.2: = specific_impl_function %impl.elem0.loc10_26.2, @Copy.WithSelf.Op(%T.loc9_28.1) [symbolic = %specific_impl_fn.loc10_26.2 (constants.%specific_impl_fn.e2a)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%x.param: @InitFromAdaptedGeneric.%T.as_type.loc9_45.1 (%T.as_type)) -> out %return.param: @InitFromAdaptedGeneric.%T.as_type.loc9_45.1 (%T.as_type) { @@ -476,9 +521,10 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: %.loc10_29: type = converted %T.ref.loc10_29, %T.as_type.loc10_29 [symbolic = %T.as_type.loc9_45.1 (constants.%T.as_type)] // CHECK:STDOUT: %.loc10_26.1: @InitFromAdaptedGeneric.%T.as_type.loc9_45.1 (%T.as_type) = as_compatible %.loc10_13.2 // CHECK:STDOUT: %.loc10_26.2: @InitFromAdaptedGeneric.%T.as_type.loc9_45.1 (%T.as_type) = converted %.loc10_13.2, %.loc10_26.1 -// CHECK:STDOUT: %impl.elem0.loc10_26.1: @InitFromAdaptedGeneric.%.loc10_26.4 (%.c29) = impl_witness_access constants.%Copy.lookup_impl_witness.d9c, element0 [symbolic = %impl.elem0.loc10_26.2 (constants.%impl.elem0.bd2)] +// CHECK:STDOUT: %impl.elem0.loc10_26.1: @InitFromAdaptedGeneric.%.loc10_26.5 (%.c29) = impl_witness_access constants.%Copy.lookup_impl_witness.d9c, element0 [symbolic = %impl.elem0.loc10_26.2 (constants.%impl.elem0.bd2)] // CHECK:STDOUT: %bound_method.loc10_26.1: = bound_method %.loc10_26.2, %impl.elem0.loc10_26.1 // CHECK:STDOUT: %.loc10_26.3: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T.loc9_28.1 (constants.%T.f84)] +// CHECK:STDOUT: %.loc10_26.4: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T.loc9_28.1 (constants.%T.f84)] // CHECK:STDOUT: %specific_impl_fn.loc10_26.1: = specific_impl_function %impl.elem0.loc10_26.1, @Copy.WithSelf.Op(constants.%T.f84) [symbolic = %specific_impl_fn.loc10_26.2 (constants.%specific_impl_fn.e2a)] // CHECK:STDOUT: %bound_method.loc10_26.2: = bound_method %.loc10_26.2, %specific_impl_fn.loc10_26.1 // CHECK:STDOUT: %.loc9_51.1: ref @InitFromAdaptedGeneric.%T.as_type.loc9_45.1 (%T.as_type) = splice_block %return.param {} @@ -507,9 +553,14 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @InitFromAdaptedGeneric(constants.%T.f84) { +// CHECK:STDOUT: %T.patt.loc9_28.2 => constants.%T.patt.fe6 // CHECK:STDOUT: %T.loc9_28.1 => constants.%T.f84 // CHECK:STDOUT: %T.as_type.loc9_45.1 => constants.%T.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.2c66b4.2 +// CHECK:STDOUT: %x.param_patt.loc9_43.2 => constants.%x.param_patt.1f4 +// CHECK:STDOUT: %x.patt.loc9_43.2 => constants.%x.patt.f93 // CHECK:STDOUT: %.loc9_51.2 => constants.%.1ce700.2 +// CHECK:STDOUT: %return.param_patt.loc9_51.2 => constants.%return.param_patt.bf4475.2 +// CHECK:STDOUT: %return.patt.loc9_48.2 => constants.%return.patt.f44 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/generic/member_access.carbon b/toolchain/check/testdata/class/generic/member_access.carbon index e55077f32916..9211f7bd6061 100644 --- a/toolchain/check/testdata/class/generic/member_access.carbon +++ b/toolchain/check/testdata/class/generic/member_access.carbon @@ -67,19 +67,30 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] +// CHECK:STDOUT: %pattern_type.e81: type = pattern_type %Copy.type [concrete] +// CHECK:STDOUT: %T.patt.fe6: %pattern_type.e81 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.f84: %Copy.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Class.575: type = class_type @Class, @Class(%T.f84) [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T.f84 [symbolic] // CHECK:STDOUT: %require_complete.d83: = require_complete_type %T.as_type [symbolic] // CHECK:STDOUT: %pattern_type.2c66b4.2: type = pattern_type %T.as_type [symbolic] +// CHECK:STDOUT: %x.patt.f3e: %pattern_type.2c66b4.2 = ref_binding_pattern x [symbolic] // CHECK:STDOUT: %Class.elem.1ee: type = unbound_element_type %Class.575, %T.as_type [symbolic] // CHECK:STDOUT: %pattern_type.e18: type = pattern_type %Class.575 [symbolic] +// CHECK:STDOUT: %self.param_patt.aaa: %pattern_type.e18 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.d8a: %pattern_type.e18 = at_binding_pattern self, %self.param_patt.aaa [symbolic] // CHECK:STDOUT: %.1ce700.2: Core.Form = init_form %T.as_type [symbolic] +// CHECK:STDOUT: %return.param_patt.bf4475.2: %pattern_type.2c66b4.2 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.f44: %pattern_type.2c66b4.2 = return_slot_pattern %return.param_patt.bf4475.2, %T.as_type [symbolic] // CHECK:STDOUT: %Class.Get.type.0dd: type = fn_type @Class.Get, @Class(%T.f84) [symbolic] // CHECK:STDOUT: %Class.Get.112: %Class.Get.type.0dd = struct_value () [symbolic] +// CHECK:STDOUT: %self.param_patt.f0d: %pattern_type.e18 = ref_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.282: %pattern_type.e18 = at_binding_pattern self, %self.param_patt.f0d [symbolic] // CHECK:STDOUT: %ptr.215: type = ptr_type %T.as_type [symbolic] // CHECK:STDOUT: %.4fb: Core.Form = init_form %ptr.215 [symbolic] // CHECK:STDOUT: %pattern_type.d5b: type = pattern_type %ptr.215 [symbolic] +// CHECK:STDOUT: %return.param_patt.4df: %pattern_type.d5b = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.c21: %pattern_type.d5b = return_slot_pattern %return.param_patt.4df, %ptr.215 [symbolic] // CHECK:STDOUT: %Class.GetAddr.type.f90: type = fn_type @Class.GetAddr, @Class(%T.f84) [symbolic] // CHECK:STDOUT: %Class.GetAddr.c34: %Class.GetAddr.type.f90 = struct_value () [symbolic] // CHECK:STDOUT: %struct_type.x.ac1: type = struct_type {.x: %T.as_type} [symbolic] @@ -114,6 +125,9 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: %pattern_type.658: type = pattern_type %Class.ce6 [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] +// CHECK:STDOUT: %x.patt.29f: %pattern_type.6b6 = ref_binding_pattern x [concrete] // CHECK:STDOUT: %Class.elem.32a: type = unbound_element_type %Class.ce6, %i32 [concrete] // CHECK:STDOUT: %Class.Get.type.9ad: type = fn_type @Class.Get, @Class(%Copy.facet.987) [concrete] // CHECK:STDOUT: %Class.Get.ae0: %Class.Get.type.9ad = struct_value () [concrete] @@ -124,11 +138,17 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: %Copy.WithSelf.Op.type.d09: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.987) [concrete] // CHECK:STDOUT: %.7a6: type = fn_type_with_self_type %Copy.WithSelf.Op.type.d09, %Copy.facet.987 [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.4f6, @Int.as.Copy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %self.param_patt.c5b: %pattern_type.658 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.d4d: %pattern_type.658 = at_binding_pattern self, %self.param_patt.c5b [concrete] // CHECK:STDOUT: %Class.Get.specific_fn: = specific_function %Class.Get.ae0, @Class.Get(%Copy.facet.987) [concrete] // CHECK:STDOUT: %ptr.57b: type = ptr_type %Class.ce6 [concrete] +// CHECK:STDOUT: %self.param_patt.447: %pattern_type.658 = ref_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.255: %pattern_type.658 = at_binding_pattern self, %self.param_patt.447 [concrete] // CHECK:STDOUT: %ptr.d08: type = ptr_type %i32 [concrete] // CHECK:STDOUT: %.952: Core.Form = init_form %ptr.d08 [concrete] // CHECK:STDOUT: %pattern_type.f00: type = pattern_type %ptr.d08 [concrete] +// CHECK:STDOUT: %return.param_patt.7dd: %pattern_type.f00 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.dbe: %pattern_type.f00 = return_slot_pattern %return.param_patt.7dd, %ptr.d08 [concrete] // CHECK:STDOUT: %Class.GetAddr.specific_fn: = specific_function %Class.GetAddr.26c, @Class.GetAddr(%Copy.facet.987) [concrete] // CHECK:STDOUT: %complete_type.07f: = complete_type_witness %ptr.d08 [concrete] // CHECK:STDOUT: %Copy.impl_witness.ce1: = impl_witness imports.%Copy.impl_witness_table.4f1, @ptr.as.Copy.impl(%i32) [concrete] @@ -175,9 +195,9 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class, %T.as_type.loc7_19.1 [symbolic = %Class.elem (constants.%Class.elem.1ee)] // CHECK:STDOUT: %require_complete.loc9: = require_complete_type %T.as_type.loc7_19.1 [symbolic = %require_complete.loc9 (constants.%require_complete.d83)] // CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%T) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.c85f21.2)] -// CHECK:STDOUT: %.loc9_16.4: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %T [symbolic = %.loc9_16.4 (constants.%.c29)] +// CHECK:STDOUT: %.loc9_16.5: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %T [symbolic = %.loc9_16.5 (constants.%.c29)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %T, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.d9c)] -// CHECK:STDOUT: %impl.elem0.loc9_16.2: @Class.Get.%.loc9_16.4 (%.c29) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc9_16.2 (constants.%impl.elem0.bd2)] +// CHECK:STDOUT: %impl.elem0.loc9_16.2: @Class.Get.%.loc9_16.5 (%.c29) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc9_16.2 (constants.%impl.elem0.bd2)] // CHECK:STDOUT: %specific_impl_fn.loc9_16.2: = specific_impl_function %impl.elem0.loc9_16.2, @Copy.WithSelf.Op(%T) [symbolic = %specific_impl_fn.loc9_16.2 (constants.%specific_impl_fn.e2a)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Class.Get.%Class (%Class.575)) -> out %return.param: @Class.Get.%T.as_type.loc7_19.1 (%T.as_type) { @@ -186,9 +206,10 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: %x.ref: @Class.Get.%Class.elem (%Class.elem.1ee) = name_ref x, @Class.%.loc5 [concrete = @Class.%.loc5] // CHECK:STDOUT: %.loc9_16.1: ref @Class.Get.%T.as_type.loc7_19.1 (%T.as_type) = class_element_access %self.ref, element0 // CHECK:STDOUT: %.loc9_16.2: @Class.Get.%T.as_type.loc7_19.1 (%T.as_type) = acquire_value %.loc9_16.1 -// CHECK:STDOUT: %impl.elem0.loc9_16.1: @Class.Get.%.loc9_16.4 (%.c29) = impl_witness_access constants.%Copy.lookup_impl_witness.d9c, element0 [symbolic = %impl.elem0.loc9_16.2 (constants.%impl.elem0.bd2)] +// CHECK:STDOUT: %impl.elem0.loc9_16.1: @Class.Get.%.loc9_16.5 (%.c29) = impl_witness_access constants.%Copy.lookup_impl_witness.d9c, element0 [symbolic = %impl.elem0.loc9_16.2 (constants.%impl.elem0.bd2)] // CHECK:STDOUT: %bound_method.loc9_16.1: = bound_method %.loc9_16.2, %impl.elem0.loc9_16.1 // CHECK:STDOUT: %.loc9_16.3: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T (constants.%T.f84)] +// CHECK:STDOUT: %.loc9_16.4: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T (constants.%T.f84)] // CHECK:STDOUT: %specific_impl_fn.loc9_16.1: = specific_impl_function %impl.elem0.loc9_16.1, @Copy.WithSelf.Op(constants.%T.f84) [symbolic = %specific_impl_fn.loc9_16.2 (constants.%specific_impl_fn.e2a)] // CHECK:STDOUT: %bound_method.loc9_16.2: = bound_method %.loc9_16.2, %specific_impl_fn.loc9_16.1 // CHECK:STDOUT: @@ -203,13 +224,13 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class, %T.as_type.loc13_28.1 [symbolic = %Class.elem (constants.%Class.elem.1ee)] -// CHECK:STDOUT: %.loc15_12.2: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.as_type.loc13_28.1) [symbolic = %.loc15_12.2 (constants.%.a33)] +// CHECK:STDOUT: %.loc15_12.3: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.as_type.loc13_28.1) [symbolic = %.loc15_12.3 (constants.%.a33)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %ptr.loc13_28.1, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.cf6)] -// CHECK:STDOUT: %Copy.facet.loc15_12.2: %Copy.type = facet_value %ptr.loc13_28.1, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc15_12.2 (constants.%Copy.facet.ed3)] -// CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.loc15_12.2) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.6e0)] -// CHECK:STDOUT: %.loc15_12.3: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %Copy.facet.loc15_12.2 [symbolic = %.loc15_12.3 (constants.%.45d)] -// CHECK:STDOUT: %impl.elem0.loc15_12.2: @Class.GetAddr.%.loc15_12.3 (%.45d) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc15_12.2 (constants.%impl.elem0.c5d)] -// CHECK:STDOUT: %specific_impl_fn.loc15_12.2: = specific_impl_function %impl.elem0.loc15_12.2, @Copy.WithSelf.Op(%Copy.facet.loc15_12.2) [symbolic = %specific_impl_fn.loc15_12.2 (constants.%specific_impl_fn.5cf)] +// CHECK:STDOUT: %Copy.facet.loc15_12.3: %Copy.type = facet_value %ptr.loc13_28.1, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc15_12.3 (constants.%Copy.facet.ed3)] +// CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.loc15_12.3) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.6e0)] +// CHECK:STDOUT: %.loc15_12.4: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %Copy.facet.loc15_12.3 [symbolic = %.loc15_12.4 (constants.%.45d)] +// CHECK:STDOUT: %impl.elem0.loc15_12.2: @Class.GetAddr.%.loc15_12.4 (%.45d) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc15_12.2 (constants.%impl.elem0.c5d)] +// CHECK:STDOUT: %specific_impl_fn.loc15_12.2: = specific_impl_function %impl.elem0.loc15_12.2, @Copy.WithSelf.Op(%Copy.facet.loc15_12.3) [symbolic = %specific_impl_fn.loc15_12.2 (constants.%specific_impl_fn.5cf)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: ref @Class.GetAddr.%Class (%Class.575)) -> out %return.param: @Class.GetAddr.%ptr.loc13_28.1 (%ptr.215) { // CHECK:STDOUT: !entry: @@ -217,10 +238,12 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: %x.ref: @Class.GetAddr.%Class.elem (%Class.elem.1ee) = name_ref x, @Class.%.loc5 [concrete = @Class.%.loc5] // CHECK:STDOUT: %.loc15_17: ref @Class.GetAddr.%T.as_type.loc13_28.1 (%T.as_type) = class_element_access %self.ref, element0 // CHECK:STDOUT: %addr: @Class.GetAddr.%ptr.loc13_28.1 (%ptr.215) = addr_of %.loc15_17 -// CHECK:STDOUT: %impl.elem0.loc15_12.1: @Class.GetAddr.%.loc15_12.3 (%.45d) = impl_witness_access constants.%Copy.lookup_impl_witness.cf6, element0 [symbolic = %impl.elem0.loc15_12.2 (constants.%impl.elem0.c5d)] +// CHECK:STDOUT: %impl.elem0.loc15_12.1: @Class.GetAddr.%.loc15_12.4 (%.45d) = impl_witness_access constants.%Copy.lookup_impl_witness.cf6, element0 [symbolic = %impl.elem0.loc15_12.2 (constants.%impl.elem0.c5d)] // CHECK:STDOUT: %bound_method.loc15_12.1: = bound_method %addr, %impl.elem0.loc15_12.1 -// CHECK:STDOUT: %Copy.facet.loc15_12.1: %Copy.type = facet_value constants.%ptr.215, (constants.%Copy.lookup_impl_witness.cf6) [symbolic = %Copy.facet.loc15_12.2 (constants.%Copy.facet.ed3)] -// CHECK:STDOUT: %.loc15_12.1: %Copy.type = converted constants.%ptr.215, %Copy.facet.loc15_12.1 [symbolic = %Copy.facet.loc15_12.2 (constants.%Copy.facet.ed3)] +// CHECK:STDOUT: %Copy.facet.loc15_12.1: %Copy.type = facet_value constants.%ptr.215, (constants.%Copy.lookup_impl_witness.cf6) [symbolic = %Copy.facet.loc15_12.3 (constants.%Copy.facet.ed3)] +// CHECK:STDOUT: %.loc15_12.1: %Copy.type = converted constants.%ptr.215, %Copy.facet.loc15_12.1 [symbolic = %Copy.facet.loc15_12.3 (constants.%Copy.facet.ed3)] +// CHECK:STDOUT: %Copy.facet.loc15_12.2: %Copy.type = facet_value constants.%ptr.215, (constants.%Copy.lookup_impl_witness.cf6) [symbolic = %Copy.facet.loc15_12.3 (constants.%Copy.facet.ed3)] +// CHECK:STDOUT: %.loc15_12.2: %Copy.type = converted constants.%ptr.215, %Copy.facet.loc15_12.2 [symbolic = %Copy.facet.loc15_12.3 (constants.%Copy.facet.ed3)] // CHECK:STDOUT: %specific_impl_fn.loc15_12.1: = specific_impl_function %impl.elem0.loc15_12.1, @Copy.WithSelf.Op(constants.%Copy.facet.ed3) [symbolic = %specific_impl_fn.loc15_12.2 (constants.%specific_impl_fn.5cf)] // CHECK:STDOUT: %bound_method.loc15_12.2: = bound_method %addr, %specific_impl_fn.loc15_12.1 // CHECK:STDOUT: %Copy.WithSelf.Op.call: init @Class.GetAddr.%ptr.loc13_28.1 (%ptr.215) = call %bound_method.loc15_12.2(%addr) @@ -277,11 +300,14 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%T.f84) { +// CHECK:STDOUT: %T.patt.loc4_14.2 => constants.%T.patt.fe6 // CHECK:STDOUT: %T.loc4_14.1 => constants.%T.f84 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %T.as_type => constants.%T.as_type // CHECK:STDOUT: %require_complete => constants.%require_complete.d83 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.2c66b4.2 +// CHECK:STDOUT: %x.patt => constants.%x.patt.f3e // CHECK:STDOUT: %Class => constants.%Class.575 // CHECK:STDOUT: %Class.elem => constants.%Class.elem.1ee // CHECK:STDOUT: %Class.Get.type => constants.%Class.Get.type.0dd @@ -296,27 +322,38 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: %T => constants.%T.f84 // CHECK:STDOUT: %Class => constants.%Class.575 // CHECK:STDOUT: %pattern_type.loc7_10 => constants.%pattern_type.e18 +// CHECK:STDOUT: %self.param_patt.loc7_10.2 => constants.%self.param_patt.aaa +// CHECK:STDOUT: %self.patt.loc7_10.2 => constants.%self.patt.d8a // CHECK:STDOUT: %T.as_type.loc7_19.1 => constants.%T.as_type // CHECK:STDOUT: %.loc7_19.2 => constants.%.1ce700.2 // CHECK:STDOUT: %pattern_type.loc7_19 => constants.%pattern_type.2c66b4.2 +// CHECK:STDOUT: %return.param_patt.loc7_19.2 => constants.%return.param_patt.bf4475.2 +// CHECK:STDOUT: %return.patt.loc7_16.2 => constants.%return.patt.f44 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class.GetAddr(constants.%T.f84) { // CHECK:STDOUT: %T => constants.%T.f84 // CHECK:STDOUT: %Class => constants.%Class.575 // CHECK:STDOUT: %pattern_type.loc13_18 => constants.%pattern_type.e18 +// CHECK:STDOUT: %self.param_patt.loc13_18.2 => constants.%self.param_patt.f0d +// CHECK:STDOUT: %self.patt.loc13_18.2 => constants.%self.patt.282 // CHECK:STDOUT: %T.as_type.loc13_28.1 => constants.%T.as_type // CHECK:STDOUT: %ptr.loc13_28.1 => constants.%ptr.215 // CHECK:STDOUT: %.loc13_28.1 => constants.%.4fb // CHECK:STDOUT: %pattern_type.loc13_28 => constants.%pattern_type.d5b +// CHECK:STDOUT: %return.param_patt.loc13_28.2 => constants.%return.param_patt.4df +// CHECK:STDOUT: %return.patt.loc13_24.2 => constants.%return.patt.c21 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%Copy.facet.987) { +// CHECK:STDOUT: %T.patt.loc4_14.2 => constants.%T.patt.fe6 // CHECK:STDOUT: %T.loc4_14.1 => constants.%Copy.facet.987 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %T.as_type => constants.%i32 // CHECK:STDOUT: %require_complete => constants.%complete_type.f8a +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.6b6 +// CHECK:STDOUT: %x.patt => constants.%x.patt.29f // CHECK:STDOUT: %Class => constants.%Class.ce6 // CHECK:STDOUT: %Class.elem => constants.%Class.elem.32a // CHECK:STDOUT: %Class.Get.type => constants.%Class.Get.type.9ad @@ -331,16 +368,20 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: %T => constants.%Copy.facet.987 // CHECK:STDOUT: %Class => constants.%Class.ce6 // CHECK:STDOUT: %pattern_type.loc7_10 => constants.%pattern_type.658 +// CHECK:STDOUT: %self.param_patt.loc7_10.2 => constants.%self.param_patt.c5b +// CHECK:STDOUT: %self.patt.loc7_10.2 => constants.%self.patt.d4d // CHECK:STDOUT: %T.as_type.loc7_19.1 => constants.%i32 // CHECK:STDOUT: %.loc7_19.2 => constants.%.795 // CHECK:STDOUT: %pattern_type.loc7_19 => constants.%pattern_type.6b6 +// CHECK:STDOUT: %return.param_patt.loc7_19.2 => constants.%return.param_patt.a9a +// CHECK:STDOUT: %return.patt.loc7_16.2 => constants.%return.patt.e1b // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc7 => constants.%complete_type.0c6 // CHECK:STDOUT: %Class.elem => constants.%Class.elem.32a // CHECK:STDOUT: %require_complete.loc9 => constants.%complete_type.f8a // CHECK:STDOUT: %Copy.WithSelf.Op.type => constants.%Copy.WithSelf.Op.type.d09 -// CHECK:STDOUT: %.loc9_16.4 => constants.%.7a6 +// CHECK:STDOUT: %.loc9_16.5 => constants.%.7a6 // CHECK:STDOUT: %Copy.lookup_impl_witness => constants.%Copy.impl_witness.0e0 // CHECK:STDOUT: %impl.elem0.loc9_16.2 => constants.%Int.as.Copy.impl.Op.4f6 // CHECK:STDOUT: %specific_impl_fn.loc9_16.2 => constants.%Int.as.Copy.impl.Op.specific_fn @@ -350,20 +391,24 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: %T => constants.%Copy.facet.987 // CHECK:STDOUT: %Class => constants.%Class.ce6 // CHECK:STDOUT: %pattern_type.loc13_18 => constants.%pattern_type.658 +// CHECK:STDOUT: %self.param_patt.loc13_18.2 => constants.%self.param_patt.447 +// CHECK:STDOUT: %self.patt.loc13_18.2 => constants.%self.patt.255 // CHECK:STDOUT: %T.as_type.loc13_28.1 => constants.%i32 // CHECK:STDOUT: %ptr.loc13_28.1 => constants.%ptr.d08 // CHECK:STDOUT: %.loc13_28.1 => constants.%.952 // CHECK:STDOUT: %pattern_type.loc13_28 => constants.%pattern_type.f00 +// CHECK:STDOUT: %return.param_patt.loc13_28.2 => constants.%return.param_patt.7dd +// CHECK:STDOUT: %return.patt.loc13_24.2 => constants.%return.patt.dbe // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc13_18 => constants.%complete_type.0c6 // CHECK:STDOUT: %require_complete.loc13_24 => constants.%complete_type.07f // CHECK:STDOUT: %Class.elem => constants.%Class.elem.32a -// CHECK:STDOUT: %.loc15_12.2 => constants.%.c00 +// CHECK:STDOUT: %.loc15_12.3 => constants.%.c00 // CHECK:STDOUT: %Copy.lookup_impl_witness => constants.%Copy.impl_witness.ce1 -// CHECK:STDOUT: %Copy.facet.loc15_12.2 => constants.%Copy.facet.b49 +// CHECK:STDOUT: %Copy.facet.loc15_12.3 => constants.%Copy.facet.b49 // CHECK:STDOUT: %Copy.WithSelf.Op.type => constants.%Copy.WithSelf.Op.type.f9d -// CHECK:STDOUT: %.loc15_12.3 => constants.%.ac9 +// CHECK:STDOUT: %.loc15_12.4 => constants.%.ac9 // CHECK:STDOUT: %impl.elem0.loc15_12.2 => constants.%ptr.as.Copy.impl.Op.d1c // CHECK:STDOUT: %specific_impl_fn.loc15_12.2 => constants.%ptr.as.Copy.impl.Op.specific_fn // CHECK:STDOUT: } @@ -371,12 +416,16 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: --- static_member_fn_call.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Class.type: type = generic_class_type @Class [concrete] // CHECK:STDOUT: %Class.generic: %Class.type = struct_value () [concrete] // CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T) [symbolic] // CHECK:STDOUT: %.030: Core.Form = init_form %Class [symbolic] // CHECK:STDOUT: %pattern_type.36e: type = pattern_type %Class [symbolic] +// CHECK:STDOUT: %return.param_patt: %pattern_type.36e = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt: %pattern_type.36e = return_slot_pattern %return.param_patt, %Class [symbolic] // CHECK:STDOUT: %Class.Make.type: type = fn_type @Class.Make, @Class(%T) [symbolic] // CHECK:STDOUT: %Class.Make: %Class.Make.type = struct_value () [symbolic] // CHECK:STDOUT: %require_complete: = require_complete_type %Class [symbolic] @@ -407,9 +456,12 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @StaticMemberFunctionCall(constants.%T) { +// CHECK:STDOUT: %T.patt.loc8_30.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_30.1 => constants.%T // CHECK:STDOUT: %Class.loc8_49.1 => constants.%Class // CHECK:STDOUT: %.loc8_49.2 => constants.%.030 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.36e +// CHECK:STDOUT: %return.param_patt.loc8_49.2 => constants.%return.param_patt +// CHECK:STDOUT: %return.patt.loc8_39.2 => constants.%return.patt // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/generic/member_inline.carbon b/toolchain/check/testdata/class/generic/member_inline.carbon index 3a2943e9b56c..4f37b5993b01 100644 --- a/toolchain/check/testdata/class/generic/member_inline.carbon +++ b/toolchain/check/testdata/class/generic/member_inline.carbon @@ -53,19 +53,27 @@ class C(T:! Core.Copy) { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %pattern_type.e81: type = pattern_type %Copy.type [concrete] +// CHECK:STDOUT: %T.patt.fe6: %pattern_type.e81 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.f84: %Copy.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Class.type: type = generic_class_type @Class [concrete] // CHECK:STDOUT: %Class.generic: %Class.type = struct_value () [concrete] // CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T.f84) [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T.f84 [symbolic] // CHECK:STDOUT: %pattern_type.2c66b4.2: type = pattern_type %T.as_type [symbolic] +// CHECK:STDOUT: %n.param_patt: %pattern_type.2c66b4.2 = value_param_pattern [symbolic] +// CHECK:STDOUT: %n.patt.8c9: %pattern_type.2c66b4.2 = at_binding_pattern n, %n.param_patt [symbolic] // CHECK:STDOUT: %.1ce700.2: Core.Form = init_form %T.as_type [symbolic] +// CHECK:STDOUT: %return.param_patt.bf4475.2: %pattern_type.2c66b4.2 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.f44: %pattern_type.2c66b4.2 = return_slot_pattern %return.param_patt.bf4475.2, %T.as_type [symbolic] // CHECK:STDOUT: %Class.F.type: type = fn_type @Class.F, @Class(%T.f84) [symbolic] // CHECK:STDOUT: %Class.F: %Class.F.type = struct_value () [symbolic] // CHECK:STDOUT: %pattern_type.e18: type = pattern_type %Class [symbolic] +// CHECK:STDOUT: %self.param_patt.aaa: %pattern_type.e18 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.d8a: %pattern_type.e18 = at_binding_pattern self, %self.param_patt.aaa [symbolic] // CHECK:STDOUT: %Class.G.type: type = fn_type @Class.G, @Class(%T.f84) [symbolic] // CHECK:STDOUT: %Class.G: %Class.G.type = struct_value () [symbolic] // CHECK:STDOUT: %require_complete.d83: = require_complete_type %T.as_type [symbolic] +// CHECK:STDOUT: %n.patt.4d3: %pattern_type.2c66b4.2 = ref_binding_pattern n [symbolic] // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class, %T.as_type [symbolic] // CHECK:STDOUT: %struct_type.n: type = struct_type {.n: %T.as_type} [symbolic] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.n [symbolic] @@ -88,7 +96,7 @@ class C(T:! Core.Copy) { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %Class.decl: %Class.type = class_decl @Class [concrete = constants.%Class.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.e81 = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc5_14.1: %pattern_type.e81 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_14.2 (constants.%T.patt.fe6)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc5: type = splice_block %Copy.ref [concrete = constants.%Copy.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -100,6 +108,7 @@ class C(T:! Core.Copy) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%T.loc5_14.2: %Copy.type) { +// CHECK:STDOUT: %T.patt.loc5_14.2: %pattern_type.e81 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_14.2 (constants.%T.patt.fe6)] // CHECK:STDOUT: %T.loc5_14.1: %Copy.type = symbolic_binding T, 0 [symbolic = %T.loc5_14.1 (constants.%T.f84)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -109,6 +118,8 @@ class C(T:! Core.Copy) { // CHECK:STDOUT: %Class.G: @Class.%Class.G.type (%Class.G.type) = struct_value () [symbolic = %Class.G (constants.%Class.G)] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T.loc5_14.1 [symbolic = %T.as_type (constants.%T.as_type)] // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type [symbolic = %require_complete (constants.%require_complete.d83)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type [symbolic = %pattern_type (constants.%pattern_type.2c66b4.2)] +// CHECK:STDOUT: %n.patt: @Class.%pattern_type (%pattern_type.2c66b4.2) = ref_binding_pattern n [symbolic = %n.patt (constants.%n.patt.4d3)] // CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T.loc5_14.1) [symbolic = %Class (constants.%Class)] // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class, %T.as_type [symbolic = %Class.elem (constants.%Class.elem)] // CHECK:STDOUT: %struct_type.n: type = struct_type {.n: @Class.%T.as_type (%T.as_type)} [symbolic = %struct_type.n (constants.%struct_type.n)] @@ -116,10 +127,10 @@ class C(T:! Core.Copy) { // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %Class.F.decl: @Class.%Class.F.type (%Class.F.type) = fn_decl @Class.F [symbolic = @Class.%Class.F (constants.%Class.F)] { -// CHECK:STDOUT: %n.param_patt: @Class.F.%pattern_type (%pattern_type.2c66b4.2) = value_param_pattern [concrete] -// CHECK:STDOUT: %n.patt: @Class.F.%pattern_type (%pattern_type.2c66b4.2) = at_binding_pattern n, %n.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @Class.F.%pattern_type (%pattern_type.2c66b4.2) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @Class.F.%pattern_type (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt, %.loc6_17.3 [concrete] +// CHECK:STDOUT: %n.param_patt.loc6_9.1: @Class.F.%pattern_type (%pattern_type.2c66b4.2) = value_param_pattern [symbolic = %n.param_patt.loc6_9.2 (constants.%n.param_patt)] +// CHECK:STDOUT: %n.patt.loc6_9.1: @Class.F.%pattern_type (%pattern_type.2c66b4.2) = at_binding_pattern n, %n.param_patt.loc6_9.1 [symbolic = %n.patt.loc6_9.2 (constants.%n.patt.8c9)] +// CHECK:STDOUT: %return.param_patt.loc6_17.1: @Class.F.%pattern_type (%pattern_type.2c66b4.2) = out_param_pattern [symbolic = %return.param_patt.loc6_17.2 (constants.%return.param_patt.bf4475.2)] +// CHECK:STDOUT: %return.patt.loc6_14.1: @Class.F.%pattern_type (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt.loc6_17.1, %.loc6_17.3 [symbolic = %return.patt.loc6_14.2 (constants.%return.patt.f44)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc6_17: %Copy.type = name_ref T, @Class.%T.loc5_14.2 [symbolic = %T (constants.%T.f84)] // CHECK:STDOUT: %T.as_type.loc6_17: type = facet_access_type %T.ref.loc6_17 [symbolic = %T.as_type.loc6_11.1 (constants.%T.as_type)] @@ -136,10 +147,10 @@ class C(T:! Core.Copy) { // CHECK:STDOUT: %return: ref @Class.F.%T.as_type.loc6_11.1 (%T.as_type) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Class.G.decl: @Class.%Class.G.type (%Class.G.type) = fn_decl @Class.G [symbolic = @Class.%Class.G (constants.%Class.G)] { -// CHECK:STDOUT: %self.param_patt: @Class.G.%pattern_type.loc10_8 (%pattern_type.e18) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @Class.G.%pattern_type.loc10_8 (%pattern_type.e18) = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @Class.G.%pattern_type.loc10_17 (%pattern_type.2c66b4.2) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @Class.G.%pattern_type.loc10_17 (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt, %.loc10_17.3 [concrete] +// CHECK:STDOUT: %self.param_patt.loc10_8.1: @Class.G.%pattern_type.loc10_8 (%pattern_type.e18) = value_param_pattern [symbolic = %self.param_patt.loc10_8.2 (constants.%self.param_patt.aaa)] +// CHECK:STDOUT: %self.patt.loc10_8.1: @Class.G.%pattern_type.loc10_8 (%pattern_type.e18) = at_binding_pattern self, %self.param_patt.loc10_8.1 [symbolic = %self.patt.loc10_8.2 (constants.%self.patt.d8a)] +// CHECK:STDOUT: %return.param_patt.loc10_17.1: @Class.G.%pattern_type.loc10_17 (%pattern_type.2c66b4.2) = out_param_pattern [symbolic = %return.param_patt.loc10_17.2 (constants.%return.param_patt.bf4475.2)] +// CHECK:STDOUT: %return.patt.loc10_14.1: @Class.G.%pattern_type.loc10_17 (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt.loc10_17.1, %.loc10_17.3 [symbolic = %return.patt.loc10_14.2 (constants.%return.patt.f44)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: %Copy.type = name_ref T, @Class.%T.loc5_14.2 [symbolic = %T (constants.%T.f84)] // CHECK:STDOUT: %T.as_type.loc10_17.2: type = facet_access_type %T.ref [symbolic = %T.as_type.loc10_17.1 (constants.%T.as_type)] @@ -171,22 +182,27 @@ class C(T:! Core.Copy) { // CHECK:STDOUT: %T: %Copy.type = symbolic_binding T, 0 [symbolic = %T (constants.%T.f84)] // CHECK:STDOUT: %T.as_type.loc6_11.1: type = facet_access_type %T [symbolic = %T.as_type.loc6_11.1 (constants.%T.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc6_11.1 [symbolic = %pattern_type (constants.%pattern_type.2c66b4.2)] +// CHECK:STDOUT: %n.param_patt.loc6_9.2: @Class.F.%pattern_type (%pattern_type.2c66b4.2) = value_param_pattern [symbolic = %n.param_patt.loc6_9.2 (constants.%n.param_patt)] +// CHECK:STDOUT: %n.patt.loc6_9.2: @Class.F.%pattern_type (%pattern_type.2c66b4.2) = at_binding_pattern n, %n.param_patt.loc6_9.2 [symbolic = %n.patt.loc6_9.2 (constants.%n.patt.8c9)] // CHECK:STDOUT: %.loc6_17.2: Core.Form = init_form %T.as_type.loc6_11.1 [symbolic = %.loc6_17.2 (constants.%.1ce700.2)] +// CHECK:STDOUT: %return.param_patt.loc6_17.2: @Class.F.%pattern_type (%pattern_type.2c66b4.2) = out_param_pattern [symbolic = %return.param_patt.loc6_17.2 (constants.%return.param_patt.bf4475.2)] +// CHECK:STDOUT: %return.patt.loc6_14.2: @Class.F.%pattern_type (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt.loc6_17.2, %T.as_type.loc6_11.1 [symbolic = %return.patt.loc6_14.2 (constants.%return.patt.f44)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc6_11.1 [symbolic = %require_complete (constants.%require_complete.d83)] // CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%T) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.c85f21.2)] -// CHECK:STDOUT: %.loc7_12.2: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %T [symbolic = %.loc7_12.2 (constants.%.c29)] +// CHECK:STDOUT: %.loc7_12.3: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %T [symbolic = %.loc7_12.3 (constants.%.c29)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %T, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.d9c)] -// CHECK:STDOUT: %impl.elem0.loc7_12.2: @Class.F.%.loc7_12.2 (%.c29) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc7_12.2 (constants.%impl.elem0.bd2)] +// CHECK:STDOUT: %impl.elem0.loc7_12.2: @Class.F.%.loc7_12.3 (%.c29) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc7_12.2 (constants.%impl.elem0.bd2)] // CHECK:STDOUT: %specific_impl_fn.loc7_12.2: = specific_impl_function %impl.elem0.loc7_12.2, @Copy.WithSelf.Op(%T) [symbolic = %specific_impl_fn.loc7_12.2 (constants.%specific_impl_fn.e2a)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%n.param: @Class.F.%T.as_type.loc6_11.1 (%T.as_type)) -> out %return.param: @Class.F.%T.as_type.loc6_11.1 (%T.as_type) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %n.ref: @Class.F.%T.as_type.loc6_11.1 (%T.as_type) = name_ref n, %n -// CHECK:STDOUT: %impl.elem0.loc7_12.1: @Class.F.%.loc7_12.2 (%.c29) = impl_witness_access constants.%Copy.lookup_impl_witness.d9c, element0 [symbolic = %impl.elem0.loc7_12.2 (constants.%impl.elem0.bd2)] +// CHECK:STDOUT: %impl.elem0.loc7_12.1: @Class.F.%.loc7_12.3 (%.c29) = impl_witness_access constants.%Copy.lookup_impl_witness.d9c, element0 [symbolic = %impl.elem0.loc7_12.2 (constants.%impl.elem0.bd2)] // CHECK:STDOUT: %bound_method.loc7_12.1: = bound_method %n.ref, %impl.elem0.loc7_12.1 // CHECK:STDOUT: %.loc7_12.1: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T (constants.%T.f84)] +// CHECK:STDOUT: %.loc7_12.2: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T (constants.%T.f84)] // CHECK:STDOUT: %specific_impl_fn.loc7_12.1: = specific_impl_function %impl.elem0.loc7_12.1, @Copy.WithSelf.Op(constants.%T.f84) [symbolic = %specific_impl_fn.loc7_12.2 (constants.%specific_impl_fn.e2a)] // CHECK:STDOUT: %bound_method.loc7_12.2: = bound_method %n.ref, %specific_impl_fn.loc7_12.1 // CHECK:STDOUT: %.loc6_17.1: ref @Class.F.%T.as_type.loc6_11.1 (%T.as_type) = splice_block %return.param {} @@ -199,18 +215,22 @@ class C(T:! Core.Copy) { // CHECK:STDOUT: %T: %Copy.type = symbolic_binding T, 0 [symbolic = %T (constants.%T.f84)] // CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T) [symbolic = %Class (constants.%Class)] // CHECK:STDOUT: %pattern_type.loc10_8: type = pattern_type %Class [symbolic = %pattern_type.loc10_8 (constants.%pattern_type.e18)] +// CHECK:STDOUT: %self.param_patt.loc10_8.2: @Class.G.%pattern_type.loc10_8 (%pattern_type.e18) = value_param_pattern [symbolic = %self.param_patt.loc10_8.2 (constants.%self.param_patt.aaa)] +// CHECK:STDOUT: %self.patt.loc10_8.2: @Class.G.%pattern_type.loc10_8 (%pattern_type.e18) = at_binding_pattern self, %self.param_patt.loc10_8.2 [symbolic = %self.patt.loc10_8.2 (constants.%self.patt.d8a)] // CHECK:STDOUT: %T.as_type.loc10_17.1: type = facet_access_type %T [symbolic = %T.as_type.loc10_17.1 (constants.%T.as_type)] // CHECK:STDOUT: %.loc10_17.2: Core.Form = init_form %T.as_type.loc10_17.1 [symbolic = %.loc10_17.2 (constants.%.1ce700.2)] // CHECK:STDOUT: %pattern_type.loc10_17: type = pattern_type %T.as_type.loc10_17.1 [symbolic = %pattern_type.loc10_17 (constants.%pattern_type.2c66b4.2)] +// CHECK:STDOUT: %return.param_patt.loc10_17.2: @Class.G.%pattern_type.loc10_17 (%pattern_type.2c66b4.2) = out_param_pattern [symbolic = %return.param_patt.loc10_17.2 (constants.%return.param_patt.bf4475.2)] +// CHECK:STDOUT: %return.patt.loc10_14.2: @Class.G.%pattern_type.loc10_17 (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt.loc10_17.2, %T.as_type.loc10_17.1 [symbolic = %return.patt.loc10_14.2 (constants.%return.patt.f44)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc10: = require_complete_type %Class [symbolic = %require_complete.loc10 (constants.%require_complete.1dd)] // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class, %T.as_type.loc10_17.1 [symbolic = %Class.elem (constants.%Class.elem)] // CHECK:STDOUT: %require_complete.loc11: = require_complete_type %T.as_type.loc10_17.1 [symbolic = %require_complete.loc11 (constants.%require_complete.d83)] // CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%T) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.c85f21.2)] -// CHECK:STDOUT: %.loc11_16.4: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %T [symbolic = %.loc11_16.4 (constants.%.c29)] +// CHECK:STDOUT: %.loc11_16.5: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %T [symbolic = %.loc11_16.5 (constants.%.c29)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %T, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.d9c)] -// CHECK:STDOUT: %impl.elem0.loc11_16.2: @Class.G.%.loc11_16.4 (%.c29) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc11_16.2 (constants.%impl.elem0.bd2)] +// CHECK:STDOUT: %impl.elem0.loc11_16.2: @Class.G.%.loc11_16.5 (%.c29) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc11_16.2 (constants.%impl.elem0.bd2)] // CHECK:STDOUT: %specific_impl_fn.loc11_16.2: = specific_impl_function %impl.elem0.loc11_16.2, @Copy.WithSelf.Op(%T) [symbolic = %specific_impl_fn.loc11_16.2 (constants.%specific_impl_fn.e2a)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Class.G.%Class (%Class)) -> out %return.param: @Class.G.%T.as_type.loc10_17.1 (%T.as_type) { @@ -219,9 +239,10 @@ class C(T:! Core.Copy) { // CHECK:STDOUT: %n.ref: @Class.G.%Class.elem (%Class.elem) = name_ref n, @Class.%.loc14 [concrete = @Class.%.loc14] // CHECK:STDOUT: %.loc11_16.1: ref @Class.G.%T.as_type.loc10_17.1 (%T.as_type) = class_element_access %self.ref, element0 // CHECK:STDOUT: %.loc11_16.2: @Class.G.%T.as_type.loc10_17.1 (%T.as_type) = acquire_value %.loc11_16.1 -// CHECK:STDOUT: %impl.elem0.loc11_16.1: @Class.G.%.loc11_16.4 (%.c29) = impl_witness_access constants.%Copy.lookup_impl_witness.d9c, element0 [symbolic = %impl.elem0.loc11_16.2 (constants.%impl.elem0.bd2)] +// CHECK:STDOUT: %impl.elem0.loc11_16.1: @Class.G.%.loc11_16.5 (%.c29) = impl_witness_access constants.%Copy.lookup_impl_witness.d9c, element0 [symbolic = %impl.elem0.loc11_16.2 (constants.%impl.elem0.bd2)] // CHECK:STDOUT: %bound_method.loc11_16.1: = bound_method %.loc11_16.2, %impl.elem0.loc11_16.1 // CHECK:STDOUT: %.loc11_16.3: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T (constants.%T.f84)] +// CHECK:STDOUT: %.loc11_16.4: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T (constants.%T.f84)] // CHECK:STDOUT: %specific_impl_fn.loc11_16.1: = specific_impl_function %impl.elem0.loc11_16.1, @Copy.WithSelf.Op(constants.%T.f84) [symbolic = %specific_impl_fn.loc11_16.2 (constants.%specific_impl_fn.e2a)] // CHECK:STDOUT: %bound_method.loc11_16.2: = bound_method %.loc11_16.2, %specific_impl_fn.loc11_16.1 // CHECK:STDOUT: %.loc10_17.1: ref @Class.G.%T.as_type.loc10_17.1 (%T.as_type) = splice_block %return.param {} @@ -231,6 +252,7 @@ class C(T:! Core.Copy) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%T.f84) { +// CHECK:STDOUT: %T.patt.loc5_14.2 => constants.%T.patt.fe6 // CHECK:STDOUT: %T.loc5_14.1 => constants.%T.f84 // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -240,6 +262,8 @@ class C(T:! Core.Copy) { // CHECK:STDOUT: %Class.G => constants.%Class.G // CHECK:STDOUT: %T.as_type => constants.%T.as_type // CHECK:STDOUT: %require_complete => constants.%require_complete.d83 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.2c66b4.2 +// CHECK:STDOUT: %n.patt => constants.%n.patt.4d3 // CHECK:STDOUT: %Class => constants.%Class // CHECK:STDOUT: %Class.elem => constants.%Class.elem // CHECK:STDOUT: %struct_type.n => constants.%struct_type.n @@ -250,16 +274,24 @@ class C(T:! Core.Copy) { // CHECK:STDOUT: %T => constants.%T.f84 // CHECK:STDOUT: %T.as_type.loc6_11.1 => constants.%T.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.2c66b4.2 +// CHECK:STDOUT: %n.param_patt.loc6_9.2 => constants.%n.param_patt +// CHECK:STDOUT: %n.patt.loc6_9.2 => constants.%n.patt.8c9 // CHECK:STDOUT: %.loc6_17.2 => constants.%.1ce700.2 +// CHECK:STDOUT: %return.param_patt.loc6_17.2 => constants.%return.param_patt.bf4475.2 +// CHECK:STDOUT: %return.patt.loc6_14.2 => constants.%return.patt.f44 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class.G(constants.%T.f84) { // CHECK:STDOUT: %T => constants.%T.f84 // CHECK:STDOUT: %Class => constants.%Class // CHECK:STDOUT: %pattern_type.loc10_8 => constants.%pattern_type.e18 +// CHECK:STDOUT: %self.param_patt.loc10_8.2 => constants.%self.param_patt.aaa +// CHECK:STDOUT: %self.patt.loc10_8.2 => constants.%self.patt.d8a // CHECK:STDOUT: %T.as_type.loc10_17.1 => constants.%T.as_type // CHECK:STDOUT: %.loc10_17.2 => constants.%.1ce700.2 // CHECK:STDOUT: %pattern_type.loc10_17 => constants.%pattern_type.2c66b4.2 +// CHECK:STDOUT: %return.param_patt.loc10_17.2 => constants.%return.param_patt.bf4475.2 +// CHECK:STDOUT: %return.patt.loc10_14.2 => constants.%return.patt.f44 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_member_inline_missing_self_dot.carbon @@ -269,6 +301,7 @@ class C(T:! Core.Copy) { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %pattern_type.e81: type = pattern_type %Copy.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.e81 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: %Copy.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] @@ -292,7 +325,7 @@ class C(T:! Core.Copy) { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.e81 = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc5_10.1: %pattern_type.e81 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_10.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc5: type = splice_block %Copy.ref [concrete = constants.%Copy.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -304,6 +337,7 @@ class C(T:! Core.Copy) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc5_10.2: %Copy.type) { +// CHECK:STDOUT: %T.patt.loc5_10.2: %pattern_type.e81 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_10.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc5_10.1: %Copy.type = symbolic_binding T, 0 [symbolic = %T.loc5_10.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -339,6 +373,7 @@ class C(T:! Core.Copy) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%T) { +// CHECK:STDOUT: %T.patt.loc5_10.2 => constants.%T.patt // CHECK:STDOUT: %T.loc5_10.1 => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: diff --git a/toolchain/check/testdata/class/generic/member_lookup.carbon b/toolchain/check/testdata/class/generic/member_lookup.carbon index 58b7c0d1850b..27fb0d2d47db 100644 --- a/toolchain/check/testdata/class/generic/member_lookup.carbon +++ b/toolchain/check/testdata/class/generic/member_lookup.carbon @@ -81,12 +81,18 @@ fn AccessMissingConcrete(x: Derived(i32)) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] +// CHECK:STDOUT: %pattern_type.e81: type = pattern_type %Copy.type [concrete] +// CHECK:STDOUT: %T.patt.fe6: %pattern_type.e81 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.f84: %Copy.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T.f84 [symbolic] // CHECK:STDOUT: %Derived.e87: type = class_type @Derived, @Derived(%T.as_type) [symbolic] // CHECK:STDOUT: %pattern_type.ebc: type = pattern_type %Derived.e87 [symbolic] +// CHECK:STDOUT: %x.param_patt.203: %pattern_type.ebc = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.c37: %pattern_type.ebc = at_binding_pattern x, %x.param_patt.203 [symbolic] // CHECK:STDOUT: %.1ce700.2: Core.Form = init_form %T.as_type [symbolic] // CHECK:STDOUT: %pattern_type.2c66b4.2: type = pattern_type %T.as_type [symbolic] +// CHECK:STDOUT: %return.param_patt.bf4475.2: %pattern_type.2c66b4.2 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.f44: %pattern_type.2c66b4.2 = return_slot_pattern %return.param_patt.bf4475.2, %T.as_type [symbolic] // CHECK:STDOUT: %Base.146: type = class_type @Base, @Base(%T.as_type) [symbolic] // CHECK:STDOUT: %require_complete.0fb: = require_complete_type %Base.146 [symbolic] // CHECK:STDOUT: %require_complete.d83: = require_complete_type %T.as_type [symbolic] @@ -107,9 +113,9 @@ fn AccessMissingConcrete(x: Derived(i32)) -> i32 { // CHECK:STDOUT: %Derived.elem: type = unbound_element_type %Derived.loc13_45.1, %T.as_type.loc13_45.1 [symbolic = %Derived.elem (constants.%Derived.elem.eb3)] // CHECK:STDOUT: %require_complete.loc15: = require_complete_type %T.as_type.loc13_45.1 [symbolic = %require_complete.loc15 (constants.%require_complete.d83)] // CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%T.loc13_19.1) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.c85f21.2)] -// CHECK:STDOUT: %.loc15_11.4: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %T.loc13_19.1 [symbolic = %.loc15_11.4 (constants.%.c29)] +// CHECK:STDOUT: %.loc15_11.5: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %T.loc13_19.1 [symbolic = %.loc15_11.5 (constants.%.c29)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %T.loc13_19.1, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.d9c)] -// CHECK:STDOUT: %impl.elem0.loc15_11.2: @AccessDerived.%.loc15_11.4 (%.c29) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc15_11.2 (constants.%impl.elem0.bd2)] +// CHECK:STDOUT: %impl.elem0.loc15_11.2: @AccessDerived.%.loc15_11.5 (%.c29) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc15_11.2 (constants.%impl.elem0.bd2)] // CHECK:STDOUT: %specific_impl_fn.loc15_11.2: = specific_impl_function %impl.elem0.loc15_11.2, @Copy.WithSelf.Op(%T.loc13_19.1) [symbolic = %specific_impl_fn.loc15_11.2 (constants.%specific_impl_fn.e2a)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%x.param: @AccessDerived.%Derived.loc13_45.1 (%Derived.e87)) -> out %return.param: @AccessDerived.%T.as_type.loc13_45.1 (%T.as_type) { @@ -118,9 +124,10 @@ fn AccessMissingConcrete(x: Derived(i32)) -> i32 { // CHECK:STDOUT: %d.ref: @AccessDerived.%Derived.elem (%Derived.elem.eb3) = name_ref d, @Derived.%.loc10 [concrete = @Derived.%.loc10] // CHECK:STDOUT: %.loc15_11.1: ref @AccessDerived.%T.as_type.loc13_45.1 (%T.as_type) = class_element_access %x.ref, element1 // CHECK:STDOUT: %.loc15_11.2: @AccessDerived.%T.as_type.loc13_45.1 (%T.as_type) = acquire_value %.loc15_11.1 -// CHECK:STDOUT: %impl.elem0.loc15_11.1: @AccessDerived.%.loc15_11.4 (%.c29) = impl_witness_access constants.%Copy.lookup_impl_witness.d9c, element0 [symbolic = %impl.elem0.loc15_11.2 (constants.%impl.elem0.bd2)] +// CHECK:STDOUT: %impl.elem0.loc15_11.1: @AccessDerived.%.loc15_11.5 (%.c29) = impl_witness_access constants.%Copy.lookup_impl_witness.d9c, element0 [symbolic = %impl.elem0.loc15_11.2 (constants.%impl.elem0.bd2)] // CHECK:STDOUT: %bound_method.loc15_11.1: = bound_method %.loc15_11.2, %impl.elem0.loc15_11.1 // CHECK:STDOUT: %.loc15_11.3: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T.loc13_19.1 (constants.%T.f84)] +// CHECK:STDOUT: %.loc15_11.4: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T.loc13_19.1 (constants.%T.f84)] // CHECK:STDOUT: %specific_impl_fn.loc15_11.1: = specific_impl_function %impl.elem0.loc15_11.1, @Copy.WithSelf.Op(constants.%T.f84) [symbolic = %specific_impl_fn.loc15_11.2 (constants.%specific_impl_fn.e2a)] // CHECK:STDOUT: %bound_method.loc15_11.2: = bound_method %.loc15_11.2, %specific_impl_fn.loc15_11.1 // CHECK:STDOUT: @@ -139,9 +146,9 @@ fn AccessMissingConcrete(x: Derived(i32)) -> i32 { // CHECK:STDOUT: %require_complete.loc21_11: = require_complete_type %Base [symbolic = %require_complete.loc21_11 (constants.%require_complete.0fb)] // CHECK:STDOUT: %require_complete.loc21_13: = require_complete_type %T.as_type.loc19_42.1 [symbolic = %require_complete.loc21_13 (constants.%require_complete.d83)] // CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%T.loc19_16.1) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.c85f21.2)] -// CHECK:STDOUT: %.loc21_11.6: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %T.loc19_16.1 [symbolic = %.loc21_11.6 (constants.%.c29)] +// CHECK:STDOUT: %.loc21_11.7: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %T.loc19_16.1 [symbolic = %.loc21_11.7 (constants.%.c29)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %T.loc19_16.1, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.d9c)] -// CHECK:STDOUT: %impl.elem0.loc21_11.2: @AccessBase.%.loc21_11.6 (%.c29) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc21_11.2 (constants.%impl.elem0.bd2)] +// CHECK:STDOUT: %impl.elem0.loc21_11.2: @AccessBase.%.loc21_11.7 (%.c29) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc21_11.2 (constants.%impl.elem0.bd2)] // CHECK:STDOUT: %specific_impl_fn.loc21_11.2: = specific_impl_function %impl.elem0.loc21_11.2, @Copy.WithSelf.Op(%T.loc19_16.1) [symbolic = %specific_impl_fn.loc21_11.2 (constants.%specific_impl_fn.e2a)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%x.param: @AccessBase.%Derived.loc19_42.1 (%Derived.e87)) -> out %return.param: @AccessBase.%T.as_type.loc19_42.1 (%T.as_type) { @@ -152,9 +159,10 @@ fn AccessMissingConcrete(x: Derived(i32)) -> i32 { // CHECK:STDOUT: %.loc21_11.2: ref @AccessBase.%Base (%Base.146) = converted %x.ref, %.loc21_11.1 // CHECK:STDOUT: %.loc21_11.3: ref @AccessBase.%T.as_type.loc19_42.1 (%T.as_type) = class_element_access %.loc21_11.2, element0 // CHECK:STDOUT: %.loc21_11.4: @AccessBase.%T.as_type.loc19_42.1 (%T.as_type) = acquire_value %.loc21_11.3 -// CHECK:STDOUT: %impl.elem0.loc21_11.1: @AccessBase.%.loc21_11.6 (%.c29) = impl_witness_access constants.%Copy.lookup_impl_witness.d9c, element0 [symbolic = %impl.elem0.loc21_11.2 (constants.%impl.elem0.bd2)] +// CHECK:STDOUT: %impl.elem0.loc21_11.1: @AccessBase.%.loc21_11.7 (%.c29) = impl_witness_access constants.%Copy.lookup_impl_witness.d9c, element0 [symbolic = %impl.elem0.loc21_11.2 (constants.%impl.elem0.bd2)] // CHECK:STDOUT: %bound_method.loc21_11.1: = bound_method %.loc21_11.4, %impl.elem0.loc21_11.1 // CHECK:STDOUT: %.loc21_11.5: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T.loc19_16.1 (constants.%T.f84)] +// CHECK:STDOUT: %.loc21_11.6: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T.loc19_16.1 (constants.%T.f84)] // CHECK:STDOUT: %specific_impl_fn.loc21_11.1: = specific_impl_function %impl.elem0.loc21_11.1, @Copy.WithSelf.Op(constants.%T.f84) [symbolic = %specific_impl_fn.loc21_11.2 (constants.%specific_impl_fn.e2a)] // CHECK:STDOUT: %bound_method.loc21_11.2: = bound_method %.loc21_11.4, %specific_impl_fn.loc21_11.1 // CHECK:STDOUT: @@ -164,20 +172,30 @@ fn AccessMissingConcrete(x: Derived(i32)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @AccessDerived(constants.%T.f84) { +// CHECK:STDOUT: %T.patt.loc13_19.2 => constants.%T.patt.fe6 // CHECK:STDOUT: %T.loc13_19.1 => constants.%T.f84 // CHECK:STDOUT: %T.as_type.loc13_45.1 => constants.%T.as_type // CHECK:STDOUT: %Derived.loc13_45.1 => constants.%Derived.e87 // CHECK:STDOUT: %pattern_type.loc13_34 => constants.%pattern_type.ebc +// CHECK:STDOUT: %x.param_patt.loc13_34.2 => constants.%x.param_patt.203 +// CHECK:STDOUT: %x.patt.loc13_34.2 => constants.%x.patt.c37 // CHECK:STDOUT: %.loc13_51.2 => constants.%.1ce700.2 // CHECK:STDOUT: %pattern_type.loc13_51 => constants.%pattern_type.2c66b4.2 +// CHECK:STDOUT: %return.param_patt.loc13_51.2 => constants.%return.param_patt.bf4475.2 +// CHECK:STDOUT: %return.patt.loc13_48.2 => constants.%return.patt.f44 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @AccessBase(constants.%T.f84) { +// CHECK:STDOUT: %T.patt.loc19_16.2 => constants.%T.patt.fe6 // CHECK:STDOUT: %T.loc19_16.1 => constants.%T.f84 // CHECK:STDOUT: %T.as_type.loc19_42.1 => constants.%T.as_type // CHECK:STDOUT: %Derived.loc19_42.1 => constants.%Derived.e87 // CHECK:STDOUT: %pattern_type.loc19_31 => constants.%pattern_type.ebc +// CHECK:STDOUT: %x.param_patt.loc19_31.2 => constants.%x.param_patt.203 +// CHECK:STDOUT: %x.patt.loc19_31.2 => constants.%x.patt.c37 // CHECK:STDOUT: %.loc19_48.2 => constants.%.1ce700.2 // CHECK:STDOUT: %pattern_type.loc19_48 => constants.%pattern_type.2c66b4.2 +// CHECK:STDOUT: %return.param_patt.loc19_48.2 => constants.%return.param_patt.bf4475.2 +// CHECK:STDOUT: %return.patt.loc19_45.2 => constants.%return.patt.f44 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/generic/member_out_of_line.carbon b/toolchain/check/testdata/class/generic/member_out_of_line.carbon index 8d6500fa301e..fcc1fe57191a 100644 --- a/toolchain/check/testdata/class/generic/member_out_of_line.carbon +++ b/toolchain/check/testdata/class/generic/member_out_of_line.carbon @@ -120,19 +120,27 @@ fn Generic(unused T:! ()).WrongType() {} // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %pattern_type.e81: type = pattern_type %Copy.type [concrete] +// CHECK:STDOUT: %T.patt.fe6: %pattern_type.e81 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.f84: %Copy.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Class.type: type = generic_class_type @Class [concrete] // CHECK:STDOUT: %Class.generic: %Class.type = struct_value () [concrete] // CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T.f84) [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T.f84 [symbolic] // CHECK:STDOUT: %pattern_type.2c66b4.2: type = pattern_type %T.as_type [symbolic] +// CHECK:STDOUT: %n.param_patt: %pattern_type.2c66b4.2 = value_param_pattern [symbolic] +// CHECK:STDOUT: %n.patt.8c9: %pattern_type.2c66b4.2 = at_binding_pattern n, %n.param_patt [symbolic] // CHECK:STDOUT: %.1ce700.2: Core.Form = init_form %T.as_type [symbolic] +// CHECK:STDOUT: %return.param_patt.bf4475.2: %pattern_type.2c66b4.2 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.f44: %pattern_type.2c66b4.2 = return_slot_pattern %return.param_patt.bf4475.2, %T.as_type [symbolic] // CHECK:STDOUT: %Class.F.type: type = fn_type @Class.F, @Class(%T.f84) [symbolic] // CHECK:STDOUT: %Class.F: %Class.F.type = struct_value () [symbolic] // CHECK:STDOUT: %pattern_type.e18: type = pattern_type %Class [symbolic] +// CHECK:STDOUT: %self.param_patt.aaa: %pattern_type.e18 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.d8a: %pattern_type.e18 = at_binding_pattern self, %self.param_patt.aaa [symbolic] // CHECK:STDOUT: %Class.G.type: type = fn_type @Class.G, @Class(%T.f84) [symbolic] // CHECK:STDOUT: %Class.G: %Class.G.type = struct_value () [symbolic] // CHECK:STDOUT: %require_complete.d83: = require_complete_type %T.as_type [symbolic] +// CHECK:STDOUT: %n.patt.4d3: %pattern_type.2c66b4.2 = ref_binding_pattern n [symbolic] // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class, %T.as_type [symbolic] // CHECK:STDOUT: %struct_type.n: type = struct_type {.n: %T.as_type} [symbolic] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.n [symbolic] @@ -155,7 +163,7 @@ fn Generic(unused T:! ()).WrongType() {} // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %Class.decl: %Class.type = class_decl @Class [concrete = constants.%Class.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.e81 = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc5_14.1: %pattern_type.e81 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_14.2 (constants.%T.patt.fe6)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc5: type = splice_block %Copy.ref [concrete = constants.%Copy.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -165,10 +173,10 @@ fn Generic(unused T:! ()).WrongType() {} // CHECK:STDOUT: %T.loc5_14.2: %Copy.type = symbolic_binding T, 0 [symbolic = %T.loc5_14.1 (constants.%T.f84)] // CHECK:STDOUT: } // CHECK:STDOUT: %Class.F.decl: %Class.F.type = fn_decl @Class.F [symbolic = constants.%Class.F] { -// CHECK:STDOUT: %n.param_patt: @Class.F.%pattern_type (%pattern_type.2c66b4.2) = value_param_pattern [concrete] -// CHECK:STDOUT: %n.patt: @Class.F.%pattern_type (%pattern_type.2c66b4.2) = at_binding_pattern n, %n.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @Class.F.%pattern_type (%pattern_type.2c66b4.2) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @Class.F.%pattern_type (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt, %.loc11_36.2 [concrete] +// CHECK:STDOUT: %n.param_patt.loc11: @Class.F.%pattern_type (%pattern_type.2c66b4.2) = value_param_pattern [symbolic = %n.param_patt.loc6 (constants.%n.param_patt)] +// CHECK:STDOUT: %n.patt.loc11: @Class.F.%pattern_type (%pattern_type.2c66b4.2) = at_binding_pattern n, %n.param_patt.loc11 [symbolic = %n.patt.loc6 (constants.%n.patt.8c9)] +// CHECK:STDOUT: %return.param_patt.loc11: @Class.F.%pattern_type (%pattern_type.2c66b4.2) = out_param_pattern [symbolic = %return.param_patt.loc6 (constants.%return.param_patt.bf4475.2)] +// CHECK:STDOUT: %return.patt.loc11: @Class.F.%pattern_type (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt.loc11, %.loc11_36.2 [symbolic = %return.patt.loc6 (constants.%return.patt.f44)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc11_18: type = splice_block %Copy.ref [concrete = constants.%Copy.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -191,10 +199,10 @@ fn Generic(unused T:! ()).WrongType() {} // CHECK:STDOUT: %return.loc11: ref @Class.F.%T.as_type.loc6_11.1 (%T.as_type) = return_slot %return.param.loc11 // CHECK:STDOUT: } // CHECK:STDOUT: %Class.G.decl: %Class.G.type = fn_decl @Class.G [symbolic = constants.%Class.G] { -// CHECK:STDOUT: %self.param_patt: @Class.G.%pattern_type.loc7_8 (%pattern_type.e18) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @Class.G.%pattern_type.loc7_8 (%pattern_type.e18) = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @Class.G.%pattern_type.loc7_17 (%pattern_type.2c66b4.2) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @Class.G.%pattern_type.loc7_17 (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt, %.loc15_36.2 [concrete] +// CHECK:STDOUT: %self.param_patt.loc15: @Class.G.%pattern_type.loc7_8 (%pattern_type.e18) = value_param_pattern [symbolic = %self.param_patt.loc7 (constants.%self.param_patt.aaa)] +// CHECK:STDOUT: %self.patt.loc15: @Class.G.%pattern_type.loc7_8 (%pattern_type.e18) = at_binding_pattern self, %self.param_patt.loc15 [symbolic = %self.patt.loc7 (constants.%self.patt.d8a)] +// CHECK:STDOUT: %return.param_patt.loc15: @Class.G.%pattern_type.loc7_17 (%pattern_type.2c66b4.2) = out_param_pattern [symbolic = %return.param_patt.loc7 (constants.%return.param_patt.bf4475.2)] +// CHECK:STDOUT: %return.patt.loc15: @Class.G.%pattern_type.loc7_17 (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt.loc15, %.loc15_36.2 [symbolic = %return.patt.loc7 (constants.%return.patt.f44)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc15_18: type = splice_block %Copy.ref [concrete = constants.%Copy.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -218,6 +226,7 @@ fn Generic(unused T:! ()).WrongType() {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%T.loc5_14.2: %Copy.type) { +// CHECK:STDOUT: %T.patt.loc5_14.2: %pattern_type.e81 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_14.2 (constants.%T.patt.fe6)] // CHECK:STDOUT: %T.loc5_14.1: %Copy.type = symbolic_binding T, 0 [symbolic = %T.loc5_14.1 (constants.%T.f84)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -227,6 +236,8 @@ fn Generic(unused T:! ()).WrongType() {} // CHECK:STDOUT: %Class.G: @Class.%Class.G.type (%Class.G.type) = struct_value () [symbolic = %Class.G (constants.%Class.G)] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T.loc5_14.1 [symbolic = %T.as_type (constants.%T.as_type)] // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type [symbolic = %require_complete (constants.%require_complete.d83)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type [symbolic = %pattern_type (constants.%pattern_type.2c66b4.2)] +// CHECK:STDOUT: %n.patt: @Class.%pattern_type (%pattern_type.2c66b4.2) = ref_binding_pattern n [symbolic = %n.patt (constants.%n.patt.4d3)] // CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T.loc5_14.1) [symbolic = %Class (constants.%Class)] // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class, %T.as_type [symbolic = %Class.elem (constants.%Class.elem)] // CHECK:STDOUT: %struct_type.n: type = struct_type {.n: @Class.%T.as_type (%T.as_type)} [symbolic = %struct_type.n (constants.%struct_type.n)] @@ -234,10 +245,10 @@ fn Generic(unused T:! ()).WrongType() {} // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %Class.F.decl: @Class.%Class.F.type (%Class.F.type) = fn_decl @Class.F [symbolic = @Class.%Class.F (constants.%Class.F)] { -// CHECK:STDOUT: %n.param_patt: @Class.F.%pattern_type (%pattern_type.2c66b4.2) = value_param_pattern [concrete] -// CHECK:STDOUT: %n.patt: @Class.F.%pattern_type (%pattern_type.2c66b4.2) = at_binding_pattern n, %n.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @Class.F.%pattern_type (%pattern_type.2c66b4.2) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @Class.F.%pattern_type (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt, %.loc11_36.2 [concrete] +// CHECK:STDOUT: %n.param_patt.loc11: @Class.F.%pattern_type (%pattern_type.2c66b4.2) = value_param_pattern [symbolic = %n.param_patt.loc6 (constants.%n.param_patt)] +// CHECK:STDOUT: %n.patt.loc11: @Class.F.%pattern_type (%pattern_type.2c66b4.2) = at_binding_pattern n, %n.param_patt.loc11 [symbolic = %n.patt.loc6 (constants.%n.patt.8c9)] +// CHECK:STDOUT: %return.param_patt.loc11: @Class.F.%pattern_type (%pattern_type.2c66b4.2) = out_param_pattern [symbolic = %return.param_patt.loc6 (constants.%return.param_patt.bf4475.2)] +// CHECK:STDOUT: %return.patt.loc11: @Class.F.%pattern_type (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt.loc11, %.loc11_36.2 [symbolic = %return.patt.loc6 (constants.%return.patt.f44)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc6_17: %Copy.type = name_ref T, @Class.%T.loc5_14.2 [symbolic = %T.loc6 (constants.%T.f84)] // CHECK:STDOUT: %T.as_type.loc6_17: type = facet_access_type %T.ref.loc6_17 [symbolic = %T.as_type.loc6_11.1 (constants.%T.as_type)] @@ -254,10 +265,10 @@ fn Generic(unused T:! ()).WrongType() {} // CHECK:STDOUT: %return.loc6: ref @Class.F.%T.as_type.loc6_11.1 (%T.as_type) = return_slot %return.param.loc6 // CHECK:STDOUT: } // CHECK:STDOUT: %Class.G.decl: @Class.%Class.G.type (%Class.G.type) = fn_decl @Class.G [symbolic = @Class.%Class.G (constants.%Class.G)] { -// CHECK:STDOUT: %self.param_patt: @Class.G.%pattern_type.loc7_8 (%pattern_type.e18) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @Class.G.%pattern_type.loc7_8 (%pattern_type.e18) = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @Class.G.%pattern_type.loc7_17 (%pattern_type.2c66b4.2) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @Class.G.%pattern_type.loc7_17 (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt, %.loc15_36.2 [concrete] +// CHECK:STDOUT: %self.param_patt.loc15: @Class.G.%pattern_type.loc7_8 (%pattern_type.e18) = value_param_pattern [symbolic = %self.param_patt.loc7 (constants.%self.param_patt.aaa)] +// CHECK:STDOUT: %self.patt.loc15: @Class.G.%pattern_type.loc7_8 (%pattern_type.e18) = at_binding_pattern self, %self.param_patt.loc15 [symbolic = %self.patt.loc7 (constants.%self.patt.d8a)] +// CHECK:STDOUT: %return.param_patt.loc15: @Class.G.%pattern_type.loc7_17 (%pattern_type.2c66b4.2) = out_param_pattern [symbolic = %return.param_patt.loc7 (constants.%return.param_patt.bf4475.2)] +// CHECK:STDOUT: %return.patt.loc15: @Class.G.%pattern_type.loc7_17 (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt.loc15, %.loc15_36.2 [symbolic = %return.patt.loc7 (constants.%return.patt.f44)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc7: %Copy.type = name_ref T, @Class.%T.loc5_14.2 [symbolic = %T.loc7 (constants.%T.f84)] // CHECK:STDOUT: %T.as_type.loc7_17.2: type = facet_access_type %T.ref.loc7 [symbolic = %T.as_type.loc7_17.1 (constants.%T.as_type)] @@ -289,22 +300,27 @@ fn Generic(unused T:! ()).WrongType() {} // CHECK:STDOUT: %T.loc6: %Copy.type = symbolic_binding T, 0 [symbolic = %T.loc6 (constants.%T.f84)] // CHECK:STDOUT: %T.as_type.loc6_11.1: type = facet_access_type %T.loc6 [symbolic = %T.as_type.loc6_11.1 (constants.%T.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc6_11.1 [symbolic = %pattern_type (constants.%pattern_type.2c66b4.2)] +// CHECK:STDOUT: %n.param_patt.loc6: @Class.F.%pattern_type (%pattern_type.2c66b4.2) = value_param_pattern [symbolic = %n.param_patt.loc6 (constants.%n.param_patt)] +// CHECK:STDOUT: %n.patt.loc6: @Class.F.%pattern_type (%pattern_type.2c66b4.2) = at_binding_pattern n, %n.param_patt.loc6 [symbolic = %n.patt.loc6 (constants.%n.patt.8c9)] // CHECK:STDOUT: %.loc6_17.1: Core.Form = init_form %T.as_type.loc6_11.1 [symbolic = %.loc6_17.1 (constants.%.1ce700.2)] +// CHECK:STDOUT: %return.param_patt.loc6: @Class.F.%pattern_type (%pattern_type.2c66b4.2) = out_param_pattern [symbolic = %return.param_patt.loc6 (constants.%return.param_patt.bf4475.2)] +// CHECK:STDOUT: %return.patt.loc6: @Class.F.%pattern_type (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt.loc6, %T.as_type.loc6_11.1 [symbolic = %return.patt.loc6 (constants.%return.patt.f44)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc6_11.1 [symbolic = %require_complete (constants.%require_complete.d83)] // CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%T.loc6) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.c85f21.2)] -// CHECK:STDOUT: %.loc12_10.2: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %T.loc6 [symbolic = %.loc12_10.2 (constants.%.c29)] +// CHECK:STDOUT: %.loc12_10.3: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %T.loc6 [symbolic = %.loc12_10.3 (constants.%.c29)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %T.loc6, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.d9c)] -// CHECK:STDOUT: %impl.elem0.loc12_10.2: @Class.F.%.loc12_10.2 (%.c29) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc12_10.2 (constants.%impl.elem0.bd2)] +// CHECK:STDOUT: %impl.elem0.loc12_10.2: @Class.F.%.loc12_10.3 (%.c29) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc12_10.2 (constants.%impl.elem0.bd2)] // CHECK:STDOUT: %specific_impl_fn.loc12_10.2: = specific_impl_function %impl.elem0.loc12_10.2, @Copy.WithSelf.Op(%T.loc6) [symbolic = %specific_impl_fn.loc12_10.2 (constants.%specific_impl_fn.e2a)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%n.param.loc11: @Class.F.%T.as_type.loc6_11.1 (%T.as_type)) -> out %return.param.loc11: @Class.F.%T.as_type.loc6_11.1 (%T.as_type) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %n.ref: @Class.F.%T.as_type.loc6_11.1 (%T.as_type) = name_ref n, %n.loc11 -// CHECK:STDOUT: %impl.elem0.loc12_10.1: @Class.F.%.loc12_10.2 (%.c29) = impl_witness_access constants.%Copy.lookup_impl_witness.d9c, element0 [symbolic = %impl.elem0.loc12_10.2 (constants.%impl.elem0.bd2)] +// CHECK:STDOUT: %impl.elem0.loc12_10.1: @Class.F.%.loc12_10.3 (%.c29) = impl_witness_access constants.%Copy.lookup_impl_witness.d9c, element0 [symbolic = %impl.elem0.loc12_10.2 (constants.%impl.elem0.bd2)] // CHECK:STDOUT: %bound_method.loc12_10.1: = bound_method %n.ref, %impl.elem0.loc12_10.1 // CHECK:STDOUT: %.loc12_10.1: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T.loc6 (constants.%T.f84)] +// CHECK:STDOUT: %.loc12_10.2: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T.loc6 (constants.%T.f84)] // CHECK:STDOUT: %specific_impl_fn.loc12_10.1: = specific_impl_function %impl.elem0.loc12_10.1, @Copy.WithSelf.Op(constants.%T.f84) [symbolic = %specific_impl_fn.loc12_10.2 (constants.%specific_impl_fn.e2a)] // CHECK:STDOUT: %bound_method.loc12_10.2: = bound_method %n.ref, %specific_impl_fn.loc12_10.1 // CHECK:STDOUT: %.loc11_36.1: ref @Class.F.%T.as_type.loc6_11.1 (%T.as_type) = splice_block %return.param.loc11 {} @@ -317,18 +333,22 @@ fn Generic(unused T:! ()).WrongType() {} // CHECK:STDOUT: %T.loc7: %Copy.type = symbolic_binding T, 0 [symbolic = %T.loc7 (constants.%T.f84)] // CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T.loc7) [symbolic = %Class (constants.%Class)] // CHECK:STDOUT: %pattern_type.loc7_8: type = pattern_type %Class [symbolic = %pattern_type.loc7_8 (constants.%pattern_type.e18)] +// CHECK:STDOUT: %self.param_patt.loc7: @Class.G.%pattern_type.loc7_8 (%pattern_type.e18) = value_param_pattern [symbolic = %self.param_patt.loc7 (constants.%self.param_patt.aaa)] +// CHECK:STDOUT: %self.patt.loc7: @Class.G.%pattern_type.loc7_8 (%pattern_type.e18) = at_binding_pattern self, %self.param_patt.loc7 [symbolic = %self.patt.loc7 (constants.%self.patt.d8a)] // CHECK:STDOUT: %T.as_type.loc7_17.1: type = facet_access_type %T.loc7 [symbolic = %T.as_type.loc7_17.1 (constants.%T.as_type)] // CHECK:STDOUT: %.loc7_17.1: Core.Form = init_form %T.as_type.loc7_17.1 [symbolic = %.loc7_17.1 (constants.%.1ce700.2)] // CHECK:STDOUT: %pattern_type.loc7_17: type = pattern_type %T.as_type.loc7_17.1 [symbolic = %pattern_type.loc7_17 (constants.%pattern_type.2c66b4.2)] +// CHECK:STDOUT: %return.param_patt.loc7: @Class.G.%pattern_type.loc7_17 (%pattern_type.2c66b4.2) = out_param_pattern [symbolic = %return.param_patt.loc7 (constants.%return.param_patt.bf4475.2)] +// CHECK:STDOUT: %return.patt.loc7: @Class.G.%pattern_type.loc7_17 (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt.loc7, %T.as_type.loc7_17.1 [symbolic = %return.patt.loc7 (constants.%return.patt.f44)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc15: = require_complete_type %Class [symbolic = %require_complete.loc15 (constants.%require_complete.1dd)] // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class, %T.as_type.loc7_17.1 [symbolic = %Class.elem (constants.%Class.elem)] // CHECK:STDOUT: %require_complete.loc16: = require_complete_type %T.as_type.loc7_17.1 [symbolic = %require_complete.loc16 (constants.%require_complete.d83)] // CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%T.loc7) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.c85f21.2)] -// CHECK:STDOUT: %.loc16_14.4: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %T.loc7 [symbolic = %.loc16_14.4 (constants.%.c29)] +// CHECK:STDOUT: %.loc16_14.5: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %T.loc7 [symbolic = %.loc16_14.5 (constants.%.c29)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %T.loc7, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.d9c)] -// CHECK:STDOUT: %impl.elem0.loc16_14.2: @Class.G.%.loc16_14.4 (%.c29) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc16_14.2 (constants.%impl.elem0.bd2)] +// CHECK:STDOUT: %impl.elem0.loc16_14.2: @Class.G.%.loc16_14.5 (%.c29) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc16_14.2 (constants.%impl.elem0.bd2)] // CHECK:STDOUT: %specific_impl_fn.loc16_14.2: = specific_impl_function %impl.elem0.loc16_14.2, @Copy.WithSelf.Op(%T.loc7) [symbolic = %specific_impl_fn.loc16_14.2 (constants.%specific_impl_fn.e2a)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param.loc15: @Class.G.%Class (%Class)) -> out %return.param.loc15: @Class.G.%T.as_type.loc7_17.1 (%T.as_type) { @@ -337,9 +357,10 @@ fn Generic(unused T:! ()).WrongType() {} // CHECK:STDOUT: %n.ref: @Class.G.%Class.elem (%Class.elem) = name_ref n, @Class.%.loc8 [concrete = @Class.%.loc8] // CHECK:STDOUT: %.loc16_14.1: ref @Class.G.%T.as_type.loc7_17.1 (%T.as_type) = class_element_access %self.ref, element0 // CHECK:STDOUT: %.loc16_14.2: @Class.G.%T.as_type.loc7_17.1 (%T.as_type) = acquire_value %.loc16_14.1 -// CHECK:STDOUT: %impl.elem0.loc16_14.1: @Class.G.%.loc16_14.4 (%.c29) = impl_witness_access constants.%Copy.lookup_impl_witness.d9c, element0 [symbolic = %impl.elem0.loc16_14.2 (constants.%impl.elem0.bd2)] +// CHECK:STDOUT: %impl.elem0.loc16_14.1: @Class.G.%.loc16_14.5 (%.c29) = impl_witness_access constants.%Copy.lookup_impl_witness.d9c, element0 [symbolic = %impl.elem0.loc16_14.2 (constants.%impl.elem0.bd2)] // CHECK:STDOUT: %bound_method.loc16_14.1: = bound_method %.loc16_14.2, %impl.elem0.loc16_14.1 // CHECK:STDOUT: %.loc16_14.3: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T.loc7 (constants.%T.f84)] +// CHECK:STDOUT: %.loc16_14.4: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T.loc7 (constants.%T.f84)] // CHECK:STDOUT: %specific_impl_fn.loc16_14.1: = specific_impl_function %impl.elem0.loc16_14.1, @Copy.WithSelf.Op(constants.%T.f84) [symbolic = %specific_impl_fn.loc16_14.2 (constants.%specific_impl_fn.e2a)] // CHECK:STDOUT: %bound_method.loc16_14.2: = bound_method %.loc16_14.2, %specific_impl_fn.loc16_14.1 // CHECK:STDOUT: %.loc15_36.1: ref @Class.G.%T.as_type.loc7_17.1 (%T.as_type) = splice_block %return.param.loc15 {} @@ -349,6 +370,7 @@ fn Generic(unused T:! ()).WrongType() {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%T.f84) { +// CHECK:STDOUT: %T.patt.loc5_14.2 => constants.%T.patt.fe6 // CHECK:STDOUT: %T.loc5_14.1 => constants.%T.f84 // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -358,6 +380,8 @@ fn Generic(unused T:! ()).WrongType() {} // CHECK:STDOUT: %Class.G => constants.%Class.G // CHECK:STDOUT: %T.as_type => constants.%T.as_type // CHECK:STDOUT: %require_complete => constants.%require_complete.d83 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.2c66b4.2 +// CHECK:STDOUT: %n.patt => constants.%n.patt.4d3 // CHECK:STDOUT: %Class => constants.%Class // CHECK:STDOUT: %Class.elem => constants.%Class.elem // CHECK:STDOUT: %struct_type.n => constants.%struct_type.n @@ -368,16 +392,24 @@ fn Generic(unused T:! ()).WrongType() {} // CHECK:STDOUT: %T.loc6 => constants.%T.f84 // CHECK:STDOUT: %T.as_type.loc6_11.1 => constants.%T.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.2c66b4.2 +// CHECK:STDOUT: %n.param_patt.loc6 => constants.%n.param_patt +// CHECK:STDOUT: %n.patt.loc6 => constants.%n.patt.8c9 // CHECK:STDOUT: %.loc6_17.1 => constants.%.1ce700.2 +// CHECK:STDOUT: %return.param_patt.loc6 => constants.%return.param_patt.bf4475.2 +// CHECK:STDOUT: %return.patt.loc6 => constants.%return.patt.f44 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class.G(constants.%T.f84) { // CHECK:STDOUT: %T.loc7 => constants.%T.f84 // CHECK:STDOUT: %Class => constants.%Class // CHECK:STDOUT: %pattern_type.loc7_8 => constants.%pattern_type.e18 +// CHECK:STDOUT: %self.param_patt.loc7 => constants.%self.param_patt.aaa +// CHECK:STDOUT: %self.patt.loc7 => constants.%self.patt.d8a // CHECK:STDOUT: %T.as_type.loc7_17.1 => constants.%T.as_type // CHECK:STDOUT: %.loc7_17.1 => constants.%.1ce700.2 // CHECK:STDOUT: %pattern_type.loc7_17 => constants.%pattern_type.2c66b4.2 +// CHECK:STDOUT: %return.param_patt.loc7 => constants.%return.param_patt.bf4475.2 +// CHECK:STDOUT: %return.patt.loc7 => constants.%return.patt.f44 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- nested.carbon @@ -386,16 +418,22 @@ fn Generic(unused T:! ()).WrongType() {} // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %A.type: type = generic_class_type @A [concrete] // CHECK:STDOUT: %A.generic: %A.type = struct_value () [concrete] // CHECK:STDOUT: %A: type = class_type @A, @A(%T) [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %_.patt: %pattern_type.51d = symbolic_binding_pattern _, 1 [symbolic] // CHECK:STDOUT: %_: %T = symbolic_binding _, 1 [symbolic] // CHECK:STDOUT: %B.type: type = generic_class_type @B, @A(%T) [symbolic] // CHECK:STDOUT: %B.generic: %B.type = struct_value () [symbolic] // CHECK:STDOUT: %B: type = class_type @B, @B(%T, %_) [symbolic] // CHECK:STDOUT: %pattern_type.b16: type = pattern_type %B [symbolic] +// CHECK:STDOUT: %self.param_patt: %pattern_type.b16 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt: %pattern_type.b16 = at_binding_pattern self, %self.param_patt [symbolic] +// CHECK:STDOUT: %a.param_patt: %pattern_type.51d = value_param_pattern [symbolic] +// CHECK:STDOUT: %a.patt: %pattern_type.51d = at_binding_pattern a, %a.param_patt [symbolic] // CHECK:STDOUT: %B.F.type: type = fn_type @B.F, @B(%T, %_) [symbolic] // CHECK:STDOUT: %B.F: %B.F.type = struct_value () [symbolic] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] @@ -406,7 +444,7 @@ fn Generic(unused T:! ()).WrongType() {} // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %A.decl: %A.type = class_decl @A [concrete = constants.%A.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc5_10.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_10.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc5_13.1: type = splice_block %.loc5_13.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -415,10 +453,10 @@ fn Generic(unused T:! ()).WrongType() {} // CHECK:STDOUT: %T.loc5_10.2: type = symbolic_binding T, 0 [symbolic = %T.loc5_10.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %B.F.decl: %B.F.type = fn_decl @B.F [symbolic = constants.%B.F] { -// CHECK:STDOUT: %self.param_patt: @B.F.%pattern_type.loc7_10 (%pattern_type.b16) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @B.F.%pattern_type.loc7_10 (%pattern_type.b16) = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %a.param_patt: @B.F.%pattern_type.loc7_17 (%pattern_type.51d) = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: @B.F.%pattern_type.loc7_17 (%pattern_type.51d) = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc11: @B.F.%pattern_type.loc7_10 (%pattern_type.b16) = value_param_pattern [symbolic = %self.param_patt.loc7 (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt.loc11: @B.F.%pattern_type.loc7_10 (%pattern_type.b16) = at_binding_pattern self, %self.param_patt.loc11 [symbolic = %self.patt.loc7 (constants.%self.patt)] +// CHECK:STDOUT: %a.param_patt.loc11: @B.F.%pattern_type.loc7_17 (%pattern_type.51d) = value_param_pattern [symbolic = %a.param_patt.loc7 (constants.%a.param_patt)] +// CHECK:STDOUT: %a.patt.loc11: @B.F.%pattern_type.loc7_17 (%pattern_type.51d) = at_binding_pattern a, %a.param_patt.loc11 [symbolic = %a.patt.loc7 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc11_10.1: type = splice_block %.loc11_10.2 [concrete = type] { // CHECK:STDOUT: %.Self.loc11_7: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -443,6 +481,7 @@ fn Generic(unused T:! ()).WrongType() {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @A(%T.loc5_10.2: type) { +// CHECK:STDOUT: %T.patt.loc5_10.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_10.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc5_10.1: type = symbolic_binding T, 0 [symbolic = %T.loc5_10.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -451,7 +490,7 @@ fn Generic(unused T:! ()).WrongType() {} // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %B.decl: @A.%B.type (%B.type) = class_decl @B [symbolic = @A.%B.generic (constants.%B.generic)] { -// CHECK:STDOUT: %_.patt: @B.%pattern_type (%pattern_type.51d) = symbolic_binding_pattern _, 1 [concrete] +// CHECK:STDOUT: %_.patt.loc6_12.1: @B.%pattern_type (%pattern_type.51d) = symbolic_binding_pattern _, 1 [symbolic = %_.patt.loc6_12.2 (constants.%_.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6: type = splice_block %T.ref [symbolic = %T (constants.%T)] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -471,8 +510,9 @@ fn Generic(unused T:! ()).WrongType() {} // CHECK:STDOUT: // CHECK:STDOUT: generic class @B(@A.%T.loc5_10.2: type, %_.loc6_12.2: @B.%T (%T)) { // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %_.loc6_12.1: @B.%T (%T) = symbolic_binding _, 1 [symbolic = %_.loc6_12.1 (constants.%_)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.51d)] +// CHECK:STDOUT: %_.patt.loc6_12.2: @B.%pattern_type (%pattern_type.51d) = symbolic_binding_pattern _, 1 [symbolic = %_.patt.loc6_12.2 (constants.%_.patt)] +// CHECK:STDOUT: %_.loc6_12.1: @B.%T (%T) = symbolic_binding _, 1 [symbolic = %_.loc6_12.1 (constants.%_)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %B.F.type: type = fn_type @B.F, @B(%T, %_.loc6_12.1) [symbolic = %B.F.type (constants.%B.F.type)] @@ -480,10 +520,10 @@ fn Generic(unused T:! ()).WrongType() {} // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %B.F.decl: @B.%B.F.type (%B.F.type) = fn_decl @B.F [symbolic = @B.%B.F (constants.%B.F)] { -// CHECK:STDOUT: %self.param_patt: @B.F.%pattern_type.loc7_10 (%pattern_type.b16) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @B.F.%pattern_type.loc7_10 (%pattern_type.b16) = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %a.param_patt: @B.F.%pattern_type.loc7_17 (%pattern_type.51d) = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: @B.F.%pattern_type.loc7_17 (%pattern_type.51d) = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc11: @B.F.%pattern_type.loc7_10 (%pattern_type.b16) = value_param_pattern [symbolic = %self.param_patt.loc7 (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt.loc11: @B.F.%pattern_type.loc7_10 (%pattern_type.b16) = at_binding_pattern self, %self.param_patt.loc11 [symbolic = %self.patt.loc7 (constants.%self.patt)] +// CHECK:STDOUT: %a.param_patt.loc11: @B.F.%pattern_type.loc7_17 (%pattern_type.51d) = value_param_pattern [symbolic = %a.param_patt.loc7 (constants.%a.param_patt)] +// CHECK:STDOUT: %a.patt.loc11: @B.F.%pattern_type.loc7_17 (%pattern_type.51d) = at_binding_pattern a, %a.param_patt.loc11 [symbolic = %a.patt.loc7 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param.loc7: @B.F.%B (%B) = value_param call_param0 // CHECK:STDOUT: %.loc7_10.1: type = splice_block %Self.ref.loc7 [symbolic = %B (constants.%B)] { @@ -510,7 +550,11 @@ fn Generic(unused T:! ()).WrongType() {} // CHECK:STDOUT: %_.loc7: @B.F.%T.loc7 (%T) = symbolic_binding _, 1 [symbolic = %_.loc7 (constants.%_)] // CHECK:STDOUT: %B: type = class_type @B, @B(%T.loc7, %_.loc7) [symbolic = %B (constants.%B)] // CHECK:STDOUT: %pattern_type.loc7_10: type = pattern_type %B [symbolic = %pattern_type.loc7_10 (constants.%pattern_type.b16)] +// CHECK:STDOUT: %self.param_patt.loc7: @B.F.%pattern_type.loc7_10 (%pattern_type.b16) = value_param_pattern [symbolic = %self.param_patt.loc7 (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt.loc7: @B.F.%pattern_type.loc7_10 (%pattern_type.b16) = at_binding_pattern self, %self.param_patt.loc7 [symbolic = %self.patt.loc7 (constants.%self.patt)] // CHECK:STDOUT: %pattern_type.loc7_17: type = pattern_type %T.loc7 [symbolic = %pattern_type.loc7_17 (constants.%pattern_type.51d)] +// CHECK:STDOUT: %a.param_patt.loc7: @B.F.%pattern_type.loc7_17 (%pattern_type.51d) = value_param_pattern [symbolic = %a.param_patt.loc7 (constants.%a.param_patt)] +// CHECK:STDOUT: %a.patt.loc7: @B.F.%pattern_type.loc7_17 (%pattern_type.51d) = at_binding_pattern a, %a.param_patt.loc7 [symbolic = %a.patt.loc7 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc11_34: = require_complete_type %B [symbolic = %require_complete.loc11_34 (constants.%require_complete.0e8)] @@ -523,6 +567,7 @@ fn Generic(unused T:! ()).WrongType() {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A(constants.%T) { +// CHECK:STDOUT: %T.patt.loc5_10.2 => constants.%T.patt // CHECK:STDOUT: %T.loc5_10.1 => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -532,8 +577,9 @@ fn Generic(unused T:! ()).WrongType() {} // CHECK:STDOUT: // CHECK:STDOUT: specific @B(constants.%T, constants.%_) { // CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %_.loc6_12.1 => constants.%_ // CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d +// CHECK:STDOUT: %_.patt.loc6_12.2 => constants.%_.patt +// CHECK:STDOUT: %_.loc6_12.1 => constants.%_ // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %B.F.type => constants.%B.F.type @@ -545,6 +591,10 @@ fn Generic(unused T:! ()).WrongType() {} // CHECK:STDOUT: %_.loc7 => constants.%_ // CHECK:STDOUT: %B => constants.%B // CHECK:STDOUT: %pattern_type.loc7_10 => constants.%pattern_type.b16 +// CHECK:STDOUT: %self.param_patt.loc7 => constants.%self.param_patt +// CHECK:STDOUT: %self.patt.loc7 => constants.%self.patt // CHECK:STDOUT: %pattern_type.loc7_17 => constants.%pattern_type.51d +// CHECK:STDOUT: %a.param_patt.loc7 => constants.%a.param_patt +// CHECK:STDOUT: %a.patt.loc7 => constants.%a.patt // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/generic/member_type.carbon b/toolchain/check/testdata/class/generic/member_type.carbon index a26449575873..c069d362de85 100644 --- a/toolchain/check/testdata/class/generic/member_type.carbon +++ b/toolchain/check/testdata/class/generic/member_type.carbon @@ -64,6 +64,7 @@ fn Test() -> i32 { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %pattern_type.e81: type = pattern_type %Copy.type [concrete] +// CHECK:STDOUT: %T.patt.fe6: %pattern_type.e81 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.f84: %Copy.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Outer.type: type = generic_class_type @Outer [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -73,11 +74,16 @@ fn Test() -> i32 { // CHECK:STDOUT: %T.as_type: type = facet_access_type %T.f84 [symbolic] // CHECK:STDOUT: %require_complete.d83: = require_complete_type %T.as_type [symbolic] // CHECK:STDOUT: %pattern_type.2c66b4.2: type = pattern_type %T.as_type [symbolic] +// CHECK:STDOUT: %n.patt.872: %pattern_type.2c66b4.2 = ref_binding_pattern n [symbolic] // CHECK:STDOUT: %Inner.elem.51d: type = unbound_element_type %Inner.06b, %T.as_type [symbolic] // CHECK:STDOUT: %struct_type.n.797: type = struct_type {.n: %T.as_type} [symbolic] // CHECK:STDOUT: %complete_type.22c: = complete_type_witness %struct_type.n.797 [symbolic] +// CHECK:STDOUT: %n.param_patt.18f: %pattern_type.2c66b4.2 = value_param_pattern [symbolic] +// CHECK:STDOUT: %n.patt.8c9: %pattern_type.2c66b4.2 = at_binding_pattern n, %n.param_patt.18f [symbolic] // CHECK:STDOUT: %.c17: Core.Form = init_form %Inner.06b [symbolic] // CHECK:STDOUT: %pattern_type.c1c: type = pattern_type %Inner.06b [symbolic] +// CHECK:STDOUT: %return.param_patt.953: %pattern_type.c1c = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.0b4: %pattern_type.c1c = return_slot_pattern %return.param_patt.953, %Inner.06b [symbolic] // CHECK:STDOUT: %Outer.F.type.823: type = fn_type @Outer.F, @Outer(%T.f84) [symbolic] // CHECK:STDOUT: %Outer.F.e27: %Outer.F.type.823 = struct_value () [symbolic] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] @@ -95,6 +101,8 @@ fn Test() -> i32 { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %Test.type: type = fn_type @Test [concrete] // CHECK:STDOUT: %Test: %Test.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] @@ -109,14 +117,21 @@ fn Test() -> i32 { // CHECK:STDOUT: %Inner.096: type = class_type @Inner, @Inner(%Copy.facet.987) [concrete] // CHECK:STDOUT: %Outer.F.type.3ad: type = fn_type @Outer.F, @Outer(%Copy.facet.987) [concrete] // CHECK:STDOUT: %Outer.F.17f: %Outer.F.type.3ad = struct_value () [concrete] +// CHECK:STDOUT: %n.patt.e55: %pattern_type.6b6 = ref_binding_pattern n [concrete] // CHECK:STDOUT: %Inner.elem.362: type = unbound_element_type %Inner.096, %i32 [concrete] // CHECK:STDOUT: %struct_type.n.9ed: type = struct_type {.n: %i32} [concrete] // CHECK:STDOUT: %complete_type.cdf: = complete_type_witness %struct_type.n.9ed [concrete] // CHECK:STDOUT: %pattern_type.1e8: type = pattern_type %Inner.096 [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.1e8 = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.1e8 = var_pattern %c.patt [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %Copy.impl_witness.6da: = impl_witness imports.%Copy.impl_witness_table.06e [concrete] // CHECK:STDOUT: %Copy.facet.f12: %Copy.type = facet_value Core.IntLiteral, (%Copy.impl_witness.6da) [concrete] +// CHECK:STDOUT: %n.param_patt.47b: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %n.patt.f0b: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt.47b [concrete] // CHECK:STDOUT: %.8bc: Core.Form = init_form %Inner.096 [concrete] +// CHECK:STDOUT: %return.param_patt.3fe: %pattern_type.1e8 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.574: %pattern_type.1e8 = return_slot_pattern %return.param_patt.3fe, %Inner.096 [concrete] // CHECK:STDOUT: %Outer.F.specific_fn: = specific_function %Outer.F.17f, @Outer.F(%Copy.facet.987) [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -171,7 +186,7 @@ fn Test() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Outer.decl: %Outer.type = class_decl @Outer [concrete = constants.%Outer.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.e81 = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc4_14.1: %pattern_type.e81 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt.fe6)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4: type = splice_block %Copy.ref [concrete = constants.%Copy.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -181,8 +196,8 @@ fn Test() -> i32 { // CHECK:STDOUT: %T.loc4_14.2: %Copy.type = symbolic_binding T, 0 [symbolic = %T.loc4_14.1 (constants.%T.f84)] // CHECK:STDOUT: } // CHECK:STDOUT: %Test.decl: %Test.type = fn_decl @Test [concrete = constants.%Test] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc12 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc12 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc12: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc12: Core.Form = init_form %i32.loc12 [concrete = constants.%.795] @@ -192,6 +207,7 @@ fn Test() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Outer(%T.loc4_14.2: %Copy.type) { +// CHECK:STDOUT: %T.patt.loc4_14.2: %pattern_type.e81 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt.fe6)] // CHECK:STDOUT: %T.loc4_14.1: %Copy.type = symbolic_binding T, 0 [symbolic = %T.loc4_14.1 (constants.%T.f84)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -202,10 +218,10 @@ fn Test() -> i32 { // CHECK:STDOUT: class { // CHECK:STDOUT: %Inner.decl: type = class_decl @Inner [symbolic = @Outer.%Inner (constants.%Inner.06b)] {} {} // CHECK:STDOUT: %Outer.F.decl: @Outer.%Outer.F.type (%Outer.F.type.823) = fn_decl @Outer.F [symbolic = @Outer.%Outer.F (constants.%Outer.F.e27)] { -// CHECK:STDOUT: %n.param_patt: @Outer.F.%pattern_type.loc9_9 (%pattern_type.2c66b4.2) = value_param_pattern [concrete] -// CHECK:STDOUT: %n.patt: @Outer.F.%pattern_type.loc9_9 (%pattern_type.2c66b4.2) = at_binding_pattern n, %n.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @Outer.F.%pattern_type.loc9_17 (%pattern_type.c1c) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @Outer.F.%pattern_type.loc9_17 (%pattern_type.c1c) = return_slot_pattern %return.param_patt, %Inner.ref [concrete] +// CHECK:STDOUT: %n.param_patt.loc9_9.1: @Outer.F.%pattern_type.loc9_9 (%pattern_type.2c66b4.2) = value_param_pattern [symbolic = %n.param_patt.loc9_9.2 (constants.%n.param_patt.18f)] +// CHECK:STDOUT: %n.patt.loc9_9.1: @Outer.F.%pattern_type.loc9_9 (%pattern_type.2c66b4.2) = at_binding_pattern n, %n.param_patt.loc9_9.1 [symbolic = %n.patt.loc9_9.2 (constants.%n.patt.8c9)] +// CHECK:STDOUT: %return.param_patt.loc9_17.1: @Outer.F.%pattern_type.loc9_17 (%pattern_type.c1c) = out_param_pattern [symbolic = %return.param_patt.loc9_17.2 (constants.%return.param_patt.953)] +// CHECK:STDOUT: %return.patt.loc9_14.1: @Outer.F.%pattern_type.loc9_17 (%pattern_type.c1c) = return_slot_pattern %return.param_patt.loc9_17.1, %Inner.ref [symbolic = %return.patt.loc9_14.2 (constants.%return.patt.0b4)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc9_17.2: type = specific_constant @Outer.%Inner.decl, @Outer(constants.%T.f84) [symbolic = %Inner (constants.%Inner.06b)] // CHECK:STDOUT: %Inner.ref: type = name_ref Inner, %.loc9_17.2 [symbolic = %Inner (constants.%Inner.06b)] @@ -236,6 +252,8 @@ fn Test() -> i32 { // CHECK:STDOUT: %T: %Copy.type = symbolic_binding T, 0 [symbolic = %T (constants.%T.f84)] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic = %T.as_type (constants.%T.as_type)] // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type [symbolic = %require_complete (constants.%require_complete.d83)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type [symbolic = %pattern_type (constants.%pattern_type.2c66b4.2)] +// CHECK:STDOUT: %n.patt: @Inner.%pattern_type (%pattern_type.2c66b4.2) = ref_binding_pattern n [symbolic = %n.patt (constants.%n.patt.872)] // CHECK:STDOUT: %Inner: type = class_type @Inner, @Inner(%T) [symbolic = %Inner (constants.%Inner.06b)] // CHECK:STDOUT: %Inner.elem: type = unbound_element_type %Inner, %T.as_type [symbolic = %Inner.elem (constants.%Inner.elem.51d)] // CHECK:STDOUT: %struct_type.n: type = struct_type {.n: @Inner.%T.as_type (%T.as_type)} [symbolic = %struct_type.n (constants.%struct_type.n.797)] @@ -257,27 +275,32 @@ fn Test() -> i32 { // CHECK:STDOUT: %T: %Copy.type = symbolic_binding T, 0 [symbolic = %T (constants.%T.f84)] // CHECK:STDOUT: %T.as_type.loc9_11.1: type = facet_access_type %T [symbolic = %T.as_type.loc9_11.1 (constants.%T.as_type)] // CHECK:STDOUT: %pattern_type.loc9_9: type = pattern_type %T.as_type.loc9_11.1 [symbolic = %pattern_type.loc9_9 (constants.%pattern_type.2c66b4.2)] +// CHECK:STDOUT: %n.param_patt.loc9_9.2: @Outer.F.%pattern_type.loc9_9 (%pattern_type.2c66b4.2) = value_param_pattern [symbolic = %n.param_patt.loc9_9.2 (constants.%n.param_patt.18f)] +// CHECK:STDOUT: %n.patt.loc9_9.2: @Outer.F.%pattern_type.loc9_9 (%pattern_type.2c66b4.2) = at_binding_pattern n, %n.param_patt.loc9_9.2 [symbolic = %n.patt.loc9_9.2 (constants.%n.patt.8c9)] // CHECK:STDOUT: %Inner: type = class_type @Inner, @Inner(%T) [symbolic = %Inner (constants.%Inner.06b)] // CHECK:STDOUT: %.loc9_17.1: Core.Form = init_form %Inner [symbolic = %.loc9_17.1 (constants.%.c17)] // CHECK:STDOUT: %pattern_type.loc9_17: type = pattern_type %Inner [symbolic = %pattern_type.loc9_17 (constants.%pattern_type.c1c)] +// CHECK:STDOUT: %return.param_patt.loc9_17.2: @Outer.F.%pattern_type.loc9_17 (%pattern_type.c1c) = out_param_pattern [symbolic = %return.param_patt.loc9_17.2 (constants.%return.param_patt.953)] +// CHECK:STDOUT: %return.patt.loc9_14.2: @Outer.F.%pattern_type.loc9_17 (%pattern_type.c1c) = return_slot_pattern %return.param_patt.loc9_17.2, %Inner [symbolic = %return.patt.loc9_14.2 (constants.%return.patt.0b4)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc9_9: = require_complete_type %T.as_type.loc9_11.1 [symbolic = %require_complete.loc9_9 (constants.%require_complete.d83)] // CHECK:STDOUT: %require_complete.loc9_14: = require_complete_type %Inner [symbolic = %require_complete.loc9_14 (constants.%require_complete.972)] // CHECK:STDOUT: %struct_type.n: type = struct_type {.n: @Outer.F.%T.as_type.loc9_11.1 (%T.as_type)} [symbolic = %struct_type.n (constants.%struct_type.n.797)] // CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%T) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.c85f21.2)] -// CHECK:STDOUT: %.loc9_38.2: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %T [symbolic = %.loc9_38.2 (constants.%.c29)] +// CHECK:STDOUT: %.loc9_38.3: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %T [symbolic = %.loc9_38.3 (constants.%.c29)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %T, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.d9c)] -// CHECK:STDOUT: %impl.elem0.loc9_38.2: @Outer.F.%.loc9_38.2 (%.c29) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc9_38.2 (constants.%impl.elem0.bd2)] +// CHECK:STDOUT: %impl.elem0.loc9_38.2: @Outer.F.%.loc9_38.3 (%.c29) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc9_38.2 (constants.%impl.elem0.bd2)] // CHECK:STDOUT: %specific_impl_fn.loc9_38.2: = specific_impl_function %impl.elem0.loc9_38.2, @Copy.WithSelf.Op(%T) [symbolic = %specific_impl_fn.loc9_38.2 (constants.%specific_impl_fn.e2a)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%n.param: @Outer.F.%T.as_type.loc9_11.1 (%T.as_type)) -> out %return.param: @Outer.F.%Inner (%Inner.06b) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %n.ref: @Outer.F.%T.as_type.loc9_11.1 (%T.as_type) = name_ref n, %n // CHECK:STDOUT: %.loc9_39.1: @Outer.F.%struct_type.n (%struct_type.n.797) = struct_literal (%n.ref) -// CHECK:STDOUT: %impl.elem0.loc9_38.1: @Outer.F.%.loc9_38.2 (%.c29) = impl_witness_access constants.%Copy.lookup_impl_witness.d9c, element0 [symbolic = %impl.elem0.loc9_38.2 (constants.%impl.elem0.bd2)] +// CHECK:STDOUT: %impl.elem0.loc9_38.1: @Outer.F.%.loc9_38.3 (%.c29) = impl_witness_access constants.%Copy.lookup_impl_witness.d9c, element0 [symbolic = %impl.elem0.loc9_38.2 (constants.%impl.elem0.bd2)] // CHECK:STDOUT: %bound_method.loc9_38.1: = bound_method %n.ref, %impl.elem0.loc9_38.1 // CHECK:STDOUT: %.loc9_38.1: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T (constants.%T.f84)] +// CHECK:STDOUT: %.loc9_38.2: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T (constants.%T.f84)] // CHECK:STDOUT: %specific_impl_fn.loc9_38.1: = specific_impl_function %impl.elem0.loc9_38.1, @Copy.WithSelf.Op(constants.%T.f84) [symbolic = %specific_impl_fn.loc9_38.2 (constants.%specific_impl_fn.e2a)] // CHECK:STDOUT: %bound_method.loc9_38.2: = bound_method %n.ref, %specific_impl_fn.loc9_38.1 // CHECK:STDOUT: %.loc9_39.2: ref @Outer.F.%T.as_type.loc9_11.1 (%T.as_type) = class_element_access %return.param, element0 @@ -292,8 +315,8 @@ fn Test() -> i32 { // CHECK:STDOUT: fn @Test() -> out %return.param: %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.1e8 = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.1e8 = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.1e8 = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type.1e8 = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %Inner.096 = var %c.var_patt // CHECK:STDOUT: %Outer.ref.loc13_29: %Outer.type = name_ref Outer, file.%Outer.decl [concrete = constants.%Outer.generic] @@ -304,8 +327,10 @@ fn Test() -> i32 { // CHECK:STDOUT: %.loc13_39: %Outer.F.type.3ad = specific_constant @Outer.%Outer.F.decl, @Outer(constants.%Copy.facet.987) [concrete = constants.%Outer.F.17f] // CHECK:STDOUT: %F.ref: %Outer.F.type.3ad = name_ref F, %.loc13_39 [concrete = constants.%Outer.F.17f] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] -// CHECK:STDOUT: %Copy.facet.loc13_43: %Copy.type = facet_value Core.IntLiteral, (constants.%Copy.impl_witness.6da) [concrete = constants.%Copy.facet.f12] -// CHECK:STDOUT: %.loc13_43: %Copy.type = converted Core.IntLiteral, %Copy.facet.loc13_43 [concrete = constants.%Copy.facet.f12] +// CHECK:STDOUT: %Copy.facet.loc13_43.1: %Copy.type = facet_value Core.IntLiteral, (constants.%Copy.impl_witness.6da) [concrete = constants.%Copy.facet.f12] +// CHECK:STDOUT: %.loc13_43.1: %Copy.type = converted Core.IntLiteral, %Copy.facet.loc13_43.1 [concrete = constants.%Copy.facet.f12] +// CHECK:STDOUT: %Copy.facet.loc13_43.2: %Copy.type = facet_value Core.IntLiteral, (constants.%Copy.impl_witness.6da) [concrete = constants.%Copy.facet.f12] +// CHECK:STDOUT: %.loc13_43.2: %Copy.type = converted Core.IntLiteral, %Copy.facet.loc13_43.2 [concrete = constants.%Copy.facet.f12] // CHECK:STDOUT: %Outer.F.specific_fn: = specific_function %F.ref, @Outer.F(constants.%Copy.facet.987) [concrete = constants.%Outer.F.specific_fn] // CHECK:STDOUT: %.loc13_3: ref %Inner.096 = splice_block %c.var {} // CHECK:STDOUT: %impl.elem0.loc13: %.1c5 = impl_witness_access constants.%ImplicitAs.impl_witness.a23, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] @@ -359,6 +384,7 @@ fn Test() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Outer(constants.%T.f84) { +// CHECK:STDOUT: %T.patt.loc4_14.2 => constants.%T.patt.fe6 // CHECK:STDOUT: %T.loc4_14.1 => constants.%T.f84 // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -372,6 +398,8 @@ fn Test() -> i32 { // CHECK:STDOUT: %T => constants.%T.f84 // CHECK:STDOUT: %T.as_type => constants.%T.as_type // CHECK:STDOUT: %require_complete => constants.%require_complete.d83 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.2c66b4.2 +// CHECK:STDOUT: %n.patt => constants.%n.patt.872 // CHECK:STDOUT: %Inner => constants.%Inner.06b // CHECK:STDOUT: %Inner.elem => constants.%Inner.elem.51d // CHECK:STDOUT: %struct_type.n => constants.%struct_type.n.797 @@ -382,12 +410,17 @@ fn Test() -> i32 { // CHECK:STDOUT: %T => constants.%T.f84 // CHECK:STDOUT: %T.as_type.loc9_11.1 => constants.%T.as_type // CHECK:STDOUT: %pattern_type.loc9_9 => constants.%pattern_type.2c66b4.2 +// CHECK:STDOUT: %n.param_patt.loc9_9.2 => constants.%n.param_patt.18f +// CHECK:STDOUT: %n.patt.loc9_9.2 => constants.%n.patt.8c9 // CHECK:STDOUT: %Inner => constants.%Inner.06b // CHECK:STDOUT: %.loc9_17.1 => constants.%.c17 // CHECK:STDOUT: %pattern_type.loc9_17 => constants.%pattern_type.c1c +// CHECK:STDOUT: %return.param_patt.loc9_17.2 => constants.%return.param_patt.953 +// CHECK:STDOUT: %return.patt.loc9_14.2 => constants.%return.patt.0b4 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Outer(constants.%Copy.facet.987) { +// CHECK:STDOUT: %T.patt.loc4_14.2 => constants.%T.patt.fe6 // CHECK:STDOUT: %T.loc4_14.1 => constants.%Copy.facet.987 // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -401,6 +434,8 @@ fn Test() -> i32 { // CHECK:STDOUT: %T => constants.%Copy.facet.987 // CHECK:STDOUT: %T.as_type => constants.%i32 // CHECK:STDOUT: %require_complete => constants.%complete_type.f8a +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.6b6 +// CHECK:STDOUT: %n.patt => constants.%n.patt.e55 // CHECK:STDOUT: %Inner => constants.%Inner.096 // CHECK:STDOUT: %Inner.elem => constants.%Inner.elem.362 // CHECK:STDOUT: %struct_type.n => constants.%struct_type.n.9ed @@ -411,16 +446,20 @@ fn Test() -> i32 { // CHECK:STDOUT: %T => constants.%Copy.facet.987 // CHECK:STDOUT: %T.as_type.loc9_11.1 => constants.%i32 // CHECK:STDOUT: %pattern_type.loc9_9 => constants.%pattern_type.6b6 +// CHECK:STDOUT: %n.param_patt.loc9_9.2 => constants.%n.param_patt.47b +// CHECK:STDOUT: %n.patt.loc9_9.2 => constants.%n.patt.f0b // CHECK:STDOUT: %Inner => constants.%Inner.096 // CHECK:STDOUT: %.loc9_17.1 => constants.%.8bc // CHECK:STDOUT: %pattern_type.loc9_17 => constants.%pattern_type.1e8 +// CHECK:STDOUT: %return.param_patt.loc9_17.2 => constants.%return.param_patt.3fe +// CHECK:STDOUT: %return.patt.loc9_14.2 => constants.%return.patt.574 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc9_9 => constants.%complete_type.f8a // CHECK:STDOUT: %require_complete.loc9_14 => constants.%complete_type.cdf // CHECK:STDOUT: %struct_type.n => constants.%struct_type.n.9ed // CHECK:STDOUT: %Copy.WithSelf.Op.type => constants.%Copy.WithSelf.Op.type.d09 -// CHECK:STDOUT: %.loc9_38.2 => constants.%.7a6 +// CHECK:STDOUT: %.loc9_38.3 => constants.%.7a6 // CHECK:STDOUT: %Copy.lookup_impl_witness => constants.%Copy.impl_witness.0e0 // CHECK:STDOUT: %impl.elem0.loc9_38.2 => constants.%Int.as.Copy.impl.Op.4f6 // CHECK:STDOUT: %specific_impl_fn.loc9_38.2 => constants.%Int.as.Copy.impl.Op.specific_fn @@ -432,6 +471,7 @@ fn Test() -> i32 { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Outer.type: type = generic_class_type @Outer [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -441,8 +481,12 @@ fn Test() -> i32 { // CHECK:STDOUT: %Self.656: %Inner.type.84b = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.abe: type = facet_access_type %Self.656 [symbolic] // CHECK:STDOUT: %pattern_type.397: type = pattern_type %Self.as_type.abe [symbolic] +// CHECK:STDOUT: %self.param_patt.1f9: %pattern_type.397 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.621: %pattern_type.397 = at_binding_pattern self, %self.param_patt.1f9 [symbolic] // CHECK:STDOUT: %.184: Core.Form = init_form %T [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %return.param_patt.41d: %pattern_type.51d = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.b39: %pattern_type.51d = return_slot_pattern %return.param_patt.41d, %T [symbolic] // CHECK:STDOUT: %Inner.WithSelf.F.type.792: type = fn_type @Inner.WithSelf.F, @Inner.WithSelf(%T, %Self.656) [symbolic] // CHECK:STDOUT: %Inner.WithSelf.F.576: %Inner.WithSelf.F.type.792 = struct_value () [symbolic] // CHECK:STDOUT: %Inner.assoc_type.b6b: type = assoc_entity_type @Inner, @Inner(%T) [symbolic] @@ -451,6 +495,8 @@ fn Test() -> i32 { // CHECK:STDOUT: %Inner.impl_witness.d0a: = impl_witness @C.as.Inner.impl.%Inner.impl_witness_table, @C.as.Inner.impl(%T) [symbolic] // CHECK:STDOUT: %require_complete.fcc: = require_complete_type %Inner.type.84b [symbolic] // CHECK:STDOUT: %pattern_type.6fd: type = pattern_type %C.7d7 [symbolic] +// CHECK:STDOUT: %self.param_patt.b1b: %pattern_type.6fd = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.b71: %pattern_type.6fd = at_binding_pattern self, %self.param_patt.b1b [symbolic] // CHECK:STDOUT: %C.as.Inner.impl.F.type.1ec: type = fn_type @C.as.Inner.impl.F, @C.as.Inner.impl(%T) [symbolic] // CHECK:STDOUT: %C.as.Inner.impl.F.4be: %C.as.Inner.impl.F.type.1ec = struct_value () [symbolic] // CHECK:STDOUT: %Inner.facet.285: %Inner.type.84b = facet_value %C.7d7, (%Inner.impl_witness.d0a) [symbolic] @@ -483,8 +529,12 @@ fn Test() -> i32 { // CHECK:STDOUT: %Inner.assoc_type.477: type = assoc_entity_type @Inner, @Inner(%i32) [concrete] // CHECK:STDOUT: %assoc0.7b8: %Inner.assoc_type.477 = assoc_entity element0, @Inner.WithSelf.%Inner.WithSelf.F.decl [concrete] // CHECK:STDOUT: %pattern_type.d8d: type = pattern_type %D [concrete] +// CHECK:STDOUT: %self.param_patt.f16: %pattern_type.d8d = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.6c0: %pattern_type.d8d = at_binding_pattern self, %self.param_patt.f16 [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %D.as.Inner.impl.F.type: type = fn_type @D.as.Inner.impl.F [concrete] // CHECK:STDOUT: %D.as.Inner.impl.F: %D.as.Inner.impl.F.type = struct_value () [concrete] // CHECK:STDOUT: %Inner.facet.45b: %Inner.type.5cc = facet_value %D, (%Inner.impl_witness.8fa) [concrete] @@ -495,6 +545,8 @@ fn Test() -> i32 { // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %complete_type.f8a: = complete_type_witness %i32.builtin [concrete] // CHECK:STDOUT: %pattern_type.9d0: type = pattern_type %C.b7f [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.9d0 = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.9d0 = var_pattern %c.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %C.val: %C.b7f = struct_value () [concrete] // CHECK:STDOUT: %Inner.impl_witness.cdc: = impl_witness @C.as.Inner.impl.%Inner.impl_witness_table, @C.as.Inner.impl(%i32) [concrete] @@ -506,6 +558,8 @@ fn Test() -> i32 { // CHECK:STDOUT: %Inner.WithSelf.F.type.a78: type = fn_type @Inner.WithSelf.F, @Inner.WithSelf(%i32, %Inner.facet.39b) [concrete] // CHECK:STDOUT: %Inner.WithSelf.F.e60: %Inner.WithSelf.F.type.a78 = struct_value () [concrete] // CHECK:STDOUT: %.8da: type = fn_type_with_self_type %Inner.WithSelf.F.type.a78, %Inner.facet.39b [concrete] +// CHECK:STDOUT: %self.param_patt.edf: %pattern_type.9d0 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.14b: %pattern_type.9d0 = at_binding_pattern self, %self.param_patt.edf [concrete] // CHECK:STDOUT: %C.as.Inner.impl.F.specific_fn: = specific_function %C.as.Inner.impl.F.e77, @C.as.Inner.impl.F(%i32) [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.2: type = fn_type @Destroy.Op.loc23_3.2 [concrete] @@ -532,7 +586,7 @@ fn Test() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Outer.decl: %Outer.type = class_decl @Outer [concrete = constants.%Outer.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc4_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_17.1: type = splice_block %.loc4_17.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -542,8 +596,8 @@ fn Test() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %D.decl: type = class_decl @D [concrete = constants.%D] {} {} // CHECK:STDOUT: %Test.decl: %Test.type = fn_decl @Test [concrete = constants.%Test] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc22 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc22 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc22: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc22: Core.Form = init_form %i32.loc22 [concrete = constants.%.795] @@ -564,10 +618,10 @@ fn Test() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %Inner.WithSelf.F.decl: @Inner.WithSelf.%Inner.WithSelf.F.type (%Inner.WithSelf.F.type.792) = fn_decl @Inner.WithSelf.F [symbolic = @Inner.WithSelf.%Inner.WithSelf.F (constants.%Inner.WithSelf.F.576)] { -// CHECK:STDOUT: %self.param_patt: @Inner.WithSelf.F.%pattern_type.loc6_10 (%pattern_type.397) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @Inner.WithSelf.F.%pattern_type.loc6_10 (%pattern_type.397) = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @Inner.WithSelf.F.%pattern_type.loc6_19 (%pattern_type.51d) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @Inner.WithSelf.F.%pattern_type.loc6_19 (%pattern_type.51d) = return_slot_pattern %return.param_patt, %T.ref [concrete] +// CHECK:STDOUT: %self.param_patt.loc6_10.1: @Inner.WithSelf.F.%pattern_type.loc6_10 (%pattern_type.397) = value_param_pattern [symbolic = %self.param_patt.loc6_10.2 (constants.%self.param_patt.1f9)] +// CHECK:STDOUT: %self.patt.loc6_10.1: @Inner.WithSelf.F.%pattern_type.loc6_10 (%pattern_type.397) = at_binding_pattern self, %self.param_patt.loc6_10.1 [symbolic = %self.patt.loc6_10.2 (constants.%self.patt.621)] +// CHECK:STDOUT: %return.param_patt.loc6_19.1: @Inner.WithSelf.F.%pattern_type.loc6_19 (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt.loc6_19.2 (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt.loc6_16.1: @Inner.WithSelf.F.%pattern_type.loc6_19 (%pattern_type.51d) = return_slot_pattern %return.param_patt.loc6_19.1, %T.ref [symbolic = %return.patt.loc6_16.2 (constants.%return.patt.b39)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, @Outer.%T.loc4_14.2 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %.loc6_19.2: Core.Form = init_form %T.ref [symbolic = %.loc6_19.1 (constants.%.184)] @@ -611,10 +665,10 @@ fn Test() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: impl: %Self.ref as %Inner.ref { // CHECK:STDOUT: %C.as.Inner.impl.F.decl: @C.as.Inner.impl.%C.as.Inner.impl.F.type (%C.as.Inner.impl.F.type.1ec) = fn_decl @C.as.Inner.impl.F [symbolic = @C.as.Inner.impl.%C.as.Inner.impl.F (constants.%C.as.Inner.impl.F.4be)] { -// CHECK:STDOUT: %self.param_patt: @C.as.Inner.impl.F.%pattern_type.loc11_16 (%pattern_type.6fd) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @C.as.Inner.impl.F.%pattern_type.loc11_16 (%pattern_type.6fd) = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @C.as.Inner.impl.F.%pattern_type.loc11_24 (%pattern_type.51d) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @C.as.Inner.impl.F.%pattern_type.loc11_24 (%pattern_type.51d) = return_slot_pattern %return.param_patt, %T.ref [concrete] +// CHECK:STDOUT: %self.param_patt.loc11_16.1: @C.as.Inner.impl.F.%pattern_type.loc11_16 (%pattern_type.6fd) = value_param_pattern [symbolic = %self.param_patt.loc11_16.2 (constants.%self.param_patt.b1b)] +// CHECK:STDOUT: %self.patt.loc11_16.1: @C.as.Inner.impl.F.%pattern_type.loc11_16 (%pattern_type.6fd) = at_binding_pattern self, %self.param_patt.loc11_16.1 [symbolic = %self.patt.loc11_16.2 (constants.%self.patt.b71)] +// CHECK:STDOUT: %return.param_patt.loc11_24.1: @C.as.Inner.impl.F.%pattern_type.loc11_24 (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt.loc11_24.2 (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt.loc11_21.1: @C.as.Inner.impl.F.%pattern_type.loc11_24 (%pattern_type.51d) = return_slot_pattern %return.param_patt.loc11_24.1, %T.ref [symbolic = %return.patt.loc11_21.2 (constants.%return.patt.b39)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, @Outer.%T.loc4_14.2 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %.loc11_24.3: Core.Form = init_form %T.ref [symbolic = %.loc11_24.2 (constants.%.184)] @@ -642,10 +696,10 @@ fn Test() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: impl @D.as.Inner.impl: %Self.ref as %Inner.ref { // CHECK:STDOUT: %D.as.Inner.impl.F.decl: %D.as.Inner.impl.F.type = fn_decl @D.as.Inner.impl.F [concrete = constants.%D.as.Inner.impl.F] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.d8d = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.d8d = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.d8d = value_param_pattern [concrete = constants.%self.param_patt.f16] +// CHECK:STDOUT: %self.patt: %pattern_type.d8d = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.6c0] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc18: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -666,6 +720,7 @@ fn Test() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Outer(%T.loc4_14.2: type) { +// CHECK:STDOUT: %T.patt.loc4_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_14.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_14.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -730,8 +785,12 @@ fn Test() -> i32 { // CHECK:STDOUT: %Self: @Inner.WithSelf.F.%Inner.type (%Inner.type.84b) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self.656)] // CHECK:STDOUT: %Self.as_type.loc6_10.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc6_10.1 (constants.%Self.as_type.abe)] // CHECK:STDOUT: %pattern_type.loc6_10: type = pattern_type %Self.as_type.loc6_10.1 [symbolic = %pattern_type.loc6_10 (constants.%pattern_type.397)] +// CHECK:STDOUT: %self.param_patt.loc6_10.2: @Inner.WithSelf.F.%pattern_type.loc6_10 (%pattern_type.397) = value_param_pattern [symbolic = %self.param_patt.loc6_10.2 (constants.%self.param_patt.1f9)] +// CHECK:STDOUT: %self.patt.loc6_10.2: @Inner.WithSelf.F.%pattern_type.loc6_10 (%pattern_type.397) = at_binding_pattern self, %self.param_patt.loc6_10.2 [symbolic = %self.patt.loc6_10.2 (constants.%self.patt.621)] // CHECK:STDOUT: %.loc6_19.1: Core.Form = init_form %T [symbolic = %.loc6_19.1 (constants.%.184)] // CHECK:STDOUT: %pattern_type.loc6_19: type = pattern_type %T [symbolic = %pattern_type.loc6_19 (constants.%pattern_type.51d)] +// CHECK:STDOUT: %return.param_patt.loc6_19.2: @Inner.WithSelf.F.%pattern_type.loc6_19 (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt.loc6_19.2 (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt.loc6_16.2: @Inner.WithSelf.F.%pattern_type.loc6_19 (%pattern_type.51d) = return_slot_pattern %return.param_patt.loc6_19.2, %T [symbolic = %return.patt.loc6_16.2 (constants.%return.patt.b39)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Inner.WithSelf.F.%Self.as_type.loc6_10.1 (%Self.as_type.abe)) -> out %return.param: @Inner.WithSelf.F.%T (%T); // CHECK:STDOUT: } @@ -740,8 +799,12 @@ fn Test() -> i32 { // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C.7d7)] // CHECK:STDOUT: %pattern_type.loc11_16: type = pattern_type %C [symbolic = %pattern_type.loc11_16 (constants.%pattern_type.6fd)] +// CHECK:STDOUT: %self.param_patt.loc11_16.2: @C.as.Inner.impl.F.%pattern_type.loc11_16 (%pattern_type.6fd) = value_param_pattern [symbolic = %self.param_patt.loc11_16.2 (constants.%self.param_patt.b1b)] +// CHECK:STDOUT: %self.patt.loc11_16.2: @C.as.Inner.impl.F.%pattern_type.loc11_16 (%pattern_type.6fd) = at_binding_pattern self, %self.param_patt.loc11_16.2 [symbolic = %self.patt.loc11_16.2 (constants.%self.patt.b71)] // CHECK:STDOUT: %.loc11_24.2: Core.Form = init_form %T [symbolic = %.loc11_24.2 (constants.%.184)] // CHECK:STDOUT: %pattern_type.loc11_24: type = pattern_type %T [symbolic = %pattern_type.loc11_24 (constants.%pattern_type.51d)] +// CHECK:STDOUT: %return.param_patt.loc11_24.2: @C.as.Inner.impl.F.%pattern_type.loc11_24 (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt.loc11_24.2 (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt.loc11_21.2: @C.as.Inner.impl.F.%pattern_type.loc11_24 (%pattern_type.51d) = return_slot_pattern %return.param_patt.loc11_24.2, %T [symbolic = %return.patt.loc11_21.2 (constants.%return.patt.b39)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc11_16: = require_complete_type %C [symbolic = %require_complete.loc11_16 (constants.%require_complete.895)] @@ -780,8 +843,8 @@ fn Test() -> i32 { // CHECK:STDOUT: fn @Test() -> out %return.param: %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.9d0 = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.9d0 = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.9d0 = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type.9d0 = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C.b7f = var %c.var_patt // CHECK:STDOUT: %.loc23_26.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] @@ -823,6 +886,7 @@ fn Test() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Outer(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_14.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_14.1 => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -854,8 +918,12 @@ fn Test() -> i32 { // CHECK:STDOUT: %Self => constants.%Self.656 // CHECK:STDOUT: %Self.as_type.loc6_10.1 => constants.%Self.as_type.abe // CHECK:STDOUT: %pattern_type.loc6_10 => constants.%pattern_type.397 +// CHECK:STDOUT: %self.param_patt.loc6_10.2 => constants.%self.param_patt.1f9 +// CHECK:STDOUT: %self.patt.loc6_10.2 => constants.%self.patt.621 // CHECK:STDOUT: %.loc6_19.1 => constants.%.184 // CHECK:STDOUT: %pattern_type.loc6_19 => constants.%pattern_type.51d +// CHECK:STDOUT: %return.param_patt.loc6_19.2 => constants.%return.param_patt.41d +// CHECK:STDOUT: %return.patt.loc6_16.2 => constants.%return.patt.b39 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%T) { @@ -878,8 +946,12 @@ fn Test() -> i32 { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %C => constants.%C.7d7 // CHECK:STDOUT: %pattern_type.loc11_16 => constants.%pattern_type.6fd +// CHECK:STDOUT: %self.param_patt.loc11_16.2 => constants.%self.param_patt.b1b +// CHECK:STDOUT: %self.patt.loc11_16.2 => constants.%self.patt.b71 // CHECK:STDOUT: %.loc11_24.2 => constants.%.184 // CHECK:STDOUT: %pattern_type.loc11_24 => constants.%pattern_type.51d +// CHECK:STDOUT: %return.param_patt.loc11_24.2 => constants.%return.param_patt.41d +// CHECK:STDOUT: %return.patt.loc11_21.2 => constants.%return.patt.b39 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Inner.WithSelf(constants.%T, constants.%Inner.facet.285) { @@ -899,8 +971,12 @@ fn Test() -> i32 { // CHECK:STDOUT: %Self => constants.%Inner.facet.285 // CHECK:STDOUT: %Self.as_type.loc6_10.1 => constants.%C.7d7 // CHECK:STDOUT: %pattern_type.loc6_10 => constants.%pattern_type.6fd +// CHECK:STDOUT: %self.param_patt.loc6_10.2 => constants.%self.param_patt.b1b +// CHECK:STDOUT: %self.patt.loc6_10.2 => constants.%self.patt.b71 // CHECK:STDOUT: %.loc6_19.1 => constants.%.184 // CHECK:STDOUT: %pattern_type.loc6_19 => constants.%pattern_type.51d +// CHECK:STDOUT: %return.param_patt.loc6_19.2 => constants.%return.param_patt.41d +// CHECK:STDOUT: %return.patt.loc6_16.2 => constants.%return.patt.b39 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Inner.WithSelf(constants.%T, constants.%Inner.facet.8ef) { @@ -920,11 +996,16 @@ fn Test() -> i32 { // CHECK:STDOUT: %Self => constants.%Inner.facet.8ef // CHECK:STDOUT: %Self.as_type.loc6_10.1 => constants.%C.7d7 // CHECK:STDOUT: %pattern_type.loc6_10 => constants.%pattern_type.6fd +// CHECK:STDOUT: %self.param_patt.loc6_10.2 => constants.%self.param_patt.b1b +// CHECK:STDOUT: %self.patt.loc6_10.2 => constants.%self.patt.b71 // CHECK:STDOUT: %.loc6_19.1 => constants.%.184 // CHECK:STDOUT: %pattern_type.loc6_19 => constants.%pattern_type.51d +// CHECK:STDOUT: %return.param_patt.loc6_19.2 => constants.%return.param_patt.41d +// CHECK:STDOUT: %return.patt.loc6_16.2 => constants.%return.patt.b39 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Outer(constants.%i32) { +// CHECK:STDOUT: %T.patt.loc4_14.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_14.1 => constants.%i32 // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -971,8 +1052,12 @@ fn Test() -> i32 { // CHECK:STDOUT: %Self => constants.%Inner.facet.45b // CHECK:STDOUT: %Self.as_type.loc6_10.1 => constants.%D // CHECK:STDOUT: %pattern_type.loc6_10 => constants.%pattern_type.d8d +// CHECK:STDOUT: %self.param_patt.loc6_10.2 => constants.%self.param_patt.f16 +// CHECK:STDOUT: %self.patt.loc6_10.2 => constants.%self.patt.6c0 // CHECK:STDOUT: %.loc6_19.1 => constants.%.795 // CHECK:STDOUT: %pattern_type.loc6_19 => constants.%pattern_type.6b6 +// CHECK:STDOUT: %return.param_patt.loc6_19.2 => constants.%return.param_patt.a9a +// CHECK:STDOUT: %return.patt.loc6_16.2 => constants.%return.patt.e1b // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C.as.Inner.impl(constants.%i32) { @@ -1002,8 +1087,12 @@ fn Test() -> i32 { // CHECK:STDOUT: %T => constants.%i32 // CHECK:STDOUT: %C => constants.%C.b7f // CHECK:STDOUT: %pattern_type.loc11_16 => constants.%pattern_type.9d0 +// CHECK:STDOUT: %self.param_patt.loc11_16.2 => constants.%self.param_patt.edf +// CHECK:STDOUT: %self.patt.loc11_16.2 => constants.%self.patt.14b // CHECK:STDOUT: %.loc11_24.2 => constants.%.795 // CHECK:STDOUT: %pattern_type.loc11_24 => constants.%pattern_type.6b6 +// CHECK:STDOUT: %return.param_patt.loc11_24.2 => constants.%return.param_patt.a9a +// CHECK:STDOUT: %return.patt.loc11_21.2 => constants.%return.patt.e1b // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc11_16 => constants.%complete_type.357 @@ -1027,7 +1116,11 @@ fn Test() -> i32 { // CHECK:STDOUT: %Self => constants.%Inner.facet.39b // CHECK:STDOUT: %Self.as_type.loc6_10.1 => constants.%C.b7f // CHECK:STDOUT: %pattern_type.loc6_10 => constants.%pattern_type.9d0 +// CHECK:STDOUT: %self.param_patt.loc6_10.2 => constants.%self.param_patt.edf +// CHECK:STDOUT: %self.patt.loc6_10.2 => constants.%self.patt.14b // CHECK:STDOUT: %.loc6_19.1 => constants.%.795 // CHECK:STDOUT: %pattern_type.loc6_19 => constants.%pattern_type.6b6 +// CHECK:STDOUT: %return.param_patt.loc6_19.2 => constants.%return.param_patt.a9a +// CHECK:STDOUT: %return.patt.loc6_16.2 => constants.%return.patt.e1b // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/generic/method_deduce.carbon b/toolchain/check/testdata/class/generic/method_deduce.carbon index dd634452a652..7bdb2696c978 100644 --- a/toolchain/check/testdata/class/generic/method_deduce.carbon +++ b/toolchain/check/testdata/class/generic/method_deduce.carbon @@ -44,26 +44,36 @@ fn CallMethodSelfDeduce(c: Class(A)) -> A { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Class.type: type = generic_class_type @Class [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Class.generic: %Class.type = struct_value () [concrete] // CHECK:STDOUT: %Class.7bc: type = class_type @Class, @Class(%T) [symbolic] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %U: type = symbolic_binding U, 1 [symbolic] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.4b9: %tuple.type.24b = tuple_value (%T, %U) [symbolic] // CHECK:STDOUT: %tuple.type.a5e: type = tuple_type (%T, %U) [symbolic] // CHECK:STDOUT: %.f18: Core.Form = init_form %tuple.type.a5e [symbolic] // CHECK:STDOUT: %pattern_type.eee: type = pattern_type %tuple.type.a5e [symbolic] +// CHECK:STDOUT: %return.param_patt.a41: %pattern_type.eee = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.453: %pattern_type.eee = return_slot_pattern %return.param_patt.a41, %tuple.type.a5e [symbolic] // CHECK:STDOUT: %Class.Get.type.49d: type = fn_type @Class.Get, @Class(%T) [symbolic] // CHECK:STDOUT: %Class.Get.ceb: %Class.Get.type.49d = struct_value () [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %x.param_patt.91d: %pattern_type.51d = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.800: %pattern_type.51d = at_binding_pattern x, %x.param_patt.91d [symbolic] // CHECK:STDOUT: %Class.GetNoDeduce.type.83e: type = fn_type @Class.GetNoDeduce, @Class(%T) [symbolic] // CHECK:STDOUT: %Class.GetNoDeduce.a04: %Class.GetNoDeduce.type.83e = struct_value () [symbolic] // CHECK:STDOUT: %Class.d74: type = class_type @Class, @Class(%U) [symbolic] // CHECK:STDOUT: %pattern_type.cc0: type = pattern_type %Class.d74 [symbolic] +// CHECK:STDOUT: %self.param_patt.814: %pattern_type.cc0 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.868: %pattern_type.cc0 = at_binding_pattern self, %self.param_patt.814 [symbolic] // CHECK:STDOUT: %.822: Core.Form = init_form %U [symbolic] // CHECK:STDOUT: %pattern_type.946: type = pattern_type %U [symbolic] +// CHECK:STDOUT: %return.param_patt.6dd: %pattern_type.946 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.4dd: %pattern_type.946 = return_slot_pattern %return.param_patt.6dd, %U [symbolic] // CHECK:STDOUT: %Class.F.type.982: type = fn_type @Class.F, @Class(%T) [symbolic] // CHECK:STDOUT: %Class.F.c63: %Class.F.type.982 = struct_value () [symbolic] // CHECK:STDOUT: %require_complete.220: = require_complete_type %tuple.type.a5e [symbolic] @@ -80,10 +90,14 @@ fn CallMethodSelfDeduce(c: Class(A)) -> A { // CHECK:STDOUT: %Class.F.specific_fn.844: = specific_function %Class.F.c29, @Class.F(%U, %U) [symbolic] // CHECK:STDOUT: %Class.30a: type = class_type @Class, @Class(%A) [concrete] // CHECK:STDOUT: %pattern_type.89e: type = pattern_type %Class.30a [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.89e = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.89e = at_binding_pattern c, %c.param_patt [concrete] // CHECK:STDOUT: %tuple.9aa: %tuple.type.24b = tuple_value (%A, %B) [concrete] // CHECK:STDOUT: %tuple.type.1e7: type = tuple_type (%A, %B) [concrete] // CHECK:STDOUT: %.7f5: Core.Form = init_form %tuple.type.1e7 [concrete] // CHECK:STDOUT: %pattern_type.7c6: type = pattern_type %tuple.type.1e7 [concrete] +// CHECK:STDOUT: %return.param_patt.1be: %pattern_type.7c6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.709: %pattern_type.7c6 = return_slot_pattern %return.param_patt.1be, %tuple.type.1e7 [concrete] // CHECK:STDOUT: %CallGenericMethod.type: type = fn_type @CallGenericMethod [concrete] // CHECK:STDOUT: %CallGenericMethod: %CallGenericMethod.type = struct_value () [concrete] // CHECK:STDOUT: %Class.Get.type.9a5: type = fn_type @Class.Get, @Class(%A) [concrete] @@ -97,6 +111,8 @@ fn CallMethodSelfDeduce(c: Class(A)) -> A { // CHECK:STDOUT: %CallGenericMethodWithNonDeducedParam: %CallGenericMethodWithNonDeducedParam.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.9ef: type = pattern_type %A [concrete] +// CHECK:STDOUT: %x.param_patt.4c3: %pattern_type.9ef = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.313: %pattern_type.9ef = at_binding_pattern x, %x.param_patt.4c3 [concrete] // CHECK:STDOUT: %Class.GetNoDeduce.specific_fn.931: = specific_function %Class.GetNoDeduce.c1e, @Class.GetNoDeduce(%A, %B) [concrete] // CHECK:STDOUT: %A.val: %A = struct_value () [concrete] // CHECK:STDOUT: %.367: ref %A = temporary invalid, %A.val [concrete] @@ -105,8 +121,12 @@ fn CallMethodSelfDeduce(c: Class(A)) -> A { // CHECK:STDOUT: %Destroy.Op.1a2547.2: %Destroy.Op.type.1d8f74.2 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.Op.bound: = bound_method %.367, %Destroy.Op.1a2547.2 [concrete] // CHECK:STDOUT: %.cbf: Core.Form = init_form %A [concrete] +// CHECK:STDOUT: %return.param_patt.f0c: %pattern_type.9ef = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.a6d: %pattern_type.9ef = return_slot_pattern %return.param_patt.f0c, %A [concrete] // CHECK:STDOUT: %CallMethodSelfDeduce.type: type = fn_type @CallMethodSelfDeduce [concrete] // CHECK:STDOUT: %CallMethodSelfDeduce: %CallMethodSelfDeduce.type = struct_value () [concrete] +// CHECK:STDOUT: %self.param_patt.225: %pattern_type.89e = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.39c: %pattern_type.89e = at_binding_pattern self, %self.param_patt.225 [concrete] // CHECK:STDOUT: %Class.F.specific_fn.0bd: = specific_function %Class.F.805, @Class.F(%A, %A) [concrete] // CHECK:STDOUT: %complete_type.c44: = complete_type_witness %tuple.type.1e7 [concrete] // CHECK:STDOUT: } @@ -134,7 +154,7 @@ fn CallMethodSelfDeduce(c: Class(A)) -> A { // CHECK:STDOUT: %A.decl: type = class_decl @A [concrete = constants.%A] {} {} // CHECK:STDOUT: %B.decl: type = class_decl @B [concrete = constants.%B] {} {} // CHECK:STDOUT: %Class.decl: %Class.type = class_decl @Class [concrete = constants.%Class.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc18_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc18_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc18_17.1: type = splice_block %.loc18_17.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -143,10 +163,10 @@ fn CallMethodSelfDeduce(c: Class(A)) -> A { // CHECK:STDOUT: %T.loc18_14.2: type = symbolic_binding T, 0 [symbolic = %T.loc18_14.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %CallGenericMethod.decl: %CallGenericMethod.type = fn_decl @CallGenericMethod [concrete = constants.%CallGenericMethod] { -// CHECK:STDOUT: %c.param_patt: %pattern_type.89e = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.89e = at_binding_pattern c, %c.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.7c6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.7c6 = return_slot_pattern %return.param_patt, %.loc24_43.3 [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.89e = value_param_pattern [concrete = constants.%c.param_patt] +// CHECK:STDOUT: %c.patt: %pattern_type.89e = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.7c6 = out_param_pattern [concrete = constants.%return.param_patt.1be] +// CHECK:STDOUT: %return.patt: %pattern_type.7c6 = return_slot_pattern %return.param_patt, %.loc24_43.3 [concrete = constants.%return.patt.709] // CHECK:STDOUT: } { // CHECK:STDOUT: %A.ref.loc24_39: type = name_ref A, file.%A.decl [concrete = constants.%A] // CHECK:STDOUT: %B.ref.loc24: type = name_ref B, file.%B.decl [concrete = constants.%B] @@ -164,10 +184,10 @@ fn CallMethodSelfDeduce(c: Class(A)) -> A { // CHECK:STDOUT: %return: ref %tuple.type.1e7 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallGenericMethodWithNonDeducedParam.decl: %CallGenericMethodWithNonDeducedParam.type = fn_decl @CallGenericMethodWithNonDeducedParam [concrete = constants.%CallGenericMethodWithNonDeducedParam] { -// CHECK:STDOUT: %c.param_patt: %pattern_type.89e = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.89e = at_binding_pattern c, %c.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.7c6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.7c6 = return_slot_pattern %return.param_patt, %.loc28_62.3 [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.89e = value_param_pattern [concrete = constants.%c.param_patt] +// CHECK:STDOUT: %c.patt: %pattern_type.89e = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.7c6 = out_param_pattern [concrete = constants.%return.param_patt.1be] +// CHECK:STDOUT: %return.patt: %pattern_type.7c6 = return_slot_pattern %return.param_patt, %.loc28_62.3 [concrete = constants.%return.patt.709] // CHECK:STDOUT: } { // CHECK:STDOUT: %A.ref.loc28_58: type = name_ref A, file.%A.decl [concrete = constants.%A] // CHECK:STDOUT: %B.ref.loc28: type = name_ref B, file.%B.decl [concrete = constants.%B] @@ -185,10 +205,10 @@ fn CallMethodSelfDeduce(c: Class(A)) -> A { // CHECK:STDOUT: %return: ref %tuple.type.1e7 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallMethodSelfDeduce.decl: %CallMethodSelfDeduce.type = fn_decl @CallMethodSelfDeduce [concrete = constants.%CallMethodSelfDeduce] { -// CHECK:STDOUT: %c.param_patt: %pattern_type.89e = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.89e = at_binding_pattern c, %c.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.9ef = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.9ef = return_slot_pattern %return.param_patt, %A.ref.loc32_41 [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.89e = value_param_pattern [concrete = constants.%c.param_patt] +// CHECK:STDOUT: %c.patt: %pattern_type.89e = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.9ef = out_param_pattern [concrete = constants.%return.param_patt.f0c] +// CHECK:STDOUT: %return.patt: %pattern_type.9ef = return_slot_pattern %return.param_patt, %A.ref.loc32_41 [concrete = constants.%return.patt.a6d] // CHECK:STDOUT: } { // CHECK:STDOUT: %A.ref.loc32_41: type = name_ref A, file.%A.decl [concrete = constants.%A] // CHECK:STDOUT: %.loc32_41.2: Core.Form = init_form %A.ref.loc32_41 [concrete = constants.%.cbf] @@ -221,6 +241,7 @@ fn CallMethodSelfDeduce(c: Class(A)) -> A { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%T.loc18_14.2: type) { +// CHECK:STDOUT: %T.patt.loc18_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc18_14.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc18_14.1: type = symbolic_binding T, 0 [symbolic = %T.loc18_14.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -233,9 +254,9 @@ fn CallMethodSelfDeduce(c: Class(A)) -> A { // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %Class.Get.decl: @Class.%Class.Get.type (%Class.Get.type.49d) = fn_decl @Class.Get [symbolic = @Class.%Class.Get (constants.%Class.Get.ceb)] { -// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [concrete] -// CHECK:STDOUT: %return.param_patt: @Class.Get.%pattern_type (%pattern_type.eee) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @Class.Get.%pattern_type (%pattern_type.eee) = return_slot_pattern %return.param_patt, %.loc19_28.4 [concrete] +// CHECK:STDOUT: %U.patt.loc19_11.1: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc19_11.2 (constants.%U.patt)] +// CHECK:STDOUT: %return.param_patt.loc19_28.1: @Class.Get.%pattern_type (%pattern_type.eee) = out_param_pattern [symbolic = %return.param_patt.loc19_28.2 (constants.%return.param_patt.a41)] +// CHECK:STDOUT: %return.patt.loc19_20.1: @Class.Get.%pattern_type (%pattern_type.eee) = return_slot_pattern %return.param_patt.loc19_28.1, %.loc19_28.4 [symbolic = %return.patt.loc19_20.2 (constants.%return.patt.453)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, @Class.%T.loc18_14.2 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %U.ref.loc19_27: type = name_ref U, %U.loc19_11.2 [symbolic = %U.loc19_11.1 (constants.%U)] @@ -251,11 +272,11 @@ fn CallMethodSelfDeduce(c: Class(A)) -> A { // CHECK:STDOUT: %return: ref @Class.Get.%tuple.type (%tuple.type.a5e) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Class.GetNoDeduce.decl: @Class.%Class.GetNoDeduce.type (%Class.GetNoDeduce.type.83e) = fn_decl @Class.GetNoDeduce [symbolic = @Class.%Class.GetNoDeduce (constants.%Class.GetNoDeduce.a04)] { -// CHECK:STDOUT: %x.param_patt: @Class.GetNoDeduce.%pattern_type.loc20_19 (%pattern_type.51d) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @Class.GetNoDeduce.%pattern_type.loc20_19 (%pattern_type.51d) = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [concrete] -// CHECK:STDOUT: %return.param_patt: @Class.GetNoDeduce.%pattern_type.loc20_42 (%pattern_type.eee) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @Class.GetNoDeduce.%pattern_type.loc20_42 (%pattern_type.eee) = return_slot_pattern %return.param_patt, %.loc20_42.4 [concrete] +// CHECK:STDOUT: %x.param_patt.loc20_19.1: @Class.GetNoDeduce.%pattern_type.loc20_19 (%pattern_type.51d) = value_param_pattern [symbolic = %x.param_patt.loc20_19.2 (constants.%x.param_patt.91d)] +// CHECK:STDOUT: %x.patt.loc20_19.1: @Class.GetNoDeduce.%pattern_type.loc20_19 (%pattern_type.51d) = at_binding_pattern x, %x.param_patt.loc20_19.1 [symbolic = %x.patt.loc20_19.2 (constants.%x.patt.800)] +// CHECK:STDOUT: %U.patt.loc20_25.1: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc20_25.2 (constants.%U.patt)] +// CHECK:STDOUT: %return.param_patt.loc20_42.1: @Class.GetNoDeduce.%pattern_type.loc20_42 (%pattern_type.eee) = out_param_pattern [symbolic = %return.param_patt.loc20_42.2 (constants.%return.param_patt.a41)] +// CHECK:STDOUT: %return.patt.loc20_34.1: @Class.GetNoDeduce.%pattern_type.loc20_42 (%pattern_type.eee) = return_slot_pattern %return.param_patt.loc20_42.1, %.loc20_42.4 [symbolic = %return.patt.loc20_34.2 (constants.%return.patt.453)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc20_38: type = name_ref T, @Class.%T.loc18_14.2 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %U.ref.loc20_41: type = name_ref U, %U.loc20_25.2 [symbolic = %U.loc20_25.1 (constants.%U)] @@ -274,11 +295,11 @@ fn CallMethodSelfDeduce(c: Class(A)) -> A { // CHECK:STDOUT: %return: ref @Class.GetNoDeduce.%tuple.type (%tuple.type.a5e) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Class.F.decl: @Class.%Class.F.type (%Class.F.type.982) = fn_decl @Class.F [symbolic = @Class.%Class.F (constants.%Class.F.c63)] { -// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [concrete] -// CHECK:STDOUT: %self.param_patt: @Class.F.%pattern_type.loc21_22 (%pattern_type.cc0) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @Class.F.%pattern_type.loc21_22 (%pattern_type.cc0) = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @Class.F.%pattern_type.loc21_37 (%pattern_type.946) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @Class.F.%pattern_type.loc21_37 (%pattern_type.946) = return_slot_pattern %return.param_patt, %U.ref.loc21_37 [concrete] +// CHECK:STDOUT: %U.patt.loc21_9.1: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc21_9.2 (constants.%U.patt)] +// CHECK:STDOUT: %self.param_patt.loc21_22.1: @Class.F.%pattern_type.loc21_22 (%pattern_type.cc0) = value_param_pattern [symbolic = %self.param_patt.loc21_22.2 (constants.%self.param_patt.814)] +// CHECK:STDOUT: %self.patt.loc21_22.1: @Class.F.%pattern_type.loc21_22 (%pattern_type.cc0) = at_binding_pattern self, %self.param_patt.loc21_22.1 [symbolic = %self.patt.loc21_22.2 (constants.%self.patt.868)] +// CHECK:STDOUT: %return.param_patt.loc21_37.1: @Class.F.%pattern_type.loc21_37 (%pattern_type.946) = out_param_pattern [symbolic = %return.param_patt.loc21_37.2 (constants.%return.param_patt.6dd)] +// CHECK:STDOUT: %return.patt.loc21_34.1: @Class.F.%pattern_type.loc21_37 (%pattern_type.946) = return_slot_pattern %return.param_patt.loc21_37.1, %U.ref.loc21_37 [symbolic = %return.patt.loc21_34.2 (constants.%return.patt.4dd)] // CHECK:STDOUT: } { // CHECK:STDOUT: %U.ref.loc21_37: type = name_ref U, %U.loc21_9.2 [symbolic = %U.loc21_9.1 (constants.%U)] // CHECK:STDOUT: %.loc21_37.3: Core.Form = init_form %U.ref.loc21_37 [symbolic = %.loc21_37.2 (constants.%.822)] @@ -311,12 +332,15 @@ fn CallMethodSelfDeduce(c: Class(A)) -> A { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Class.Get(@Class.%T.loc18_14.2: type, %U.loc19_11.2: type) { +// CHECK:STDOUT: %U.patt.loc19_11.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc19_11.2 (constants.%U.patt)] // CHECK:STDOUT: %U.loc19_11.1: type = symbolic_binding U, 1 [symbolic = %U.loc19_11.1 (constants.%U)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %tuple: %tuple.type.24b = tuple_value (%T, %U.loc19_11.1) [symbolic = %tuple (constants.%tuple.4b9)] // CHECK:STDOUT: %tuple.type: type = tuple_type (%T, %U.loc19_11.1) [symbolic = %tuple.type (constants.%tuple.type.a5e)] // CHECK:STDOUT: %.loc19_28.2: Core.Form = init_form %tuple.type [symbolic = %.loc19_28.2 (constants.%.f18)] // CHECK:STDOUT: %pattern_type: type = pattern_type %tuple.type [symbolic = %pattern_type (constants.%pattern_type.eee)] +// CHECK:STDOUT: %return.param_patt.loc19_28.2: @Class.Get.%pattern_type (%pattern_type.eee) = out_param_pattern [symbolic = %return.param_patt.loc19_28.2 (constants.%return.param_patt.a41)] +// CHECK:STDOUT: %return.patt.loc19_20.2: @Class.Get.%pattern_type (%pattern_type.eee) = return_slot_pattern %return.param_patt.loc19_28.2, %tuple.type [symbolic = %return.patt.loc19_20.2 (constants.%return.patt.453)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %tuple.type [symbolic = %require_complete (constants.%require_complete.220)] @@ -339,11 +363,16 @@ fn CallMethodSelfDeduce(c: Class(A)) -> A { // CHECK:STDOUT: generic fn @Class.GetNoDeduce(@Class.%T.loc18_14.2: type, %U.loc20_25.2: type) { // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %pattern_type.loc20_19: type = pattern_type %T [symbolic = %pattern_type.loc20_19 (constants.%pattern_type.51d)] +// CHECK:STDOUT: %x.param_patt.loc20_19.2: @Class.GetNoDeduce.%pattern_type.loc20_19 (%pattern_type.51d) = value_param_pattern [symbolic = %x.param_patt.loc20_19.2 (constants.%x.param_patt.91d)] +// CHECK:STDOUT: %x.patt.loc20_19.2: @Class.GetNoDeduce.%pattern_type.loc20_19 (%pattern_type.51d) = at_binding_pattern x, %x.param_patt.loc20_19.2 [symbolic = %x.patt.loc20_19.2 (constants.%x.patt.800)] +// CHECK:STDOUT: %U.patt.loc20_25.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc20_25.2 (constants.%U.patt)] // CHECK:STDOUT: %U.loc20_25.1: type = symbolic_binding U, 1 [symbolic = %U.loc20_25.1 (constants.%U)] // CHECK:STDOUT: %tuple: %tuple.type.24b = tuple_value (%T, %U.loc20_25.1) [symbolic = %tuple (constants.%tuple.4b9)] // CHECK:STDOUT: %tuple.type: type = tuple_type (%T, %U.loc20_25.1) [symbolic = %tuple.type (constants.%tuple.type.a5e)] // CHECK:STDOUT: %.loc20_42.2: Core.Form = init_form %tuple.type [symbolic = %.loc20_42.2 (constants.%.f18)] // CHECK:STDOUT: %pattern_type.loc20_42: type = pattern_type %tuple.type [symbolic = %pattern_type.loc20_42 (constants.%pattern_type.eee)] +// CHECK:STDOUT: %return.param_patt.loc20_42.2: @Class.GetNoDeduce.%pattern_type.loc20_42 (%pattern_type.eee) = out_param_pattern [symbolic = %return.param_patt.loc20_42.2 (constants.%return.param_patt.a41)] +// CHECK:STDOUT: %return.patt.loc20_34.2: @Class.GetNoDeduce.%pattern_type.loc20_42 (%pattern_type.eee) = return_slot_pattern %return.param_patt.loc20_42.2, %tuple.type [symbolic = %return.patt.loc20_34.2 (constants.%return.patt.453)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic = %require_complete (constants.%require_complete.944)] @@ -365,11 +394,16 @@ fn CallMethodSelfDeduce(c: Class(A)) -> A { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Class.F(@Class.%T.loc18_14.2: type, %U.loc21_9.2: type) { +// CHECK:STDOUT: %U.patt.loc21_9.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc21_9.2 (constants.%U.patt)] // CHECK:STDOUT: %U.loc21_9.1: type = symbolic_binding U, 1 [symbolic = %U.loc21_9.1 (constants.%U)] // CHECK:STDOUT: %Class.loc21_31.1: type = class_type @Class, @Class(%U.loc21_9.1) [symbolic = %Class.loc21_31.1 (constants.%Class.d74)] // CHECK:STDOUT: %pattern_type.loc21_22: type = pattern_type %Class.loc21_31.1 [symbolic = %pattern_type.loc21_22 (constants.%pattern_type.cc0)] +// CHECK:STDOUT: %self.param_patt.loc21_22.2: @Class.F.%pattern_type.loc21_22 (%pattern_type.cc0) = value_param_pattern [symbolic = %self.param_patt.loc21_22.2 (constants.%self.param_patt.814)] +// CHECK:STDOUT: %self.patt.loc21_22.2: @Class.F.%pattern_type.loc21_22 (%pattern_type.cc0) = at_binding_pattern self, %self.param_patt.loc21_22.2 [symbolic = %self.patt.loc21_22.2 (constants.%self.patt.868)] // CHECK:STDOUT: %.loc21_37.2: Core.Form = init_form %U.loc21_9.1 [symbolic = %.loc21_37.2 (constants.%.822)] // CHECK:STDOUT: %pattern_type.loc21_37: type = pattern_type %U.loc21_9.1 [symbolic = %pattern_type.loc21_37 (constants.%pattern_type.946)] +// CHECK:STDOUT: %return.param_patt.loc21_37.2: @Class.F.%pattern_type.loc21_37 (%pattern_type.946) = out_param_pattern [symbolic = %return.param_patt.loc21_37.2 (constants.%return.param_patt.6dd)] +// CHECK:STDOUT: %return.patt.loc21_34.2: @Class.F.%pattern_type.loc21_37 (%pattern_type.946) = return_slot_pattern %return.param_patt.loc21_37.2, %U.loc21_9.1 [symbolic = %return.patt.loc21_34.2 (constants.%return.patt.4dd)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %Class.loc21_31.1 [symbolic = %require_complete (constants.%require_complete.716)] @@ -443,6 +477,7 @@ fn CallMethodSelfDeduce(c: Class(A)) -> A { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%T) { +// CHECK:STDOUT: %T.patt.loc18_14.2 => constants.%T.patt // CHECK:STDOUT: %T.loc18_14.1 => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -455,12 +490,15 @@ fn CallMethodSelfDeduce(c: Class(A)) -> A { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class.Get(constants.%T, constants.%U) { +// CHECK:STDOUT: %U.patt.loc19_11.2 => constants.%U.patt // CHECK:STDOUT: %U.loc19_11.1 => constants.%U // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %tuple => constants.%tuple.4b9 // CHECK:STDOUT: %tuple.type => constants.%tuple.type.a5e // CHECK:STDOUT: %.loc19_28.2 => constants.%.f18 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.eee +// CHECK:STDOUT: %return.param_patt.loc19_28.2 => constants.%return.param_patt.a41 +// CHECK:STDOUT: %return.patt.loc19_20.2 => constants.%return.patt.453 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.220 @@ -472,11 +510,16 @@ fn CallMethodSelfDeduce(c: Class(A)) -> A { // CHECK:STDOUT: specific @Class.GetNoDeduce(constants.%T, constants.%U) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %pattern_type.loc20_19 => constants.%pattern_type.51d +// CHECK:STDOUT: %x.param_patt.loc20_19.2 => constants.%x.param_patt.91d +// CHECK:STDOUT: %x.patt.loc20_19.2 => constants.%x.patt.800 +// CHECK:STDOUT: %U.patt.loc20_25.2 => constants.%U.patt // CHECK:STDOUT: %U.loc20_25.1 => constants.%U // CHECK:STDOUT: %tuple => constants.%tuple.4b9 // CHECK:STDOUT: %tuple.type => constants.%tuple.type.a5e // CHECK:STDOUT: %.loc20_42.2 => constants.%.f18 // CHECK:STDOUT: %pattern_type.loc20_42 => constants.%pattern_type.eee +// CHECK:STDOUT: %return.param_patt.loc20_42.2 => constants.%return.param_patt.a41 +// CHECK:STDOUT: %return.patt.loc20_34.2 => constants.%return.patt.453 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.944 @@ -486,6 +529,7 @@ fn CallMethodSelfDeduce(c: Class(A)) -> A { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%U) { +// CHECK:STDOUT: %T.patt.loc18_14.2 => constants.%T.patt // CHECK:STDOUT: %T.loc18_14.1 => constants.%U // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -498,19 +542,29 @@ fn CallMethodSelfDeduce(c: Class(A)) -> A { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class.F(constants.%T, constants.%U) { +// CHECK:STDOUT: %U.patt.loc21_9.2 => constants.%U.patt // CHECK:STDOUT: %U.loc21_9.1 => constants.%U // CHECK:STDOUT: %Class.loc21_31.1 => constants.%Class.d74 // CHECK:STDOUT: %pattern_type.loc21_22 => constants.%pattern_type.cc0 +// CHECK:STDOUT: %self.param_patt.loc21_22.2 => constants.%self.param_patt.814 +// CHECK:STDOUT: %self.patt.loc21_22.2 => constants.%self.patt.868 // CHECK:STDOUT: %.loc21_37.2 => constants.%.822 // CHECK:STDOUT: %pattern_type.loc21_37 => constants.%pattern_type.946 +// CHECK:STDOUT: %return.param_patt.loc21_37.2 => constants.%return.param_patt.6dd +// CHECK:STDOUT: %return.patt.loc21_34.2 => constants.%return.patt.4dd // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class.F(constants.%U, constants.%U) { +// CHECK:STDOUT: %U.patt.loc21_9.2 => constants.%U.patt // CHECK:STDOUT: %U.loc21_9.1 => constants.%U // CHECK:STDOUT: %Class.loc21_31.1 => constants.%Class.d74 // CHECK:STDOUT: %pattern_type.loc21_22 => constants.%pattern_type.cc0 +// CHECK:STDOUT: %self.param_patt.loc21_22.2 => constants.%self.param_patt.814 +// CHECK:STDOUT: %self.patt.loc21_22.2 => constants.%self.patt.868 // CHECK:STDOUT: %.loc21_37.2 => constants.%.822 // CHECK:STDOUT: %pattern_type.loc21_37 => constants.%pattern_type.946 +// CHECK:STDOUT: %return.param_patt.loc21_37.2 => constants.%return.param_patt.6dd +// CHECK:STDOUT: %return.patt.loc21_34.2 => constants.%return.patt.4dd // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.716 @@ -520,6 +574,7 @@ fn CallMethodSelfDeduce(c: Class(A)) -> A { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%A) { +// CHECK:STDOUT: %T.patt.loc18_14.2 => constants.%T.patt // CHECK:STDOUT: %T.loc18_14.1 => constants.%A // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -532,12 +587,15 @@ fn CallMethodSelfDeduce(c: Class(A)) -> A { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class.Get(constants.%A, constants.%B) { +// CHECK:STDOUT: %U.patt.loc19_11.2 => constants.%U.patt // CHECK:STDOUT: %U.loc19_11.1 => constants.%B // CHECK:STDOUT: %T => constants.%A // CHECK:STDOUT: %tuple => constants.%tuple.9aa // CHECK:STDOUT: %tuple.type => constants.%tuple.type.1e7 // CHECK:STDOUT: %.loc19_28.2 => constants.%.7f5 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.7c6 +// CHECK:STDOUT: %return.param_patt.loc19_28.2 => constants.%return.param_patt.1be +// CHECK:STDOUT: %return.patt.loc19_20.2 => constants.%return.patt.709 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.c44 @@ -549,11 +607,16 @@ fn CallMethodSelfDeduce(c: Class(A)) -> A { // CHECK:STDOUT: specific @Class.GetNoDeduce(constants.%A, constants.%B) { // CHECK:STDOUT: %T => constants.%A // CHECK:STDOUT: %pattern_type.loc20_19 => constants.%pattern_type.9ef +// CHECK:STDOUT: %x.param_patt.loc20_19.2 => constants.%x.param_patt.4c3 +// CHECK:STDOUT: %x.patt.loc20_19.2 => constants.%x.patt.313 +// CHECK:STDOUT: %U.patt.loc20_25.2 => constants.%U.patt // CHECK:STDOUT: %U.loc20_25.1 => constants.%B // CHECK:STDOUT: %tuple => constants.%tuple.9aa // CHECK:STDOUT: %tuple.type => constants.%tuple.type.1e7 // CHECK:STDOUT: %.loc20_42.2 => constants.%.7f5 // CHECK:STDOUT: %pattern_type.loc20_42 => constants.%pattern_type.7c6 +// CHECK:STDOUT: %return.param_patt.loc20_42.2 => constants.%return.param_patt.1be +// CHECK:STDOUT: %return.patt.loc20_34.2 => constants.%return.patt.709 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.357 @@ -563,11 +626,16 @@ fn CallMethodSelfDeduce(c: Class(A)) -> A { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class.F(constants.%A, constants.%A) { +// CHECK:STDOUT: %U.patt.loc21_9.2 => constants.%U.patt // CHECK:STDOUT: %U.loc21_9.1 => constants.%A // CHECK:STDOUT: %Class.loc21_31.1 => constants.%Class.30a // CHECK:STDOUT: %pattern_type.loc21_22 => constants.%pattern_type.89e +// CHECK:STDOUT: %self.param_patt.loc21_22.2 => constants.%self.param_patt.225 +// CHECK:STDOUT: %self.patt.loc21_22.2 => constants.%self.patt.39c // CHECK:STDOUT: %.loc21_37.2 => constants.%.cbf // CHECK:STDOUT: %pattern_type.loc21_37 => constants.%pattern_type.9ef +// CHECK:STDOUT: %return.param_patt.loc21_37.2 => constants.%return.param_patt.f0c +// CHECK:STDOUT: %return.patt.loc21_34.2 => constants.%return.patt.a6d // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.357 diff --git a/toolchain/check/testdata/class/generic/redeclare.carbon b/toolchain/check/testdata/class/generic/redeclare.carbon index 391acd6b7505..76a3a39d87d6 100644 --- a/toolchain/check/testdata/class/generic/redeclare.carbon +++ b/toolchain/check/testdata/class/generic/redeclare.carbon @@ -103,6 +103,7 @@ class E(U:! type) {} // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Generic.type: type = generic_class_type @Generic [concrete] // CHECK:STDOUT: %Generic.generic: %Generic.type = struct_value () [concrete] @@ -125,7 +126,7 @@ class E(U:! type) {} // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Generic.decl.loc4: %Generic.type = class_decl @Generic [concrete = constants.%Generic.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc6: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_19.1: type = splice_block %.loc4_19.2 [concrete = type] { // CHECK:STDOUT: %.Self.loc4: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -134,7 +135,7 @@ class E(U:! type) {} // CHECK:STDOUT: %T.loc4_16.2: type = symbolic_binding T, 0 [symbolic = %T.loc4_16.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %Generic.decl.loc6: %Generic.type = class_decl @Generic [concrete = constants.%Generic.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc6: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6_19.1: type = splice_block %.loc6_19.2 [concrete = type] { // CHECK:STDOUT: %.Self.loc6: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -145,6 +146,7 @@ class E(U:! type) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Generic(%T.loc4_16.2: type) { +// CHECK:STDOUT: %T.patt.loc4: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_16.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_16.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -159,6 +161,7 @@ class E(U:! type) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Generic(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4 => constants.%T.patt // CHECK:STDOUT: %T.loc4_16.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -169,6 +172,7 @@ class E(U:! type) {} // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %A.type: type = generic_class_type @A.loc12 [concrete] // CHECK:STDOUT: %A.generic: %A.type = struct_value () [concrete] @@ -192,7 +196,7 @@ class E(U:! type) {} // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl.loc4: type = class_decl @A.loc4 [concrete = constants.%A.5a2] {} {} // CHECK:STDOUT: %A.decl.loc12: %A.type = class_decl @A.loc12 [concrete = constants.%A.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc12_10.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_10.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc12_13.1: type = splice_block %.loc12_13.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -205,6 +209,7 @@ class E(U:! type) {} // CHECK:STDOUT: class @A.loc4; // CHECK:STDOUT: // CHECK:STDOUT: generic class @A.loc12(%T.loc12_10.2: type) { +// CHECK:STDOUT: %T.patt.loc12_10.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_10.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc12_10.1: type = symbolic_binding T, 0 [symbolic = %T.loc12_10.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -219,6 +224,7 @@ class E(U:! type) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A.loc12(constants.%T) { +// CHECK:STDOUT: %T.patt.loc12_10.2 => constants.%T.patt // CHECK:STDOUT: %T.loc12_10.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -231,12 +237,15 @@ class E(U:! type) {} // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.9ef: type = pattern_type %A [concrete] +// CHECK:STDOUT: %N.patt.3a1: %pattern_type.9ef = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %N.37f: %A = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %B.type.7937a9.1: type = generic_class_type @B.loc6 [concrete] // CHECK:STDOUT: %B.generic.60ca48.1: %B.type.7937a9.1 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %N.patt.9f0: %pattern_type.51d = symbolic_binding_pattern N, 1 [symbolic] // CHECK:STDOUT: %N.bd9: %T = symbolic_binding N, 1 [symbolic] // CHECK:STDOUT: %B.type.7937a9.2: type = generic_class_type @B.loc14 [concrete] // CHECK:STDOUT: %B.generic.60ca48.2: %B.type.7937a9.2 = struct_value () [concrete] @@ -259,7 +268,7 @@ class E(U:! type) {} // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl: type = class_decl @A [concrete = constants.%A] {} {} // CHECK:STDOUT: %B.decl.loc6: %B.type.7937a9.1 = class_decl @B.loc6 [concrete = constants.%B.generic.60ca48.1] { -// CHECK:STDOUT: %N.patt: %pattern_type.9ef = symbolic_binding_pattern N, 0 [concrete] +// CHECK:STDOUT: %N.patt.loc6_10.1: %pattern_type.9ef = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc6_10.2 (constants.%N.patt.3a1)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6: type = splice_block %A.ref [concrete = constants.%A] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -268,8 +277,8 @@ class E(U:! type) {} // CHECK:STDOUT: %N.loc6_10.2: %A = symbolic_binding N, 0 [symbolic = %N.loc6_10.1 (constants.%N.37f)] // CHECK:STDOUT: } // CHECK:STDOUT: %B.decl.loc14: %B.type.7937a9.2 = class_decl @B.loc14 [concrete = constants.%B.generic.60ca48.2] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %N.patt: @B.loc14.%pattern_type (%pattern_type.51d) = symbolic_binding_pattern N, 1 [concrete] +// CHECK:STDOUT: %T.patt.loc14_10.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_10.2 (constants.%T.patt)] +// CHECK:STDOUT: %N.patt.loc14_20.1: @B.loc14.%pattern_type (%pattern_type.51d) = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc14_20.2 (constants.%N.patt.9f0)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc14_13.1: type = splice_block %.loc14_13.2 [concrete = type] { // CHECK:STDOUT: %.Self.loc14_10: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -293,15 +302,18 @@ class E(U:! type) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @B.loc6(%N.loc6_10.2: %A) { +// CHECK:STDOUT: %N.patt.loc6_10.2: %pattern_type.9ef = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc6_10.2 (constants.%N.patt.3a1)] // CHECK:STDOUT: %N.loc6_10.1: %A = symbolic_binding N, 0 [symbolic = %N.loc6_10.1 (constants.%N.37f)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @B.loc14(%T.loc14_10.2: type, %N.loc14_20.2: @B.loc14.%T.loc14_10.1 (%T)) { +// CHECK:STDOUT: %T.patt.loc14_10.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_10.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc14_10.1: type = symbolic_binding T, 0 [symbolic = %T.loc14_10.1 (constants.%T)] -// CHECK:STDOUT: %N.loc14_20.1: @B.loc14.%T.loc14_10.1 (%T) = symbolic_binding N, 1 [symbolic = %N.loc14_20.1 (constants.%N.bd9)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc14_10.1 [symbolic = %pattern_type (constants.%pattern_type.51d)] +// CHECK:STDOUT: %N.patt.loc14_20.2: @B.loc14.%pattern_type (%pattern_type.51d) = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc14_20.2 (constants.%N.patt.9f0)] +// CHECK:STDOUT: %N.loc14_20.1: @B.loc14.%T.loc14_10.1 (%T) = symbolic_binding N, 1 [symbolic = %N.loc14_20.1 (constants.%N.bd9)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -315,13 +327,16 @@ class E(U:! type) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @B.loc6(constants.%N.37f) { +// CHECK:STDOUT: %N.patt.loc6_10.2 => constants.%N.patt.3a1 // CHECK:STDOUT: %N.loc6_10.1 => constants.%N.37f // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @B.loc14(constants.%T, constants.%N.bd9) { +// CHECK:STDOUT: %T.patt.loc14_10.2 => constants.%T.patt // CHECK:STDOUT: %T.loc14_10.1 => constants.%T -// CHECK:STDOUT: %N.loc14_20.1 => constants.%N.bd9 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d +// CHECK:STDOUT: %N.patt.loc14_20.2 => constants.%N.patt.9f0 +// CHECK:STDOUT: %N.loc14_20.1 => constants.%N.bd9 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_mismatch_param_count.carbon @@ -333,10 +348,12 @@ class E(U:! type) {} // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %C.type.a601fe.1: type = generic_class_type @C.loc6 [concrete] // CHECK:STDOUT: %C.generic.4b4597.1: %C.type.a601fe.1 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.9ef: type = pattern_type %A [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.9ef = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %U: %A = symbolic_binding U, 1 [symbolic] // CHECK:STDOUT: %C.type.a601fe.2: type = generic_class_type @C.loc14 [concrete] // CHECK:STDOUT: %C.generic.4b4597.2: %C.type.a601fe.2 = struct_value () [concrete] @@ -359,7 +376,7 @@ class E(U:! type) {} // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl: type = class_decl @A [concrete = constants.%A] {} {} // CHECK:STDOUT: %C.decl.loc6: %C.type.a601fe.1 = class_decl @C.loc6 [concrete = constants.%C.generic.4b4597.1] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc6_10.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_10.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6_13.1: type = splice_block %.loc6_13.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -368,8 +385,8 @@ class E(U:! type) {} // CHECK:STDOUT: %T.loc6_10.2: type = symbolic_binding T, 0 [symbolic = %T.loc6_10.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl.loc14: %C.type.a601fe.2 = class_decl @C.loc14 [concrete = constants.%C.generic.4b4597.2] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %U.patt: %pattern_type.9ef = symbolic_binding_pattern U, 1 [concrete] +// CHECK:STDOUT: %T.patt.loc14_10.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_10.2 (constants.%T.patt)] +// CHECK:STDOUT: %U.patt.loc14_20.1: %pattern_type.9ef = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc14_20.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc14_13.1: type = splice_block %.loc14_13.2 [concrete = type] { // CHECK:STDOUT: %.Self.loc14_10: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -393,13 +410,16 @@ class E(U:! type) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C.loc6(%T.loc6_10.2: type) { +// CHECK:STDOUT: %T.patt.loc6_10.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_10.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc6_10.1: type = symbolic_binding T, 0 [symbolic = %T.loc6_10.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C.loc14(%T.loc14_10.2: type, %U.loc14_20.2: %A) { +// CHECK:STDOUT: %T.patt.loc14_10.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_10.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc14_10.1: type = symbolic_binding T, 0 [symbolic = %T.loc14_10.1 (constants.%T)] +// CHECK:STDOUT: %U.patt.loc14_20.2: %pattern_type.9ef = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc14_20.2 (constants.%U.patt)] // CHECK:STDOUT: %U.loc14_20.1: %A = symbolic_binding U, 1 [symbolic = %U.loc14_20.1 (constants.%U)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -414,11 +434,14 @@ class E(U:! type) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C.loc6(constants.%T) { +// CHECK:STDOUT: %T.patt.loc6_10.2 => constants.%T.patt // CHECK:STDOUT: %T.loc6_10.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C.loc14(constants.%T, constants.%U) { +// CHECK:STDOUT: %T.patt.loc14_10.2 => constants.%T.patt // CHECK:STDOUT: %T.loc14_10.1 => constants.%T +// CHECK:STDOUT: %U.patt.loc14_20.2 => constants.%U.patt // CHECK:STDOUT: %U.loc14_20.1 => constants.%U // CHECK:STDOUT: } // CHECK:STDOUT: @@ -431,10 +454,12 @@ class E(U:! type) {} // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.d47: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %D.type.ff75f2.1: type = generic_class_type @D.loc6 [concrete] // CHECK:STDOUT: %D.generic.7223e9.1: %D.type.ff75f2.1 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.9ef: type = pattern_type %A [concrete] +// CHECK:STDOUT: %T.patt.3a1: %pattern_type.9ef = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.37f: %A = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %D.type.ff75f2.2: type = generic_class_type @D.loc14 [concrete] // CHECK:STDOUT: %D.generic.7223e9.2: %D.type.ff75f2.2 = struct_value () [concrete] @@ -457,7 +482,7 @@ class E(U:! type) {} // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl: type = class_decl @A [concrete = constants.%A] {} {} // CHECK:STDOUT: %D.decl.loc6: %D.type.ff75f2.1 = class_decl @D.loc6 [concrete = constants.%D.generic.7223e9.1] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc6_10.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_10.2 (constants.%T.patt.d47)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6_13.1: type = splice_block %.loc6_13.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -466,7 +491,7 @@ class E(U:! type) {} // CHECK:STDOUT: %T.loc6_10.2: type = symbolic_binding T, 0 [symbolic = %T.loc6_10.1 (constants.%T.67d)] // CHECK:STDOUT: } // CHECK:STDOUT: %D.decl.loc14: %D.type.ff75f2.2 = class_decl @D.loc14 [concrete = constants.%D.generic.7223e9.2] { -// CHECK:STDOUT: %T.patt: %pattern_type.9ef = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc14_10.1: %pattern_type.9ef = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_10.2 (constants.%T.patt.3a1)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc14: type = splice_block %A.ref [concrete = constants.%A] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -485,12 +510,14 @@ class E(U:! type) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @D.loc6(%T.loc6_10.2: type) { +// CHECK:STDOUT: %T.patt.loc6_10.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_10.2 (constants.%T.patt.d47)] // CHECK:STDOUT: %T.loc6_10.1: type = symbolic_binding T, 0 [symbolic = %T.loc6_10.1 (constants.%T.67d)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @D.loc14(%T.loc14_10.2: %A) { +// CHECK:STDOUT: %T.patt.loc14_10.2: %pattern_type.9ef = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_10.2 (constants.%T.patt.3a1)] // CHECK:STDOUT: %T.loc14_10.1: %A = symbolic_binding T, 0 [symbolic = %T.loc14_10.1 (constants.%T.37f)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -505,10 +532,12 @@ class E(U:! type) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @D.loc6(constants.%T.67d) { +// CHECK:STDOUT: %T.patt.loc6_10.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc6_10.1 => constants.%T.67d // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @D.loc14(constants.%T.37f) { +// CHECK:STDOUT: %T.patt.loc14_10.2 => constants.%T.patt.3a1 // CHECK:STDOUT: %T.loc14_10.1 => constants.%T.37f // CHECK:STDOUT: } // CHECK:STDOUT: @@ -518,9 +547,11 @@ class E(U:! type) {} // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %E.type.0b1ef1.1: type = generic_class_type @E.loc4 [concrete] // CHECK:STDOUT: %E.generic.5469ef.1: %E.type.0b1ef1.1 = struct_value () [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %U: type = symbolic_binding U, 0 [symbolic] // CHECK:STDOUT: %E.type.0b1ef1.2: type = generic_class_type @E.loc12 [concrete] // CHECK:STDOUT: %E.generic.5469ef.2: %E.type.0b1ef1.2 = struct_value () [concrete] @@ -543,7 +574,7 @@ class E(U:! type) {} // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %E.decl.loc4: %E.type.0b1ef1.1 = class_decl @E.loc4 [concrete = constants.%E.generic.5469ef.1] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc4_10.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_10.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_13.1: type = splice_block %.loc4_13.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -552,7 +583,7 @@ class E(U:! type) {} // CHECK:STDOUT: %T.loc4_10.2: type = symbolic_binding T, 0 [symbolic = %T.loc4_10.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %E.decl.loc12: %E.type.0b1ef1.2 = class_decl @E.loc12 [concrete = constants.%E.generic.5469ef.2] { -// CHECK:STDOUT: %U.patt: %pattern_type = symbolic_binding_pattern U, 0 [concrete] +// CHECK:STDOUT: %U.patt.loc12_10.1: %pattern_type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc12_10.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc12_13.1: type = splice_block %.loc12_13.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -563,12 +594,14 @@ class E(U:! type) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @E.loc4(%T.loc4_10.2: type) { +// CHECK:STDOUT: %T.patt.loc4_10.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_10.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_10.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_10.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @E.loc12(%U.loc12_10.2: type) { +// CHECK:STDOUT: %U.patt.loc12_10.2: %pattern_type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc12_10.2 (constants.%U.patt)] // CHECK:STDOUT: %U.loc12_10.1: type = symbolic_binding U, 0 [symbolic = %U.loc12_10.1 (constants.%U)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -583,10 +616,12 @@ class E(U:! type) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @E.loc4(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_10.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_10.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @E.loc12(constants.%U) { +// CHECK:STDOUT: %U.patt.loc12_10.2 => constants.%U.patt // CHECK:STDOUT: %U.loc12_10.1 => constants.%U // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/generic/self.carbon b/toolchain/check/testdata/class/generic/self.carbon index 4b6e9607be80..03ce919fd695 100644 --- a/toolchain/check/testdata/class/generic/self.carbon +++ b/toolchain/check/testdata/class/generic/self.carbon @@ -30,6 +30,7 @@ class Class(T:! type) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Class.type: type = generic_class_type @Class [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -37,6 +38,8 @@ class Class(T:! type) { // CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T) [symbolic] // CHECK:STDOUT: %.030: Core.Form = init_form %Class [symbolic] // CHECK:STDOUT: %pattern_type.36e: type = pattern_type %Class [symbolic] +// CHECK:STDOUT: %return.param_patt: %pattern_type.36e = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt: %pattern_type.36e = return_slot_pattern %return.param_patt, %Class [symbolic] // CHECK:STDOUT: %Class.MakeSelf.type: type = fn_type @Class.MakeSelf, @Class(%T) [symbolic] // CHECK:STDOUT: %Class.MakeSelf: %Class.MakeSelf.type = struct_value () [symbolic] // CHECK:STDOUT: %Class.MakeClass.type: type = fn_type @Class.MakeClass, @Class(%T) [symbolic] @@ -48,7 +51,11 @@ class Class(T:! type) { // CHECK:STDOUT: %require_complete: = require_complete_type %Class [symbolic] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %Class.val: %Class = struct_value () [symbolic] +// CHECK:STDOUT: %c.patt: %pattern_type.36e = ref_binding_pattern c [symbolic] +// CHECK:STDOUT: %c.var_patt: %pattern_type.36e = var_pattern %c.patt [symbolic] // CHECK:STDOUT: %Class.MakeSelf.specific_fn: = specific_function %Class.MakeSelf, @Class.MakeSelf(%T) [symbolic] +// CHECK:STDOUT: %s.patt: %pattern_type.36e = ref_binding_pattern s [symbolic] +// CHECK:STDOUT: %s.var_patt: %pattern_type.36e = var_pattern %s.patt [symbolic] // CHECK:STDOUT: %Class.MakeClass.specific_fn: = specific_function %Class.MakeClass, @Class.MakeClass(%T) [symbolic] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %Class, @Destroy [symbolic] @@ -75,7 +82,7 @@ class Class(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: %Class.type = class_decl @Class [concrete = constants.%Class.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc15_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc15_17.1: type = splice_block %.loc15_17.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -86,6 +93,7 @@ class Class(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%T.loc15_14.2: type) { +// CHECK:STDOUT: %T.patt.loc15_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_14.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc15_14.1: type = symbolic_binding T, 0 [symbolic = %T.loc15_14.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -98,8 +106,8 @@ class Class(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %Class.MakeSelf.decl: @Class.%Class.MakeSelf.type (%Class.MakeSelf.type) = fn_decl @Class.MakeSelf [symbolic = @Class.%Class.MakeSelf (constants.%Class.MakeSelf)] { -// CHECK:STDOUT: %return.param_patt: @Class.MakeSelf.%pattern_type (%pattern_type.36e) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @Class.MakeSelf.%pattern_type (%pattern_type.36e) = return_slot_pattern %return.param_patt, %Self.ref [concrete] +// CHECK:STDOUT: %return.param_patt.loc18_20.1: @Class.MakeSelf.%pattern_type (%pattern_type.36e) = out_param_pattern [symbolic = %return.param_patt.loc18_20.2 (constants.%return.param_patt)] +// CHECK:STDOUT: %return.patt.loc18_17.1: @Class.MakeSelf.%pattern_type (%pattern_type.36e) = return_slot_pattern %return.param_patt.loc18_20.1, %Self.ref [symbolic = %return.patt.loc18_17.2 (constants.%return.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc18_20.2: type = specific_constant constants.%Class, @Class(constants.%T) [symbolic = %Class (constants.%Class)] // CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc18_20.2 [symbolic = %Class (constants.%Class)] @@ -108,8 +116,8 @@ class Class(T:! type) { // CHECK:STDOUT: %return: ref @Class.MakeSelf.%Class (%Class) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Class.MakeClass.decl: @Class.%Class.MakeClass.type (%Class.MakeClass.type) = fn_decl @Class.MakeClass [symbolic = @Class.%Class.MakeClass (constants.%Class.MakeClass)] { -// CHECK:STDOUT: %return.param_patt: @Class.MakeClass.%pattern_type (%pattern_type.36e) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @Class.MakeClass.%pattern_type (%pattern_type.36e) = return_slot_pattern %return.param_patt, %Class.loc19_28.2 [concrete] +// CHECK:STDOUT: %return.param_patt.loc19_28.1: @Class.MakeClass.%pattern_type (%pattern_type.36e) = out_param_pattern [symbolic = %return.param_patt.loc19_28.2 (constants.%return.param_patt)] +// CHECK:STDOUT: %return.patt.loc19_18.1: @Class.MakeClass.%pattern_type (%pattern_type.36e) = return_slot_pattern %return.param_patt.loc19_28.1, %Class.loc19_28.2 [symbolic = %return.patt.loc19_18.2 (constants.%return.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Class.ref: %Class.type = name_ref Class, file.%Class.decl [concrete = constants.%Class.generic] // CHECK:STDOUT: %T.ref: type = name_ref T, @Class.%T.loc15_14.2 [symbolic = %T (constants.%T)] @@ -137,6 +145,8 @@ class Class(T:! type) { // CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T) [symbolic = %Class (constants.%Class)] // CHECK:STDOUT: %.loc18_20.1: Core.Form = init_form %Class [symbolic = %.loc18_20.1 (constants.%.030)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Class [symbolic = %pattern_type (constants.%pattern_type.36e)] +// CHECK:STDOUT: %return.param_patt.loc18_20.2: @Class.MakeSelf.%pattern_type (%pattern_type.36e) = out_param_pattern [symbolic = %return.param_patt.loc18_20.2 (constants.%return.param_patt)] +// CHECK:STDOUT: %return.patt.loc18_17.2: @Class.MakeSelf.%pattern_type (%pattern_type.36e) = return_slot_pattern %return.param_patt.loc18_20.2, %Class [symbolic = %return.patt.loc18_17.2 (constants.%return.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %Class [symbolic = %require_complete (constants.%require_complete)] @@ -156,6 +166,8 @@ class Class(T:! type) { // CHECK:STDOUT: %Class.loc19_28.1: type = class_type @Class, @Class(%T) [symbolic = %Class.loc19_28.1 (constants.%Class)] // CHECK:STDOUT: %.loc19_28.1: Core.Form = init_form %Class.loc19_28.1 [symbolic = %.loc19_28.1 (constants.%.030)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Class.loc19_28.1 [symbolic = %pattern_type (constants.%pattern_type.36e)] +// CHECK:STDOUT: %return.param_patt.loc19_28.2: @Class.MakeClass.%pattern_type (%pattern_type.36e) = out_param_pattern [symbolic = %return.param_patt.loc19_28.2 (constants.%return.param_patt)] +// CHECK:STDOUT: %return.patt.loc19_18.2: @Class.MakeClass.%pattern_type (%pattern_type.36e) = return_slot_pattern %return.param_patt.loc19_28.2, %Class.loc19_28.1 [symbolic = %return.patt.loc19_18.2 (constants.%return.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %Class.loc19_28.1 [symbolic = %require_complete (constants.%require_complete)] @@ -176,26 +188,30 @@ class Class(T:! type) { // CHECK:STDOUT: %Class.loc21_26.2: type = class_type @Class, @Class(%T) [symbolic = %Class.loc21_26.2 (constants.%Class)] // CHECK:STDOUT: %require_complete: = require_complete_type %Class.loc21_26.2 [symbolic = %require_complete (constants.%require_complete)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Class.loc21_26.2 [symbolic = %pattern_type (constants.%pattern_type.36e)] +// CHECK:STDOUT: %c.patt.loc21_17.2: @Class.F.%pattern_type (%pattern_type.36e) = ref_binding_pattern c [symbolic = %c.patt.loc21_17.2 (constants.%c.patt)] +// CHECK:STDOUT: %c.var_patt.loc21_5.2: @Class.F.%pattern_type (%pattern_type.36e) = var_pattern %c.patt.loc21_17.2 [symbolic = %c.var_patt.loc21_5.2 (constants.%c.var_patt)] // CHECK:STDOUT: %Class.MakeSelf.type: type = fn_type @Class.MakeSelf, @Class(%T) [symbolic = %Class.MakeSelf.type (constants.%Class.MakeSelf.type)] // CHECK:STDOUT: %Class.MakeSelf: @Class.F.%Class.MakeSelf.type (%Class.MakeSelf.type) = struct_value () [symbolic = %Class.MakeSelf (constants.%Class.MakeSelf)] // CHECK:STDOUT: %Class.MakeSelf.specific_fn.loc21_30.2: = specific_function %Class.MakeSelf, @Class.MakeSelf(%T) [symbolic = %Class.MakeSelf.specific_fn.loc21_30.2 (constants.%Class.MakeSelf.specific_fn)] +// CHECK:STDOUT: %s.patt.loc22_17.2: @Class.F.%pattern_type (%pattern_type.36e) = ref_binding_pattern s [symbolic = %s.patt.loc22_17.2 (constants.%s.patt)] +// CHECK:STDOUT: %s.var_patt.loc22_5.2: @Class.F.%pattern_type (%pattern_type.36e) = var_pattern %s.patt.loc22_17.2 [symbolic = %s.var_patt.loc22_5.2 (constants.%s.var_patt)] // CHECK:STDOUT: %Class.MakeClass.type: type = fn_type @Class.MakeClass, @Class(%T) [symbolic = %Class.MakeClass.type (constants.%Class.MakeClass.type)] // CHECK:STDOUT: %Class.MakeClass: @Class.F.%Class.MakeClass.type (%Class.MakeClass.type) = struct_value () [symbolic = %Class.MakeClass (constants.%Class.MakeClass)] // CHECK:STDOUT: %Class.MakeClass.specific_fn.loc22_26.2: = specific_function %Class.MakeClass, @Class.MakeClass(%T) [symbolic = %Class.MakeClass.specific_fn.loc22_26.2 (constants.%Class.MakeClass.specific_fn)] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %Class.loc21_26.2, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness)] -// CHECK:STDOUT: %Destroy.facet.loc22_5.2: %Destroy.type = facet_value %Class.loc21_26.2, (%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.loc22_5.2 (constants.%Destroy.facet.86d)] -// CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.loc22_5.2) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.297)] -// CHECK:STDOUT: %.loc22_5.3: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Destroy.facet.loc22_5.2 [symbolic = %.loc22_5.3 (constants.%.73f)] -// CHECK:STDOUT: %impl.elem0.loc22_5.2: @Class.F.%.loc22_5.3 (%.73f) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc22_5.2 (constants.%impl.elem0)] -// CHECK:STDOUT: %specific_impl_fn.loc22_5.2: = specific_impl_function %impl.elem0.loc22_5.2, @Destroy.WithSelf.Op(%Destroy.facet.loc22_5.2) [symbolic = %specific_impl_fn.loc22_5.2 (constants.%specific_impl_fn)] +// CHECK:STDOUT: %Destroy.facet.loc22_5.3: %Destroy.type = facet_value %Class.loc21_26.2, (%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.loc22_5.3 (constants.%Destroy.facet.86d)] +// CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.loc22_5.3) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.297)] +// CHECK:STDOUT: %.loc22_5.4: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Destroy.facet.loc22_5.3 [symbolic = %.loc22_5.4 (constants.%.73f)] +// CHECK:STDOUT: %impl.elem0.loc22_5.2: @Class.F.%.loc22_5.4 (%.73f) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc22_5.2 (constants.%impl.elem0)] +// CHECK:STDOUT: %specific_impl_fn.loc22_5.2: = specific_impl_function %impl.elem0.loc22_5.2, @Destroy.WithSelf.Op(%Destroy.facet.loc22_5.3) [symbolic = %specific_impl_fn.loc22_5.2 (constants.%specific_impl_fn)] // CHECK:STDOUT: // CHECK:STDOUT: fn() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: @Class.F.%pattern_type (%pattern_type.36e) = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: @Class.F.%pattern_type (%pattern_type.36e) = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt.loc21_17.1: @Class.F.%pattern_type (%pattern_type.36e) = ref_binding_pattern c [symbolic = %c.patt.loc21_17.2 (constants.%c.patt)] +// CHECK:STDOUT: %c.var_patt.loc21_5.1: @Class.F.%pattern_type (%pattern_type.36e) = var_pattern %c.patt.loc21_17.1 [symbolic = %c.var_patt.loc21_5.2 (constants.%c.var_patt)] // CHECK:STDOUT: } -// CHECK:STDOUT: %c.var: ref @Class.F.%Class.loc21_26.2 (%Class) = var %c.var_patt +// CHECK:STDOUT: %c.var: ref @Class.F.%Class.loc21_26.2 (%Class) = var %c.var_patt.loc21_5.1 // CHECK:STDOUT: %.loc21_30: @Class.F.%Class.MakeSelf.type (%Class.MakeSelf.type) = specific_constant @Class.%Class.MakeSelf.decl, @Class(constants.%T) [symbolic = %Class.MakeSelf (constants.%Class.MakeSelf)] // CHECK:STDOUT: %MakeSelf.ref: @Class.F.%Class.MakeSelf.type (%Class.MakeSelf.type) = name_ref MakeSelf, %.loc21_30 [symbolic = %Class.MakeSelf (constants.%Class.MakeSelf)] // CHECK:STDOUT: %Class.MakeSelf.specific_fn.loc21_30.1: = specific_function %MakeSelf.ref, @Class.MakeSelf(constants.%T) [symbolic = %Class.MakeSelf.specific_fn.loc21_30.2 (constants.%Class.MakeSelf.specific_fn)] @@ -209,10 +225,10 @@ class Class(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %c: ref @Class.F.%Class.loc21_26.2 (%Class) = ref_binding c, %c.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %s.patt: @Class.F.%pattern_type (%pattern_type.36e) = ref_binding_pattern s [concrete] -// CHECK:STDOUT: %s.var_patt: @Class.F.%pattern_type (%pattern_type.36e) = var_pattern %s.patt [concrete] +// CHECK:STDOUT: %s.patt.loc22_17.1: @Class.F.%pattern_type (%pattern_type.36e) = ref_binding_pattern s [symbolic = %s.patt.loc22_17.2 (constants.%s.patt)] +// CHECK:STDOUT: %s.var_patt.loc22_5.1: @Class.F.%pattern_type (%pattern_type.36e) = var_pattern %s.patt.loc22_17.1 [symbolic = %s.var_patt.loc22_5.2 (constants.%s.var_patt)] // CHECK:STDOUT: } -// CHECK:STDOUT: %s.var: ref @Class.F.%Class.loc21_26.2 (%Class) = var %s.var_patt +// CHECK:STDOUT: %s.var: ref @Class.F.%Class.loc21_26.2 (%Class) = var %s.var_patt.loc22_5.1 // CHECK:STDOUT: %.loc22_26: @Class.F.%Class.MakeClass.type (%Class.MakeClass.type) = specific_constant @Class.%Class.MakeClass.decl, @Class(constants.%T) [symbolic = %Class.MakeClass (constants.%Class.MakeClass)] // CHECK:STDOUT: %MakeClass.ref: @Class.F.%Class.MakeClass.type (%Class.MakeClass.type) = name_ref MakeClass, %.loc22_26 [symbolic = %Class.MakeClass (constants.%Class.MakeClass)] // CHECK:STDOUT: %Class.MakeClass.specific_fn.loc22_26.1: = specific_function %MakeClass.ref, @Class.MakeClass(constants.%T) [symbolic = %Class.MakeClass.specific_fn.loc22_26.2 (constants.%Class.MakeClass.specific_fn)] @@ -224,17 +240,21 @@ class Class(T:! type) { // CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc22_19.2 [symbolic = %Class.loc21_26.2 (constants.%Class)] // CHECK:STDOUT: } // CHECK:STDOUT: %s: ref @Class.F.%Class.loc21_26.2 (%Class) = ref_binding s, %s.var -// CHECK:STDOUT: %impl.elem0.loc22_5.1: @Class.F.%.loc22_5.3 (%.73f) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc22_5.2 (constants.%impl.elem0)] +// CHECK:STDOUT: %impl.elem0.loc22_5.1: @Class.F.%.loc22_5.4 (%.73f) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc22_5.2 (constants.%impl.elem0)] // CHECK:STDOUT: %bound_method.loc22_5.1: = bound_method %s.var, %impl.elem0.loc22_5.1 -// CHECK:STDOUT: %Destroy.facet.loc22_5.1: %Destroy.type = facet_value constants.%Class, (constants.%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.loc22_5.2 (constants.%Destroy.facet.86d)] -// CHECK:STDOUT: %.loc22_5.2: %Destroy.type = converted constants.%Class, %Destroy.facet.loc22_5.1 [symbolic = %Destroy.facet.loc22_5.2 (constants.%Destroy.facet.86d)] +// CHECK:STDOUT: %Destroy.facet.loc22_5.1: %Destroy.type = facet_value constants.%Class, (constants.%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.loc22_5.3 (constants.%Destroy.facet.86d)] +// CHECK:STDOUT: %.loc22_5.2: %Destroy.type = converted constants.%Class, %Destroy.facet.loc22_5.1 [symbolic = %Destroy.facet.loc22_5.3 (constants.%Destroy.facet.86d)] +// CHECK:STDOUT: %Destroy.facet.loc22_5.2: %Destroy.type = facet_value constants.%Class, (constants.%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.loc22_5.3 (constants.%Destroy.facet.86d)] +// CHECK:STDOUT: %.loc22_5.3: %Destroy.type = converted constants.%Class, %Destroy.facet.loc22_5.2 [symbolic = %Destroy.facet.loc22_5.3 (constants.%Destroy.facet.86d)] // CHECK:STDOUT: %specific_impl_fn.loc22_5.1: = specific_impl_function %impl.elem0.loc22_5.1, @Destroy.WithSelf.Op(constants.%Destroy.facet.86d) [symbolic = %specific_impl_fn.loc22_5.2 (constants.%specific_impl_fn)] // CHECK:STDOUT: %bound_method.loc22_5.2: = bound_method %s.var, %specific_impl_fn.loc22_5.1 // CHECK:STDOUT: %Destroy.WithSelf.Op.call.loc22: init %empty_tuple.type = call %bound_method.loc22_5.2(%s.var) -// CHECK:STDOUT: %impl.elem0.loc21: @Class.F.%.loc22_5.3 (%.73f) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc22_5.2 (constants.%impl.elem0)] +// CHECK:STDOUT: %impl.elem0.loc21: @Class.F.%.loc22_5.4 (%.73f) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc22_5.2 (constants.%impl.elem0)] // CHECK:STDOUT: %bound_method.loc21_5.1: = bound_method %c.var, %impl.elem0.loc21 -// CHECK:STDOUT: %Destroy.facet.loc21: %Destroy.type = facet_value constants.%Class, (constants.%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.loc22_5.2 (constants.%Destroy.facet.86d)] -// CHECK:STDOUT: %.loc21_5.2: %Destroy.type = converted constants.%Class, %Destroy.facet.loc21 [symbolic = %Destroy.facet.loc22_5.2 (constants.%Destroy.facet.86d)] +// CHECK:STDOUT: %Destroy.facet.loc21_5.1: %Destroy.type = facet_value constants.%Class, (constants.%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.loc22_5.3 (constants.%Destroy.facet.86d)] +// CHECK:STDOUT: %.loc21_5.2: %Destroy.type = converted constants.%Class, %Destroy.facet.loc21_5.1 [symbolic = %Destroy.facet.loc22_5.3 (constants.%Destroy.facet.86d)] +// CHECK:STDOUT: %Destroy.facet.loc21_5.2: %Destroy.type = facet_value constants.%Class, (constants.%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.loc22_5.3 (constants.%Destroy.facet.86d)] +// CHECK:STDOUT: %.loc21_5.3: %Destroy.type = converted constants.%Class, %Destroy.facet.loc21_5.2 [symbolic = %Destroy.facet.loc22_5.3 (constants.%Destroy.facet.86d)] // CHECK:STDOUT: %specific_impl_fn.loc21: = specific_impl_function %impl.elem0.loc21, @Destroy.WithSelf.Op(constants.%Destroy.facet.86d) [symbolic = %specific_impl_fn.loc22_5.2 (constants.%specific_impl_fn)] // CHECK:STDOUT: %bound_method.loc21_5.2: = bound_method %c.var, %specific_impl_fn.loc21 // CHECK:STDOUT: %Destroy.WithSelf.Op.call.loc21: init %empty_tuple.type = call %bound_method.loc21_5.2(%c.var) @@ -245,6 +265,7 @@ class Class(T:! type) { // CHECK:STDOUT: fn @Destroy.Op(%self.param: ref %empty_struct_type) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%T) { +// CHECK:STDOUT: %T.patt.loc15_14.2 => constants.%T.patt // CHECK:STDOUT: %T.loc15_14.1 => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -261,6 +282,8 @@ class Class(T:! type) { // CHECK:STDOUT: %Class => constants.%Class // CHECK:STDOUT: %.loc18_20.1 => constants.%.030 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.36e +// CHECK:STDOUT: %return.param_patt.loc18_20.2 => constants.%return.param_patt +// CHECK:STDOUT: %return.patt.loc18_17.2 => constants.%return.patt // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete @@ -272,6 +295,8 @@ class Class(T:! type) { // CHECK:STDOUT: %Class.loc19_28.1 => constants.%Class // CHECK:STDOUT: %.loc19_28.1 => constants.%.030 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.36e +// CHECK:STDOUT: %return.param_patt.loc19_28.2 => constants.%return.param_patt +// CHECK:STDOUT: %return.patt.loc19_18.2 => constants.%return.patt // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete diff --git a/toolchain/check/testdata/class/generic/stringify.carbon b/toolchain/check/testdata/class/generic/stringify.carbon index 9e6bb48b5c08..0f995796c6b1 100644 --- a/toolchain/check/testdata/class/generic/stringify.carbon +++ b/toolchain/check/testdata/class/generic/stringify.carbon @@ -95,6 +95,8 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: %EmptyParams.generic: %EmptyParams.type = struct_value () [concrete] // CHECK:STDOUT: %EmptyParams: type = class_type @EmptyParams [concrete] // CHECK:STDOUT: %pattern_type.c07: type = pattern_type %NoParams [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.c07 = ref_binding_pattern v [concrete] +// CHECK:STDOUT: %v.var_patt: %pattern_type.c07 = var_pattern %v.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.150: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] @@ -105,6 +107,8 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %NoParams, (%DefaultOrUnformed.impl_witness.1d3) [concrete] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function %T.as.DefaultOrUnformed.impl.Op.c14, @T.as.DefaultOrUnformed.impl.Op(%NoParams) [concrete] // CHECK:STDOUT: %pattern_type.c83: type = pattern_type %EmptyParams [concrete] +// CHECK:STDOUT: %w.patt: %pattern_type.c83 = ref_binding_pattern w [concrete] +// CHECK:STDOUT: %w.var_patt: %pattern_type.c83 = var_pattern %w.patt [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] // CHECK:STDOUT: } @@ -134,15 +138,15 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: %NoParams.decl: type = class_decl @NoParams [concrete = constants.%NoParams] {} {} // CHECK:STDOUT: %EmptyParams.decl: %EmptyParams.type = class_decl @EmptyParams [concrete = constants.%EmptyParams.generic] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %pattern_type.c07 = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: %pattern_type.c07 = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.c07 = ref_binding_pattern v [concrete = constants.%v.patt] +// CHECK:STDOUT: %v.var_patt: %pattern_type.c07 = var_pattern %v.patt [concrete = constants.%v.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %NoParams = var %v.var_patt [concrete] // CHECK:STDOUT: %NoParams.ref: type = name_ref NoParams, %NoParams.decl [concrete = constants.%NoParams] // CHECK:STDOUT: %v: ref %NoParams = ref_binding v, %v.var [concrete = %v.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %w.patt: %pattern_type.c83 = ref_binding_pattern w [concrete] -// CHECK:STDOUT: %w.var_patt: %pattern_type.c83 = var_pattern %w.patt [concrete] +// CHECK:STDOUT: %w.patt: %pattern_type.c83 = ref_binding_pattern w [concrete = constants.%w.patt] +// CHECK:STDOUT: %w.var_patt: %pattern_type.c83 = var_pattern %w.patt [concrete = constants.%w.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %w.var: ref %EmptyParams = var %w.var_patt [concrete] // CHECK:STDOUT: %.loc15: type = splice_block %EmptyParams [concrete = constants.%EmptyParams] { @@ -190,10 +194,12 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.d47: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Outer.type: type = generic_class_type @Outer [concrete] // CHECK:STDOUT: %Outer.generic: %Outer.type = struct_value () [concrete] // CHECK:STDOUT: %Outer.dee: type = class_type @Outer, @Outer(%T.67d) [symbolic] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %U: type = symbolic_binding U, 1 [symbolic] // CHECK:STDOUT: %Inner.type.8f7: type = generic_class_type @Inner, @Outer(%T.67d) [symbolic] // CHECK:STDOUT: %Inner.generic.b3a: %Inner.type.8f7 = struct_value () [symbolic] @@ -206,6 +212,8 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: %Inner.type.626: type = generic_class_type @Inner, @Outer(%ptr.c28) [concrete] // CHECK:STDOUT: %Inner.generic.93c: %Inner.type.626 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.e03: type = pattern_type %Outer.2d6 [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.e03 = ref_binding_pattern v [concrete] +// CHECK:STDOUT: %v.var_patt: %pattern_type.e03 = var_pattern %v.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.150: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.53a: %T.as.DefaultOrUnformed.impl.Op.type.150 = struct_value () [symbolic] @@ -222,6 +230,8 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: %ptr.e4c: type = ptr_type %struct_type.a [concrete] // CHECK:STDOUT: %Inner.61f: type = class_type @Inner, @Inner(%ptr.c28, %ptr.e4c) [concrete] // CHECK:STDOUT: %pattern_type.85f: type = pattern_type %Inner.61f [concrete] +// CHECK:STDOUT: %w.patt: %pattern_type.85f = ref_binding_pattern w [concrete] +// CHECK:STDOUT: %w.var_patt: %pattern_type.85f = var_pattern %w.patt [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] // CHECK:STDOUT: } @@ -250,7 +260,7 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Outer.decl: %Outer.type = class_decl @Outer [concrete = constants.%Outer.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc4_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt.d47)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_17.1: type = splice_block %.loc4_17.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -259,8 +269,8 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: %T.loc4_14.2: type = symbolic_binding T, 0 [symbolic = %T.loc4_14.1 (constants.%T.67d)] // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %pattern_type.e03 = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: %pattern_type.e03 = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.e03 = ref_binding_pattern v [concrete = constants.%v.patt] +// CHECK:STDOUT: %v.var_patt: %pattern_type.e03 = var_pattern %v.patt [concrete = constants.%v.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %Outer.2d6 = var %v.var_patt [concrete] // CHECK:STDOUT: %.loc9_17: type = splice_block %Outer.loc9 [concrete = constants.%Outer.2d6] { @@ -272,8 +282,8 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: } // CHECK:STDOUT: %v: ref %Outer.2d6 = ref_binding v, %v.var [concrete = %v.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %w.patt: %pattern_type.85f = ref_binding_pattern w [concrete] -// CHECK:STDOUT: %w.var_patt: %pattern_type.85f = var_pattern %w.patt [concrete] +// CHECK:STDOUT: %w.patt: %pattern_type.85f = ref_binding_pattern w [concrete = constants.%w.patt] +// CHECK:STDOUT: %w.var_patt: %pattern_type.85f = var_pattern %w.patt [concrete = constants.%w.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %w.var: ref %Inner.61f = var %w.var_patt [concrete] // CHECK:STDOUT: %.loc19_35: type = splice_block %Inner [concrete = constants.%Inner.61f] { @@ -293,6 +303,7 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Outer(%T.loc4_14.2: type) { +// CHECK:STDOUT: %T.patt.loc4_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt.d47)] // CHECK:STDOUT: %T.loc4_14.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_14.1 (constants.%T.67d)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -301,7 +312,7 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %Inner.decl: @Outer.%Inner.type (%Inner.type.8f7) = class_decl @Inner [symbolic = @Outer.%Inner.generic (constants.%Inner.generic.b3a)] { -// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [concrete] +// CHECK:STDOUT: %U.patt.loc5_16.1: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc5_16.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc5_19.1: type = splice_block %.loc5_19.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -319,6 +330,7 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Inner(@Outer.%T.loc4_14.2: type, %U.loc5_16.2: type) { +// CHECK:STDOUT: %U.patt.loc5_16.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc5_16.2 (constants.%U.patt)] // CHECK:STDOUT: %U.loc5_16.1: type = symbolic_binding U, 1 [symbolic = %U.loc5_16.1 (constants.%U)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -349,14 +361,17 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Outer(constants.%T.67d) { +// CHECK:STDOUT: %T.patt.loc4_14.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc4_14.1 => constants.%T.67d // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Inner(constants.%T.67d, constants.%U) { +// CHECK:STDOUT: %U.patt.loc5_16.2 => constants.%U.patt // CHECK:STDOUT: %U.loc5_16.1 => constants.%U // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Outer(constants.%ptr.c28) { +// CHECK:STDOUT: %T.patt.loc4_14.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc4_14.1 => constants.%ptr.c28 // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -365,6 +380,7 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Inner(constants.%ptr.c28, constants.%ptr.e4c) { +// CHECK:STDOUT: %U.patt.loc5_16.2 => constants.%U.patt // CHECK:STDOUT: %U.loc5_16.1 => constants.%ptr.e4c // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -381,6 +397,7 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %N.patt.38a: %pattern_type.6b6 = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %N.37f: %i32 = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] @@ -406,6 +423,8 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: %int_123.2bf: %i32 = int_value 123 [concrete] // CHECK:STDOUT: %C.ece: type = class_type @C, @C(%int_123.2bf) [concrete] // CHECK:STDOUT: %pattern_type.b05: type = pattern_type %C.ece [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.b05 = ref_binding_pattern v [concrete] +// CHECK:STDOUT: %v.var_patt: %pattern_type.b05 = var_pattern %v.patt [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -430,7 +449,7 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %N.patt: %pattern_type.6b6 = symbolic_binding_pattern N, 0 [concrete] +// CHECK:STDOUT: %N.patt.loc4_10.1: %pattern_type.6b6 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_10.2 (constants.%N.patt.38a)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4: type = splice_block %i32 [concrete = constants.%i32] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -439,8 +458,8 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: %N.loc4_10.2: %i32 = symbolic_binding N, 0 [symbolic = %N.loc4_10.1 (constants.%N.37f)] // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %pattern_type.b05 = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: %pattern_type.b05 = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.b05 = ref_binding_pattern v [concrete = constants.%v.patt] +// CHECK:STDOUT: %v.var_patt: %pattern_type.b05 = var_pattern %v.patt [concrete = constants.%v.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %C.ece = var %v.var_patt [concrete] // CHECK:STDOUT: %.loc13_13.1: type = splice_block %C [concrete = constants.%C.ece] { @@ -459,6 +478,7 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%N.loc4_10.2: %i32) { +// CHECK:STDOUT: %N.patt.loc4_10.2: %pattern_type.6b6 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_10.2 (constants.%N.patt.38a)] // CHECK:STDOUT: %N.loc4_10.1: %i32 = symbolic_binding N, 0 [symbolic = %N.loc4_10.1 (constants.%N.37f)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -481,10 +501,12 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%N.37f) { +// CHECK:STDOUT: %N.patt.loc4_10.2 => constants.%N.patt.38a // CHECK:STDOUT: %N.loc4_10.1 => constants.%N.37f // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%int_123.2bf) { +// CHECK:STDOUT: %N.patt.loc4_10.2 => constants.%N.patt.38a // CHECK:STDOUT: %N.loc4_10.1 => constants.%int_123.2bf // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -504,6 +526,7 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.d8d: type = pattern_type %D [concrete] +// CHECK:STDOUT: %F.patt: %pattern_type.d8d = symbolic_binding_pattern F, 0 [symbolic] // CHECK:STDOUT: %F: %D = symbolic_binding F, 0 [symbolic] // CHECK:STDOUT: %E.type: type = generic_class_type @E [concrete] // CHECK:STDOUT: %E.generic: %E.type = struct_value () [concrete] @@ -537,6 +560,8 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: %.24e: ref %D = temporary invalid, %D.val.b1d [concrete] // CHECK:STDOUT: %E.7b7: type = class_type @E, @E(%D.val.b1d) [concrete] // CHECK:STDOUT: %pattern_type.e71: type = pattern_type %E.7b7 [concrete] +// CHECK:STDOUT: %g.patt: %pattern_type.e71 = ref_binding_pattern g [concrete] +// CHECK:STDOUT: %g.var_patt: %pattern_type.e71 = var_pattern %g.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %int_4.0c1: Core.IntLiteral = int_value 4 [concrete] @@ -576,7 +601,7 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %D.decl: type = class_decl @D [concrete = constants.%D] {} {} // CHECK:STDOUT: %E.decl: %E.type = class_decl @E [concrete = constants.%E.generic] { -// CHECK:STDOUT: %F.patt: %pattern_type.d8d = symbolic_binding_pattern F, 0 [concrete] +// CHECK:STDOUT: %F.patt.loc9_10.1: %pattern_type.d8d = symbolic_binding_pattern F, 0 [symbolic = %F.patt.loc9_10.2 (constants.%F.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc9: type = splice_block %D.ref [concrete = constants.%D] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -585,8 +610,8 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: %F.loc9_10.2: %D = symbolic_binding F, 0 [symbolic = %F.loc9_10.1 (constants.%F)] // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %g.patt: %pattern_type.e71 = ref_binding_pattern g [concrete] -// CHECK:STDOUT: %g.var_patt: %pattern_type.e71 = var_pattern %g.patt [concrete] +// CHECK:STDOUT: %g.patt: %pattern_type.e71 = ref_binding_pattern g [concrete = constants.%g.patt] +// CHECK:STDOUT: %g.var_patt: %pattern_type.e71 = var_pattern %g.patt [concrete = constants.%g.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %g.var: ref %E.7b7 = var %g.var_patt [concrete] // CHECK:STDOUT: %.loc18_26.1: type = splice_block %E [concrete = constants.%E.7b7] { @@ -633,6 +658,7 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @E(%F.loc9_10.2: %D) { +// CHECK:STDOUT: %F.patt.loc9_10.2: %pattern_type.d8d = symbolic_binding_pattern F, 0 [symbolic = %F.patt.loc9_10.2 (constants.%F.patt)] // CHECK:STDOUT: %F.loc9_10.1: %D = symbolic_binding F, 0 [symbolic = %F.loc9_10.1 (constants.%F)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -685,16 +711,19 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @E(constants.%F) { +// CHECK:STDOUT: %F.patt.loc9_10.2 => constants.%F.patt // CHECK:STDOUT: %F.loc9_10.1 => constants.%F // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @E(constants.%D.val.b1d) { +// CHECK:STDOUT: %F.patt.loc9_10.2 => constants.%F.patt // CHECK:STDOUT: %F.loc9_10.1 => constants.%D.val.b1d // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @E(constants.%D.val.fbf) { +// CHECK:STDOUT: %F.patt.loc9_10.2 => constants.%F.patt // CHECK:STDOUT: %F.loc9_10.1 => constants.%D.val.fbf // CHECK:STDOUT: // CHECK:STDOUT: !definition: diff --git a/toolchain/check/testdata/class/import.carbon b/toolchain/check/testdata/class/import.carbon index 2eccb195d7d1..1ac61c3bd91d 100644 --- a/toolchain/check/testdata/class/import.carbon +++ b/toolchain/check/testdata/class/import.carbon @@ -70,8 +70,12 @@ fn Run() { // CHECK:STDOUT: %complete_type.0c6: = complete_type_witness %struct_type.x [concrete] // CHECK:STDOUT: %ForwardDeclared: type = class_type @ForwardDeclared [concrete] // CHECK:STDOUT: %pattern_type.bdf: type = pattern_type %ForwardDeclared [concrete] +// CHECK:STDOUT: %self.param_patt.46c: %pattern_type.bdf = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.34d: %pattern_type.bdf = at_binding_pattern self, %self.param_patt.46c [concrete] // CHECK:STDOUT: %ForwardDeclared.F.type: type = fn_type @ForwardDeclared.F [concrete] // CHECK:STDOUT: %ForwardDeclared.F: %ForwardDeclared.F.type = struct_value () [concrete] +// CHECK:STDOUT: %self.param_patt.a42: %pattern_type.bdf = ref_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.d30: %pattern_type.bdf = at_binding_pattern self, %self.param_patt.a42 [concrete] // CHECK:STDOUT: %ForwardDeclared.G.type: type = fn_type @ForwardDeclared.G [concrete] // CHECK:STDOUT: %ForwardDeclared.G: %ForwardDeclared.G.type = struct_value () [concrete] // CHECK:STDOUT: %Incomplete: type = class_type @Incomplete [concrete] @@ -122,16 +126,16 @@ fn Run() { // CHECK:STDOUT: // CHECK:STDOUT: class @ForwardDeclared { // CHECK:STDOUT: %ForwardDeclared.F.decl: %ForwardDeclared.F.type = fn_decl @ForwardDeclared.F [concrete = constants.%ForwardDeclared.F] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.bdf = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.bdf = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.bdf = value_param_pattern [concrete = constants.%self.param_patt.46c] +// CHECK:STDOUT: %self.patt: %pattern_type.bdf = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.34d] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %ForwardDeclared = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%ForwardDeclared [concrete = constants.%ForwardDeclared] // CHECK:STDOUT: %self: %ForwardDeclared = value_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %ForwardDeclared.G.decl: %ForwardDeclared.G.type = fn_decl @ForwardDeclared.G [concrete = constants.%ForwardDeclared.G] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.bdf = ref_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.bdf = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.bdf = ref_param_pattern [concrete = constants.%self.param_patt.a42] +// CHECK:STDOUT: %self.patt: %pattern_type.bdf = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.d30] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %ForwardDeclared = ref_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%ForwardDeclared [concrete = constants.%ForwardDeclared] @@ -162,6 +166,8 @@ fn Run() { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.47a: type = pattern_type %Empty [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.47a = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.47a = var_pattern %a.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %Empty.val: %Empty = struct_value () [concrete] // CHECK:STDOUT: %Field: type = class_type @Field [concrete] @@ -171,6 +177,8 @@ fn Run() { // CHECK:STDOUT: %struct_type.x.a15: type = struct_type {.x: %i32} [concrete] // CHECK:STDOUT: %complete_type.0c6: = complete_type_witness %struct_type.x.a15 [concrete] // CHECK:STDOUT: %pattern_type.f17: type = pattern_type %Field [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.f17 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.f17 = var_pattern %b.patt [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %struct_type.x.c96: type = struct_type {.x: Core.IntLiteral} [concrete] // CHECK:STDOUT: %struct: %struct_type.x.c96 = struct_value (%int_1.5b8) [concrete] @@ -198,6 +206,8 @@ fn Run() { // CHECK:STDOUT: %int_2.295: %i32 = int_value 2 [concrete] // CHECK:STDOUT: %ForwardDeclared.08bd4c.1: type = class_type @ForwardDeclared.1 [concrete] // CHECK:STDOUT: %pattern_type.bdf: type = pattern_type %ForwardDeclared.08bd4c.1 [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.bdf = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.bdf = var_pattern %c.patt [concrete] // CHECK:STDOUT: %ForwardDeclared.val: %ForwardDeclared.08bd4c.1 = struct_value () [concrete] // CHECK:STDOUT: %ForwardDeclared.F.type: type = fn_type @ForwardDeclared.F [concrete] // CHECK:STDOUT: %ForwardDeclared.F: %ForwardDeclared.F.type = struct_value () [concrete] @@ -205,6 +215,8 @@ fn Run() { // CHECK:STDOUT: %ForwardDeclared.G: %ForwardDeclared.G.type = struct_value () [concrete] // CHECK:STDOUT: %ptr.11e: type = ptr_type %ForwardDeclared.08bd4c.1 [concrete] // CHECK:STDOUT: %pattern_type.8cd: type = pattern_type %ptr.11e [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.8cd = ref_binding_pattern d [concrete] +// CHECK:STDOUT: %d.var_patt: %pattern_type.8cd = var_pattern %d.patt [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.type.ff5: type = fn_type @ptr.as.Copy.impl.Op, @ptr.as.Copy.impl(%T.67d) [symbolic] @@ -219,6 +231,8 @@ fn Run() { // CHECK:STDOUT: %Incomplete: type = class_type @Incomplete [concrete] // CHECK:STDOUT: %ptr.06d: type = ptr_type %Incomplete [concrete] // CHECK:STDOUT: %pattern_type.bae: type = pattern_type %ptr.06d [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type.bae = ref_binding_pattern e [concrete] +// CHECK:STDOUT: %e.var_patt: %pattern_type.bae = var_pattern %e.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.150: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.53a: %T.as.DefaultOrUnformed.impl.Op.type.150 = struct_value () [symbolic] @@ -331,8 +345,8 @@ fn Run() { // CHECK:STDOUT: fn @Run() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.47a = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.47a = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.47a = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.47a = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %Empty = var %a.var_patt // CHECK:STDOUT: %.loc7_26.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] @@ -342,8 +356,8 @@ fn Run() { // CHECK:STDOUT: %Empty.ref: type = name_ref Empty, imports.%Main.Empty [concrete = constants.%Empty] // CHECK:STDOUT: %a: ref %Empty = ref_binding a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.f17 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.f17 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.f17 = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type.f17 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %Field = var %b.var_patt // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -373,8 +387,8 @@ fn Run() { // CHECK:STDOUT: %.loc10_7: init %i32 = converted %int_2, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc10 [concrete = constants.%int_2.295] // CHECK:STDOUT: assign %.loc10_4, %.loc10_7 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.bdf = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.bdf = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.bdf = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type.bdf = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %ForwardDeclared.08bd4c.1 = var %c.var_patt // CHECK:STDOUT: %.loc12_29.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] @@ -393,8 +407,8 @@ fn Run() { // CHECK:STDOUT: %ForwardDeclared.G.bound: = bound_method %c.ref.loc14, %G.ref // CHECK:STDOUT: %ForwardDeclared.G.call: init %empty_tuple.type = call %ForwardDeclared.G.bound(%c.ref.loc14) // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.8cd = ref_binding_pattern d [concrete] -// CHECK:STDOUT: %d.var_patt: %pattern_type.8cd = var_pattern %d.patt [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.8cd = ref_binding_pattern d [concrete = constants.%d.patt] +// CHECK:STDOUT: %d.var_patt: %pattern_type.8cd = var_pattern %d.patt [concrete = constants.%d.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %ptr.11e = var %d.var_patt // CHECK:STDOUT: %c.ref.loc16: ref %ForwardDeclared.08bd4c.1 = name_ref c, %c @@ -411,8 +425,8 @@ fn Run() { // CHECK:STDOUT: } // CHECK:STDOUT: %d: ref %ptr.11e = ref_binding d, %d.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %e.patt: %pattern_type.bae = ref_binding_pattern e [concrete] -// CHECK:STDOUT: %e.var_patt: %pattern_type.bae = var_pattern %e.patt [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type.bae = ref_binding_pattern e [concrete = constants.%e.patt] +// CHECK:STDOUT: %e.var_patt: %pattern_type.bae = var_pattern %e.patt [concrete = constants.%e.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %e.var: ref %ptr.06d = var %e.var_patt // CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%ptr.06d, (constants.%DefaultOrUnformed.impl_witness.3a6) [concrete = constants.%DefaultOrUnformed.facet] diff --git a/toolchain/check/testdata/class/import_indirect.carbon b/toolchain/check/testdata/class/import_indirect.carbon index 0f6ccdbe2cd6..4780d54e0f81 100644 --- a/toolchain/check/testdata/class/import_indirect.carbon +++ b/toolchain/check/testdata/class/import_indirect.carbon @@ -143,10 +143,14 @@ var ptr: E* = &value; // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %b_val.patt: %pattern_type.98b = ref_binding_pattern b_val [concrete] +// CHECK:STDOUT: %b_val.var_patt: %pattern_type.98b = var_pattern %b_val.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %ptr.6b6: type = ptr_type %C [concrete] // CHECK:STDOUT: %pattern_type.fcb: type = pattern_type %ptr.6b6 [concrete] +// CHECK:STDOUT: %b_ptr.patt: %pattern_type.fcb = ref_binding_pattern b_ptr [concrete] +// CHECK:STDOUT: %b_ptr.var_patt: %pattern_type.fcb = var_pattern %b_ptr.patt [concrete] // CHECK:STDOUT: %addr: %ptr.6b6 = addr_of file.%b_val.var [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] @@ -190,15 +194,15 @@ var ptr: E* = &value; // CHECK:STDOUT: %C.ref.loc6: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %D: type = alias_binding D, %C.ref.loc6 [concrete = constants.%C] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b_val.patt: %pattern_type.98b = ref_binding_pattern b_val [concrete] -// CHECK:STDOUT: %b_val.var_patt: %pattern_type.98b = var_pattern %b_val.patt [concrete] +// CHECK:STDOUT: %b_val.patt: %pattern_type.98b = ref_binding_pattern b_val [concrete = constants.%b_val.patt] +// CHECK:STDOUT: %b_val.var_patt: %pattern_type.98b = var_pattern %b_val.patt [concrete = constants.%b_val.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b_val.var: ref %C = var %b_val.var_patt [concrete] // CHECK:STDOUT: %C.ref.loc8: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %b_val: ref %C = ref_binding b_val, %b_val.var [concrete = %b_val.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b_ptr.patt: %pattern_type.fcb = ref_binding_pattern b_ptr [concrete] -// CHECK:STDOUT: %b_ptr.var_patt: %pattern_type.fcb = var_pattern %b_ptr.patt [concrete] +// CHECK:STDOUT: %b_ptr.patt: %pattern_type.fcb = ref_binding_pattern b_ptr [concrete = constants.%b_ptr.patt] +// CHECK:STDOUT: %b_ptr.var_patt: %pattern_type.fcb = var_pattern %b_ptr.patt [concrete = constants.%b_ptr.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b_ptr.var: ref %ptr.6b6 = var %b_ptr.var_patt [concrete] // CHECK:STDOUT: %.loc9: type = splice_block %ptr [concrete = constants.%ptr.6b6] { @@ -239,10 +243,14 @@ var ptr: E* = &value; // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c_val.patt: %pattern_type.98b = ref_binding_pattern c_val [concrete] +// CHECK:STDOUT: %c_val.var_patt: %pattern_type.98b = var_pattern %c_val.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %ptr.6b6: type = ptr_type %C [concrete] // CHECK:STDOUT: %pattern_type.fcb: type = pattern_type %ptr.6b6 [concrete] +// CHECK:STDOUT: %c_ptr.patt: %pattern_type.fcb = ref_binding_pattern c_ptr [concrete] +// CHECK:STDOUT: %c_ptr.var_patt: %pattern_type.fcb = var_pattern %c_ptr.patt [concrete] // CHECK:STDOUT: %addr: %ptr.6b6 = addr_of file.%c_val.var [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] @@ -286,15 +294,15 @@ var ptr: E* = &value; // CHECK:STDOUT: %C.ref.loc6: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %E: type = alias_binding E, %C.ref.loc6 [concrete = constants.%C] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c_val.patt: %pattern_type.98b = ref_binding_pattern c_val [concrete] -// CHECK:STDOUT: %c_val.var_patt: %pattern_type.98b = var_pattern %c_val.patt [concrete] +// CHECK:STDOUT: %c_val.patt: %pattern_type.98b = ref_binding_pattern c_val [concrete = constants.%c_val.patt] +// CHECK:STDOUT: %c_val.var_patt: %pattern_type.98b = var_pattern %c_val.patt [concrete = constants.%c_val.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c_val.var: ref %C = var %c_val.var_patt [concrete] // CHECK:STDOUT: %C.ref.loc8: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %c_val: ref %C = ref_binding c_val, %c_val.var [concrete = %c_val.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c_ptr.patt: %pattern_type.fcb = ref_binding_pattern c_ptr [concrete] -// CHECK:STDOUT: %c_ptr.var_patt: %pattern_type.fcb = var_pattern %c_ptr.patt [concrete] +// CHECK:STDOUT: %c_ptr.patt: %pattern_type.fcb = ref_binding_pattern c_ptr [concrete = constants.%c_ptr.patt] +// CHECK:STDOUT: %c_ptr.var_patt: %pattern_type.fcb = var_pattern %c_ptr.patt [concrete = constants.%c_ptr.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c_ptr.var: ref %ptr.6b6 = var %c_ptr.var_patt [concrete] // CHECK:STDOUT: %.loc9: type = splice_block %ptr [concrete = constants.%ptr.6b6] { @@ -335,10 +343,14 @@ var ptr: E* = &value; // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %value.patt: %pattern_type.98b = ref_binding_pattern value [concrete] +// CHECK:STDOUT: %value.var_patt: %pattern_type.98b = var_pattern %value.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %ptr.6b6: type = ptr_type %C [concrete] // CHECK:STDOUT: %pattern_type.fcb: type = pattern_type %ptr.6b6 [concrete] +// CHECK:STDOUT: %ptr.patt: %pattern_type.fcb = ref_binding_pattern ptr [concrete] +// CHECK:STDOUT: %ptr.var_patt: %pattern_type.fcb = var_pattern %ptr.patt [concrete] // CHECK:STDOUT: %addr: %ptr.6b6 = addr_of file.%value.var [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] @@ -385,15 +397,15 @@ var ptr: E* = &value; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %value.patt: %pattern_type.98b = ref_binding_pattern value [concrete] -// CHECK:STDOUT: %value.var_patt: %pattern_type.98b = var_pattern %value.patt [concrete] +// CHECK:STDOUT: %value.patt: %pattern_type.98b = ref_binding_pattern value [concrete = constants.%value.patt] +// CHECK:STDOUT: %value.var_patt: %pattern_type.98b = var_pattern %value.patt [concrete = constants.%value.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %value.var: ref %C = var %value.var_patt [concrete] // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %value: ref %C = ref_binding value, %value.var [concrete = %value.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %ptr.patt: %pattern_type.fcb = ref_binding_pattern ptr [concrete] -// CHECK:STDOUT: %ptr.var_patt: %pattern_type.fcb = var_pattern %ptr.patt [concrete] +// CHECK:STDOUT: %ptr.patt: %pattern_type.fcb = ref_binding_pattern ptr [concrete = constants.%ptr.patt] +// CHECK:STDOUT: %ptr.var_patt: %pattern_type.fcb = var_pattern %ptr.patt [concrete = constants.%ptr.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %ptr.var: ref %ptr.6b6 = var %ptr.var_patt [concrete] // CHECK:STDOUT: %.loc8: type = splice_block %ptr.loc8_11 [concrete = constants.%ptr.6b6] { @@ -434,10 +446,14 @@ var ptr: E* = &value; // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %value.patt: %pattern_type.98b = ref_binding_pattern value [concrete] +// CHECK:STDOUT: %value.var_patt: %pattern_type.98b = var_pattern %value.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %ptr.6b6: type = ptr_type %C [concrete] // CHECK:STDOUT: %pattern_type.fcb: type = pattern_type %ptr.6b6 [concrete] +// CHECK:STDOUT: %ptr.patt: %pattern_type.fcb = ref_binding_pattern ptr [concrete] +// CHECK:STDOUT: %ptr.var_patt: %pattern_type.fcb = var_pattern %ptr.patt [concrete] // CHECK:STDOUT: %addr: %ptr.6b6 = addr_of file.%value.var [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] @@ -484,15 +500,15 @@ var ptr: E* = &value; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %value.patt: %pattern_type.98b = ref_binding_pattern value [concrete] -// CHECK:STDOUT: %value.var_patt: %pattern_type.98b = var_pattern %value.patt [concrete] +// CHECK:STDOUT: %value.patt: %pattern_type.98b = ref_binding_pattern value [concrete = constants.%value.patt] +// CHECK:STDOUT: %value.var_patt: %pattern_type.98b = var_pattern %value.patt [concrete = constants.%value.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %value.var: ref %C = var %value.var_patt [concrete] // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %value: ref %C = ref_binding value, %value.var [concrete = %value.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %ptr.patt: %pattern_type.fcb = ref_binding_pattern ptr [concrete] -// CHECK:STDOUT: %ptr.var_patt: %pattern_type.fcb = var_pattern %ptr.patt [concrete] +// CHECK:STDOUT: %ptr.patt: %pattern_type.fcb = ref_binding_pattern ptr [concrete = constants.%ptr.patt] +// CHECK:STDOUT: %ptr.var_patt: %pattern_type.fcb = var_pattern %ptr.patt [concrete = constants.%ptr.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %ptr.var: ref %ptr.6b6 = var %ptr.var_patt [concrete] // CHECK:STDOUT: %.loc8: type = splice_block %ptr.loc8_11 [concrete = constants.%ptr.6b6] { @@ -533,10 +549,14 @@ var ptr: E* = &value; // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %value.patt: %pattern_type.98b = ref_binding_pattern value [concrete] +// CHECK:STDOUT: %value.var_patt: %pattern_type.98b = var_pattern %value.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %ptr.6b6: type = ptr_type %C [concrete] // CHECK:STDOUT: %pattern_type.fcb: type = pattern_type %ptr.6b6 [concrete] +// CHECK:STDOUT: %ptr.patt: %pattern_type.fcb = ref_binding_pattern ptr [concrete] +// CHECK:STDOUT: %ptr.var_patt: %pattern_type.fcb = var_pattern %ptr.patt [concrete] // CHECK:STDOUT: %addr: %ptr.6b6 = addr_of file.%value.var [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] @@ -587,15 +607,15 @@ var ptr: E* = &value; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %value.patt: %pattern_type.98b = ref_binding_pattern value [concrete] -// CHECK:STDOUT: %value.var_patt: %pattern_type.98b = var_pattern %value.patt [concrete] +// CHECK:STDOUT: %value.patt: %pattern_type.98b = ref_binding_pattern value [concrete = constants.%value.patt] +// CHECK:STDOUT: %value.var_patt: %pattern_type.98b = var_pattern %value.patt [concrete = constants.%value.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %value.var: ref %C = var %value.var_patt [concrete] // CHECK:STDOUT: %D.ref: type = name_ref D, imports.%Main.D [concrete = constants.%C] // CHECK:STDOUT: %value: ref %C = ref_binding value, %value.var [concrete = %value.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %ptr.patt: %pattern_type.fcb = ref_binding_pattern ptr [concrete] -// CHECK:STDOUT: %ptr.var_patt: %pattern_type.fcb = var_pattern %ptr.patt [concrete] +// CHECK:STDOUT: %ptr.patt: %pattern_type.fcb = ref_binding_pattern ptr [concrete = constants.%ptr.patt] +// CHECK:STDOUT: %ptr.var_patt: %pattern_type.fcb = var_pattern %ptr.patt [concrete = constants.%ptr.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %ptr.var: ref %ptr.6b6 = var %ptr.var_patt [concrete] // CHECK:STDOUT: %.loc8: type = splice_block %ptr.loc8_11 [concrete = constants.%ptr.6b6] { @@ -636,10 +656,14 @@ var ptr: E* = &value; // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %value.patt: %pattern_type.98b = ref_binding_pattern value [concrete] +// CHECK:STDOUT: %value.var_patt: %pattern_type.98b = var_pattern %value.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %ptr.6b6: type = ptr_type %C [concrete] // CHECK:STDOUT: %pattern_type.fcb: type = pattern_type %ptr.6b6 [concrete] +// CHECK:STDOUT: %ptr.patt: %pattern_type.fcb = ref_binding_pattern ptr [concrete] +// CHECK:STDOUT: %ptr.var_patt: %pattern_type.fcb = var_pattern %ptr.patt [concrete] // CHECK:STDOUT: %addr: %ptr.6b6 = addr_of file.%value.var [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] @@ -690,15 +714,15 @@ var ptr: E* = &value; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %value.patt: %pattern_type.98b = ref_binding_pattern value [concrete] -// CHECK:STDOUT: %value.var_patt: %pattern_type.98b = var_pattern %value.patt [concrete] +// CHECK:STDOUT: %value.patt: %pattern_type.98b = ref_binding_pattern value [concrete = constants.%value.patt] +// CHECK:STDOUT: %value.var_patt: %pattern_type.98b = var_pattern %value.patt [concrete = constants.%value.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %value.var: ref %C = var %value.var_patt [concrete] // CHECK:STDOUT: %D.ref: type = name_ref D, imports.%Main.D [concrete = constants.%C] // CHECK:STDOUT: %value: ref %C = ref_binding value, %value.var [concrete = %value.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %ptr.patt: %pattern_type.fcb = ref_binding_pattern ptr [concrete] -// CHECK:STDOUT: %ptr.var_patt: %pattern_type.fcb = var_pattern %ptr.patt [concrete] +// CHECK:STDOUT: %ptr.patt: %pattern_type.fcb = ref_binding_pattern ptr [concrete = constants.%ptr.patt] +// CHECK:STDOUT: %ptr.var_patt: %pattern_type.fcb = var_pattern %ptr.patt [concrete = constants.%ptr.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %ptr.var: ref %ptr.6b6 = var %ptr.var_patt [concrete] // CHECK:STDOUT: %.loc8: type = splice_block %ptr.loc8_11 [concrete = constants.%ptr.6b6] { diff --git a/toolchain/check/testdata/class/import_member_cycle.carbon b/toolchain/check/testdata/class/import_member_cycle.carbon index e49df495357e..ab5e95553763 100644 --- a/toolchain/check/testdata/class/import_member_cycle.carbon +++ b/toolchain/check/testdata/class/import_member_cycle.carbon @@ -78,6 +78,8 @@ fn Run() { // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %ptr} [concrete] // CHECK:STDOUT: %complete_type.de4: = complete_type_witness %struct_type.a [concrete] // CHECK:STDOUT: %pattern_type.c3e: type = pattern_type %ptr [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.c3e = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.c3e = var_pattern %a.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.150: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] @@ -131,8 +133,8 @@ fn Run() { // CHECK:STDOUT: fn @Run() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.c3e = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.c3e = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.c3e = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.c3e = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %ptr = var %a.var_patt // CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%ptr, (constants.%DefaultOrUnformed.impl_witness.961) [concrete = constants.%DefaultOrUnformed.facet] diff --git a/toolchain/check/testdata/class/import_struct_cycle.carbon b/toolchain/check/testdata/class/import_struct_cycle.carbon index 2a99ec7e3139..174f34e409b4 100644 --- a/toolchain/check/testdata/class/import_struct_cycle.carbon +++ b/toolchain/check/testdata/class/import_struct_cycle.carbon @@ -42,6 +42,8 @@ fn Run() { // CHECK:STDOUT: %ptr: type = ptr_type %Cycle [concrete] // CHECK:STDOUT: %struct_type.b: type = struct_type {.b: %ptr} [concrete] // CHECK:STDOUT: %pattern_type.38c: type = pattern_type %struct_type.b [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.38c = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.38c = var_pattern %a.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.150: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] @@ -76,8 +78,8 @@ fn Run() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Cycle.decl.loc4: type = class_decl @Cycle [concrete = constants.%Cycle] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.38c = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.38c = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.38c = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.38c = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %struct_type.b = var %a.var_patt [concrete] // CHECK:STDOUT: %.loc6: type = splice_block %struct_type.b [concrete = constants.%struct_type.b] { @@ -123,6 +125,8 @@ fn Run() { // CHECK:STDOUT: %struct_type.c: type = struct_type {.c: %struct_type.b} [concrete] // CHECK:STDOUT: %complete_type.663: = complete_type_witness %struct_type.c [concrete] // CHECK:STDOUT: %pattern_type.38c: type = pattern_type %struct_type.b [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.38c = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.38c = var_pattern %a.patt [concrete] // CHECK:STDOUT: %.d98: ref %ptr.5cd = struct_access imports.%a.var, element0 [concrete] // CHECK:STDOUT: %Cycle.elem: type = unbound_element_type %Cycle, %struct_type.b [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -149,9 +153,7 @@ fn Run() { // CHECK:STDOUT: %Main.import_ref.281: = import_ref Main//a, loc11_1, loaded [concrete = constants.%complete_type.663] // CHECK:STDOUT: %Main.import_ref.3b0 = import_ref Main//a, inst{{[0-9A-F]+}} [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.697: %Cycle.elem = import_ref Main//a, loc10_8, loaded [concrete = %.ec0] -// CHECK:STDOUT: %a.patt: %pattern_type.38c = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.38c = var_pattern %a.patt [concrete] -// CHECK:STDOUT: %a.var: ref %struct_type.b = var %a.var_patt [concrete] +// CHECK:STDOUT: %a.var: ref %struct_type.b = var constants.%a.var_patt [concrete] // CHECK:STDOUT: %.ec0: %Cycle.elem = field_decl c, element0 [concrete] // CHECK:STDOUT: %Core.Copy: type = import_ref Core//prelude/parts/copy, Copy, loaded [concrete = constants.%Copy.type] // CHECK:STDOUT: %Core.import_ref.e5f: @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op.type (%ptr.as.Copy.impl.Op.type.ff5) = 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.ce9)] diff --git a/toolchain/check/testdata/class/indirect_import_member.carbon b/toolchain/check/testdata/class/indirect_import_member.carbon index bf6f77a376d8..a8f6d2f4d6dd 100644 --- a/toolchain/check/testdata/class/indirect_import_member.carbon +++ b/toolchain/check/testdata/class/indirect_import_member.carbon @@ -257,6 +257,8 @@ var x: () = D.C.F(); // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] @@ -278,8 +280,8 @@ var x: () = D.C.F(); // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %empty_tuple.type = var %x.var_patt [concrete] // CHECK:STDOUT: %.loc6_9.1: type = splice_block %.loc6_9.3 [concrete = constants.%empty_tuple.type] { @@ -314,6 +316,8 @@ var x: () = D.C.F(); // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] @@ -335,8 +339,8 @@ var x: () = D.C.F(); // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %empty_tuple.type = var %x.var_patt [concrete] // CHECK:STDOUT: %.loc6_9.1: type = splice_block %.loc6_9.3 [concrete = constants.%empty_tuple.type] { @@ -371,6 +375,8 @@ var x: () = D.C.F(); // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] @@ -392,8 +398,8 @@ var x: () = D.C.F(); // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %empty_tuple.type = var %x.var_patt [concrete] // CHECK:STDOUT: %.loc6_9.1: type = splice_block %.loc6_9.3 [concrete = constants.%empty_tuple.type] { @@ -428,6 +434,8 @@ var x: () = D.C.F(); // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete] // CHECK:STDOUT: %D: type = class_type @D [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] @@ -453,8 +461,8 @@ var x: () = D.C.F(); // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %empty_tuple.type = var %x.var_patt [concrete] // CHECK:STDOUT: %.loc6_9.1: type = splice_block %.loc6_9.3 [concrete = constants.%empty_tuple.type] { @@ -498,6 +506,8 @@ var x: () = D.C.F(); // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete] // CHECK:STDOUT: %D: type = class_type @D [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] @@ -523,8 +533,8 @@ var x: () = D.C.F(); // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %empty_tuple.type = var %x.var_patt [concrete] // CHECK:STDOUT: %.loc6_9.1: type = splice_block %.loc6_9.3 [concrete = constants.%empty_tuple.type] { diff --git a/toolchain/check/testdata/class/inheritance/base.carbon b/toolchain/check/testdata/class/inheritance/base.carbon index 93873e57b72d..190bb257eca3 100644 --- a/toolchain/check/testdata/class/inheritance/base.carbon +++ b/toolchain/check/testdata/class/inheritance/base.carbon @@ -68,6 +68,8 @@ class Derived { // CHECK:STDOUT: %complete_type.2d7: = complete_type_witness %struct_type.base.d.90a [concrete] // CHECK:STDOUT: %.2c5: Core.Form = init_form %Derived [concrete] // CHECK:STDOUT: %pattern_type.4fd: type = pattern_type %Derived [concrete] +// CHECK:STDOUT: %return.param_patt.0bc: %pattern_type.4fd = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e0c: %pattern_type.4fd = return_slot_pattern %return.param_patt.0bc, %Derived [concrete] // CHECK:STDOUT: %Make.type: type = fn_type @Make [concrete] // CHECK:STDOUT: %Make: %Make.type = struct_value () [concrete] // CHECK:STDOUT: %int_4.0c1: Core.IntLiteral = int_value 4 [concrete] @@ -99,11 +101,15 @@ class Derived { // CHECK:STDOUT: %bound_method.7ff: = bound_method %int_7.29f, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_7.690: %i32 = int_value 7 [concrete] // CHECK:STDOUT: %Derived.val: %Derived = struct_value (%Base.val, %int_7.690) [concrete] +// CHECK:STDOUT: %d.param_patt: %pattern_type.4fd = value_param_pattern [concrete] +// CHECK:STDOUT: %d.patt.ad5: %pattern_type.4fd = at_binding_pattern d, %d.param_patt [concrete] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.b59: %tuple.type.24b = tuple_value (%i32, %i32) [concrete] // CHECK:STDOUT: %tuple.type.e55: type = tuple_type (%i32, %i32) [concrete] // CHECK:STDOUT: %.c11: Core.Form = init_form %tuple.type.e55 [concrete] // CHECK:STDOUT: %pattern_type.394: type = pattern_type %tuple.type.e55 [concrete] +// CHECK:STDOUT: %return.param_patt.a90: %pattern_type.394 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.2ed: %pattern_type.394 = return_slot_pattern %return.param_patt.a90, %tuple.type.e55 [concrete] // CHECK:STDOUT: %Access.type: type = fn_type @Access [concrete] // CHECK:STDOUT: %Access: %Access.type = struct_value () [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -147,8 +153,8 @@ class Derived { // CHECK:STDOUT: %Base.decl: type = class_decl @Base [concrete = constants.%Base] {} {} // CHECK:STDOUT: %Derived.decl: type = class_decl @Derived [concrete = constants.%Derived] {} {} // CHECK:STDOUT: %Make.decl: %Make.type = fn_decl @Make [concrete = constants.%Make] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.4fd = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.4fd = return_slot_pattern %return.param_patt, %Derived.ref [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.4fd = out_param_pattern [concrete = constants.%return.param_patt.0bc] +// CHECK:STDOUT: %return.patt: %pattern_type.4fd = return_slot_pattern %return.param_patt, %Derived.ref [concrete = constants.%return.patt.e0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %Derived.ref: type = name_ref Derived, file.%Derived.decl [concrete = constants.%Derived] // CHECK:STDOUT: %.loc13: Core.Form = init_form %Derived.ref [concrete = constants.%.2c5] @@ -156,10 +162,10 @@ class Derived { // CHECK:STDOUT: %return: ref %Derived = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Access.decl: %Access.type = fn_decl @Access [concrete = constants.%Access] { -// CHECK:STDOUT: %d.param_patt: %pattern_type.4fd = value_param_pattern [concrete] -// CHECK:STDOUT: %d.patt: %pattern_type.4fd = at_binding_pattern d, %d.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.394 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.394 = return_slot_pattern %return.param_patt, %.loc17_35.2 [concrete] +// CHECK:STDOUT: %d.param_patt: %pattern_type.4fd = value_param_pattern [concrete = constants.%d.param_patt] +// CHECK:STDOUT: %d.patt: %pattern_type.4fd = at_binding_pattern d, %d.param_patt [concrete = constants.%d.patt.ad5] +// CHECK:STDOUT: %return.param_patt: %pattern_type.394 = out_param_pattern [concrete = constants.%return.param_patt.a90] +// CHECK:STDOUT: %return.patt: %pattern_type.394 = return_slot_pattern %return.param_patt, %.loc17_35.2 [concrete = constants.%return.patt.2ed] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc17_27: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %i32.loc17_32: type = type_literal constants.%i32 [concrete = constants.%i32] diff --git a/toolchain/check/testdata/class/inheritance/base_field.carbon b/toolchain/check/testdata/class/inheritance/base_field.carbon index 1789c48da6f1..55c00cdc6544 100644 --- a/toolchain/check/testdata/class/inheritance/base_field.carbon +++ b/toolchain/check/testdata/class/inheritance/base_field.carbon @@ -47,9 +47,13 @@ fn Access(p: Derived*) -> i32* { // CHECK:STDOUT: %complete_type.9b3: = complete_type_witness %struct_type.base.d.e.26c [concrete] // CHECK:STDOUT: %ptr.64c: type = ptr_type %Derived [concrete] // CHECK:STDOUT: %pattern_type.56c: type = pattern_type %ptr.64c [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.56c = value_param_pattern [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.56c = at_binding_pattern p, %p.param_patt [concrete] // CHECK:STDOUT: %ptr.d08: type = ptr_type %i32 [concrete] // CHECK:STDOUT: %.952: Core.Form = init_form %ptr.d08 [concrete] // CHECK:STDOUT: %pattern_type.f00: type = pattern_type %ptr.d08 [concrete] +// CHECK:STDOUT: %return.param_patt.7dd: %pattern_type.f00 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.dbe: %pattern_type.f00 = return_slot_pattern %return.param_patt.7dd, %ptr.d08 [concrete] // CHECK:STDOUT: %Access.type: type = fn_type @Access [concrete] // CHECK:STDOUT: %Access: %Access.type = struct_value () [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -89,10 +93,10 @@ fn Access(p: Derived*) -> i32* { // CHECK:STDOUT: %Base.decl: type = class_decl @Base [concrete = constants.%Base] {} {} // CHECK:STDOUT: %Derived.decl: type = class_decl @Derived [concrete = constants.%Derived] {} {} // CHECK:STDOUT: %Access.decl: %Access.type = fn_decl @Access [concrete = constants.%Access] { -// CHECK:STDOUT: %p.param_patt: %pattern_type.56c = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.56c = at_binding_pattern p, %p.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.f00 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.f00 = return_slot_pattern %return.param_patt, %ptr.loc28_30 [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.56c = value_param_pattern [concrete = constants.%p.param_patt] +// CHECK:STDOUT: %p.patt: %pattern_type.56c = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.f00 = out_param_pattern [concrete = constants.%return.param_patt.7dd] +// CHECK:STDOUT: %return.patt: %pattern_type.f00 = return_slot_pattern %return.param_patt, %ptr.loc28_30 [concrete = constants.%return.patt.dbe] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %ptr.loc28_30: type = ptr_type %i32 [concrete = constants.%ptr.d08] diff --git a/toolchain/check/testdata/class/inheritance/base_method.carbon b/toolchain/check/testdata/class/inheritance/base_method.carbon index 1b132e784f64..1b3c2b7d1de8 100644 --- a/toolchain/check/testdata/class/inheritance/base_method.carbon +++ b/toolchain/check/testdata/class/inheritance/base_method.carbon @@ -41,6 +41,8 @@ fn Call(p: Derived*) { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Base.elem: type = unbound_element_type %Base, %i32 [concrete] // CHECK:STDOUT: %pattern_type.912: type = pattern_type %Base [concrete] +// CHECK:STDOUT: %self.param_patt.21c: %pattern_type.912 = ref_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.a45: %pattern_type.912 = at_binding_pattern self, %self.param_patt.21c [concrete] // CHECK:STDOUT: %Base.F.type: type = fn_type @Base.F [concrete] // CHECK:STDOUT: %Base.F: %Base.F.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %i32} [concrete] @@ -68,6 +70,8 @@ fn Call(p: Derived*) { // CHECK:STDOUT: %complete_type.c02: = complete_type_witness %struct_type.base.cae [concrete] // CHECK:STDOUT: %ptr.64c: type = ptr_type %Derived [concrete] // CHECK:STDOUT: %pattern_type.56c: type = pattern_type %ptr.64c [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.56c = value_param_pattern [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.56c = at_binding_pattern p, %p.param_patt [concrete] // CHECK:STDOUT: %Call.type: type = fn_type @Call [concrete] // CHECK:STDOUT: %Call: %Call.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -95,8 +99,8 @@ fn Call(p: Derived*) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Base.decl: type = class_decl @Base [concrete = constants.%Base] {} {} // CHECK:STDOUT: %Base.F.decl: %Base.F.type = fn_decl @Base.F [concrete = constants.%Base.F] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.912 = ref_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.912 = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.912 = ref_param_pattern [concrete = constants.%self.param_patt.21c] +// CHECK:STDOUT: %self.patt: %pattern_type.912 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.a45] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param.loc21: ref %Base = ref_param call_param0 // CHECK:STDOUT: %Self.ref.loc21: type = name_ref Self, constants.%Base [concrete = constants.%Base] @@ -104,8 +108,8 @@ fn Call(p: Derived*) { // CHECK:STDOUT: } // CHECK:STDOUT: %Derived.decl: type = class_decl @Derived [concrete = constants.%Derived] {} {} // CHECK:STDOUT: %Call.decl: %Call.type = fn_decl @Call [concrete = constants.%Call] { -// CHECK:STDOUT: %p.param_patt: %pattern_type.56c = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.56c = at_binding_pattern p, %p.param_patt [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.56c = value_param_pattern [concrete = constants.%p.param_patt] +// CHECK:STDOUT: %p.patt: %pattern_type.56c = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %p.param: %ptr.64c = value_param call_param0 // CHECK:STDOUT: %.loc29: type = splice_block %ptr [concrete = constants.%ptr.64c] { @@ -119,8 +123,8 @@ fn Call(p: Derived*) { // CHECK:STDOUT: class @Base { // CHECK:STDOUT: %.loc16: %Base.elem = field_decl a, element0 [concrete] // CHECK:STDOUT: %Base.F.decl: %Base.F.type = fn_decl @Base.F [concrete = constants.%Base.F] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.912 = ref_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.912 = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.912 = ref_param_pattern [concrete = constants.%self.param_patt.21c] +// CHECK:STDOUT: %self.patt: %pattern_type.912 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.a45] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param.loc18: ref %Base = ref_param call_param0 // CHECK:STDOUT: %Self.ref.loc18: type = name_ref Self, constants.%Base [concrete = constants.%Base] diff --git a/toolchain/check/testdata/class/inheritance/base_method_qualified.carbon b/toolchain/check/testdata/class/inheritance/base_method_qualified.carbon index 1ca3dfbca3ea..cfa8ba008334 100644 --- a/toolchain/check/testdata/class/inheritance/base_method_qualified.carbon +++ b/toolchain/check/testdata/class/inheritance/base_method_qualified.carbon @@ -48,15 +48,21 @@ fn PassDerivedToBaseIndirect(p: Derived*) -> i32 { // CHECK:STDOUT: %Derived: type = class_type @Derived [concrete] // CHECK:STDOUT: %Base: type = class_type @Base [concrete] // CHECK:STDOUT: %pattern_type.912: type = pattern_type %Base [concrete] +// CHECK:STDOUT: %self.param_patt.0db: %pattern_type.912 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.97c: %pattern_type.912 = at_binding_pattern self, %self.param_patt.0db [concrete] // 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: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] // CHECK:STDOUT: %Base.F.type: type = fn_type @Base.F [concrete] // CHECK:STDOUT: %Base.F: %Base.F.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.746: type = pattern_type %Derived [concrete] +// CHECK:STDOUT: %self.param_patt.138: %pattern_type.746 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.727: %pattern_type.746 = at_binding_pattern self, %self.param_patt.138 [concrete] // CHECK:STDOUT: %Base.G.type: type = fn_type @Base.G [concrete] // CHECK:STDOUT: %Base.G: %Base.G.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] @@ -68,10 +74,14 @@ fn PassDerivedToBaseIndirect(p: Derived*) -> i32 { // CHECK:STDOUT: %Derived.G: %Derived.G.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.cae: type = struct_type {.base: %Base} [concrete] // CHECK:STDOUT: %complete_type.c02: = complete_type_witness %struct_type.base.cae [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.746 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.746 = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %Call.type: type = fn_type @Call [concrete] // CHECK:STDOUT: %Call: %Call.type = struct_value () [concrete] // CHECK:STDOUT: %ptr.64c: type = ptr_type %Derived [concrete] // CHECK:STDOUT: %pattern_type.56c: type = pattern_type %ptr.64c [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.56c = value_param_pattern [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.56c = at_binding_pattern p, %p.param_patt [concrete] // CHECK:STDOUT: %CallIndirect.type: type = fn_type @CallIndirect [concrete] // CHECK:STDOUT: %CallIndirect: %CallIndirect.type = struct_value () [concrete] // CHECK:STDOUT: %PassDerivedToBase.type: type = fn_type @PassDerivedToBase [concrete] @@ -104,10 +114,10 @@ fn PassDerivedToBaseIndirect(p: Derived*) -> i32 { // CHECK:STDOUT: %Base.decl: type = class_decl @Base [concrete = constants.%Base] {} {} // CHECK:STDOUT: %Derived.decl.loc22: type = class_decl @Derived [concrete = constants.%Derived] {} {} // CHECK:STDOUT: %Call.decl: %Call.type = fn_decl @Call [concrete = constants.%Call] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.746 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.746 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.746 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.746 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc29: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -118,10 +128,10 @@ fn PassDerivedToBaseIndirect(p: Derived*) -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallIndirect.decl: %CallIndirect.type = fn_decl @CallIndirect [concrete = constants.%CallIndirect] { -// CHECK:STDOUT: %p.param_patt: %pattern_type.56c = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.56c = at_binding_pattern p, %p.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.56c = value_param_pattern [concrete = constants.%p.param_patt] +// CHECK:STDOUT: %p.patt: %pattern_type.56c = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc33_33: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -135,10 +145,10 @@ fn PassDerivedToBaseIndirect(p: Derived*) -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %PassDerivedToBase.decl: %PassDerivedToBase.type = fn_decl @PassDerivedToBase [concrete = constants.%PassDerivedToBase] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.746 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.746 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.746 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.746 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc37: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -149,10 +159,10 @@ fn PassDerivedToBaseIndirect(p: Derived*) -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %PassDerivedToBaseIndirect.decl: %PassDerivedToBaseIndirect.type = fn_decl @PassDerivedToBaseIndirect [concrete = constants.%PassDerivedToBaseIndirect] { -// CHECK:STDOUT: %p.param_patt: %pattern_type.56c = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.56c = at_binding_pattern p, %p.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.56c = value_param_pattern [concrete = constants.%p.param_patt] +// CHECK:STDOUT: %p.patt: %pattern_type.56c = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc41_46: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -171,16 +181,16 @@ fn PassDerivedToBaseIndirect(p: Derived*) -> i32 { // CHECK:STDOUT: %Base.ref: type = name_ref Base, file.%Base.decl [concrete = constants.%Base] // CHECK:STDOUT: %.loc23: %Derived.elem = base_decl %Base.ref, element0 [concrete] // CHECK:STDOUT: %Derived.F.decl: %Derived.F.type = fn_decl @Derived.F [concrete = constants.%Derived.F] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.746 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.746 = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.746 = value_param_pattern [concrete = constants.%self.param_patt.138] +// CHECK:STDOUT: %self.patt: %pattern_type.746 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.727] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %Derived = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] // CHECK:STDOUT: %self: %Derived = value_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Derived.G.decl: %Derived.G.type = fn_decl @Derived.G [concrete = constants.%Derived.G] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.746 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.746 = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.746 = value_param_pattern [concrete = constants.%self.param_patt.138] +// CHECK:STDOUT: %self.patt: %pattern_type.746 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.727] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %Derived = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] @@ -200,10 +210,10 @@ fn PassDerivedToBaseIndirect(p: Derived*) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: class @Base { // CHECK:STDOUT: %Base.F.decl: %Base.F.type = fn_decl @Base.F [concrete = constants.%Base.F] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.912 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.912 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.912 = value_param_pattern [concrete = constants.%self.param_patt.0db] +// CHECK:STDOUT: %self.patt: %pattern_type.912 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.97c] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc18: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -214,10 +224,10 @@ fn PassDerivedToBaseIndirect(p: Derived*) -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Base.G.decl: %Base.G.type = fn_decl @Base.G [concrete = constants.%Base.G] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.746 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.746 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.746 = value_param_pattern [concrete = constants.%self.param_patt.138] +// CHECK:STDOUT: %self.patt: %pattern_type.746 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.727] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc19: Core.Form = init_form %i32 [concrete = constants.%.795] diff --git a/toolchain/check/testdata/class/inheritance/base_method_shadow.carbon b/toolchain/check/testdata/class/inheritance/base_method_shadow.carbon index 037ed4bfbe88..d41dd994a88d 100644 --- a/toolchain/check/testdata/class/inheritance/base_method_shadow.carbon +++ b/toolchain/check/testdata/class/inheritance/base_method_shadow.carbon @@ -42,6 +42,8 @@ fn Call(a: A*, b: B*, c: C*, d: D*) { // CHECK:STDOUT: constants { // CHECK:STDOUT: %A: type = class_type @A [concrete] // CHECK:STDOUT: %pattern_type.9ef: type = pattern_type %A [concrete] +// CHECK:STDOUT: %self.param_patt.8fb: %pattern_type.9ef = ref_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.680: %pattern_type.9ef = at_binding_pattern self, %self.param_patt.8fb [concrete] // CHECK:STDOUT: %A.F.type: type = fn_type @A.F [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %A.F: %A.F.type = struct_value () [concrete] @@ -50,6 +52,8 @@ fn Call(a: A*, b: B*, c: C*, d: D*) { // CHECK:STDOUT: %B: type = class_type @B [concrete] // CHECK:STDOUT: %B.elem: type = unbound_element_type %B, %A [concrete] // CHECK:STDOUT: %pattern_type.e39: type = pattern_type %B [concrete] +// CHECK:STDOUT: %self.param_patt.039: %pattern_type.e39 = ref_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.6c3: %pattern_type.e39 = at_binding_pattern self, %self.param_patt.039 [concrete] // CHECK:STDOUT: %B.F.type: type = fn_type @B.F [concrete] // CHECK:STDOUT: %B.F: %B.F.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.cb7: type = struct_type {.base: %A} [concrete] @@ -57,6 +61,8 @@ fn Call(a: A*, b: B*, c: C*, d: D*) { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %B [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %self.param_patt.99a: %pattern_type.98b = ref_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.807: %pattern_type.98b = at_binding_pattern self, %self.param_patt.99a [concrete] // CHECK:STDOUT: %C.F.type: type = fn_type @C.F [concrete] // CHECK:STDOUT: %C.F: %C.F.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.e05: type = struct_type {.base: %B} [concrete] @@ -65,12 +71,20 @@ fn Call(a: A*, b: B*, c: C*, d: D*) { // CHECK:STDOUT: %D.elem: type = unbound_element_type %D, %B [concrete] // CHECK:STDOUT: %ptr.d43: type = ptr_type %A [concrete] // CHECK:STDOUT: %pattern_type.8a5: type = pattern_type %ptr.d43 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.8a5 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.8a5 = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %ptr.432: type = ptr_type %B [concrete] // CHECK:STDOUT: %pattern_type.3c8: type = pattern_type %ptr.432 [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.3c8 = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.3c8 = at_binding_pattern b, %b.param_patt [concrete] // CHECK:STDOUT: %ptr.6b6: type = ptr_type %C [concrete] // CHECK:STDOUT: %pattern_type.fcb: type = pattern_type %ptr.6b6 [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.fcb = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.fcb = at_binding_pattern c, %c.param_patt [concrete] // CHECK:STDOUT: %ptr.d57: type = ptr_type %D [concrete] // CHECK:STDOUT: %pattern_type.02f: type = pattern_type %ptr.d57 [concrete] +// CHECK:STDOUT: %d.param_patt: %pattern_type.02f = value_param_pattern [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.02f = at_binding_pattern d, %d.param_patt [concrete] // CHECK:STDOUT: %Call.type: type = fn_type @Call [concrete] // CHECK:STDOUT: %Call: %Call.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -97,14 +111,14 @@ fn Call(a: A*, b: B*, c: C*, d: D*) { // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %D.decl: type = class_decl @D [concrete = constants.%D] {} {} // CHECK:STDOUT: %Call.decl: %Call.type = fn_decl @Call [concrete = constants.%Call] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.8a5 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.8a5 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.3c8 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.3c8 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %c.param_patt: %pattern_type.fcb = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.fcb = at_binding_pattern c, %c.param_patt [concrete] -// CHECK:STDOUT: %d.param_patt: %pattern_type.02f = value_param_pattern [concrete] -// CHECK:STDOUT: %d.patt: %pattern_type.02f = at_binding_pattern d, %d.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.8a5 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.8a5 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %b.param_patt: %pattern_type.3c8 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.3c8 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] +// CHECK:STDOUT: %c.param_patt: %pattern_type.fcb = value_param_pattern [concrete = constants.%c.param_patt] +// CHECK:STDOUT: %c.patt: %pattern_type.fcb = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt] +// CHECK:STDOUT: %d.param_patt: %pattern_type.02f = value_param_pattern [concrete = constants.%d.param_patt] +// CHECK:STDOUT: %d.patt: %pattern_type.02f = at_binding_pattern d, %d.param_patt [concrete = constants.%d.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %ptr.d43 = value_param call_param0 // CHECK:STDOUT: %.loc33_13: type = splice_block %ptr.loc33_13 [concrete = constants.%ptr.d43] { @@ -135,8 +149,8 @@ fn Call(a: A*, b: B*, c: C*, d: D*) { // CHECK:STDOUT: // CHECK:STDOUT: class @A { // CHECK:STDOUT: %A.F.decl: %A.F.type = fn_decl @A.F [concrete = constants.%A.F] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.9ef = ref_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.9ef = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.9ef = ref_param_pattern [concrete = constants.%self.param_patt.8fb] +// CHECK:STDOUT: %self.patt: %pattern_type.9ef = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.680] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %A = ref_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] @@ -154,8 +168,8 @@ fn Call(a: A*, b: B*, c: C*, d: D*) { // CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A] // CHECK:STDOUT: %.loc20: %B.elem = base_decl %A.ref, element0 [concrete] // CHECK:STDOUT: %B.F.decl: %B.F.type = fn_decl @B.F [concrete = constants.%B.F] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.e39 = ref_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.e39 = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.e39 = ref_param_pattern [concrete = constants.%self.param_patt.039] +// CHECK:STDOUT: %self.patt: %pattern_type.e39 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.6c3] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %B = ref_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] @@ -176,8 +190,8 @@ fn Call(a: A*, b: B*, c: C*, d: D*) { // CHECK:STDOUT: %B.ref: type = name_ref B, file.%B.decl [concrete = constants.%B] // CHECK:STDOUT: %.loc25: %C.elem = base_decl %B.ref, element0 [concrete] // CHECK:STDOUT: %C.F.decl: %C.F.type = fn_decl @C.F [concrete = constants.%C.F] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.98b = ref_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.98b = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.98b = ref_param_pattern [concrete = constants.%self.param_patt.99a] +// CHECK:STDOUT: %self.patt: %pattern_type.98b = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.807] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %C = ref_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] diff --git a/toolchain/check/testdata/class/inheritance/derived_to_base.carbon b/toolchain/check/testdata/class/inheritance/derived_to_base.carbon index 54034019b0a4..dabf560e756f 100644 --- a/toolchain/check/testdata/class/inheritance/derived_to_base.carbon +++ b/toolchain/check/testdata/class/inheritance/derived_to_base.carbon @@ -131,9 +131,13 @@ fn PassConstB(p: const B) { // CHECK:STDOUT: %struct_type.base.c.faf: type = struct_type {.base: %B, .c: %i32} [concrete] // CHECK:STDOUT: %ptr.6b6: type = ptr_type %C [concrete] // CHECK:STDOUT: %pattern_type.fcb: type = pattern_type %ptr.6b6 [concrete] +// CHECK:STDOUT: %p.param_patt.9b8: %pattern_type.fcb = value_param_pattern [concrete] +// CHECK:STDOUT: %p.patt.d88: %pattern_type.fcb = at_binding_pattern p, %p.param_patt.9b8 [concrete] // CHECK:STDOUT: %ptr.432: type = ptr_type %B [concrete] // CHECK:STDOUT: %.d69: Core.Form = init_form %ptr.432 [concrete] // CHECK:STDOUT: %pattern_type.3c8: type = pattern_type %ptr.432 [concrete] +// CHECK:STDOUT: %return.param_patt.9ba: %pattern_type.3c8 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e3e: %pattern_type.3c8 = return_slot_pattern %return.param_patt.9ba, %ptr.432 [concrete] // CHECK:STDOUT: %ConvertCToB.type: type = fn_type @ConvertCToB [concrete] // CHECK:STDOUT: %ConvertCToB: %ConvertCToB.type = struct_value () [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -147,9 +151,13 @@ fn PassConstB(p: const B) { // CHECK:STDOUT: %Copy.WithSelf.Op.type.78a: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.5e3) [concrete] // CHECK:STDOUT: %.fa1: type = fn_type_with_self_type %Copy.WithSelf.Op.type.78a, %Copy.facet.5e3 [concrete] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.specific_fn.bbe: = specific_function %ptr.as.Copy.impl.Op.70e, @ptr.as.Copy.impl.Op(%B) [concrete] +// CHECK:STDOUT: %p.param_patt.436: %pattern_type.3c8 = value_param_pattern [concrete] +// CHECK:STDOUT: %p.patt.c38: %pattern_type.3c8 = at_binding_pattern p, %p.param_patt.436 [concrete] // CHECK:STDOUT: %ptr.d43: type = ptr_type %A [concrete] // CHECK:STDOUT: %.1a4: Core.Form = init_form %ptr.d43 [concrete] // CHECK:STDOUT: %pattern_type.8a5: type = pattern_type %ptr.d43 [concrete] +// CHECK:STDOUT: %return.param_patt.7a0: %pattern_type.8a5 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.264: %pattern_type.8a5 = return_slot_pattern %return.param_patt.7a0, %ptr.d43 [concrete] // CHECK:STDOUT: %ConvertBToA.type: type = fn_type @ConvertBToA [concrete] // CHECK:STDOUT: %ConvertBToA: %ConvertBToA.type = struct_value () [concrete] // CHECK:STDOUT: %Copy.impl_witness.d19: = impl_witness imports.%Copy.impl_witness_table.4f1, @ptr.as.Copy.impl(%A) [concrete] @@ -162,13 +170,19 @@ fn PassConstB(p: const B) { // CHECK:STDOUT: %ConvertCToA.type: type = fn_type @ConvertCToA [concrete] // CHECK:STDOUT: %ConvertCToA: %ConvertCToA.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.param_patt.965: %pattern_type.98b = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt.e1a: %pattern_type.98b = at_binding_pattern c, %c.param_patt.965 [concrete] // CHECK:STDOUT: %ConvertValue.type: type = fn_type @ConvertValue [concrete] // CHECK:STDOUT: %ConvertValue: %ConvertValue.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.9ef: type = pattern_type %A [concrete] +// CHECK:STDOUT: %a.patt.bb7b23.1: %pattern_type.9ef = value_binding_pattern a [concrete] +// CHECK:STDOUT: %c.param_patt.200: %pattern_type.fcb = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt.d05: %pattern_type.fcb = at_binding_pattern c, %c.param_patt.200 [concrete] // CHECK:STDOUT: %ConvertRef.type: type = fn_type @ConvertRef [concrete] // CHECK:STDOUT: %ConvertRef: %ConvertRef.type = struct_value () [concrete] // CHECK:STDOUT: %ConvertInit.type: type = fn_type @ConvertInit [concrete] // CHECK:STDOUT: %ConvertInit: %ConvertInit.type = struct_value () [concrete] +// CHECK:STDOUT: %a.patt.bb7b23.2: %pattern_type.9ef = value_binding_pattern a [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %struct_type.a.a6c: type = struct_type {.a: Core.IntLiteral} [concrete] // CHECK:STDOUT: %struct.48c: %struct_type.a.a6c = struct_value (%int_1.5b8) [concrete] @@ -222,10 +236,10 @@ fn PassConstB(p: const B) { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %ConvertCToB.decl: %ConvertCToB.type = fn_decl @ConvertCToB [concrete = constants.%ConvertCToB] { -// CHECK:STDOUT: %p.param_patt: %pattern_type.fcb = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.fcb = at_binding_pattern p, %p.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.3c8 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.3c8 = return_slot_pattern %return.param_patt, %ptr.loc19_27 [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.fcb = value_param_pattern [concrete = constants.%p.param_patt.9b8] +// CHECK:STDOUT: %p.patt: %pattern_type.fcb = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt.d88] +// CHECK:STDOUT: %return.param_patt: %pattern_type.3c8 = out_param_pattern [concrete = constants.%return.param_patt.9ba] +// CHECK:STDOUT: %return.patt: %pattern_type.3c8 = return_slot_pattern %return.param_patt, %ptr.loc19_27 [concrete = constants.%return.patt.e3e] // CHECK:STDOUT: } { // CHECK:STDOUT: %B.ref: type = name_ref B, file.%B.decl [concrete = constants.%B] // CHECK:STDOUT: %ptr.loc19_27: type = ptr_type %B.ref [concrete = constants.%ptr.432] @@ -240,10 +254,10 @@ fn PassConstB(p: const B) { // CHECK:STDOUT: %return: ref %ptr.432 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %ConvertBToA.decl: %ConvertBToA.type = fn_decl @ConvertBToA [concrete = constants.%ConvertBToA] { -// CHECK:STDOUT: %p.param_patt: %pattern_type.3c8 = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.3c8 = at_binding_pattern p, %p.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.8a5 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.8a5 = return_slot_pattern %return.param_patt, %ptr.loc20_27 [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.3c8 = value_param_pattern [concrete = constants.%p.param_patt.436] +// CHECK:STDOUT: %p.patt: %pattern_type.3c8 = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt.c38] +// CHECK:STDOUT: %return.param_patt: %pattern_type.8a5 = out_param_pattern [concrete = constants.%return.param_patt.7a0] +// CHECK:STDOUT: %return.patt: %pattern_type.8a5 = return_slot_pattern %return.param_patt, %ptr.loc20_27 [concrete = constants.%return.patt.264] // CHECK:STDOUT: } { // CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A] // CHECK:STDOUT: %ptr.loc20_27: type = ptr_type %A.ref [concrete = constants.%ptr.d43] @@ -258,10 +272,10 @@ fn PassConstB(p: const B) { // CHECK:STDOUT: %return: ref %ptr.d43 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %ConvertCToA.decl: %ConvertCToA.type = fn_decl @ConvertCToA [concrete = constants.%ConvertCToA] { -// CHECK:STDOUT: %p.param_patt: %pattern_type.fcb = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.fcb = at_binding_pattern p, %p.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.8a5 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.8a5 = return_slot_pattern %return.param_patt, %ptr.loc21_27 [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.fcb = value_param_pattern [concrete = constants.%p.param_patt.9b8] +// CHECK:STDOUT: %p.patt: %pattern_type.fcb = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt.d88] +// CHECK:STDOUT: %return.param_patt: %pattern_type.8a5 = out_param_pattern [concrete = constants.%return.param_patt.7a0] +// CHECK:STDOUT: %return.patt: %pattern_type.8a5 = return_slot_pattern %return.param_patt, %ptr.loc21_27 [concrete = constants.%return.patt.264] // CHECK:STDOUT: } { // CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A] // CHECK:STDOUT: %ptr.loc21_27: type = ptr_type %A.ref [concrete = constants.%ptr.d43] @@ -276,18 +290,18 @@ fn PassConstB(p: const B) { // CHECK:STDOUT: %return: ref %ptr.d43 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %ConvertValue.decl: %ConvertValue.type = fn_decl @ConvertValue [concrete = constants.%ConvertValue] { -// CHECK:STDOUT: %c.param_patt: %pattern_type.98b = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.98b = at_binding_pattern c, %c.param_patt [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.98b = value_param_pattern [concrete = constants.%c.param_patt.965] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt.e1a] // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %c: %C = value_binding c, %c.param // CHECK:STDOUT: } // CHECK:STDOUT: %ConvertRef.decl: %ConvertRef.type = fn_decl @ConvertRef [concrete = constants.%ConvertRef] { -// CHECK:STDOUT: %c.param_patt: %pattern_type.fcb = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.fcb = at_binding_pattern c, %c.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.8a5 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.8a5 = return_slot_pattern %return.param_patt, %ptr.loc27_26 [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.fcb = value_param_pattern [concrete = constants.%c.param_patt.200] +// CHECK:STDOUT: %c.patt: %pattern_type.fcb = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt.d05] +// CHECK:STDOUT: %return.param_patt: %pattern_type.8a5 = out_param_pattern [concrete = constants.%return.param_patt.7a0] +// CHECK:STDOUT: %return.patt: %pattern_type.8a5 = return_slot_pattern %return.param_patt, %ptr.loc27_26 [concrete = constants.%return.patt.264] // CHECK:STDOUT: } { // CHECK:STDOUT: %A.ref.loc27: type = name_ref A, file.%A.decl [concrete = constants.%A] // CHECK:STDOUT: %ptr.loc27_26: type = ptr_type %A.ref.loc27 [concrete = constants.%ptr.d43] @@ -353,14 +367,14 @@ fn PassConstB(p: const B) { // CHECK:STDOUT: fn @ConvertValue(%c.param: %C) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.9ef = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.9ef = value_binding_pattern a [concrete = constants.%a.patt.bb7b23.1] // CHECK:STDOUT: } // CHECK:STDOUT: %c.ref: %C = name_ref c, %c -// CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A] // CHECK:STDOUT: %.loc24_21.1: ref %B = class_element_access %c.ref, element0 // CHECK:STDOUT: %.loc24_21.2: ref %A = class_element_access %.loc24_21.1, element0 // CHECK:STDOUT: %.loc24_21.3: ref %A = converted %c.ref, %.loc24_21.2 // CHECK:STDOUT: %.loc24_21.4: %A = acquire_value %.loc24_21.3 +// CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A] // CHECK:STDOUT: %a: %A = value_binding a, %.loc24_21.4 // CHECK:STDOUT: return // CHECK:STDOUT: } @@ -385,7 +399,7 @@ fn PassConstB(p: const B) { // CHECK:STDOUT: fn @ConvertInit() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.9ef = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.9ef = value_binding_pattern a [concrete = constants.%a.patt.bb7b23.2] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %.loc32_46.1: %struct_type.a.a6c = struct_literal (%int_1) [concrete = constants.%struct.48c] @@ -429,12 +443,12 @@ fn PassConstB(p: const B) { // CHECK:STDOUT: %.loc32_64.8: init %i32 to %.loc32_64.7 = in_place_init %.loc32_64.6 [concrete = constants.%int_3.410] // CHECK:STDOUT: %.loc32_64.9: init %C to %.loc32_64.2 = class_init (%.loc32_64.5, %.loc32_64.8) [concrete = constants.%C.val] // CHECK:STDOUT: %.loc32_66.1: init %C = converted %.loc32_64.1, %.loc32_64.9 [concrete = constants.%C.val] -// CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A] // CHECK:STDOUT: %.loc32_66.2: ref %C = temporary %.loc32_64.2, %.loc32_66.1 [concrete = constants.%.084] // CHECK:STDOUT: %.loc32_66.3: ref %B = class_element_access %.loc32_66.2, element0 [concrete = constants.%.107] // CHECK:STDOUT: %.loc32_66.4: ref %A = class_element_access %.loc32_66.3, element0 [concrete = constants.%.5ce] // CHECK:STDOUT: %.loc32_66.5: ref %A = converted %.loc32_66.1, %.loc32_66.4 [concrete = constants.%.5ce] // CHECK:STDOUT: %.loc32_66.6: %A = acquire_value %.loc32_66.5 +// CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A] // CHECK:STDOUT: %a: %A = value_binding a, %.loc32_66.6 // CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call constants.%Destroy.Op.bound(constants.%.084) // CHECK:STDOUT: return diff --git a/toolchain/check/testdata/class/inheritance/import_base.carbon b/toolchain/check/testdata/class/inheritance/import_base.carbon index 3a4c89970ada..7c928f226ba8 100644 --- a/toolchain/check/testdata/class/inheritance/import_base.carbon +++ b/toolchain/check/testdata/class/inheritance/import_base.carbon @@ -46,6 +46,8 @@ fn Run() { // CHECK:STDOUT: constants { // CHECK:STDOUT: %Base: type = class_type @Base [concrete] // CHECK:STDOUT: %pattern_type.912: type = pattern_type %Base [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.912 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt: %pattern_type.912 = at_binding_pattern self, %self.param_patt [concrete] // CHECK:STDOUT: %Base.F.type: type = fn_type @Base.F [concrete] // CHECK:STDOUT: %Base.F: %Base.F.type = struct_value () [concrete] // CHECK:STDOUT: %Base.Unused.type: type = fn_type @Base.Unused [concrete] @@ -85,16 +87,16 @@ fn Run() { // CHECK:STDOUT: // CHECK:STDOUT: class @Base { // CHECK:STDOUT: %Base.F.decl: %Base.F.type = fn_decl @Base.F [concrete = constants.%Base.F] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.912 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.912 = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.912 = value_param_pattern [concrete = constants.%self.param_patt] +// CHECK:STDOUT: %self.patt: %pattern_type.912 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %Base = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] // CHECK:STDOUT: %self: %Base = value_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Base.Unused.decl: %Base.Unused.type = fn_decl @Base.Unused [concrete = constants.%Base.Unused] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.912 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.912 = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.912 = value_param_pattern [concrete = constants.%self.param_patt] +// CHECK:STDOUT: %self.patt: %pattern_type.912 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %Base = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] @@ -146,6 +148,8 @@ fn Run() { // CHECK:STDOUT: %struct_type.base.cae: type = struct_type {.base: %Base} [concrete] // CHECK:STDOUT: %complete_type.c02: = complete_type_witness %struct_type.base.cae [concrete] // CHECK:STDOUT: %pattern_type.860: type = pattern_type %Child [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.860 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.860 = var_pattern %a.patt [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %struct_type.x.unused_y.76a: type = struct_type {.x: Core.IntLiteral, .unused_y: Core.IntLiteral} [concrete] @@ -250,8 +254,8 @@ fn Run() { // CHECK:STDOUT: fn @Run() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.860 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.860 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.860 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.860 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %Child = var %a.var_patt // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0.5c6] diff --git a/toolchain/check/testdata/class/inheritance/self_conversion.carbon b/toolchain/check/testdata/class/inheritance/self_conversion.carbon index c714457c2b02..4fe600055b72 100644 --- a/toolchain/check/testdata/class/inheritance/self_conversion.carbon +++ b/toolchain/check/testdata/class/inheritance/self_conversion.carbon @@ -53,9 +53,15 @@ fn Call(p: Derived*) -> i32 { // CHECK:STDOUT: %Derived: type = class_type @Derived [concrete] // CHECK:STDOUT: %Derived.elem: type = unbound_element_type %Derived, %Base [concrete] // CHECK:STDOUT: %pattern_type.912: type = pattern_type %Base [concrete] +// CHECK:STDOUT: %self.param_patt.0db: %pattern_type.912 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.97c: %pattern_type.912 = at_binding_pattern self, %self.param_patt.0db [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %Derived.SelfBase.type: type = fn_type @Derived.SelfBase [concrete] // CHECK:STDOUT: %Derived.SelfBase: %Derived.SelfBase.type = struct_value () [concrete] +// CHECK:STDOUT: %self.param_patt.21c: %pattern_type.912 = ref_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.a45: %pattern_type.912 = at_binding_pattern self, %self.param_patt.21c [concrete] // CHECK:STDOUT: %Derived.RefSelfBase.type: type = fn_type @Derived.RefSelfBase [concrete] // CHECK:STDOUT: %Derived.RefSelfBase: %Derived.RefSelfBase.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.cae: type = struct_type {.base: %Base} [concrete] @@ -89,6 +95,8 @@ fn Call(p: Derived*) -> i32 { // CHECK:STDOUT: %int_1.0c6: %i32 = int_value 1 [concrete] // CHECK:STDOUT: %ptr.64c: type = ptr_type %Derived [concrete] // CHECK:STDOUT: %pattern_type.56c: type = pattern_type %ptr.64c [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.56c = value_param_pattern [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.56c = at_binding_pattern p, %p.param_patt [concrete] // CHECK:STDOUT: %Call.type: type = fn_type @Call [concrete] // CHECK:STDOUT: %Call: %Call.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -121,10 +129,10 @@ fn Call(p: Derived*) -> i32 { // CHECK:STDOUT: %Base.decl: type = class_decl @Base [concrete = constants.%Base] {} {} // CHECK:STDOUT: %Derived.decl: type = class_decl @Derived [concrete = constants.%Derived] {} {} // CHECK:STDOUT: %Derived.SelfBase.decl: %Derived.SelfBase.type = fn_decl @Derived.SelfBase [concrete = constants.%Derived.SelfBase] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.912 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.912 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc26 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.912 = value_param_pattern [concrete = constants.%self.param_patt.0db] +// CHECK:STDOUT: %self.patt: %pattern_type.912 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.97c] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc26 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc26: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc26: Core.Form = init_form %i32.loc26 [concrete = constants.%.795] @@ -135,18 +143,18 @@ fn Call(p: Derived*) -> i32 { // CHECK:STDOUT: %return.loc26: ref %i32 = return_slot %return.param.loc26 // CHECK:STDOUT: } // CHECK:STDOUT: %Derived.RefSelfBase.decl: %Derived.RefSelfBase.type = fn_decl @Derived.RefSelfBase [concrete = constants.%Derived.RefSelfBase] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.912 = ref_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.912 = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.912 = ref_param_pattern [concrete = constants.%self.param_patt.21c] +// CHECK:STDOUT: %self.patt: %pattern_type.912 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.a45] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param.loc30: ref %Base = ref_param call_param0 // CHECK:STDOUT: %Base.ref.loc30: type = name_ref Base, file.%Base.decl [concrete = constants.%Base] // CHECK:STDOUT: %self.loc30: ref %Base = ref_binding self, %self.param.loc30 // CHECK:STDOUT: } // CHECK:STDOUT: %Call.decl: %Call.type = fn_decl @Call [concrete = constants.%Call] { -// CHECK:STDOUT: %p.param_patt: %pattern_type.56c = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.56c = at_binding_pattern p, %p.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.56c = value_param_pattern [concrete = constants.%p.param_patt] +// CHECK:STDOUT: %p.patt: %pattern_type.56c = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc34_25: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -176,10 +184,10 @@ fn Call(p: Derived*) -> i32 { // CHECK:STDOUT: %Base.ref: type = name_ref Base, file.%Base.decl [concrete = constants.%Base] // CHECK:STDOUT: %.loc20: %Derived.elem = base_decl %Base.ref, element0 [concrete] // CHECK:STDOUT: %Derived.SelfBase.decl: %Derived.SelfBase.type = fn_decl @Derived.SelfBase [concrete = constants.%Derived.SelfBase] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.912 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.912 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc26 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.912 = value_param_pattern [concrete = constants.%self.param_patt.0db] +// CHECK:STDOUT: %self.patt: %pattern_type.912 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.97c] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc26 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc22: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc22: Core.Form = init_form %i32.loc22 [concrete = constants.%.795] @@ -190,8 +198,8 @@ fn Call(p: Derived*) -> i32 { // CHECK:STDOUT: %return.loc22: ref %i32 = return_slot %return.param.loc22 // CHECK:STDOUT: } // CHECK:STDOUT: %Derived.RefSelfBase.decl: %Derived.RefSelfBase.type = fn_decl @Derived.RefSelfBase [concrete = constants.%Derived.RefSelfBase] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.912 = ref_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.912 = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.912 = ref_param_pattern [concrete = constants.%self.param_patt.21c] +// CHECK:STDOUT: %self.patt: %pattern_type.912 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.a45] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param.loc23: ref %Base = ref_param call_param0 // CHECK:STDOUT: %Base.ref.loc23: type = name_ref Base, file.%Base.decl [concrete = constants.%Base] diff --git a/toolchain/check/testdata/class/init.carbon b/toolchain/check/testdata/class/init.carbon index 4716ab31ce06..799546fab42c 100644 --- a/toolchain/check/testdata/class/init.carbon +++ b/toolchain/check/testdata/class/init.carbon @@ -41,8 +41,14 @@ fn MakeReorder(n: i32, next: Class*) -> Class { // CHECK:STDOUT: %Class.elem.8da: type = unbound_element_type %Class, %ptr.7ee [concrete] // CHECK:STDOUT: %struct_type.n.next: type = struct_type {.n: %i32, .next: %ptr.7ee} [concrete] // CHECK:STDOUT: %complete_type.dc3: = complete_type_witness %struct_type.n.next [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %n.patt.f0b: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete] +// CHECK:STDOUT: %next.param_patt: %pattern_type.8c5 = value_param_pattern [concrete] +// CHECK:STDOUT: %next.patt.5a1: %pattern_type.8c5 = at_binding_pattern next, %next.param_patt [concrete] // CHECK:STDOUT: %.d76: Core.Form = init_form %Class [concrete] // CHECK:STDOUT: %pattern_type.f15: type = pattern_type %Class [concrete] +// CHECK:STDOUT: %return.param_patt.86e: %pattern_type.f15 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.0b7: %pattern_type.f15 = return_slot_pattern %return.param_patt.86e, %Class [concrete] // CHECK:STDOUT: %Make.type: type = fn_type @Make [concrete] // CHECK:STDOUT: %Make: %Make.type = struct_value () [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -95,12 +101,12 @@ fn MakeReorder(n: i32, next: Class*) -> Class { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: %Make.decl: %Make.type = fn_decl @Make [concrete = constants.%Make] { -// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete] -// CHECK:STDOUT: %next.param_patt: %pattern_type.8c5 = value_param_pattern [concrete] -// CHECK:STDOUT: %next.patt: %pattern_type.8c5 = at_binding_pattern next, %next.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.f15 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.f15 = return_slot_pattern %return.param_patt, %Class.ref.loc20_34 [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%n.param_patt] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete = constants.%n.patt.f0b] +// CHECK:STDOUT: %next.param_patt: %pattern_type.8c5 = value_param_pattern [concrete = constants.%next.param_patt] +// CHECK:STDOUT: %next.patt: %pattern_type.8c5 = at_binding_pattern next, %next.param_patt [concrete = constants.%next.patt.5a1] +// CHECK:STDOUT: %return.param_patt: %pattern_type.f15 = out_param_pattern [concrete = constants.%return.param_patt.86e] +// CHECK:STDOUT: %return.patt: %pattern_type.f15 = return_slot_pattern %return.param_patt, %Class.ref.loc20_34 [concrete = constants.%return.patt.0b7] // CHECK:STDOUT: } { // CHECK:STDOUT: %Class.ref.loc20_34: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] // CHECK:STDOUT: %.loc20_34: Core.Form = init_form %Class.ref.loc20_34 [concrete = constants.%.d76] @@ -117,12 +123,12 @@ fn MakeReorder(n: i32, next: Class*) -> Class { // CHECK:STDOUT: %return: ref %Class = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %MakeReorder.decl: %MakeReorder.type = fn_decl @MakeReorder [concrete = constants.%MakeReorder] { -// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete] -// CHECK:STDOUT: %next.param_patt: %pattern_type.8c5 = value_param_pattern [concrete] -// CHECK:STDOUT: %next.patt: %pattern_type.8c5 = at_binding_pattern next, %next.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.f15 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.f15 = return_slot_pattern %return.param_patt, %Class.ref.loc24_41 [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%n.param_patt] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete = constants.%n.patt.f0b] +// CHECK:STDOUT: %next.param_patt: %pattern_type.8c5 = value_param_pattern [concrete = constants.%next.param_patt] +// CHECK:STDOUT: %next.patt: %pattern_type.8c5 = at_binding_pattern next, %next.param_patt [concrete = constants.%next.patt.5a1] +// CHECK:STDOUT: %return.param_patt: %pattern_type.f15 = out_param_pattern [concrete = constants.%return.param_patt.86e] +// CHECK:STDOUT: %return.patt: %pattern_type.f15 = return_slot_pattern %return.param_patt, %Class.ref.loc24_41 [concrete = constants.%return.patt.0b7] // CHECK:STDOUT: } { // CHECK:STDOUT: %Class.ref.loc24_41: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] // CHECK:STDOUT: %.loc24_41: Core.Form = init_form %Class.ref.loc24_41 [concrete = constants.%.d76] diff --git a/toolchain/check/testdata/class/init_as.carbon b/toolchain/check/testdata/class/init_as.carbon index 927cf9f26ab9..3c494031d265 100644 --- a/toolchain/check/testdata/class/init_as.carbon +++ b/toolchain/check/testdata/class/init_as.carbon @@ -77,6 +77,8 @@ fn G() -> i32 { // CHECK:STDOUT: %Destroy.Op.type.1d8f74.4: type = fn_type @Destroy.Op.loc20_28.4 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.4: %Destroy.Op.type.1d8f74.4 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.Op.bound: = bound_method %.0e3, %Destroy.Op.1a2547.4 [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.f15 = ref_binding_pattern v [concrete] +// CHECK:STDOUT: %v.var_patt: %pattern_type.f15 = var_pattern %v.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -144,8 +146,8 @@ fn G() -> i32 { // CHECK:STDOUT: fn @G() -> out %return.param: %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %pattern_type.f15 = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: %pattern_type.f15 = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.f15 = ref_binding_pattern v [concrete = constants.%v.patt] +// CHECK:STDOUT: %v.var_patt: %pattern_type.f15 = var_pattern %v.patt [concrete = constants.%v.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %Class = var %v.var_patt // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] diff --git a/toolchain/check/testdata/class/init_nested.carbon b/toolchain/check/testdata/class/init_nested.carbon index 0e0ea532a983..9471b7c8d7ea 100644 --- a/toolchain/check/testdata/class/init_nested.carbon +++ b/toolchain/check/testdata/class/init_nested.carbon @@ -41,6 +41,8 @@ fn MakeOuter() -> Outer { // CHECK:STDOUT: %complete_type.7b9: = complete_type_witness %struct_type.a.b [concrete] // CHECK:STDOUT: %.ffb: Core.Form = init_form %Inner [concrete] // CHECK:STDOUT: %pattern_type.dfc: type = pattern_type %Inner [concrete] +// CHECK:STDOUT: %return.param_patt.4dd: %pattern_type.dfc = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.5f5: %pattern_type.dfc = return_slot_pattern %return.param_patt.4dd, %Inner [concrete] // CHECK:STDOUT: %MakeInner.type: type = fn_type @MakeInner [concrete] // CHECK:STDOUT: %MakeInner: %MakeInner.type = struct_value () [concrete] // CHECK:STDOUT: %Outer: type = class_type @Outer [concrete] @@ -49,6 +51,8 @@ fn MakeOuter() -> Outer { // CHECK:STDOUT: %complete_type.890: = complete_type_witness %struct_type.c.d.899 [concrete] // CHECK:STDOUT: %.50e: Core.Form = init_form %Outer [concrete] // CHECK:STDOUT: %pattern_type.d6c: type = pattern_type %Outer [concrete] +// CHECK:STDOUT: %return.param_patt.756: %pattern_type.d6c = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.991: %pattern_type.d6c = return_slot_pattern %return.param_patt.756, %Outer [concrete] // CHECK:STDOUT: %MakeOuter.type: type = fn_type @MakeOuter [concrete] // CHECK:STDOUT: %MakeOuter: %MakeOuter.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -73,8 +77,8 @@ fn MakeOuter() -> Outer { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Inner.decl: type = class_decl @Inner [concrete = constants.%Inner] {} {} // CHECK:STDOUT: %MakeInner.decl: %MakeInner.type = fn_decl @MakeInner [concrete = constants.%MakeInner] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.dfc = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.dfc = return_slot_pattern %return.param_patt, %Inner.ref [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.dfc = out_param_pattern [concrete = constants.%return.param_patt.4dd] +// CHECK:STDOUT: %return.patt: %pattern_type.dfc = return_slot_pattern %return.param_patt, %Inner.ref [concrete = constants.%return.patt.5f5] // CHECK:STDOUT: } { // CHECK:STDOUT: %Inner.ref: type = name_ref Inner, file.%Inner.decl [concrete = constants.%Inner] // CHECK:STDOUT: %.loc20: Core.Form = init_form %Inner.ref [concrete = constants.%.ffb] @@ -83,8 +87,8 @@ fn MakeOuter() -> Outer { // CHECK:STDOUT: } // CHECK:STDOUT: %Outer.decl: type = class_decl @Outer [concrete = constants.%Outer] {} {} // CHECK:STDOUT: %MakeOuter.decl: %MakeOuter.type = fn_decl @MakeOuter [concrete = constants.%MakeOuter] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.d6c = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.d6c = return_slot_pattern %return.param_patt, %Outer.ref [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.d6c = out_param_pattern [concrete = constants.%return.param_patt.756] +// CHECK:STDOUT: %return.patt: %pattern_type.d6c = return_slot_pattern %return.param_patt, %Outer.ref [concrete = constants.%return.patt.991] // CHECK:STDOUT: } { // CHECK:STDOUT: %Outer.ref: type = name_ref Outer, file.%Outer.decl [concrete = constants.%Outer] // CHECK:STDOUT: %.loc27: Core.Form = init_form %Outer.ref [concrete = constants.%.50e] diff --git a/toolchain/check/testdata/class/local.carbon b/toolchain/check/testdata/class/local.carbon index aa710a46bddc..c3f45a89b4c0 100644 --- a/toolchain/check/testdata/class/local.carbon +++ b/toolchain/check/testdata/class/local.carbon @@ -39,6 +39,8 @@ class A { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %A.F.type: type = fn_type @A.F [concrete] // CHECK:STDOUT: %A.F: %A.F.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] @@ -47,11 +49,15 @@ class A { // CHECK:STDOUT: %B: type = class_type @B [concrete] // CHECK:STDOUT: %.d31: Core.Form = init_form %B [concrete] // CHECK:STDOUT: %pattern_type.6f2: type = pattern_type %B [concrete] +// CHECK:STDOUT: %return.param_patt.6ad: %pattern_type.6f2 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.f2b: %pattern_type.6f2 = return_slot_pattern %return.param_patt.6ad, %B [concrete] // CHECK:STDOUT: %B.Make.type: type = fn_type @B.Make [concrete] // CHECK:STDOUT: %B.Make: %B.Make.type = struct_value () [concrete] // CHECK:STDOUT: %B.elem: type = unbound_element_type %B, %i32 [concrete] // CHECK:STDOUT: %struct_type.n.9ed: type = struct_type {.n: %i32} [concrete] // CHECK:STDOUT: %complete_type.cdf: = complete_type_witness %struct_type.n.9ed [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6f2 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.6f2 = var_pattern %b.patt [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %struct_type.n.44a: type = struct_type {.n: Core.IntLiteral} [concrete] // CHECK:STDOUT: %struct: %struct_type.n.44a = struct_value (%int_1.5b8) [concrete] @@ -117,8 +123,8 @@ class A { // CHECK:STDOUT: // CHECK:STDOUT: class @A { // CHECK:STDOUT: %A.F.decl: %A.F.type = fn_decl @A.F [concrete = constants.%A.F] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc16: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -135,8 +141,8 @@ class A { // CHECK:STDOUT: // CHECK:STDOUT: class @B { // CHECK:STDOUT: %B.Make.decl: %B.Make.type = fn_decl @B.Make [concrete = constants.%B.Make] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6f2 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6f2 = return_slot_pattern %return.param_patt, %Self.ref.loc18 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6f2 = out_param_pattern [concrete = constants.%return.param_patt.6ad] +// CHECK:STDOUT: %return.patt: %pattern_type.6f2 = return_slot_pattern %return.param_patt, %Self.ref.loc18 [concrete = constants.%return.patt.f2b] // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc18: type = name_ref Self, constants.%B [concrete = constants.%B] // CHECK:STDOUT: %.loc18: Core.Form = init_form %Self.ref.loc18 [concrete = constants.%.d31] @@ -177,8 +183,8 @@ class A { // CHECK:STDOUT: fn @B.Make() -> out %return.param: %B { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.6f2 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.6f2 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6f2 = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type.6f2 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %.loc19_39.1: %struct_type.n.44a = struct_literal (%int_1) [concrete = constants.%struct] diff --git a/toolchain/check/testdata/class/method/call_without_method_syntax.carbon b/toolchain/check/testdata/class/method/call_without_method_syntax.carbon index d4abba2c70af..2b8ff5425c25 100644 --- a/toolchain/check/testdata/class/method/call_without_method_syntax.carbon +++ b/toolchain/check/testdata/class/method/call_without_method_syntax.carbon @@ -45,6 +45,8 @@ fn CallViaAlias(p: Point) -> i32 { // CHECK:STDOUT: constants { // CHECK:STDOUT: %Point: type = class_type @Point [concrete] // CHECK:STDOUT: %pattern_type.9d8: type = pattern_type %Point [concrete] +// CHECK:STDOUT: %self.param_patt.b38: %pattern_type.9d8 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.60a: %pattern_type.9d8 = at_binding_pattern self, %self.param_patt.b38 [concrete] // 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] @@ -52,8 +54,12 @@ fn CallViaAlias(p: Point) -> i32 { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %Point.Get.type: type = fn_type @Point.Get [concrete] // CHECK:STDOUT: %Point.Get: %Point.Get.type = struct_value () [concrete] +// CHECK:STDOUT: %other.param_patt: %pattern_type.9d8 = value_param_pattern [concrete] +// CHECK:STDOUT: %other.patt: %pattern_type.9d8 = at_binding_pattern other, %other.param_patt [concrete] // CHECK:STDOUT: %Point.First.type: type = fn_type @Point.First [concrete] // CHECK:STDOUT: %Point.First: %Point.First.type = struct_value () [concrete] // CHECK:STDOUT: %Point.elem: type = unbound_element_type %Point, %i32 [concrete] @@ -69,8 +75,12 @@ fn CallViaAlias(p: Point) -> i32 { // CHECK:STDOUT: %Copy.WithSelf.Op.type.d09: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet) [concrete] // CHECK:STDOUT: %.7a6: type = fn_type_with_self_type %Copy.WithSelf.Op.type.d09, %Copy.facet [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.4f6, @Int.as.Copy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.9d8 = value_param_pattern [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.9d8 = at_binding_pattern p, %p.param_patt [concrete] // CHECK:STDOUT: %CallGet.type: type = fn_type @CallGet [concrete] // CHECK:STDOUT: %CallGet: %CallGet.type = struct_value () [concrete] +// CHECK:STDOUT: %q.param_patt: %pattern_type.9d8 = value_param_pattern [concrete] +// CHECK:STDOUT: %q.patt: %pattern_type.9d8 = at_binding_pattern q, %q.param_patt [concrete] // CHECK:STDOUT: %CallFirst.type: type = fn_type @CallFirst [concrete] // CHECK:STDOUT: %CallFirst: %CallFirst.type = struct_value () [concrete] // CHECK:STDOUT: %CallViaAlias.type: type = fn_type @CallViaAlias [concrete] @@ -101,10 +111,10 @@ fn CallViaAlias(p: Point) -> i32 { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Point.decl: type = class_decl @Point [concrete = constants.%Point] {} {} // CHECK:STDOUT: %CallGet.decl: %CallGet.type = fn_decl @CallGet [concrete = constants.%CallGet] { -// CHECK:STDOUT: %p.param_patt: %pattern_type.9d8 = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.9d8 = at_binding_pattern p, %p.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.9d8 = value_param_pattern [concrete = constants.%p.param_patt] +// CHECK:STDOUT: %p.patt: %pattern_type.9d8 = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc13: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -115,12 +125,12 @@ fn CallViaAlias(p: Point) -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallFirst.decl: %CallFirst.type = fn_decl @CallFirst [concrete = constants.%CallFirst] { -// CHECK:STDOUT: %p.param_patt: %pattern_type.9d8 = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.9d8 = at_binding_pattern p, %p.param_patt [concrete] -// CHECK:STDOUT: %q.param_patt: %pattern_type.9d8 = value_param_pattern [concrete] -// CHECK:STDOUT: %q.patt: %pattern_type.9d8 = at_binding_pattern q, %q.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.9d8 = value_param_pattern [concrete = constants.%p.param_patt] +// CHECK:STDOUT: %p.patt: %pattern_type.9d8 = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt] +// CHECK:STDOUT: %q.param_patt: %pattern_type.9d8 = value_param_pattern [concrete = constants.%q.param_patt] +// CHECK:STDOUT: %q.patt: %pattern_type.9d8 = at_binding_pattern q, %q.param_patt [concrete = constants.%q.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc18: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -134,10 +144,10 @@ fn CallViaAlias(p: Point) -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallViaAlias.decl: %CallViaAlias.type = fn_decl @CallViaAlias [concrete = constants.%CallViaAlias] { -// CHECK:STDOUT: %p.param_patt: %pattern_type.9d8 = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.9d8 = at_binding_pattern p, %p.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.9d8 = value_param_pattern [concrete = constants.%p.param_patt] +// CHECK:STDOUT: %p.patt: %pattern_type.9d8 = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc23: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -151,10 +161,10 @@ fn CallViaAlias(p: Point) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: class @Point { // CHECK:STDOUT: %Point.Get.decl: %Point.Get.type = fn_decl @Point.Get [concrete = constants.%Point.Get] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.9d8 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.9d8 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.9d8 = value_param_pattern [concrete = constants.%self.param_patt.b38] +// CHECK:STDOUT: %self.patt: %pattern_type.9d8 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.60a] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc4_19: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -165,12 +175,12 @@ fn CallViaAlias(p: Point) -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Point.First.decl: %Point.First.type = fn_decl @Point.First [concrete = constants.%Point.First] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.9d8 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.9d8 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %other.param_patt: %pattern_type.9d8 = value_param_pattern [concrete] -// CHECK:STDOUT: %other.patt: %pattern_type.9d8 = at_binding_pattern other, %other.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.9d8 = value_param_pattern [concrete = constants.%self.param_patt.b38] +// CHECK:STDOUT: %self.patt: %pattern_type.9d8 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.60a] +// CHECK:STDOUT: %other.param_patt: %pattern_type.9d8 = value_param_pattern [concrete = constants.%other.param_patt] +// CHECK:STDOUT: %other.patt: %pattern_type.9d8 = at_binding_pattern other, %other.param_patt [concrete = constants.%other.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc5_42: Core.Form = init_form %i32 [concrete = constants.%.795] diff --git a/toolchain/check/testdata/class/method/generic_method.carbon b/toolchain/check/testdata/class/method/generic_method.carbon index 8c200cb7c3cf..4cb2084bbd2e 100644 --- a/toolchain/check/testdata/class/method/generic_method.carbon +++ b/toolchain/check/testdata/class/method/generic_method.carbon @@ -26,14 +26,20 @@ fn Class(T:! type).F(unused self, unused n: T) {} // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Class.type: type = generic_class_type @Class [concrete] // CHECK:STDOUT: %Class.generic: %Class.type = struct_value () [concrete] // CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T) [symbolic] // CHECK:STDOUT: %require_complete.944: = require_complete_type %T [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %a.patt: %pattern_type.51d = ref_binding_pattern a [symbolic] // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class, %T [symbolic] // CHECK:STDOUT: %pattern_type.36e: type = pattern_type %Class [symbolic] +// CHECK:STDOUT: %self.param_patt: %pattern_type.36e = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt: %pattern_type.36e = at_binding_pattern self, %self.param_patt [symbolic] +// CHECK:STDOUT: %n.param_patt: %pattern_type.51d = value_param_pattern [symbolic] +// CHECK:STDOUT: %n.patt: %pattern_type.51d = at_binding_pattern n, %n.param_patt [symbolic] // CHECK:STDOUT: %Class.F.type: type = fn_type @Class.F, @Class(%T) [symbolic] // CHECK:STDOUT: %Class.F: %Class.F.type = struct_value () [symbolic] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %T} [symbolic] @@ -55,7 +61,7 @@ fn Class(T:! type).F(unused self, unused n: T) {} // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: %Class.type = class_decl @Class [concrete = constants.%Class.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc15_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc15_17.1: type = splice_block %.loc15_17.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -64,10 +70,10 @@ fn Class(T:! type).F(unused self, unused n: T) {} // CHECK:STDOUT: %T.loc15_14.2: type = symbolic_binding T, 0 [symbolic = %T.loc15_14.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %Class.F.decl: %Class.F.type = fn_decl @Class.F [symbolic = constants.%Class.F] { -// CHECK:STDOUT: %self.param_patt: @Class.F.%pattern_type.loc17_8 (%pattern_type.36e) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @Class.F.%pattern_type.loc17_8 (%pattern_type.36e) = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %n.param_patt: @Class.F.%pattern_type.loc17_15 (%pattern_type.51d) = value_param_pattern [concrete] -// CHECK:STDOUT: %n.patt: @Class.F.%pattern_type.loc17_15 (%pattern_type.51d) = at_binding_pattern n, %n.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc20: @Class.F.%pattern_type.loc17_8 (%pattern_type.36e) = value_param_pattern [symbolic = %self.param_patt.loc17 (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt.loc20: @Class.F.%pattern_type.loc17_8 (%pattern_type.36e) = at_binding_pattern self, %self.param_patt.loc20 [symbolic = %self.patt.loc17 (constants.%self.patt)] +// CHECK:STDOUT: %n.param_patt.loc20: @Class.F.%pattern_type.loc17_15 (%pattern_type.51d) = value_param_pattern [symbolic = %n.param_patt.loc17 (constants.%n.param_patt)] +// CHECK:STDOUT: %n.patt.loc20: @Class.F.%pattern_type.loc17_15 (%pattern_type.51d) = at_binding_pattern n, %n.param_patt.loc20 [symbolic = %n.patt.loc17 (constants.%n.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc20_14.1: type = splice_block %.loc20_14.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -87,10 +93,13 @@ fn Class(T:! type).F(unused self, unused n: T) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%T.loc15_14.2: type) { +// CHECK:STDOUT: %T.patt.loc15_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_14.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc15_14.1: type = symbolic_binding T, 0 [symbolic = %T.loc15_14.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc15_14.1 [symbolic = %require_complete (constants.%require_complete.944)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc15_14.1 [symbolic = %pattern_type (constants.%pattern_type.51d)] +// CHECK:STDOUT: %a.patt: @Class.%pattern_type (%pattern_type.51d) = ref_binding_pattern a [symbolic = %a.patt (constants.%a.patt)] // CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T.loc15_14.1) [symbolic = %Class (constants.%Class)] // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class, %T.loc15_14.1 [symbolic = %Class.elem (constants.%Class.elem)] // CHECK:STDOUT: %Class.F.type: type = fn_type @Class.F, @Class(%T.loc15_14.1) [symbolic = %Class.F.type (constants.%Class.F.type)] @@ -101,10 +110,10 @@ fn Class(T:! type).F(unused self, unused n: T) {} // CHECK:STDOUT: class { // CHECK:STDOUT: %.loc16: @Class.%Class.elem (%Class.elem) = field_decl a, element0 [concrete] // CHECK:STDOUT: %Class.F.decl: @Class.%Class.F.type (%Class.F.type) = fn_decl @Class.F [symbolic = @Class.%Class.F (constants.%Class.F)] { -// CHECK:STDOUT: %self.param_patt: @Class.F.%pattern_type.loc17_8 (%pattern_type.36e) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @Class.F.%pattern_type.loc17_8 (%pattern_type.36e) = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %n.param_patt: @Class.F.%pattern_type.loc17_15 (%pattern_type.51d) = value_param_pattern [concrete] -// CHECK:STDOUT: %n.patt: @Class.F.%pattern_type.loc17_15 (%pattern_type.51d) = at_binding_pattern n, %n.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc20: @Class.F.%pattern_type.loc17_8 (%pattern_type.36e) = value_param_pattern [symbolic = %self.param_patt.loc17 (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt.loc20: @Class.F.%pattern_type.loc17_8 (%pattern_type.36e) = at_binding_pattern self, %self.param_patt.loc20 [symbolic = %self.patt.loc17 (constants.%self.patt)] +// CHECK:STDOUT: %n.param_patt.loc20: @Class.F.%pattern_type.loc17_15 (%pattern_type.51d) = value_param_pattern [symbolic = %n.param_patt.loc17 (constants.%n.param_patt)] +// CHECK:STDOUT: %n.patt.loc20: @Class.F.%pattern_type.loc17_15 (%pattern_type.51d) = at_binding_pattern n, %n.param_patt.loc20 [symbolic = %n.patt.loc17 (constants.%n.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param.loc17: @Class.F.%Class (%Class) = value_param call_param0 // CHECK:STDOUT: %.loc17_8.1: type = splice_block %Self.ref.loc17 [symbolic = %Class (constants.%Class)] { @@ -131,7 +140,11 @@ fn Class(T:! type).F(unused self, unused n: T) {} // CHECK:STDOUT: %T.loc17: type = symbolic_binding T, 0 [symbolic = %T.loc17 (constants.%T)] // CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T.loc17) [symbolic = %Class (constants.%Class)] // CHECK:STDOUT: %pattern_type.loc17_8: type = pattern_type %Class [symbolic = %pattern_type.loc17_8 (constants.%pattern_type.36e)] +// CHECK:STDOUT: %self.param_patt.loc17: @Class.F.%pattern_type.loc17_8 (%pattern_type.36e) = value_param_pattern [symbolic = %self.param_patt.loc17 (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt.loc17: @Class.F.%pattern_type.loc17_8 (%pattern_type.36e) = at_binding_pattern self, %self.param_patt.loc17 [symbolic = %self.patt.loc17 (constants.%self.patt)] // CHECK:STDOUT: %pattern_type.loc17_15: type = pattern_type %T.loc17 [symbolic = %pattern_type.loc17_15 (constants.%pattern_type.51d)] +// CHECK:STDOUT: %n.param_patt.loc17: @Class.F.%pattern_type.loc17_15 (%pattern_type.51d) = value_param_pattern [symbolic = %n.param_patt.loc17 (constants.%n.param_patt)] +// CHECK:STDOUT: %n.patt.loc17: @Class.F.%pattern_type.loc17_15 (%pattern_type.51d) = at_binding_pattern n, %n.param_patt.loc17 [symbolic = %n.patt.loc17 (constants.%n.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc20_29: = require_complete_type %Class [symbolic = %require_complete.loc20_29 (constants.%require_complete.4d9)] @@ -144,10 +157,13 @@ fn Class(T:! type).F(unused self, unused n: T) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%T) { +// CHECK:STDOUT: %T.patt.loc15_14.2 => constants.%T.patt // CHECK:STDOUT: %T.loc15_14.1 => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.944 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d +// CHECK:STDOUT: %a.patt => constants.%a.patt // CHECK:STDOUT: %Class => constants.%Class // CHECK:STDOUT: %Class.elem => constants.%Class.elem // CHECK:STDOUT: %Class.F.type => constants.%Class.F.type @@ -160,6 +176,10 @@ fn Class(T:! type).F(unused self, unused n: T) {} // CHECK:STDOUT: %T.loc17 => constants.%T // CHECK:STDOUT: %Class => constants.%Class // CHECK:STDOUT: %pattern_type.loc17_8 => constants.%pattern_type.36e +// CHECK:STDOUT: %self.param_patt.loc17 => constants.%self.param_patt +// CHECK:STDOUT: %self.patt.loc17 => constants.%self.patt // CHECK:STDOUT: %pattern_type.loc17_15 => constants.%pattern_type.51d +// CHECK:STDOUT: %n.param_patt.loc17 => constants.%n.param_patt +// CHECK:STDOUT: %n.patt.loc17 => constants.%n.patt // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/method/method.carbon b/toolchain/check/testdata/class/method/method.carbon index 1ea16dc42a8e..5c79a8b5b071 100644 --- a/toolchain/check/testdata/class/method/method.carbon +++ b/toolchain/check/testdata/class/method/method.carbon @@ -67,6 +67,8 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: constants { // CHECK:STDOUT: %Class: type = class_type @Class [concrete] // CHECK:STDOUT: %pattern_type.f15: type = pattern_type %Class [concrete] +// CHECK:STDOUT: %self.param_patt.c01: %pattern_type.f15 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.f26: %pattern_type.f15 = at_binding_pattern self, %self.param_patt.c01 [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %Int.type: type = generic_class_type @Int [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -75,8 +77,12 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %Class.F.type: type = fn_type @Class.F [concrete] // CHECK:STDOUT: %Class.F: %Class.F.type = struct_value () [concrete] +// CHECK:STDOUT: %self.param_patt.b2b: %pattern_type.f15 = ref_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.123: %pattern_type.f15 = at_binding_pattern self, %self.param_patt.b2b [concrete] // CHECK:STDOUT: %Class.G.type: type = fn_type @Class.G [concrete] // CHECK:STDOUT: %Class.G: %Class.G.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] @@ -94,6 +100,8 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: %Copy.WithSelf.Op.type.d09: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet) [concrete] // CHECK:STDOUT: %.7a6: type = fn_type_with_self_type %Copy.WithSelf.Op.type.d09, %Copy.facet [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.4f6, @Int.as.Copy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.f15 = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt.dde: %pattern_type.f15 = at_binding_pattern c, %c.param_patt [concrete] // CHECK:STDOUT: %Call.type: type = fn_type @Call [concrete] // CHECK:STDOUT: %Call: %Call.type = struct_value () [concrete] // CHECK:STDOUT: %CallAlias.type: type = fn_type @CallAlias [concrete] @@ -128,6 +136,8 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: %Destroy.Op.bound: = bound_method %.a72, %Destroy.Op.1a2547.4 [concrete] // CHECK:STDOUT: %CallWithRef.type: type = fn_type @CallWithRef [concrete] // CHECK:STDOUT: %CallWithRef: %CallWithRef.type = struct_value () [concrete] +// CHECK:STDOUT: %c.patt.345: %pattern_type.f15 = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.f15 = var_pattern %c.patt.345 [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.150: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.53a: %T.as.DefaultOrUnformed.impl.Op.type.150 = struct_value () [symbolic] @@ -136,13 +146,17 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.de4: %T.as.DefaultOrUnformed.impl.Op.type.cac = struct_value () [concrete] // CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %Class, (%DefaultOrUnformed.impl_witness.4e8) [concrete] // CHECK:STDOUT: %.d76: Core.Form = init_form %Class [concrete] +// CHECK:STDOUT: %return.param_patt.86e: %pattern_type.f15 = out_param_pattern [concrete] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function %T.as.DefaultOrUnformed.impl.Op.de4, @T.as.DefaultOrUnformed.impl.Op(%Class) [concrete] // CHECK:STDOUT: %ptr.7ee: type = ptr_type %Class [concrete] // CHECK:STDOUT: %pattern_type.8c5: type = pattern_type %ptr.7ee [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.8c5 = value_param_pattern [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.8c5 = at_binding_pattern p, %p.param_patt [concrete] // CHECK:STDOUT: %CallFThroughPointer.type: type = fn_type @CallFThroughPointer [concrete] // CHECK:STDOUT: %CallFThroughPointer: %CallFThroughPointer.type = struct_value () [concrete] // CHECK:STDOUT: %CallGThroughPointer.type: type = fn_type @CallGThroughPointer [concrete] // CHECK:STDOUT: %CallGThroughPointer: %CallGThroughPointer.type = struct_value () [concrete] +// CHECK:STDOUT: %return.patt.0b7: %pattern_type.f15 = return_slot_pattern %return.param_patt.86e, %Class [concrete] // CHECK:STDOUT: %Make.type: type = fn_type @Make [concrete] // CHECK:STDOUT: %Make: %Make.type = struct_value () [concrete] // CHECK:STDOUT: %CallFOnInitializingExpr.type: type = fn_type @CallFOnInitializingExpr [concrete] @@ -191,10 +205,10 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: %Class.F.decl: %Class.F.type = fn_decl @Class.F [concrete = constants.%Class.F] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.f15 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.f15 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc24 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.f15 = value_param_pattern [concrete = constants.%self.param_patt.c01] +// CHECK:STDOUT: %self.patt: %pattern_type.f15 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.f26] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc24 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc24: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc24: Core.Form = init_form %i32.loc24 [concrete = constants.%.795] @@ -205,10 +219,10 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: %return.loc24: ref %i32 = return_slot %return.param.loc24 // CHECK:STDOUT: } // CHECK:STDOUT: %Call.decl: %Call.type = fn_decl @Call [concrete = constants.%Call] { -// CHECK:STDOUT: %c.param_patt: %pattern_type.f15 = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.f15 = at_binding_pattern c, %c.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.f15 = value_param_pattern [concrete = constants.%c.param_patt] +// CHECK:STDOUT: %c.patt: %pattern_type.f15 = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt.dde] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc28: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -219,10 +233,10 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallAlias.decl: %CallAlias.type = fn_decl @CallAlias [concrete = constants.%CallAlias] { -// CHECK:STDOUT: %c.param_patt: %pattern_type.f15 = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.f15 = at_binding_pattern c, %c.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.f15 = value_param_pattern [concrete = constants.%c.param_patt] +// CHECK:STDOUT: %c.patt: %pattern_type.f15 = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt.dde] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc34: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -233,8 +247,8 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallOnConstBoundMethod.decl: %CallOnConstBoundMethod.type = fn_decl @CallOnConstBoundMethod [concrete = constants.%CallOnConstBoundMethod] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc38: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -242,8 +256,8 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallWithRef.decl: %CallWithRef.type = fn_decl @CallWithRef [concrete = constants.%CallWithRef] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc42: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -251,10 +265,10 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallFThroughPointer.decl: %CallFThroughPointer.type = fn_decl @CallFThroughPointer [concrete = constants.%CallFThroughPointer] { -// CHECK:STDOUT: %p.param_patt: %pattern_type.8c5 = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.8c5 = at_binding_pattern p, %p.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.8c5 = value_param_pattern [concrete = constants.%p.param_patt] +// CHECK:STDOUT: %p.patt: %pattern_type.8c5 = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc47_38: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -268,10 +282,10 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallGThroughPointer.decl: %CallGThroughPointer.type = fn_decl @CallGThroughPointer [concrete = constants.%CallGThroughPointer] { -// CHECK:STDOUT: %p.param_patt: %pattern_type.8c5 = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.8c5 = at_binding_pattern p, %p.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.8c5 = value_param_pattern [concrete = constants.%p.param_patt] +// CHECK:STDOUT: %p.patt: %pattern_type.8c5 = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc51_38: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -285,8 +299,8 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Make.decl: %Make.type = fn_decl @Make [concrete = constants.%Make] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.f15 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.f15 = return_slot_pattern %return.param_patt, %Class.ref [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.f15 = out_param_pattern [concrete = constants.%return.param_patt.86e] +// CHECK:STDOUT: %return.patt: %pattern_type.f15 = return_slot_pattern %return.param_patt, %Class.ref [concrete = constants.%return.patt.0b7] // CHECK:STDOUT: } { // CHECK:STDOUT: %Class.ref: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] // CHECK:STDOUT: %.loc55: Core.Form = init_form %Class.ref [concrete = constants.%.d76] @@ -294,8 +308,8 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: %return: ref %Class = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallFOnInitializingExpr.decl: %CallFOnInitializingExpr.type = fn_decl @CallFOnInitializingExpr [concrete = constants.%CallFOnInitializingExpr] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc57: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -303,8 +317,8 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallGOnInitializingExpr.decl: %CallGOnInitializingExpr.type = fn_decl @CallGOnInitializingExpr [concrete = constants.%CallGOnInitializingExpr] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc61: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -315,10 +329,10 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: class @Class { // CHECK:STDOUT: %Class.F.decl: %Class.F.type = fn_decl @Class.F [concrete = constants.%Class.F] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.f15 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.f15 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc24 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.f15 = value_param_pattern [concrete = constants.%self.param_patt.c01] +// CHECK:STDOUT: %self.patt: %pattern_type.f15 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.f26] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc24 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc16: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc16: Core.Form = init_form %i32.loc16 [concrete = constants.%.795] @@ -329,10 +343,10 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: %return.loc16: ref %i32 = return_slot %return.param.loc16 // CHECK:STDOUT: } // CHECK:STDOUT: %Class.G.decl: %Class.G.type = fn_decl @Class.G [concrete = constants.%Class.G] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.f15 = ref_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.f15 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.f15 = ref_param_pattern [concrete = constants.%self.param_patt.b2b] +// CHECK:STDOUT: %self.patt: %pattern_type.f15 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.123] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc17: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -435,8 +449,8 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: fn @CallWithRef() -> out %return.param: %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.f15 = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.f15 = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.f15 = ref_binding_pattern c [concrete = constants.%c.patt.345] +// CHECK:STDOUT: %c.var_patt: %pattern_type.f15 = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %Class = var %c.var_patt // CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%Class, (constants.%DefaultOrUnformed.impl_witness.4e8) [concrete = constants.%DefaultOrUnformed.facet] diff --git a/toolchain/check/testdata/class/method/static_method.carbon b/toolchain/check/testdata/class/method/static_method.carbon index 5c6c5863a95d..0b9eb1dbffdd 100644 --- a/toolchain/check/testdata/class/method/static_method.carbon +++ b/toolchain/check/testdata/class/method/static_method.carbon @@ -32,6 +32,8 @@ fn Run() -> i32 { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %Class.F.type: type = fn_type @Class.F [concrete] // CHECK:STDOUT: %Class.F: %Class.F.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] @@ -39,6 +41,8 @@ fn Run() -> i32 { // CHECK:STDOUT: %Run.type: type = fn_type @Run [concrete] // CHECK:STDOUT: %Run: %Run.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.f15: type = pattern_type %Class [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.f15 = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.f15 = var_pattern %c.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.150: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] @@ -77,8 +81,8 @@ fn Run() -> i32 { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: %Run.decl: %Run.type = fn_decl @Run [concrete = constants.%Run] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc19: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -89,8 +93,8 @@ fn Run() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: class @Class { // CHECK:STDOUT: %Class.F.decl: %Class.F.type = fn_decl @Class.F [concrete = constants.%Class.F] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc16: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -110,8 +114,8 @@ fn Run() -> i32 { // CHECK:STDOUT: fn @Run() -> out %return.param: %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.f15 = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.f15 = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.f15 = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type.f15 = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %Class = var %c.var_patt // CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%Class, (constants.%DefaultOrUnformed.impl_witness.4e8) [concrete = constants.%DefaultOrUnformed.facet] diff --git a/toolchain/check/testdata/class/method/virtual.carbon b/toolchain/check/testdata/class/method/virtual.carbon index 611e56d818ee..47f7dad8c8b4 100644 --- a/toolchain/check/testdata/class/method/virtual.carbon +++ b/toolchain/check/testdata/class/method/virtual.carbon @@ -427,6 +427,8 @@ class D1 { } // --- fail_impl_generic_specifically_mismatch.carbon +// CHECK:STDERR: fail_impl_generic_specifically_mismatch.carbon: error: cannot implicitly convert expression of type `T1*` to `T2*` [ConversionFailure] +// CHECK:STDERR: fail_impl_generic_specifically_mismatch.carbon: note: type `T1*` does not implement interface `Core.ImplicitAs(T2*)` [MissingImplInMemberAccessInContext] library "[[@TEST_NAME]]"; @@ -434,12 +436,6 @@ class T1; class T2; base class Base(T:! type) { - // CHECK:STDERR: fail_impl_generic_specifically_mismatch.carbon:[[@LINE+6]]:36: error: cannot implicitly convert expression of type `T1*` to `T2*` [ConversionFailure] - // CHECK:STDERR: virtual fn F(unused self, unused t: T1*) { } - // CHECK:STDERR: ^~~~~~ - // CHECK:STDERR: fail_impl_generic_specifically_mismatch.carbon:[[@LINE+3]]:36: note: type `T1*` does not implement interface `Core.ImplicitAs(T2*)` [MissingImplInMemberAccessInContext] - // CHECK:STDERR: virtual fn F(unused self, unused t: T1*) { } - // CHECK:STDERR: ^~~~~~ virtual fn F(unused self, unused t: T1*) { } } @@ -456,16 +452,12 @@ class D1 { } // --- fail_impl_generic_generic_mismatch.carbon +// CHECK:STDERR: fail_impl_generic_generic_mismatch.carbon: error: cannot implicitly convert expression of type `T*` to `T` [ConversionFailure] +// CHECK:STDERR: fail_impl_generic_generic_mismatch.carbon: note: type `T*` does not implement interface `Core.ImplicitAs(T)` [MissingImplInMemberAccessInContext] library "[[@TEST_NAME]]"; abstract class Base(T:! type) { - // CHECK:STDERR: fail_impl_generic_generic_mismatch.carbon:[[@LINE+6]]:36: error: cannot implicitly convert expression of type `T*` to `T` [ConversionFailure] - // CHECK:STDERR: virtual fn F(unused self, unused t: T*) { } - // CHECK:STDERR: ^~~~~ - // CHECK:STDERR: fail_impl_generic_generic_mismatch.carbon:[[@LINE+3]]:36: note: type `T*` does not implement interface `Core.ImplicitAs(T)` [MissingImplInMemberAccessInContext] - // CHECK:STDERR: virtual fn F(unused self, unused t: T*) { } - // CHECK:STDERR: ^~~~~ virtual fn F(unused self, unused t: T*) { } } class Derived(T:! type) { @@ -558,6 +550,8 @@ class T2(G2:! type) { // CHECK:STDOUT: constants { // CHECK:STDOUT: %Base: type = class_type @Base [concrete] // CHECK:STDOUT: %pattern_type.b8d: type = pattern_type %Base [concrete] +// CHECK:STDOUT: %self.param_patt.d44: %pattern_type.b8d = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.62b: %pattern_type.b8d = at_binding_pattern self, %self.param_patt.d44 [concrete] // CHECK:STDOUT: %Base.H.type: type = fn_type @Base.H [concrete] // CHECK:STDOUT: %Base.H: %Base.H.type = struct_value () [concrete] // CHECK:STDOUT: %ptr: type = ptr_type [concrete] @@ -566,6 +560,8 @@ class T2(G2:! type) { // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.vptr [concrete] // CHECK:STDOUT: %Abstract: type = class_type @Abstract [concrete] // CHECK:STDOUT: %pattern_type.0e2: type = pattern_type %Abstract [concrete] +// CHECK:STDOUT: %self.param_patt.950: %pattern_type.0e2 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.64e: %pattern_type.0e2 = at_binding_pattern self, %self.param_patt.950 [concrete] // CHECK:STDOUT: %Abstract.J.type: type = fn_type @Abstract.J [concrete] // CHECK:STDOUT: %Abstract.J: %Abstract.J.type = struct_value () [concrete] // CHECK:STDOUT: %Abstract.K.type: type = fn_type @Abstract.K [concrete] @@ -580,8 +576,8 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: class @Base { // CHECK:STDOUT: %Base.H.decl: %Base.H.type = fn_decl @Base.H [concrete = constants.%Base.H] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.b8d = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.b8d = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.b8d = value_param_pattern [concrete = constants.%self.param_patt.d44] +// CHECK:STDOUT: %self.patt: %pattern_type.b8d = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.62b] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %Base = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] @@ -599,16 +595,16 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: class @Abstract { // CHECK:STDOUT: %Abstract.J.decl: %Abstract.J.type = fn_decl @Abstract.J [concrete = constants.%Abstract.J] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.0e2 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.0e2 = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.0e2 = value_param_pattern [concrete = constants.%self.param_patt.950] +// CHECK:STDOUT: %self.patt: %pattern_type.0e2 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.64e] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %Abstract = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract [concrete = constants.%Abstract] // CHECK:STDOUT: %self: %Abstract = value_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Abstract.K.decl: %Abstract.K.type = fn_decl @Abstract.K [concrete = constants.%Abstract.K] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.0e2 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.0e2 = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.0e2 = value_param_pattern [concrete = constants.%self.param_patt.950] +// CHECK:STDOUT: %self.patt: %pattern_type.0e2 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.64e] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %Abstract = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract [concrete = constants.%Abstract] @@ -649,6 +645,8 @@ class T2(G2:! type) { // CHECK:STDOUT: %struct_type.vptr: type = struct_type {.: %ptr.454} [concrete] // CHECK:STDOUT: %Derived.elem: type = unbound_element_type %Derived, %Base [concrete] // CHECK:STDOUT: %pattern_type.746: type = pattern_type %Derived [concrete] +// CHECK:STDOUT: %self.param_patt.138: %pattern_type.746 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.727: %pattern_type.746 = at_binding_pattern self, %self.param_patt.138 [concrete] // CHECK:STDOUT: %Derived.H.type.1f42d4.1: type = fn_type @Derived.H.loc9_22.1 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Derived.H.a6796b.1: %Derived.H.type.1f42d4.1 = struct_value () [concrete] @@ -659,6 +657,8 @@ class T2(G2:! type) { // CHECK:STDOUT: %Derived.vtable_decl: ref %ptr.454 = vtable_decl @Derived.vtable [concrete] // CHECK:STDOUT: %struct_type.base.507: type = struct_type {.base: %Base} [concrete] // CHECK:STDOUT: %complete_type.d6b: = complete_type_witness %struct_type.base.507 [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.746 = ref_binding_pattern d [concrete] +// CHECK:STDOUT: %d.var_patt: %pattern_type.746 = var_pattern %d.patt [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.f5e: type = struct_type {.base: %empty_struct_type} [concrete] @@ -691,8 +691,8 @@ class T2(G2:! type) { // CHECK:STDOUT: %Base.ref: type = name_ref Base, imports.%Modifiers.Base [concrete = constants.%Base] // CHECK:STDOUT: %.loc8: %Derived.elem = base_decl %Base.ref, element0 [concrete] // CHECK:STDOUT: %Derived.H.decl.loc9_22.1: %Derived.H.type.1f42d4.1 = fn_decl @Derived.H.loc9_22.1 [concrete = constants.%Derived.H.a6796b.1] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.746 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.746 = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.746 = value_param_pattern [concrete = constants.%self.param_patt.138] +// CHECK:STDOUT: %self.patt: %pattern_type.746 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.727] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %Derived = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] @@ -730,7 +730,7 @@ class T2(G2:! type) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %H.ref: %Derived.H.type.1f42d4.1 = name_ref H, @Derived.%Derived.H.decl.loc9_22.1 [concrete = constants.%Derived.H.a6796b.1] // CHECK:STDOUT: -// CHECK:STDOUT: %.loc9_22.1: ref %Derived = enclosing_class_access %.1, element0 +// CHECK:STDOUT: %.loc9_22.1: ref %Derived = enclosing_class_access %.2, element0 // CHECK:STDOUT: %.loc9_22.2: %Derived = acquire_value %.loc9_22.1 // CHECK:STDOUT: %Derived.H.bound: = bound_method %.loc9_22.2, %H.ref // CHECK:STDOUT: %Derived.H.call: init %empty_tuple.type = call %Derived.H.bound(%.loc9_22.2) @@ -740,8 +740,8 @@ class T2(G2:! type) { // CHECK:STDOUT: fn @Use() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.746 = ref_binding_pattern d [concrete] -// CHECK:STDOUT: %d.var_patt: %pattern_type.746 = var_pattern %d.patt [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.746 = ref_binding_pattern d [concrete = constants.%d.patt] +// CHECK:STDOUT: %d.var_patt: %pattern_type.746 = var_pattern %d.patt [concrete = constants.%d.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %Derived = var %d.var_patt // CHECK:STDOUT: %.loc15_37.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] @@ -798,6 +798,8 @@ class T2(G2:! type) { // CHECK:STDOUT: %ptr.454: type = ptr_type [concrete] // CHECK:STDOUT: %struct_type.vptr: type = struct_type {.: %ptr.454} [concrete] // CHECK:STDOUT: %pattern_type.b8d: type = pattern_type %Base [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.b8d = ref_binding_pattern v [concrete] +// CHECK:STDOUT: %v.var_patt: %pattern_type.b8d = var_pattern %v.patt [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %Base.H.type: type = fn_type @Base.H [concrete] @@ -823,8 +825,8 @@ class T2(G2:! type) { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %pattern_type.b8d = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: %pattern_type.b8d = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.b8d = ref_binding_pattern v [concrete = constants.%v.patt] +// CHECK:STDOUT: %v.var_patt: %pattern_type.b8d = var_pattern %v.patt [concrete = constants.%v.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %Base = var %v.var_patt // CHECK:STDOUT: %.loc8_35.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] @@ -883,6 +885,8 @@ class T2(G2:! type) { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39, @Core.IntLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete] // CHECK:STDOUT: %bound_method.763: = bound_method %int_3.1ba, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_3.410: %i32 = int_value 3 [concrete] +// CHECK:STDOUT: %b1.patt: %pattern_type.912 = ref_binding_pattern b1 [concrete] +// CHECK:STDOUT: %b1.var_patt: %pattern_type.912 = var_pattern %b1.patt [concrete] // CHECK:STDOUT: %struct_type.m2.m1.810: type = struct_type {.m2: %i32, .m1: %i32} [concrete] // CHECK:STDOUT: %Base.vtable_ptr: ref %ptr.454 = vtable_ptr @Base.vtable [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -895,6 +899,8 @@ class T2(G2:! type) { // CHECK:STDOUT: %Copy.WithSelf.Op.type.d09: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet) [concrete] // CHECK:STDOUT: %.7a6: type = fn_type_with_self_type %Copy.WithSelf.Op.type.d09, %Copy.facet [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.4f6, @Int.as.Copy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %b2.patt: %pattern_type.912 = ref_binding_pattern b2 [concrete] +// CHECK:STDOUT: %b2.var_patt: %pattern_type.912 = var_pattern %b2.patt [concrete] // CHECK:STDOUT: %int_5.64b: Core.IntLiteral = int_value 5 [concrete] // CHECK:STDOUT: %struct_type.m2.m1.5f2: type = struct_type {.m2: Core.IntLiteral, .m1: Core.IntLiteral} [concrete] // CHECK:STDOUT: %struct: %struct_type.m2.m1.5f2 = struct_value (%int_3.1ba, %int_5.64b) [concrete] @@ -921,8 +927,8 @@ class T2(G2:! type) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b1.patt: %pattern_type.912 = ref_binding_pattern b1 [concrete] -// CHECK:STDOUT: %b1.var_patt: %pattern_type.912 = var_pattern %b1.patt [concrete] +// CHECK:STDOUT: %b1.patt: %pattern_type.912 = ref_binding_pattern b1 [concrete = constants.%b1.patt] +// CHECK:STDOUT: %b1.var_patt: %pattern_type.912 = var_pattern %b1.patt [concrete = constants.%b1.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b1.var: ref %Base = var %b1.var_patt // CHECK:STDOUT: %i.ref.loc14_25: ref %i32 = name_ref i, %i @@ -953,8 +959,8 @@ class T2(G2:! type) { // CHECK:STDOUT: %Base.ref.loc14: type = name_ref Base, file.%Base.decl [concrete = constants.%Base] // CHECK:STDOUT: %b1: ref %Base = ref_binding b1, %b1.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b2.patt: %pattern_type.912 = ref_binding_pattern b2 [concrete] -// CHECK:STDOUT: %b2.var_patt: %pattern_type.912 = var_pattern %b2.patt [concrete] +// CHECK:STDOUT: %b2.patt: %pattern_type.912 = ref_binding_pattern b2 [concrete = constants.%b2.patt] +// CHECK:STDOUT: %b2.var_patt: %pattern_type.912 = var_pattern %b2.patt [concrete = constants.%b2.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b2.var: ref %Base = var %b2.var_patt // CHECK:STDOUT: %int_3.loc15: Core.IntLiteral = int_value 3 [concrete = constants.%int_3.1ba] @@ -1021,6 +1027,8 @@ class T2(G2:! type) { // CHECK:STDOUT: %AbstractIntermediate: type = class_type @AbstractIntermediate [concrete] // CHECK:STDOUT: %Derived: type = class_type @Derived [concrete] // CHECK:STDOUT: %pattern_type.746: type = pattern_type %Derived [concrete] +// CHECK:STDOUT: %self.param_patt.138: %pattern_type.746 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.727: %pattern_type.746 = at_binding_pattern self, %self.param_patt.138 [concrete] // CHECK:STDOUT: %Derived.F.type.48cdab.1: type = fn_type @Derived.F.loc15_22.1 [concrete] // CHECK:STDOUT: %Derived.F.bd5be1.1: %Derived.F.type.48cdab.1 = struct_value () [concrete] // CHECK:STDOUT: %Derived.F.type.48cdab.2: type = fn_type @Derived.F.loc15_22.2 [concrete] @@ -1030,8 +1038,8 @@ class T2(G2:! type) { // CHECK:STDOUT: class @Derived { // CHECK:STDOUT: // CHECK:STDOUT: %Derived.F.decl.loc15_22.1: %Derived.F.type.48cdab.1 = fn_decl @Derived.F.loc15_22.1 [concrete = constants.%Derived.F.bd5be1.1] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.746 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.746 = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.746 = value_param_pattern [concrete = constants.%self.param_patt.138] +// CHECK:STDOUT: %self.patt: %pattern_type.746 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.727] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %Derived = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] @@ -1072,7 +1080,7 @@ class T2(G2:! type) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %F.ref: %Derived.F.type.48cdab.1 = name_ref F, @Derived.%Derived.F.decl.loc15_22.1 [concrete = constants.%Derived.F.bd5be1.1] // CHECK:STDOUT: -// CHECK:STDOUT: %.loc15_22.1: ref %AbstractIntermediate = enclosing_class_access %.loc5, element0 +// CHECK:STDOUT: %.loc15_22.1: ref %AbstractIntermediate = enclosing_class_access %.2, element0 // CHECK:STDOUT: %.loc15_22.2: ref %Derived = enclosing_class_access %.loc15_22.1, element0 // CHECK:STDOUT: %.loc15_22.3: %Derived = acquire_value %.loc15_22.2 // CHECK:STDOUT: %Derived.F.bound: = bound_method %.loc15_22.3, %F.ref @@ -1090,6 +1098,8 @@ class T2(G2:! type) { // CHECK:STDOUT: %VirtualIntermediate: type = class_type @VirtualIntermediate [concrete] // CHECK:STDOUT: %Derived: type = class_type @Derived [concrete] // CHECK:STDOUT: %pattern_type.746: type = pattern_type %Derived [concrete] +// CHECK:STDOUT: %self.param_patt.138: %pattern_type.746 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.727: %pattern_type.746 = at_binding_pattern self, %self.param_patt.138 [concrete] // CHECK:STDOUT: %Derived.F.type.48cdab.1: type = fn_type @Derived.F.loc15_22.1 [concrete] // CHECK:STDOUT: %Derived.F.bd5be1.1: %Derived.F.type.48cdab.1 = struct_value () [concrete] // CHECK:STDOUT: %Derived.F.type.48cdab.2: type = fn_type @Derived.F.loc15_22.2 [concrete] @@ -1099,8 +1109,8 @@ class T2(G2:! type) { // CHECK:STDOUT: class @Derived { // CHECK:STDOUT: // CHECK:STDOUT: %Derived.F.decl.loc15_22.1: %Derived.F.type.48cdab.1 = fn_decl @Derived.F.loc15_22.1 [concrete = constants.%Derived.F.bd5be1.1] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.746 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.746 = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.746 = value_param_pattern [concrete = constants.%self.param_patt.138] +// CHECK:STDOUT: %self.patt: %pattern_type.746 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.727] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %Derived = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] @@ -1141,7 +1151,7 @@ class T2(G2:! type) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %F.ref: %Derived.F.type.48cdab.1 = name_ref F, @Derived.%Derived.F.decl.loc15_22.1 [concrete = constants.%Derived.F.bd5be1.1] // CHECK:STDOUT: -// CHECK:STDOUT: %.loc15_22.1: ref %VirtualIntermediate = enclosing_class_access %.loc5, element0 +// CHECK:STDOUT: %.loc15_22.1: ref %VirtualIntermediate = enclosing_class_access %.2, element0 // CHECK:STDOUT: %.loc15_22.2: ref %Derived = enclosing_class_access %.loc15_22.1, element0 // CHECK:STDOUT: %.loc15_22.3: %Derived = acquire_value %.loc15_22.2 // CHECK:STDOUT: %Derived.F.bound: = bound_method %.loc15_22.3, %F.ref @@ -1218,7 +1228,7 @@ class T2(G2:! type) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %F.ref: %Derived.F.type.48cdab.1 = name_ref F, @Derived.%Derived.F.decl.loc23_28.1 [concrete = constants.%Derived.F.bd5be1.1] // CHECK:STDOUT: -// CHECK:STDOUT: %.loc23_28.1: ref %Derived = enclosing_class_access %.loc17_16, element0 +// CHECK:STDOUT: %.loc23_28.1: ref %Derived = enclosing_class_access %.3, element0 // CHECK:STDOUT: %.loc23_28.2: %Derived = acquire_value %.loc23_28.1 // CHECK:STDOUT: %Derived.F.bound: = bound_method %.loc23_28.2, %F.ref // CHECK:STDOUT: %.loc23_28.3: ref %T2 = temporary_storage @@ -1228,7 +1238,7 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: %.loc23_28.4: ref %T2 = temporary %.loc23_28.3, %Derived.F.call // CHECK:STDOUT: %.loc23_28.5: %T2 = acquire_value %.loc23_28.4 -// CHECK:STDOUT: %T2.as.ImplicitAs.impl.Convert.call: init %T1 to %.loc17_25 = call %bound_method(%.loc23_28.5) +// CHECK:STDOUT: %T2.as.ImplicitAs.impl.Convert.call: init %T1 to %.4 = call %bound_method(%.loc23_28.5) // CHECK:STDOUT: %.loc23_28.6: init %T1 = converted %Derived.F.call, %T2.as.ImplicitAs.impl.Convert.call // CHECK:STDOUT: %Destroy.Op.bound: = bound_method %.loc23_28.4, constants.%Destroy.Op.1a2547.2 // CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%.loc23_28.4) @@ -1245,9 +1255,13 @@ class T2(G2:! type) { // CHECK:STDOUT: --- generic_with_virtual.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T1: type = class_type @T1, @T1(%T) [symbolic] // CHECK:STDOUT: %pattern_type.c79: type = pattern_type %T1 [symbolic] +// CHECK:STDOUT: %self.param_patt: %pattern_type.c79 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt: %pattern_type.c79 = at_binding_pattern self, %self.param_patt [symbolic] // CHECK:STDOUT: %T1.F.type: type = fn_type @T1.F, @T1(%T) [symbolic] // CHECK:STDOUT: %T1.F: %T1.F.type = struct_value () [symbolic] // CHECK:STDOUT: %T1.F.specific_fn: = specific_function %T1.F, @T1.F(%T) [symbolic] @@ -1264,8 +1278,8 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %T1.F.decl: @T1.%T1.F.type (%T1.F.type) = fn_decl @T1.F [symbolic = @T1.%T1.F (constants.%T1.F)] { -// CHECK:STDOUT: %self.param_patt: @T1.F.%pattern_type (%pattern_type.c79) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @T1.F.%pattern_type (%pattern_type.c79) = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc6_23.1: @T1.F.%pattern_type (%pattern_type.c79) = value_param_pattern [symbolic = %self.param_patt.loc6_23.2 (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt.loc6_23.1: @T1.F.%pattern_type (%pattern_type.c79) = at_binding_pattern self, %self.param_patt.loc6_23.1 [symbolic = %self.patt.loc6_23.2 (constants.%self.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @T1.F.%T1 (%T1) = value_param call_param0 // CHECK:STDOUT: %.loc6_23.1: type = splice_block %Self.ref [symbolic = %T1 (constants.%T1)] { @@ -1292,6 +1306,8 @@ class T2(G2:! type) { // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %T1: type = class_type @T1, @T1(%T) [symbolic = %T1 (constants.%T1)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T1 [symbolic = %pattern_type (constants.%pattern_type.c79)] +// CHECK:STDOUT: %self.param_patt.loc6_23.2: @T1.F.%pattern_type (%pattern_type.c79) = value_param_pattern [symbolic = %self.param_patt.loc6_23.2 (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt.loc6_23.2: @T1.F.%pattern_type (%pattern_type.c79) = at_binding_pattern self, %self.param_patt.loc6_23.2 [symbolic = %self.patt.loc6_23.2 (constants.%self.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T1 [symbolic = %require_complete (constants.%require_complete)] @@ -1303,6 +1319,7 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @T1(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_16.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_16.1 => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1315,6 +1332,8 @@ class T2(G2:! type) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %T1 => constants.%T1 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.c79 +// CHECK:STDOUT: %self.param_patt.loc6_23.2 => constants.%self.param_patt +// CHECK:STDOUT: %self.patt.loc6_23.2 => constants.%self.patt // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete @@ -1323,10 +1342,16 @@ class T2(G2:! type) { // CHECK:STDOUT: --- with_dependent_arg.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T1: type = class_type @T1, @T1(%T) [symbolic] // CHECK:STDOUT: %pattern_type.c79: type = pattern_type %T1 [symbolic] +// CHECK:STDOUT: %self.param_patt: %pattern_type.c79 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt: %pattern_type.c79 = at_binding_pattern self, %self.param_patt [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %t.param_patt: %pattern_type.51d = value_param_pattern [symbolic] +// CHECK:STDOUT: %t.patt: %pattern_type.51d = at_binding_pattern t, %t.param_patt [symbolic] // CHECK:STDOUT: %T1.F.type: type = fn_type @T1.F, @T1(%T) [symbolic] // CHECK:STDOUT: %T1.F: %T1.F.type = struct_value () [symbolic] // CHECK:STDOUT: %T1.F.specific_fn: = specific_function %T1.F, @T1.F(%T) [symbolic] @@ -1344,10 +1369,10 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %T1.F.decl: @T1.%T1.F.type (%T1.F.type) = fn_decl @T1.F [symbolic = @T1.%T1.F (constants.%T1.F)] { -// CHECK:STDOUT: %self.param_patt: @T1.F.%pattern_type.loc6_23 (%pattern_type.c79) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @T1.F.%pattern_type.loc6_23 (%pattern_type.c79) = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %t.param_patt: @T1.F.%pattern_type.loc6_37 (%pattern_type.51d) = value_param_pattern [concrete] -// CHECK:STDOUT: %t.patt: @T1.F.%pattern_type.loc6_37 (%pattern_type.51d) = at_binding_pattern t, %t.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc6_23.1: @T1.F.%pattern_type.loc6_23 (%pattern_type.c79) = value_param_pattern [symbolic = %self.param_patt.loc6_23.2 (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt.loc6_23.1: @T1.F.%pattern_type.loc6_23 (%pattern_type.c79) = at_binding_pattern self, %self.param_patt.loc6_23.1 [symbolic = %self.patt.loc6_23.2 (constants.%self.patt)] +// CHECK:STDOUT: %t.param_patt.loc6_37.1: @T1.F.%pattern_type.loc6_37 (%pattern_type.51d) = value_param_pattern [symbolic = %t.param_patt.loc6_37.2 (constants.%t.param_patt)] +// CHECK:STDOUT: %t.patt.loc6_37.1: @T1.F.%pattern_type.loc6_37 (%pattern_type.51d) = at_binding_pattern t, %t.param_patt.loc6_37.1 [symbolic = %t.patt.loc6_37.2 (constants.%t.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @T1.F.%T1 (%T1) = value_param call_param0 // CHECK:STDOUT: %.loc6_23.1: type = splice_block %Self.ref [symbolic = %T1 (constants.%T1)] { @@ -1378,7 +1403,11 @@ class T2(G2:! type) { // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %T1: type = class_type @T1, @T1(%T) [symbolic = %T1 (constants.%T1)] // CHECK:STDOUT: %pattern_type.loc6_23: type = pattern_type %T1 [symbolic = %pattern_type.loc6_23 (constants.%pattern_type.c79)] +// CHECK:STDOUT: %self.param_patt.loc6_23.2: @T1.F.%pattern_type.loc6_23 (%pattern_type.c79) = value_param_pattern [symbolic = %self.param_patt.loc6_23.2 (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt.loc6_23.2: @T1.F.%pattern_type.loc6_23 (%pattern_type.c79) = at_binding_pattern self, %self.param_patt.loc6_23.2 [symbolic = %self.patt.loc6_23.2 (constants.%self.patt)] // CHECK:STDOUT: %pattern_type.loc6_37: type = pattern_type %T [symbolic = %pattern_type.loc6_37 (constants.%pattern_type.51d)] +// CHECK:STDOUT: %t.param_patt.loc6_37.2: @T1.F.%pattern_type.loc6_37 (%pattern_type.51d) = value_param_pattern [symbolic = %t.param_patt.loc6_37.2 (constants.%t.param_patt)] +// CHECK:STDOUT: %t.patt.loc6_37.2: @T1.F.%pattern_type.loc6_37 (%pattern_type.51d) = at_binding_pattern t, %t.param_patt.loc6_37.2 [symbolic = %t.patt.loc6_37.2 (constants.%t.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc6_23: = require_complete_type %T1 [symbolic = %require_complete.loc6_23 (constants.%require_complete.ce3)] @@ -1391,6 +1420,7 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @T1(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_16.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_16.1 => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1403,7 +1433,11 @@ class T2(G2:! type) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %T1 => constants.%T1 // CHECK:STDOUT: %pattern_type.loc6_23 => constants.%pattern_type.c79 +// CHECK:STDOUT: %self.param_patt.loc6_23.2 => constants.%self.param_patt +// CHECK:STDOUT: %self.patt.loc6_23.2 => constants.%self.patt // CHECK:STDOUT: %pattern_type.loc6_37 => constants.%pattern_type.51d +// CHECK:STDOUT: %t.param_patt.loc6_37.2 => constants.%t.param_patt +// CHECK:STDOUT: %t.patt.loc6_37.2 => constants.%t.patt // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc6_23 => constants.%require_complete.ce3 @@ -1421,7 +1455,11 @@ class T2(G2:! type) { // CHECK:STDOUT: %Base.5b2: type = class_type @Base, @Base(%T1) [concrete] // CHECK:STDOUT: %ptr.2ee: type = ptr_type %Base.5b2 [concrete] // CHECK:STDOUT: %pattern_type.e0f: type = pattern_type %ptr.2ee [concrete] +// CHECK:STDOUT: %t.param_patt.cd0: %pattern_type.e0f = value_param_pattern [concrete] // CHECK:STDOUT: %pattern_type.c35: type = pattern_type %D1 [concrete] +// CHECK:STDOUT: %self.param_patt.fc7: %pattern_type.c35 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.1b8: %pattern_type.c35 = at_binding_pattern self, %self.param_patt.fc7 [concrete] +// CHECK:STDOUT: %t.patt.27f644.2: %pattern_type.e0f = at_binding_pattern t, %t.param_patt.cd0 [concrete] // CHECK:STDOUT: %D1.F.type.48cdab.1: type = fn_type @D1.F.loc11_51.1 [concrete] // CHECK:STDOUT: %D1.F.bd5be1.1: %D1.F.type.48cdab.1 = struct_value () [concrete] // CHECK:STDOUT: %D1.F.type.48cdab.2: type = fn_type @D1.F.loc11_51.2 [concrete] @@ -1431,10 +1469,10 @@ class T2(G2:! type) { // CHECK:STDOUT: class @D1 { // CHECK:STDOUT: // CHECK:STDOUT: %D1.F.decl.loc11_51.1: %D1.F.type.48cdab.1 = fn_decl @D1.F.loc11_51.1 [concrete = constants.%D1.F.bd5be1.1] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.c35 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.c35 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %t.param_patt: %pattern_type.e0f = value_param_pattern [concrete] -// CHECK:STDOUT: %t.patt: %pattern_type.e0f = at_binding_pattern t, %t.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.c35 = value_param_pattern [concrete = constants.%self.param_patt.fc7] +// CHECK:STDOUT: %self.patt: %pattern_type.c35 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.1b8] +// CHECK:STDOUT: %t.param_patt: %pattern_type.e0f = value_param_pattern [concrete = constants.%t.param_patt.cd0] +// CHECK:STDOUT: %t.patt: %pattern_type.e0f = at_binding_pattern t, %t.param_patt [concrete = constants.%t.patt.27f644.2] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %D1 = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D1 [concrete = constants.%D1] @@ -1483,7 +1521,7 @@ class T2(G2:! type) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %F.ref: %D1.F.type.48cdab.1 = name_ref F, @D1.%D1.F.decl.loc11_51.1 [concrete = constants.%D1.F.bd5be1.1] // CHECK:STDOUT: -// CHECK:STDOUT: %.loc11_51.1: ref %D1 = enclosing_class_access %.loc5, element0 +// CHECK:STDOUT: %.loc11_51.1: ref %D1 = enclosing_class_access %.3, element0 // CHECK:STDOUT: %.loc11_51.2: %D1 = acquire_value %.loc11_51.1 // CHECK:STDOUT: %D1.F.bound: = bound_method %.loc11_51.2, %F.ref // CHECK:STDOUT: %D1.F.call: init %empty_tuple.type = call %D1.F.bound(%.loc11_51.2, %t.param) @@ -1493,16 +1531,26 @@ class T2(G2:! type) { // CHECK:STDOUT: --- impl_generic_generic.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Derived: type = class_type @Derived, @Derived(%T) [symbolic] // CHECK:STDOUT: %ptr.e8f: type = ptr_type %T [symbolic] // CHECK:STDOUT: %Base.99a: type = class_type @Base, @Base(%ptr.e8f) [symbolic] // CHECK:STDOUT: %pattern_type.bdc: type = pattern_type %Base.99a [symbolic] +// CHECK:STDOUT: %self.param_patt.c5a: %pattern_type.bdc = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.489: %pattern_type.bdc = at_binding_pattern self, %self.param_patt.c5a [symbolic] // CHECK:STDOUT: %pattern_type.4f4: type = pattern_type %ptr.e8f [symbolic] +// CHECK:STDOUT: %t.param_patt.47b: %pattern_type.4f4 = value_param_pattern [symbolic] +// CHECK:STDOUT: %t.patt.14f0ed.1: %pattern_type.4f4 = at_binding_pattern t, %t.param_patt.47b [symbolic] // CHECK:STDOUT: %require_complete.29f: = require_complete_type %Base.99a [symbolic] // CHECK:STDOUT: %Derived.elem: type = unbound_element_type %Derived, %Base.99a [symbolic] // CHECK:STDOUT: %pattern_type.839: type = pattern_type %Derived [symbolic] +// CHECK:STDOUT: %self.param_patt.c15: %pattern_type.839 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.62f3ac.1: %pattern_type.839 = at_binding_pattern self, %self.param_patt.c15 [symbolic] +// CHECK:STDOUT: %t.patt.14f0ed.2: %pattern_type.4f4 = at_binding_pattern t, %t.param_patt.47b [symbolic] +// CHECK:STDOUT: %self.patt.62f3ac.2: %pattern_type.839 = at_binding_pattern self, %self.param_patt.c15 [symbolic] // CHECK:STDOUT: %Derived.F.type.77405e.1: type = fn_type @Derived.F.loc10_44.1, @Derived(%T) [symbolic] // CHECK:STDOUT: %Derived.F.d85493.1: %Derived.F.type.77405e.1 = struct_value () [symbolic] // CHECK:STDOUT: %Derived.F.type.77405e.2: type = fn_type @Derived.F.loc10_44.2, @Derived(%T) [symbolic] @@ -1529,10 +1577,10 @@ class T2(G2:! type) { // CHECK:STDOUT: class { // CHECK:STDOUT: // CHECK:STDOUT: %Derived.F.decl.loc10_44.1: @Derived.%Derived.F.type.loc10_44.1 (%Derived.F.type.77405e.1) = fn_decl @Derived.F.loc10_44.1 [symbolic = @Derived.%Derived.F.loc10_44.1 (constants.%Derived.F.d85493.1)] { -// CHECK:STDOUT: %self.param_patt: @Derived.F.loc10_44.1.%pattern_type.loc10_24 (%pattern_type.839) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @Derived.F.loc10_44.1.%pattern_type.loc10_24 (%pattern_type.839) = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %t.param_patt: @Derived.F.loc10_44.1.%pattern_type.loc10_38 (%pattern_type.4f4) = value_param_pattern [concrete] -// CHECK:STDOUT: %t.patt: @Derived.F.loc10_44.1.%pattern_type.loc10_38 (%pattern_type.4f4) = at_binding_pattern t, %t.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc10_24.1: @Derived.F.loc10_44.1.%pattern_type.loc10_24 (%pattern_type.839) = value_param_pattern [symbolic = %self.param_patt.loc10_24.2 (constants.%self.param_patt.c15)] +// CHECK:STDOUT: %self.patt.loc10_24.1: @Derived.F.loc10_44.1.%pattern_type.loc10_24 (%pattern_type.839) = at_binding_pattern self, %self.param_patt.loc10_24.1 [symbolic = %self.patt.loc10_24.2 (constants.%self.patt.62f3ac.1)] +// CHECK:STDOUT: %t.param_patt.loc10_38.1: @Derived.F.loc10_44.1.%pattern_type.loc10_38 (%pattern_type.4f4) = value_param_pattern [symbolic = %t.param_patt.loc10_38.2 (constants.%t.param_patt.47b)] +// CHECK:STDOUT: %t.patt.loc10_38.1: @Derived.F.loc10_44.1.%pattern_type.loc10_38 (%pattern_type.4f4) = at_binding_pattern t, %t.param_patt.loc10_38.1 [symbolic = %t.patt.loc10_38.2 (constants.%t.patt.14f0ed.2)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @Derived.F.loc10_44.1.%Derived (%Derived) = value_param call_param0 // CHECK:STDOUT: %.loc10_24.1: type = splice_block %Self.ref [symbolic = %Derived (constants.%Derived)] { @@ -1578,8 +1626,12 @@ class T2(G2:! type) { // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %Derived: type = class_type @Derived, @Derived(%T) [symbolic = %Derived (constants.%Derived)] // CHECK:STDOUT: %pattern_type.loc10_24: type = pattern_type %Derived [symbolic = %pattern_type.loc10_24 (constants.%pattern_type.839)] +// CHECK:STDOUT: %self.param_patt.loc10_24.2: @Derived.F.loc10_44.1.%pattern_type.loc10_24 (%pattern_type.839) = value_param_pattern [symbolic = %self.param_patt.loc10_24.2 (constants.%self.param_patt.c15)] +// CHECK:STDOUT: %self.patt.loc10_24.2: @Derived.F.loc10_44.1.%pattern_type.loc10_24 (%pattern_type.839) = at_binding_pattern self, %self.param_patt.loc10_24.2 [symbolic = %self.patt.loc10_24.2 (constants.%self.patt.62f3ac.1)] // CHECK:STDOUT: %ptr.loc10_41.1: type = ptr_type %T [symbolic = %ptr.loc10_41.1 (constants.%ptr.e8f)] // CHECK:STDOUT: %pattern_type.loc10_38: type = pattern_type %ptr.loc10_41.1 [symbolic = %pattern_type.loc10_38 (constants.%pattern_type.4f4)] +// CHECK:STDOUT: %t.param_patt.loc10_38.2: @Derived.F.loc10_44.1.%pattern_type.loc10_38 (%pattern_type.4f4) = value_param_pattern [symbolic = %t.param_patt.loc10_38.2 (constants.%t.param_patt.47b)] +// CHECK:STDOUT: %t.patt.loc10_38.2: @Derived.F.loc10_44.1.%pattern_type.loc10_38 (%pattern_type.4f4) = at_binding_pattern t, %t.param_patt.loc10_38.2 [symbolic = %t.patt.loc10_38.2 (constants.%t.patt.14f0ed.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc10_24: = require_complete_type %Derived [symbolic = %require_complete.loc10_24 (constants.%require_complete.1e7)] @@ -1606,7 +1658,7 @@ class T2(G2:! type) { // CHECK:STDOUT: %.loc10_44.1: @Derived.F.loc10_44.2.%Derived.F.type (%Derived.F.type.77405e.1) = specific_constant @Derived.%Derived.F.decl.loc10_44.1, @Derived(constants.%T) [symbolic = %Derived.F (constants.%Derived.F.d85493.1)] // CHECK:STDOUT: %F.ref: @Derived.F.loc10_44.2.%Derived.F.type (%Derived.F.type.77405e.1) = name_ref F, %.loc10_44.1 [symbolic = %Derived.F (constants.%Derived.F.d85493.1)] // CHECK:STDOUT: -// CHECK:STDOUT: %.loc10_44.2: ref @Derived.F.loc10_44.2.%Derived (%Derived) = enclosing_class_access %.loc5, element0 +// CHECK:STDOUT: %.loc10_44.2: ref @Derived.F.loc10_44.2.%Derived (%Derived) = enclosing_class_access %.5, element0 // CHECK:STDOUT: %.loc10_44.3: @Derived.F.loc10_44.2.%Derived (%Derived) = acquire_value %.loc10_44.2 // CHECK:STDOUT: %Derived.F.bound: = bound_method %.loc10_44.3, %F.ref // CHECK:STDOUT: %Derived.F.specific_fn.loc10_44.1: = specific_function %F.ref, @Derived.F.loc10_44.1(constants.%T) [symbolic = %Derived.F.specific_fn.loc10_44.2 (constants.%Derived.F.specific_fn.822c1a.2)] @@ -1617,6 +1669,7 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Derived(constants.%T) { +// CHECK:STDOUT: %T.patt.loc7_16.2 => constants.%T.patt // CHECK:STDOUT: %T.loc7_16.1 => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1638,8 +1691,12 @@ class T2(G2:! type) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %Derived => constants.%Derived // CHECK:STDOUT: %pattern_type.loc10_24 => constants.%pattern_type.839 +// CHECK:STDOUT: %self.param_patt.loc10_24.2 => constants.%self.param_patt.c15 +// CHECK:STDOUT: %self.patt.loc10_24.2 => constants.%self.patt.62f3ac.2 // CHECK:STDOUT: %ptr.loc10_41.1 => constants.%ptr.e8f // CHECK:STDOUT: %pattern_type.loc10_38 => constants.%pattern_type.4f4 +// CHECK:STDOUT: %t.param_patt.loc10_38.2 => constants.%t.param_patt.47b +// CHECK:STDOUT: %t.patt.loc10_38.2 => constants.%t.patt.14f0ed.1 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc10_24 => constants.%require_complete.1e7 @@ -1650,12 +1707,16 @@ class T2(G2:! type) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %ptr => constants.%ptr.e8f // CHECK:STDOUT: %Base => constants.%Base.99a -// CHECK:STDOUT: %pattern_type.loc5_23 => constants.%pattern_type.bdc -// CHECK:STDOUT: %pattern_type.loc5_37 => constants.%pattern_type.4f4 +// CHECK:STDOUT: %pattern_type.1 => constants.%pattern_type.bdc +// CHECK:STDOUT: %self.param_patt => constants.%self.param_patt.c5a +// CHECK:STDOUT: %self.patt.2 => constants.%self.patt.489 +// CHECK:STDOUT: %pattern_type.2 => constants.%pattern_type.4f4 +// CHECK:STDOUT: %t.param_patt => constants.%t.param_patt.47b +// CHECK:STDOUT: %t.patt.2 => constants.%t.patt.14f0ed.1 // CHECK:STDOUT: // CHECK:STDOUT: !definition: -// CHECK:STDOUT: %require_complete.loc5_23 => constants.%require_complete.29f -// CHECK:STDOUT: %require_complete.loc5_37 => constants.%require_complete.ef1 +// CHECK:STDOUT: %require_complete.1 => constants.%require_complete.29f +// CHECK:STDOUT: %require_complete.2 => constants.%require_complete.ef1 // CHECK:STDOUT: %Derived.F.type => constants.%Derived.F.type.77405e.1 // CHECK:STDOUT: %Derived.F => constants.%Derived.F.d85493.1 // CHECK:STDOUT: %Derived => constants.%Derived diff --git a/toolchain/check/testdata/class/nested.carbon b/toolchain/check/testdata/class/nested.carbon index 6a300a535949..bcf3ac89f944 100644 --- a/toolchain/check/testdata/class/nested.carbon +++ b/toolchain/check/testdata/class/nested.carbon @@ -78,6 +78,8 @@ fn F(a: Outer*) { // CHECK:STDOUT: %struct_type.po.qo.pi: type = struct_type {.po: %ptr.286, .qo: %ptr.286, .pi: %ptr.001} [concrete] // CHECK:STDOUT: %complete_type.a2f: = complete_type_witness %struct_type.po.qo.pi [concrete] // CHECK:STDOUT: %pattern_type.d6c: type = pattern_type %Outer [concrete] +// CHECK:STDOUT: %o.patt.a05f50.1: %pattern_type.d6c = ref_binding_pattern o [concrete] +// CHECK:STDOUT: %o.var_patt.6496fb.1: %pattern_type.d6c = var_pattern %o.patt.a05f50.1 [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.150: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] @@ -88,6 +90,8 @@ fn F(a: Outer*) { // CHECK:STDOUT: %DefaultOrUnformed.facet.1fd: %DefaultOrUnformed.type = facet_value %Outer, (%DefaultOrUnformed.impl_witness.474) [concrete] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn.b8a: = specific_function %T.as.DefaultOrUnformed.impl.Op.d12, @T.as.DefaultOrUnformed.impl.Op(%Outer) [concrete] // CHECK:STDOUT: %pattern_type.dc4: type = pattern_type %Inner [concrete] +// CHECK:STDOUT: %i.patt.539460.1: %pattern_type.dc4 = ref_binding_pattern i [concrete] +// CHECK:STDOUT: %i.var_patt.15311d.1: %pattern_type.dc4 = var_pattern %i.patt.539460.1 [concrete] // CHECK:STDOUT: %DefaultOrUnformed.impl_witness.b1a: = impl_witness imports.%DefaultOrUnformed.impl_witness_table.374, @T.as.DefaultOrUnformed.impl(%Inner) [concrete] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.dd7: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%Inner) [concrete] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.0e7: %T.as.DefaultOrUnformed.impl.Op.type.dd7 = struct_value () [concrete] @@ -98,8 +102,19 @@ fn F(a: Outer*) { // CHECK:STDOUT: %Destroy.Op.1a2547.4: %Destroy.Op.type.1d8f74.4 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.6: type = fn_type @Destroy.Op.loc18_5.2 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.6: %Destroy.Op.type.1d8f74.6 = struct_value () [concrete] +// CHECK:STDOUT: %o.patt.a05f50.2: %pattern_type.d6c = ref_binding_pattern o [concrete] +// CHECK:STDOUT: %o.var_patt.6496fb.2: %pattern_type.d6c = var_pattern %o.patt.a05f50.2 [concrete] +// CHECK:STDOUT: %i.patt.539460.2: %pattern_type.dc4 = ref_binding_pattern i [concrete] +// CHECK:STDOUT: %i.var_patt.15311d.2: %pattern_type.dc4 = var_pattern %i.patt.539460.2 [concrete] +// CHECK:STDOUT: %o.patt.a05f50.3: %pattern_type.d6c = ref_binding_pattern o [concrete] +// CHECK:STDOUT: %o.var_patt.6496fb.3: %pattern_type.d6c = var_pattern %o.patt.a05f50.3 [concrete] +// CHECK:STDOUT: %i.patt.539460.3: %pattern_type.dc4 = ref_binding_pattern i [concrete] +// CHECK:STDOUT: %i.var_patt.15311d.3: %pattern_type.dc4 = var_pattern %i.patt.539460.3 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.647 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.647 = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.36a = value_binding_pattern b [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.type.ff5: type = fn_type @ptr.as.Copy.impl.Op, @ptr.as.Copy.impl(%T.67d) [symbolic] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.ce9: %ptr.as.Copy.impl.Op.type.ff5 = struct_value () [symbolic] @@ -145,8 +160,8 @@ fn F(a: Outer*) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Outer.decl: type = class_decl @Outer [concrete = constants.%Outer] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.647 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.647 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.647 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.647 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %ptr.286 = value_param call_param0 // CHECK:STDOUT: %.loc45: type = splice_block %ptr.loc45 [concrete = constants.%ptr.286] { @@ -199,8 +214,8 @@ fn F(a: Outer*) { // CHECK:STDOUT: fn @Outer.F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %o.patt: %pattern_type.d6c = ref_binding_pattern o [concrete] -// CHECK:STDOUT: %o.var_patt: %pattern_type.d6c = var_pattern %o.patt [concrete] +// CHECK:STDOUT: %o.patt: %pattern_type.d6c = ref_binding_pattern o [concrete = constants.%o.patt.a05f50.1] +// CHECK:STDOUT: %o.var_patt: %pattern_type.d6c = var_pattern %o.patt [concrete = constants.%o.var_patt.6496fb.1] // CHECK:STDOUT: } // CHECK:STDOUT: %o.var: ref %Outer = var %o.var_patt // CHECK:STDOUT: %DefaultOrUnformed.facet.loc18: %DefaultOrUnformed.type = facet_value constants.%Outer, (constants.%DefaultOrUnformed.impl_witness.474) [concrete = constants.%DefaultOrUnformed.facet.1fd] @@ -214,8 +229,8 @@ fn F(a: Outer*) { // CHECK:STDOUT: %Outer.ref: type = name_ref Outer, file.%Outer.decl [concrete = constants.%Outer] // CHECK:STDOUT: %o: ref %Outer = ref_binding o, %o.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %i.patt: %pattern_type.dc4 = ref_binding_pattern i [concrete] -// CHECK:STDOUT: %i.var_patt: %pattern_type.dc4 = var_pattern %i.patt [concrete] +// CHECK:STDOUT: %i.patt: %pattern_type.dc4 = ref_binding_pattern i [concrete = constants.%i.patt.539460.1] +// CHECK:STDOUT: %i.var_patt: %pattern_type.dc4 = var_pattern %i.patt [concrete = constants.%i.var_patt.15311d.1] // CHECK:STDOUT: } // CHECK:STDOUT: %i.var: ref %Inner = var %i.var_patt // CHECK:STDOUT: %DefaultOrUnformed.facet.loc19: %DefaultOrUnformed.type = facet_value constants.%Inner, (constants.%DefaultOrUnformed.impl_witness.b1a) [concrete = constants.%DefaultOrUnformed.facet.eb3] @@ -238,8 +253,8 @@ fn F(a: Outer*) { // CHECK:STDOUT: fn @Inner.G() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %o.patt: %pattern_type.d6c = ref_binding_pattern o [concrete] -// CHECK:STDOUT: %o.var_patt: %pattern_type.d6c = var_pattern %o.patt [concrete] +// CHECK:STDOUT: %o.patt: %pattern_type.d6c = ref_binding_pattern o [concrete = constants.%o.patt.a05f50.2] +// CHECK:STDOUT: %o.var_patt: %pattern_type.d6c = var_pattern %o.patt [concrete = constants.%o.var_patt.6496fb.2] // CHECK:STDOUT: } // CHECK:STDOUT: %o.var: ref %Outer = var %o.var_patt // CHECK:STDOUT: %DefaultOrUnformed.facet.loc29: %DefaultOrUnformed.type = facet_value constants.%Outer, (constants.%DefaultOrUnformed.impl_witness.474) [concrete = constants.%DefaultOrUnformed.facet.1fd] @@ -253,8 +268,8 @@ fn F(a: Outer*) { // CHECK:STDOUT: %Outer.ref: type = name_ref Outer, file.%Outer.decl [concrete = constants.%Outer] // CHECK:STDOUT: %o: ref %Outer = ref_binding o, %o.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %i.patt: %pattern_type.dc4 = ref_binding_pattern i [concrete] -// CHECK:STDOUT: %i.var_patt: %pattern_type.dc4 = var_pattern %i.patt [concrete] +// CHECK:STDOUT: %i.patt: %pattern_type.dc4 = ref_binding_pattern i [concrete = constants.%i.patt.539460.2] +// CHECK:STDOUT: %i.var_patt: %pattern_type.dc4 = var_pattern %i.patt [concrete = constants.%i.var_patt.15311d.2] // CHECK:STDOUT: } // CHECK:STDOUT: %i.var: ref %Inner = var %i.var_patt // CHECK:STDOUT: %DefaultOrUnformed.facet.loc30: %DefaultOrUnformed.type = facet_value constants.%Inner, (constants.%DefaultOrUnformed.impl_witness.b1a) [concrete = constants.%DefaultOrUnformed.facet.eb3] @@ -277,8 +292,8 @@ fn F(a: Outer*) { // CHECK:STDOUT: fn @Outer.H() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %o.patt: %pattern_type.d6c = ref_binding_pattern o [concrete] -// CHECK:STDOUT: %o.var_patt: %pattern_type.d6c = var_pattern %o.patt [concrete] +// CHECK:STDOUT: %o.patt: %pattern_type.d6c = ref_binding_pattern o [concrete = constants.%o.patt.a05f50.3] +// CHECK:STDOUT: %o.var_patt: %pattern_type.d6c = var_pattern %o.patt [concrete = constants.%o.var_patt.6496fb.3] // CHECK:STDOUT: } // CHECK:STDOUT: %o.var: ref %Outer = var %o.var_patt // CHECK:STDOUT: %DefaultOrUnformed.facet.loc36: %DefaultOrUnformed.type = facet_value constants.%Outer, (constants.%DefaultOrUnformed.impl_witness.474) [concrete = constants.%DefaultOrUnformed.facet.1fd] @@ -292,8 +307,8 @@ fn F(a: Outer*) { // CHECK:STDOUT: %Outer.ref: type = name_ref Outer, file.%Outer.decl [concrete = constants.%Outer] // CHECK:STDOUT: %o: ref %Outer = ref_binding o, %o.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %i.patt: %pattern_type.dc4 = ref_binding_pattern i [concrete] -// CHECK:STDOUT: %i.var_patt: %pattern_type.dc4 = var_pattern %i.patt [concrete] +// CHECK:STDOUT: %i.patt: %pattern_type.dc4 = ref_binding_pattern i [concrete = constants.%i.patt.539460.3] +// CHECK:STDOUT: %i.var_patt: %pattern_type.dc4 = var_pattern %i.patt [concrete = constants.%i.var_patt.15311d.3] // CHECK:STDOUT: } // CHECK:STDOUT: %i.var: ref %Inner = var %i.var_patt // CHECK:STDOUT: %DefaultOrUnformed.facet.loc37: %DefaultOrUnformed.type = facet_value constants.%Inner, (constants.%DefaultOrUnformed.impl_witness.b1a) [concrete = constants.%DefaultOrUnformed.facet.eb3] @@ -340,18 +355,18 @@ fn F(a: Outer*) { // CHECK:STDOUT: fn @F(%a.param: %ptr.286) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.36a = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.36a = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.ref.loc46: %ptr.286 = name_ref a, %a // CHECK:STDOUT: %.loc46_26: ref %Outer = deref %a.ref.loc46 // CHECK:STDOUT: %pi.ref.loc46: %Outer.elem.fe3 = name_ref pi, @Outer.%.loc42 [concrete = @Outer.%.loc42] // CHECK:STDOUT: %.loc46_29.1: ref %ptr.001 = class_element_access %.loc46_26, element2 +// CHECK:STDOUT: %.loc46_29.2: %ptr.001 = acquire_value %.loc46_29.1 // CHECK:STDOUT: %.loc46_21: type = splice_block %ptr.loc46 [concrete = constants.%ptr.001] { // CHECK:STDOUT: %Outer.ref.loc46: type = name_ref Outer, file.%Outer.decl [concrete = constants.%Outer] // CHECK:STDOUT: %Inner.ref: type = name_ref Inner, @Outer.%Inner.decl [concrete = constants.%Inner] // CHECK:STDOUT: %ptr.loc46: type = ptr_type %Inner.ref [concrete = constants.%ptr.001] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc46_29.2: %ptr.001 = acquire_value %.loc46_29.1 // CHECK:STDOUT: %b: %ptr.001 = value_binding b, %.loc46_29.2 // CHECK:STDOUT: %a.ref.loc48_3: %ptr.286 = name_ref a, %a // CHECK:STDOUT: %.loc48_4.1: ref %Outer = deref %a.ref.loc48_3 diff --git a/toolchain/check/testdata/class/nested_name.carbon b/toolchain/check/testdata/class/nested_name.carbon index 1bd30cefae32..bd3e3b06843b 100644 --- a/toolchain/check/testdata/class/nested_name.carbon +++ b/toolchain/check/testdata/class/nested_name.carbon @@ -45,7 +45,11 @@ fn G(o: Outer) { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.dc4: type = pattern_type %Inner [concrete] +// CHECK:STDOUT: %oi.param_patt: %pattern_type.dc4 = value_param_pattern [concrete] +// CHECK:STDOUT: %oi.patt: %pattern_type.dc4 = at_binding_pattern oi, %oi.param_patt [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -60,8 +64,12 @@ fn G(o: Outer) { // CHECK:STDOUT: %.7a6: type = fn_type_with_self_type %Copy.WithSelf.Op.type.d09, %Copy.facet [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.4f6, @Int.as.Copy.impl.Op(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.d6c: type = pattern_type %Outer [concrete] +// CHECK:STDOUT: %o.param_patt: %pattern_type.d6c = value_param_pattern [concrete] +// CHECK:STDOUT: %o.patt: %pattern_type.d6c = at_binding_pattern o, %o.param_patt [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] +// CHECK:STDOUT: %i.patt: %pattern_type.dc4 = ref_binding_pattern i [concrete] +// CHECK:STDOUT: %i.var_patt: %pattern_type.dc4 = var_pattern %i.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.150: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.53a: %T.as.DefaultOrUnformed.impl.Op.type.150 = struct_value () [symbolic] @@ -104,10 +112,10 @@ fn G(o: Outer) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Outer.decl: type = class_decl @Outer [concrete = constants.%Outer] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %oi.param_patt: %pattern_type.dc4 = value_param_pattern [concrete] -// CHECK:STDOUT: %oi.patt: %pattern_type.dc4 = at_binding_pattern oi, %oi.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %oi.param_patt: %pattern_type.dc4 = value_param_pattern [concrete = constants.%oi.param_patt] +// CHECK:STDOUT: %oi.patt: %pattern_type.dc4 = at_binding_pattern oi, %oi.param_patt [concrete = constants.%oi.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc21_26: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -121,8 +129,8 @@ fn G(o: Outer) { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %o.param_patt: %pattern_type.d6c = value_param_pattern [concrete] -// CHECK:STDOUT: %o.patt: %pattern_type.d6c = at_binding_pattern o, %o.param_patt [concrete] +// CHECK:STDOUT: %o.param_patt: %pattern_type.d6c = value_param_pattern [concrete = constants.%o.param_patt] +// CHECK:STDOUT: %o.patt: %pattern_type.d6c = at_binding_pattern o, %o.param_patt [concrete = constants.%o.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %o.param: %Outer = value_param call_param0 // CHECK:STDOUT: %Outer.ref: type = name_ref Outer, file.%Outer.decl [concrete = constants.%Outer] @@ -167,8 +175,8 @@ fn G(o: Outer) { // CHECK:STDOUT: fn @G(%o.param: %Outer) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %i.patt: %pattern_type.dc4 = ref_binding_pattern i [concrete] -// CHECK:STDOUT: %i.var_patt: %pattern_type.dc4 = var_pattern %i.patt [concrete] +// CHECK:STDOUT: %i.patt: %pattern_type.dc4 = ref_binding_pattern i [concrete = constants.%i.patt] +// CHECK:STDOUT: %i.var_patt: %pattern_type.dc4 = var_pattern %i.patt [concrete = constants.%i.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %i.var: ref %Inner = var %i.var_patt // CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%Inner, (constants.%DefaultOrUnformed.impl_witness.b1a) [concrete = constants.%DefaultOrUnformed.facet] diff --git a/toolchain/check/testdata/class/partial/qualifier.carbon b/toolchain/check/testdata/class/partial/qualifier.carbon index 046914773b5b..684c26dfb1f5 100644 --- a/toolchain/check/testdata/class/partial/qualifier.carbon +++ b/toolchain/check/testdata/class/partial/qualifier.carbon @@ -181,14 +181,16 @@ fn F[T:! type](p: partial T*); // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %.331: type = partial_type %C [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %.331 [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type = at_binding_pattern p, %p.param_patt [concrete] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] { -// CHECK:STDOUT: %p.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type = at_binding_pattern p, %p.param_patt [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type = value_param_pattern [concrete = constants.%p.param_patt] +// CHECK:STDOUT: %p.patt: %pattern_type = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %p.param: %.331 = value_param call_param0 // CHECK:STDOUT: %.loc6_9.1: type = splice_block %.loc6_9.2 [concrete = constants.%.331] { @@ -207,14 +209,16 @@ fn F[T:! type](p: partial T*); // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %.331: type = partial_type %C [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %.331 [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type = at_binding_pattern p, %p.param_patt [concrete] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] { -// CHECK:STDOUT: %p.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type = at_binding_pattern p, %p.param_patt [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type = value_param_pattern [concrete = constants.%p.param_patt] +// CHECK:STDOUT: %p.patt: %pattern_type = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %p.param: %.331 = value_param call_param0 // CHECK:STDOUT: %.loc6_9.1: type = splice_block %.loc6_9.2 [concrete = constants.%.331] { @@ -233,14 +237,16 @@ fn F[T:! type](p: partial T*); // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %.331: type = partial_type %C [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %.331 [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type = ref_binding_pattern p [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type = var_param_pattern %p.patt [concrete] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] { -// CHECK:STDOUT: %p.patt: %pattern_type = ref_binding_pattern p [concrete] -// CHECK:STDOUT: %p.param_patt: %pattern_type = var_param_pattern %p.patt [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type = ref_binding_pattern p [concrete = constants.%p.patt] +// CHECK:STDOUT: %p.param_patt: %pattern_type = var_param_pattern %p.patt [concrete = constants.%p.param_patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %p.param: ref %.331 = ref_param call_param0 // CHECK:STDOUT: %.loc6_13.1: type = splice_block %.loc6_13.2 [concrete = constants.%.331] { @@ -259,14 +265,16 @@ fn F[T:! type](p: partial T*); // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %.331: type = partial_type %C [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %.331 [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type = at_binding_pattern p, %p.param_patt [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %p.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type = at_binding_pattern p, %p.param_patt [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type = value_param_pattern [concrete = constants.%p.param_patt] +// CHECK:STDOUT: %p.patt: %pattern_type = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %p.param: %.331 = value_param call_param0 // CHECK:STDOUT: %.loc10_9.1: type = splice_block %.loc10_9.2 [concrete = constants.%.331] { @@ -285,14 +293,16 @@ fn F[T:! type](p: partial T*); // CHECK:STDOUT: %Derived: type = class_type @Derived [concrete] // CHECK:STDOUT: %.546: type = partial_type %Derived [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %.546 [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type = at_binding_pattern p, %p.param_patt [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %p.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type = at_binding_pattern p, %p.param_patt [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type = value_param_pattern [concrete = constants.%p.param_patt] +// CHECK:STDOUT: %p.patt: %pattern_type = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %p.param: %.546 = value_param call_param0 // CHECK:STDOUT: %.loc13_9.1: type = splice_block %.loc13_9.2 [concrete = constants.%.546] { @@ -311,14 +321,16 @@ fn F[T:! type](p: partial T*); // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %.331: type = partial_type %C [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %.331 [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type = at_binding_pattern p, %p.param_patt [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %p.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type = at_binding_pattern p, %p.param_patt [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type = value_param_pattern [concrete = constants.%p.param_patt] +// CHECK:STDOUT: %p.patt: %pattern_type = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %p.param: %.331 = value_param call_param0 // CHECK:STDOUT: %.loc13_9.1: type = splice_block %.loc13_9.2 [concrete = constants.%.331] { @@ -340,14 +352,16 @@ fn F[T:! type](p: partial T*); // CHECK:STDOUT: %tuple.type.748: type = tuple_type (%C, %C) [concrete] // CHECK:STDOUT: %.8dc: type = partial_type %tuple.type.748 [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %.8dc [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type = at_binding_pattern p, %p.param_patt [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %p.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type = at_binding_pattern p, %p.param_patt [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type = value_param_pattern [concrete = constants.%p.param_patt] +// CHECK:STDOUT: %p.patt: %pattern_type = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %p.param: %.8dc = value_param call_param0 // CHECK:STDOUT: %.loc10_9.1: type = splice_block %.loc10_9.3 [concrete = constants.%.8dc] { @@ -370,14 +384,16 @@ fn F[T:! type](p: partial T*); // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %C} [concrete] // CHECK:STDOUT: %.91f: type = partial_type %struct_type.x [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %.91f [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type = at_binding_pattern p, %p.param_patt [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %p.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type = at_binding_pattern p, %p.param_patt [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type = value_param_pattern [concrete = constants.%p.param_patt] +// CHECK:STDOUT: %p.patt: %pattern_type = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %p.param: %.91f = value_param call_param0 // CHECK:STDOUT: %.loc10_9.1: type = splice_block %.loc10_9.2 [concrete = constants.%.91f] { @@ -398,14 +414,16 @@ fn F[T:! type](p: partial T*); // CHECK:STDOUT: %.331: type = partial_type %C [concrete] // CHECK:STDOUT: %.d52: type = partial_type %.331 [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %.d52 [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type = at_binding_pattern p, %p.param_patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %p.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type = at_binding_pattern p, %p.param_patt [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type = value_param_pattern [concrete = constants.%p.param_patt] +// CHECK:STDOUT: %p.patt: %pattern_type = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %p.param: %.d52 = value_param call_param0 // CHECK:STDOUT: %.loc10_9.1: type = splice_block %.loc10_9.2 [concrete = constants.%.d52] { diff --git a/toolchain/check/testdata/class/redeclaration.carbon b/toolchain/check/testdata/class/redeclaration.carbon index 03429545413e..5e55eb87c689 100644 --- a/toolchain/check/testdata/class/redeclaration.carbon +++ b/toolchain/check/testdata/class/redeclaration.carbon @@ -25,9 +25,13 @@ fn Class.F(unused self, unused b: ()) {} // CHECK:STDOUT: constants { // CHECK:STDOUT: %Class: type = class_type @Class [concrete] // CHECK:STDOUT: %pattern_type.f15: type = pattern_type %Class [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.f15 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt: %pattern_type.f15 = at_binding_pattern self, %self.param_patt [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.cb1 = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.cb1 = at_binding_pattern b, %b.param_patt [concrete] // CHECK:STDOUT: %Class.F.type: type = fn_type @Class.F [concrete] // CHECK:STDOUT: %Class.F: %Class.F.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] @@ -50,10 +54,10 @@ fn Class.F(unused self, unused b: ()) {} // CHECK:STDOUT: %Class.decl.loc15: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: %Class.decl.loc17: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: %Class.F.decl: %Class.F.type = fn_decl @Class.F [concrete = constants.%Class.F] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.f15 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.f15 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.cb1 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.cb1 = at_binding_pattern b, %b.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.f15 = value_param_pattern [concrete = constants.%self.param_patt] +// CHECK:STDOUT: %self.patt: %pattern_type.f15 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt] +// CHECK:STDOUT: %b.param_patt: %pattern_type.cb1 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.cb1 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param.loc21: %Class = value_param call_param0 // CHECK:STDOUT: %Self.ref.loc21: type = name_ref Self, constants.%Class [concrete = constants.%Class] @@ -69,10 +73,10 @@ fn Class.F(unused self, unused b: ()) {} // CHECK:STDOUT: // CHECK:STDOUT: class @Class { // CHECK:STDOUT: %Class.F.decl: %Class.F.type = fn_decl @Class.F [concrete = constants.%Class.F] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.f15 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.f15 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.cb1 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.cb1 = at_binding_pattern b, %b.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.f15 = value_param_pattern [concrete = constants.%self.param_patt] +// CHECK:STDOUT: %self.patt: %pattern_type.f15 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt] +// CHECK:STDOUT: %b.param_patt: %pattern_type.cb1 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.cb1 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param.loc18: %Class = value_param call_param0 // CHECK:STDOUT: %Self.ref.loc18: type = name_ref Self, constants.%Class [concrete = constants.%Class] diff --git a/toolchain/check/testdata/class/reenter_scope.carbon b/toolchain/check/testdata/class/reenter_scope.carbon index 9f419217d9a2..28a79e81296c 100644 --- a/toolchain/check/testdata/class/reenter_scope.carbon +++ b/toolchain/check/testdata/class/reenter_scope.carbon @@ -32,6 +32,8 @@ fn Class.F() -> i32 { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] // CHECK:STDOUT: %Class.F.type: type = fn_type @Class.F [concrete] // CHECK:STDOUT: %Class.F: %Class.F.type = struct_value () [concrete] // CHECK:STDOUT: %Class.G.type: type = fn_type @Class.G [concrete] @@ -57,8 +59,8 @@ fn Class.F() -> i32 { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: %Class.F.decl: %Class.F.type = fn_decl @Class.F [concrete = constants.%Class.F] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc20 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc20 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc20: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc20: Core.Form = init_form %i32.loc20 [concrete = constants.%.795] @@ -69,8 +71,8 @@ fn Class.F() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: class @Class { // CHECK:STDOUT: %Class.F.decl: %Class.F.type = fn_decl @Class.F [concrete = constants.%Class.F] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc20 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc20 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc16: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc16: Core.Form = init_form %i32.loc16 [concrete = constants.%.795] @@ -78,8 +80,8 @@ fn Class.F() -> i32 { // CHECK:STDOUT: %return.loc16: ref %i32 = return_slot %return.param.loc16 // CHECK:STDOUT: } // CHECK:STDOUT: %Class.G.decl: %Class.G.type = fn_decl @Class.G [concrete = constants.%Class.G] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc17: Core.Form = init_form %i32 [concrete = constants.%.795] diff --git a/toolchain/check/testdata/class/reorder.carbon b/toolchain/check/testdata/class/reorder.carbon index 7638174e673a..a5472fe6113e 100644 --- a/toolchain/check/testdata/class/reorder.carbon +++ b/toolchain/check/testdata/class/reorder.carbon @@ -32,6 +32,8 @@ class Class { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %Class.G.type: type = fn_type @Class.G [concrete] // CHECK:STDOUT: %Class.G: %Class.G.type = struct_value () [concrete] // CHECK:STDOUT: %Class.F.type: type = fn_type @Class.F [concrete] @@ -81,8 +83,8 @@ class Class { // CHECK:STDOUT: // CHECK:STDOUT: class @Class { // CHECK:STDOUT: %Class.G.decl: %Class.G.type = fn_decl @Class.G [concrete = constants.%Class.G] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc16: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -90,8 +92,8 @@ class Class { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Class.F.decl: %Class.F.type = fn_decl @Class.F [concrete = constants.%Class.F] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc20: Core.Form = init_form %i32 [concrete = constants.%.795] diff --git a/toolchain/check/testdata/class/reorder_qualified.carbon b/toolchain/check/testdata/class/reorder_qualified.carbon index 0eb67225b026..b5e5575804ac 100644 --- a/toolchain/check/testdata/class/reorder_qualified.carbon +++ b/toolchain/check/testdata/class/reorder_qualified.carbon @@ -86,6 +86,8 @@ class A { // CHECK:STDOUT: %struct_type.a.a92: type = struct_type {.a: %i32} [concrete] // CHECK:STDOUT: %complete_type.388: = complete_type_witness %struct_type.a.a92 [concrete] // CHECK:STDOUT: %pattern_type.9ef: type = pattern_type %A [concrete] +// CHECK:STDOUT: %a.patt.17c: %pattern_type.9ef = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.9ef = var_pattern %a.patt.17c [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %struct_type.a.a6c: type = struct_type {.a: Core.IntLiteral} [concrete] // CHECK:STDOUT: %struct.48c: %struct_type.a.a6c = struct_value (%int_1.5b8) [concrete] @@ -107,6 +109,8 @@ class A { // CHECK:STDOUT: %int_1.0c6: %i32 = int_value 1 [concrete] // CHECK:STDOUT: %A.val: %A = struct_value (%int_1.0c6) [concrete] // CHECK:STDOUT: %pattern_type.e78: type = pattern_type %B [concrete] +// CHECK:STDOUT: %b.patt.245: %pattern_type.e78 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.e78 = var_pattern %b.patt.245 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %struct_type.b.a15: type = struct_type {.b: Core.IntLiteral} [concrete] // CHECK:STDOUT: %struct.26f: %struct_type.b.a15 = struct_value (%int_2.ecc) [concrete] @@ -115,6 +119,8 @@ class A { // CHECK:STDOUT: %int_2.295: %i32 = int_value 2 [concrete] // CHECK:STDOUT: %B.val: %B = struct_value (%int_2.295) [concrete] // CHECK:STDOUT: %pattern_type.ca8: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt.a75: %pattern_type.ca8 = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.ca8 = var_pattern %c.patt.a75 [concrete] // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %struct_type.c.5b8: type = struct_type {.c: Core.IntLiteral} [concrete] // CHECK:STDOUT: %struct.d98: %struct_type.c.5b8 = struct_value (%int_3.1ba) [concrete] @@ -123,6 +129,8 @@ class A { // CHECK:STDOUT: %int_3.410: %i32 = int_value 3 [concrete] // CHECK:STDOUT: %C.val: %C = struct_value (%int_3.410) [concrete] // CHECK:STDOUT: %pattern_type.a0b: type = pattern_type %D [concrete] +// CHECK:STDOUT: %d.patt.60f: %pattern_type.a0b = ref_binding_pattern d [concrete] +// CHECK:STDOUT: %d.var_patt: %pattern_type.a0b = var_pattern %d.patt.60f [concrete] // CHECK:STDOUT: %int_4.0c1: Core.IntLiteral = int_value 4 [concrete] // CHECK:STDOUT: %struct_type.d.3ea: type = struct_type {.d: Core.IntLiteral} [concrete] // CHECK:STDOUT: %struct.5a9: %struct_type.d.3ea = struct_value (%int_4.0c1) [concrete] @@ -246,8 +254,8 @@ class A { // CHECK:STDOUT: fn @D.DF() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.9ef = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.9ef = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.9ef = ref_binding_pattern a [concrete = constants.%a.patt.17c] +// CHECK:STDOUT: %a.var_patt: %pattern_type.9ef = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %A = var %a.var_patt // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -266,8 +274,8 @@ class A { // CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A] // CHECK:STDOUT: %a: ref %A = ref_binding a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.e78 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.e78 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.e78 = ref_binding_pattern b [concrete = constants.%b.patt.245] +// CHECK:STDOUT: %b.var_patt: %pattern_type.e78 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %B = var %b.var_patt // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2.ecc] @@ -286,8 +294,8 @@ class A { // CHECK:STDOUT: %B.ref: type = name_ref B, @A.%B.decl [concrete = constants.%B] // CHECK:STDOUT: %b: ref %B = ref_binding b, %b.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.ca8 = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.ca8 = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.ca8 = ref_binding_pattern c [concrete = constants.%c.patt.a75] +// CHECK:STDOUT: %c.var_patt: %pattern_type.ca8 = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt // CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete = constants.%int_3.1ba] @@ -306,8 +314,8 @@ class A { // CHECK:STDOUT: %C.ref: type = name_ref C, @B.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %c: ref %C = ref_binding c, %c.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.a0b = ref_binding_pattern d [concrete] -// CHECK:STDOUT: %d.var_patt: %pattern_type.a0b = var_pattern %d.patt [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.a0b = ref_binding_pattern d [concrete = constants.%d.patt.60f] +// CHECK:STDOUT: %d.var_patt: %pattern_type.a0b = var_pattern %d.patt [concrete = constants.%d.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %D = var %d.var_patt // CHECK:STDOUT: %int_4: Core.IntLiteral = int_value 4 [concrete = constants.%int_4.0c1] diff --git a/toolchain/check/testdata/class/scope.carbon b/toolchain/check/testdata/class/scope.carbon index 259551ad447a..aac562fb7cfe 100644 --- a/toolchain/check/testdata/class/scope.carbon +++ b/toolchain/check/testdata/class/scope.carbon @@ -42,6 +42,8 @@ fn Run() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %Class.F.type: type = fn_type @Class.F [concrete] // CHECK:STDOUT: %Class.F: %Class.F.type = struct_value () [concrete] // CHECK:STDOUT: %Class.G.type: type = fn_type @Class.G [concrete] @@ -74,6 +76,10 @@ fn Run() { // CHECK:STDOUT: %int_2.295: %i32 = int_value 2 [concrete] // CHECK:STDOUT: %Run.type: type = fn_type @Run [concrete] // CHECK:STDOUT: %Run: %Run.type = struct_value () [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.6b6 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.2: type = fn_type @Destroy.Op.loc31_3.2 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.2: %Destroy.Op.type.1d8f74.2 = struct_value () [concrete] @@ -104,8 +110,8 @@ fn Run() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc25: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -117,8 +123,8 @@ fn Run() { // CHECK:STDOUT: // CHECK:STDOUT: class @Class { // CHECK:STDOUT: %Class.F.decl: %Class.F.type = fn_decl @Class.F [concrete = constants.%Class.F] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc16: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -126,8 +132,8 @@ fn Run() { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Class.G.decl: %Class.G.type = fn_decl @Class.G [concrete = constants.%Class.G] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc20: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -177,8 +183,8 @@ fn Run() { // CHECK:STDOUT: fn @Run() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.6b6 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.6b6 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %i32 = var %a.var_patt // CHECK:STDOUT: %F.ref.loc30: %F.type = name_ref F, file.%F.decl [concrete = constants.%F] @@ -187,8 +193,8 @@ fn Run() { // CHECK:STDOUT: %i32.loc30: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %a: ref %i32 = ref_binding a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var %b.var_patt // CHECK:STDOUT: %Class.ref: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] diff --git a/toolchain/check/testdata/class/self/fail_ref_self.carbon b/toolchain/check/testdata/class/self/fail_ref_self.carbon index b1b4cd8455f3..f7c21f1bdd80 100644 --- a/toolchain/check/testdata/class/self/fail_ref_self.carbon +++ b/toolchain/check/testdata/class/self/fail_ref_self.carbon @@ -40,16 +40,24 @@ fn F(c: Class, p: Class*) { // CHECK:STDOUT: constants { // CHECK:STDOUT: %Class: type = class_type @Class [concrete] // CHECK:STDOUT: %pattern_type.f15: type = pattern_type %Class [concrete] +// CHECK:STDOUT: %self.param_patt.b2b: %pattern_type.f15 = ref_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.123: %pattern_type.f15 = at_binding_pattern self, %self.param_patt.b2b [concrete] // CHECK:STDOUT: %Class.F.type: type = fn_type @Class.F [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Class.F: %Class.F.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %.d76: Core.Form = init_form %Class [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.f15 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type.f15 = return_slot_pattern %return.param_patt, %Class [concrete] // CHECK:STDOUT: %Make.type: type = fn_type @Make [concrete] // CHECK:STDOUT: %Make: %Make.type = struct_value () [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.f15 = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.f15 = at_binding_pattern c, %c.param_patt [concrete] // CHECK:STDOUT: %ptr.7ee: type = ptr_type %Class [concrete] // CHECK:STDOUT: %pattern_type.8c5: type = pattern_type %ptr.7ee [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.8c5 = value_param_pattern [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.8c5 = at_binding_pattern p, %p.param_patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] @@ -76,8 +84,8 @@ fn F(c: Class, p: Class*) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: %Make.decl: %Make.type = fn_decl @Make [concrete = constants.%Make] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.f15 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.f15 = return_slot_pattern %return.param_patt, %Class.ref [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.f15 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.f15 = return_slot_pattern %return.param_patt, %Class.ref [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %Class.ref: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] // CHECK:STDOUT: %.loc19: Core.Form = init_form %Class.ref [concrete = constants.%.d76] @@ -85,10 +93,10 @@ fn F(c: Class, p: Class*) { // CHECK:STDOUT: %return: ref %Class = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %c.param_patt: %pattern_type.f15 = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.f15 = at_binding_pattern c, %c.param_patt [concrete] -// CHECK:STDOUT: %p.param_patt: %pattern_type.8c5 = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.8c5 = at_binding_pattern p, %p.param_patt [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.f15 = value_param_pattern [concrete = constants.%c.param_patt] +// CHECK:STDOUT: %c.patt: %pattern_type.f15 = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt] +// CHECK:STDOUT: %p.param_patt: %pattern_type.8c5 = value_param_pattern [concrete = constants.%p.param_patt] +// CHECK:STDOUT: %p.patt: %pattern_type.8c5 = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %Class = value_param call_param0 // CHECK:STDOUT: %Class.ref.loc21_9: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] @@ -104,8 +112,8 @@ fn F(c: Class, p: Class*) { // CHECK:STDOUT: // CHECK:STDOUT: class @Class { // CHECK:STDOUT: %Class.F.decl: %Class.F.type = fn_decl @Class.F [concrete = constants.%Class.F] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.f15 = ref_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.f15 = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.f15 = ref_param_pattern [concrete = constants.%self.param_patt.b2b] +// CHECK:STDOUT: %self.patt: %pattern_type.f15 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.123] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %Class = ref_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] diff --git a/toolchain/check/testdata/class/self/raw_self.carbon b/toolchain/check/testdata/class/self/raw_self.carbon index 17a4d626d01d..2afd99107fbe 100644 --- a/toolchain/check/testdata/class/self/raw_self.carbon +++ b/toolchain/check/testdata/class/self/raw_self.carbon @@ -32,19 +32,27 @@ fn Class.G(self, r#self: i32) -> (i32, i32) { // CHECK:STDOUT: constants { // CHECK:STDOUT: %Class: type = class_type @Class [concrete] // CHECK:STDOUT: %pattern_type.f15: type = pattern_type %Class [concrete] +// CHECK:STDOUT: %self.param_patt.b2b: %pattern_type.f15 = ref_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.123: %pattern_type.f15 = at_binding_pattern self, %self.param_patt.b2b [concrete] // 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: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %self.param_patt.0499a5.1: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.f6cfaa.1: %pattern_type.6b6 = at_binding_pattern r#self, %self.param_patt.0499a5.1 [concrete] // CHECK:STDOUT: %Class.F.type: type = fn_type @Class.F [concrete] // CHECK:STDOUT: %Class.F: %Class.F.type = struct_value () [concrete] +// CHECK:STDOUT: %self.param_patt.c01: %pattern_type.f15 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.f26: %pattern_type.f15 = at_binding_pattern self, %self.param_patt.c01 [concrete] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.b59: %tuple.type.24b = tuple_value (%i32, %i32) [concrete] // CHECK:STDOUT: %tuple.type.e55: type = tuple_type (%i32, %i32) [concrete] // CHECK:STDOUT: %.c11: Core.Form = init_form %tuple.type.e55 [concrete] // CHECK:STDOUT: %pattern_type.394: type = pattern_type %tuple.type.e55 [concrete] +// CHECK:STDOUT: %return.param_patt.a90: %pattern_type.394 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.2ed: %pattern_type.394 = return_slot_pattern %return.param_patt.a90, %tuple.type.e55 [concrete] // CHECK:STDOUT: %Class.G.type: type = fn_type @Class.G [concrete] // CHECK:STDOUT: %Class.G: %Class.G.type = struct_value () [concrete] // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class, %i32 [concrete] @@ -83,10 +91,10 @@ fn Class.G(self, r#self: i32) -> (i32, i32) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: %Class.F.decl: %Class.F.type = fn_decl @Class.F [concrete = constants.%Class.F] { -// CHECK:STDOUT: %self.param_patt.loc21_16: %pattern_type.f15 = ref_param_pattern [concrete] -// CHECK:STDOUT: %self.patt.loc21_16: %pattern_type.f15 = at_binding_pattern self, %self.param_patt.loc21_16 [concrete] -// CHECK:STDOUT: %self.param_patt.loc21_28: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt.loc21_28: %pattern_type.6b6 = at_binding_pattern r#self, %self.param_patt.loc21_28 [concrete] +// CHECK:STDOUT: %self.param_patt.loc21_16: %pattern_type.f15 = ref_param_pattern [concrete = constants.%self.param_patt.b2b] +// CHECK:STDOUT: %self.patt.loc21_16: %pattern_type.f15 = at_binding_pattern self, %self.param_patt.loc21_16 [concrete = constants.%self.patt.123] +// CHECK:STDOUT: %self.param_patt.loc21_28: %pattern_type.6b6 = value_param_pattern [concrete = constants.%self.param_patt.0499a5.1] +// CHECK:STDOUT: %self.patt.loc21_28: %pattern_type.6b6 = at_binding_pattern r#self, %self.param_patt.loc21_28 [concrete = constants.%self.patt.f6cfaa.1] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param.loc21_16: ref %Class = ref_param call_param0 // CHECK:STDOUT: %Self.ref.loc21: type = name_ref Self, constants.%Class [concrete = constants.%Class] @@ -96,12 +104,12 @@ fn Class.G(self, r#self: i32) -> (i32, i32) { // CHECK:STDOUT: %self.loc21_28: %i32 = value_binding r#self, %self.param.loc21_28 // CHECK:STDOUT: } // CHECK:STDOUT: %Class.G.decl: %Class.G.type = fn_decl @Class.G [concrete = constants.%Class.G] { -// CHECK:STDOUT: %self.param_patt.loc25_12: %pattern_type.f15 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt.loc25_12: %pattern_type.f15 = at_binding_pattern self, %self.param_patt.loc25_12 [concrete] -// CHECK:STDOUT: %self.param_patt.loc25_24: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt.loc25_24: %pattern_type.6b6 = at_binding_pattern r#self, %self.param_patt.loc25_24 [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.394 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.394 = return_slot_pattern %return.param_patt, %.loc25_43.2 [concrete] +// CHECK:STDOUT: %self.param_patt.loc25_12: %pattern_type.f15 = value_param_pattern [concrete = constants.%self.param_patt.c01] +// CHECK:STDOUT: %self.patt.loc25_12: %pattern_type.f15 = at_binding_pattern self, %self.param_patt.loc25_12 [concrete = constants.%self.patt.f26] +// CHECK:STDOUT: %self.param_patt.loc25_24: %pattern_type.6b6 = value_param_pattern [concrete = constants.%self.param_patt.0499a5.1] +// CHECK:STDOUT: %self.patt.loc25_24: %pattern_type.6b6 = at_binding_pattern r#self, %self.param_patt.loc25_24 [concrete = constants.%self.patt.f6cfaa.1] +// CHECK:STDOUT: %return.param_patt: %pattern_type.394 = out_param_pattern [concrete = constants.%return.param_patt.a90] +// CHECK:STDOUT: %return.patt: %pattern_type.394 = return_slot_pattern %return.param_patt, %.loc25_43.2 [concrete = constants.%return.patt.2ed] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc25_35: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %i32.loc25_40: type = type_literal constants.%i32 [concrete = constants.%i32] @@ -121,10 +129,10 @@ fn Class.G(self, r#self: i32) -> (i32, i32) { // CHECK:STDOUT: // CHECK:STDOUT: class @Class { // CHECK:STDOUT: %Class.F.decl: %Class.F.type = fn_decl @Class.F [concrete = constants.%Class.F] { -// CHECK:STDOUT: %self.param_patt.loc21_16: %pattern_type.f15 = ref_param_pattern [concrete] -// CHECK:STDOUT: %self.patt.loc21_16: %pattern_type.f15 = at_binding_pattern self, %self.param_patt.loc21_16 [concrete] -// CHECK:STDOUT: %self.param_patt.loc21_28: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt.loc21_28: %pattern_type.6b6 = at_binding_pattern r#self, %self.param_patt.loc21_28 [concrete] +// CHECK:STDOUT: %self.param_patt.loc21_16: %pattern_type.f15 = ref_param_pattern [concrete = constants.%self.param_patt.b2b] +// CHECK:STDOUT: %self.patt.loc21_16: %pattern_type.f15 = at_binding_pattern self, %self.param_patt.loc21_16 [concrete = constants.%self.patt.123] +// CHECK:STDOUT: %self.param_patt.loc21_28: %pattern_type.6b6 = value_param_pattern [concrete = constants.%self.param_patt.0499a5.1] +// CHECK:STDOUT: %self.patt.loc21_28: %pattern_type.6b6 = at_binding_pattern r#self, %self.param_patt.loc21_28 [concrete = constants.%self.patt.f6cfaa.1] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param.loc16_12: ref %Class = ref_param call_param0 // CHECK:STDOUT: %Self.ref.loc16: type = name_ref Self, constants.%Class [concrete = constants.%Class] @@ -134,12 +142,12 @@ fn Class.G(self, r#self: i32) -> (i32, i32) { // CHECK:STDOUT: %self.loc16_24: %i32 = value_binding r#self, %self.param.loc16_24 // CHECK:STDOUT: } // CHECK:STDOUT: %Class.G.decl: %Class.G.type = fn_decl @Class.G [concrete = constants.%Class.G] { -// CHECK:STDOUT: %self.param_patt.loc25_12: %pattern_type.f15 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt.loc25_12: %pattern_type.f15 = at_binding_pattern self, %self.param_patt.loc25_12 [concrete] -// CHECK:STDOUT: %self.param_patt.loc25_24: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt.loc25_24: %pattern_type.6b6 = at_binding_pattern r#self, %self.param_patt.loc25_24 [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.394 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.394 = return_slot_pattern %return.param_patt, %.loc25_43.2 [concrete] +// CHECK:STDOUT: %self.param_patt.loc25_12: %pattern_type.f15 = value_param_pattern [concrete = constants.%self.param_patt.c01] +// CHECK:STDOUT: %self.patt.loc25_12: %pattern_type.f15 = at_binding_pattern self, %self.param_patt.loc25_12 [concrete = constants.%self.patt.f26] +// CHECK:STDOUT: %self.param_patt.loc25_24: %pattern_type.6b6 = value_param_pattern [concrete = constants.%self.param_patt.0499a5.1] +// CHECK:STDOUT: %self.patt.loc25_24: %pattern_type.6b6 = at_binding_pattern r#self, %self.param_patt.loc25_24 [concrete = constants.%self.patt.f6cfaa.1] +// CHECK:STDOUT: %return.param_patt: %pattern_type.394 = out_param_pattern [concrete = constants.%return.param_patt.a90] +// CHECK:STDOUT: %return.patt: %pattern_type.394 = return_slot_pattern %return.param_patt, %.loc25_43.2 [concrete = constants.%return.patt.2ed] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc17_31: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %i32.loc17_36: type = type_literal constants.%i32 [concrete = constants.%i32] diff --git a/toolchain/check/testdata/class/self/raw_self_type.carbon b/toolchain/check/testdata/class/self/raw_self_type.carbon index de8a6b5851f7..cb1a475a5bea 100644 --- a/toolchain/check/testdata/class/self/raw_self_type.carbon +++ b/toolchain/check/testdata/class/self/raw_self_type.carbon @@ -38,6 +38,8 @@ fn MemberNamedSelf.F(unused x: Self, unused y: r#Self) {} // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr.7ee: type = ptr_type %Class [concrete] // CHECK:STDOUT: %pattern_type.8c5: type = pattern_type %ptr.7ee [concrete] +// CHECK:STDOUT: %Self.patt: %pattern_type.8c5 = ref_binding_pattern r#Self [concrete] +// CHECK:STDOUT: %Self.var_patt: %pattern_type.8c5 = var_pattern %Self.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.150: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] @@ -47,6 +49,8 @@ fn MemberNamedSelf.F(unused x: Self, unused y: r#Self) {} // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.aa5: %T.as.DefaultOrUnformed.impl.Op.type.4ec = struct_value () [concrete] // CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %ptr.7ee, (%DefaultOrUnformed.impl_witness.a7b) [concrete] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function %T.as.DefaultOrUnformed.impl.Op.aa5, @T.as.DefaultOrUnformed.impl.Op(%ptr.7ee) [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.8c5 = ref_binding_pattern p [concrete] +// CHECK:STDOUT: %p.var_patt: %pattern_type.8c5 = var_pattern %p.patt [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.type.ff5: type = fn_type @ptr.as.Copy.impl.Op, @ptr.as.Copy.impl(%T.67d) [symbolic] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.ce9: %ptr.as.Copy.impl.Op.type.ff5 = struct_value () [symbolic] @@ -63,7 +67,11 @@ fn MemberNamedSelf.F(unused x: Self, unused y: r#Self) {} // CHECK:STDOUT: %MemberNamedSelf: type = class_type @MemberNamedSelf [concrete] // CHECK:STDOUT: %Self.7fc: type = class_type @Self [concrete] // CHECK:STDOUT: %pattern_type.bb1: type = pattern_type %MemberNamedSelf [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.bb1 = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.bb1 = at_binding_pattern x, %x.param_patt [concrete] // CHECK:STDOUT: %pattern_type.917: type = pattern_type %Self.7fc [concrete] +// CHECK:STDOUT: %y.param_patt: %pattern_type.917 = value_param_pattern [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.917 = at_binding_pattern y, %y.param_patt [concrete] // CHECK:STDOUT: %MemberNamedSelf.F.type: type = fn_type @MemberNamedSelf.F [concrete] // CHECK:STDOUT: %MemberNamedSelf.F: %MemberNamedSelf.F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -95,10 +103,10 @@ fn MemberNamedSelf.F(unused x: Self, unused y: r#Self) {} // CHECK:STDOUT: %Class.decl: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: %MemberNamedSelf.decl: type = class_decl @MemberNamedSelf [concrete = constants.%MemberNamedSelf] {} {} // CHECK:STDOUT: %MemberNamedSelf.F.decl: %MemberNamedSelf.F.type = fn_decl @MemberNamedSelf.F [concrete = constants.%MemberNamedSelf.F] { -// CHECK:STDOUT: %x.param_patt: %pattern_type.bb1 = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.bb1 = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %y.param_patt: %pattern_type.917 = value_param_pattern [concrete] -// CHECK:STDOUT: %y.patt: %pattern_type.917 = at_binding_pattern y, %y.param_patt [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.bb1 = value_param_pattern [concrete = constants.%x.param_patt] +// CHECK:STDOUT: %x.patt: %pattern_type.bb1 = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt] +// CHECK:STDOUT: %y.param_patt: %pattern_type.917 = value_param_pattern [concrete = constants.%y.param_patt] +// CHECK:STDOUT: %y.patt: %pattern_type.917 = at_binding_pattern y, %y.param_patt [concrete = constants.%y.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param.loc28: %MemberNamedSelf = value_param call_param0 // CHECK:STDOUT: %Self.ref.loc28_32: type = name_ref Self, constants.%MemberNamedSelf [concrete = constants.%MemberNamedSelf] @@ -122,10 +130,10 @@ fn MemberNamedSelf.F(unused x: Self, unused y: r#Self) {} // CHECK:STDOUT: class @MemberNamedSelf { // CHECK:STDOUT: %Self.decl: type = class_decl @Self [concrete = constants.%Self.7fc] {} {} // CHECK:STDOUT: %MemberNamedSelf.F.decl: %MemberNamedSelf.F.type = fn_decl @MemberNamedSelf.F [concrete = constants.%MemberNamedSelf.F] { -// CHECK:STDOUT: %x.param_patt: %pattern_type.bb1 = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.bb1 = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %y.param_patt: %pattern_type.917 = value_param_pattern [concrete] -// CHECK:STDOUT: %y.patt: %pattern_type.917 = at_binding_pattern y, %y.param_patt [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.bb1 = value_param_pattern [concrete = constants.%x.param_patt] +// CHECK:STDOUT: %x.patt: %pattern_type.bb1 = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt] +// CHECK:STDOUT: %y.param_patt: %pattern_type.917 = value_param_pattern [concrete = constants.%y.param_patt] +// CHECK:STDOUT: %y.patt: %pattern_type.917 = at_binding_pattern y, %y.param_patt [concrete = constants.%y.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param.loc25: %MemberNamedSelf = value_param call_param0 // CHECK:STDOUT: %Self.ref.loc25_11: type = name_ref Self, constants.%MemberNamedSelf [concrete = constants.%MemberNamedSelf] @@ -154,8 +162,8 @@ fn MemberNamedSelf.F(unused x: Self, unused y: r#Self) {} // CHECK:STDOUT: fn @Class.F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %Self.patt: %pattern_type.8c5 = ref_binding_pattern r#Self [concrete] -// CHECK:STDOUT: %Self.var_patt: %pattern_type.8c5 = var_pattern %Self.patt [concrete] +// CHECK:STDOUT: %Self.patt: %pattern_type.8c5 = ref_binding_pattern r#Self [concrete = constants.%Self.patt] +// CHECK:STDOUT: %Self.var_patt: %pattern_type.8c5 = var_pattern %Self.patt [concrete = constants.%Self.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Self.var: ref %ptr.7ee = var %Self.var_patt // CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%ptr.7ee, (constants.%DefaultOrUnformed.impl_witness.a7b) [concrete = constants.%DefaultOrUnformed.facet] @@ -171,8 +179,8 @@ fn MemberNamedSelf.F(unused x: Self, unused y: r#Self) {} // CHECK:STDOUT: } // CHECK:STDOUT: %Self: ref %ptr.7ee = ref_binding r#Self, %Self.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: %pattern_type.8c5 = ref_binding_pattern p [concrete] -// CHECK:STDOUT: %p.var_patt: %pattern_type.8c5 = var_pattern %p.patt [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.8c5 = ref_binding_pattern p [concrete = constants.%p.patt] +// CHECK:STDOUT: %p.var_patt: %pattern_type.8c5 = var_pattern %p.patt [concrete = constants.%p.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %p.var: ref %ptr.7ee = var %p.var_patt // CHECK:STDOUT: %Self.ref.loc18_27: ref %ptr.7ee = name_ref r#Self, %Self diff --git a/toolchain/check/testdata/class/self/self.carbon b/toolchain/check/testdata/class/self/self.carbon index 20fba05326f0..a5c8ad69f521 100644 --- a/toolchain/check/testdata/class/self/self.carbon +++ b/toolchain/check/testdata/class/self/self.carbon @@ -98,6 +98,8 @@ class Class { // CHECK:STDOUT: constants { // CHECK:STDOUT: %Class: type = class_type @Class [concrete] // CHECK:STDOUT: %pattern_type.f15: type = pattern_type %Class [concrete] +// CHECK:STDOUT: %self.param_patt.c01: %pattern_type.f15 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.f26: %pattern_type.f15 = at_binding_pattern self, %self.param_patt.c01 [concrete] // 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] @@ -105,8 +107,12 @@ class Class { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %Class.F.type: type = fn_type @Class.F [concrete] // CHECK:STDOUT: %Class.F: %Class.F.type = struct_value () [concrete] +// CHECK:STDOUT: %self.param_patt.b2b: %pattern_type.f15 = ref_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.123: %pattern_type.f15 = at_binding_pattern self, %self.param_patt.b2b [concrete] // CHECK:STDOUT: %Class.G.type: type = fn_type @Class.G [concrete] // CHECK:STDOUT: %Class.G: %Class.G.type = struct_value () [concrete] // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class, %i32 [concrete] @@ -145,10 +151,10 @@ class Class { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: %Class.F.decl: %Class.F.type = fn_decl @Class.F [concrete = constants.%Class.F] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.f15 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.f15 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc13 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.f15 = value_param_pattern [concrete = constants.%self.param_patt.c01] +// CHECK:STDOUT: %self.patt: %pattern_type.f15 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.f26] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc13 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc13: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc13: Core.Form = init_form %i32.loc13 [concrete = constants.%.795] @@ -159,10 +165,10 @@ class Class { // CHECK:STDOUT: %return.loc13: ref %i32 = return_slot %return.param.loc13 // CHECK:STDOUT: } // CHECK:STDOUT: %Class.G.decl: %Class.G.type = fn_decl @Class.G [concrete = constants.%Class.G] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.f15 = ref_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.f15 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc17 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.f15 = ref_param_pattern [concrete = constants.%self.param_patt.b2b] +// CHECK:STDOUT: %self.patt: %pattern_type.f15 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.123] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc17 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc17: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc17: Core.Form = init_form %i32.loc17 [concrete = constants.%.795] @@ -176,10 +182,10 @@ class Class { // CHECK:STDOUT: // CHECK:STDOUT: class @Class { // CHECK:STDOUT: %Class.F.decl: %Class.F.type = fn_decl @Class.F [concrete = constants.%Class.F] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.f15 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.f15 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc13 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.f15 = value_param_pattern [concrete = constants.%self.param_patt.c01] +// CHECK:STDOUT: %self.patt: %pattern_type.f15 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.f26] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc13 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc5: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc5: Core.Form = init_form %i32.loc5 [concrete = constants.%.795] @@ -190,10 +196,10 @@ class Class { // CHECK:STDOUT: %return.loc5: ref %i32 = return_slot %return.param.loc5 // CHECK:STDOUT: } // CHECK:STDOUT: %Class.G.decl: %Class.G.type = fn_decl @Class.G [concrete = constants.%Class.G] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.f15 = ref_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.f15 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc17 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.f15 = ref_param_pattern [concrete = constants.%self.param_patt.b2b] +// CHECK:STDOUT: %self.patt: %pattern_type.f15 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.123] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc17 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc7: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc7: Core.Form = init_form %i32.loc7 [concrete = constants.%.795] @@ -247,6 +253,8 @@ class Class { // CHECK:STDOUT: constants { // CHECK:STDOUT: %Class: type = class_type @Class [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %Class [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt: %pattern_type = at_binding_pattern self, %self.param_patt [concrete] // CHECK:STDOUT: %Class.F.type.48cdab.1: type = fn_type @Class.F.loc4 [concrete] // CHECK:STDOUT: %Class.F.bd5be1.1: %Class.F.type.48cdab.1 = struct_value () [concrete] // CHECK:STDOUT: %Class.G.type.321a2c.1: type = fn_type @Class.G.loc5 [concrete] @@ -274,16 +282,16 @@ class Class { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: %Class.F.decl: %Class.F.type.48cdab.2 = fn_decl @Class.F.loc16 [concrete = constants.%Class.F.bd5be1.2] { -// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern [concrete = constants.%self.param_patt] +// CHECK:STDOUT: %self.patt: %pattern_type = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %Class = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] // CHECK:STDOUT: %self: %Class = value_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Class.G.decl: %Class.G.type.321a2c.2 = fn_decl @Class.G.loc25 [concrete = constants.%Class.G.d407b2.2] { -// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern [concrete = constants.%self.param_patt] +// CHECK:STDOUT: %self.patt: %pattern_type = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %Class = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] @@ -293,16 +301,16 @@ class Class { // CHECK:STDOUT: // CHECK:STDOUT: class @Class { // CHECK:STDOUT: %Class.F.decl: %Class.F.type.48cdab.1 = fn_decl @Class.F.loc4 [concrete = constants.%Class.F.bd5be1.1] { -// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern [concrete = constants.%self.param_patt] +// CHECK:STDOUT: %self.patt: %pattern_type = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %Class = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] // CHECK:STDOUT: %self: %Class = value_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Class.G.decl: %Class.G.type.321a2c.1 = fn_decl @Class.G.loc5 [concrete = constants.%Class.G.d407b2.1] { -// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern [concrete = constants.%self.param_patt] +// CHECK:STDOUT: %self.patt: %pattern_type = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %Class = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] @@ -336,6 +344,8 @@ class Class { // CHECK:STDOUT: constants { // CHECK:STDOUT: %Class: type = class_type @Class [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %Class [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt: %pattern_type = at_binding_pattern self, %self.param_patt [concrete] // CHECK:STDOUT: %Class.F.type.48cdab.1: type = fn_type @Class.F.loc4 [concrete] // CHECK:STDOUT: %Class.F.bd5be1.1: %Class.F.type.48cdab.1 = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] @@ -359,8 +369,8 @@ class Class { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: %Class.F.decl: %Class.F.type.48cdab.2 = fn_decl @Class.F.loc16 [concrete = constants.%Class.F.bd5be1.2] { -// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern [concrete = constants.%self.param_patt] +// CHECK:STDOUT: %self.patt: %pattern_type = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %Class = value_param call_param0 // CHECK:STDOUT: %Class.ref: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] @@ -370,8 +380,8 @@ class Class { // CHECK:STDOUT: // CHECK:STDOUT: class @Class { // CHECK:STDOUT: %Class.F.decl: %Class.F.type.48cdab.1 = fn_decl @Class.F.loc4 [concrete = constants.%Class.F.bd5be1.1] { -// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern [concrete = constants.%self.param_patt] +// CHECK:STDOUT: %self.patt: %pattern_type = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %Class = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] @@ -398,6 +408,8 @@ class Class { // CHECK:STDOUT: constants { // CHECK:STDOUT: %Class: type = class_type @Class [concrete] // CHECK:STDOUT: %pattern_type.f15: type = pattern_type %Class [concrete] +// CHECK:STDOUT: %self.param_patt.c01: %pattern_type.f15 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.f26: %pattern_type.f15 = at_binding_pattern self, %self.param_patt.c01 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] // CHECK:STDOUT: %Class.F.type: type = fn_type @Class.F [concrete] @@ -426,9 +438,9 @@ class Class { // CHECK:STDOUT: // CHECK:STDOUT: class @Class { // CHECK:STDOUT: %Class.F.decl: %Class.F.type = fn_decl @Class.F [concrete = constants.%Class.F] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.f15 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.f15 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.patt: = return_slot_pattern , [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.f15 = value_param_pattern [concrete = constants.%self.param_patt.c01] +// CHECK:STDOUT: %self.patt: %pattern_type.f15 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.f26] +// CHECK:STDOUT: %return.patt: = return_slot_pattern , [concrete = ] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.ref: %Class = name_ref self, %self // CHECK:STDOUT: %.loc11: type = converted %self.ref, [concrete = ] diff --git a/toolchain/check/testdata/class/self/self_type.carbon b/toolchain/check/testdata/class/self/self_type.carbon index d1aaf2b2e780..2d5bc648090f 100644 --- a/toolchain/check/testdata/class/self/self_type.carbon +++ b/toolchain/check/testdata/class/self/self_type.carbon @@ -31,21 +31,29 @@ fn Class.F(self) -> i32 { // CHECK:STDOUT: constants { // CHECK:STDOUT: %Class: type = class_type @Class [concrete] // CHECK:STDOUT: %pattern_type.f15: type = pattern_type %Class [concrete] +// CHECK:STDOUT: %self.param_patt.c01: %pattern_type.f15 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.f26: %pattern_type.f15 = at_binding_pattern self, %self.param_patt.c01 [concrete] // 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: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %Class.F.type: type = fn_type @Class.F [concrete] // CHECK:STDOUT: %Class.F: %Class.F.type = struct_value () [concrete] // CHECK:STDOUT: %.d76: Core.Form = init_form %Class [concrete] +// CHECK:STDOUT: %return.param_patt.86e: %pattern_type.f15 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.0b7: %pattern_type.f15 = return_slot_pattern %return.param_patt.86e, %Class [concrete] // CHECK:STDOUT: %Class.Make.type: type = fn_type @Class.Make [concrete] // CHECK:STDOUT: %Class.Make: %Class.Make.type = struct_value () [concrete] // CHECK:STDOUT: %ptr.7ee: type = ptr_type %Class [concrete] // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class, %ptr.7ee [concrete] // CHECK:STDOUT: %struct_type.p: type = struct_type {.p: %ptr.7ee} [concrete] // CHECK:STDOUT: %complete_type.126: = complete_type_witness %struct_type.p [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.f15 = ref_binding_pattern s [concrete] +// CHECK:STDOUT: %s.var_patt: %pattern_type.f15 = var_pattern %s.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.150: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] @@ -92,10 +100,10 @@ fn Class.F(self) -> i32 { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: %Class.F.decl: %Class.F.type = fn_decl @Class.F [concrete = constants.%Class.F] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.f15 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.f15 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc25 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.f15 = value_param_pattern [concrete = constants.%self.param_patt.c01] +// CHECK:STDOUT: %self.patt: %pattern_type.f15 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.f26] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc25 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc25: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc25: Core.Form = init_form %i32.loc25 [concrete = constants.%.795] @@ -109,10 +117,10 @@ fn Class.F(self) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: class @Class { // CHECK:STDOUT: %Class.F.decl: %Class.F.type = fn_decl @Class.F [concrete = constants.%Class.F] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.f15 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.f15 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc25 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.f15 = value_param_pattern [concrete = constants.%self.param_patt.c01] +// CHECK:STDOUT: %self.patt: %pattern_type.f15 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.f26] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc25 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc16: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc16: Core.Form = init_form %i32.loc16 [concrete = constants.%.795] @@ -123,8 +131,8 @@ fn Class.F(self) -> i32 { // CHECK:STDOUT: %return.loc16: ref %i32 = return_slot %return.param.loc16 // CHECK:STDOUT: } // CHECK:STDOUT: %Class.Make.decl: %Class.Make.type = fn_decl @Class.Make [concrete = constants.%Class.Make] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.f15 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.f15 = return_slot_pattern %return.param_patt, %Self.ref.loc17 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.f15 = out_param_pattern [concrete = constants.%return.param_patt.86e] +// CHECK:STDOUT: %return.patt: %pattern_type.f15 = return_slot_pattern %return.param_patt, %Self.ref.loc17 [concrete = constants.%return.patt.0b7] // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc17: type = name_ref Self, constants.%Class [concrete = constants.%Class] // CHECK:STDOUT: %.loc17_16.2: Core.Form = init_form %Self.ref.loc17 [concrete = constants.%.d76] @@ -159,8 +167,8 @@ fn Class.F(self) -> i32 { // CHECK:STDOUT: fn @Class.Make() -> out %return.param: %Class { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %s.patt: %pattern_type.f15 = ref_binding_pattern s [concrete] -// CHECK:STDOUT: %s.var_patt: %pattern_type.f15 = var_pattern %s.patt [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.f15 = ref_binding_pattern s [concrete = constants.%s.patt] +// CHECK:STDOUT: %s.var_patt: %pattern_type.f15 = var_pattern %s.patt [concrete = constants.%s.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%Class, (constants.%DefaultOrUnformed.impl_witness.4e8) [concrete = constants.%DefaultOrUnformed.facet] // CHECK:STDOUT: %.loc18_25.1: %DefaultOrUnformed.type = converted constants.%Class, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] diff --git a/toolchain/check/testdata/class/syntactic_merge.carbon b/toolchain/check/testdata/class/syntactic_merge.carbon index 8318aec522c9..27fc14703176 100644 --- a/toolchain/check/testdata/class/syntactic_merge.carbon +++ b/toolchain/check/testdata/class/syntactic_merge.carbon @@ -200,6 +200,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %a: %C = symbolic_binding a, 0 [symbolic] // CHECK:STDOUT: %Foo.type: type = generic_class_type @Foo [concrete] // CHECK:STDOUT: %Foo.generic: %Foo.type = struct_value () [concrete] @@ -220,7 +221,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %D: type = alias_binding D, %C.ref [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type = class_decl @Foo [concrete = constants.%Foo.generic] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc8: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc7: type = splice_block %C.ref.loc7 [concrete = constants.%C] { // CHECK:STDOUT: %.Self.loc7: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -229,7 +230,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: %a.loc7_12.2: %C = symbolic_binding a, 0 [symbolic = %a.loc7_12.1 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc8: %Foo.type = class_decl @Foo [concrete = constants.%Foo.generic] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc8: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8: type = splice_block %C.ref.loc8 [concrete = constants.%C] { // CHECK:STDOUT: %.Self.loc8: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -238,7 +239,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: %a.loc8: %C = symbolic_binding a, 0 [symbolic = %a.loc7_12.1 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Bar.decl.loc10: %Bar.type = class_decl @Bar [concrete = constants.%Bar.generic] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc11: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc10 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc10: type = splice_block %D.ref.loc10 [concrete = constants.%C] { // CHECK:STDOUT: %.Self.loc10: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -247,7 +248,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: %a.loc10_12.2: %C = symbolic_binding a, 0 [symbolic = %a.loc10_12.1 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Bar.decl.loc11: %Bar.type = class_decl @Bar [concrete = constants.%Bar.generic] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc11: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc10 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc11: type = splice_block %D.ref.loc11 [concrete = constants.%C] { // CHECK:STDOUT: %.Self.loc11: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -266,6 +267,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Foo(%a.loc7_12.2: %C) { +// CHECK:STDOUT: %a.patt.loc7: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7 (constants.%a.patt)] // CHECK:STDOUT: %a.loc7_12.1: %C = symbolic_binding a, 0 [symbolic = %a.loc7_12.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -280,6 +282,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Bar(%a.loc10_12.2: %C) { +// CHECK:STDOUT: %a.patt.loc10: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc10 (constants.%a.patt)] // CHECK:STDOUT: %a.loc10_12.1: %C = symbolic_binding a, 0 [symbolic = %a.loc10_12.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -294,10 +297,12 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo(constants.%a) { +// CHECK:STDOUT: %a.patt.loc7 => constants.%a.patt // CHECK:STDOUT: %a.loc7_12.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Bar(constants.%a) { +// CHECK:STDOUT: %a.patt.loc10 => constants.%a.patt // CHECK:STDOUT: %a.loc10_12.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: @@ -310,6 +315,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %a: %C = symbolic_binding a, 0 [symbolic] // CHECK:STDOUT: %Foo.type: type = generic_class_type @Foo [concrete] // CHECK:STDOUT: %Foo.generic: %Foo.type = struct_value () [concrete] @@ -323,7 +329,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %Foo.decl.loc6: %Foo.type = class_decl @Foo [concrete = constants.%Foo.generic] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc7: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6: type = splice_block %C.ref.loc6 [concrete = constants.%C] { // CHECK:STDOUT: %.Self.loc6: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -332,7 +338,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: %a.loc6_19.2: %C = symbolic_binding a, 0 [symbolic = %a.loc6_19.1 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type = class_decl @Foo [concrete = constants.%Foo.generic] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc7: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc7: type = splice_block %C.ref.loc7 [concrete = constants.%C] { // CHECK:STDOUT: %.Self.loc7: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -351,6 +357,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Foo(%a.loc6_19.2: %C) { +// CHECK:STDOUT: %a.patt.loc6: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6 (constants.%a.patt)] // CHECK:STDOUT: %a.loc6_19.1: %C = symbolic_binding a, 0 [symbolic = %a.loc6_19.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -365,6 +372,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo(constants.%a) { +// CHECK:STDOUT: %a.patt.loc6 => constants.%a.patt // CHECK:STDOUT: %a.loc6_19.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: @@ -377,6 +385,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %a: %C = symbolic_binding a, 0 [symbolic] // CHECK:STDOUT: %Foo.type.3e04c8.1: type = generic_class_type @Foo.loc6 [concrete] // CHECK:STDOUT: %Foo.generic.04949d.1: %Foo.type.3e04c8.1 = struct_value () [concrete] @@ -392,7 +401,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %Foo.decl.loc6: %Foo.type.3e04c8.1 = class_decl @Foo.loc6 [concrete = constants.%Foo.generic.04949d.1] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc6_12.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_12.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6: type = splice_block %C.ref [concrete = constants.%C] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -401,7 +410,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: %a.loc6_12.2: %C = symbolic_binding a, 0 [symbolic = %a.loc6_12.1 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc14: %Foo.type.3e04c8.2 = class_decl @Foo.loc14 [concrete = constants.%Foo.generic.04949d.2] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc14_12.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc14_12.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc14: type = splice_block %C.ref [concrete = constants.%C] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -420,12 +429,14 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Foo.loc6(%a.loc6_12.2: %C) { +// CHECK:STDOUT: %a.patt.loc6_12.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_12.2 (constants.%a.patt)] // CHECK:STDOUT: %a.loc6_12.1: %C = symbolic_binding a, 0 [symbolic = %a.loc6_12.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Foo.loc14(%a.loc14_12.2: %C) { +// CHECK:STDOUT: %a.patt.loc14_12.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc14_12.2 (constants.%a.patt)] // CHECK:STDOUT: %a.loc14_12.1: %C = symbolic_binding a, 0 [symbolic = %a.loc14_12.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -440,10 +451,12 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo.loc6(constants.%a) { +// CHECK:STDOUT: %a.patt.loc6_12.2 => constants.%a.patt // CHECK:STDOUT: %a.loc6_12.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo.loc14(constants.%a) { +// CHECK:STDOUT: %a.patt.loc14_12.2 => constants.%a.patt // CHECK:STDOUT: %a.loc14_12.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: @@ -456,6 +469,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %a: %C = symbolic_binding a, 0 [symbolic] // CHECK:STDOUT: %Foo.type.3e04c8.1: type = generic_class_type @Foo.loc6 [concrete] // CHECK:STDOUT: %Foo.generic.04949d.1: %Foo.type.3e04c8.1 = struct_value () [concrete] @@ -471,7 +485,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %Foo.decl.loc6: %Foo.type.3e04c8.1 = class_decl @Foo.loc6 [concrete = constants.%Foo.generic.04949d.1] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc6_12.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_12.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6: type = splice_block %C.ref [concrete = constants.%C] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -480,7 +494,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: %a.loc6_12.2: %C = symbolic_binding a, 0 [symbolic = %a.loc6_12.1 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc14: %Foo.type.3e04c8.2 = class_decl @Foo.loc14 [concrete = constants.%Foo.generic.04949d.2] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc14_12.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc14_12.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc14: type = splice_block %C.ref [concrete = constants.%C] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -499,12 +513,14 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Foo.loc6(%a.loc6_12.2: %C) { +// CHECK:STDOUT: %a.patt.loc6_12.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_12.2 (constants.%a.patt)] // CHECK:STDOUT: %a.loc6_12.1: %C = symbolic_binding a, 0 [symbolic = %a.loc6_12.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Foo.loc14(%a.loc14_12.2: %C) { +// CHECK:STDOUT: %a.patt.loc14_12.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc14_12.2 (constants.%a.patt)] // CHECK:STDOUT: %a.loc14_12.1: %C = symbolic_binding a, 0 [symbolic = %a.loc14_12.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -519,10 +535,12 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo.loc6(constants.%a) { +// CHECK:STDOUT: %a.patt.loc6_12.2 => constants.%a.patt // CHECK:STDOUT: %a.loc6_12.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo.loc14(constants.%a) { +// CHECK:STDOUT: %a.patt.loc14_12.2 => constants.%a.patt // CHECK:STDOUT: %a.loc14_12.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: @@ -535,6 +553,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %a: %C = symbolic_binding a, 0 [symbolic] // CHECK:STDOUT: %Foo.type: type = generic_class_type @Foo [concrete] // CHECK:STDOUT: %Foo.generic: %Foo.type = struct_value () [concrete] @@ -553,7 +572,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %D: type = alias_binding D, %C.ref [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl: %Foo.type = class_decl @Foo [concrete = constants.%Foo.generic] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc7_12.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_12.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc7: type = splice_block %C.ref [concrete = constants.%C] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -562,7 +581,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: %a.loc7_12.2: %C = symbolic_binding a, 0 [symbolic = %a.loc7_12.1 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Bar.decl: %Bar.type = class_decl @Bar [concrete = constants.%Bar.generic] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc8_12.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc8_12.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8: type = splice_block %D.ref [concrete = constants.%C] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -581,22 +600,26 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Foo(%a.loc7_12.2: %C) { +// CHECK:STDOUT: %a.patt.loc7_12.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_12.2 (constants.%a.patt)] // CHECK:STDOUT: %a.loc7_12.1: %C = symbolic_binding a, 0 [symbolic = %a.loc7_12.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Bar(%a.loc8_12.2: %C) { +// CHECK:STDOUT: %a.patt.loc8_12.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc8_12.2 (constants.%a.patt)] // CHECK:STDOUT: %a.loc8_12.1: %C = symbolic_binding a, 0 [symbolic = %a.loc8_12.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo(constants.%a) { +// CHECK:STDOUT: %a.patt.loc7_12.2 => constants.%a.patt // CHECK:STDOUT: %a.loc7_12.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Bar(constants.%a) { +// CHECK:STDOUT: %a.patt.loc8_12.2 => constants.%a.patt // CHECK:STDOUT: %a.loc8_12.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: @@ -609,6 +632,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %a: %C = symbolic_binding a, 0 [symbolic] // CHECK:STDOUT: %Foo.type: type = generic_class_type @Foo [concrete] // CHECK:STDOUT: %Foo.generic: %Foo.type = struct_value () [concrete] @@ -637,7 +661,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: %default.import.loc2_24.1 = import // CHECK:STDOUT: %default.import.loc2_24.2 = import // CHECK:STDOUT: %Foo.decl: %Foo.type = class_decl @Foo [concrete = constants.%Foo.generic] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc4: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.1 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4: type = splice_block %C.ref [concrete = constants.%C] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -646,7 +670,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: %a.loc4: %C = symbolic_binding a, 0 [symbolic = %a.1 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Bar.decl: %Bar.type = class_decl @Bar [concrete = constants.%Bar.generic] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc5: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.1 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc5: type = splice_block %D.ref [concrete = constants.%C] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -664,6 +688,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Foo(imports.%Main.import_ref.99696d.1: %C) { +// CHECK:STDOUT: %a.patt.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.1 (constants.%a.patt)] // CHECK:STDOUT: %a.1: %C = symbolic_binding a, 0 [symbolic = %a.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -678,6 +703,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Bar(imports.%Main.import_ref.99696d.2: %C) { +// CHECK:STDOUT: %a.patt.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.1 (constants.%a.patt)] // CHECK:STDOUT: %a.1: %C = symbolic_binding a, 0 [symbolic = %a.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -692,10 +718,12 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo(constants.%a) { +// CHECK:STDOUT: %a.patt.1 => constants.%a.patt // CHECK:STDOUT: %a.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Bar(constants.%a) { +// CHECK:STDOUT: %a.patt.1 => constants.%a.patt // CHECK:STDOUT: %a.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: @@ -708,9 +736,11 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %a: %C = symbolic_binding a, 0 [symbolic] // CHECK:STDOUT: %Foo.type.3e04c8.1: type = generic_class_type @Foo.loc7 [concrete] // CHECK:STDOUT: %Foo.generic.04949d.1: %Foo.type.3e04c8.1 = struct_value () [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type = symbolic_binding_pattern b, 0 [symbolic] // CHECK:STDOUT: %b: %C = symbolic_binding b, 0 [symbolic] // CHECK:STDOUT: %Foo.type.3e04c8.2: type = generic_class_type @Foo.loc15 [concrete] // CHECK:STDOUT: %Foo.generic.04949d.2: %Foo.type.3e04c8.2 = struct_value () [concrete] @@ -727,7 +757,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %D: type = alias_binding D, %C.ref [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type.3e04c8.1 = class_decl @Foo.loc7 [concrete = constants.%Foo.generic.04949d.1] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc7_12.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_12.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc7: type = splice_block %C.ref [concrete = constants.%C] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -736,7 +766,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: %a.loc7_12.2: %C = symbolic_binding a, 0 [symbolic = %a.loc7_12.1 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc15: %Foo.type.3e04c8.2 = class_decl @Foo.loc15 [concrete = constants.%Foo.generic.04949d.2] { -// CHECK:STDOUT: %b.patt: %pattern_type = symbolic_binding_pattern b, 0 [concrete] +// CHECK:STDOUT: %b.patt.loc15_12.1: %pattern_type = symbolic_binding_pattern b, 0 [symbolic = %b.patt.loc15_12.2 (constants.%b.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc15: type = splice_block %D.ref [concrete = constants.%C] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -755,12 +785,14 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Foo.loc7(%a.loc7_12.2: %C) { +// CHECK:STDOUT: %a.patt.loc7_12.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_12.2 (constants.%a.patt)] // CHECK:STDOUT: %a.loc7_12.1: %C = symbolic_binding a, 0 [symbolic = %a.loc7_12.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Foo.loc15(%b.loc15_12.2: %C) { +// CHECK:STDOUT: %b.patt.loc15_12.2: %pattern_type = symbolic_binding_pattern b, 0 [symbolic = %b.patt.loc15_12.2 (constants.%b.patt)] // CHECK:STDOUT: %b.loc15_12.1: %C = symbolic_binding b, 0 [symbolic = %b.loc15_12.1 (constants.%b)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -775,10 +807,12 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo.loc7(constants.%a) { +// CHECK:STDOUT: %a.patt.loc7_12.2 => constants.%a.patt // CHECK:STDOUT: %a.loc7_12.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo.loc15(constants.%b) { +// CHECK:STDOUT: %b.patt.loc15_12.2 => constants.%b.patt // CHECK:STDOUT: %b.loc15_12.1 => constants.%b // CHECK:STDOUT: } // CHECK:STDOUT: @@ -791,6 +825,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %a: %C = symbolic_binding a, 0 [symbolic] // CHECK:STDOUT: %Foo.type.3e04c8.1: type = generic_class_type @Foo.loc7 [concrete] // CHECK:STDOUT: %Foo.generic.04949d.1: %Foo.type.3e04c8.1 = struct_value () [concrete] @@ -809,7 +844,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %D: type = alias_binding D, %C.ref [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type.3e04c8.1 = class_decl @Foo.loc7 [concrete = constants.%Foo.generic.04949d.1] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc7_12.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_12.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc7: type = splice_block %C.ref [concrete = constants.%C] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -818,7 +853,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: %a.loc7_12.2: %C = symbolic_binding a, 0 [symbolic = %a.loc7_12.1 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc15: %Foo.type.3e04c8.2 = class_decl @Foo.loc15 [concrete = constants.%Foo.generic.04949d.2] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc15_12.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc15_12.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc15: type = splice_block %D.ref [concrete = constants.%C] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -837,12 +872,14 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Foo.loc7(%a.loc7_12.2: %C) { +// CHECK:STDOUT: %a.patt.loc7_12.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_12.2 (constants.%a.patt)] // CHECK:STDOUT: %a.loc7_12.1: %C = symbolic_binding a, 0 [symbolic = %a.loc7_12.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Foo.loc15(%a.loc15_12.2: %C) { +// CHECK:STDOUT: %a.patt.loc15_12.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc15_12.2 (constants.%a.patt)] // CHECK:STDOUT: %a.loc15_12.1: %C = symbolic_binding a, 0 [symbolic = %a.loc15_12.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -857,10 +894,12 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo.loc7(constants.%a) { +// CHECK:STDOUT: %a.patt.loc7_12.2 => constants.%a.patt // CHECK:STDOUT: %a.loc7_12.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo.loc15(constants.%a) { +// CHECK:STDOUT: %a.patt.loc15_12.2 => constants.%a.patt // CHECK:STDOUT: %a.loc15_12.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: @@ -873,6 +912,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %a: %C = symbolic_binding a, 0 [symbolic] // CHECK:STDOUT: %Foo.type.3e04c8.1: type = generic_class_type @Foo.loc7 [concrete] // CHECK:STDOUT: %Foo.generic.04949d.1: %Foo.type.3e04c8.1 = struct_value () [concrete] @@ -891,7 +931,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %D: type = alias_binding D, %C.ref [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type.3e04c8.1 = class_decl @Foo.loc7 [concrete = constants.%Foo.generic.04949d.1] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc7_12.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_12.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc7: type = splice_block %C.ref [concrete = constants.%C] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -900,7 +940,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: %a.loc7_12.2: %C = symbolic_binding a, 0 [symbolic = %a.loc7_12.1 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc15: %Foo.type.3e04c8.2 = class_decl @Foo.loc15 [concrete = constants.%Foo.generic.04949d.2] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc15_12.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc15_12.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc15: type = splice_block %D.ref [concrete = constants.%C] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -919,12 +959,14 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Foo.loc7(%a.loc7_12.2: %C) { +// CHECK:STDOUT: %a.patt.loc7_12.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_12.2 (constants.%a.patt)] // CHECK:STDOUT: %a.loc7_12.1: %C = symbolic_binding a, 0 [symbolic = %a.loc7_12.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Foo.loc15(%a.loc15_12.2: %C) { +// CHECK:STDOUT: %a.patt.loc15_12.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc15_12.2 (constants.%a.patt)] // CHECK:STDOUT: %a.loc15_12.1: %C = symbolic_binding a, 0 [symbolic = %a.loc15_12.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -939,10 +981,12 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo.loc7(constants.%a) { +// CHECK:STDOUT: %a.patt.loc7_12.2 => constants.%a.patt // CHECK:STDOUT: %a.loc7_12.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo.loc15(constants.%a) { +// CHECK:STDOUT: %a.patt.loc15_12.2 => constants.%a.patt // CHECK:STDOUT: %a.loc15_12.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: @@ -955,6 +999,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %a: %C = symbolic_binding a, 0 [symbolic] // CHECK:STDOUT: %Foo.type: type = generic_class_type @Foo [concrete] // CHECK:STDOUT: %Foo.generic: %Foo.type = struct_value () [concrete] @@ -967,7 +1012,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %Foo.decl: %Foo.type = class_decl @Foo [concrete = constants.%Foo.generic] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc6_12.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_12.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6: type = splice_block %C.ref [concrete = constants.%C] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -986,12 +1031,14 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Foo(%a.loc6_12.2: %C) { +// CHECK:STDOUT: %a.patt.loc6_12.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_12.2 (constants.%a.patt)] // CHECK:STDOUT: %a.loc6_12.1: %C = symbolic_binding a, 0 [symbolic = %a.loc6_12.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo(constants.%a) { +// CHECK:STDOUT: %a.patt.loc6_12.2 => constants.%a.patt // CHECK:STDOUT: %a.loc6_12.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1004,6 +1051,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %a: %C = symbolic_binding a, 0 [symbolic] // CHECK:STDOUT: %Foo.type: type = generic_class_type @Foo [concrete] // CHECK:STDOUT: %Foo.generic: %Foo.type = struct_value () [concrete] @@ -1028,7 +1076,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %D: type = alias_binding D, %C.ref [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl: %Foo.type = class_decl @Foo [concrete = constants.%Foo.generic] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc6: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.1 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6: type = splice_block %D.ref [concrete = constants.%C] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1046,6 +1094,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Foo(imports.%Main.import_ref.996: %C) { +// CHECK:STDOUT: %a.patt.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.1 (constants.%a.patt)] // CHECK:STDOUT: %a.1: %C = symbolic_binding a, 0 [symbolic = %a.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1060,6 +1109,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo(constants.%a) { +// CHECK:STDOUT: %a.patt.1 => constants.%a.patt // CHECK:STDOUT: %a.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1073,6 +1123,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %const: type = const_type %C [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %const [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %a: %const = symbolic_binding a, 0 [symbolic] // CHECK:STDOUT: %Foo.type.3e04c8.1: type = generic_class_type @Foo.loc6 [concrete] // CHECK:STDOUT: %Foo.generic.04949d.1: %Foo.type.3e04c8.1 = struct_value () [concrete] @@ -1088,7 +1139,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %Foo.decl.loc6: %Foo.type.3e04c8.1 = class_decl @Foo.loc6 [concrete = constants.%Foo.generic.04949d.1] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc6_12.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_12.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6: type = splice_block %const [concrete = constants.%const] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1098,7 +1149,7 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: %a.loc6_12.2: %const = symbolic_binding a, 0 [symbolic = %a.loc6_12.1 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc18: %Foo.type.3e04c8.2 = class_decl @Foo.loc18 [concrete = constants.%Foo.generic.04949d.2] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc18_12.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc18_12.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc18: type = splice_block %const.loc18_15 [concrete = constants.%const] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1119,12 +1170,14 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Foo.loc6(%a.loc6_12.2: %const) { +// CHECK:STDOUT: %a.patt.loc6_12.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_12.2 (constants.%a.patt)] // CHECK:STDOUT: %a.loc6_12.1: %const = symbolic_binding a, 0 [symbolic = %a.loc6_12.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Foo.loc18(%a.loc18_12.2: %const) { +// CHECK:STDOUT: %a.patt.loc18_12.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc18_12.2 (constants.%a.patt)] // CHECK:STDOUT: %a.loc18_12.1: %const = symbolic_binding a, 0 [symbolic = %a.loc18_12.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1139,10 +1192,12 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo.loc6(constants.%a) { +// CHECK:STDOUT: %a.patt.loc6_12.2 => constants.%a.patt // CHECK:STDOUT: %a.loc6_12.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo.loc18(constants.%a) { +// CHECK:STDOUT: %a.patt.loc18_12.2 => constants.%a.patt // CHECK:STDOUT: %a.loc18_12.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1154,6 +1209,8 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %Base.elem: type = unbound_element_type %Base, %empty_tuple.type [concrete] // CHECK:STDOUT: %pattern_type.912: type = pattern_type %Base [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.912 = ref_param_pattern [concrete] +// CHECK:STDOUT: %self.patt: %pattern_type.912 = at_binding_pattern self, %self.param_patt [concrete] // CHECK:STDOUT: %Base.F.type.48cdab.1: type = fn_type @Base.F.loc7 [concrete] // CHECK:STDOUT: %Base.F.bd5be1.1: %Base.F.type.48cdab.1 = struct_value () [concrete] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %empty_tuple.type} [concrete] @@ -1168,8 +1225,8 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: } // CHECK:STDOUT: %Base.decl: type = class_decl @Base [concrete = constants.%Base] {} {} // CHECK:STDOUT: %Base.F.decl: %Base.F.type.48cdab.2 = fn_decl @Base.F.loc17 [concrete = constants.%Base.F.bd5be1.2] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.912 = ref_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.912 = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.912 = ref_param_pattern [concrete = constants.%self.param_patt] +// CHECK:STDOUT: %self.patt: %pattern_type.912 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %Base = ref_param call_param0 // CHECK:STDOUT: %Base.ref: type = name_ref Base, file.%Base.decl [concrete = constants.%Base] @@ -1180,8 +1237,8 @@ fn Base.F(ref self: Base) { // CHECK:STDOUT: class @Base { // CHECK:STDOUT: %.loc5: %Base.elem = field_decl a, element0 [concrete] // CHECK:STDOUT: %Base.F.decl: %Base.F.type.48cdab.1 = fn_decl @Base.F.loc7 [concrete = constants.%Base.F.bd5be1.1] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.912 = ref_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.912 = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.912 = ref_param_pattern [concrete = constants.%self.param_patt] +// CHECK:STDOUT: %self.patt: %pattern_type.912 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %Base = ref_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] diff --git a/toolchain/check/testdata/class/syntactic_merge_literal.carbon b/toolchain/check/testdata/class/syntactic_merge_literal.carbon index c50256de1e7f..b70cc80c07a8 100644 --- a/toolchain/check/testdata/class/syntactic_merge_literal.carbon +++ b/toolchain/check/testdata/class/syntactic_merge_literal.carbon @@ -45,6 +45,7 @@ class D(b:! C(1_000)) {} // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %a: %i32 = symbolic_binding a, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] @@ -70,6 +71,7 @@ class D(b:! C(1_000)) {} // CHECK:STDOUT: %int_1000.55f: %i32 = int_value 1000 [concrete] // CHECK:STDOUT: %C.847: type = class_type @C, @C(%int_1000.55f) [concrete] // CHECK:STDOUT: %pattern_type.053: type = pattern_type %C.847 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.053 = symbolic_binding_pattern b, 0 [symbolic] // CHECK:STDOUT: %b: %C.847 = symbolic_binding b, 0 [symbolic] // CHECK:STDOUT: %D.type: type = generic_class_type @D [concrete] // CHECK:STDOUT: %D.generic: %D.type = struct_value () [concrete] @@ -97,7 +99,7 @@ class D(b:! C(1_000)) {} // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc4_10.1: %pattern_type.6b6 = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc4_10.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4: type = splice_block %i32 [concrete = constants.%i32] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -106,7 +108,7 @@ class D(b:! C(1_000)) {} // CHECK:STDOUT: %a.loc4_10.2: %i32 = symbolic_binding a, 0 [symbolic = %a.loc4_10.1 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %D.decl.loc5: %D.type = class_decl @D [concrete = constants.%D.generic] { -// CHECK:STDOUT: %b.patt: %pattern_type.053 = symbolic_binding_pattern b, 0 [concrete] +// CHECK:STDOUT: %b.patt.loc6: %pattern_type.053 = symbolic_binding_pattern b, 0 [symbolic = %b.patt.loc5 (constants.%b.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc5_20.1: type = splice_block %C.loc5 [concrete = constants.%C.847] { // CHECK:STDOUT: %.Self.loc5: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -124,7 +126,7 @@ class D(b:! C(1_000)) {} // CHECK:STDOUT: %b.loc5_10.2: %C.847 = symbolic_binding b, 0 [symbolic = %b.loc5_10.1 (constants.%b)] // CHECK:STDOUT: } // CHECK:STDOUT: %D.decl.loc6: %D.type = class_decl @D [concrete = constants.%D.generic] { -// CHECK:STDOUT: %b.patt: %pattern_type.053 = symbolic_binding_pattern b, 0 [concrete] +// CHECK:STDOUT: %b.patt.loc6: %pattern_type.053 = symbolic_binding_pattern b, 0 [symbolic = %b.patt.loc5 (constants.%b.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6_20.1: type = splice_block %C.loc6 [concrete = constants.%C.847] { // CHECK:STDOUT: %.Self.loc6: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -144,6 +146,7 @@ class D(b:! C(1_000)) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%a.loc4_10.2: %i32) { +// CHECK:STDOUT: %a.patt.loc4_10.2: %pattern_type.6b6 = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc4_10.2 (constants.%a.patt)] // CHECK:STDOUT: %a.loc4_10.1: %i32 = symbolic_binding a, 0 [symbolic = %a.loc4_10.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -158,6 +161,7 @@ class D(b:! C(1_000)) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @D(%b.loc5_10.2: %C.847) { +// CHECK:STDOUT: %b.patt.loc5: %pattern_type.053 = symbolic_binding_pattern b, 0 [symbolic = %b.patt.loc5 (constants.%b.patt)] // CHECK:STDOUT: %b.loc5_10.1: %C.847 = symbolic_binding b, 0 [symbolic = %b.loc5_10.1 (constants.%b)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -172,14 +176,17 @@ class D(b:! C(1_000)) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%a) { +// CHECK:STDOUT: %a.patt.loc4_10.2 => constants.%a.patt // CHECK:STDOUT: %a.loc4_10.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%int_1000.55f) { +// CHECK:STDOUT: %a.patt.loc4_10.2 => constants.%a.patt // CHECK:STDOUT: %a.loc4_10.1 => constants.%int_1000.55f // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @D(constants.%b) { +// CHECK:STDOUT: %b.patt.loc5 => constants.%b.patt // CHECK:STDOUT: %b.loc5_10.1 => constants.%b // CHECK:STDOUT: } // CHECK:STDOUT: @@ -193,6 +200,7 @@ class D(b:! C(1_000)) {} // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %a: %i32 = symbolic_binding a, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] @@ -218,6 +226,7 @@ class D(b:! C(1_000)) {} // CHECK:STDOUT: %int_1000.55f: %i32 = int_value 1000 [concrete] // CHECK:STDOUT: %C.847: type = class_type @C, @C(%int_1000.55f) [concrete] // CHECK:STDOUT: %pattern_type.053: type = pattern_type %C.847 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.053 = symbolic_binding_pattern b, 0 [symbolic] // CHECK:STDOUT: %b: %C.847 = symbolic_binding b, 0 [symbolic] // CHECK:STDOUT: %D.type.ff75f2.1: type = generic_class_type @D.loc5 [concrete] // CHECK:STDOUT: %D.generic.7223e9.1: %D.type.ff75f2.1 = struct_value () [concrete] @@ -247,7 +256,7 @@ class D(b:! C(1_000)) {} // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc4_10.1: %pattern_type.6b6 = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc4_10.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4: type = splice_block %i32 [concrete = constants.%i32] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -256,7 +265,7 @@ class D(b:! C(1_000)) {} // CHECK:STDOUT: %a.loc4_10.2: %i32 = symbolic_binding a, 0 [symbolic = %a.loc4_10.1 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %D.decl.loc5: %D.type.ff75f2.1 = class_decl @D.loc5 [concrete = constants.%D.generic.7223e9.1] { -// CHECK:STDOUT: %b.patt: %pattern_type.053 = symbolic_binding_pattern b, 0 [concrete] +// CHECK:STDOUT: %b.patt.loc5_10.1: %pattern_type.053 = symbolic_binding_pattern b, 0 [symbolic = %b.patt.loc5_10.2 (constants.%b.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc5_19.1: type = splice_block %C [concrete = constants.%C.847] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -274,7 +283,7 @@ class D(b:! C(1_000)) {} // CHECK:STDOUT: %b.loc5_10.2: %C.847 = symbolic_binding b, 0 [symbolic = %b.loc5_10.1 (constants.%b)] // CHECK:STDOUT: } // CHECK:STDOUT: %D.decl.loc13: %D.type.ff75f2.2 = class_decl @D.loc13 [concrete = constants.%D.generic.7223e9.2] { -// CHECK:STDOUT: %b.patt: %pattern_type.053 = symbolic_binding_pattern b, 0 [concrete] +// CHECK:STDOUT: %b.patt.loc13_10.1: %pattern_type.053 = symbolic_binding_pattern b, 0 [symbolic = %b.patt.loc13_10.2 (constants.%b.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc13_20.1: type = splice_block %C [concrete = constants.%C.847] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -294,6 +303,7 @@ class D(b:! C(1_000)) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%a.loc4_10.2: %i32) { +// CHECK:STDOUT: %a.patt.loc4_10.2: %pattern_type.6b6 = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc4_10.2 (constants.%a.patt)] // CHECK:STDOUT: %a.loc4_10.1: %i32 = symbolic_binding a, 0 [symbolic = %a.loc4_10.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -308,12 +318,14 @@ class D(b:! C(1_000)) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @D.loc5(%b.loc5_10.2: %C.847) { +// CHECK:STDOUT: %b.patt.loc5_10.2: %pattern_type.053 = symbolic_binding_pattern b, 0 [symbolic = %b.patt.loc5_10.2 (constants.%b.patt)] // CHECK:STDOUT: %b.loc5_10.1: %C.847 = symbolic_binding b, 0 [symbolic = %b.loc5_10.1 (constants.%b)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @D.loc13(%b.loc13_10.2: %C.847) { +// CHECK:STDOUT: %b.patt.loc13_10.2: %pattern_type.053 = symbolic_binding_pattern b, 0 [symbolic = %b.patt.loc13_10.2 (constants.%b.patt)] // CHECK:STDOUT: %b.loc13_10.1: %C.847 = symbolic_binding b, 0 [symbolic = %b.loc13_10.1 (constants.%b)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -328,18 +340,22 @@ class D(b:! C(1_000)) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%a) { +// CHECK:STDOUT: %a.patt.loc4_10.2 => constants.%a.patt // CHECK:STDOUT: %a.loc4_10.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%int_1000.55f) { +// CHECK:STDOUT: %a.patt.loc4_10.2 => constants.%a.patt // CHECK:STDOUT: %a.loc4_10.1 => constants.%int_1000.55f // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @D.loc5(constants.%b) { +// CHECK:STDOUT: %b.patt.loc5_10.2 => constants.%b.patt // CHECK:STDOUT: %b.loc5_10.1 => constants.%b // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @D.loc13(constants.%b) { +// CHECK:STDOUT: %b.patt.loc13_10.2 => constants.%b.patt // CHECK:STDOUT: %b.loc13_10.1 => constants.%b // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/const/basics.carbon b/toolchain/check/testdata/const/basics.carbon index fec80d6ef218..812a962f16a2 100644 --- a/toolchain/check/testdata/const/basics.carbon +++ b/toolchain/check/testdata/const/basics.carbon @@ -136,7 +136,11 @@ fn PassConstReferenceToReference(p: const X*) { // CHECK:STDOUT: %ptr.77f: type = ptr_type %const.13f [concrete] // CHECK:STDOUT: %ptr.0c8: type = ptr_type %ptr.77f [concrete] // CHECK:STDOUT: %pattern_type.803: type = pattern_type %ptr.0c8 [concrete] +// CHECK:STDOUT: %p.param_patt.a04: %pattern_type.803 = value_param_pattern [concrete] +// CHECK:STDOUT: %p.patt.b92: %pattern_type.803 = at_binding_pattern p, %p.param_patt.a04 [concrete] // CHECK:STDOUT: %.5f5: Core.Form = init_form %ptr.0c8 [concrete] +// CHECK:STDOUT: %return.param_patt.934: %pattern_type.803 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.895: %pattern_type.803 = return_slot_pattern %return.param_patt.934, %ptr.0c8 [concrete] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -156,7 +160,11 @@ fn PassConstReferenceToReference(p: const X*) { // CHECK:STDOUT: %ptr.6b6: type = ptr_type %C [concrete] // CHECK:STDOUT: %const.0f8: type = const_type %ptr.6b6 [concrete] // CHECK:STDOUT: %pattern_type.76c: type = pattern_type %const.0f8 [concrete] +// CHECK:STDOUT: %p.param_patt.eb7: %pattern_type.76c = value_param_pattern [concrete] +// CHECK:STDOUT: %p.patt.168: %pattern_type.76c = at_binding_pattern p, %p.param_patt.eb7 [concrete] // CHECK:STDOUT: %.fdf: Core.Form = init_form %const.0f8 [concrete] +// CHECK:STDOUT: %return.param_patt.7d8: %pattern_type.76c = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.973: %pattern_type.76c = return_slot_pattern %return.param_patt.7d8, %const.0f8 [concrete] // CHECK:STDOUT: %B.type: type = fn_type @B [concrete] // CHECK:STDOUT: %B: %B.type = struct_value () [concrete] // CHECK:STDOUT: %Copy.impl_witness.65f: = impl_witness imports.%Copy.impl_witness_table.4f1, @ptr.as.Copy.impl(%C) [concrete] @@ -179,10 +187,10 @@ fn PassConstReferenceToReference(p: const X*) { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] { -// CHECK:STDOUT: %p.param_patt: %pattern_type.803 = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.803 = at_binding_pattern p, %p.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.803 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.803 = return_slot_pattern %return.param_patt, %ptr.loc6_31 [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.803 = value_param_pattern [concrete = constants.%p.param_patt.a04] +// CHECK:STDOUT: %p.patt: %pattern_type.803 = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt.b92] +// CHECK:STDOUT: %return.param_patt: %pattern_type.803 = out_param_pattern [concrete = constants.%return.param_patt.934] +// CHECK:STDOUT: %return.patt: %pattern_type.803 = return_slot_pattern %return.param_patt, %ptr.loc6_31 [concrete = constants.%return.patt.895] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc6_29: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %const.loc6_23: type = const_type %C.ref.loc6_29 [concrete = constants.%const.13f] @@ -201,10 +209,10 @@ fn PassConstReferenceToReference(p: const X*) { // CHECK:STDOUT: %return: ref %ptr.0c8 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %B.decl: %B.type = fn_decl @B [concrete = constants.%B] { -// CHECK:STDOUT: %p.param_patt: %pattern_type.76c = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.76c = at_binding_pattern p, %p.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.76c = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.76c = return_slot_pattern %return.param_patt, %const.loc10_24 [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.76c = value_param_pattern [concrete = constants.%p.param_patt.eb7] +// CHECK:STDOUT: %p.patt: %pattern_type.76c = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt.168] +// CHECK:STDOUT: %return.param_patt: %pattern_type.76c = out_param_pattern [concrete = constants.%return.param_patt.7d8] +// CHECK:STDOUT: %return.patt: %pattern_type.76c = return_slot_pattern %return.param_patt, %const.loc10_24 [concrete = constants.%return.patt.973] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc10_31: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %ptr.loc10_32: type = ptr_type %C.ref.loc10_31 [concrete = constants.%ptr.6b6] @@ -238,8 +246,10 @@ fn PassConstReferenceToReference(p: const X*) { // CHECK:STDOUT: %p.ref: %const.0f8 = name_ref p, %p // CHECK:STDOUT: %impl.elem0: %.8c4 = impl_witness_access constants.%Copy.impl_witness.8b4, element0 [concrete = constants.%const.as.Copy.impl.Op.714] // CHECK:STDOUT: %bound_method.loc11_10.1: = bound_method %p.ref, %impl.elem0 -// CHECK:STDOUT: %Copy.facet: %Copy.type = facet_value constants.%ptr.6b6, (constants.%Copy.impl_witness.65f) [concrete = constants.%Copy.facet.3f0] -// CHECK:STDOUT: %.loc11: %Copy.type = converted constants.%ptr.6b6, %Copy.facet [concrete = constants.%Copy.facet.3f0] +// CHECK:STDOUT: %Copy.facet.loc11_10.1: %Copy.type = facet_value constants.%ptr.6b6, (constants.%Copy.impl_witness.65f) [concrete = constants.%Copy.facet.3f0] +// CHECK:STDOUT: %.loc11_10.1: %Copy.type = converted constants.%ptr.6b6, %Copy.facet.loc11_10.1 [concrete = constants.%Copy.facet.3f0] +// CHECK:STDOUT: %Copy.facet.loc11_10.2: %Copy.type = facet_value constants.%ptr.6b6, (constants.%Copy.impl_witness.65f) [concrete = constants.%Copy.facet.3f0] +// CHECK:STDOUT: %.loc11_10.2: %Copy.type = converted constants.%ptr.6b6, %Copy.facet.loc11_10.2 [concrete = constants.%Copy.facet.3f0] // CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0, @const.as.Copy.impl.Op(constants.%Copy.facet.3f0) [concrete = constants.%const.as.Copy.impl.Op.specific_fn] // CHECK:STDOUT: %bound_method.loc11_10.2: = bound_method %p.ref, %specific_fn // CHECK:STDOUT: %const.as.Copy.impl.Op.call: init %const.0f8 = call %bound_method.loc11_10.2(%p.ref) @@ -254,7 +264,11 @@ fn PassConstReferenceToReference(p: const X*) { // CHECK:STDOUT: %ptr.77f: type = ptr_type %const.13f [concrete] // CHECK:STDOUT: %ptr.0c8: type = ptr_type %ptr.77f [concrete] // CHECK:STDOUT: %pattern_type.803: type = pattern_type %ptr.0c8 [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.803 = value_param_pattern [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.803 = at_binding_pattern p, %p.param_patt [concrete] // CHECK:STDOUT: %.5f5: Core.Form = init_form %ptr.0c8 [concrete] +// CHECK:STDOUT: %return.param_patt.934: %pattern_type.803 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.895: %pattern_type.803 = return_slot_pattern %return.param_patt.934, %ptr.0c8 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -277,10 +291,10 @@ fn PassConstReferenceToReference(p: const X*) { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %p.param_patt: %pattern_type.803 = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.803 = at_binding_pattern p, %p.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.803 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.803 = return_slot_pattern %return.param_patt, %ptr.loc11_39 [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.803 = value_param_pattern [concrete = constants.%p.param_patt] +// CHECK:STDOUT: %p.patt: %pattern_type.803 = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.803 = out_param_pattern [concrete = constants.%return.param_patt.934] +// CHECK:STDOUT: %return.patt: %pattern_type.803 = return_slot_pattern %return.param_patt, %ptr.loc11_39 [concrete = constants.%return.patt.895] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc11_36: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %const.loc11_30: type = const_type %C.ref.loc11_36 [concrete = constants.%const.13f] diff --git a/toolchain/check/testdata/const/import.carbon b/toolchain/check/testdata/const/import.carbon index b2c4033015bb..b5204f949529 100644 --- a/toolchain/check/testdata/const/import.carbon +++ b/toolchain/check/testdata/const/import.carbon @@ -41,7 +41,11 @@ var a_ptr: const C* = a_ptr_ref; // CHECK:STDOUT: %const.13f: type = const_type %C [concrete] // CHECK:STDOUT: %ptr.77f: type = ptr_type %const.13f [concrete] // CHECK:STDOUT: %pattern_type.7d2: type = pattern_type %ptr.77f [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.7d2 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.7d2 = var_pattern %a.patt [concrete] // CHECK:STDOUT: %pattern_type.1e4: type = pattern_type %const.13f [concrete] +// CHECK:STDOUT: %a_ref.patt: %pattern_type.1e4 = ref_binding_pattern a_ref [concrete] +// CHECK:STDOUT: %a_ref.var_patt: %pattern_type.1e4 = var_pattern %a_ref.patt [concrete] // CHECK:STDOUT: %addr: %ptr.77f = addr_of imports.%a_ref.var [concrete] // CHECK:STDOUT: %Copy.impl_witness.08a: = impl_witness imports.%Copy.impl_witness_table.90e, @ptr.as.Copy.impl(%const.13f) [concrete] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.type.da8: type = fn_type @ptr.as.Copy.impl.Op, @ptr.as.Copy.impl(%const.13f) [concrete] @@ -52,6 +56,10 @@ var a_ptr: const C* = a_ptr_ref; // CHECK:STDOUT: %ptr.as.Copy.impl.Op.bound: = bound_method %addr, %ptr.as.Copy.impl.Op.194 [concrete] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.specific_fn: = specific_function %ptr.as.Copy.impl.Op.194, @ptr.as.Copy.impl.Op(%const.13f) [concrete] // CHECK:STDOUT: %bound_method: = bound_method %addr, %ptr.as.Copy.impl.Op.specific_fn [concrete] +// CHECK:STDOUT: %a_ptr.patt: %pattern_type.7d2 = ref_binding_pattern a_ptr [concrete] +// CHECK:STDOUT: %a_ptr.var_patt: %pattern_type.7d2 = var_pattern %a_ptr.patt [concrete] +// CHECK:STDOUT: %a_ptr_ref.patt: %pattern_type.7d2 = ref_binding_pattern a_ptr_ref [concrete] +// CHECK:STDOUT: %a_ptr_ref.var_patt: %pattern_type.7d2 = var_pattern %a_ptr_ref.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -60,18 +68,14 @@ var a_ptr: const C* = a_ptr_ref; // CHECK:STDOUT: %Main.a_ptr_ref: ref %ptr.77f = import_ref Main//implicit, a_ptr_ref, loaded [concrete = %a_ptr_ref.var] // CHECK:STDOUT: %Main.import_ref.499: @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op.type (%ptr.as.Copy.impl.Op.type.ff5) = import_ref Main//implicit, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op (constants.%ptr.as.Copy.impl.Op.ce9)] // CHECK:STDOUT: %Copy.impl_witness_table.90e = impl_witness_table (%Main.import_ref.499), @ptr.as.Copy.impl [concrete] -// CHECK:STDOUT: %a_ref.patt: %pattern_type.1e4 = ref_binding_pattern a_ref [concrete] -// CHECK:STDOUT: %a_ref.var_patt: %pattern_type.1e4 = var_pattern %a_ref.patt [concrete] -// CHECK:STDOUT: %a_ref.var: ref %const.13f = var %a_ref.var_patt [concrete] -// CHECK:STDOUT: %a_ptr_ref.patt: %pattern_type.7d2 = ref_binding_pattern a_ptr_ref [concrete] -// CHECK:STDOUT: %a_ptr_ref.var_patt: %pattern_type.7d2 = var_pattern %a_ptr_ref.patt [concrete] -// CHECK:STDOUT: %a_ptr_ref.var: ref %ptr.77f = var %a_ptr_ref.var_patt [concrete] +// CHECK:STDOUT: %a_ref.var: ref %const.13f = var constants.%a_ref.var_patt [concrete] +// CHECK:STDOUT: %a_ptr_ref.var: ref %ptr.77f = var constants.%a_ptr_ref.var_patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.7d2 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.7d2 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.7d2 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.7d2 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %ptr.77f = var %a.var_patt [concrete] // CHECK:STDOUT: %.loc6: type = splice_block %ptr.loc6 [concrete = constants.%ptr.77f] { @@ -81,8 +85,8 @@ var a_ptr: const C* = a_ptr_ref; // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %ptr.77f = ref_binding a, %a.var [concrete = %a.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a_ptr.patt: %pattern_type.7d2 = ref_binding_pattern a_ptr [concrete] -// CHECK:STDOUT: %a_ptr.var_patt: %pattern_type.7d2 = var_pattern %a_ptr.patt [concrete] +// CHECK:STDOUT: %a_ptr.patt: %pattern_type.7d2 = ref_binding_pattern a_ptr [concrete = constants.%a_ptr.patt] +// CHECK:STDOUT: %a_ptr.var_patt: %pattern_type.7d2 = var_pattern %a_ptr.patt [concrete = constants.%a_ptr.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a_ptr.var: ref %ptr.77f = var %a_ptr.var_patt [concrete] // CHECK:STDOUT: %.loc7: type = splice_block %ptr.loc7 [concrete = constants.%ptr.77f] { diff --git a/toolchain/check/testdata/deduce/array.carbon b/toolchain/check/testdata/deduce/array.carbon index b485fa71a63b..7ef02bee984b 100644 --- a/toolchain/check/testdata/deduce/array.carbon +++ b/toolchain/check/testdata/deduce/array.carbon @@ -154,12 +154,17 @@ fn G() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %array_type.3ec: type = array_type %int_3, %T [symbolic] // CHECK:STDOUT: %pattern_type.b3f: type = pattern_type %array_type.3ec [symbolic] +// CHECK:STDOUT: %a.param_patt.480: %pattern_type.b3f = value_param_pattern [symbolic] +// CHECK:STDOUT: %a.patt.2e7: %pattern_type.b3f = at_binding_pattern a, %a.param_patt.480 [symbolic] // CHECK:STDOUT: %.184: Core.Form = init_form %T [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %return.param_patt.41d: %pattern_type.51d = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.b39: %pattern_type.51d = return_slot_pattern %return.param_patt.41d, %T [symbolic] // 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] @@ -167,10 +172,14 @@ fn G() { // CHECK:STDOUT: %F.specific_fn.eab: = specific_function %F, @F(%T) [symbolic] // CHECK:STDOUT: %.a44: Core.Form = init_form %C [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %return.param_patt.89a: %pattern_type.98b = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e4a: %pattern_type.98b = return_slot_pattern %return.param_patt.89a, %C [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %array_type.9a3: type = array_type %int_3, %C [concrete] // CHECK:STDOUT: %pattern_type.3f5: type = pattern_type %array_type.9a3 [concrete] +// CHECK:STDOUT: %a.patt.b51: %pattern_type.3f5 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.3f5 = var_pattern %a.patt.b51 [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %tuple.type.8d4: type = tuple_type (%empty_struct_type, %empty_struct_type, %empty_struct_type) [concrete] // CHECK:STDOUT: %tuple: %tuple.type.8d4 = tuple_value (%empty_struct, %empty_struct, %empty_struct) [concrete] @@ -179,6 +188,8 @@ fn G() { // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %array: %array_type.9a3 = tuple_value (%C.val, %C.val, %C.val) [concrete] +// CHECK:STDOUT: %a.param_patt.79a: %pattern_type.3f5 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt.e9e: %pattern_type.3f5 = at_binding_pattern a, %a.param_patt.79a [concrete] // CHECK:STDOUT: %F.specific_fn.e0d: = specific_function %F, @F(%C) [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.3: type = fn_type @Destroy.Op.loc9_3.3 [concrete] @@ -205,11 +216,11 @@ fn G() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %a.param_patt: @F.%pattern_type.loc6_17 (%pattern_type.b3f) = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: @F.%pattern_type.loc6_17 (%pattern_type.b3f) = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @F.%pattern_type.loc6_35 (%pattern_type.51d) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @F.%pattern_type.loc6_35 (%pattern_type.51d) = return_slot_pattern %return.param_patt, %T.ref.loc6_35 [concrete] +// CHECK:STDOUT: %T.patt.loc6_7.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_7.2 (constants.%T.patt)] +// CHECK:STDOUT: %a.param_patt.loc6_17.1: @F.%pattern_type.loc6_17 (%pattern_type.b3f) = value_param_pattern [symbolic = %a.param_patt.loc6_17.2 (constants.%a.param_patt.480)] +// CHECK:STDOUT: %a.patt.loc6_17.1: @F.%pattern_type.loc6_17 (%pattern_type.b3f) = at_binding_pattern a, %a.param_patt.loc6_17.1 [symbolic = %a.patt.loc6_17.2 (constants.%a.patt.2e7)] +// CHECK:STDOUT: %return.param_patt.loc6_35.1: @F.%pattern_type.loc6_35 (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt.loc6_35.2 (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt.loc6_32.1: @F.%pattern_type.loc6_35 (%pattern_type.51d) = return_slot_pattern %return.param_patt.loc6_35.1, %T.ref.loc6_35 [symbolic = %return.patt.loc6_32.2 (constants.%return.patt.b39)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc6_35: type = name_ref T, %T.loc6_7.2 [symbolic = %T.loc6_7.1 (constants.%T)] // CHECK:STDOUT: %.loc6_35.3: Core.Form = init_form %T.ref.loc6_35 [symbolic = %.loc6_35.2 (constants.%.184)] @@ -229,8 +240,8 @@ fn G() { // CHECK:STDOUT: %return: ref @F.%T.loc6_7.1 (%T) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C.ref.loc8 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete = constants.%return.param_patt.89a] +// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C.ref.loc8 [concrete = constants.%return.patt.e4a] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc8: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %.loc8_11.2: Core.Form = init_form %C.ref.loc8 [concrete = constants.%.a44] @@ -248,11 +259,16 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc6_7.2: type) { +// CHECK:STDOUT: %T.patt.loc6_7.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_7.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc6_7.1: type = symbolic_binding T, 0 [symbolic = %T.loc6_7.1 (constants.%T)] // CHECK:STDOUT: %array_type.loc6_29.1: type = array_type constants.%int_3, %T.loc6_7.1 [symbolic = %array_type.loc6_29.1 (constants.%array_type.3ec)] // CHECK:STDOUT: %pattern_type.loc6_17: type = pattern_type %array_type.loc6_29.1 [symbolic = %pattern_type.loc6_17 (constants.%pattern_type.b3f)] +// CHECK:STDOUT: %a.param_patt.loc6_17.2: @F.%pattern_type.loc6_17 (%pattern_type.b3f) = value_param_pattern [symbolic = %a.param_patt.loc6_17.2 (constants.%a.param_patt.480)] +// CHECK:STDOUT: %a.patt.loc6_17.2: @F.%pattern_type.loc6_17 (%pattern_type.b3f) = at_binding_pattern a, %a.param_patt.loc6_17.2 [symbolic = %a.patt.loc6_17.2 (constants.%a.patt.2e7)] // CHECK:STDOUT: %.loc6_35.2: Core.Form = init_form %T.loc6_7.1 [symbolic = %.loc6_35.2 (constants.%.184)] // CHECK:STDOUT: %pattern_type.loc6_35: type = pattern_type %T.loc6_7.1 [symbolic = %pattern_type.loc6_35 (constants.%pattern_type.51d)] +// CHECK:STDOUT: %return.param_patt.loc6_35.2: @F.%pattern_type.loc6_35 (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt.loc6_35.2 (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt.loc6_32.2: @F.%pattern_type.loc6_35 (%pattern_type.51d) = return_slot_pattern %return.param_patt.loc6_35.2, %T.loc6_7.1 [symbolic = %return.patt.loc6_32.2 (constants.%return.patt.b39)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %array_type.loc6_29.1 [symbolic = %require_complete (constants.%require_complete)] @@ -272,8 +288,8 @@ fn G() { // CHECK:STDOUT: fn @G() -> out %return.param: %C { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.3f5 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.3f5 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.3f5 = ref_binding_pattern a [concrete = constants.%a.patt.b51] +// CHECK:STDOUT: %a.var_patt: %pattern_type.3f5 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type.9a3 = var %a.var_patt // CHECK:STDOUT: %.loc9_26.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] @@ -325,11 +341,16 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T) { +// CHECK:STDOUT: %T.patt.loc6_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc6_7.1 => constants.%T // CHECK:STDOUT: %array_type.loc6_29.1 => constants.%array_type.3ec // CHECK:STDOUT: %pattern_type.loc6_17 => constants.%pattern_type.b3f +// CHECK:STDOUT: %a.param_patt.loc6_17.2 => constants.%a.param_patt.480 +// CHECK:STDOUT: %a.patt.loc6_17.2 => constants.%a.patt.2e7 // CHECK:STDOUT: %.loc6_35.2 => constants.%.184 // CHECK:STDOUT: %pattern_type.loc6_35 => constants.%pattern_type.51d +// CHECK:STDOUT: %return.param_patt.loc6_35.2 => constants.%return.param_patt.41d +// CHECK:STDOUT: %return.patt.loc6_32.2 => constants.%return.patt.b39 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete @@ -337,11 +358,16 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%C) { +// CHECK:STDOUT: %T.patt.loc6_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc6_7.1 => constants.%C // CHECK:STDOUT: %array_type.loc6_29.1 => constants.%array_type.9a3 // CHECK:STDOUT: %pattern_type.loc6_17 => constants.%pattern_type.3f5 +// CHECK:STDOUT: %a.param_patt.loc6_17.2 => constants.%a.param_patt.79a +// CHECK:STDOUT: %a.patt.loc6_17.2 => constants.%a.patt.e9e // CHECK:STDOUT: %.loc6_35.2 => constants.%.a44 // CHECK:STDOUT: %pattern_type.loc6_35 => constants.%pattern_type.98b +// CHECK:STDOUT: %return.param_patt.loc6_35.2 => constants.%return.param_patt.89a +// CHECK:STDOUT: %return.patt.loc6_32.2 => constants.%return.patt.e4a // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.1a4 @@ -357,9 +383,12 @@ fn G() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.dc0: type = pattern_type Core.IntLiteral [concrete] +// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %array_type.87f: type = array_type %N, %C [symbolic] // CHECK:STDOUT: %pattern_type.5ed: type = pattern_type %array_type.87f [symbolic] +// CHECK:STDOUT: %a.param_patt.9e2: %pattern_type.5ed = value_param_pattern [symbolic] +// CHECK:STDOUT: %a.patt.59e: %pattern_type.5ed = at_binding_pattern a, %a.param_patt.9e2 [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %Int.type: type = generic_class_type @Int [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -367,6 +396,8 @@ fn G() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.29f: = require_complete_type %array_type.87f [symbolic] @@ -391,6 +422,8 @@ fn G() { // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %array_type.9a3: type = array_type %int_3.1ba, %C [concrete] // CHECK:STDOUT: %pattern_type.3f5: type = pattern_type %array_type.9a3 [concrete] +// CHECK:STDOUT: %a.patt.b51: %pattern_type.3f5 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.3f5 = var_pattern %a.patt.b51 [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %tuple.type.8d4: type = tuple_type (%empty_struct_type, %empty_struct_type, %empty_struct_type) [concrete] // CHECK:STDOUT: %tuple: %tuple.type.8d4 = tuple_value (%empty_struct, %empty_struct, %empty_struct) [concrete] @@ -399,6 +432,8 @@ fn G() { // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %array: %array_type.9a3 = tuple_value (%C.val, %C.val, %C.val) [concrete] +// CHECK:STDOUT: %a.param_patt.79a: %pattern_type.3f5 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt.e9e: %pattern_type.3f5 = at_binding_pattern a, %a.param_patt.79a [concrete] // CHECK:STDOUT: %F.specific_fn: = specific_function %F, @F(%int_3.1ba) [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.3: type = fn_type @Destroy.Op.loc9_3.3 [concrete] @@ -436,11 +471,11 @@ fn G() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [concrete] -// CHECK:STDOUT: %a.param_patt: @F.%pattern_type (%pattern_type.5ed) = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: @F.%pattern_type (%pattern_type.5ed) = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %N.patt.loc6_7.1: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc6_7.2 (constants.%N.patt)] +// CHECK:STDOUT: %a.param_patt.loc6_35.1: @F.%pattern_type (%pattern_type.5ed) = value_param_pattern [symbolic = %a.param_patt.loc6_35.2 (constants.%a.param_patt.9e2)] +// CHECK:STDOUT: %a.patt.loc6_35.1: @F.%pattern_type (%pattern_type.5ed) = at_binding_pattern a, %a.param_patt.loc6_35.1 [symbolic = %a.patt.loc6_35.2 (constants.%a.patt.59e)] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc6_53: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -461,8 +496,8 @@ fn G() { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc8: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -480,9 +515,12 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%N.loc6_7.2: Core.IntLiteral) { +// CHECK:STDOUT: %N.patt.loc6_7.2: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc6_7.2 (constants.%N.patt)] // CHECK:STDOUT: %N.loc6_7.1: Core.IntLiteral = symbolic_binding N, 0 [symbolic = %N.loc6_7.1 (constants.%N)] // CHECK:STDOUT: %array_type.loc6_47.1: type = array_type %N.loc6_7.1, constants.%C [symbolic = %array_type.loc6_47.1 (constants.%array_type.87f)] // CHECK:STDOUT: %pattern_type: type = pattern_type %array_type.loc6_47.1 [symbolic = %pattern_type (constants.%pattern_type.5ed)] +// CHECK:STDOUT: %a.param_patt.loc6_35.2: @F.%pattern_type (%pattern_type.5ed) = value_param_pattern [symbolic = %a.param_patt.loc6_35.2 (constants.%a.param_patt.9e2)] +// CHECK:STDOUT: %a.patt.loc6_35.2: @F.%pattern_type (%pattern_type.5ed) = at_binding_pattern a, %a.param_patt.loc6_35.2 [symbolic = %a.patt.loc6_35.2 (constants.%a.patt.59e)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %array_type.loc6_47.1 [symbolic = %require_complete (constants.%require_complete.29f)] @@ -506,8 +544,8 @@ fn G() { // CHECK:STDOUT: fn @G() -> out %return.param: %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.3f5 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.3f5 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.3f5 = ref_binding_pattern a [concrete = constants.%a.patt.b51] +// CHECK:STDOUT: %a.var_patt: %pattern_type.3f5 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type.9a3 = var %a.var_patt // CHECK:STDOUT: %.loc9_26.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] @@ -558,15 +596,21 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%N) { +// CHECK:STDOUT: %N.patt.loc6_7.2 => constants.%N.patt // CHECK:STDOUT: %N.loc6_7.1 => constants.%N // CHECK:STDOUT: %array_type.loc6_47.1 => constants.%array_type.87f // CHECK:STDOUT: %pattern_type => constants.%pattern_type.5ed +// CHECK:STDOUT: %a.param_patt.loc6_35.2 => constants.%a.param_patt.9e2 +// CHECK:STDOUT: %a.patt.loc6_35.2 => constants.%a.patt.59e // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%int_3.1ba) { +// CHECK:STDOUT: %N.patt.loc6_7.2 => constants.%N.patt // CHECK:STDOUT: %N.loc6_7.1 => constants.%int_3.1ba // CHECK:STDOUT: %array_type.loc6_47.1 => constants.%array_type.9a3 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.3f5 +// CHECK:STDOUT: %a.param_patt.loc6_35.2 => constants.%a.param_patt.79a +// CHECK:STDOUT: %a.patt.loc6_35.2 => constants.%a.patt.e9e // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.1a4 @@ -584,11 +628,15 @@ fn G() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %pattern_type.dc0: type = pattern_type Core.IntLiteral [concrete] +// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = symbolic_binding_pattern N, 1 [symbolic] // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 1 [symbolic] // CHECK:STDOUT: %array_type.6d2: type = array_type %N, %T [symbolic] // CHECK:STDOUT: %pattern_type.4d8: type = pattern_type %array_type.6d2 [symbolic] +// CHECK:STDOUT: %a.param_patt.0e1: %pattern_type.4d8 = value_param_pattern [symbolic] +// CHECK:STDOUT: %a.patt.3a9: %pattern_type.4d8 = at_binding_pattern a, %a.param_patt.0e1 [symbolic] // 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] @@ -598,6 +646,8 @@ fn G() { // CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %array_type.9a3: type = array_type %int_3, %C [concrete] // CHECK:STDOUT: %pattern_type.3f5: type = pattern_type %array_type.9a3 [concrete] +// CHECK:STDOUT: %a.patt.b51: %pattern_type.3f5 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.3f5 = var_pattern %a.patt.b51 [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %tuple.type.8d4: type = tuple_type (%empty_struct_type, %empty_struct_type, %empty_struct_type) [concrete] // CHECK:STDOUT: %tuple: %tuple.type.8d4 = tuple_value (%empty_struct, %empty_struct, %empty_struct) [concrete] @@ -606,6 +656,8 @@ fn G() { // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %array: %array_type.9a3 = tuple_value (%C.val, %C.val, %C.val) [concrete] +// CHECK:STDOUT: %a.param_patt.79a: %pattern_type.3f5 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt.e9e: %pattern_type.3f5 = at_binding_pattern a, %a.param_patt.79a [concrete] // CHECK:STDOUT: %F.specific_fn: = specific_function %F, @F(%C, %int_3) [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.3: type = fn_type @Destroy.Op.loc9_3.3 [concrete] @@ -634,10 +686,10 @@ fn G() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = symbolic_binding_pattern N, 1 [concrete] -// CHECK:STDOUT: %a.param_patt: @F.%pattern_type (%pattern_type.4d8) = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: @F.%pattern_type (%pattern_type.4d8) = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %T.patt.loc6_7.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_7.2 (constants.%T.patt)] +// CHECK:STDOUT: %N.patt.loc6_17.1: %pattern_type.dc0 = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc6_17.2 (constants.%N.patt)] +// CHECK:STDOUT: %a.param_patt.loc6_45.1: @F.%pattern_type (%pattern_type.4d8) = value_param_pattern [symbolic = %a.param_patt.loc6_45.2 (constants.%a.param_patt.0e1)] +// CHECK:STDOUT: %a.patt.loc6_45.1: @F.%pattern_type (%pattern_type.4d8) = at_binding_pattern a, %a.param_patt.loc6_45.1 [symbolic = %a.patt.loc6_45.2 (constants.%a.patt.3a9)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6_10.1: type = splice_block %.loc6_10.2 [concrete = type] { // CHECK:STDOUT: %.Self.loc6_7: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -670,10 +722,14 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc6_7.2: type, %N.loc6_17.2: Core.IntLiteral) { +// CHECK:STDOUT: %T.patt.loc6_7.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_7.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc6_7.1: type = symbolic_binding T, 0 [symbolic = %T.loc6_7.1 (constants.%T)] +// CHECK:STDOUT: %N.patt.loc6_17.2: %pattern_type.dc0 = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc6_17.2 (constants.%N.patt)] // CHECK:STDOUT: %N.loc6_17.1: Core.IntLiteral = symbolic_binding N, 1 [symbolic = %N.loc6_17.1 (constants.%N)] // CHECK:STDOUT: %array_type.loc6_57.1: type = array_type %N.loc6_17.1, %T.loc6_7.1 [symbolic = %array_type.loc6_57.1 (constants.%array_type.6d2)] // CHECK:STDOUT: %pattern_type: type = pattern_type %array_type.loc6_57.1 [symbolic = %pattern_type (constants.%pattern_type.4d8)] +// CHECK:STDOUT: %a.param_patt.loc6_45.2: @F.%pattern_type (%pattern_type.4d8) = value_param_pattern [symbolic = %a.param_patt.loc6_45.2 (constants.%a.param_patt.0e1)] +// CHECK:STDOUT: %a.patt.loc6_45.2: @F.%pattern_type (%pattern_type.4d8) = at_binding_pattern a, %a.param_patt.loc6_45.2 [symbolic = %a.patt.loc6_45.2 (constants.%a.patt.3a9)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %array_type.loc6_57.1 [symbolic = %require_complete (constants.%require_complete)] @@ -687,8 +743,8 @@ fn G() { // CHECK:STDOUT: fn @G() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.3f5 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.3f5 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.3f5 = ref_binding_pattern a [concrete = constants.%a.patt.b51] +// CHECK:STDOUT: %a.var_patt: %pattern_type.3f5 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type.9a3 = var %a.var_patt // CHECK:STDOUT: %.loc9_26.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] @@ -739,17 +795,25 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T, constants.%N) { +// CHECK:STDOUT: %T.patt.loc6_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc6_7.1 => constants.%T +// CHECK:STDOUT: %N.patt.loc6_17.2 => constants.%N.patt // CHECK:STDOUT: %N.loc6_17.1 => constants.%N // CHECK:STDOUT: %array_type.loc6_57.1 => constants.%array_type.6d2 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.4d8 +// CHECK:STDOUT: %a.param_patt.loc6_45.2 => constants.%a.param_patt.0e1 +// CHECK:STDOUT: %a.patt.loc6_45.2 => constants.%a.patt.3a9 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%C, constants.%int_3) { +// CHECK:STDOUT: %T.patt.loc6_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc6_7.1 => constants.%C +// CHECK:STDOUT: %N.patt.loc6_17.2 => constants.%N.patt // CHECK:STDOUT: %N.loc6_17.1 => constants.%int_3 // CHECK:STDOUT: %array_type.loc6_57.1 => constants.%array_type.9a3 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.3f5 +// CHECK:STDOUT: %a.param_patt.loc6_45.2 => constants.%a.param_patt.79a +// CHECK:STDOUT: %a.patt.loc6_45.2 => constants.%a.patt.e9e // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.1a4 @@ -764,12 +828,17 @@ fn G() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %array_type.a0b: type = array_type %int_2, %T [symbolic] // CHECK:STDOUT: %pattern_type.b42: type = pattern_type %array_type.a0b [symbolic] +// CHECK:STDOUT: %a.param_patt.9b5: %pattern_type.b42 = value_param_pattern [symbolic] +// CHECK:STDOUT: %a.patt.388: %pattern_type.b42 = at_binding_pattern a, %a.param_patt.9b5 [symbolic] // CHECK:STDOUT: %.184347.1: Core.Form = init_form %T [symbolic] // CHECK:STDOUT: %pattern_type.51d1c4.1: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %return.param_patt.41d2d9.1: %pattern_type.51d1c4.1 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.b39: %pattern_type.51d1c4.1 = return_slot_pattern %return.param_patt.41d2d9.1, %T [symbolic] // 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] @@ -777,11 +846,15 @@ fn G() { // CHECK:STDOUT: %F.specific_fn.eab: = specific_function %F, @F(%T) [symbolic] // CHECK:STDOUT: %.a44: Core.Form = init_form %C [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %return.param_patt.89a: %pattern_type.98b = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e4a: %pattern_type.98b = return_slot_pattern %return.param_patt.89a, %C [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %array_type.9a3: type = array_type %int_3, %C [concrete] // CHECK:STDOUT: %pattern_type.3f5: type = pattern_type %array_type.9a3 [concrete] +// CHECK:STDOUT: %a.patt.b51: %pattern_type.3f5 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.3f5 = var_pattern %a.patt.b51 [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %tuple.type.8d4: type = tuple_type (%empty_struct_type, %empty_struct_type, %empty_struct_type) [concrete] // CHECK:STDOUT: %tuple: %tuple.type.8d4 = tuple_value (%empty_struct, %empty_struct, %empty_struct) [concrete] @@ -791,6 +864,8 @@ fn G() { // CHECK:STDOUT: %array: %array_type.9a3 = tuple_value (%C.val, %C.val, %C.val) [concrete] // CHECK:STDOUT: %array_type.cc9: type = array_type %int_2, %C [concrete] // CHECK:STDOUT: %pattern_type.08b: type = pattern_type %array_type.cc9 [concrete] +// CHECK:STDOUT: %a.param_patt.143: %pattern_type.08b = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt.7c0: %pattern_type.08b = at_binding_pattern a, %a.param_patt.143 [concrete] // CHECK:STDOUT: %F.specific_fn.e0d: = specific_function %F, @F(%C) [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -821,11 +896,11 @@ fn G() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %a.param_patt: @F.%pattern_type.loc6_17 (%pattern_type.b42) = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: @F.%pattern_type.loc6_17 (%pattern_type.b42) = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @F.%pattern_type.loc6_35 (%pattern_type.51d1c4.1) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @F.%pattern_type.loc6_35 (%pattern_type.51d1c4.1) = return_slot_pattern %return.param_patt, %T.ref.loc6_35 [concrete] +// CHECK:STDOUT: %T.patt.loc6_7.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_7.2 (constants.%T.patt)] +// CHECK:STDOUT: %a.param_patt.loc6_17.1: @F.%pattern_type.loc6_17 (%pattern_type.b42) = value_param_pattern [symbolic = %a.param_patt.loc6_17.2 (constants.%a.param_patt.9b5)] +// CHECK:STDOUT: %a.patt.loc6_17.1: @F.%pattern_type.loc6_17 (%pattern_type.b42) = at_binding_pattern a, %a.param_patt.loc6_17.1 [symbolic = %a.patt.loc6_17.2 (constants.%a.patt.388)] +// CHECK:STDOUT: %return.param_patt.loc6_35.1: @F.%pattern_type.loc6_35 (%pattern_type.51d1c4.1) = out_param_pattern [symbolic = %return.param_patt.loc6_35.2 (constants.%return.param_patt.41d2d9.1)] +// CHECK:STDOUT: %return.patt.loc6_32.1: @F.%pattern_type.loc6_35 (%pattern_type.51d1c4.1) = return_slot_pattern %return.param_patt.loc6_35.1, %T.ref.loc6_35 [symbolic = %return.patt.loc6_32.2 (constants.%return.patt.b39)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc6_35: type = name_ref T, %T.loc6_7.2 [symbolic = %T.loc6_7.1 (constants.%T)] // CHECK:STDOUT: %.loc6_35.3: Core.Form = init_form %T.ref.loc6_35 [symbolic = %.loc6_35.2 (constants.%.184347.1)] @@ -845,8 +920,8 @@ fn G() { // CHECK:STDOUT: %return: ref @F.%T.loc6_7.1 (%T) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C.ref.loc8 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete = constants.%return.param_patt.89a] +// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C.ref.loc8 [concrete = constants.%return.patt.e4a] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc8: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %.loc8_11.2: Core.Form = init_form %C.ref.loc8 [concrete = constants.%.a44] @@ -864,11 +939,16 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc6_7.2: type) { +// CHECK:STDOUT: %T.patt.loc6_7.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_7.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc6_7.1: type = symbolic_binding T, 0 [symbolic = %T.loc6_7.1 (constants.%T)] // CHECK:STDOUT: %array_type.loc6_29.1: type = array_type constants.%int_2, %T.loc6_7.1 [symbolic = %array_type.loc6_29.1 (constants.%array_type.a0b)] // CHECK:STDOUT: %pattern_type.loc6_17: type = pattern_type %array_type.loc6_29.1 [symbolic = %pattern_type.loc6_17 (constants.%pattern_type.b42)] +// CHECK:STDOUT: %a.param_patt.loc6_17.2: @F.%pattern_type.loc6_17 (%pattern_type.b42) = value_param_pattern [symbolic = %a.param_patt.loc6_17.2 (constants.%a.param_patt.9b5)] +// CHECK:STDOUT: %a.patt.loc6_17.2: @F.%pattern_type.loc6_17 (%pattern_type.b42) = at_binding_pattern a, %a.param_patt.loc6_17.2 [symbolic = %a.patt.loc6_17.2 (constants.%a.patt.388)] // CHECK:STDOUT: %.loc6_35.2: Core.Form = init_form %T.loc6_7.1 [symbolic = %.loc6_35.2 (constants.%.184347.1)] // CHECK:STDOUT: %pattern_type.loc6_35: type = pattern_type %T.loc6_7.1 [symbolic = %pattern_type.loc6_35 (constants.%pattern_type.51d1c4.1)] +// CHECK:STDOUT: %return.param_patt.loc6_35.2: @F.%pattern_type.loc6_35 (%pattern_type.51d1c4.1) = out_param_pattern [symbolic = %return.param_patt.loc6_35.2 (constants.%return.param_patt.41d2d9.1)] +// CHECK:STDOUT: %return.patt.loc6_32.2: @F.%pattern_type.loc6_35 (%pattern_type.51d1c4.1) = return_slot_pattern %return.param_patt.loc6_35.2, %T.loc6_7.1 [symbolic = %return.patt.loc6_32.2 (constants.%return.patt.b39)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %array_type.loc6_29.1 [symbolic = %require_complete (constants.%require_complete)] @@ -888,8 +968,8 @@ fn G() { // CHECK:STDOUT: fn @G() -> out %return.param: %C { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.3f5 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.3f5 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.3f5 = ref_binding_pattern a [concrete = constants.%a.patt.b51] +// CHECK:STDOUT: %a.var_patt: %pattern_type.3f5 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type.9a3 = var %a.var_patt // CHECK:STDOUT: %.loc10_26.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] @@ -941,11 +1021,16 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T) { +// CHECK:STDOUT: %T.patt.loc6_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc6_7.1 => constants.%T // CHECK:STDOUT: %array_type.loc6_29.1 => constants.%array_type.a0b // CHECK:STDOUT: %pattern_type.loc6_17 => constants.%pattern_type.b42 +// CHECK:STDOUT: %a.param_patt.loc6_17.2 => constants.%a.param_patt.9b5 +// CHECK:STDOUT: %a.patt.loc6_17.2 => constants.%a.patt.388 // CHECK:STDOUT: %.loc6_35.2 => constants.%.184347.1 // CHECK:STDOUT: %pattern_type.loc6_35 => constants.%pattern_type.51d1c4.1 +// CHECK:STDOUT: %return.param_patt.loc6_35.2 => constants.%return.param_patt.41d2d9.1 +// CHECK:STDOUT: %return.patt.loc6_32.2 => constants.%return.patt.b39 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete @@ -953,11 +1038,16 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%C) { +// CHECK:STDOUT: %T.patt.loc6_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc6_7.1 => constants.%C // CHECK:STDOUT: %array_type.loc6_29.1 => constants.%array_type.cc9 // CHECK:STDOUT: %pattern_type.loc6_17 => constants.%pattern_type.08b +// CHECK:STDOUT: %a.param_patt.loc6_17.2 => constants.%a.param_patt.143 +// CHECK:STDOUT: %a.patt.loc6_17.2 => constants.%a.patt.7c0 // CHECK:STDOUT: %.loc6_35.2 => constants.%.a44 // CHECK:STDOUT: %pattern_type.loc6_35 => constants.%pattern_type.98b +// CHECK:STDOUT: %return.param_patt.loc6_35.2 => constants.%return.param_patt.89a +// CHECK:STDOUT: %return.patt.loc6_32.2 => constants.%return.patt.e4a // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.d6a @@ -974,9 +1064,12 @@ fn G() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.dc0: type = pattern_type Core.IntLiteral [concrete] +// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %array_type.87f: type = array_type %N, %C [symbolic] // CHECK:STDOUT: %pattern_type.5ed: type = pattern_type %array_type.87f [symbolic] +// CHECK:STDOUT: %a.param_patt.9e2: %pattern_type.5ed = value_param_pattern [symbolic] +// CHECK:STDOUT: %a.patt.59e: %pattern_type.5ed = at_binding_pattern a, %a.param_patt.9e2 [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %Int.type: type = generic_class_type @Int [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -984,6 +1077,8 @@ fn G() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.29f: = require_complete_type %array_type.87f [symbolic] @@ -1008,6 +1103,8 @@ fn G() { // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %array_type.cec: type = array_type %int_3.1ba, %D [concrete] // CHECK:STDOUT: %pattern_type.0ed: type = pattern_type %array_type.cec [concrete] +// CHECK:STDOUT: %a.patt.7d5: %pattern_type.0ed = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.0ed = var_pattern %a.patt.7d5 [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %tuple.type.8d4: type = tuple_type (%empty_struct_type, %empty_struct_type, %empty_struct_type) [concrete] // CHECK:STDOUT: %tuple: %tuple.type.8d4 = tuple_value (%empty_struct, %empty_struct, %empty_struct) [concrete] @@ -1018,6 +1115,8 @@ fn G() { // CHECK:STDOUT: %array: %array_type.cec = tuple_value (%D.val, %D.val, %D.val) [concrete] // CHECK:STDOUT: %array_type.9a3: type = array_type %int_3.1ba, %C [concrete] // CHECK:STDOUT: %pattern_type.3f5: type = pattern_type %array_type.9a3 [concrete] +// CHECK:STDOUT: %a.param_patt.79a: %pattern_type.3f5 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt.e9e: %pattern_type.3f5 = at_binding_pattern a, %a.param_patt.79a [concrete] // CHECK:STDOUT: %F.specific_fn: = specific_function %F, @F(%int_3.1ba) [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.3: type = fn_type @Destroy.Op.loc11_3.3 [concrete] @@ -1057,11 +1156,11 @@ fn G() { // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %D.decl: type = class_decl @D [concrete = constants.%D] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [concrete] -// CHECK:STDOUT: %a.param_patt: @F.%pattern_type (%pattern_type.5ed) = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: @F.%pattern_type (%pattern_type.5ed) = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %N.patt.loc7_7.1: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc7_7.2 (constants.%N.patt)] +// CHECK:STDOUT: %a.param_patt.loc7_35.1: @F.%pattern_type (%pattern_type.5ed) = value_param_pattern [symbolic = %a.param_patt.loc7_35.2 (constants.%a.param_patt.9e2)] +// CHECK:STDOUT: %a.patt.loc7_35.1: @F.%pattern_type (%pattern_type.5ed) = at_binding_pattern a, %a.param_patt.loc7_35.1 [symbolic = %a.patt.loc7_35.2 (constants.%a.patt.59e)] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc7_53: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -1082,8 +1181,8 @@ fn G() { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc9: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -1109,9 +1208,12 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%N.loc7_7.2: Core.IntLiteral) { +// CHECK:STDOUT: %N.patt.loc7_7.2: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc7_7.2 (constants.%N.patt)] // CHECK:STDOUT: %N.loc7_7.1: Core.IntLiteral = symbolic_binding N, 0 [symbolic = %N.loc7_7.1 (constants.%N)] // CHECK:STDOUT: %array_type.loc7_47.1: type = array_type %N.loc7_7.1, constants.%C [symbolic = %array_type.loc7_47.1 (constants.%array_type.87f)] // CHECK:STDOUT: %pattern_type: type = pattern_type %array_type.loc7_47.1 [symbolic = %pattern_type (constants.%pattern_type.5ed)] +// CHECK:STDOUT: %a.param_patt.loc7_35.2: @F.%pattern_type (%pattern_type.5ed) = value_param_pattern [symbolic = %a.param_patt.loc7_35.2 (constants.%a.param_patt.9e2)] +// CHECK:STDOUT: %a.patt.loc7_35.2: @F.%pattern_type (%pattern_type.5ed) = at_binding_pattern a, %a.param_patt.loc7_35.2 [symbolic = %a.patt.loc7_35.2 (constants.%a.patt.59e)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %array_type.loc7_47.1 [symbolic = %require_complete (constants.%require_complete.29f)] @@ -1135,8 +1237,8 @@ fn G() { // CHECK:STDOUT: fn @G() -> out %return.param: %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.0ed = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.0ed = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.0ed = ref_binding_pattern a [concrete = constants.%a.patt.7d5] +// CHECK:STDOUT: %a.var_patt: %pattern_type.0ed = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type.cec = var %a.var_patt // CHECK:STDOUT: %.loc11_26.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] @@ -1187,15 +1289,21 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%N) { +// CHECK:STDOUT: %N.patt.loc7_7.2 => constants.%N.patt // CHECK:STDOUT: %N.loc7_7.1 => constants.%N // CHECK:STDOUT: %array_type.loc7_47.1 => constants.%array_type.87f // CHECK:STDOUT: %pattern_type => constants.%pattern_type.5ed +// CHECK:STDOUT: %a.param_patt.loc7_35.2 => constants.%a.param_patt.9e2 +// CHECK:STDOUT: %a.patt.loc7_35.2 => constants.%a.patt.59e // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%int_3.1ba) { +// CHECK:STDOUT: %N.patt.loc7_7.2 => constants.%N.patt // CHECK:STDOUT: %N.loc7_7.1 => constants.%int_3.1ba // CHECK:STDOUT: %array_type.loc7_47.1 => constants.%array_type.9a3 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.3f5 +// CHECK:STDOUT: %a.param_patt.loc7_35.2 => constants.%a.param_patt.79a +// CHECK:STDOUT: %a.patt.loc7_35.2 => constants.%a.patt.e9e // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.1a4 @@ -1219,6 +1327,7 @@ fn G() { // CHECK:STDOUT: %N.fe9: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %N.patt.38a: %pattern_type.6b6 = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %N.37f: %i32 = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -1238,7 +1347,11 @@ fn G() { // CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.call: init Core.IntLiteral = call %bound_method.7c3(%N.37f) [symbolic] // CHECK:STDOUT: %array_type.47c: type = array_type %Int.as.ImplicitAs.impl.Convert.call, %C [symbolic] // CHECK:STDOUT: %pattern_type.f28: type = pattern_type %array_type.47c [symbolic] +// CHECK:STDOUT: %a.param_patt: %pattern_type.f28 = value_param_pattern [symbolic] +// CHECK:STDOUT: %a.patt.624: %pattern_type.f28 = at_binding_pattern a, %a.param_patt [symbolic] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.540: = require_complete_type %array_type.47c [symbolic] @@ -1259,6 +1372,8 @@ fn G() { // CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %array_type.9a3: type = array_type %int_3, %C [concrete] // CHECK:STDOUT: %pattern_type.3f5: type = pattern_type %array_type.9a3 [concrete] +// CHECK:STDOUT: %a.patt.b51: %pattern_type.3f5 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.3f5 = var_pattern %a.patt.b51 [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %tuple.type.8d4: type = tuple_type (%empty_struct_type, %empty_struct_type, %empty_struct_type) [concrete] // CHECK:STDOUT: %tuple.5c1: %tuple.type.8d4 = tuple_value (%empty_struct, %empty_struct, %empty_struct) [concrete] @@ -1301,11 +1416,11 @@ fn G() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %N.patt: %pattern_type.6b6 = symbolic_binding_pattern N, 0 [concrete] -// CHECK:STDOUT: %a.param_patt: @F.%pattern_type (%pattern_type.f28) = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: @F.%pattern_type (%pattern_type.f28) = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc6_41 [concrete] +// CHECK:STDOUT: %N.patt.loc6_7.1: %pattern_type.6b6 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc6_7.2 (constants.%N.patt.38a)] +// CHECK:STDOUT: %a.param_patt.loc6_23.1: @F.%pattern_type (%pattern_type.f28) = value_param_pattern [symbolic = %a.param_patt.loc6_23.2 (constants.%a.param_patt)] +// CHECK:STDOUT: %a.patt.loc6_23.1: @F.%pattern_type (%pattern_type.f28) = at_binding_pattern a, %a.param_patt.loc6_23.1 [symbolic = %a.patt.loc6_23.2 (constants.%a.patt.624)] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc6_41 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc6_41: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc6_41: Core.Form = init_form %i32.loc6_41 [concrete = constants.%.795] @@ -1332,8 +1447,8 @@ fn G() { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc8: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -1351,12 +1466,15 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%N.loc6_7.2: %i32) { +// CHECK:STDOUT: %N.patt.loc6_7.2: %pattern_type.6b6 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc6_7.2 (constants.%N.patt.38a)] // CHECK:STDOUT: %N.loc6_7.1: %i32 = symbolic_binding N, 0 [symbolic = %N.loc6_7.1 (constants.%N.37f)] // CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.bound: = bound_method %N.loc6_7.1, constants.%Int.as.ImplicitAs.impl.Convert.69e [symbolic = %Int.as.ImplicitAs.impl.Convert.bound (constants.%Int.as.ImplicitAs.impl.Convert.bound)] // CHECK:STDOUT: %bound_method.loc6_34.1: = bound_method %N.loc6_7.1, constants.%Int.as.ImplicitAs.impl.Convert.specific_fn [symbolic = %bound_method.loc6_34.1 (constants.%bound_method.7c3)] // CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.call.loc6_34.1: init Core.IntLiteral = call %bound_method.loc6_34.1(%N.loc6_7.1) [symbolic = %Int.as.ImplicitAs.impl.Convert.call.loc6_34.1 (constants.%Int.as.ImplicitAs.impl.Convert.call)] // CHECK:STDOUT: %array_type.loc6_35.1: type = array_type %Int.as.ImplicitAs.impl.Convert.call.loc6_34.1, constants.%C [symbolic = %array_type.loc6_35.1 (constants.%array_type.47c)] // CHECK:STDOUT: %pattern_type: type = pattern_type %array_type.loc6_35.1 [symbolic = %pattern_type (constants.%pattern_type.f28)] +// CHECK:STDOUT: %a.param_patt.loc6_23.2: @F.%pattern_type (%pattern_type.f28) = value_param_pattern [symbolic = %a.param_patt.loc6_23.2 (constants.%a.param_patt)] +// CHECK:STDOUT: %a.patt.loc6_23.2: @F.%pattern_type (%pattern_type.f28) = at_binding_pattern a, %a.param_patt.loc6_23.2 [symbolic = %a.patt.loc6_23.2 (constants.%a.patt.624)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %array_type.loc6_35.1 [symbolic = %require_complete (constants.%require_complete.540)] @@ -1378,8 +1496,8 @@ fn G() { // CHECK:STDOUT: fn @G() -> out %return.param: %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.3f5 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.3f5 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.3f5 = ref_binding_pattern a [concrete = constants.%a.patt.b51] +// CHECK:STDOUT: %a.var_patt: %pattern_type.3f5 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type.9a3 = var %a.var_patt // CHECK:STDOUT: %.loc9_26.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] @@ -1427,12 +1545,15 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%N.37f) { +// CHECK:STDOUT: %N.patt.loc6_7.2 => constants.%N.patt.38a // CHECK:STDOUT: %N.loc6_7.1 => constants.%N.37f // CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.bound => constants.%Int.as.ImplicitAs.impl.Convert.bound // CHECK:STDOUT: %bound_method.loc6_34.1 => constants.%bound_method.7c3 // CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.call.loc6_34.1 => constants.%Int.as.ImplicitAs.impl.Convert.call // CHECK:STDOUT: %array_type.loc6_35.1 => constants.%array_type.47c // CHECK:STDOUT: %pattern_type => constants.%pattern_type.f28 +// CHECK:STDOUT: %a.param_patt.loc6_23.2 => constants.%a.param_patt +// CHECK:STDOUT: %a.patt.loc6_23.2 => constants.%a.patt.624 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_todo_array_length_from_tuple.carbon @@ -1448,6 +1569,7 @@ fn G() { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %N.patt.38a: %pattern_type.6b6 = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %N.37f: %i32 = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -1467,6 +1589,8 @@ fn G() { // CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.call: init Core.IntLiteral = call %bound_method(%N.37f) [symbolic] // CHECK:STDOUT: %array_type: type = array_type %Int.as.ImplicitAs.impl.Convert.call, %C [symbolic] // CHECK:STDOUT: %pattern_type.f28: type = pattern_type %array_type [symbolic] +// CHECK:STDOUT: %a.param_patt: %pattern_type.f28 = value_param_pattern [symbolic] +// CHECK:STDOUT: %a.patt: %pattern_type.f28 = at_binding_pattern a, %a.param_patt [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.540: = require_complete_type %array_type [symbolic] @@ -1500,9 +1624,9 @@ fn G() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %N.patt: %pattern_type.6b6 = symbolic_binding_pattern N, 0 [concrete] -// CHECK:STDOUT: %a.param_patt: @F.%pattern_type (%pattern_type.f28) = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: @F.%pattern_type (%pattern_type.f28) = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %N.patt.loc5_7.1: %pattern_type.6b6 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc5_7.2 (constants.%N.patt.38a)] +// CHECK:STDOUT: %a.param_patt.loc5_23.1: @F.%pattern_type (%pattern_type.f28) = value_param_pattern [symbolic = %a.param_patt.loc5_23.2 (constants.%a.param_patt)] +// CHECK:STDOUT: %a.patt.loc5_23.1: @F.%pattern_type (%pattern_type.f28) = at_binding_pattern a, %a.param_patt.loc5_23.1 [symbolic = %a.patt.loc5_23.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc5_10: type = splice_block %i32 [concrete = constants.%i32] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1536,12 +1660,15 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%N.loc5_7.2: %i32) { +// CHECK:STDOUT: %N.patt.loc5_7.2: %pattern_type.6b6 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc5_7.2 (constants.%N.patt.38a)] // CHECK:STDOUT: %N.loc5_7.1: %i32 = symbolic_binding N, 0 [symbolic = %N.loc5_7.1 (constants.%N.37f)] // CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.bound: = bound_method %N.loc5_7.1, constants.%Int.as.ImplicitAs.impl.Convert.69e [symbolic = %Int.as.ImplicitAs.impl.Convert.bound (constants.%Int.as.ImplicitAs.impl.Convert.bound)] // CHECK:STDOUT: %bound_method.loc5_34.1: = bound_method %N.loc5_7.1, constants.%Int.as.ImplicitAs.impl.Convert.specific_fn [symbolic = %bound_method.loc5_34.1 (constants.%bound_method)] // CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.call.loc5_34.1: init Core.IntLiteral = call %bound_method.loc5_34.1(%N.loc5_7.1) [symbolic = %Int.as.ImplicitAs.impl.Convert.call.loc5_34.1 (constants.%Int.as.ImplicitAs.impl.Convert.call)] // CHECK:STDOUT: %array_type.loc5_35.1: type = array_type %Int.as.ImplicitAs.impl.Convert.call.loc5_34.1, constants.%C [symbolic = %array_type.loc5_35.1 (constants.%array_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %array_type.loc5_35.1 [symbolic = %pattern_type (constants.%pattern_type.f28)] +// CHECK:STDOUT: %a.param_patt.loc5_23.2: @F.%pattern_type (%pattern_type.f28) = value_param_pattern [symbolic = %a.param_patt.loc5_23.2 (constants.%a.param_patt)] +// CHECK:STDOUT: %a.patt.loc5_23.2: @F.%pattern_type (%pattern_type.f28) = at_binding_pattern a, %a.param_patt.loc5_23.2 [symbolic = %a.patt.loc5_23.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %array_type.loc5_35.1 [symbolic = %require_complete (constants.%require_complete.540)] @@ -1563,11 +1690,14 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%N.37f) { +// CHECK:STDOUT: %N.patt.loc5_7.2 => constants.%N.patt.38a // CHECK:STDOUT: %N.loc5_7.1 => constants.%N.37f // CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.bound => constants.%Int.as.ImplicitAs.impl.Convert.bound // CHECK:STDOUT: %bound_method.loc5_34.1 => constants.%bound_method // CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.call.loc5_34.1 => constants.%Int.as.ImplicitAs.impl.Convert.call // CHECK:STDOUT: %array_type.loc5_35.1 => constants.%array_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.f28 +// CHECK:STDOUT: %a.param_patt.loc5_23.2 => constants.%a.param_patt +// CHECK:STDOUT: %a.patt.loc5_23.2 => constants.%a.patt // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/deduce/generic_type.carbon b/toolchain/check/testdata/deduce/generic_type.carbon index b3b5999e444a..95f039b6288e 100644 --- a/toolchain/check/testdata/deduce/generic_type.carbon +++ b/toolchain/check/testdata/deduce/generic_type.carbon @@ -75,6 +75,7 @@ fn G() -> i32 { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] @@ -83,8 +84,12 @@ fn G() -> i32 { // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %D: type = class_type @D [concrete] // CHECK:STDOUT: %pattern_type.ebe: type = pattern_type %C.1d0 [symbolic] +// CHECK:STDOUT: %p.param_patt.f49: %pattern_type.ebe = value_param_pattern [symbolic] +// CHECK:STDOUT: %p.patt.37b: %pattern_type.ebe = at_binding_pattern p, %p.param_patt.f49 [symbolic] // CHECK:STDOUT: %.184: Core.Form = init_form %T [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %return.param_patt.41d: %pattern_type.51d = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.b39: %pattern_type.51d = return_slot_pattern %return.param_patt.41d, %T [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.74a: = require_complete_type %C.1d0 [symbolic] @@ -92,8 +97,12 @@ fn G() -> i32 { // CHECK:STDOUT: %F.specific_fn.eab: = specific_function %F, @F(%T) [symbolic] // CHECK:STDOUT: %C.aae: type = class_type @C, @C(%D) [concrete] // CHECK:STDOUT: %pattern_type.3dc: type = pattern_type %C.aae [concrete] +// CHECK:STDOUT: %p.param_patt.ead: %pattern_type.3dc = value_param_pattern [concrete] +// CHECK:STDOUT: %p.patt.08c: %pattern_type.3dc = at_binding_pattern p, %p.param_patt.ead [concrete] // CHECK:STDOUT: %.592: Core.Form = init_form %D [concrete] // CHECK:STDOUT: %pattern_type.d8d: type = pattern_type %D [concrete] +// CHECK:STDOUT: %return.param_patt.eae: %pattern_type.d8d = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e38: %pattern_type.d8d = return_slot_pattern %return.param_patt.eae, %D [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %F.specific_fn.8e7: = specific_function %F, @F(%D) [concrete] @@ -116,7 +125,7 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc4_10.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_10.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_13.1: type = splice_block %.loc4_13.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -126,11 +135,11 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %D.decl: type = class_decl @D [concrete = constants.%D] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %p.param_patt: @F.%pattern_type.loc7_17 (%pattern_type.ebe) = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: @F.%pattern_type.loc7_17 (%pattern_type.ebe) = at_binding_pattern p, %p.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @F.%pattern_type.loc7_28 (%pattern_type.51d) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @F.%pattern_type.loc7_28 (%pattern_type.51d) = return_slot_pattern %return.param_patt, %T.ref.loc7_28 [concrete] +// CHECK:STDOUT: %T.patt.loc7_7.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_7.2 (constants.%T.patt)] +// CHECK:STDOUT: %p.param_patt.loc7_17.1: @F.%pattern_type.loc7_17 (%pattern_type.ebe) = value_param_pattern [symbolic = %p.param_patt.loc7_17.2 (constants.%p.param_patt.f49)] +// CHECK:STDOUT: %p.patt.loc7_17.1: @F.%pattern_type.loc7_17 (%pattern_type.ebe) = at_binding_pattern p, %p.param_patt.loc7_17.1 [symbolic = %p.patt.loc7_17.2 (constants.%p.patt.37b)] +// CHECK:STDOUT: %return.param_patt.loc7_28.1: @F.%pattern_type.loc7_28 (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt.loc7_28.2 (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt.loc7_25.1: @F.%pattern_type.loc7_28 (%pattern_type.51d) = return_slot_pattern %return.param_patt.loc7_28.1, %T.ref.loc7_28 [symbolic = %return.patt.loc7_25.2 (constants.%return.patt.b39)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc7_28: type = name_ref T, %T.loc7_7.2 [symbolic = %T.loc7_7.1 (constants.%T)] // CHECK:STDOUT: %.loc7_28.3: Core.Form = init_form %T.ref.loc7_28 [symbolic = %.loc7_28.2 (constants.%.184)] @@ -150,10 +159,10 @@ fn G() -> i32 { // CHECK:STDOUT: %return: ref @F.%T.loc7_7.1 (%T) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %p.param_patt: %pattern_type.3dc = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.3dc = at_binding_pattern p, %p.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.d8d = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.d8d = return_slot_pattern %return.param_patt, %D.ref.loc9_18 [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.3dc = value_param_pattern [concrete = constants.%p.param_patt.ead] +// CHECK:STDOUT: %p.patt: %pattern_type.3dc = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt.08c] +// CHECK:STDOUT: %return.param_patt: %pattern_type.d8d = out_param_pattern [concrete = constants.%return.param_patt.eae] +// CHECK:STDOUT: %return.patt: %pattern_type.d8d = return_slot_pattern %return.param_patt, %D.ref.loc9_18 [concrete = constants.%return.patt.e38] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref.loc9_18: type = name_ref D, file.%D.decl [concrete = constants.%D] // CHECK:STDOUT: %.loc9_18.2: Core.Form = init_form %D.ref.loc9_18 [concrete = constants.%.592] @@ -170,6 +179,7 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc4_10.2: type) { +// CHECK:STDOUT: %T.patt.loc4_10.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_10.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_10.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_10.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -192,11 +202,16 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc7_7.2: type) { +// CHECK:STDOUT: %T.patt.loc7_7.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_7.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc7_7.1: type = symbolic_binding T, 0 [symbolic = %T.loc7_7.1 (constants.%T)] // CHECK:STDOUT: %C.loc7_22.1: type = class_type @C, @C(%T.loc7_7.1) [symbolic = %C.loc7_22.1 (constants.%C.1d0)] // CHECK:STDOUT: %pattern_type.loc7_17: type = pattern_type %C.loc7_22.1 [symbolic = %pattern_type.loc7_17 (constants.%pattern_type.ebe)] +// CHECK:STDOUT: %p.param_patt.loc7_17.2: @F.%pattern_type.loc7_17 (%pattern_type.ebe) = value_param_pattern [symbolic = %p.param_patt.loc7_17.2 (constants.%p.param_patt.f49)] +// CHECK:STDOUT: %p.patt.loc7_17.2: @F.%pattern_type.loc7_17 (%pattern_type.ebe) = at_binding_pattern p, %p.param_patt.loc7_17.2 [symbolic = %p.patt.loc7_17.2 (constants.%p.patt.37b)] // CHECK:STDOUT: %.loc7_28.2: Core.Form = init_form %T.loc7_7.1 [symbolic = %.loc7_28.2 (constants.%.184)] // CHECK:STDOUT: %pattern_type.loc7_28: type = pattern_type %T.loc7_7.1 [symbolic = %pattern_type.loc7_28 (constants.%pattern_type.51d)] +// CHECK:STDOUT: %return.param_patt.loc7_28.2: @F.%pattern_type.loc7_28 (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt.loc7_28.2 (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt.loc7_25.2: @F.%pattern_type.loc7_28 (%pattern_type.51d) = return_slot_pattern %return.param_patt.loc7_28.2, %T.loc7_7.1 [symbolic = %return.patt.loc7_25.2 (constants.%return.patt.b39)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc7_17: = require_complete_type %C.loc7_22.1 [symbolic = %require_complete.loc7_17 (constants.%require_complete.74a)] @@ -225,17 +240,23 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_10.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_10.1 => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T) { +// CHECK:STDOUT: %T.patt.loc7_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc7_7.1 => constants.%T // CHECK:STDOUT: %C.loc7_22.1 => constants.%C.1d0 // CHECK:STDOUT: %pattern_type.loc7_17 => constants.%pattern_type.ebe +// CHECK:STDOUT: %p.param_patt.loc7_17.2 => constants.%p.param_patt.f49 +// CHECK:STDOUT: %p.patt.loc7_17.2 => constants.%p.patt.37b // CHECK:STDOUT: %.loc7_28.2 => constants.%.184 // CHECK:STDOUT: %pattern_type.loc7_28 => constants.%pattern_type.51d +// CHECK:STDOUT: %return.param_patt.loc7_28.2 => constants.%return.param_patt.41d +// CHECK:STDOUT: %return.patt.loc7_25.2 => constants.%return.patt.b39 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc7_17 => constants.%require_complete.74a @@ -244,17 +265,23 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%D) { +// CHECK:STDOUT: %T.patt.loc4_10.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_10.1 => constants.%D // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%D) { +// CHECK:STDOUT: %T.patt.loc7_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc7_7.1 => constants.%D // CHECK:STDOUT: %C.loc7_22.1 => constants.%C.aae // CHECK:STDOUT: %pattern_type.loc7_17 => constants.%pattern_type.3dc +// CHECK:STDOUT: %p.param_patt.loc7_17.2 => constants.%p.param_patt.ead +// CHECK:STDOUT: %p.patt.loc7_17.2 => constants.%p.patt.08c // CHECK:STDOUT: %.loc7_28.2 => constants.%.592 // CHECK:STDOUT: %pattern_type.loc7_28 => constants.%pattern_type.d8d +// CHECK:STDOUT: %return.param_patt.loc7_28.2 => constants.%return.param_patt.eae +// CHECK:STDOUT: %return.patt.loc7_25.2 => constants.%return.patt.e38 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc7_17 => constants.%complete_type @@ -268,6 +295,7 @@ fn G() -> i32 { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %I.type: type = generic_class_type @I [concrete] // CHECK:STDOUT: %I.generic: %I.type = struct_value () [concrete] @@ -276,14 +304,20 @@ fn G() -> i32 { // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %pattern_type.477: type = pattern_type %I.76e [symbolic] +// CHECK:STDOUT: %p.param_patt.4f4: %pattern_type.477 = value_param_pattern [symbolic] +// CHECK:STDOUT: %p.patt.276: %pattern_type.477 = at_binding_pattern p, %p.param_patt.4f4 [symbolic] // CHECK:STDOUT: %.a44: Core.Form = init_form %C [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %I.76e [symbolic] // CHECK:STDOUT: %F.specific_fn.eab: = specific_function %F, @F(%T) [symbolic] // CHECK:STDOUT: %I.d0b: type = class_type @I, @I(%C) [concrete] // CHECK:STDOUT: %pattern_type.fa1: type = pattern_type %I.d0b [concrete] +// CHECK:STDOUT: %p.param_patt.e45: %pattern_type.fa1 = value_param_pattern [concrete] +// CHECK:STDOUT: %p.patt.6ae: %pattern_type.fa1 = at_binding_pattern p, %p.param_patt.e45 [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %F.specific_fn.e0d: = specific_function %F, @F(%C) [concrete] @@ -306,7 +340,7 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %I.decl: %I.type = class_decl @I [concrete = constants.%I.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc4_10.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_10.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_13.1: type = splice_block %.loc4_13.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -316,11 +350,11 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %p.param_patt: @F.%pattern_type (%pattern_type.477) = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: @F.%pattern_type (%pattern_type.477) = at_binding_pattern p, %p.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C.ref [concrete] +// CHECK:STDOUT: %T.patt.loc7_7.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_7.2 (constants.%T.patt)] +// CHECK:STDOUT: %p.param_patt.loc7_17.1: @F.%pattern_type (%pattern_type.477) = value_param_pattern [symbolic = %p.param_patt.loc7_17.2 (constants.%p.param_patt.4f4)] +// CHECK:STDOUT: %p.patt.loc7_17.1: @F.%pattern_type (%pattern_type.477) = at_binding_pattern p, %p.param_patt.loc7_17.1 [symbolic = %p.patt.loc7_17.2 (constants.%p.patt.276)] +// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C.ref [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %.loc7_28.2: Core.Form = init_form %C.ref [concrete = constants.%.a44] @@ -340,10 +374,10 @@ fn G() -> i32 { // CHECK:STDOUT: %return: ref %C = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %p.param_patt: %pattern_type.fa1 = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.fa1 = at_binding_pattern p, %p.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C.ref.loc9_18 [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.fa1 = value_param_pattern [concrete = constants.%p.param_patt.e45] +// CHECK:STDOUT: %p.patt: %pattern_type.fa1 = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt.6ae] +// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C.ref.loc9_18 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc9_18: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %.loc9_18.2: Core.Form = init_form %C.ref.loc9_18 [concrete = constants.%.a44] @@ -360,6 +394,7 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @I(%T.loc4_10.2: type) { +// CHECK:STDOUT: %T.patt.loc4_10.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_10.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_10.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_10.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -382,9 +417,12 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc7_7.2: type) { +// CHECK:STDOUT: %T.patt.loc7_7.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_7.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc7_7.1: type = symbolic_binding T, 0 [symbolic = %T.loc7_7.1 (constants.%T)] // CHECK:STDOUT: %I.loc7_22.1: type = class_type @I, @I(%T.loc7_7.1) [symbolic = %I.loc7_22.1 (constants.%I.76e)] // CHECK:STDOUT: %pattern_type: type = pattern_type %I.loc7_22.1 [symbolic = %pattern_type (constants.%pattern_type.477)] +// CHECK:STDOUT: %p.param_patt.loc7_17.2: @F.%pattern_type (%pattern_type.477) = value_param_pattern [symbolic = %p.param_patt.loc7_17.2 (constants.%p.param_patt.4f4)] +// CHECK:STDOUT: %p.patt.loc7_17.2: @F.%pattern_type (%pattern_type.477) = at_binding_pattern p, %p.param_patt.loc7_17.2 [symbolic = %p.patt.loc7_17.2 (constants.%p.patt.276)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %I.loc7_22.1 [symbolic = %require_complete (constants.%require_complete)] @@ -412,15 +450,19 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_10.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_10.1 => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T) { +// CHECK:STDOUT: %T.patt.loc7_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc7_7.1 => constants.%T // CHECK:STDOUT: %I.loc7_22.1 => constants.%I.76e // CHECK:STDOUT: %pattern_type => constants.%pattern_type.477 +// CHECK:STDOUT: %p.param_patt.loc7_17.2 => constants.%p.param_patt.4f4 +// CHECK:STDOUT: %p.patt.loc7_17.2 => constants.%p.patt.276 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete @@ -428,15 +470,19 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%C) { +// CHECK:STDOUT: %T.patt.loc4_10.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_10.1 => constants.%C // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%C) { +// CHECK:STDOUT: %T.patt.loc7_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc7_7.1 => constants.%C // CHECK:STDOUT: %I.loc7_22.1 => constants.%I.d0b // CHECK:STDOUT: %pattern_type => constants.%pattern_type.fa1 +// CHECK:STDOUT: %p.param_patt.loc7_17.2 => constants.%p.param_patt.e45 +// CHECK:STDOUT: %p.patt.loc7_17.2 => constants.%p.patt.6ae // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type @@ -449,10 +495,12 @@ fn G() -> i32 { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Outer.type: type = generic_class_type @Outer [concrete] // CHECK:STDOUT: %Outer.generic: %Outer.type = struct_value () [concrete] // CHECK:STDOUT: %Outer.dee: type = class_type @Outer, @Outer(%T) [symbolic] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %U: type = symbolic_binding U, 1 [symbolic] // CHECK:STDOUT: %Inner.type.8f7: type = generic_class_type @Inner, @Outer(%T) [symbolic] // CHECK:STDOUT: %Inner.generic.b3a: %Inner.type.8f7 = struct_value () [symbolic] @@ -463,11 +511,15 @@ fn G() -> i32 { // CHECK:STDOUT: %D: type = class_type @D [concrete] // CHECK:STDOUT: %require_complete.dae: = require_complete_type %Outer.dee [symbolic] // CHECK:STDOUT: %pattern_type.f00: type = pattern_type %Inner.34b [symbolic] +// CHECK:STDOUT: %p.param_patt.785: %pattern_type.f00 = value_param_pattern [symbolic] +// CHECK:STDOUT: %p.patt.b5b: %pattern_type.f00 = at_binding_pattern p, %p.param_patt.785 [symbolic] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.4b9: %tuple.type.24b = tuple_value (%T, %U) [symbolic] // CHECK:STDOUT: %tuple.type.a5e: type = tuple_type (%T, %U) [symbolic] // CHECK:STDOUT: %.f18: Core.Form = init_form %tuple.type.a5e [symbolic] // CHECK:STDOUT: %pattern_type.eee: type = pattern_type %tuple.type.a5e [symbolic] +// CHECK:STDOUT: %return.param_patt.a41: %pattern_type.eee = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.453: %pattern_type.eee = return_slot_pattern %return.param_patt.a41, %tuple.type.a5e [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.8ae: = require_complete_type %Inner.34b [symbolic] @@ -478,10 +530,14 @@ fn G() -> i32 { // CHECK:STDOUT: %Inner.generic.bd3: %Inner.type.91b = struct_value () [concrete] // CHECK:STDOUT: %Inner.3ff: type = class_type @Inner, @Inner(%C, %D) [concrete] // CHECK:STDOUT: %pattern_type.0d8: type = pattern_type %Inner.3ff [concrete] +// CHECK:STDOUT: %p.param_patt.f58: %pattern_type.0d8 = value_param_pattern [concrete] +// CHECK:STDOUT: %p.patt.cca: %pattern_type.0d8 = at_binding_pattern p, %p.param_patt.f58 [concrete] // CHECK:STDOUT: %tuple.b04: %tuple.type.24b = tuple_value (%C, %D) [concrete] // CHECK:STDOUT: %tuple.type.af1: type = tuple_type (%C, %D) [concrete] // CHECK:STDOUT: %.71f: Core.Form = init_form %tuple.type.af1 [concrete] // CHECK:STDOUT: %pattern_type.c66: type = pattern_type %tuple.type.af1 [concrete] +// CHECK:STDOUT: %return.param_patt.fc8: %pattern_type.c66 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.964: %pattern_type.c66 = return_slot_pattern %return.param_patt.fc8, %tuple.type.af1 [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %F.specific_fn.fca: = specific_function %F, @F(%C, %D) [concrete] @@ -506,7 +562,7 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Outer.decl: %Outer.type = class_decl @Outer [concrete = constants.%Outer.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc4_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_17.1: type = splice_block %.loc4_17.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -517,12 +573,12 @@ fn G() -> i32 { // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %D.decl: type = class_decl @D [concrete = constants.%D] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [concrete] -// CHECK:STDOUT: %p.param_patt: @F.%pattern_type.loc13_27 (%pattern_type.f00) = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: @F.%pattern_type.loc13_27 (%pattern_type.f00) = at_binding_pattern p, %p.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @F.%pattern_type.loc13_56 (%pattern_type.eee) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @F.%pattern_type.loc13_56 (%pattern_type.eee) = return_slot_pattern %return.param_patt, %.loc13_56.4 [concrete] +// CHECK:STDOUT: %T.patt.loc13_7.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_7.2 (constants.%T.patt)] +// CHECK:STDOUT: %U.patt.loc13_17.1: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc13_17.2 (constants.%U.patt)] +// CHECK:STDOUT: %p.param_patt.loc13_27.1: @F.%pattern_type.loc13_27 (%pattern_type.f00) = value_param_pattern [symbolic = %p.param_patt.loc13_27.2 (constants.%p.param_patt.785)] +// CHECK:STDOUT: %p.patt.loc13_27.1: @F.%pattern_type.loc13_27 (%pattern_type.f00) = at_binding_pattern p, %p.param_patt.loc13_27.1 [symbolic = %p.patt.loc13_27.2 (constants.%p.patt.b5b)] +// CHECK:STDOUT: %return.param_patt.loc13_56.1: @F.%pattern_type.loc13_56 (%pattern_type.eee) = out_param_pattern [symbolic = %return.param_patt.loc13_56.2 (constants.%return.param_patt.a41)] +// CHECK:STDOUT: %return.patt.loc13_48.1: @F.%pattern_type.loc13_56 (%pattern_type.eee) = return_slot_pattern %return.param_patt.loc13_56.1, %.loc13_56.4 [symbolic = %return.patt.loc13_48.2 (constants.%return.patt.453)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc13_52: type = name_ref T, %T.loc13_7.2 [symbolic = %T.loc13_7.1 (constants.%T)] // CHECK:STDOUT: %U.ref.loc13_55: type = name_ref U, %U.loc13_17.2 [symbolic = %U.loc13_17.1 (constants.%U)] @@ -554,10 +610,10 @@ fn G() -> i32 { // CHECK:STDOUT: %return: ref @F.%tuple.type (%tuple.type.a5e) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %p.param_patt: %pattern_type.0d8 = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.0d8 = at_binding_pattern p, %p.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.c66 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.c66 = return_slot_pattern %return.param_patt, %.loc15_36.3 [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.0d8 = value_param_pattern [concrete = constants.%p.param_patt.f58] +// CHECK:STDOUT: %p.patt: %pattern_type.0d8 = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt.cca] +// CHECK:STDOUT: %return.param_patt: %pattern_type.c66 = out_param_pattern [concrete = constants.%return.param_patt.fc8] +// CHECK:STDOUT: %return.patt: %pattern_type.c66 = return_slot_pattern %return.param_patt, %.loc15_36.3 [concrete = constants.%return.patt.964] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc15_32: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %D.ref.loc15_35: type = name_ref D, file.%D.decl [concrete = constants.%D] @@ -581,6 +637,7 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Outer(%T.loc4_14.2: type) { +// CHECK:STDOUT: %T.patt.loc4_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_14.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_14.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -589,7 +646,7 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %Inner.decl: @Outer.%Inner.type (%Inner.type.8f7) = class_decl @Inner [symbolic = @Outer.%Inner.generic (constants.%Inner.generic.b3a)] { -// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [concrete] +// CHECK:STDOUT: %U.patt.loc5_16.1: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc5_16.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc5_19.1: type = splice_block %.loc5_19.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -607,6 +664,7 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Inner(@Outer.%T.loc4_14.2: type, %U.loc5_16.2: type) { +// CHECK:STDOUT: %U.patt.loc5_16.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc5_16.2 (constants.%U.patt)] // CHECK:STDOUT: %U.loc5_16.1: type = symbolic_binding U, 1 [symbolic = %U.loc5_16.1 (constants.%U)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -637,7 +695,9 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc13_7.2: type, %U.loc13_17.2: type) { +// CHECK:STDOUT: %T.patt.loc13_7.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_7.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc13_7.1: type = symbolic_binding T, 0 [symbolic = %T.loc13_7.1 (constants.%T)] +// CHECK:STDOUT: %U.patt.loc13_17.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc13_17.2 (constants.%U.patt)] // CHECK:STDOUT: %U.loc13_17.1: type = symbolic_binding U, 1 [symbolic = %U.loc13_17.1 (constants.%U)] // CHECK:STDOUT: %Outer.loc13_36.1: type = class_type @Outer, @Outer(%T.loc13_7.1) [symbolic = %Outer.loc13_36.1 (constants.%Outer.dee)] // CHECK:STDOUT: %require_complete.loc13_37: = require_complete_type %Outer.loc13_36.1 [symbolic = %require_complete.loc13_37 (constants.%require_complete.dae)] @@ -645,10 +705,14 @@ fn G() -> i32 { // CHECK:STDOUT: %Inner.generic: @F.%Inner.type (%Inner.type.8f7) = struct_value () [symbolic = %Inner.generic (constants.%Inner.generic.b3a)] // CHECK:STDOUT: %Inner.loc13_45.1: type = class_type @Inner, @Inner(%T.loc13_7.1, %U.loc13_17.1) [symbolic = %Inner.loc13_45.1 (constants.%Inner.34b)] // CHECK:STDOUT: %pattern_type.loc13_27: type = pattern_type %Inner.loc13_45.1 [symbolic = %pattern_type.loc13_27 (constants.%pattern_type.f00)] +// CHECK:STDOUT: %p.param_patt.loc13_27.2: @F.%pattern_type.loc13_27 (%pattern_type.f00) = value_param_pattern [symbolic = %p.param_patt.loc13_27.2 (constants.%p.param_patt.785)] +// CHECK:STDOUT: %p.patt.loc13_27.2: @F.%pattern_type.loc13_27 (%pattern_type.f00) = at_binding_pattern p, %p.param_patt.loc13_27.2 [symbolic = %p.patt.loc13_27.2 (constants.%p.patt.b5b)] // CHECK:STDOUT: %tuple: %tuple.type.24b = tuple_value (%T.loc13_7.1, %U.loc13_17.1) [symbolic = %tuple (constants.%tuple.4b9)] // CHECK:STDOUT: %tuple.type: type = tuple_type (%T.loc13_7.1, %U.loc13_17.1) [symbolic = %tuple.type (constants.%tuple.type.a5e)] // CHECK:STDOUT: %.loc13_56.2: Core.Form = init_form %tuple.type [symbolic = %.loc13_56.2 (constants.%.f18)] // CHECK:STDOUT: %pattern_type.loc13_56: type = pattern_type %tuple.type [symbolic = %pattern_type.loc13_56 (constants.%pattern_type.eee)] +// CHECK:STDOUT: %return.param_patt.loc13_56.2: @F.%pattern_type.loc13_56 (%pattern_type.eee) = out_param_pattern [symbolic = %return.param_patt.loc13_56.2 (constants.%return.param_patt.a41)] +// CHECK:STDOUT: %return.patt.loc13_48.2: @F.%pattern_type.loc13_56 (%pattern_type.eee) = return_slot_pattern %return.param_patt.loc13_56.2, %tuple.type [symbolic = %return.patt.loc13_48.2 (constants.%return.patt.453)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc13_27: = require_complete_type %Inner.loc13_45.1 [symbolic = %require_complete.loc13_27 (constants.%require_complete.8ae)] @@ -677,6 +741,7 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Outer(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_14.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_14.1 => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -685,13 +750,16 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Inner(constants.%T, constants.%U) { +// CHECK:STDOUT: %U.patt.loc5_16.2 => constants.%U.patt // CHECK:STDOUT: %U.loc5_16.1 => constants.%U // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T, constants.%U) { +// CHECK:STDOUT: %T.patt.loc13_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc13_7.1 => constants.%T +// CHECK:STDOUT: %U.patt.loc13_17.2 => constants.%U.patt // CHECK:STDOUT: %U.loc13_17.1 => constants.%U // CHECK:STDOUT: %Outer.loc13_36.1 => constants.%Outer.dee // CHECK:STDOUT: %require_complete.loc13_37 => constants.%require_complete.dae @@ -699,10 +767,14 @@ fn G() -> i32 { // CHECK:STDOUT: %Inner.generic => constants.%Inner.generic.b3a // CHECK:STDOUT: %Inner.loc13_45.1 => constants.%Inner.34b // CHECK:STDOUT: %pattern_type.loc13_27 => constants.%pattern_type.f00 +// CHECK:STDOUT: %p.param_patt.loc13_27.2 => constants.%p.param_patt.785 +// CHECK:STDOUT: %p.patt.loc13_27.2 => constants.%p.patt.b5b // CHECK:STDOUT: %tuple => constants.%tuple.4b9 // CHECK:STDOUT: %tuple.type => constants.%tuple.type.a5e // CHECK:STDOUT: %.loc13_56.2 => constants.%.f18 // CHECK:STDOUT: %pattern_type.loc13_56 => constants.%pattern_type.eee +// CHECK:STDOUT: %return.param_patt.loc13_56.2 => constants.%return.param_patt.a41 +// CHECK:STDOUT: %return.patt.loc13_48.2 => constants.%return.patt.453 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc13_27 => constants.%require_complete.8ae @@ -711,6 +783,7 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Outer(constants.%C) { +// CHECK:STDOUT: %T.patt.loc4_14.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_14.1 => constants.%C // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -719,13 +792,16 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Inner(constants.%C, constants.%D) { +// CHECK:STDOUT: %U.patt.loc5_16.2 => constants.%U.patt // CHECK:STDOUT: %U.loc5_16.1 => constants.%D // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%C, constants.%D) { +// CHECK:STDOUT: %T.patt.loc13_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc13_7.1 => constants.%C +// CHECK:STDOUT: %U.patt.loc13_17.2 => constants.%U.patt // CHECK:STDOUT: %U.loc13_17.1 => constants.%D // CHECK:STDOUT: %Outer.loc13_36.1 => constants.%Outer.10e // CHECK:STDOUT: %require_complete.loc13_37 => constants.%complete_type.357 @@ -733,10 +809,14 @@ fn G() -> i32 { // CHECK:STDOUT: %Inner.generic => constants.%Inner.generic.bd3 // CHECK:STDOUT: %Inner.loc13_45.1 => constants.%Inner.3ff // CHECK:STDOUT: %pattern_type.loc13_27 => constants.%pattern_type.0d8 +// CHECK:STDOUT: %p.param_patt.loc13_27.2 => constants.%p.param_patt.f58 +// CHECK:STDOUT: %p.patt.loc13_27.2 => constants.%p.patt.cca // CHECK:STDOUT: %tuple => constants.%tuple.b04 // CHECK:STDOUT: %tuple.type => constants.%tuple.type.af1 // CHECK:STDOUT: %.loc13_56.2 => constants.%.71f // CHECK:STDOUT: %pattern_type.loc13_56 => constants.%pattern_type.c66 +// CHECK:STDOUT: %return.param_patt.loc13_56.2 => constants.%return.param_patt.fc8 +// CHECK:STDOUT: %return.patt.loc13_48.2 => constants.%return.patt.964 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc13_27 => constants.%complete_type.357 @@ -756,6 +836,7 @@ fn G() -> i32 { // CHECK:STDOUT: %N.fe9: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %N.patt.38a: %pattern_type.6b6 = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %N.37f: %i32 = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %WithNontype.type: type = generic_class_type @WithNontype [concrete] // CHECK:STDOUT: %WithNontype.generic: %WithNontype.type = struct_value () [concrete] @@ -763,7 +844,11 @@ fn G() -> i32 { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.e30: type = pattern_type %WithNontype.40e [symbolic] +// CHECK:STDOUT: %x.param_patt.12a: %pattern_type.e30 = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.e34: %pattern_type.e30 = at_binding_pattern x, %x.param_patt.12a [symbolic] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.fef: = require_complete_type %WithNontype.40e [symbolic] @@ -802,6 +887,8 @@ fn G() -> i32 { // CHECK:STDOUT: %WithNontype.888: type = class_type @WithNontype, @WithNontype(%int_0.3c0) [concrete] // CHECK:STDOUT: %WithNontype.val: %WithNontype.888 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.d30: type = pattern_type %WithNontype.888 [concrete] +// CHECK:STDOUT: %x.param_patt.33b: %pattern_type.d30 = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.a47: %pattern_type.d30 = at_binding_pattern x, %x.param_patt.33b [concrete] // CHECK:STDOUT: %F.specific_fn: = specific_function %F, @F(%int_0.3c0) [concrete] // CHECK:STDOUT: %.0e2: ref %WithNontype.888 = temporary invalid, %WithNontype.val [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] @@ -840,7 +927,7 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %WithNontype.decl: %WithNontype.type = class_decl @WithNontype [concrete = constants.%WithNontype.generic] { -// CHECK:STDOUT: %N.patt: %pattern_type.6b6 = symbolic_binding_pattern N, 0 [concrete] +// CHECK:STDOUT: %N.patt.loc4_20.1: %pattern_type.6b6 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_20.2 (constants.%N.patt.38a)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4: type = splice_block %i32 [concrete = constants.%i32] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -849,11 +936,11 @@ fn G() -> i32 { // CHECK:STDOUT: %N.loc4_20.2: %i32 = symbolic_binding N, 0 [symbolic = %N.loc4_20.1 (constants.%N.37f)] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %N.patt: %pattern_type.6b6 = symbolic_binding_pattern N, 0 [concrete] -// CHECK:STDOUT: %x.param_patt: @F.%pattern_type (%pattern_type.e30) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @F.%pattern_type (%pattern_type.e30) = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc6_44 [concrete] +// CHECK:STDOUT: %N.patt.loc6_7.1: %pattern_type.6b6 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc6_7.2 (constants.%N.patt.38a)] +// CHECK:STDOUT: %x.param_patt.loc6_23.1: @F.%pattern_type (%pattern_type.e30) = value_param_pattern [symbolic = %x.param_patt.loc6_23.2 (constants.%x.param_patt.12a)] +// CHECK:STDOUT: %x.patt.loc6_23.1: @F.%pattern_type (%pattern_type.e30) = at_binding_pattern x, %x.param_patt.loc6_23.1 [symbolic = %x.patt.loc6_23.2 (constants.%x.patt.e34)] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc6_44 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc6_44: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc6_44: Core.Form = init_form %i32.loc6_44 [concrete = constants.%.795] @@ -873,8 +960,8 @@ fn G() -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc8: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -884,6 +971,7 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @WithNontype(%N.loc4_20.2: %i32) { +// CHECK:STDOUT: %N.patt.loc4_20.2: %pattern_type.6b6 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_20.2 (constants.%N.patt.38a)] // CHECK:STDOUT: %N.loc4_20.1: %i32 = symbolic_binding N, 0 [symbolic = %N.loc4_20.1 (constants.%N.37f)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -898,9 +986,12 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%N.loc6_7.2: %i32) { +// CHECK:STDOUT: %N.patt.loc6_7.2: %pattern_type.6b6 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc6_7.2 (constants.%N.patt.38a)] // CHECK:STDOUT: %N.loc6_7.1: %i32 = symbolic_binding N, 0 [symbolic = %N.loc6_7.1 (constants.%N.37f)] // CHECK:STDOUT: %WithNontype.loc6_38.1: type = class_type @WithNontype, @WithNontype(%N.loc6_7.1) [symbolic = %WithNontype.loc6_38.1 (constants.%WithNontype.40e)] // CHECK:STDOUT: %pattern_type: type = pattern_type %WithNontype.loc6_38.1 [symbolic = %pattern_type (constants.%pattern_type.e30)] +// CHECK:STDOUT: %x.param_patt.loc6_23.2: @F.%pattern_type (%pattern_type.e30) = value_param_pattern [symbolic = %x.param_patt.loc6_23.2 (constants.%x.param_patt.12a)] +// CHECK:STDOUT: %x.patt.loc6_23.2: @F.%pattern_type (%pattern_type.e30) = at_binding_pattern x, %x.param_patt.loc6_23.2 [symbolic = %x.patt.loc6_23.2 (constants.%x.patt.e34)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %WithNontype.loc6_38.1 [symbolic = %require_complete (constants.%require_complete.fef)] @@ -952,27 +1043,35 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @WithNontype(constants.%N.37f) { +// CHECK:STDOUT: %N.patt.loc4_20.2 => constants.%N.patt.38a // CHECK:STDOUT: %N.loc4_20.1 => constants.%N.37f // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%N.37f) { +// CHECK:STDOUT: %N.patt.loc6_7.2 => constants.%N.patt.38a // CHECK:STDOUT: %N.loc6_7.1 => constants.%N.37f // CHECK:STDOUT: %WithNontype.loc6_38.1 => constants.%WithNontype.40e // CHECK:STDOUT: %pattern_type => constants.%pattern_type.e30 +// CHECK:STDOUT: %x.param_patt.loc6_23.2 => constants.%x.param_patt.12a +// CHECK:STDOUT: %x.patt.loc6_23.2 => constants.%x.patt.e34 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @WithNontype(constants.%int_0.3c0) { +// CHECK:STDOUT: %N.patt.loc4_20.2 => constants.%N.patt.38a // CHECK:STDOUT: %N.loc4_20.1 => constants.%int_0.3c0 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%int_0.3c0) { +// CHECK:STDOUT: %N.patt.loc6_7.2 => constants.%N.patt.38a // CHECK:STDOUT: %N.loc6_7.1 => constants.%int_0.3c0 // CHECK:STDOUT: %WithNontype.loc6_38.1 => constants.%WithNontype.888 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.d30 +// CHECK:STDOUT: %x.param_patt.loc6_23.2 => constants.%x.param_patt.33b +// CHECK:STDOUT: %x.patt.loc6_23.2 => constants.%x.patt.a47 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.357 diff --git a/toolchain/check/testdata/deduce/int_float.carbon b/toolchain/check/testdata/deduce/int_float.carbon index 2761813d9ca4..a5786f424dc7 100644 --- a/toolchain/check/testdata/deduce/int_float.carbon +++ b/toolchain/check/testdata/deduce/int_float.carbon @@ -42,12 +42,17 @@ fn G(a: f64) -> Core.IntLiteral { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.dc0: type = pattern_type Core.IntLiteral [concrete] +// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %Int.type: type = generic_class_type @Int [concrete] // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %Int: type = class_type @Int, @Int(%N) [symbolic] // CHECK:STDOUT: %pattern_type.142: type = pattern_type %Int [symbolic] +// CHECK:STDOUT: %n.param_patt.283: %pattern_type.142 = value_param_pattern [symbolic] +// CHECK:STDOUT: %n.patt.f0b: %pattern_type.142 = at_binding_pattern n, %n.param_patt.283 [symbolic] // CHECK:STDOUT: %.f7d: Core.Form = init_form Core.IntLiteral [concrete] +// CHECK:STDOUT: %return.param_patt.eab: %pattern_type.dc0 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.cd4: %pattern_type.dc0 = return_slot_pattern %return.param_patt.eab, Core.IntLiteral [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.4df: = require_complete_type %Int [symbolic] @@ -62,10 +67,14 @@ fn G(a: f64) -> Core.IntLiteral { // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %i64: type = class_type @Int, @Int(%int_64) [concrete] // CHECK:STDOUT: %pattern_type.f57: type = pattern_type %i64 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.f57 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.f57 = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %i64.builtin: type = int_type signed, %int_64 [concrete] // CHECK:STDOUT: %complete_type.4a1: = complete_type_witness %i64.builtin [concrete] +// CHECK:STDOUT: %n.param_patt.dfd: %pattern_type.f57 = value_param_pattern [concrete] +// CHECK:STDOUT: %n.patt.958: %pattern_type.f57 = at_binding_pattern n, %n.param_patt.dfd [concrete] // CHECK:STDOUT: %F.specific_fn: = specific_function %F, @F(%int_64) [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.Copy.impl.Op.bound.03c: = bound_method %int_64, %Core.IntLiteral.as.Copy.impl.Op [concrete] // CHECK:STDOUT: } @@ -93,11 +102,11 @@ fn G(a: f64) -> Core.IntLiteral { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [concrete] -// CHECK:STDOUT: %n.param_patt: @F.%pattern_type (%pattern_type.142) = value_param_pattern [concrete] -// CHECK:STDOUT: %n.patt: @F.%pattern_type (%pattern_type.142) = at_binding_pattern n, %n.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.dc0 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.dc0 = return_slot_pattern %return.param_patt, %IntLiteral.ref.loc4_57 [concrete] +// CHECK:STDOUT: %N.patt.loc4_7.1: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_7.2 (constants.%N.patt)] +// CHECK:STDOUT: %n.param_patt.loc4_35.1: @F.%pattern_type (%pattern_type.142) = value_param_pattern [symbolic = %n.param_patt.loc4_35.2 (constants.%n.param_patt.283)] +// CHECK:STDOUT: %n.patt.loc4_35.1: @F.%pattern_type (%pattern_type.142) = at_binding_pattern n, %n.param_patt.loc4_35.1 [symbolic = %n.patt.loc4_35.2 (constants.%n.patt.f0b)] +// CHECK:STDOUT: %return.param_patt: %pattern_type.dc0 = out_param_pattern [concrete = constants.%return.param_patt.eab] +// CHECK:STDOUT: %return.patt: %pattern_type.dc0 = return_slot_pattern %return.param_patt, %IntLiteral.ref.loc4_57 [concrete = constants.%return.patt.cd4] // CHECK:STDOUT: } { // CHECK:STDOUT: %Core.ref.loc4_53: = name_ref Core, imports.%Core [concrete = imports.%Core] // CHECK:STDOUT: %IntLiteral.ref.loc4_57: type = name_ref IntLiteral, imports.%Core.IntLiteral [concrete = Core.IntLiteral] @@ -120,10 +129,10 @@ fn G(a: f64) -> Core.IntLiteral { // CHECK:STDOUT: %return: ref Core.IntLiteral = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.f57 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.f57 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.dc0 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.dc0 = return_slot_pattern %return.param_patt, %IntLiteral.ref [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.f57 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.f57 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.dc0 = out_param_pattern [concrete = constants.%return.param_patt.eab] +// CHECK:STDOUT: %return.patt: %pattern_type.dc0 = return_slot_pattern %return.param_patt, %IntLiteral.ref [concrete = constants.%return.patt.cd4] // CHECK:STDOUT: } { // CHECK:STDOUT: %Core.ref: = name_ref Core, imports.%Core [concrete = imports.%Core] // CHECK:STDOUT: %IntLiteral.ref: type = name_ref IntLiteral, imports.%Core.IntLiteral [concrete = Core.IntLiteral] @@ -137,9 +146,12 @@ fn G(a: f64) -> Core.IntLiteral { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%N.loc4_7.2: Core.IntLiteral) { +// CHECK:STDOUT: %N.patt.loc4_7.2: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_7.2 (constants.%N.patt)] // CHECK:STDOUT: %N.loc4_7.1: Core.IntLiteral = symbolic_binding N, 0 [symbolic = %N.loc4_7.1 (constants.%N)] // CHECK:STDOUT: %Int.loc4_47.1: type = class_type @Int, @Int(%N.loc4_7.1) [symbolic = %Int.loc4_47.1 (constants.%Int)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Int.loc4_47.1 [symbolic = %pattern_type (constants.%pattern_type.142)] +// CHECK:STDOUT: %n.param_patt.loc4_35.2: @F.%pattern_type (%pattern_type.142) = value_param_pattern [symbolic = %n.param_patt.loc4_35.2 (constants.%n.param_patt.283)] +// CHECK:STDOUT: %n.patt.loc4_35.2: @F.%pattern_type (%pattern_type.142) = at_binding_pattern n, %n.param_patt.loc4_35.2 [symbolic = %n.patt.loc4_35.2 (constants.%n.patt.f0b)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %Int.loc4_47.1 [symbolic = %require_complete (constants.%require_complete.4df)] @@ -165,15 +177,21 @@ fn G(a: f64) -> Core.IntLiteral { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%N) { +// CHECK:STDOUT: %N.patt.loc4_7.2 => constants.%N.patt // CHECK:STDOUT: %N.loc4_7.1 => constants.%N // CHECK:STDOUT: %Int.loc4_47.1 => constants.%Int // CHECK:STDOUT: %pattern_type => constants.%pattern_type.142 +// CHECK:STDOUT: %n.param_patt.loc4_35.2 => constants.%n.param_patt.283 +// CHECK:STDOUT: %n.patt.loc4_35.2 => constants.%n.patt.f0b // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%int_64) { +// CHECK:STDOUT: %N.patt.loc4_7.2 => constants.%N.patt // CHECK:STDOUT: %N.loc4_7.1 => constants.%int_64 // CHECK:STDOUT: %Int.loc4_47.1 => constants.%i64 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.f57 +// CHECK:STDOUT: %n.param_patt.loc4_35.2 => constants.%n.param_patt.dfd +// CHECK:STDOUT: %n.patt.loc4_35.2 => constants.%n.patt.958 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.4a1 @@ -186,12 +204,17 @@ fn G(a: f64) -> Core.IntLiteral { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.dc0: type = pattern_type Core.IntLiteral [concrete] +// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %Float.type: type = generic_class_type @Float [concrete] // CHECK:STDOUT: %Float.generic: %Float.type = struct_value () [concrete] // CHECK:STDOUT: %Float: type = class_type @Float, @Float(%N) [symbolic] // CHECK:STDOUT: %pattern_type.903: type = pattern_type %Float [symbolic] +// CHECK:STDOUT: %n.param_patt.0bd: %pattern_type.903 = value_param_pattern [symbolic] +// CHECK:STDOUT: %n.patt.862: %pattern_type.903 = at_binding_pattern n, %n.param_patt.0bd [symbolic] // CHECK:STDOUT: %.f7d: Core.Form = init_form Core.IntLiteral [concrete] +// CHECK:STDOUT: %return.param_patt.eab: %pattern_type.dc0 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.cd4: %pattern_type.dc0 = return_slot_pattern %return.param_patt.eab, Core.IntLiteral [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.eb0: = require_complete_type %Float [symbolic] @@ -206,10 +229,14 @@ fn G(a: f64) -> Core.IntLiteral { // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %f64.dc1: type = class_type @Float, @Float(%int_64) [concrete] // CHECK:STDOUT: %pattern_type.fb7: type = pattern_type %f64.dc1 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.fb7 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.fb7 = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %f64.794: type = float_type %int_64, f64 [concrete] // CHECK:STDOUT: %complete_type.7b9: = complete_type_witness %f64.794 [concrete] +// CHECK:STDOUT: %n.param_patt.632: %pattern_type.fb7 = value_param_pattern [concrete] +// CHECK:STDOUT: %n.patt.572: %pattern_type.fb7 = at_binding_pattern n, %n.param_patt.632 [concrete] // CHECK:STDOUT: %F.specific_fn: = specific_function %F, @F(%int_64) [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.Copy.impl.Op.bound.03c: = bound_method %int_64, %Core.IntLiteral.as.Copy.impl.Op [concrete] // CHECK:STDOUT: } @@ -237,11 +264,11 @@ fn G(a: f64) -> Core.IntLiteral { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [concrete] -// CHECK:STDOUT: %n.param_patt: @F.%pattern_type (%pattern_type.903) = value_param_pattern [concrete] -// CHECK:STDOUT: %n.patt: @F.%pattern_type (%pattern_type.903) = at_binding_pattern n, %n.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.dc0 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.dc0 = return_slot_pattern %return.param_patt, %IntLiteral.ref.loc4_59 [concrete] +// CHECK:STDOUT: %N.patt.loc4_7.1: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_7.2 (constants.%N.patt)] +// CHECK:STDOUT: %n.param_patt.loc4_35.1: @F.%pattern_type (%pattern_type.903) = value_param_pattern [symbolic = %n.param_patt.loc4_35.2 (constants.%n.param_patt.0bd)] +// CHECK:STDOUT: %n.patt.loc4_35.1: @F.%pattern_type (%pattern_type.903) = at_binding_pattern n, %n.param_patt.loc4_35.1 [symbolic = %n.patt.loc4_35.2 (constants.%n.patt.862)] +// CHECK:STDOUT: %return.param_patt: %pattern_type.dc0 = out_param_pattern [concrete = constants.%return.param_patt.eab] +// CHECK:STDOUT: %return.patt: %pattern_type.dc0 = return_slot_pattern %return.param_patt, %IntLiteral.ref.loc4_59 [concrete = constants.%return.patt.cd4] // CHECK:STDOUT: } { // CHECK:STDOUT: %Core.ref.loc4_55: = name_ref Core, imports.%Core [concrete = imports.%Core] // CHECK:STDOUT: %IntLiteral.ref.loc4_59: type = name_ref IntLiteral, imports.%Core.IntLiteral [concrete = Core.IntLiteral] @@ -264,10 +291,10 @@ fn G(a: f64) -> Core.IntLiteral { // CHECK:STDOUT: %return: ref Core.IntLiteral = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.fb7 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.fb7 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.dc0 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.dc0 = return_slot_pattern %return.param_patt, %IntLiteral.ref [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.fb7 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.fb7 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.dc0 = out_param_pattern [concrete = constants.%return.param_patt.eab] +// CHECK:STDOUT: %return.patt: %pattern_type.dc0 = return_slot_pattern %return.param_patt, %IntLiteral.ref [concrete = constants.%return.patt.cd4] // CHECK:STDOUT: } { // CHECK:STDOUT: %Core.ref: = name_ref Core, imports.%Core [concrete = imports.%Core] // CHECK:STDOUT: %IntLiteral.ref: type = name_ref IntLiteral, imports.%Core.IntLiteral [concrete = Core.IntLiteral] @@ -281,9 +308,12 @@ fn G(a: f64) -> Core.IntLiteral { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%N.loc4_7.2: Core.IntLiteral) { +// CHECK:STDOUT: %N.patt.loc4_7.2: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_7.2 (constants.%N.patt)] // CHECK:STDOUT: %N.loc4_7.1: Core.IntLiteral = symbolic_binding N, 0 [symbolic = %N.loc4_7.1 (constants.%N)] // CHECK:STDOUT: %Float.loc4_49.1: type = class_type @Float, @Float(%N.loc4_7.1) [symbolic = %Float.loc4_49.1 (constants.%Float)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Float.loc4_49.1 [symbolic = %pattern_type (constants.%pattern_type.903)] +// CHECK:STDOUT: %n.param_patt.loc4_35.2: @F.%pattern_type (%pattern_type.903) = value_param_pattern [symbolic = %n.param_patt.loc4_35.2 (constants.%n.param_patt.0bd)] +// CHECK:STDOUT: %n.patt.loc4_35.2: @F.%pattern_type (%pattern_type.903) = at_binding_pattern n, %n.param_patt.loc4_35.2 [symbolic = %n.patt.loc4_35.2 (constants.%n.patt.862)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %Float.loc4_49.1 [symbolic = %require_complete (constants.%require_complete.eb0)] @@ -309,15 +339,21 @@ fn G(a: f64) -> Core.IntLiteral { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%N) { +// CHECK:STDOUT: %N.patt.loc4_7.2 => constants.%N.patt // CHECK:STDOUT: %N.loc4_7.1 => constants.%N // CHECK:STDOUT: %Float.loc4_49.1 => constants.%Float // CHECK:STDOUT: %pattern_type => constants.%pattern_type.903 +// CHECK:STDOUT: %n.param_patt.loc4_35.2 => constants.%n.param_patt.0bd +// CHECK:STDOUT: %n.patt.loc4_35.2 => constants.%n.patt.862 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%int_64) { +// CHECK:STDOUT: %N.patt.loc4_7.2 => constants.%N.patt // CHECK:STDOUT: %N.loc4_7.1 => constants.%int_64 // CHECK:STDOUT: %Float.loc4_49.1 => constants.%f64.dc1 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.fb7 +// CHECK:STDOUT: %n.param_patt.loc4_35.2 => constants.%n.param_patt.632 +// CHECK:STDOUT: %n.patt.loc4_35.2 => constants.%n.patt.572 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.7b9 diff --git a/toolchain/check/testdata/deduce/tuple.carbon b/toolchain/check/testdata/deduce/tuple.carbon index 756a0d980e92..1f2a71d01a16 100644 --- a/toolchain/check/testdata/deduce/tuple.carbon +++ b/toolchain/check/testdata/deduce/tuple.carbon @@ -67,14 +67,20 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %U: type = symbolic_binding U, 1 [symbolic] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.4b9: %tuple.type.24b = tuple_value (%T, %U) [symbolic] // CHECK:STDOUT: %tuple.type.a5e: type = tuple_type (%T, %U) [symbolic] // CHECK:STDOUT: %pattern_type.eee: type = pattern_type %tuple.type.a5e [symbolic] +// CHECK:STDOUT: %pair.param_patt.185: %pattern_type.eee = value_param_pattern [symbolic] +// CHECK:STDOUT: %pair.patt.940: %pattern_type.eee = at_binding_pattern pair, %pair.param_patt.185 [symbolic] // CHECK:STDOUT: %.822: Core.Form = init_form %U [symbolic] // CHECK:STDOUT: %pattern_type.946: type = pattern_type %U [symbolic] +// CHECK:STDOUT: %return.param_patt.6dd: %pattern_type.946 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.4dd: %pattern_type.946 = return_slot_pattern %return.param_patt.6dd, %U [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %tuple.type.a5e [symbolic] @@ -82,8 +88,12 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: %tuple.b04: %tuple.type.24b = tuple_value (%C, %D) [concrete] // CHECK:STDOUT: %tuple.type.af1: type = tuple_type (%C, %D) [concrete] // CHECK:STDOUT: %pattern_type.c66: type = pattern_type %tuple.type.af1 [concrete] +// CHECK:STDOUT: %pair.param_patt.f67: %pattern_type.c66 = value_param_pattern [concrete] +// CHECK:STDOUT: %pair.patt.a61: %pattern_type.c66 = at_binding_pattern pair, %pair.param_patt.f67 [concrete] // CHECK:STDOUT: %.592: Core.Form = init_form %D [concrete] // CHECK:STDOUT: %pattern_type.d8d: type = pattern_type %D [concrete] +// CHECK:STDOUT: %return.param_patt.eae: %pattern_type.d8d = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e38: %pattern_type.d8d = return_slot_pattern %return.param_patt.eae, %D [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %F.specific_fn.fca: = specific_function %F, @F(%C, %D) [concrete] @@ -109,12 +119,12 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %D.decl: type = class_decl @D [concrete = constants.%D] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [concrete] -// CHECK:STDOUT: %pair.param_patt: @F.%pattern_type.loc7_30 (%pattern_type.eee) = value_param_pattern [concrete] -// CHECK:STDOUT: %pair.patt: @F.%pattern_type.loc7_30 (%pattern_type.eee) = at_binding_pattern pair, %pair.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @F.%pattern_type.loc7_43 (%pattern_type.946) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @F.%pattern_type.loc7_43 (%pattern_type.946) = return_slot_pattern %return.param_patt, %U.ref.loc7_43 [concrete] +// CHECK:STDOUT: %T.patt.loc7_7.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_7.2 (constants.%T.patt)] +// CHECK:STDOUT: %U.patt.loc7_17.1: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc7_17.2 (constants.%U.patt)] +// CHECK:STDOUT: %pair.param_patt.loc7_30.1: @F.%pattern_type.loc7_30 (%pattern_type.eee) = value_param_pattern [symbolic = %pair.param_patt.loc7_30.2 (constants.%pair.param_patt.185)] +// CHECK:STDOUT: %pair.patt.loc7_30.1: @F.%pattern_type.loc7_30 (%pattern_type.eee) = at_binding_pattern pair, %pair.param_patt.loc7_30.1 [symbolic = %pair.patt.loc7_30.2 (constants.%pair.patt.940)] +// CHECK:STDOUT: %return.param_patt.loc7_43.1: @F.%pattern_type.loc7_43 (%pattern_type.946) = out_param_pattern [symbolic = %return.param_patt.loc7_43.2 (constants.%return.param_patt.6dd)] +// CHECK:STDOUT: %return.patt.loc7_40.1: @F.%pattern_type.loc7_43 (%pattern_type.946) = return_slot_pattern %return.param_patt.loc7_43.1, %U.ref.loc7_43 [symbolic = %return.patt.loc7_40.2 (constants.%return.patt.4dd)] // CHECK:STDOUT: } { // CHECK:STDOUT: %U.ref.loc7_43: type = name_ref U, %U.loc7_17.2 [symbolic = %U.loc7_17.1 (constants.%U)] // CHECK:STDOUT: %.loc7_43.3: Core.Form = init_form %U.ref.loc7_43 [symbolic = %.loc7_43.2 (constants.%.822)] @@ -140,10 +150,10 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: %return: ref @F.%U.loc7_17.1 (%U) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %pair.param_patt: %pattern_type.c66 = value_param_pattern [concrete] -// CHECK:STDOUT: %pair.patt: %pattern_type.c66 = at_binding_pattern pair, %pair.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.d8d = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.d8d = return_slot_pattern %return.param_patt, %D.ref.loc9_23 [concrete] +// CHECK:STDOUT: %pair.param_patt: %pattern_type.c66 = value_param_pattern [concrete = constants.%pair.param_patt.f67] +// CHECK:STDOUT: %pair.patt: %pattern_type.c66 = at_binding_pattern pair, %pair.param_patt [concrete = constants.%pair.patt.a61] +// CHECK:STDOUT: %return.param_patt: %pattern_type.d8d = out_param_pattern [concrete = constants.%return.param_patt.eae] +// CHECK:STDOUT: %return.patt: %pattern_type.d8d = return_slot_pattern %return.param_patt, %D.ref.loc9_23 [concrete = constants.%return.patt.e38] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref.loc9_23: type = name_ref D, file.%D.decl [concrete = constants.%D] // CHECK:STDOUT: %.loc9_23.2: Core.Form = init_form %D.ref.loc9_23 [concrete = constants.%.592] @@ -177,13 +187,19 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc7_7.2: type, %U.loc7_17.2: type) { +// CHECK:STDOUT: %T.patt.loc7_7.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_7.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc7_7.1: type = symbolic_binding T, 0 [symbolic = %T.loc7_7.1 (constants.%T)] +// CHECK:STDOUT: %U.patt.loc7_17.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc7_17.2 (constants.%U.patt)] // CHECK:STDOUT: %U.loc7_17.1: type = symbolic_binding U, 1 [symbolic = %U.loc7_17.1 (constants.%U)] // CHECK:STDOUT: %tuple: %tuple.type.24b = tuple_value (%T.loc7_7.1, %U.loc7_17.1) [symbolic = %tuple (constants.%tuple.4b9)] // CHECK:STDOUT: %tuple.type: type = tuple_type (%T.loc7_7.1, %U.loc7_17.1) [symbolic = %tuple.type (constants.%tuple.type.a5e)] // CHECK:STDOUT: %pattern_type.loc7_30: type = pattern_type %tuple.type [symbolic = %pattern_type.loc7_30 (constants.%pattern_type.eee)] +// CHECK:STDOUT: %pair.param_patt.loc7_30.2: @F.%pattern_type.loc7_30 (%pattern_type.eee) = value_param_pattern [symbolic = %pair.param_patt.loc7_30.2 (constants.%pair.param_patt.185)] +// CHECK:STDOUT: %pair.patt.loc7_30.2: @F.%pattern_type.loc7_30 (%pattern_type.eee) = at_binding_pattern pair, %pair.param_patt.loc7_30.2 [symbolic = %pair.patt.loc7_30.2 (constants.%pair.patt.940)] // CHECK:STDOUT: %.loc7_43.2: Core.Form = init_form %U.loc7_17.1 [symbolic = %.loc7_43.2 (constants.%.822)] // CHECK:STDOUT: %pattern_type.loc7_43: type = pattern_type %U.loc7_17.1 [symbolic = %pattern_type.loc7_43 (constants.%pattern_type.946)] +// CHECK:STDOUT: %return.param_patt.loc7_43.2: @F.%pattern_type.loc7_43 (%pattern_type.946) = out_param_pattern [symbolic = %return.param_patt.loc7_43.2 (constants.%return.param_patt.6dd)] +// CHECK:STDOUT: %return.patt.loc7_40.2: @F.%pattern_type.loc7_43 (%pattern_type.946) = return_slot_pattern %return.param_patt.loc7_43.2, %U.loc7_17.1 [symbolic = %return.patt.loc7_40.2 (constants.%return.patt.4dd)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %tuple.type [symbolic = %require_complete (constants.%require_complete)] @@ -211,13 +227,19 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T, constants.%U) { +// CHECK:STDOUT: %T.patt.loc7_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc7_7.1 => constants.%T +// CHECK:STDOUT: %U.patt.loc7_17.2 => constants.%U.patt // CHECK:STDOUT: %U.loc7_17.1 => constants.%U // CHECK:STDOUT: %tuple => constants.%tuple.4b9 // CHECK:STDOUT: %tuple.type => constants.%tuple.type.a5e // CHECK:STDOUT: %pattern_type.loc7_30 => constants.%pattern_type.eee +// CHECK:STDOUT: %pair.param_patt.loc7_30.2 => constants.%pair.param_patt.185 +// CHECK:STDOUT: %pair.patt.loc7_30.2 => constants.%pair.patt.940 // CHECK:STDOUT: %.loc7_43.2 => constants.%.822 // CHECK:STDOUT: %pattern_type.loc7_43 => constants.%pattern_type.946 +// CHECK:STDOUT: %return.param_patt.loc7_43.2 => constants.%return.param_patt.6dd +// CHECK:STDOUT: %return.patt.loc7_40.2 => constants.%return.patt.4dd // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete @@ -225,13 +247,19 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%C, constants.%D) { +// CHECK:STDOUT: %T.patt.loc7_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc7_7.1 => constants.%C +// CHECK:STDOUT: %U.patt.loc7_17.2 => constants.%U.patt // CHECK:STDOUT: %U.loc7_17.1 => constants.%D // CHECK:STDOUT: %tuple => constants.%tuple.b04 // CHECK:STDOUT: %tuple.type => constants.%tuple.type.af1 // CHECK:STDOUT: %pattern_type.loc7_30 => constants.%pattern_type.c66 +// CHECK:STDOUT: %pair.param_patt.loc7_30.2 => constants.%pair.param_patt.f67 +// CHECK:STDOUT: %pair.patt.loc7_30.2 => constants.%pair.patt.a61 // CHECK:STDOUT: %.loc7_43.2 => constants.%.592 // CHECK:STDOUT: %pattern_type.loc7_43 => constants.%pattern_type.d8d +// CHECK:STDOUT: %return.param_patt.loc7_43.2 => constants.%return.param_patt.eae +// CHECK:STDOUT: %return.patt.loc7_40.2 => constants.%return.patt.e38 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.6db @@ -252,6 +280,7 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: %tuple.b59: %tuple.type.24b = tuple_value (%i32, %i32) [concrete] // CHECK:STDOUT: %tuple.type.e55: type = tuple_type (%i32, %i32) [concrete] // CHECK:STDOUT: %pattern_type.394: type = pattern_type %tuple.type.e55 [concrete] +// CHECK:STDOUT: %Pair.patt: %pattern_type.394 = symbolic_binding_pattern Pair, 0 [symbolic] // CHECK:STDOUT: %Pair: %tuple.type.e55 = symbolic_binding Pair, 0 [symbolic] // CHECK:STDOUT: %HasPair.type: type = generic_class_type @HasPair [concrete] // CHECK:STDOUT: %HasPair.generic: %HasPair.type = struct_value () [concrete] @@ -259,12 +288,18 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %A.patt: %pattern_type.6b6 = symbolic_binding_pattern A, 0 [symbolic] // CHECK:STDOUT: %A: %i32 = symbolic_binding A, 0 [symbolic] +// CHECK:STDOUT: %B.patt: %pattern_type.6b6 = symbolic_binding_pattern B, 1 [symbolic] // CHECK:STDOUT: %B: %i32 = symbolic_binding B, 1 [symbolic] // CHECK:STDOUT: %tuple.509: %tuple.type.e55 = tuple_value (%A, %B) [symbolic] // CHECK:STDOUT: %HasPair.72f: type = class_type @HasPair, @HasPair(%tuple.509) [symbolic] // CHECK:STDOUT: %pattern_type.725: type = pattern_type %HasPair.72f [symbolic] +// CHECK:STDOUT: %h.param_patt.cdf: %pattern_type.725 = value_param_pattern [symbolic] +// CHECK:STDOUT: %h.patt.596: %pattern_type.725 = at_binding_pattern h, %h.param_patt.cdf [symbolic] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.39d: = require_complete_type %HasPair.72f [symbolic] @@ -306,8 +341,11 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: %tuple.102: %tuple.type.e55 = tuple_value (%int_1.0c6, %int_2.295) [concrete] // CHECK:STDOUT: %HasPair.69b: type = class_type @HasPair, @HasPair(%tuple.102) [concrete] // CHECK:STDOUT: %pattern_type.adf: type = pattern_type %HasPair.69b [concrete] +// CHECK:STDOUT: %h.param_patt.7d9: %pattern_type.adf = value_param_pattern [concrete] +// CHECK:STDOUT: %h.patt.25e585.1: %pattern_type.adf = at_binding_pattern h, %h.param_patt.7d9 [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] +// CHECK:STDOUT: %h.patt.25e585.2: %pattern_type.adf = at_binding_pattern h, %h.param_patt.7d9 [concrete] // CHECK:STDOUT: %F.specific_fn: = specific_function %F, @F(%int_1.0c6, %int_2.295) [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.bound.245: = bound_method %int_2.295, %Int.as.Copy.impl.Op.4f6 [concrete] // CHECK:STDOUT: %bound_method.03a: = bound_method %int_2.295, %Int.as.Copy.impl.Op.specific_fn [concrete] @@ -339,7 +377,7 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %HasPair.decl: %HasPair.type = class_decl @HasPair [concrete = constants.%HasPair.generic] { -// CHECK:STDOUT: %Pair.patt: %pattern_type.394 = symbolic_binding_pattern Pair, 0 [concrete] +// CHECK:STDOUT: %Pair.patt.loc4_19.1: %pattern_type.394 = symbolic_binding_pattern Pair, 0 [symbolic = %Pair.patt.loc4_19.2 (constants.%Pair.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_31.1: type = splice_block %.loc4_31.3 [concrete = constants.%tuple.type.e55] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -351,12 +389,12 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: %Pair.loc4_19.2: %tuple.type.e55 = symbolic_binding Pair, 0 [symbolic = %Pair.loc4_19.1 (constants.%Pair)] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %A.patt: %pattern_type.6b6 = symbolic_binding_pattern A, 0 [concrete] -// CHECK:STDOUT: %B.patt: %pattern_type.6b6 = symbolic_binding_pattern B, 1 [concrete] -// CHECK:STDOUT: %h.param_patt: @F.%pattern_type (%pattern_type.725) = value_param_pattern [concrete] -// CHECK:STDOUT: %h.patt: @F.%pattern_type (%pattern_type.725) = at_binding_pattern h, %h.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc6_54 [concrete] +// CHECK:STDOUT: %A.patt.loc6_7.1: %pattern_type.6b6 = symbolic_binding_pattern A, 0 [symbolic = %A.patt.loc6_7.2 (constants.%A.patt)] +// CHECK:STDOUT: %B.patt.loc6_16.1: %pattern_type.6b6 = symbolic_binding_pattern B, 1 [symbolic = %B.patt.loc6_16.2 (constants.%B.patt)] +// CHECK:STDOUT: %h.param_patt.loc6_32.1: @F.%pattern_type (%pattern_type.725) = value_param_pattern [symbolic = %h.param_patt.loc6_32.2 (constants.%h.param_patt.cdf)] +// CHECK:STDOUT: %h.patt.loc6_32.1: @F.%pattern_type (%pattern_type.725) = at_binding_pattern h, %h.param_patt.loc6_32.1 [symbolic = %h.patt.loc6_32.2 (constants.%h.patt.596)] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc6_54 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc6_54: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc6_54: Core.Form = init_form %i32.loc6_54 [concrete = constants.%.795] @@ -385,10 +423,10 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %h.param_patt: %pattern_type.adf = value_param_pattern [concrete] -// CHECK:STDOUT: %h.patt: %pattern_type.adf = at_binding_pattern h, %h.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %h.param_patt: %pattern_type.adf = value_param_pattern [concrete = constants.%h.param_patt.7d9] +// CHECK:STDOUT: %h.patt: %pattern_type.adf = at_binding_pattern h, %h.param_patt [concrete = constants.%h.patt.25e585.1] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc8_29: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -423,6 +461,7 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @HasPair(%Pair.loc4_19.2: %tuple.type.e55) { +// CHECK:STDOUT: %Pair.patt.loc4_19.2: %pattern_type.394 = symbolic_binding_pattern Pair, 0 [symbolic = %Pair.patt.loc4_19.2 (constants.%Pair.patt)] // CHECK:STDOUT: %Pair.loc4_19.1: %tuple.type.e55 = symbolic_binding Pair, 0 [symbolic = %Pair.loc4_19.1 (constants.%Pair)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -437,11 +476,15 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%A.loc6_7.2: %i32, %B.loc6_16.2: %i32) { +// CHECK:STDOUT: %A.patt.loc6_7.2: %pattern_type.6b6 = symbolic_binding_pattern A, 0 [symbolic = %A.patt.loc6_7.2 (constants.%A.patt)] // CHECK:STDOUT: %A.loc6_7.1: %i32 = symbolic_binding A, 0 [symbolic = %A.loc6_7.1 (constants.%A)] +// CHECK:STDOUT: %B.patt.loc6_16.2: %pattern_type.6b6 = symbolic_binding_pattern B, 1 [symbolic = %B.patt.loc6_16.2 (constants.%B.patt)] // CHECK:STDOUT: %B.loc6_16.1: %i32 = symbolic_binding B, 1 [symbolic = %B.loc6_16.1 (constants.%B)] // CHECK:STDOUT: %tuple.loc6_47.1: %tuple.type.e55 = tuple_value (%A.loc6_7.1, %B.loc6_16.1) [symbolic = %tuple.loc6_47.1 (constants.%tuple.509)] // CHECK:STDOUT: %HasPair.loc6_48.1: type = class_type @HasPair, @HasPair(%tuple.loc6_47.1) [symbolic = %HasPair.loc6_48.1 (constants.%HasPair.72f)] // CHECK:STDOUT: %pattern_type: type = pattern_type %HasPair.loc6_48.1 [symbolic = %pattern_type (constants.%pattern_type.725)] +// CHECK:STDOUT: %h.param_patt.loc6_32.2: @F.%pattern_type (%pattern_type.725) = value_param_pattern [symbolic = %h.param_patt.loc6_32.2 (constants.%h.param_patt.cdf)] +// CHECK:STDOUT: %h.patt.loc6_32.2: @F.%pattern_type (%pattern_type.725) = at_binding_pattern h, %h.param_patt.loc6_32.2 [symbolic = %h.patt.loc6_32.2 (constants.%h.patt.596)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %HasPair.loc6_48.1 [symbolic = %require_complete (constants.%require_complete.39d)] @@ -470,35 +513,46 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HasPair(constants.%Pair) { +// CHECK:STDOUT: %Pair.patt.loc4_19.2 => constants.%Pair.patt // CHECK:STDOUT: %Pair.loc4_19.1 => constants.%Pair // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HasPair(constants.%tuple.509) { +// CHECK:STDOUT: %Pair.patt.loc4_19.2 => constants.%Pair.patt // CHECK:STDOUT: %Pair.loc4_19.1 => constants.%tuple.509 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%A, constants.%B) { +// CHECK:STDOUT: %A.patt.loc6_7.2 => constants.%A.patt // CHECK:STDOUT: %A.loc6_7.1 => constants.%A +// CHECK:STDOUT: %B.patt.loc6_16.2 => constants.%B.patt // CHECK:STDOUT: %B.loc6_16.1 => constants.%B // CHECK:STDOUT: %tuple.loc6_47.1 => constants.%tuple.509 // CHECK:STDOUT: %HasPair.loc6_48.1 => constants.%HasPair.72f // CHECK:STDOUT: %pattern_type => constants.%pattern_type.725 +// CHECK:STDOUT: %h.param_patt.loc6_32.2 => constants.%h.param_patt.cdf +// CHECK:STDOUT: %h.patt.loc6_32.2 => constants.%h.patt.596 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HasPair(constants.%tuple.102) { +// CHECK:STDOUT: %Pair.patt.loc4_19.2 => constants.%Pair.patt // CHECK:STDOUT: %Pair.loc4_19.1 => constants.%tuple.102 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%int_1.0c6, constants.%int_2.295) { +// CHECK:STDOUT: %A.patt.loc6_7.2 => constants.%A.patt // CHECK:STDOUT: %A.loc6_7.1 => constants.%int_1.0c6 +// CHECK:STDOUT: %B.patt.loc6_16.2 => constants.%B.patt // CHECK:STDOUT: %B.loc6_16.1 => constants.%int_2.295 // CHECK:STDOUT: %tuple.loc6_47.1 => constants.%tuple.102 // CHECK:STDOUT: %HasPair.loc6_48.1 => constants.%HasPair.69b // CHECK:STDOUT: %pattern_type => constants.%pattern_type.adf +// CHECK:STDOUT: %h.param_patt.loc6_32.2 => constants.%h.param_patt.7d9 +// CHECK:STDOUT: %h.patt.loc6_32.2 => constants.%h.patt.25e585.2 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.357 @@ -516,20 +570,29 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.11e: %tuple.type.24b = tuple_value (%T, %T) [symbolic] // CHECK:STDOUT: %tuple.type.07a: type = tuple_type (%T, %T) [symbolic] // CHECK:STDOUT: %pattern_type.c3f: type = pattern_type %tuple.type.07a [symbolic] +// CHECK:STDOUT: %pair.param_patt.5a3: %pattern_type.c3f = value_param_pattern [symbolic] +// CHECK:STDOUT: %pair.patt.f0f: %pattern_type.c3f = at_binding_pattern pair, %pair.param_patt.5a3 [symbolic] // CHECK:STDOUT: %.184: Core.Form = init_form %T [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %return.param_patt.41d: %pattern_type.51d = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.b39: %pattern_type.51d = return_slot_pattern %return.param_patt.41d, %T [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %tuple.b04: %tuple.type.24b = tuple_value (%C, %D) [concrete] // CHECK:STDOUT: %tuple.type.af1: type = tuple_type (%C, %D) [concrete] // CHECK:STDOUT: %pattern_type.c66: type = pattern_type %tuple.type.af1 [concrete] +// CHECK:STDOUT: %pair.param_patt.f67: %pattern_type.c66 = value_param_pattern [concrete] +// CHECK:STDOUT: %pair.patt.a61: %pattern_type.c66 = at_binding_pattern pair, %pair.param_patt.f67 [concrete] // CHECK:STDOUT: %.592: Core.Form = init_form %D [concrete] // CHECK:STDOUT: %pattern_type.d8d: type = pattern_type %D [concrete] +// CHECK:STDOUT: %return.param_patt.eae: %pattern_type.d8d = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e38: %pattern_type.d8d = return_slot_pattern %return.param_patt.eae, %D [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -553,11 +616,11 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %D.decl: type = class_decl @D [concrete = constants.%D] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %pair.param_patt: @F.%pattern_type.loc7_20 (%pattern_type.c3f) = value_param_pattern [concrete] -// CHECK:STDOUT: %pair.patt: @F.%pattern_type.loc7_20 (%pattern_type.c3f) = at_binding_pattern pair, %pair.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @F.%pattern_type.loc7_33 (%pattern_type.51d) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @F.%pattern_type.loc7_33 (%pattern_type.51d) = return_slot_pattern %return.param_patt, %T.ref.loc7_33 [concrete] +// CHECK:STDOUT: %T.patt.loc7_7.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_7.2 (constants.%T.patt)] +// CHECK:STDOUT: %pair.param_patt.loc7_20.1: @F.%pattern_type.loc7_20 (%pattern_type.c3f) = value_param_pattern [symbolic = %pair.param_patt.loc7_20.2 (constants.%pair.param_patt.5a3)] +// CHECK:STDOUT: %pair.patt.loc7_20.1: @F.%pattern_type.loc7_20 (%pattern_type.c3f) = at_binding_pattern pair, %pair.param_patt.loc7_20.1 [symbolic = %pair.patt.loc7_20.2 (constants.%pair.patt.f0f)] +// CHECK:STDOUT: %return.param_patt.loc7_33.1: @F.%pattern_type.loc7_33 (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt.loc7_33.2 (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt.loc7_30.1: @F.%pattern_type.loc7_33 (%pattern_type.51d) = return_slot_pattern %return.param_patt.loc7_33.1, %T.ref.loc7_33 [symbolic = %return.patt.loc7_30.2 (constants.%return.patt.b39)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc7_33: type = name_ref T, %T.loc7_7.2 [symbolic = %T.loc7_7.1 (constants.%T)] // CHECK:STDOUT: %.loc7_33.2: Core.Form = init_form %T.ref.loc7_33 [symbolic = %.loc7_33.1 (constants.%.184)] @@ -578,10 +641,10 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: %return: ref @F.%T.loc7_7.1 (%T) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %pair.param_patt: %pattern_type.c66 = value_param_pattern [concrete] -// CHECK:STDOUT: %pair.patt: %pattern_type.c66 = at_binding_pattern pair, %pair.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.d8d = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.d8d = return_slot_pattern %return.param_patt, %D.ref.loc9_23 [concrete] +// CHECK:STDOUT: %pair.param_patt: %pattern_type.c66 = value_param_pattern [concrete = constants.%pair.param_patt.f67] +// CHECK:STDOUT: %pair.patt: %pattern_type.c66 = at_binding_pattern pair, %pair.param_patt [concrete = constants.%pair.patt.a61] +// CHECK:STDOUT: %return.param_patt: %pattern_type.d8d = out_param_pattern [concrete = constants.%return.param_patt.eae] +// CHECK:STDOUT: %return.patt: %pattern_type.d8d = return_slot_pattern %return.param_patt, %D.ref.loc9_23 [concrete = constants.%return.patt.e38] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref.loc9_23: type = name_ref D, file.%D.decl [concrete = constants.%D] // CHECK:STDOUT: %.loc9_23: Core.Form = init_form %D.ref.loc9_23 [concrete = constants.%.592] @@ -615,12 +678,17 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc7_7.2: type) { +// CHECK:STDOUT: %T.patt.loc7_7.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_7.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc7_7.1: type = symbolic_binding T, 0 [symbolic = %T.loc7_7.1 (constants.%T)] // CHECK:STDOUT: %tuple: %tuple.type.24b = tuple_value (%T.loc7_7.1, %T.loc7_7.1) [symbolic = %tuple (constants.%tuple.11e)] // CHECK:STDOUT: %tuple.type: type = tuple_type (%T.loc7_7.1, %T.loc7_7.1) [symbolic = %tuple.type (constants.%tuple.type.07a)] // CHECK:STDOUT: %pattern_type.loc7_20: type = pattern_type %tuple.type [symbolic = %pattern_type.loc7_20 (constants.%pattern_type.c3f)] +// CHECK:STDOUT: %pair.param_patt.loc7_20.2: @F.%pattern_type.loc7_20 (%pattern_type.c3f) = value_param_pattern [symbolic = %pair.param_patt.loc7_20.2 (constants.%pair.param_patt.5a3)] +// CHECK:STDOUT: %pair.patt.loc7_20.2: @F.%pattern_type.loc7_20 (%pattern_type.c3f) = at_binding_pattern pair, %pair.param_patt.loc7_20.2 [symbolic = %pair.patt.loc7_20.2 (constants.%pair.patt.f0f)] // CHECK:STDOUT: %.loc7_33.1: Core.Form = init_form %T.loc7_7.1 [symbolic = %.loc7_33.1 (constants.%.184)] // CHECK:STDOUT: %pattern_type.loc7_33: type = pattern_type %T.loc7_7.1 [symbolic = %pattern_type.loc7_33 (constants.%pattern_type.51d)] +// CHECK:STDOUT: %return.param_patt.loc7_33.2: @F.%pattern_type.loc7_33 (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt.loc7_33.2 (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt.loc7_30.2: @F.%pattern_type.loc7_33 (%pattern_type.51d) = return_slot_pattern %return.param_patt.loc7_33.2, %T.loc7_7.1 [symbolic = %return.patt.loc7_30.2 (constants.%return.patt.b39)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%pair.param: @F.%tuple.type (%tuple.type.07a)) -> out %return.param: @F.%T.loc7_7.1 (%T); // CHECK:STDOUT: } @@ -633,11 +701,16 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T) { +// CHECK:STDOUT: %T.patt.loc7_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc7_7.1 => constants.%T // CHECK:STDOUT: %tuple => constants.%tuple.11e // CHECK:STDOUT: %tuple.type => constants.%tuple.type.07a // CHECK:STDOUT: %pattern_type.loc7_20 => constants.%pattern_type.c3f +// CHECK:STDOUT: %pair.param_patt.loc7_20.2 => constants.%pair.param_patt.5a3 +// CHECK:STDOUT: %pair.patt.loc7_20.2 => constants.%pair.patt.f0f // CHECK:STDOUT: %.loc7_33.1 => constants.%.184 // CHECK:STDOUT: %pattern_type.loc7_33 => constants.%pattern_type.51d +// CHECK:STDOUT: %return.param_patt.loc7_33.2 => constants.%return.param_patt.41d +// CHECK:STDOUT: %return.patt.loc7_30.2 => constants.%return.patt.b39 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/deduce/type_operator.carbon b/toolchain/check/testdata/deduce/type_operator.carbon index 8ffbd5acacae..96ac5147c1ca 100644 --- a/toolchain/check/testdata/deduce/type_operator.carbon +++ b/toolchain/check/testdata/deduce/type_operator.carbon @@ -76,11 +76,16 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %ptr.e8f: type = ptr_type %T [symbolic] // CHECK:STDOUT: %pattern_type.4f4: type = pattern_type %ptr.e8f [symbolic] +// CHECK:STDOUT: %p.param_patt.a12: %pattern_type.4f4 = value_param_pattern [symbolic] +// CHECK:STDOUT: %p.patt.14c: %pattern_type.4f4 = at_binding_pattern p, %p.param_patt.a12 [symbolic] // CHECK:STDOUT: %.184: Core.Form = init_form %T [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %return.param_patt.41d: %pattern_type.51d = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.b39: %pattern_type.51d = return_slot_pattern %return.param_patt.41d, %T [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.ef1: = require_complete_type %ptr.e8f [symbolic] @@ -88,8 +93,12 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: %F.specific_fn.eab: = specific_function %F, @F(%T) [symbolic] // CHECK:STDOUT: %ptr.6b6: type = ptr_type %C [concrete] // CHECK:STDOUT: %pattern_type.fcb: type = pattern_type %ptr.6b6 [concrete] +// CHECK:STDOUT: %p.param_patt.9b8: %pattern_type.fcb = value_param_pattern [concrete] +// CHECK:STDOUT: %p.patt.d88: %pattern_type.fcb = at_binding_pattern p, %p.param_patt.9b8 [concrete] // CHECK:STDOUT: %.a44: Core.Form = init_form %C [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %return.param_patt.89a: %pattern_type.98b = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e4a: %pattern_type.98b = return_slot_pattern %return.param_patt.89a, %C [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %F.specific_fn.e0d: = specific_function %F, @F(%C) [concrete] @@ -113,11 +122,11 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %p.param_patt: @F.%pattern_type.loc6_17 (%pattern_type.4f4) = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: @F.%pattern_type.loc6_17 (%pattern_type.4f4) = at_binding_pattern p, %p.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @F.%pattern_type.loc6_26 (%pattern_type.51d) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @F.%pattern_type.loc6_26 (%pattern_type.51d) = return_slot_pattern %return.param_patt, %T.ref.loc6_26 [concrete] +// CHECK:STDOUT: %T.patt.loc6_7.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_7.2 (constants.%T.patt)] +// CHECK:STDOUT: %p.param_patt.loc6_17.1: @F.%pattern_type.loc6_17 (%pattern_type.4f4) = value_param_pattern [symbolic = %p.param_patt.loc6_17.2 (constants.%p.param_patt.a12)] +// CHECK:STDOUT: %p.patt.loc6_17.1: @F.%pattern_type.loc6_17 (%pattern_type.4f4) = at_binding_pattern p, %p.param_patt.loc6_17.1 [symbolic = %p.patt.loc6_17.2 (constants.%p.patt.14c)] +// CHECK:STDOUT: %return.param_patt.loc6_26.1: @F.%pattern_type.loc6_26 (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt.loc6_26.2 (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt.loc6_23.1: @F.%pattern_type.loc6_26 (%pattern_type.51d) = return_slot_pattern %return.param_patt.loc6_26.1, %T.ref.loc6_26 [symbolic = %return.patt.loc6_23.2 (constants.%return.patt.b39)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc6_26: type = name_ref T, %T.loc6_7.2 [symbolic = %T.loc6_7.1 (constants.%T)] // CHECK:STDOUT: %.loc6_26.3: Core.Form = init_form %T.ref.loc6_26 [symbolic = %.loc6_26.2 (constants.%.184)] @@ -136,10 +145,10 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: %return: ref @F.%T.loc6_7.1 (%T) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %p.param_patt: %pattern_type.fcb = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.fcb = at_binding_pattern p, %p.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C.ref.loc8_16 [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.fcb = value_param_pattern [concrete = constants.%p.param_patt.9b8] +// CHECK:STDOUT: %p.patt: %pattern_type.fcb = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt.d88] +// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete = constants.%return.param_patt.89a] +// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C.ref.loc8_16 [concrete = constants.%return.patt.e4a] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc8_16: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %.loc8_16.2: Core.Form = init_form %C.ref.loc8_16 [concrete = constants.%.a44] @@ -163,11 +172,16 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc6_7.2: type) { +// CHECK:STDOUT: %T.patt.loc6_7.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_7.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc6_7.1: type = symbolic_binding T, 0 [symbolic = %T.loc6_7.1 (constants.%T)] // CHECK:STDOUT: %ptr.loc6_20.1: type = ptr_type %T.loc6_7.1 [symbolic = %ptr.loc6_20.1 (constants.%ptr.e8f)] // CHECK:STDOUT: %pattern_type.loc6_17: type = pattern_type %ptr.loc6_20.1 [symbolic = %pattern_type.loc6_17 (constants.%pattern_type.4f4)] +// CHECK:STDOUT: %p.param_patt.loc6_17.2: @F.%pattern_type.loc6_17 (%pattern_type.4f4) = value_param_pattern [symbolic = %p.param_patt.loc6_17.2 (constants.%p.param_patt.a12)] +// CHECK:STDOUT: %p.patt.loc6_17.2: @F.%pattern_type.loc6_17 (%pattern_type.4f4) = at_binding_pattern p, %p.param_patt.loc6_17.2 [symbolic = %p.patt.loc6_17.2 (constants.%p.patt.14c)] // CHECK:STDOUT: %.loc6_26.2: Core.Form = init_form %T.loc6_7.1 [symbolic = %.loc6_26.2 (constants.%.184)] // CHECK:STDOUT: %pattern_type.loc6_26: type = pattern_type %T.loc6_7.1 [symbolic = %pattern_type.loc6_26 (constants.%pattern_type.51d)] +// CHECK:STDOUT: %return.param_patt.loc6_26.2: @F.%pattern_type.loc6_26 (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt.loc6_26.2 (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt.loc6_23.2: @F.%pattern_type.loc6_26 (%pattern_type.51d) = return_slot_pattern %return.param_patt.loc6_26.2, %T.loc6_7.1 [symbolic = %return.patt.loc6_23.2 (constants.%return.patt.b39)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc6_17: = require_complete_type %ptr.loc6_20.1 [symbolic = %require_complete.loc6_17 (constants.%require_complete.ef1)] @@ -196,11 +210,16 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T) { +// CHECK:STDOUT: %T.patt.loc6_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc6_7.1 => constants.%T // CHECK:STDOUT: %ptr.loc6_20.1 => constants.%ptr.e8f // CHECK:STDOUT: %pattern_type.loc6_17 => constants.%pattern_type.4f4 +// CHECK:STDOUT: %p.param_patt.loc6_17.2 => constants.%p.param_patt.a12 +// CHECK:STDOUT: %p.patt.loc6_17.2 => constants.%p.patt.14c // CHECK:STDOUT: %.loc6_26.2 => constants.%.184 // CHECK:STDOUT: %pattern_type.loc6_26 => constants.%pattern_type.51d +// CHECK:STDOUT: %return.param_patt.loc6_26.2 => constants.%return.param_patt.41d +// CHECK:STDOUT: %return.patt.loc6_23.2 => constants.%return.patt.b39 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc6_17 => constants.%require_complete.ef1 @@ -209,11 +228,16 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%C) { +// CHECK:STDOUT: %T.patt.loc6_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc6_7.1 => constants.%C // CHECK:STDOUT: %ptr.loc6_20.1 => constants.%ptr.6b6 // CHECK:STDOUT: %pattern_type.loc6_17 => constants.%pattern_type.fcb +// CHECK:STDOUT: %p.param_patt.loc6_17.2 => constants.%p.param_patt.9b8 +// CHECK:STDOUT: %p.patt.loc6_17.2 => constants.%p.patt.d88 // CHECK:STDOUT: %.loc6_26.2 => constants.%.a44 // CHECK:STDOUT: %pattern_type.loc6_26 => constants.%pattern_type.98b +// CHECK:STDOUT: %return.param_patt.loc6_26.2 => constants.%return.param_patt.89a +// CHECK:STDOUT: %return.patt.loc6_23.2 => constants.%return.patt.e4a // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc6_17 => constants.%complete_type.bf9 @@ -230,12 +254,17 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %const.4ff: type = const_type %T [symbolic] // CHECK:STDOUT: %ptr.a15: type = ptr_type %const.4ff [symbolic] // CHECK:STDOUT: %pattern_type.26f: type = pattern_type %ptr.a15 [symbolic] +// CHECK:STDOUT: %p.param_patt.b08: %pattern_type.26f = value_param_pattern [symbolic] +// CHECK:STDOUT: %p.patt.b03: %pattern_type.26f = at_binding_pattern p, %p.param_patt.b08 [symbolic] // CHECK:STDOUT: %.184: Core.Form = init_form %T [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %return.param_patt.41d: %pattern_type.51d = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.b39: %pattern_type.51d = return_slot_pattern %return.param_patt.41d, %T [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.0c1: = require_complete_type %ptr.a15 [symbolic] @@ -244,8 +273,12 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: %const.13f: type = const_type %C [concrete] // CHECK:STDOUT: %ptr.77f: type = ptr_type %const.13f [concrete] // CHECK:STDOUT: %pattern_type.7d2: type = pattern_type %ptr.77f [concrete] +// CHECK:STDOUT: %p.param_patt.a6a: %pattern_type.7d2 = value_param_pattern [concrete] +// CHECK:STDOUT: %p.patt.bb7: %pattern_type.7d2 = at_binding_pattern p, %p.param_patt.a6a [concrete] // CHECK:STDOUT: %.a44: Core.Form = init_form %C [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %return.param_patt.89a: %pattern_type.98b = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e4a: %pattern_type.98b = return_slot_pattern %return.param_patt.89a, %C [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %F.specific_fn.e0d: = specific_function %F, @F(%C) [concrete] @@ -269,11 +302,11 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %p.param_patt: @F.%pattern_type.loc6_17 (%pattern_type.26f) = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: @F.%pattern_type.loc6_17 (%pattern_type.26f) = at_binding_pattern p, %p.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @F.%pattern_type.loc6_32 (%pattern_type.51d) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @F.%pattern_type.loc6_32 (%pattern_type.51d) = return_slot_pattern %return.param_patt, %T.ref.loc6_32 [concrete] +// CHECK:STDOUT: %T.patt.loc6_7.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_7.2 (constants.%T.patt)] +// CHECK:STDOUT: %p.param_patt.loc6_17.1: @F.%pattern_type.loc6_17 (%pattern_type.26f) = value_param_pattern [symbolic = %p.param_patt.loc6_17.2 (constants.%p.param_patt.b08)] +// CHECK:STDOUT: %p.patt.loc6_17.1: @F.%pattern_type.loc6_17 (%pattern_type.26f) = at_binding_pattern p, %p.param_patt.loc6_17.1 [symbolic = %p.patt.loc6_17.2 (constants.%p.patt.b03)] +// CHECK:STDOUT: %return.param_patt.loc6_32.1: @F.%pattern_type.loc6_32 (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt.loc6_32.2 (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt.loc6_29.1: @F.%pattern_type.loc6_32 (%pattern_type.51d) = return_slot_pattern %return.param_patt.loc6_32.1, %T.ref.loc6_32 [symbolic = %return.patt.loc6_29.2 (constants.%return.patt.b39)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc6_32: type = name_ref T, %T.loc6_7.2 [symbolic = %T.loc6_7.1 (constants.%T)] // CHECK:STDOUT: %.loc6_32.3: Core.Form = init_form %T.ref.loc6_32 [symbolic = %.loc6_32.2 (constants.%.184)] @@ -293,10 +326,10 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: %return: ref @F.%T.loc6_7.1 (%T) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %p.param_patt: %pattern_type.7d2 = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.7d2 = at_binding_pattern p, %p.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C.ref.loc8_22 [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.7d2 = value_param_pattern [concrete = constants.%p.param_patt.a6a] +// CHECK:STDOUT: %p.patt: %pattern_type.7d2 = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt.bb7] +// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete = constants.%return.param_patt.89a] +// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C.ref.loc8_22 [concrete = constants.%return.patt.e4a] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc8_22: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %.loc8_22.2: Core.Form = init_form %C.ref.loc8_22 [concrete = constants.%.a44] @@ -321,12 +354,17 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc6_7.2: type) { +// CHECK:STDOUT: %T.patt.loc6_7.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_7.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc6_7.1: type = symbolic_binding T, 0 [symbolic = %T.loc6_7.1 (constants.%T)] // CHECK:STDOUT: %const.loc6_19.1: type = const_type %T.loc6_7.1 [symbolic = %const.loc6_19.1 (constants.%const.4ff)] // CHECK:STDOUT: %ptr.loc6_26.1: type = ptr_type %const.loc6_19.1 [symbolic = %ptr.loc6_26.1 (constants.%ptr.a15)] // CHECK:STDOUT: %pattern_type.loc6_17: type = pattern_type %ptr.loc6_26.1 [symbolic = %pattern_type.loc6_17 (constants.%pattern_type.26f)] +// CHECK:STDOUT: %p.param_patt.loc6_17.2: @F.%pattern_type.loc6_17 (%pattern_type.26f) = value_param_pattern [symbolic = %p.param_patt.loc6_17.2 (constants.%p.param_patt.b08)] +// CHECK:STDOUT: %p.patt.loc6_17.2: @F.%pattern_type.loc6_17 (%pattern_type.26f) = at_binding_pattern p, %p.param_patt.loc6_17.2 [symbolic = %p.patt.loc6_17.2 (constants.%p.patt.b03)] // CHECK:STDOUT: %.loc6_32.2: Core.Form = init_form %T.loc6_7.1 [symbolic = %.loc6_32.2 (constants.%.184)] // CHECK:STDOUT: %pattern_type.loc6_32: type = pattern_type %T.loc6_7.1 [symbolic = %pattern_type.loc6_32 (constants.%pattern_type.51d)] +// CHECK:STDOUT: %return.param_patt.loc6_32.2: @F.%pattern_type.loc6_32 (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt.loc6_32.2 (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt.loc6_29.2: @F.%pattern_type.loc6_32 (%pattern_type.51d) = return_slot_pattern %return.param_patt.loc6_32.2, %T.loc6_7.1 [symbolic = %return.patt.loc6_29.2 (constants.%return.patt.b39)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc6_17: = require_complete_type %ptr.loc6_26.1 [symbolic = %require_complete.loc6_17 (constants.%require_complete.0c1)] @@ -355,12 +393,17 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T) { +// CHECK:STDOUT: %T.patt.loc6_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc6_7.1 => constants.%T // CHECK:STDOUT: %const.loc6_19.1 => constants.%const.4ff // CHECK:STDOUT: %ptr.loc6_26.1 => constants.%ptr.a15 // CHECK:STDOUT: %pattern_type.loc6_17 => constants.%pattern_type.26f +// CHECK:STDOUT: %p.param_patt.loc6_17.2 => constants.%p.param_patt.b08 +// CHECK:STDOUT: %p.patt.loc6_17.2 => constants.%p.patt.b03 // CHECK:STDOUT: %.loc6_32.2 => constants.%.184 // CHECK:STDOUT: %pattern_type.loc6_32 => constants.%pattern_type.51d +// CHECK:STDOUT: %return.param_patt.loc6_32.2 => constants.%return.param_patt.41d +// CHECK:STDOUT: %return.patt.loc6_29.2 => constants.%return.patt.b39 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc6_17 => constants.%require_complete.0c1 @@ -369,12 +412,17 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%C) { +// CHECK:STDOUT: %T.patt.loc6_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc6_7.1 => constants.%C // CHECK:STDOUT: %const.loc6_19.1 => constants.%const.13f // CHECK:STDOUT: %ptr.loc6_26.1 => constants.%ptr.77f // CHECK:STDOUT: %pattern_type.loc6_17 => constants.%pattern_type.7d2 +// CHECK:STDOUT: %p.param_patt.loc6_17.2 => constants.%p.param_patt.a6a +// CHECK:STDOUT: %p.patt.loc6_17.2 => constants.%p.patt.bb7 // CHECK:STDOUT: %.loc6_32.2 => constants.%.a44 // CHECK:STDOUT: %pattern_type.loc6_32 => constants.%pattern_type.98b +// CHECK:STDOUT: %return.param_patt.loc6_32.2 => constants.%return.param_patt.89a +// CHECK:STDOUT: %return.patt.loc6_29.2 => constants.%return.patt.e4a // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc6_17 => constants.%complete_type.8ec @@ -391,11 +439,16 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %ptr.e8f: type = ptr_type %T [symbolic] // CHECK:STDOUT: %pattern_type.4f4: type = pattern_type %ptr.e8f [symbolic] +// CHECK:STDOUT: %p.param_patt.a12: %pattern_type.4f4 = value_param_pattern [symbolic] +// CHECK:STDOUT: %p.patt.14c: %pattern_type.4f4 = at_binding_pattern p, %p.param_patt.a12 [symbolic] // CHECK:STDOUT: %.184: Core.Form = init_form %T [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %return.param_patt.41d: %pattern_type.51d = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.b39: %pattern_type.51d = return_slot_pattern %return.param_patt.41d, %T [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.ef1: = require_complete_type %ptr.e8f [symbolic] @@ -404,8 +457,12 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: %const: type = const_type %C [concrete] // CHECK:STDOUT: %ptr.77f: type = ptr_type %const [concrete] // CHECK:STDOUT: %pattern_type.7d2: type = pattern_type %ptr.77f [concrete] +// CHECK:STDOUT: %p.param_patt.a6a: %pattern_type.7d2 = value_param_pattern [concrete] +// CHECK:STDOUT: %p.patt.bb7: %pattern_type.7d2 = at_binding_pattern p, %p.param_patt.a6a [concrete] // CHECK:STDOUT: %.ab2: Core.Form = init_form %const [concrete] // CHECK:STDOUT: %pattern_type.1e4: type = pattern_type %const [concrete] +// CHECK:STDOUT: %return.param_patt.727: %pattern_type.1e4 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.dc5: %pattern_type.1e4 = return_slot_pattern %return.param_patt.727, %const [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %F.specific_fn.513: = specific_function %F, @F(%const) [concrete] @@ -429,11 +486,11 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %p.param_patt: @F.%pattern_type.loc6_17 (%pattern_type.4f4) = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: @F.%pattern_type.loc6_17 (%pattern_type.4f4) = at_binding_pattern p, %p.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @F.%pattern_type.loc6_26 (%pattern_type.51d) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @F.%pattern_type.loc6_26 (%pattern_type.51d) = return_slot_pattern %return.param_patt, %T.ref.loc6_26 [concrete] +// CHECK:STDOUT: %T.patt.loc6_7.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_7.2 (constants.%T.patt)] +// CHECK:STDOUT: %p.param_patt.loc6_17.1: @F.%pattern_type.loc6_17 (%pattern_type.4f4) = value_param_pattern [symbolic = %p.param_patt.loc6_17.2 (constants.%p.param_patt.a12)] +// CHECK:STDOUT: %p.patt.loc6_17.1: @F.%pattern_type.loc6_17 (%pattern_type.4f4) = at_binding_pattern p, %p.param_patt.loc6_17.1 [symbolic = %p.patt.loc6_17.2 (constants.%p.patt.14c)] +// CHECK:STDOUT: %return.param_patt.loc6_26.1: @F.%pattern_type.loc6_26 (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt.loc6_26.2 (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt.loc6_23.1: @F.%pattern_type.loc6_26 (%pattern_type.51d) = return_slot_pattern %return.param_patt.loc6_26.1, %T.ref.loc6_26 [symbolic = %return.patt.loc6_23.2 (constants.%return.patt.b39)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc6_26: type = name_ref T, %T.loc6_7.2 [symbolic = %T.loc6_7.1 (constants.%T)] // CHECK:STDOUT: %.loc6_26.3: Core.Form = init_form %T.ref.loc6_26 [symbolic = %.loc6_26.2 (constants.%.184)] @@ -452,10 +509,10 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: %return: ref @F.%T.loc6_7.1 (%T) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %p.param_patt: %pattern_type.7d2 = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.7d2 = at_binding_pattern p, %p.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.1e4 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.1e4 = return_slot_pattern %return.param_patt, %const.loc8_22 [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.7d2 = value_param_pattern [concrete = constants.%p.param_patt.a6a] +// CHECK:STDOUT: %p.patt: %pattern_type.7d2 = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt.bb7] +// CHECK:STDOUT: %return.param_patt: %pattern_type.1e4 = out_param_pattern [concrete = constants.%return.param_patt.727] +// CHECK:STDOUT: %return.patt: %pattern_type.1e4 = return_slot_pattern %return.param_patt, %const.loc8_22 [concrete = constants.%return.patt.dc5] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc8_28: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %const.loc8_22: type = const_type %C.ref.loc8_28 [concrete = constants.%const] @@ -481,11 +538,16 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc6_7.2: type) { +// CHECK:STDOUT: %T.patt.loc6_7.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_7.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc6_7.1: type = symbolic_binding T, 0 [symbolic = %T.loc6_7.1 (constants.%T)] // CHECK:STDOUT: %ptr.loc6_20.1: type = ptr_type %T.loc6_7.1 [symbolic = %ptr.loc6_20.1 (constants.%ptr.e8f)] // CHECK:STDOUT: %pattern_type.loc6_17: type = pattern_type %ptr.loc6_20.1 [symbolic = %pattern_type.loc6_17 (constants.%pattern_type.4f4)] +// CHECK:STDOUT: %p.param_patt.loc6_17.2: @F.%pattern_type.loc6_17 (%pattern_type.4f4) = value_param_pattern [symbolic = %p.param_patt.loc6_17.2 (constants.%p.param_patt.a12)] +// CHECK:STDOUT: %p.patt.loc6_17.2: @F.%pattern_type.loc6_17 (%pattern_type.4f4) = at_binding_pattern p, %p.param_patt.loc6_17.2 [symbolic = %p.patt.loc6_17.2 (constants.%p.patt.14c)] // CHECK:STDOUT: %.loc6_26.2: Core.Form = init_form %T.loc6_7.1 [symbolic = %.loc6_26.2 (constants.%.184)] // CHECK:STDOUT: %pattern_type.loc6_26: type = pattern_type %T.loc6_7.1 [symbolic = %pattern_type.loc6_26 (constants.%pattern_type.51d)] +// CHECK:STDOUT: %return.param_patt.loc6_26.2: @F.%pattern_type.loc6_26 (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt.loc6_26.2 (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt.loc6_23.2: @F.%pattern_type.loc6_26 (%pattern_type.51d) = return_slot_pattern %return.param_patt.loc6_26.2, %T.loc6_7.1 [symbolic = %return.patt.loc6_23.2 (constants.%return.patt.b39)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc6_17: = require_complete_type %ptr.loc6_20.1 [symbolic = %require_complete.loc6_17 (constants.%require_complete.ef1)] @@ -514,11 +576,16 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T) { +// CHECK:STDOUT: %T.patt.loc6_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc6_7.1 => constants.%T // CHECK:STDOUT: %ptr.loc6_20.1 => constants.%ptr.e8f // CHECK:STDOUT: %pattern_type.loc6_17 => constants.%pattern_type.4f4 +// CHECK:STDOUT: %p.param_patt.loc6_17.2 => constants.%p.param_patt.a12 +// CHECK:STDOUT: %p.patt.loc6_17.2 => constants.%p.patt.14c // CHECK:STDOUT: %.loc6_26.2 => constants.%.184 // CHECK:STDOUT: %pattern_type.loc6_26 => constants.%pattern_type.51d +// CHECK:STDOUT: %return.param_patt.loc6_26.2 => constants.%return.param_patt.41d +// CHECK:STDOUT: %return.patt.loc6_23.2 => constants.%return.patt.b39 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc6_17 => constants.%require_complete.ef1 @@ -527,11 +594,16 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%const) { +// CHECK:STDOUT: %T.patt.loc6_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc6_7.1 => constants.%const // CHECK:STDOUT: %ptr.loc6_20.1 => constants.%ptr.77f // CHECK:STDOUT: %pattern_type.loc6_17 => constants.%pattern_type.7d2 +// CHECK:STDOUT: %p.param_patt.loc6_17.2 => constants.%p.param_patt.a6a +// CHECK:STDOUT: %p.patt.loc6_17.2 => constants.%p.patt.bb7 // CHECK:STDOUT: %.loc6_26.2 => constants.%.ab2 // CHECK:STDOUT: %pattern_type.loc6_26 => constants.%pattern_type.1e4 +// CHECK:STDOUT: %return.param_patt.loc6_26.2 => constants.%return.param_patt.727 +// CHECK:STDOUT: %return.patt.loc6_23.2 => constants.%return.patt.dc5 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc6_17 => constants.%complete_type.8ec @@ -548,12 +620,17 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %const.4ff: type = const_type %T [symbolic] // CHECK:STDOUT: %ptr.a15: type = ptr_type %const.4ff [symbolic] // CHECK:STDOUT: %pattern_type.26f: type = pattern_type %ptr.a15 [symbolic] +// CHECK:STDOUT: %p.param_patt.b08: %pattern_type.26f = value_param_pattern [symbolic] +// CHECK:STDOUT: %p.patt.b03: %pattern_type.26f = at_binding_pattern p, %p.param_patt.b08 [symbolic] // CHECK:STDOUT: %.184: Core.Form = init_form %T [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %return.param_patt.41d: %pattern_type.51d = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.b39: %pattern_type.51d = return_slot_pattern %return.param_patt.41d, %T [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.0c1: = require_complete_type %ptr.a15 [symbolic] @@ -561,9 +638,13 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: %F.specific_fn: = specific_function %F, @F(%T) [symbolic] // CHECK:STDOUT: %ptr.6b6: type = ptr_type %C [concrete] // CHECK:STDOUT: %pattern_type.fcb: type = pattern_type %ptr.6b6 [concrete] +// CHECK:STDOUT: %p.param_patt.9b8: %pattern_type.fcb = value_param_pattern [concrete] +// CHECK:STDOUT: %p.patt.d88: %pattern_type.fcb = at_binding_pattern p, %p.param_patt.9b8 [concrete] // CHECK:STDOUT: %const.13f: type = const_type %C [concrete] // CHECK:STDOUT: %.ab2: Core.Form = init_form %const.13f [concrete] // CHECK:STDOUT: %pattern_type.1e4: type = pattern_type %const.13f [concrete] +// CHECK:STDOUT: %return.param_patt.727: %pattern_type.1e4 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.dc5: %pattern_type.1e4 = return_slot_pattern %return.param_patt.727, %const.13f [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -585,11 +666,11 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %p.param_patt: @F.%pattern_type.loc6_17 (%pattern_type.26f) = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: @F.%pattern_type.loc6_17 (%pattern_type.26f) = at_binding_pattern p, %p.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @F.%pattern_type.loc6_32 (%pattern_type.51d) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @F.%pattern_type.loc6_32 (%pattern_type.51d) = return_slot_pattern %return.param_patt, %T.ref.loc6_32 [concrete] +// CHECK:STDOUT: %T.patt.loc6_7.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_7.2 (constants.%T.patt)] +// CHECK:STDOUT: %p.param_patt.loc6_17.1: @F.%pattern_type.loc6_17 (%pattern_type.26f) = value_param_pattern [symbolic = %p.param_patt.loc6_17.2 (constants.%p.param_patt.b08)] +// CHECK:STDOUT: %p.patt.loc6_17.1: @F.%pattern_type.loc6_17 (%pattern_type.26f) = at_binding_pattern p, %p.param_patt.loc6_17.1 [symbolic = %p.patt.loc6_17.2 (constants.%p.patt.b03)] +// CHECK:STDOUT: %return.param_patt.loc6_32.1: @F.%pattern_type.loc6_32 (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt.loc6_32.2 (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt.loc6_29.1: @F.%pattern_type.loc6_32 (%pattern_type.51d) = return_slot_pattern %return.param_patt.loc6_32.1, %T.ref.loc6_32 [symbolic = %return.patt.loc6_29.2 (constants.%return.patt.b39)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc6_32: type = name_ref T, %T.loc6_7.2 [symbolic = %T.loc6_7.1 (constants.%T)] // CHECK:STDOUT: %.loc6_32.3: Core.Form = init_form %T.ref.loc6_32 [symbolic = %.loc6_32.2 (constants.%.184)] @@ -609,10 +690,10 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: %return: ref @F.%T.loc6_7.1 (%T) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %p.param_patt: %pattern_type.fcb = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.fcb = at_binding_pattern p, %p.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.1e4 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.1e4 = return_slot_pattern %return.param_patt, %const [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.fcb = value_param_pattern [concrete = constants.%p.param_patt.9b8] +// CHECK:STDOUT: %p.patt: %pattern_type.fcb = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt.d88] +// CHECK:STDOUT: %return.param_patt: %pattern_type.1e4 = out_param_pattern [concrete = constants.%return.param_patt.727] +// CHECK:STDOUT: %return.patt: %pattern_type.1e4 = return_slot_pattern %return.param_patt, %const [concrete = constants.%return.patt.dc5] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc8_22: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %const: type = const_type %C.ref.loc8_22 [concrete = constants.%const.13f] @@ -637,12 +718,17 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc6_7.2: type) { +// CHECK:STDOUT: %T.patt.loc6_7.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_7.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc6_7.1: type = symbolic_binding T, 0 [symbolic = %T.loc6_7.1 (constants.%T)] // CHECK:STDOUT: %const.loc6_19.1: type = const_type %T.loc6_7.1 [symbolic = %const.loc6_19.1 (constants.%const.4ff)] // CHECK:STDOUT: %ptr.loc6_26.1: type = ptr_type %const.loc6_19.1 [symbolic = %ptr.loc6_26.1 (constants.%ptr.a15)] // CHECK:STDOUT: %pattern_type.loc6_17: type = pattern_type %ptr.loc6_26.1 [symbolic = %pattern_type.loc6_17 (constants.%pattern_type.26f)] +// CHECK:STDOUT: %p.param_patt.loc6_17.2: @F.%pattern_type.loc6_17 (%pattern_type.26f) = value_param_pattern [symbolic = %p.param_patt.loc6_17.2 (constants.%p.param_patt.b08)] +// CHECK:STDOUT: %p.patt.loc6_17.2: @F.%pattern_type.loc6_17 (%pattern_type.26f) = at_binding_pattern p, %p.param_patt.loc6_17.2 [symbolic = %p.patt.loc6_17.2 (constants.%p.patt.b03)] // CHECK:STDOUT: %.loc6_32.2: Core.Form = init_form %T.loc6_7.1 [symbolic = %.loc6_32.2 (constants.%.184)] // CHECK:STDOUT: %pattern_type.loc6_32: type = pattern_type %T.loc6_7.1 [symbolic = %pattern_type.loc6_32 (constants.%pattern_type.51d)] +// CHECK:STDOUT: %return.param_patt.loc6_32.2: @F.%pattern_type.loc6_32 (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt.loc6_32.2 (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt.loc6_29.2: @F.%pattern_type.loc6_32 (%pattern_type.51d) = return_slot_pattern %return.param_patt.loc6_32.2, %T.loc6_7.1 [symbolic = %return.patt.loc6_29.2 (constants.%return.patt.b39)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc6_17: = require_complete_type %ptr.loc6_26.1 [symbolic = %require_complete.loc6_17 (constants.%require_complete.0c1)] @@ -668,12 +754,17 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T) { +// CHECK:STDOUT: %T.patt.loc6_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc6_7.1 => constants.%T // CHECK:STDOUT: %const.loc6_19.1 => constants.%const.4ff // CHECK:STDOUT: %ptr.loc6_26.1 => constants.%ptr.a15 // CHECK:STDOUT: %pattern_type.loc6_17 => constants.%pattern_type.26f +// CHECK:STDOUT: %p.param_patt.loc6_17.2 => constants.%p.param_patt.b08 +// CHECK:STDOUT: %p.patt.loc6_17.2 => constants.%p.patt.b03 // CHECK:STDOUT: %.loc6_32.2 => constants.%.184 // CHECK:STDOUT: %pattern_type.loc6_32 => constants.%pattern_type.51d +// CHECK:STDOUT: %return.param_patt.loc6_32.2 => constants.%return.param_patt.41d +// CHECK:STDOUT: %return.patt.loc6_29.2 => constants.%return.patt.b39 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc6_17 => constants.%require_complete.0c1 diff --git a/toolchain/check/testdata/deduce/value_with_type_through_access.carbon b/toolchain/check/testdata/deduce/value_with_type_through_access.carbon index 0e141ddc3941..40f98a07a4ca 100644 --- a/toolchain/check/testdata/deduce/value_with_type_through_access.carbon +++ b/toolchain/check/testdata/deduce/value_with_type_through_access.carbon @@ -107,6 +107,7 @@ fn G() { // CHECK:STDOUT: %tuple.type: type = tuple_type (type) [concrete] // CHECK:STDOUT: %tuple.0d2: %tuple.type = tuple_value (type) [concrete] // CHECK:STDOUT: %pattern_type.f1e: type = pattern_type %tuple.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.f1e = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: %tuple.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %HoldsType.type: type = generic_class_type @HoldsType [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -115,9 +116,13 @@ fn G() { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.b2f: type = pattern_type %HoldsType.a83 [symbolic] +// CHECK:STDOUT: %x.param_patt.321: %pattern_type.b2f = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.a80: %pattern_type.b2f = at_binding_pattern x, %x.param_patt.321 [symbolic] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %tuple.elem0: type = tuple_access %T, element0 [symbolic] // CHECK:STDOUT: %pattern_type.e66: type = pattern_type %tuple.elem0 [symbolic] +// CHECK:STDOUT: %a.param_patt.d7c: %pattern_type.e66 = value_param_pattern [symbolic] +// CHECK:STDOUT: %a.patt.803: %pattern_type.e66 = at_binding_pattern a, %a.param_patt.d7c [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.9de: = require_complete_type %HoldsType.a83 [symbolic] @@ -130,7 +135,11 @@ fn G() { // CHECK:STDOUT: %HoldsType.30f: type = class_type @HoldsType, @HoldsType(%tuple.e45) [concrete] // CHECK:STDOUT: %HoldsType.val: %HoldsType.30f = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.ff4: type = pattern_type %HoldsType.30f [concrete] +// CHECK:STDOUT: %x.param_patt.995: %pattern_type.ff4 = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.ea0: %pattern_type.ff4 = at_binding_pattern x, %x.param_patt.995 [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.param_patt.c88: %pattern_type.98b = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt.159: %pattern_type.98b = at_binding_pattern a, %a.param_patt.c88 [concrete] // CHECK:STDOUT: %F.specific_fn: = specific_function %F, @F(%tuple.e45) [concrete] // CHECK:STDOUT: %.eb0: ref %HoldsType.30f = temporary invalid, %HoldsType.val [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] @@ -163,7 +172,7 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %HoldsType.decl: %HoldsType.type = class_decl @HoldsType [concrete = constants.%HoldsType.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.f1e = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc4_18.1: %pattern_type.f1e = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_18.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_28.1: type = splice_block %.loc4_28.3 [concrete = constants.%tuple.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -174,11 +183,11 @@ fn G() { // CHECK:STDOUT: %T.loc4_18.2: %tuple.type = symbolic_binding T, 0 [symbolic = %T.loc4_18.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type.f1e = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %x.param_patt: @F.%pattern_type.loc8_28 (%pattern_type.b2f) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @F.%pattern_type.loc8_28 (%pattern_type.b2f) = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %a.param_patt: @F.%pattern_type.loc8_52 (%pattern_type.e66) = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: @F.%pattern_type.loc8_52 (%pattern_type.e66) = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %T.patt.loc8_7.1: %pattern_type.f1e = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_7.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.param_patt.loc8_28.1: @F.%pattern_type.loc8_28 (%pattern_type.b2f) = value_param_pattern [symbolic = %x.param_patt.loc8_28.2 (constants.%x.param_patt.321)] +// CHECK:STDOUT: %x.patt.loc8_28.1: @F.%pattern_type.loc8_28 (%pattern_type.b2f) = at_binding_pattern x, %x.param_patt.loc8_28.1 [symbolic = %x.patt.loc8_28.2 (constants.%x.patt.a80)] +// CHECK:STDOUT: %a.param_patt.loc8_52.1: @F.%pattern_type.loc8_52 (%pattern_type.e66) = value_param_pattern [symbolic = %a.param_patt.loc8_52.2 (constants.%a.param_patt.d7c)] +// CHECK:STDOUT: %a.patt.loc8_52.1: @F.%pattern_type.loc8_52 (%pattern_type.e66) = at_binding_pattern a, %a.param_patt.loc8_52.1 [symbolic = %a.patt.loc8_52.2 (constants.%a.patt.803)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8_17.1: type = splice_block %.loc8_17.3 [concrete = constants.%tuple.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -207,6 +216,7 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @HoldsType(%T.loc4_18.2: %tuple.type) { +// CHECK:STDOUT: %T.patt.loc4_18.2: %pattern_type.f1e = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_18.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_18.1: %tuple.type = symbolic_binding T, 0 [symbolic = %T.loc4_18.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -229,11 +239,16 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc8_7.2: %tuple.type) { +// CHECK:STDOUT: %T.patt.loc8_7.2: %pattern_type.f1e = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_7.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc8_7.1: %tuple.type = symbolic_binding T, 0 [symbolic = %T.loc8_7.1 (constants.%T)] // CHECK:STDOUT: %HoldsType.loc8_41.1: type = class_type @HoldsType, @HoldsType(%T.loc8_7.1) [symbolic = %HoldsType.loc8_41.1 (constants.%HoldsType.a83)] // CHECK:STDOUT: %pattern_type.loc8_28: type = pattern_type %HoldsType.loc8_41.1 [symbolic = %pattern_type.loc8_28 (constants.%pattern_type.b2f)] +// CHECK:STDOUT: %x.param_patt.loc8_28.2: @F.%pattern_type.loc8_28 (%pattern_type.b2f) = value_param_pattern [symbolic = %x.param_patt.loc8_28.2 (constants.%x.param_patt.321)] +// CHECK:STDOUT: %x.patt.loc8_28.2: @F.%pattern_type.loc8_28 (%pattern_type.b2f) = at_binding_pattern x, %x.param_patt.loc8_28.2 [symbolic = %x.patt.loc8_28.2 (constants.%x.patt.a80)] // CHECK:STDOUT: %tuple.elem0.loc8_55.1: type = tuple_access %T.loc8_7.1, element0 [symbolic = %tuple.elem0.loc8_55.1 (constants.%tuple.elem0)] // CHECK:STDOUT: %pattern_type.loc8_52: type = pattern_type %tuple.elem0.loc8_55.1 [symbolic = %pattern_type.loc8_52 (constants.%pattern_type.e66)] +// CHECK:STDOUT: %a.param_patt.loc8_52.2: @F.%pattern_type.loc8_52 (%pattern_type.e66) = value_param_pattern [symbolic = %a.param_patt.loc8_52.2 (constants.%a.param_patt.d7c)] +// CHECK:STDOUT: %a.patt.loc8_52.2: @F.%pattern_type.loc8_52 (%pattern_type.e66) = at_binding_pattern a, %a.param_patt.loc8_52.2 [symbolic = %a.patt.loc8_52.2 (constants.%a.patt.803)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc8_28: = require_complete_type %HoldsType.loc8_41.1 [symbolic = %require_complete.loc8_28 (constants.%require_complete.9de)] @@ -286,31 +301,43 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HoldsType(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_18.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_18.1 => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T) { +// CHECK:STDOUT: %T.patt.loc8_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_7.1 => constants.%T // CHECK:STDOUT: %HoldsType.loc8_41.1 => constants.%HoldsType.a83 // CHECK:STDOUT: %pattern_type.loc8_28 => constants.%pattern_type.b2f +// CHECK:STDOUT: %x.param_patt.loc8_28.2 => constants.%x.param_patt.321 +// CHECK:STDOUT: %x.patt.loc8_28.2 => constants.%x.patt.a80 // CHECK:STDOUT: %tuple.elem0.loc8_55.1 => constants.%tuple.elem0 // CHECK:STDOUT: %pattern_type.loc8_52 => constants.%pattern_type.e66 +// CHECK:STDOUT: %a.param_patt.loc8_52.2 => constants.%a.param_patt.d7c +// CHECK:STDOUT: %a.patt.loc8_52.2 => constants.%a.patt.803 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HoldsType(constants.%tuple.e45) { +// CHECK:STDOUT: %T.patt.loc4_18.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_18.1 => constants.%tuple.e45 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%tuple.e45) { +// CHECK:STDOUT: %T.patt.loc8_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_7.1 => constants.%tuple.e45 // CHECK:STDOUT: %HoldsType.loc8_41.1 => constants.%HoldsType.30f // CHECK:STDOUT: %pattern_type.loc8_28 => constants.%pattern_type.ff4 +// CHECK:STDOUT: %x.param_patt.loc8_28.2 => constants.%x.param_patt.995 +// CHECK:STDOUT: %x.patt.loc8_28.2 => constants.%x.patt.ea0 // CHECK:STDOUT: %tuple.elem0.loc8_55.1 => constants.%C // CHECK:STDOUT: %pattern_type.loc8_52 => constants.%pattern_type.98b +// CHECK:STDOUT: %a.param_patt.loc8_52.2 => constants.%a.param_patt.c88 +// CHECK:STDOUT: %a.patt.loc8_52.2 => constants.%a.patt.159 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc8_28 => constants.%complete_type @@ -324,6 +351,7 @@ fn G() { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %struct_type.t: type = struct_type {.t: type} [concrete] // CHECK:STDOUT: %pattern_type.7f2: type = pattern_type %struct_type.t [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.7f2 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: %struct_type.t = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %HoldsType.type: type = generic_class_type @HoldsType [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -332,8 +360,12 @@ fn G() { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.ce7: type = pattern_type %HoldsType.07e [symbolic] +// CHECK:STDOUT: %x.param_patt.ade: %pattern_type.ce7 = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.d2a: %pattern_type.ce7 = at_binding_pattern x, %x.param_patt.ade [symbolic] // CHECK:STDOUT: %.424: type = struct_access %T, element0 [symbolic] // CHECK:STDOUT: %pattern_type.92c: type = pattern_type %.424 [symbolic] +// CHECK:STDOUT: %a.param_patt.314: %pattern_type.92c = value_param_pattern [symbolic] +// CHECK:STDOUT: %a.patt.92f: %pattern_type.92c = at_binding_pattern a, %a.param_patt.314 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.d40: = require_complete_type %HoldsType.07e [symbolic] @@ -346,7 +378,11 @@ fn G() { // CHECK:STDOUT: %HoldsType.53c: type = class_type @HoldsType, @HoldsType(%struct) [concrete] // CHECK:STDOUT: %HoldsType.val: %HoldsType.53c = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.1fc: type = pattern_type %HoldsType.53c [concrete] +// CHECK:STDOUT: %x.param_patt.4a0: %pattern_type.1fc = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.5e6: %pattern_type.1fc = at_binding_pattern x, %x.param_patt.4a0 [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.param_patt.c88: %pattern_type.98b = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt.159: %pattern_type.98b = at_binding_pattern a, %a.param_patt.c88 [concrete] // CHECK:STDOUT: %F.specific_fn: = specific_function %F, @F(%struct) [concrete] // CHECK:STDOUT: %.344: ref %HoldsType.53c = temporary invalid, %HoldsType.val [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] @@ -379,7 +415,7 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %HoldsType.decl: %HoldsType.type = class_decl @HoldsType [concrete = constants.%HoldsType.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.7f2 = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc4_18.1: %pattern_type.7f2 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_18.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_30: type = splice_block %struct_type.t [concrete = constants.%struct_type.t] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -389,11 +425,11 @@ fn G() { // CHECK:STDOUT: %T.loc4_18.2: %struct_type.t = symbolic_binding T, 0 [symbolic = %T.loc4_18.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type.7f2 = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %x.param_patt: @F.%pattern_type.loc8_30 (%pattern_type.ce7) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @F.%pattern_type.loc8_30 (%pattern_type.ce7) = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %a.param_patt: @F.%pattern_type.loc8_54 (%pattern_type.92c) = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: @F.%pattern_type.loc8_54 (%pattern_type.92c) = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %T.patt.loc8_7.1: %pattern_type.7f2 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_7.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.param_patt.loc8_30.1: @F.%pattern_type.loc8_30 (%pattern_type.ce7) = value_param_pattern [symbolic = %x.param_patt.loc8_30.2 (constants.%x.param_patt.ade)] +// CHECK:STDOUT: %x.patt.loc8_30.1: @F.%pattern_type.loc8_30 (%pattern_type.ce7) = at_binding_pattern x, %x.param_patt.loc8_30.1 [symbolic = %x.patt.loc8_30.2 (constants.%x.patt.d2a)] +// CHECK:STDOUT: %a.param_patt.loc8_54.1: @F.%pattern_type.loc8_54 (%pattern_type.92c) = value_param_pattern [symbolic = %a.param_patt.loc8_54.2 (constants.%a.param_patt.314)] +// CHECK:STDOUT: %a.patt.loc8_54.1: @F.%pattern_type.loc8_54 (%pattern_type.92c) = at_binding_pattern a, %a.param_patt.loc8_54.1 [symbolic = %a.patt.loc8_54.2 (constants.%a.patt.92f)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8_19: type = splice_block %struct_type.t [concrete = constants.%struct_type.t] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -420,6 +456,7 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @HoldsType(%T.loc4_18.2: %struct_type.t) { +// CHECK:STDOUT: %T.patt.loc4_18.2: %pattern_type.7f2 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_18.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_18.1: %struct_type.t = symbolic_binding T, 0 [symbolic = %T.loc4_18.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -442,11 +479,16 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc8_7.2: %struct_type.t) { +// CHECK:STDOUT: %T.patt.loc8_7.2: %pattern_type.7f2 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_7.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc8_7.1: %struct_type.t = symbolic_binding T, 0 [symbolic = %T.loc8_7.1 (constants.%T)] // CHECK:STDOUT: %HoldsType.loc8_43.1: type = class_type @HoldsType, @HoldsType(%T.loc8_7.1) [symbolic = %HoldsType.loc8_43.1 (constants.%HoldsType.07e)] // CHECK:STDOUT: %pattern_type.loc8_30: type = pattern_type %HoldsType.loc8_43.1 [symbolic = %pattern_type.loc8_30 (constants.%pattern_type.ce7)] +// CHECK:STDOUT: %x.param_patt.loc8_30.2: @F.%pattern_type.loc8_30 (%pattern_type.ce7) = value_param_pattern [symbolic = %x.param_patt.loc8_30.2 (constants.%x.param_patt.ade)] +// CHECK:STDOUT: %x.patt.loc8_30.2: @F.%pattern_type.loc8_30 (%pattern_type.ce7) = at_binding_pattern x, %x.param_patt.loc8_30.2 [symbolic = %x.patt.loc8_30.2 (constants.%x.patt.d2a)] // CHECK:STDOUT: %.loc8_57.1: type = struct_access %T.loc8_7.1, element0 [symbolic = %.loc8_57.1 (constants.%.424)] // CHECK:STDOUT: %pattern_type.loc8_54: type = pattern_type %.loc8_57.1 [symbolic = %pattern_type.loc8_54 (constants.%pattern_type.92c)] +// CHECK:STDOUT: %a.param_patt.loc8_54.2: @F.%pattern_type.loc8_54 (%pattern_type.92c) = value_param_pattern [symbolic = %a.param_patt.loc8_54.2 (constants.%a.param_patt.314)] +// CHECK:STDOUT: %a.patt.loc8_54.2: @F.%pattern_type.loc8_54 (%pattern_type.92c) = at_binding_pattern a, %a.param_patt.loc8_54.2 [symbolic = %a.patt.loc8_54.2 (constants.%a.patt.92f)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc8_30: = require_complete_type %HoldsType.loc8_43.1 [symbolic = %require_complete.loc8_30 (constants.%require_complete.d40)] @@ -499,31 +541,43 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HoldsType(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_18.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_18.1 => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T) { +// CHECK:STDOUT: %T.patt.loc8_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_7.1 => constants.%T // CHECK:STDOUT: %HoldsType.loc8_43.1 => constants.%HoldsType.07e // CHECK:STDOUT: %pattern_type.loc8_30 => constants.%pattern_type.ce7 +// CHECK:STDOUT: %x.param_patt.loc8_30.2 => constants.%x.param_patt.ade +// CHECK:STDOUT: %x.patt.loc8_30.2 => constants.%x.patt.d2a // CHECK:STDOUT: %.loc8_57.1 => constants.%.424 // CHECK:STDOUT: %pattern_type.loc8_54 => constants.%pattern_type.92c +// CHECK:STDOUT: %a.param_patt.loc8_54.2 => constants.%a.param_patt.314 +// CHECK:STDOUT: %a.patt.loc8_54.2 => constants.%a.patt.92f // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HoldsType(constants.%struct) { +// CHECK:STDOUT: %T.patt.loc4_18.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_18.1 => constants.%struct // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%struct) { +// CHECK:STDOUT: %T.patt.loc8_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_7.1 => constants.%struct // CHECK:STDOUT: %HoldsType.loc8_43.1 => constants.%HoldsType.53c // CHECK:STDOUT: %pattern_type.loc8_30 => constants.%pattern_type.1fc +// CHECK:STDOUT: %x.param_patt.loc8_30.2 => constants.%x.param_patt.4a0 +// CHECK:STDOUT: %x.patt.loc8_30.2 => constants.%x.patt.5e6 // CHECK:STDOUT: %.loc8_57.1 => constants.%C // CHECK:STDOUT: %pattern_type.loc8_54 => constants.%pattern_type.98b +// CHECK:STDOUT: %a.param_patt.loc8_54.2 => constants.%a.param_patt.c88 +// CHECK:STDOUT: %a.patt.loc8_54.2 => constants.%a.patt.159 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc8_30 => constants.%complete_type @@ -540,6 +594,7 @@ fn G() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.f15: type = pattern_type %Class [concrete] +// CHECK:STDOUT: %T.patt.125: %pattern_type.f15 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.f25: %Class = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %HoldsType.type: type = generic_class_type @HoldsType [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -547,12 +602,15 @@ fn G() { // CHECK:STDOUT: %HoldsType.3500da.1: type = class_type @HoldsType, @HoldsType(%T.f25) [symbolic] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] -// CHECK:STDOUT: %pattern_type.e53268.1: type = pattern_type %HoldsType.3500da.1 [symbolic] -// CHECK:STDOUT: %.9ddfa9.1: ref type = class_element_access %T.f25, element0 [symbolic] +// CHECK:STDOUT: %pattern_type.e53: type = pattern_type %HoldsType.3500da.1 [symbolic] +// CHECK:STDOUT: %x.param_patt: %pattern_type.e53 = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt: %pattern_type.e53 = at_binding_pattern x, %x.param_patt [symbolic] +// CHECK:STDOUT: %.9dd: ref type = class_element_access %T.f25, element0 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.6f4d7d.1: = require_complete_type %HoldsType.3500da.1 [symbolic] // CHECK:STDOUT: %C: type = class_type @C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.f15 = symbolic_binding_pattern c, 0 [symbolic] // CHECK:STDOUT: %c: %Class = symbolic_binding c, 0 [symbolic] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] @@ -560,19 +618,6 @@ fn G() { // CHECK:STDOUT: %HoldsType.3500da.2: type = class_type @HoldsType, @HoldsType(%c) [symbolic] // CHECK:STDOUT: %require_complete.6f4d7d.2: = require_complete_type %HoldsType.3500da.2 [symbolic] // CHECK:STDOUT: %HoldsType.val.7f1: %HoldsType.3500da.2 = struct_value () [symbolic] -// CHECK:STDOUT: %pattern_type.e53268.2: type = pattern_type %HoldsType.3500da.2 [symbolic] -// CHECK:STDOUT: %.9ddfa9.2: ref type = class_element_access %c, element0 [symbolic] -// CHECK:STDOUT: %F.specific_fn.7ee: = specific_function %F, @F(%c) [symbolic] -// CHECK:STDOUT: %.e1a: ref %HoldsType.3500da.2 = temporary invalid, %HoldsType.val.7f1 [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %HoldsType.3500da.2, @Destroy [symbolic] -// CHECK:STDOUT: %Destroy.facet.833: %Destroy.type = facet_value %HoldsType.3500da.2, (%Destroy.lookup_impl_witness) [symbolic] -// CHECK:STDOUT: %Destroy.WithSelf.Op.type.646: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.833) [symbolic] -// CHECK:STDOUT: %.ff0: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.646, %Destroy.facet.833 [symbolic] -// CHECK:STDOUT: %impl.elem0.c88: %.ff0 = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic] -// CHECK:STDOUT: %bound_method.c32: = bound_method %.e1a, %impl.elem0.c88 [symbolic] -// CHECK:STDOUT: %specific_impl_fn.b17: = specific_impl_function %impl.elem0.c88, @Destroy.WithSelf.Op(%Destroy.facet.833) [symbolic] -// CHECK:STDOUT: %bound_method.8d3: = bound_method %.e1a, %specific_impl_fn.b17 [symbolic] // CHECK:STDOUT: %H.type: type = fn_type @H [concrete] // CHECK:STDOUT: %H: %H.type = struct_value () [concrete] // CHECK:STDOUT: %struct: %struct_type.t = struct_value (%C) [concrete] @@ -587,34 +632,25 @@ fn G() { // CHECK:STDOUT: %Class.val: %Class = struct_value (%C) [concrete] // CHECK:STDOUT: %.0de: ref %Class = temporary invalid, %Class.val [concrete] // CHECK:STDOUT: %G.specific_fn: = specific_function %G, @G(%Class.val) [concrete] -// CHECK:STDOUT: %Destroy.Op.type.1d8f74.4: type = fn_type @Destroy.Op.loc30_13.3 [concrete] -// CHECK:STDOUT: %Destroy.Op.1a2547.4: %Destroy.Op.type.1d8f74.4 = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.Op.bound.eb8: = bound_method %.0de, %Destroy.Op.1a2547.4 [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %Destroy.Op.type.1d8f74.3: type = fn_type @Destroy.Op.loc30_13.3 [concrete] +// CHECK:STDOUT: %Destroy.Op.1a2547.3: %Destroy.Op.type.1d8f74.3 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.Op.bound: = bound_method %.0de, %Destroy.Op.1a2547.3 [concrete] // CHECK:STDOUT: %HoldsType.af5: type = class_type @HoldsType, @HoldsType(%Class.val) [concrete] // CHECK:STDOUT: %HoldsType.val.8bc: %HoldsType.af5 = struct_value () [concrete] -// CHECK:STDOUT: %pattern_type.b17: type = pattern_type %HoldsType.af5 [concrete] -// CHECK:STDOUT: %F.specific_fn.463: = specific_function %F, @F(%Class.val) [concrete] -// CHECK:STDOUT: %.3f5: ref %HoldsType.af5 = temporary invalid, %HoldsType.val.8bc [concrete] -// CHECK:STDOUT: %Destroy.Op.type.1d8f74.5: type = fn_type @Destroy.Op.loc26_8.2 [concrete] -// CHECK:STDOUT: %Destroy.Op.1a2547.5: %Destroy.Op.type.1d8f74.5 = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.df9cc1.5: = custom_witness (%Destroy.Op.1a2547.5), @Destroy [concrete] -// CHECK:STDOUT: %Destroy.facet.b45: %Destroy.type = facet_value %HoldsType.af5, (%custom_witness.df9cc1.5) [concrete] -// CHECK:STDOUT: %Destroy.WithSelf.Op.type.06d: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.b45) [concrete] -// CHECK:STDOUT: %.db7: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.06d, %Destroy.facet.b45 [concrete] -// CHECK:STDOUT: %Destroy.Op.bound.d49: = bound_method %.3f5, %Destroy.Op.1a2547.5 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Copy = %Core.Copy +// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // 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.Copy: type = import_ref Core//prelude/parts/copy, Copy, loaded [concrete = constants.%Copy.type] // CHECK:STDOUT: %Core.import_ref.9c3: %type.as.Copy.impl.Op.type = import_ref Core//prelude/parts/copy, loc{{\d+_\d+}}, loaded [concrete = constants.%type.as.Copy.impl.Op] // CHECK:STDOUT: %Copy.impl_witness_table.4d6 = impl_witness_table (%Core.import_ref.9c3), @type.as.Copy.impl [concrete] +// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -630,7 +666,7 @@ fn G() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: %HoldsType.decl: %HoldsType.type = class_decl @HoldsType [concrete = constants.%HoldsType.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.f15 = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc8_18.1: %pattern_type.f15 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_18.2 (constants.%T.patt.125)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8: type = splice_block %Class.ref [concrete = constants.%Class] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -639,11 +675,11 @@ fn G() { // CHECK:STDOUT: %T.loc8_18.2: %Class = symbolic_binding T, 0 [symbolic = %T.loc8_18.1 (constants.%T.f25)] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type.f15 = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %x.param_patt: @F.%pattern_type (%pattern_type.e53268.1) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @F.%pattern_type (%pattern_type.e53268.1) = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %a.param_patt: = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %T.patt.loc21_7.1: %pattern_type.f15 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_7.2 (constants.%T.patt.125)] +// CHECK:STDOUT: %x.param_patt.loc21_25.1: @F.%pattern_type (%pattern_type.e53) = value_param_pattern [symbolic = %x.param_patt.loc21_25.2 (constants.%x.param_patt)] +// CHECK:STDOUT: %x.patt.loc21_25.1: @F.%pattern_type (%pattern_type.e53) = at_binding_pattern x, %x.param_patt.loc21_25.1 [symbolic = %x.patt.loc21_25.2 (constants.%x.patt)] +// CHECK:STDOUT: %a.param_patt: = value_param_pattern [concrete = ] +// CHECK:STDOUT: %a.patt: = at_binding_pattern a, %a.param_patt [concrete = ] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc21_10: type = splice_block %Class.ref [concrete = constants.%Class] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -661,14 +697,14 @@ fn G() { // CHECK:STDOUT: %.1: = splice_block [concrete = ] { // CHECK:STDOUT: %T.ref.loc21_51: %Class = name_ref T, %T.loc21_7.2 [symbolic = %T.loc21_7.1 (constants.%T.f25)] // CHECK:STDOUT: %t.ref: %Class.elem = name_ref t, @Class.%.loc5 [concrete = @Class.%.loc5] -// CHECK:STDOUT: %.loc21_52.2: ref type = class_element_access %T.ref.loc21_51, element0 [symbolic = %.loc21_52.1 (constants.%.9ddfa9.1)] +// CHECK:STDOUT: %.loc21_52.2: ref type = class_element_access %T.ref.loc21_51, element0 [symbolic = %.loc21_52.1 (constants.%.9dd)] // CHECK:STDOUT: %.loc21_52.3: type = acquire_value %.loc21_52.2 // CHECK:STDOUT: } // CHECK:STDOUT: %a: = value_binding a, [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %c.patt: %pattern_type.f15 = symbolic_binding_pattern c, 0 [concrete] +// CHECK:STDOUT: %c.patt.loc25_7.1: %pattern_type.f15 = symbolic_binding_pattern c, 0 [symbolic = %c.patt.loc25_7.2 (constants.%c.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc25: type = splice_block %Class.ref [concrete = constants.%Class] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -690,6 +726,7 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @HoldsType(%T.loc8_18.2: %Class) { +// CHECK:STDOUT: %T.patt.loc8_18.2: %pattern_type.f15 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_18.2 (constants.%T.patt.125)] // CHECK:STDOUT: %T.loc8_18.1: %Class = symbolic_binding T, 0 [symbolic = %T.loc8_18.1 (constants.%T.f25)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -712,10 +749,13 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc21_7.2: %Class) { +// CHECK:STDOUT: %T.patt.loc21_7.2: %pattern_type.f15 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_7.2 (constants.%T.patt.125)] // CHECK:STDOUT: %T.loc21_7.1: %Class = symbolic_binding T, 0 [symbolic = %T.loc21_7.1 (constants.%T.f25)] // CHECK:STDOUT: %HoldsType.loc21_38.1: type = class_type @HoldsType, @HoldsType(%T.loc21_7.1) [symbolic = %HoldsType.loc21_38.1 (constants.%HoldsType.3500da.1)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %HoldsType.loc21_38.1 [symbolic = %pattern_type (constants.%pattern_type.e53268.1)] -// CHECK:STDOUT: %.loc21_52.1: ref type = class_element_access %T.loc21_7.1, element0 [symbolic = %.loc21_52.1 (constants.%.9ddfa9.1)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %HoldsType.loc21_38.1 [symbolic = %pattern_type (constants.%pattern_type.e53)] +// CHECK:STDOUT: %x.param_patt.loc21_25.2: @F.%pattern_type (%pattern_type.e53) = value_param_pattern [symbolic = %x.param_patt.loc21_25.2 (constants.%x.param_patt)] +// CHECK:STDOUT: %x.patt.loc21_25.2: @F.%pattern_type (%pattern_type.e53) = at_binding_pattern x, %x.param_patt.loc21_25.2 [symbolic = %x.patt.loc21_25.2 (constants.%x.patt)] +// CHECK:STDOUT: %.loc21_52.1: ref type = class_element_access %T.loc21_7.1, element0 [symbolic = %.loc21_52.1 (constants.%.9dd)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %HoldsType.loc21_38.1 [symbolic = %require_complete (constants.%require_complete.6f4d7d.1)] @@ -727,22 +767,13 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @G(%c.loc25_7.2: %Class) { +// CHECK:STDOUT: %c.patt.loc25_7.2: %pattern_type.f15 = symbolic_binding_pattern c, 0 [symbolic = %c.patt.loc25_7.2 (constants.%c.patt)] // CHECK:STDOUT: %c.loc25_7.1: %Class = symbolic_binding c, 0 [symbolic = %c.loc25_7.1 (constants.%c)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %HoldsType.loc26_22.2: type = class_type @HoldsType, @HoldsType(%c.loc25_7.1) [symbolic = %HoldsType.loc26_22.2 (constants.%HoldsType.3500da.2)] // CHECK:STDOUT: %require_complete: = require_complete_type %HoldsType.loc26_22.2 [symbolic = %require_complete (constants.%require_complete.6f4d7d.2)] // CHECK:STDOUT: %HoldsType.val: @G.%HoldsType.loc26_22.2 (%HoldsType.3500da.2) = struct_value () [symbolic = %HoldsType.val (constants.%HoldsType.val.7f1)] -// CHECK:STDOUT: %F.specific_fn.loc26_3.2: = specific_function constants.%F, @F(%c.loc25_7.1) [symbolic = %F.specific_fn.loc26_3.2 (constants.%F.specific_fn.7ee)] -// CHECK:STDOUT: %.loc26_8.5: ref @G.%HoldsType.loc26_22.2 (%HoldsType.3500da.2) = temporary invalid, %HoldsType.val [symbolic = %.loc26_8.5 (constants.%.e1a)] -// CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %HoldsType.loc26_22.2, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness)] -// CHECK:STDOUT: %Destroy.facet.loc26_8.2: %Destroy.type = facet_value %HoldsType.loc26_22.2, (%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.loc26_8.2 (constants.%Destroy.facet.833)] -// CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.loc26_8.2) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.646)] -// CHECK:STDOUT: %.loc26_8.6: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Destroy.facet.loc26_8.2 [symbolic = %.loc26_8.6 (constants.%.ff0)] -// CHECK:STDOUT: %impl.elem0.loc26_8.2: @G.%.loc26_8.6 (%.ff0) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc26_8.2 (constants.%impl.elem0.c88)] -// CHECK:STDOUT: %bound_method.loc26_8.3: = bound_method %.loc26_8.5, %impl.elem0.loc26_8.2 [symbolic = %bound_method.loc26_8.3 (constants.%bound_method.c32)] -// CHECK:STDOUT: %specific_impl_fn.loc26_8.2: = specific_impl_function %impl.elem0.loc26_8.2, @Destroy.WithSelf.Op(%Destroy.facet.loc26_8.2) [symbolic = %specific_impl_fn.loc26_8.2 (constants.%specific_impl_fn.b17)] -// CHECK:STDOUT: %bound_method.loc26_8.4: = bound_method %.loc26_8.5, %specific_impl_fn.loc26_8.2 [symbolic = %bound_method.loc26_8.4 (constants.%bound_method.8d3)] // CHECK:STDOUT: // CHECK:STDOUT: fn() { // CHECK:STDOUT: !entry: @@ -753,25 +784,12 @@ fn G() { // CHECK:STDOUT: %HoldsType.loc26_22.1: type = class_type @HoldsType, @HoldsType(constants.%c) [symbolic = %HoldsType.loc26_22.2 (constants.%HoldsType.3500da.2)] // CHECK:STDOUT: %.loc26_6.2: ref @G.%HoldsType.loc26_22.2 (%HoldsType.3500da.2) = temporary_storage // CHECK:STDOUT: %.loc26_6.3: init @G.%HoldsType.loc26_22.2 (%HoldsType.3500da.2) to %.loc26_6.2 = class_init () [symbolic = %HoldsType.val (constants.%HoldsType.val.7f1)] -// CHECK:STDOUT: %.loc26_8.1: init @G.%HoldsType.loc26_22.2 (%HoldsType.3500da.2) = converted %.loc26_6.1, %.loc26_6.3 [symbolic = %HoldsType.val (constants.%HoldsType.val.7f1)] +// CHECK:STDOUT: %.loc26_8: init @G.%HoldsType.loc26_22.2 (%HoldsType.3500da.2) = converted %.loc26_6.1, %.loc26_6.3 [symbolic = %HoldsType.val (constants.%HoldsType.val.7f1)] // CHECK:STDOUT: %.loc26_26: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] -// CHECK:STDOUT: %F.specific_fn.loc26_3.1: = specific_function %F.ref, @F(constants.%c) [symbolic = %F.specific_fn.loc26_3.2 (constants.%F.specific_fn.7ee)] -// CHECK:STDOUT: %.loc26_8.2: ref @G.%HoldsType.loc26_22.2 (%HoldsType.3500da.2) = temporary %.loc26_6.2, %.loc26_8.1 [symbolic = %.loc26_8.5 (constants.%.e1a)] -// CHECK:STDOUT: %.loc26_8.3: @G.%HoldsType.loc26_22.2 (%HoldsType.3500da.2) = acquire_value %.loc26_8.2 [symbolic = %HoldsType.val (constants.%HoldsType.val.7f1)] -// CHECK:STDOUT: %F.call: init %empty_tuple.type = call %F.specific_fn.loc26_3.1(%.loc26_8.3, ) -// CHECK:STDOUT: %impl.elem0.loc26_8.1: @G.%.loc26_8.6 (%.ff0) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc26_8.2 (constants.%impl.elem0.c88)] -// CHECK:STDOUT: %bound_method.loc26_8.1: = bound_method %.loc26_8.2, %impl.elem0.loc26_8.1 [symbolic = %bound_method.loc26_8.3 (constants.%bound_method.c32)] -// CHECK:STDOUT: %Destroy.facet.loc26_8.1: %Destroy.type = facet_value constants.%HoldsType.3500da.2, (constants.%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.loc26_8.2 (constants.%Destroy.facet.833)] -// CHECK:STDOUT: %.loc26_8.4: %Destroy.type = converted constants.%HoldsType.3500da.2, %Destroy.facet.loc26_8.1 [symbolic = %Destroy.facet.loc26_8.2 (constants.%Destroy.facet.833)] -// CHECK:STDOUT: %specific_impl_fn.loc26_8.1: = specific_impl_function %impl.elem0.loc26_8.1, @Destroy.WithSelf.Op(constants.%Destroy.facet.833) [symbolic = %specific_impl_fn.loc26_8.2 (constants.%specific_impl_fn.b17)] -// CHECK:STDOUT: %bound_method.loc26_8.2: = bound_method %.loc26_8.2, %specific_impl_fn.loc26_8.1 [symbolic = %bound_method.loc26_8.4 (constants.%bound_method.8d3)] -// CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc26_8.2(%.loc26_8.2) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc26_8.1(%self.param: ref %empty_struct_type) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @H() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %G.ref: %G.type = name_ref G, file.%G.decl [concrete = constants.%G] @@ -789,7 +807,7 @@ fn G() { // CHECK:STDOUT: %.loc30_13.3: %Class = acquire_value %.loc30_13.2 [concrete = constants.%Class.val] // CHECK:STDOUT: %G.specific_fn: = specific_function %G.ref, @G(constants.%Class.val) [concrete = constants.%G.specific_fn] // CHECK:STDOUT: %G.call: init %empty_tuple.type = call %G.specific_fn() -// CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call constants.%Destroy.Op.bound.eb8(constants.%.0de) +// CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call constants.%Destroy.Op.bound(constants.%.0de) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -805,79 +823,52 @@ fn G() { // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc26_8.2(%self.param: ref %HoldsType.af5) { -// CHECK:STDOUT: !entry: -// CHECK:STDOUT: return -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @HoldsType(constants.%T.f25) { +// CHECK:STDOUT: %T.patt.loc8_18.2 => constants.%T.patt.125 // CHECK:STDOUT: %T.loc8_18.1 => constants.%T.f25 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T.f25) { +// CHECK:STDOUT: %T.patt.loc21_7.2 => constants.%T.patt.125 // CHECK:STDOUT: %T.loc21_7.1 => constants.%T.f25 // CHECK:STDOUT: %HoldsType.loc21_38.1 => constants.%HoldsType.3500da.1 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.e53268.1 -// CHECK:STDOUT: %.loc21_52.1 => constants.%.9ddfa9.1 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.e53 +// CHECK:STDOUT: %x.param_patt.loc21_25.2 => constants.%x.param_patt +// CHECK:STDOUT: %x.patt.loc21_25.2 => constants.%x.patt +// CHECK:STDOUT: %.loc21_52.1 => constants.%.9dd // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%c) { +// CHECK:STDOUT: %c.patt.loc25_7.2 => constants.%c.patt // CHECK:STDOUT: %c.loc25_7.1 => constants.%c // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HoldsType(constants.%c) { +// CHECK:STDOUT: %T.patt.loc8_18.2 => constants.%T.patt.125 // CHECK:STDOUT: %T.loc8_18.1 => constants.%c // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @F(constants.%c) { -// CHECK:STDOUT: %T.loc21_7.1 => constants.%c -// CHECK:STDOUT: %HoldsType.loc21_38.1 => constants.%HoldsType.3500da.2 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.e53268.2 -// CHECK:STDOUT: %.loc21_52.1 => constants.%.9ddfa9.2 -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %require_complete => constants.%require_complete.6f4d7d.2 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%Class.val) { +// CHECK:STDOUT: %c.patt.loc25_7.2 => constants.%c.patt // CHECK:STDOUT: %c.loc25_7.1 => constants.%Class.val // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %HoldsType.loc26_22.2 => constants.%HoldsType.af5 // CHECK:STDOUT: %require_complete => constants.%complete_type.357 // CHECK:STDOUT: %HoldsType.val => constants.%HoldsType.val.8bc -// CHECK:STDOUT: %F.specific_fn.loc26_3.2 => constants.%F.specific_fn.463 -// CHECK:STDOUT: %.loc26_8.5 => constants.%.3f5 -// CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.df9cc1.5 -// CHECK:STDOUT: %Destroy.facet.loc26_8.2 => constants.%Destroy.facet.b45 -// CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.06d -// CHECK:STDOUT: %.loc26_8.6 => constants.%.db7 -// CHECK:STDOUT: %impl.elem0.loc26_8.2 => constants.%Destroy.Op.1a2547.5 -// CHECK:STDOUT: %bound_method.loc26_8.3 => constants.%Destroy.Op.bound.d49 -// CHECK:STDOUT: %specific_impl_fn.loc26_8.2 => constants.%Destroy.Op.1a2547.5 -// CHECK:STDOUT: %bound_method.loc26_8.4 => constants.%Destroy.Op.bound.d49 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HoldsType(constants.%Class.val) { +// CHECK:STDOUT: %T.patt.loc8_18.2 => constants.%T.patt.125 // CHECK:STDOUT: %T.loc8_18.1 => constants.%Class.val // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @F(constants.%Class.val) { -// CHECK:STDOUT: %T.loc21_7.1 => constants.%Class.val -// CHECK:STDOUT: %HoldsType.loc21_38.1 => constants.%HoldsType.af5 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.b17 -// CHECK:STDOUT: %.loc21_52.1 => constants.%C -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %require_complete => constants.%complete_type.357 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_todo_array_index.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -886,6 +877,7 @@ fn G() { // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_1, type [concrete] // CHECK:STDOUT: %pattern_type.dcb: type = pattern_type %array_type [concrete] +// CHECK:STDOUT: %T.patt.4c7: %pattern_type.dcb = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.9b7: %array_type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %HoldsType.type: type = generic_class_type @HoldsType [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -894,6 +886,8 @@ fn G() { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.d35: type = pattern_type %HoldsType.881 [symbolic] +// CHECK:STDOUT: %x.param_patt: %pattern_type.d35 = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt: %pattern_type.d35 = at_binding_pattern x, %x.param_patt [symbolic] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %Int.type: type = generic_class_type @Int [concrete] @@ -936,16 +930,10 @@ fn G() { // CHECK:STDOUT: %.1c6: ref %array_type = temporary invalid, %array [concrete] // CHECK:STDOUT: %HoldsType.f11: type = class_type @HoldsType, @HoldsType(%array) [concrete] // CHECK:STDOUT: %HoldsType.val: %HoldsType.f11 = struct_value () [concrete] -// CHECK:STDOUT: %pattern_type.096: type = pattern_type %HoldsType.f11 [concrete] -// CHECK:STDOUT: %F.specific_fn: = specific_function %F, @F(%array) [concrete] -// CHECK:STDOUT: %.f62: ref %HoldsType.f11 = temporary invalid, %HoldsType.val [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Destroy.Op.type.1d8f74.2: type = fn_type @Destroy.Op.loc17_8.2 [concrete] +// CHECK:STDOUT: %Destroy.Op.type.1d8f74.2: type = fn_type @Destroy.Op.loc17_27.2 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.2: %Destroy.Op.type.1d8f74.2 = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.Op.bound.14e: = bound_method %.f62, %Destroy.Op.1a2547.2 [concrete] -// CHECK:STDOUT: %Destroy.Op.type.1d8f74.4: type = fn_type @Destroy.Op.loc17_27.2 [concrete] -// CHECK:STDOUT: %Destroy.Op.1a2547.4: %Destroy.Op.type.1d8f74.4 = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.Op.bound.cbc: = bound_method %.1c6, %Destroy.Op.1a2547.4 [concrete] +// CHECK:STDOUT: %Destroy.Op.bound: = bound_method %.1c6, %Destroy.Op.1a2547.2 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -977,7 +965,7 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %HoldsType.decl: %HoldsType.type = class_decl @HoldsType [concrete = constants.%HoldsType.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.dcb = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc4_18.1: %pattern_type.dcb = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_18.2 (constants.%T.patt.4c7)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_34: type = splice_block %array_type [concrete = constants.%array_type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -988,11 +976,11 @@ fn G() { // CHECK:STDOUT: %T.loc4_18.2: %array_type = symbolic_binding T, 0 [symbolic = %T.loc4_18.1 (constants.%T.9b7)] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type.dcb = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %x.param_patt: @F.%pattern_type (%pattern_type.d35) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @F.%pattern_type (%pattern_type.d35) = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %a.param_patt: = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %T.patt.loc12_7.1: %pattern_type.dcb = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_7.2 (constants.%T.patt.4c7)] +// CHECK:STDOUT: %x.param_patt.loc12_34.1: @F.%pattern_type (%pattern_type.d35) = value_param_pattern [symbolic = %x.param_patt.loc12_34.2 (constants.%x.param_patt)] +// CHECK:STDOUT: %x.patt.loc12_34.1: @F.%pattern_type (%pattern_type.d35) = at_binding_pattern x, %x.param_patt.loc12_34.1 [symbolic = %x.patt.loc12_34.2 (constants.%x.patt)] +// CHECK:STDOUT: %a.param_patt: = value_param_pattern [concrete = ] +// CHECK:STDOUT: %a.patt: = at_binding_pattern a, %a.param_patt [concrete = ] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc12_23: type = splice_block %array_type [concrete = constants.%array_type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1030,6 +1018,7 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @HoldsType(%T.loc4_18.2: %array_type) { +// CHECK:STDOUT: %T.patt.loc4_18.2: %pattern_type.dcb = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_18.2 (constants.%T.patt.4c7)] // CHECK:STDOUT: %T.loc4_18.1: %array_type = symbolic_binding T, 0 [symbolic = %T.loc4_18.1 (constants.%T.9b7)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1052,9 +1041,12 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc12_7.2: %array_type) { +// CHECK:STDOUT: %T.patt.loc12_7.2: %pattern_type.dcb = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_7.2 (constants.%T.patt.4c7)] // CHECK:STDOUT: %T.loc12_7.1: %array_type = symbolic_binding T, 0 [symbolic = %T.loc12_7.1 (constants.%T.9b7)] // CHECK:STDOUT: %HoldsType.loc12_47.1: type = class_type @HoldsType, @HoldsType(%T.loc12_7.1) [symbolic = %HoldsType.loc12_47.1 (constants.%HoldsType.881)] // CHECK:STDOUT: %pattern_type: type = pattern_type %HoldsType.loc12_47.1 [symbolic = %pattern_type (constants.%pattern_type.d35)] +// CHECK:STDOUT: %x.param_patt.loc12_34.2: @F.%pattern_type (%pattern_type.d35) = value_param_pattern [symbolic = %x.param_patt.loc12_34.2 (constants.%x.param_patt)] +// CHECK:STDOUT: %x.patt.loc12_34.2: @F.%pattern_type (%pattern_type.d35) = at_binding_pattern x, %x.param_patt.loc12_34.2 [symbolic = %x.patt.loc12_34.2 (constants.%x.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %HoldsType.loc12_47.1 [symbolic = %require_complete (constants.%require_complete.80d)] @@ -1089,21 +1081,9 @@ fn G() { // CHECK:STDOUT: %HoldsType: type = class_type @HoldsType, @HoldsType(constants.%array) [concrete = constants.%HoldsType.f11] // CHECK:STDOUT: %.loc17_6.2: ref %HoldsType.f11 = temporary_storage // CHECK:STDOUT: %.loc17_6.3: init %HoldsType.f11 to %.loc17_6.2 = class_init () [concrete = constants.%HoldsType.val] -// CHECK:STDOUT: %.loc17_8.1: init %HoldsType.f11 = converted %.loc17_6.1, %.loc17_6.3 [concrete = constants.%HoldsType.val] +// CHECK:STDOUT: %.loc17_8: init %HoldsType.f11 = converted %.loc17_6.1, %.loc17_6.3 [concrete = constants.%HoldsType.val] // CHECK:STDOUT: %.loc17_48: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] -// CHECK:STDOUT: %F.specific_fn: = specific_function %F.ref, @F(constants.%array) [concrete = constants.%F.specific_fn] -// CHECK:STDOUT: %.loc17_8.2: ref %HoldsType.f11 = temporary %.loc17_6.2, %.loc17_8.1 [concrete = constants.%.f62] -// CHECK:STDOUT: %.loc17_8.3: %HoldsType.f11 = acquire_value %.loc17_8.2 [concrete = constants.%HoldsType.val] -// CHECK:STDOUT: %F.call: init %empty_tuple.type = call %F.specific_fn(%.loc17_8.3, ) -// CHECK:STDOUT: %Destroy.Op.call.loc17_8: init %empty_tuple.type = call constants.%Destroy.Op.bound.14e(constants.%.f62) -// CHECK:STDOUT: %Destroy.Op.call.loc17_27: init %empty_tuple.type = call constants.%Destroy.Op.bound.cbc(constants.%.1c6) -// CHECK:STDOUT: return -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc17_8.1(%self.param: ref %empty_struct_type) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc17_8.2(%self.param: ref %HoldsType.f11) { -// CHECK:STDOUT: !entry: +// CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call constants.%Destroy.Op.bound(constants.%.1c6) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1115,29 +1095,25 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HoldsType(constants.%T.9b7) { +// CHECK:STDOUT: %T.patt.loc4_18.2 => constants.%T.patt.4c7 // CHECK:STDOUT: %T.loc4_18.1 => constants.%T.9b7 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T.9b7) { +// CHECK:STDOUT: %T.patt.loc12_7.2 => constants.%T.patt.4c7 // CHECK:STDOUT: %T.loc12_7.1 => constants.%T.9b7 // CHECK:STDOUT: %HoldsType.loc12_47.1 => constants.%HoldsType.881 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.d35 +// CHECK:STDOUT: %x.param_patt.loc12_34.2 => constants.%x.param_patt +// CHECK:STDOUT: %x.patt.loc12_34.2 => constants.%x.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HoldsType(constants.%array) { +// CHECK:STDOUT: %T.patt.loc4_18.2 => constants.%T.patt.4c7 // CHECK:STDOUT: %T.loc4_18.1 => constants.%array // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @F(constants.%array) { -// CHECK:STDOUT: %T.loc12_7.1 => constants.%array -// CHECK:STDOUT: %HoldsType.loc12_47.1 => constants.%HoldsType.f11 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.096 -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %require_complete => constants.%complete_type.357 -// CHECK:STDOUT: } -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/eval/aggregates.carbon b/toolchain/check/testdata/eval/aggregates.carbon index 40cce62d2113..8445cfeb0bfa 100644 --- a/toolchain/check/testdata/eval/aggregates.carbon +++ b/toolchain/check/testdata/eval/aggregates.carbon @@ -64,6 +64,8 @@ fn G(N:! i32) { // CHECK:STDOUT: %tuple.b59: %tuple.type.24b = tuple_value (%i32, %i32) [concrete] // CHECK:STDOUT: %tuple.type.e55: type = tuple_type (%i32, %i32) [concrete] // CHECK:STDOUT: %pattern_type.394: type = pattern_type %tuple.type.e55 [concrete] +// CHECK:STDOUT: %tuple_copy.patt: %pattern_type.394 = ref_binding_pattern tuple_copy [concrete] +// CHECK:STDOUT: %tuple_copy.var_patt: %pattern_type.394 = var_pattern %tuple_copy.patt [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %tuple.type.f94: type = tuple_type (Core.IntLiteral, Core.IntLiteral) [concrete] @@ -104,6 +106,8 @@ fn G(N:! i32) { // CHECK:STDOUT: %bound_method.03a: = bound_method %int_2.295, %Int.as.Copy.impl.Op.specific_fn [concrete] // CHECK:STDOUT: %struct_type.a.b.c: type = struct_type {.a: %i32, .b: %i32, .c: %i32} [concrete] // CHECK:STDOUT: %pattern_type.9c3: type = pattern_type %struct_type.a.b.c [concrete] +// CHECK:STDOUT: %struct_copy.patt: %pattern_type.9c3 = ref_binding_pattern struct_copy [concrete] +// CHECK:STDOUT: %struct_copy.var_patt: %pattern_type.9c3 = var_pattern %struct_copy.patt [concrete] // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %struct_type.c.b.a: type = struct_type {.c: Core.IntLiteral, .b: Core.IntLiteral, .a: Core.IntLiteral} [concrete] // CHECK:STDOUT: %struct.c75: %struct_type.c.b.a = struct_value (%int_3.1ba, %int_2.ecc, %int_1.5b8) [concrete] @@ -120,6 +124,8 @@ fn G(N:! i32) { // CHECK:STDOUT: %struct.11a: %struct_type.a.b.c = struct_value (%int_1.0c6, %int_2.295, %int_3.410) [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_1.5b8, %i32 [concrete] // CHECK:STDOUT: %pattern_type.97e: type = pattern_type %array_type [concrete] +// CHECK:STDOUT: %tuple_index.patt: %pattern_type.97e = ref_binding_pattern tuple_index [concrete] +// CHECK:STDOUT: %tuple_index.var_patt: %pattern_type.97e = var_pattern %tuple_index.patt [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %tuple.type.985: type = tuple_type (Core.IntLiteral) [concrete] // CHECK:STDOUT: %tuple.4f2: %tuple.type.985 = tuple_value (%int_0.5c6) [concrete] @@ -132,6 +138,8 @@ fn G(N:! i32) { // CHECK:STDOUT: %bound_method.6e0: = bound_method %int_0.5c6, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_0.3c0: %i32 = int_value 0 [concrete] // CHECK:STDOUT: %array: %array_type = tuple_value (%int_0.3c0) [concrete] +// CHECK:STDOUT: %struct_access.patt: %pattern_type.97e = ref_binding_pattern struct_access [concrete] +// CHECK:STDOUT: %struct_access.var_patt: %pattern_type.97e = var_pattern %struct_access.patt [concrete] // CHECK:STDOUT: %struct_type.a.b: type = struct_type {.a: Core.IntLiteral, .b: Core.IntLiteral} [concrete] // CHECK:STDOUT: %struct.a81: %struct_type.a.b = struct_value (%int_3.1ba, %int_1.5b8) [concrete] // CHECK:STDOUT: } @@ -145,8 +153,8 @@ fn G(N:! i32) { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %tuple_copy.patt: %pattern_type.394 = ref_binding_pattern tuple_copy [concrete] -// CHECK:STDOUT: %tuple_copy.var_patt: %pattern_type.394 = var_pattern %tuple_copy.patt [concrete] +// CHECK:STDOUT: %tuple_copy.patt: %pattern_type.394 = ref_binding_pattern tuple_copy [concrete = constants.%tuple_copy.patt] +// CHECK:STDOUT: %tuple_copy.var_patt: %pattern_type.394 = var_pattern %tuple_copy.patt [concrete = constants.%tuple_copy.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %tuple_copy.var: ref %tuple.type.e55 = var %tuple_copy.var_patt [concrete] // CHECK:STDOUT: %.loc4_26.1: type = splice_block %.loc4_26.3 [concrete = constants.%tuple.type.e55] { @@ -157,8 +165,8 @@ fn G(N:! i32) { // CHECK:STDOUT: } // CHECK:STDOUT: %tuple_copy: ref %tuple.type.e55 = ref_binding tuple_copy, %tuple_copy.var [concrete = %tuple_copy.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %struct_copy.patt: %pattern_type.9c3 = ref_binding_pattern struct_copy [concrete] -// CHECK:STDOUT: %struct_copy.var_patt: %pattern_type.9c3 = var_pattern %struct_copy.patt [concrete] +// CHECK:STDOUT: %struct_copy.patt: %pattern_type.9c3 = ref_binding_pattern struct_copy [concrete = constants.%struct_copy.patt] +// CHECK:STDOUT: %struct_copy.var_patt: %pattern_type.9c3 = var_pattern %struct_copy.patt [concrete = constants.%struct_copy.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %struct_copy.var: ref %struct_type.a.b.c = var %struct_copy.var_patt [concrete] // CHECK:STDOUT: %.loc6: type = splice_block %struct_type.a.b.c [concrete = constants.%struct_type.a.b.c] { @@ -169,8 +177,8 @@ fn G(N:! i32) { // CHECK:STDOUT: } // CHECK:STDOUT: %struct_copy: ref %struct_type.a.b.c = ref_binding struct_copy, %struct_copy.var [concrete = %struct_copy.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %tuple_index.patt: %pattern_type.97e = ref_binding_pattern tuple_index [concrete] -// CHECK:STDOUT: %tuple_index.var_patt: %pattern_type.97e = var_pattern %tuple_index.patt [concrete] +// CHECK:STDOUT: %tuple_index.patt: %pattern_type.97e = ref_binding_pattern tuple_index [concrete = constants.%tuple_index.patt] +// CHECK:STDOUT: %tuple_index.var_patt: %pattern_type.97e = var_pattern %tuple_index.patt [concrete = constants.%tuple_index.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %tuple_index.var: ref %array_type = var %tuple_index.var_patt [concrete] // CHECK:STDOUT: %.loc8: type = splice_block %array_type.loc8 [concrete = constants.%array_type] { @@ -180,8 +188,8 @@ fn G(N:! i32) { // CHECK:STDOUT: } // CHECK:STDOUT: %tuple_index: ref %array_type = ref_binding tuple_index, %tuple_index.var [concrete = %tuple_index.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %struct_access.patt: %pattern_type.97e = ref_binding_pattern struct_access [concrete] -// CHECK:STDOUT: %struct_access.var_patt: %pattern_type.97e = var_pattern %struct_access.patt [concrete] +// CHECK:STDOUT: %struct_access.patt: %pattern_type.97e = ref_binding_pattern struct_access [concrete = constants.%struct_access.patt] +// CHECK:STDOUT: %struct_access.var_patt: %pattern_type.97e = var_pattern %struct_access.patt [concrete = constants.%struct_access.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %struct_access.var: ref %array_type = var %struct_access.var_patt [concrete] // CHECK:STDOUT: %.loc10: type = splice_block %array_type.loc10 [concrete = constants.%array_type] { @@ -354,6 +362,8 @@ fn G(N:! i32) { // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %array_type.d27: type = array_type %int_1.5b8, %i32 [concrete] // CHECK:STDOUT: %pattern_type.97e: type = pattern_type %array_type.d27 [concrete] +// CHECK:STDOUT: %array_index.patt: %pattern_type.97e = ref_binding_pattern array_index [concrete] +// CHECK:STDOUT: %array_index.var_patt: %pattern_type.97e = var_pattern %array_index.patt [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %tuple.type.985: type = tuple_type (Core.IntLiteral) [concrete] // CHECK:STDOUT: %tuple.4f2: %tuple.type.985 = tuple_value (%int_0) [concrete] @@ -403,8 +413,8 @@ fn G(N:! i32) { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %array_index.patt: %pattern_type.97e = ref_binding_pattern array_index [concrete] -// CHECK:STDOUT: %array_index.var_patt: %pattern_type.97e = var_pattern %array_index.patt [concrete] +// CHECK:STDOUT: %array_index.patt: %pattern_type.97e = ref_binding_pattern array_index [concrete = constants.%array_index.patt] +// CHECK:STDOUT: %array_index.var_patt: %pattern_type.97e = var_pattern %array_index.patt [concrete = constants.%array_index.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %array_index.var: ref %array_type.d27 = var %array_index.var_patt [concrete] // CHECK:STDOUT: %.loc9: type = splice_block %array_type [concrete = constants.%array_type.d27] { @@ -486,6 +496,8 @@ fn G(N:! i32) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %pattern_type.429: type = pattern_type %Destroy.type [concrete] +// CHECK:STDOUT: %T.patt.351: %pattern_type.429 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.0e7: %Destroy.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %T.as_type.700: type = facet_access_type %T.0e7 [symbolic] @@ -496,6 +508,8 @@ fn G(N:! i32) { // CHECK:STDOUT: %tuple.type.cd5: type = tuple_type (%ptr.b37, %const) [symbolic] // CHECK:STDOUT: %require_complete.3b6: = require_complete_type %tuple.type.cd5 [symbolic] // CHECK:STDOUT: %pattern_type.02b: type = pattern_type %tuple.type.cd5 [symbolic] +// CHECK:STDOUT: %u.patt: %pattern_type.02b = ref_binding_pattern u [symbolic] +// CHECK:STDOUT: %u.var_patt: %pattern_type.02b = var_pattern %u.patt [symbolic] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %DefaultOrUnformed.lookup_impl_witness.2ab: = lookup_impl_witness %tuple.type.cd5, @DefaultOrUnformed [symbolic] // CHECK:STDOUT: %.f98: require_specific_def_type = require_specific_def @T.as.DefaultOrUnformed.impl(%tuple.type.cd5) [symbolic] @@ -507,6 +521,8 @@ fn G(N:! i32) { // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %T.as_type.700} [symbolic] // CHECK:STDOUT: %require_complete.f8e: = require_complete_type %struct_type.a [symbolic] // CHECK:STDOUT: %pattern_type.915: type = pattern_type %struct_type.a [symbolic] +// CHECK:STDOUT: %v.patt: %pattern_type.915 = ref_binding_pattern v [symbolic] +// CHECK:STDOUT: %v.var_patt: %pattern_type.915 = var_pattern %v.patt [symbolic] // CHECK:STDOUT: %DefaultOrUnformed.lookup_impl_witness.53f: = lookup_impl_witness %struct_type.a, @DefaultOrUnformed [symbolic] // CHECK:STDOUT: %.b78: require_specific_def_type = require_specific_def @T.as.DefaultOrUnformed.impl(%struct_type.a) [symbolic] // CHECK:STDOUT: %DefaultOrUnformed.facet.103: %DefaultOrUnformed.type = facet_value %struct_type.a, (%DefaultOrUnformed.lookup_impl_witness.53f) [symbolic] @@ -518,6 +534,8 @@ fn G(N:! i32) { // CHECK:STDOUT: %array_type.50f: type = array_type %int_5, %T.as_type.700 [symbolic] // CHECK:STDOUT: %require_complete.f3e: = require_complete_type %array_type.50f [symbolic] // CHECK:STDOUT: %pattern_type.78a: type = pattern_type %array_type.50f [symbolic] +// CHECK:STDOUT: %w.patt: %pattern_type.78a = ref_binding_pattern w [symbolic] +// CHECK:STDOUT: %w.var_patt: %pattern_type.78a = var_pattern %w.patt [symbolic] // CHECK:STDOUT: %DefaultOrUnformed.lookup_impl_witness.1fb: = lookup_impl_witness %array_type.50f, @DefaultOrUnformed [symbolic] // CHECK:STDOUT: %.376: require_specific_def_type = require_specific_def @T.as.DefaultOrUnformed.impl(%array_type.50f) [symbolic] // CHECK:STDOUT: %DefaultOrUnformed.facet.d60: %DefaultOrUnformed.type = facet_value %array_type.50f, (%DefaultOrUnformed.lookup_impl_witness.1fb) [symbolic] @@ -545,6 +563,8 @@ fn G(N:! i32) { // CHECK:STDOUT: %specific_impl_fn.96b: = specific_impl_function %impl.elem0.667, @Destroy.WithSelf.Op(%Destroy.facet.7ba) [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %N.patt.38a: %pattern_type.6b6 = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %N.37f: %i32 = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.7cb: type = facet_type <@ImplicitAs, @ImplicitAs(Core.IntLiteral)> [concrete] // CHECK:STDOUT: %From: Core.IntLiteral = symbolic_binding From, 0 [symbolic] @@ -563,6 +583,8 @@ fn G(N:! i32) { // CHECK:STDOUT: %array_type.359: type = array_type %Int.as.ImplicitAs.impl.Convert.call, %i32 [symbolic] // CHECK:STDOUT: %require_complete.f47: = require_complete_type %array_type.359 [symbolic] // CHECK:STDOUT: %pattern_type.486: type = pattern_type %array_type.359 [symbolic] +// CHECK:STDOUT: %k.patt: %pattern_type.486 = ref_binding_pattern k [symbolic] +// CHECK:STDOUT: %k.var_patt: %pattern_type.486 = var_pattern %k.patt [symbolic] // CHECK:STDOUT: %DefaultOrUnformed.lookup_impl_witness.5c0: = lookup_impl_witness %array_type.359, @DefaultOrUnformed [symbolic] // CHECK:STDOUT: %.63b: require_specific_def_type = require_specific_def @T.as.DefaultOrUnformed.impl(%array_type.359) [symbolic] // CHECK:STDOUT: %DefaultOrUnformed.facet.b1c: %DefaultOrUnformed.type = facet_value %array_type.359, (%DefaultOrUnformed.lookup_impl_witness.5c0) [symbolic] @@ -594,6 +616,8 @@ fn G(N:! i32) { // CHECK:STDOUT: %tuple.type: type = tuple_type (%ptr.loc6_19.2, %const.loc6_22.2) [symbolic = %tuple.type (constants.%tuple.type.cd5)] // CHECK:STDOUT: %require_complete.loc6: = require_complete_type %tuple.type [symbolic = %require_complete.loc6 (constants.%require_complete.3b6)] // CHECK:STDOUT: %pattern_type.loc6: type = pattern_type %tuple.type [symbolic = %pattern_type.loc6 (constants.%pattern_type.02b)] +// CHECK:STDOUT: %u.patt.loc6_15.2: @F.%pattern_type.loc6 (%pattern_type.02b) = ref_binding_pattern u [symbolic = %u.patt.loc6_15.2 (constants.%u.patt)] +// CHECK:STDOUT: %u.var_patt.loc6_3.2: @F.%pattern_type.loc6 (%pattern_type.02b) = var_pattern %u.patt.loc6_15.2 [symbolic = %u.var_patt.loc6_3.2 (constants.%u.var_patt)] // CHECK:STDOUT: %.loc6_30.3: require_specific_def_type = require_specific_def @T.as.DefaultOrUnformed.impl(%tuple.type) [symbolic = %.loc6_30.3 (constants.%.f98)] // CHECK:STDOUT: %DefaultOrUnformed.lookup_impl_witness.loc6: = lookup_impl_witness %tuple.type, @DefaultOrUnformed [symbolic = %DefaultOrUnformed.lookup_impl_witness.loc6 (constants.%DefaultOrUnformed.lookup_impl_witness.2ab)] // CHECK:STDOUT: %DefaultOrUnformed.facet.loc6_30.2: %DefaultOrUnformed.type = facet_value %tuple.type, (%DefaultOrUnformed.lookup_impl_witness.loc6) [symbolic = %DefaultOrUnformed.facet.loc6_30.2 (constants.%DefaultOrUnformed.facet.c98)] @@ -604,6 +628,8 @@ fn G(N:! i32) { // CHECK:STDOUT: %struct_type.a.loc7_23.2: type = struct_type {.a: @F.%T.as_type.loc6_19.2 (%T.as_type.700)} [symbolic = %struct_type.a.loc7_23.2 (constants.%struct_type.a)] // CHECK:STDOUT: %require_complete.loc7: = require_complete_type %struct_type.a.loc7_23.2 [symbolic = %require_complete.loc7 (constants.%require_complete.f8e)] // CHECK:STDOUT: %pattern_type.loc7: type = pattern_type %struct_type.a.loc7_23.2 [symbolic = %pattern_type.loc7 (constants.%pattern_type.915)] +// CHECK:STDOUT: %v.patt.loc7_15.2: @F.%pattern_type.loc7 (%pattern_type.915) = ref_binding_pattern v [symbolic = %v.patt.loc7_15.2 (constants.%v.patt)] +// CHECK:STDOUT: %v.var_patt.loc7_3.2: @F.%pattern_type.loc7 (%pattern_type.915) = var_pattern %v.patt.loc7_15.2 [symbolic = %v.var_patt.loc7_3.2 (constants.%v.var_patt)] // CHECK:STDOUT: %.loc7_24.3: require_specific_def_type = require_specific_def @T.as.DefaultOrUnformed.impl(%struct_type.a.loc7_23.2) [symbolic = %.loc7_24.3 (constants.%.b78)] // CHECK:STDOUT: %DefaultOrUnformed.lookup_impl_witness.loc7: = lookup_impl_witness %struct_type.a.loc7_23.2, @DefaultOrUnformed [symbolic = %DefaultOrUnformed.lookup_impl_witness.loc7 (constants.%DefaultOrUnformed.lookup_impl_witness.53f)] // CHECK:STDOUT: %DefaultOrUnformed.facet.loc7_24.2: %DefaultOrUnformed.type = facet_value %struct_type.a.loc7_23.2, (%DefaultOrUnformed.lookup_impl_witness.loc7) [symbolic = %DefaultOrUnformed.facet.loc7_24.2 (constants.%DefaultOrUnformed.facet.103)] @@ -614,6 +640,8 @@ fn G(N:! i32) { // CHECK:STDOUT: %array_type.loc8_27.2: type = array_type constants.%int_5, %T.as_type.loc6_19.2 [symbolic = %array_type.loc8_27.2 (constants.%array_type.50f)] // CHECK:STDOUT: %require_complete.loc8: = require_complete_type %array_type.loc8_27.2 [symbolic = %require_complete.loc8 (constants.%require_complete.f3e)] // CHECK:STDOUT: %pattern_type.loc8: type = pattern_type %array_type.loc8_27.2 [symbolic = %pattern_type.loc8 (constants.%pattern_type.78a)] +// CHECK:STDOUT: %w.patt.loc8_15.2: @F.%pattern_type.loc8 (%pattern_type.78a) = ref_binding_pattern w [symbolic = %w.patt.loc8_15.2 (constants.%w.patt)] +// CHECK:STDOUT: %w.var_patt.loc8_3.2: @F.%pattern_type.loc8 (%pattern_type.78a) = var_pattern %w.patt.loc8_15.2 [symbolic = %w.var_patt.loc8_3.2 (constants.%w.var_patt)] // CHECK:STDOUT: %.loc8_28.3: require_specific_def_type = require_specific_def @T.as.DefaultOrUnformed.impl(%array_type.loc8_27.2) [symbolic = %.loc8_28.3 (constants.%.376)] // CHECK:STDOUT: %DefaultOrUnformed.lookup_impl_witness.loc8: = lookup_impl_witness %array_type.loc8_27.2, @DefaultOrUnformed [symbolic = %DefaultOrUnformed.lookup_impl_witness.loc8 (constants.%DefaultOrUnformed.lookup_impl_witness.1fb)] // CHECK:STDOUT: %DefaultOrUnformed.facet.loc8_28.2: %DefaultOrUnformed.type = facet_value %array_type.loc8_27.2, (%DefaultOrUnformed.lookup_impl_witness.loc8) [symbolic = %DefaultOrUnformed.facet.loc8_28.2 (constants.%DefaultOrUnformed.facet.d60)] @@ -622,31 +650,31 @@ fn G(N:! i32) { // CHECK:STDOUT: %impl.elem0.loc8_28.2: @F.%.loc8_28.4 (%.478) = impl_witness_access %DefaultOrUnformed.lookup_impl_witness.loc8, element0 [symbolic = %impl.elem0.loc8_28.2 (constants.%impl.elem0.276)] // CHECK:STDOUT: %specific_impl_fn.loc8_28.2: = specific_impl_function %impl.elem0.loc8_28.2, @DefaultOrUnformed.WithSelf.Op(%DefaultOrUnformed.facet.loc8_28.2) [symbolic = %specific_impl_fn.loc8_28.2 (constants.%specific_impl_fn.6bf)] // CHECK:STDOUT: %Destroy.lookup_impl_witness.loc8: = lookup_impl_witness %array_type.loc8_27.2, @Destroy [symbolic = %Destroy.lookup_impl_witness.loc8 (constants.%Destroy.lookup_impl_witness.1f5)] -// CHECK:STDOUT: %Destroy.facet.loc8_3.2: %Destroy.type = facet_value %array_type.loc8_27.2, (%Destroy.lookup_impl_witness.loc8) [symbolic = %Destroy.facet.loc8_3.2 (constants.%Destroy.facet.664)] -// CHECK:STDOUT: %Destroy.WithSelf.Op.type.loc8: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.loc8_3.2) [symbolic = %Destroy.WithSelf.Op.type.loc8 (constants.%Destroy.WithSelf.Op.type.373)] -// CHECK:STDOUT: %.loc8_3.3: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.loc8, %Destroy.facet.loc8_3.2 [symbolic = %.loc8_3.3 (constants.%.260)] -// CHECK:STDOUT: %impl.elem0.loc8_3.2: @F.%.loc8_3.3 (%.260) = impl_witness_access %Destroy.lookup_impl_witness.loc8, element0 [symbolic = %impl.elem0.loc8_3.2 (constants.%impl.elem0.375)] -// CHECK:STDOUT: %specific_impl_fn.loc8_3.2: = specific_impl_function %impl.elem0.loc8_3.2, @Destroy.WithSelf.Op(%Destroy.facet.loc8_3.2) [symbolic = %specific_impl_fn.loc8_3.2 (constants.%specific_impl_fn.f05)] +// CHECK:STDOUT: %Destroy.facet.loc8_3.3: %Destroy.type = facet_value %array_type.loc8_27.2, (%Destroy.lookup_impl_witness.loc8) [symbolic = %Destroy.facet.loc8_3.3 (constants.%Destroy.facet.664)] +// CHECK:STDOUT: %Destroy.WithSelf.Op.type.loc8: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.loc8_3.3) [symbolic = %Destroy.WithSelf.Op.type.loc8 (constants.%Destroy.WithSelf.Op.type.373)] +// CHECK:STDOUT: %.loc8_3.4: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.loc8, %Destroy.facet.loc8_3.3 [symbolic = %.loc8_3.4 (constants.%.260)] +// CHECK:STDOUT: %impl.elem0.loc8_3.2: @F.%.loc8_3.4 (%.260) = impl_witness_access %Destroy.lookup_impl_witness.loc8, element0 [symbolic = %impl.elem0.loc8_3.2 (constants.%impl.elem0.375)] +// CHECK:STDOUT: %specific_impl_fn.loc8_3.2: = specific_impl_function %impl.elem0.loc8_3.2, @Destroy.WithSelf.Op(%Destroy.facet.loc8_3.3) [symbolic = %specific_impl_fn.loc8_3.2 (constants.%specific_impl_fn.f05)] // CHECK:STDOUT: %Destroy.lookup_impl_witness.loc7: = lookup_impl_witness %struct_type.a.loc7_23.2, @Destroy [symbolic = %Destroy.lookup_impl_witness.loc7 (constants.%Destroy.lookup_impl_witness.7f9)] -// CHECK:STDOUT: %Destroy.facet.loc7_3.2: %Destroy.type = facet_value %struct_type.a.loc7_23.2, (%Destroy.lookup_impl_witness.loc7) [symbolic = %Destroy.facet.loc7_3.2 (constants.%Destroy.facet.aa3)] -// CHECK:STDOUT: %Destroy.WithSelf.Op.type.loc7: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.loc7_3.2) [symbolic = %Destroy.WithSelf.Op.type.loc7 (constants.%Destroy.WithSelf.Op.type.ae9)] -// CHECK:STDOUT: %.loc7_3.2: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.loc7, %Destroy.facet.loc7_3.2 [symbolic = %.loc7_3.2 (constants.%.3c7)] -// CHECK:STDOUT: %impl.elem0.loc7_3.2: @F.%.loc7_3.2 (%.3c7) = impl_witness_access %Destroy.lookup_impl_witness.loc7, element0 [symbolic = %impl.elem0.loc7_3.2 (constants.%impl.elem0.bb8)] -// CHECK:STDOUT: %specific_impl_fn.loc7_3.2: = specific_impl_function %impl.elem0.loc7_3.2, @Destroy.WithSelf.Op(%Destroy.facet.loc7_3.2) [symbolic = %specific_impl_fn.loc7_3.2 (constants.%specific_impl_fn.799)] +// CHECK:STDOUT: %Destroy.facet.loc7_3.3: %Destroy.type = facet_value %struct_type.a.loc7_23.2, (%Destroy.lookup_impl_witness.loc7) [symbolic = %Destroy.facet.loc7_3.3 (constants.%Destroy.facet.aa3)] +// CHECK:STDOUT: %Destroy.WithSelf.Op.type.loc7: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.loc7_3.3) [symbolic = %Destroy.WithSelf.Op.type.loc7 (constants.%Destroy.WithSelf.Op.type.ae9)] +// CHECK:STDOUT: %.loc7_3.3: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.loc7, %Destroy.facet.loc7_3.3 [symbolic = %.loc7_3.3 (constants.%.3c7)] +// CHECK:STDOUT: %impl.elem0.loc7_3.2: @F.%.loc7_3.3 (%.3c7) = impl_witness_access %Destroy.lookup_impl_witness.loc7, element0 [symbolic = %impl.elem0.loc7_3.2 (constants.%impl.elem0.bb8)] +// CHECK:STDOUT: %specific_impl_fn.loc7_3.2: = specific_impl_function %impl.elem0.loc7_3.2, @Destroy.WithSelf.Op(%Destroy.facet.loc7_3.3) [symbolic = %specific_impl_fn.loc7_3.2 (constants.%specific_impl_fn.799)] // CHECK:STDOUT: %Destroy.lookup_impl_witness.loc6: = lookup_impl_witness %tuple.type, @Destroy [symbolic = %Destroy.lookup_impl_witness.loc6 (constants.%Destroy.lookup_impl_witness.d26)] -// CHECK:STDOUT: %Destroy.facet.loc6_3.2: %Destroy.type = facet_value %tuple.type, (%Destroy.lookup_impl_witness.loc6) [symbolic = %Destroy.facet.loc6_3.2 (constants.%Destroy.facet.7ba)] -// CHECK:STDOUT: %Destroy.WithSelf.Op.type.loc6: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.loc6_3.2) [symbolic = %Destroy.WithSelf.Op.type.loc6 (constants.%Destroy.WithSelf.Op.type.a30)] -// CHECK:STDOUT: %.loc6_3.3: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.loc6, %Destroy.facet.loc6_3.2 [symbolic = %.loc6_3.3 (constants.%.a0a)] -// CHECK:STDOUT: %impl.elem0.loc6_3.2: @F.%.loc6_3.3 (%.a0a) = impl_witness_access %Destroy.lookup_impl_witness.loc6, element0 [symbolic = %impl.elem0.loc6_3.2 (constants.%impl.elem0.667)] -// CHECK:STDOUT: %specific_impl_fn.loc6_3.2: = specific_impl_function %impl.elem0.loc6_3.2, @Destroy.WithSelf.Op(%Destroy.facet.loc6_3.2) [symbolic = %specific_impl_fn.loc6_3.2 (constants.%specific_impl_fn.96b)] +// CHECK:STDOUT: %Destroy.facet.loc6_3.3: %Destroy.type = facet_value %tuple.type, (%Destroy.lookup_impl_witness.loc6) [symbolic = %Destroy.facet.loc6_3.3 (constants.%Destroy.facet.7ba)] +// CHECK:STDOUT: %Destroy.WithSelf.Op.type.loc6: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.loc6_3.3) [symbolic = %Destroy.WithSelf.Op.type.loc6 (constants.%Destroy.WithSelf.Op.type.a30)] +// CHECK:STDOUT: %.loc6_3.4: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.loc6, %Destroy.facet.loc6_3.3 [symbolic = %.loc6_3.4 (constants.%.a0a)] +// CHECK:STDOUT: %impl.elem0.loc6_3.2: @F.%.loc6_3.4 (%.a0a) = impl_witness_access %Destroy.lookup_impl_witness.loc6, element0 [symbolic = %impl.elem0.loc6_3.2 (constants.%impl.elem0.667)] +// CHECK:STDOUT: %specific_impl_fn.loc6_3.2: = specific_impl_function %impl.elem0.loc6_3.2, @Destroy.WithSelf.Op(%Destroy.facet.loc6_3.3) [symbolic = %specific_impl_fn.loc6_3.2 (constants.%specific_impl_fn.96b)] // CHECK:STDOUT: // CHECK:STDOUT: fn() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %u.patt: @F.%pattern_type.loc6 (%pattern_type.02b) = ref_binding_pattern u [concrete] -// CHECK:STDOUT: %u.var_patt: @F.%pattern_type.loc6 (%pattern_type.02b) = var_pattern %u.patt [concrete] +// CHECK:STDOUT: %u.patt.loc6_15.1: @F.%pattern_type.loc6 (%pattern_type.02b) = ref_binding_pattern u [symbolic = %u.patt.loc6_15.2 (constants.%u.patt)] +// CHECK:STDOUT: %u.var_patt.loc6_3.1: @F.%pattern_type.loc6 (%pattern_type.02b) = var_pattern %u.patt.loc6_15.1 [symbolic = %u.var_patt.loc6_3.2 (constants.%u.var_patt)] // CHECK:STDOUT: } -// CHECK:STDOUT: %u.var: ref @F.%tuple.type (%tuple.type.cd5) = var %u.var_patt +// CHECK:STDOUT: %u.var: ref @F.%tuple.type (%tuple.type.cd5) = var %u.var_patt.loc6_3.1 // CHECK:STDOUT: %DefaultOrUnformed.facet.loc6_30.1: %DefaultOrUnformed.type = facet_value constants.%tuple.type.cd5, (constants.%DefaultOrUnformed.lookup_impl_witness.2ab) [symbolic = %DefaultOrUnformed.facet.loc6_30.2 (constants.%DefaultOrUnformed.facet.c98)] // CHECK:STDOUT: %.loc6_30.1: %DefaultOrUnformed.type = converted constants.%tuple.type.cd5, %DefaultOrUnformed.facet.loc6_30.1 [symbolic = %DefaultOrUnformed.facet.loc6_30.2 (constants.%DefaultOrUnformed.facet.c98)] // CHECK:STDOUT: %as_type.loc6: type = facet_access_type %.loc6_30.1 [symbolic = %tuple.type (constants.%tuple.type.cd5)] @@ -670,10 +698,10 @@ fn G(N:! i32) { // CHECK:STDOUT: } // CHECK:STDOUT: %u: ref @F.%tuple.type (%tuple.type.cd5) = ref_binding u, %u.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: @F.%pattern_type.loc7 (%pattern_type.915) = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: @F.%pattern_type.loc7 (%pattern_type.915) = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt.loc7_15.1: @F.%pattern_type.loc7 (%pattern_type.915) = ref_binding_pattern v [symbolic = %v.patt.loc7_15.2 (constants.%v.patt)] +// CHECK:STDOUT: %v.var_patt.loc7_3.1: @F.%pattern_type.loc7 (%pattern_type.915) = var_pattern %v.patt.loc7_15.1 [symbolic = %v.var_patt.loc7_3.2 (constants.%v.var_patt)] // CHECK:STDOUT: } -// CHECK:STDOUT: %v.var: ref @F.%struct_type.a.loc7_23.2 (%struct_type.a) = var %v.var_patt +// CHECK:STDOUT: %v.var: ref @F.%struct_type.a.loc7_23.2 (%struct_type.a) = var %v.var_patt.loc7_3.1 // CHECK:STDOUT: %DefaultOrUnformed.facet.loc7_24.1: %DefaultOrUnformed.type = facet_value constants.%struct_type.a, (constants.%DefaultOrUnformed.lookup_impl_witness.53f) [symbolic = %DefaultOrUnformed.facet.loc7_24.2 (constants.%DefaultOrUnformed.facet.103)] // CHECK:STDOUT: %.loc7_24.1: %DefaultOrUnformed.type = converted constants.%struct_type.a, %DefaultOrUnformed.facet.loc7_24.1 [symbolic = %DefaultOrUnformed.facet.loc7_24.2 (constants.%DefaultOrUnformed.facet.103)] // CHECK:STDOUT: %as_type.loc7: type = facet_access_type %.loc7_24.1 [symbolic = %struct_type.a.loc7_23.2 (constants.%struct_type.a)] @@ -690,10 +718,10 @@ fn G(N:! i32) { // CHECK:STDOUT: } // CHECK:STDOUT: %v: ref @F.%struct_type.a.loc7_23.2 (%struct_type.a) = ref_binding v, %v.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %w.patt: @F.%pattern_type.loc8 (%pattern_type.78a) = ref_binding_pattern w [concrete] -// CHECK:STDOUT: %w.var_patt: @F.%pattern_type.loc8 (%pattern_type.78a) = var_pattern %w.patt [concrete] +// CHECK:STDOUT: %w.patt.loc8_15.1: @F.%pattern_type.loc8 (%pattern_type.78a) = ref_binding_pattern w [symbolic = %w.patt.loc8_15.2 (constants.%w.patt)] +// CHECK:STDOUT: %w.var_patt.loc8_3.1: @F.%pattern_type.loc8 (%pattern_type.78a) = var_pattern %w.patt.loc8_15.1 [symbolic = %w.var_patt.loc8_3.2 (constants.%w.var_patt)] // CHECK:STDOUT: } -// CHECK:STDOUT: %w.var: ref @F.%array_type.loc8_27.2 (%array_type.50f) = var %w.var_patt +// CHECK:STDOUT: %w.var: ref @F.%array_type.loc8_27.2 (%array_type.50f) = var %w.var_patt.loc8_3.1 // CHECK:STDOUT: %DefaultOrUnformed.facet.loc8_28.1: %DefaultOrUnformed.type = facet_value constants.%array_type.50f, (constants.%DefaultOrUnformed.lookup_impl_witness.1fb) [symbolic = %DefaultOrUnformed.facet.loc8_28.2 (constants.%DefaultOrUnformed.facet.d60)] // CHECK:STDOUT: %.loc8_28.1: %DefaultOrUnformed.type = converted constants.%array_type.50f, %DefaultOrUnformed.facet.loc8_28.1 [symbolic = %DefaultOrUnformed.facet.loc8_28.2 (constants.%DefaultOrUnformed.facet.d60)] // CHECK:STDOUT: %as_type.loc8: type = facet_access_type %.loc8_28.1 [symbolic = %array_type.loc8_27.2 (constants.%array_type.50f)] @@ -711,24 +739,30 @@ fn G(N:! i32) { // CHECK:STDOUT: %array_type.loc8_27.1: type = array_type %int_5, %.loc8_23 [symbolic = %array_type.loc8_27.2 (constants.%array_type.50f)] // CHECK:STDOUT: } // CHECK:STDOUT: %w: ref @F.%array_type.loc8_27.2 (%array_type.50f) = ref_binding w, %w.var -// CHECK:STDOUT: %impl.elem0.loc8_3.1: @F.%.loc8_3.3 (%.260) = impl_witness_access constants.%Destroy.lookup_impl_witness.1f5, element0 [symbolic = %impl.elem0.loc8_3.2 (constants.%impl.elem0.375)] +// CHECK:STDOUT: %impl.elem0.loc8_3.1: @F.%.loc8_3.4 (%.260) = impl_witness_access constants.%Destroy.lookup_impl_witness.1f5, element0 [symbolic = %impl.elem0.loc8_3.2 (constants.%impl.elem0.375)] // CHECK:STDOUT: %bound_method.loc8_3.1: = bound_method %w.var, %impl.elem0.loc8_3.1 -// CHECK:STDOUT: %Destroy.facet.loc8_3.1: %Destroy.type = facet_value constants.%array_type.50f, (constants.%Destroy.lookup_impl_witness.1f5) [symbolic = %Destroy.facet.loc8_3.2 (constants.%Destroy.facet.664)] -// CHECK:STDOUT: %.loc8_3.2: %Destroy.type = converted constants.%array_type.50f, %Destroy.facet.loc8_3.1 [symbolic = %Destroy.facet.loc8_3.2 (constants.%Destroy.facet.664)] +// CHECK:STDOUT: %Destroy.facet.loc8_3.1: %Destroy.type = facet_value constants.%array_type.50f, (constants.%Destroy.lookup_impl_witness.1f5) [symbolic = %Destroy.facet.loc8_3.3 (constants.%Destroy.facet.664)] +// CHECK:STDOUT: %.loc8_3.2: %Destroy.type = converted constants.%array_type.50f, %Destroy.facet.loc8_3.1 [symbolic = %Destroy.facet.loc8_3.3 (constants.%Destroy.facet.664)] +// CHECK:STDOUT: %Destroy.facet.loc8_3.2: %Destroy.type = facet_value constants.%array_type.50f, (constants.%Destroy.lookup_impl_witness.1f5) [symbolic = %Destroy.facet.loc8_3.3 (constants.%Destroy.facet.664)] +// CHECK:STDOUT: %.loc8_3.3: %Destroy.type = converted constants.%array_type.50f, %Destroy.facet.loc8_3.2 [symbolic = %Destroy.facet.loc8_3.3 (constants.%Destroy.facet.664)] // CHECK:STDOUT: %specific_impl_fn.loc8_3.1: = specific_impl_function %impl.elem0.loc8_3.1, @Destroy.WithSelf.Op(constants.%Destroy.facet.664) [symbolic = %specific_impl_fn.loc8_3.2 (constants.%specific_impl_fn.f05)] // CHECK:STDOUT: %bound_method.loc8_3.2: = bound_method %w.var, %specific_impl_fn.loc8_3.1 // CHECK:STDOUT: %Destroy.WithSelf.Op.call.loc8: init %empty_tuple.type = call %bound_method.loc8_3.2(%w.var) -// CHECK:STDOUT: %impl.elem0.loc7_3.1: @F.%.loc7_3.2 (%.3c7) = impl_witness_access constants.%Destroy.lookup_impl_witness.7f9, element0 [symbolic = %impl.elem0.loc7_3.2 (constants.%impl.elem0.bb8)] +// CHECK:STDOUT: %impl.elem0.loc7_3.1: @F.%.loc7_3.3 (%.3c7) = impl_witness_access constants.%Destroy.lookup_impl_witness.7f9, element0 [symbolic = %impl.elem0.loc7_3.2 (constants.%impl.elem0.bb8)] // CHECK:STDOUT: %bound_method.loc7_3.1: = bound_method %v.var, %impl.elem0.loc7_3.1 -// CHECK:STDOUT: %Destroy.facet.loc7_3.1: %Destroy.type = facet_value constants.%struct_type.a, (constants.%Destroy.lookup_impl_witness.7f9) [symbolic = %Destroy.facet.loc7_3.2 (constants.%Destroy.facet.aa3)] -// CHECK:STDOUT: %.loc7_3.1: %Destroy.type = converted constants.%struct_type.a, %Destroy.facet.loc7_3.1 [symbolic = %Destroy.facet.loc7_3.2 (constants.%Destroy.facet.aa3)] +// CHECK:STDOUT: %Destroy.facet.loc7_3.1: %Destroy.type = facet_value constants.%struct_type.a, (constants.%Destroy.lookup_impl_witness.7f9) [symbolic = %Destroy.facet.loc7_3.3 (constants.%Destroy.facet.aa3)] +// CHECK:STDOUT: %.loc7_3.1: %Destroy.type = converted constants.%struct_type.a, %Destroy.facet.loc7_3.1 [symbolic = %Destroy.facet.loc7_3.3 (constants.%Destroy.facet.aa3)] +// CHECK:STDOUT: %Destroy.facet.loc7_3.2: %Destroy.type = facet_value constants.%struct_type.a, (constants.%Destroy.lookup_impl_witness.7f9) [symbolic = %Destroy.facet.loc7_3.3 (constants.%Destroy.facet.aa3)] +// CHECK:STDOUT: %.loc7_3.2: %Destroy.type = converted constants.%struct_type.a, %Destroy.facet.loc7_3.2 [symbolic = %Destroy.facet.loc7_3.3 (constants.%Destroy.facet.aa3)] // CHECK:STDOUT: %specific_impl_fn.loc7_3.1: = specific_impl_function %impl.elem0.loc7_3.1, @Destroy.WithSelf.Op(constants.%Destroy.facet.aa3) [symbolic = %specific_impl_fn.loc7_3.2 (constants.%specific_impl_fn.799)] // CHECK:STDOUT: %bound_method.loc7_3.2: = bound_method %v.var, %specific_impl_fn.loc7_3.1 // CHECK:STDOUT: %Destroy.WithSelf.Op.call.loc7: init %empty_tuple.type = call %bound_method.loc7_3.2(%v.var) -// CHECK:STDOUT: %impl.elem0.loc6_3.1: @F.%.loc6_3.3 (%.a0a) = impl_witness_access constants.%Destroy.lookup_impl_witness.d26, element0 [symbolic = %impl.elem0.loc6_3.2 (constants.%impl.elem0.667)] +// CHECK:STDOUT: %impl.elem0.loc6_3.1: @F.%.loc6_3.4 (%.a0a) = impl_witness_access constants.%Destroy.lookup_impl_witness.d26, element0 [symbolic = %impl.elem0.loc6_3.2 (constants.%impl.elem0.667)] // CHECK:STDOUT: %bound_method.loc6_3.1: = bound_method %u.var, %impl.elem0.loc6_3.1 -// CHECK:STDOUT: %Destroy.facet.loc6_3.1: %Destroy.type = facet_value constants.%tuple.type.cd5, (constants.%Destroy.lookup_impl_witness.d26) [symbolic = %Destroy.facet.loc6_3.2 (constants.%Destroy.facet.7ba)] -// CHECK:STDOUT: %.loc6_3.2: %Destroy.type = converted constants.%tuple.type.cd5, %Destroy.facet.loc6_3.1 [symbolic = %Destroy.facet.loc6_3.2 (constants.%Destroy.facet.7ba)] +// CHECK:STDOUT: %Destroy.facet.loc6_3.1: %Destroy.type = facet_value constants.%tuple.type.cd5, (constants.%Destroy.lookup_impl_witness.d26) [symbolic = %Destroy.facet.loc6_3.3 (constants.%Destroy.facet.7ba)] +// CHECK:STDOUT: %.loc6_3.2: %Destroy.type = converted constants.%tuple.type.cd5, %Destroy.facet.loc6_3.1 [symbolic = %Destroy.facet.loc6_3.3 (constants.%Destroy.facet.7ba)] +// CHECK:STDOUT: %Destroy.facet.loc6_3.2: %Destroy.type = facet_value constants.%tuple.type.cd5, (constants.%Destroy.lookup_impl_witness.d26) [symbolic = %Destroy.facet.loc6_3.3 (constants.%Destroy.facet.7ba)] +// CHECK:STDOUT: %.loc6_3.3: %Destroy.type = converted constants.%tuple.type.cd5, %Destroy.facet.loc6_3.2 [symbolic = %Destroy.facet.loc6_3.3 (constants.%Destroy.facet.7ba)] // CHECK:STDOUT: %specific_impl_fn.loc6_3.1: = specific_impl_function %impl.elem0.loc6_3.1, @Destroy.WithSelf.Op(constants.%Destroy.facet.7ba) [symbolic = %specific_impl_fn.loc6_3.2 (constants.%specific_impl_fn.96b)] // CHECK:STDOUT: %bound_method.loc6_3.2: = bound_method %u.var, %specific_impl_fn.loc6_3.1 // CHECK:STDOUT: %Destroy.WithSelf.Op.call.loc6: init %empty_tuple.type = call %bound_method.loc6_3.2(%u.var) @@ -746,6 +780,8 @@ fn G(N:! i32) { // CHECK:STDOUT: %array_type.loc14_29.2: type = array_type %Int.as.ImplicitAs.impl.Convert.call.loc14_28.2, constants.%i32 [symbolic = %array_type.loc14_29.2 (constants.%array_type.359)] // CHECK:STDOUT: %require_complete: = require_complete_type %array_type.loc14_29.2 [symbolic = %require_complete (constants.%require_complete.f47)] // CHECK:STDOUT: %pattern_type: type = pattern_type %array_type.loc14_29.2 [symbolic = %pattern_type (constants.%pattern_type.486)] +// CHECK:STDOUT: %k.patt.loc14_15.2: @G.%pattern_type (%pattern_type.486) = ref_binding_pattern k [symbolic = %k.patt.loc14_15.2 (constants.%k.patt)] +// CHECK:STDOUT: %k.var_patt.loc14_3.2: @G.%pattern_type (%pattern_type.486) = var_pattern %k.patt.loc14_15.2 [symbolic = %k.var_patt.loc14_3.2 (constants.%k.var_patt)] // CHECK:STDOUT: %.loc14_30.3: require_specific_def_type = require_specific_def @T.as.DefaultOrUnformed.impl(%array_type.loc14_29.2) [symbolic = %.loc14_30.3 (constants.%.63b)] // CHECK:STDOUT: %DefaultOrUnformed.lookup_impl_witness: = lookup_impl_witness %array_type.loc14_29.2, @DefaultOrUnformed [symbolic = %DefaultOrUnformed.lookup_impl_witness (constants.%DefaultOrUnformed.lookup_impl_witness.5c0)] // CHECK:STDOUT: %DefaultOrUnformed.facet.loc14_30.2: %DefaultOrUnformed.type = facet_value %array_type.loc14_29.2, (%DefaultOrUnformed.lookup_impl_witness) [symbolic = %DefaultOrUnformed.facet.loc14_30.2 (constants.%DefaultOrUnformed.facet.b1c)] @@ -754,19 +790,19 @@ fn G(N:! i32) { // CHECK:STDOUT: %impl.elem0.loc14_30.2: @G.%.loc14_30.4 (%.608) = impl_witness_access %DefaultOrUnformed.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc14_30.2 (constants.%impl.elem0.37d)] // CHECK:STDOUT: %specific_impl_fn.loc14_30.2: = specific_impl_function %impl.elem0.loc14_30.2, @DefaultOrUnformed.WithSelf.Op(%DefaultOrUnformed.facet.loc14_30.2) [symbolic = %specific_impl_fn.loc14_30.2 (constants.%specific_impl_fn.b63)] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %array_type.loc14_29.2, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness.822)] -// CHECK:STDOUT: %Destroy.facet.loc14_3.2: %Destroy.type = facet_value %array_type.loc14_29.2, (%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.loc14_3.2 (constants.%Destroy.facet.a58)] -// CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.loc14_3.2) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.6c9)] -// CHECK:STDOUT: %.loc14_3.3: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Destroy.facet.loc14_3.2 [symbolic = %.loc14_3.3 (constants.%.a73)] -// CHECK:STDOUT: %impl.elem0.loc14_3.2: @G.%.loc14_3.3 (%.a73) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc14_3.2 (constants.%impl.elem0.fa7)] -// CHECK:STDOUT: %specific_impl_fn.loc14_3.2: = specific_impl_function %impl.elem0.loc14_3.2, @Destroy.WithSelf.Op(%Destroy.facet.loc14_3.2) [symbolic = %specific_impl_fn.loc14_3.2 (constants.%specific_impl_fn.075)] +// CHECK:STDOUT: %Destroy.facet.loc14_3.3: %Destroy.type = facet_value %array_type.loc14_29.2, (%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.loc14_3.3 (constants.%Destroy.facet.a58)] +// CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.loc14_3.3) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.6c9)] +// CHECK:STDOUT: %.loc14_3.4: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Destroy.facet.loc14_3.3 [symbolic = %.loc14_3.4 (constants.%.a73)] +// CHECK:STDOUT: %impl.elem0.loc14_3.2: @G.%.loc14_3.4 (%.a73) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc14_3.2 (constants.%impl.elem0.fa7)] +// CHECK:STDOUT: %specific_impl_fn.loc14_3.2: = specific_impl_function %impl.elem0.loc14_3.2, @Destroy.WithSelf.Op(%Destroy.facet.loc14_3.3) [symbolic = %specific_impl_fn.loc14_3.2 (constants.%specific_impl_fn.075)] // CHECK:STDOUT: // CHECK:STDOUT: fn() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %k.patt: @G.%pattern_type (%pattern_type.486) = ref_binding_pattern k [concrete] -// CHECK:STDOUT: %k.var_patt: @G.%pattern_type (%pattern_type.486) = var_pattern %k.patt [concrete] +// CHECK:STDOUT: %k.patt.loc14_15.1: @G.%pattern_type (%pattern_type.486) = ref_binding_pattern k [symbolic = %k.patt.loc14_15.2 (constants.%k.patt)] +// CHECK:STDOUT: %k.var_patt.loc14_3.1: @G.%pattern_type (%pattern_type.486) = var_pattern %k.patt.loc14_15.1 [symbolic = %k.var_patt.loc14_3.2 (constants.%k.var_patt)] // CHECK:STDOUT: } -// CHECK:STDOUT: %k.var: ref @G.%array_type.loc14_29.2 (%array_type.359) = var %k.var_patt +// CHECK:STDOUT: %k.var: ref @G.%array_type.loc14_29.2 (%array_type.359) = var %k.var_patt.loc14_3.1 // CHECK:STDOUT: %DefaultOrUnformed.facet.loc14_30.1: %DefaultOrUnformed.type = facet_value constants.%array_type.359, (constants.%DefaultOrUnformed.lookup_impl_witness.5c0) [symbolic = %DefaultOrUnformed.facet.loc14_30.2 (constants.%DefaultOrUnformed.facet.b1c)] // CHECK:STDOUT: %.loc14_30.1: %DefaultOrUnformed.type = converted constants.%array_type.359, %DefaultOrUnformed.facet.loc14_30.1 [symbolic = %DefaultOrUnformed.facet.loc14_30.2 (constants.%DefaultOrUnformed.facet.b1c)] // CHECK:STDOUT: %as_type: type = facet_access_type %.loc14_30.1 [symbolic = %array_type.loc14_29.2 (constants.%array_type.359)] @@ -789,10 +825,12 @@ fn G(N:! i32) { // CHECK:STDOUT: %array_type.loc14_29.1: type = array_type %.loc14_28.2, %i32.loc14 [symbolic = %array_type.loc14_29.2 (constants.%array_type.359)] // CHECK:STDOUT: } // CHECK:STDOUT: %k: ref @G.%array_type.loc14_29.2 (%array_type.359) = ref_binding k, %k.var -// CHECK:STDOUT: %impl.elem0.loc14_3.1: @G.%.loc14_3.3 (%.a73) = impl_witness_access constants.%Destroy.lookup_impl_witness.822, element0 [symbolic = %impl.elem0.loc14_3.2 (constants.%impl.elem0.fa7)] +// CHECK:STDOUT: %impl.elem0.loc14_3.1: @G.%.loc14_3.4 (%.a73) = impl_witness_access constants.%Destroy.lookup_impl_witness.822, element0 [symbolic = %impl.elem0.loc14_3.2 (constants.%impl.elem0.fa7)] // CHECK:STDOUT: %bound_method.loc14_3.1: = bound_method %k.var, %impl.elem0.loc14_3.1 -// CHECK:STDOUT: %Destroy.facet.loc14_3.1: %Destroy.type = facet_value constants.%array_type.359, (constants.%Destroy.lookup_impl_witness.822) [symbolic = %Destroy.facet.loc14_3.2 (constants.%Destroy.facet.a58)] -// CHECK:STDOUT: %.loc14_3.2: %Destroy.type = converted constants.%array_type.359, %Destroy.facet.loc14_3.1 [symbolic = %Destroy.facet.loc14_3.2 (constants.%Destroy.facet.a58)] +// CHECK:STDOUT: %Destroy.facet.loc14_3.1: %Destroy.type = facet_value constants.%array_type.359, (constants.%Destroy.lookup_impl_witness.822) [symbolic = %Destroy.facet.loc14_3.3 (constants.%Destroy.facet.a58)] +// CHECK:STDOUT: %.loc14_3.2: %Destroy.type = converted constants.%array_type.359, %Destroy.facet.loc14_3.1 [symbolic = %Destroy.facet.loc14_3.3 (constants.%Destroy.facet.a58)] +// CHECK:STDOUT: %Destroy.facet.loc14_3.2: %Destroy.type = facet_value constants.%array_type.359, (constants.%Destroy.lookup_impl_witness.822) [symbolic = %Destroy.facet.loc14_3.3 (constants.%Destroy.facet.a58)] +// CHECK:STDOUT: %.loc14_3.3: %Destroy.type = converted constants.%array_type.359, %Destroy.facet.loc14_3.2 [symbolic = %Destroy.facet.loc14_3.3 (constants.%Destroy.facet.a58)] // CHECK:STDOUT: %specific_impl_fn.loc14_3.1: = specific_impl_function %impl.elem0.loc14_3.1, @Destroy.WithSelf.Op(constants.%Destroy.facet.a58) [symbolic = %specific_impl_fn.loc14_3.2 (constants.%specific_impl_fn.075)] // CHECK:STDOUT: %bound_method.loc14_3.2: = bound_method %k.var, %specific_impl_fn.loc14_3.1 // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc14_3.2(%k.var) @@ -801,10 +839,12 @@ fn G(N:! i32) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T.0e7) { +// CHECK:STDOUT: %T.patt.loc4_7.2 => constants.%T.patt.351 // CHECK:STDOUT: %T.loc4_7.1 => constants.%T.0e7 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%N.37f) { +// CHECK:STDOUT: %N.patt.loc12_7.2 => constants.%N.patt.38a // CHECK:STDOUT: %N.loc12_7.1 => constants.%N.37f // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/eval/binding.carbon b/toolchain/check/testdata/eval/binding.carbon index c2a11ef343dc..a365ed7f2123 100644 --- a/toolchain/check/testdata/eval/binding.carbon +++ b/toolchain/check/testdata/eval/binding.carbon @@ -103,6 +103,7 @@ let n: array(i32, G()) = (1, 2, 3); // CHECK:STDOUT: %bound_method.545: = bound_method %int_3.410, %Int.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_3.1ba, %i32 [concrete] // CHECK:STDOUT: %pattern_type.771: type = pattern_type %array_type [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.771 = value_binding_pattern n [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %tuple.type.37f: type = tuple_type (Core.IntLiteral, Core.IntLiteral, Core.IntLiteral) [concrete] @@ -127,30 +128,7 @@ let n: array(i32, G()) = (1, 2, 3); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: %pattern_type.771 = value_binding_pattern n [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: %.loc11_23: type = splice_block %array_type [concrete = constants.%array_type] { -// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] -// CHECK:STDOUT: %F.ref: %F.type = name_ref F, %F.decl [concrete = constants.%F] -// CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete = constants.%int_3.1ba] -// CHECK:STDOUT: %impl.elem0.loc11_21: %.1c5 = impl_witness_access constants.%ImplicitAs.impl_witness.a23, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] -// CHECK:STDOUT: %bound_method.loc11_21.1: = bound_method %int_3, %impl.elem0.loc11_21 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.485] -// CHECK:STDOUT: %specific_fn.loc11_21: = specific_function %impl.elem0.loc11_21, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] -// CHECK:STDOUT: %bound_method.loc11_21.2: = bound_method %int_3, %specific_fn.loc11_21 [concrete = constants.%bound_method.763] -// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc11_21: init %i32 = call %bound_method.loc11_21.2(%int_3) [concrete = constants.%int_3.410] -// CHECK:STDOUT: %.loc11_21.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc11_21 [concrete = constants.%int_3.410] -// CHECK:STDOUT: %.loc11_21.2: %i32 = converted %int_3, %.loc11_21.1 [concrete = constants.%int_3.410] -// CHECK:STDOUT: %F.call: init %i32 = call %F.ref(%.loc11_21.2) [concrete = constants.%int_3.410] -// CHECK:STDOUT: %impl.elem0.loc11_22: %.b08 = impl_witness_access constants.%ImplicitAs.impl_witness.416, element0 [concrete = constants.%Int.as.ImplicitAs.impl.Convert.69e] -// CHECK:STDOUT: %bound_method.loc11_22.1: = bound_method %F.call, %impl.elem0.loc11_22 [concrete = constants.%Int.as.ImplicitAs.impl.Convert.bound] -// CHECK:STDOUT: %specific_fn.loc11_22: = specific_function %impl.elem0.loc11_22, @Int.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Int.as.ImplicitAs.impl.Convert.specific_fn] -// CHECK:STDOUT: %bound_method.loc11_22.2: = bound_method %F.call, %specific_fn.loc11_22 [concrete = constants.%bound_method.545] -// CHECK:STDOUT: %.loc11_22.1: %i32 = value_of_initializer %F.call [concrete = constants.%int_3.410] -// CHECK:STDOUT: %.loc11_22.2: %i32 = converted %F.call, %.loc11_22.1 [concrete = constants.%int_3.410] -// CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.call: init Core.IntLiteral = call %bound_method.loc11_22.2(%.loc11_22.2) [concrete = constants.%int_3.1ba] -// CHECK:STDOUT: %.loc11_22.3: Core.IntLiteral = value_of_initializer %Int.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_3.1ba] -// CHECK:STDOUT: %.loc11_22.4: Core.IntLiteral = converted %F.call, %.loc11_22.3 [concrete = constants.%int_3.1ba] -// CHECK:STDOUT: %array_type: type = array_type %.loc11_22.4, %i32 [concrete = constants.%array_type] +// CHECK:STDOUT: %n.patt: %pattern_type.771 = value_binding_pattern n [concrete = constants.%n.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %impl.elem0.loc11_35.1: %.1c5 = impl_witness_access constants.%ImplicitAs.impl_witness.a23, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] // CHECK:STDOUT: %bound_method.loc11_35.1: = bound_method @__global_init.%int_1, %impl.elem0.loc11_35.1 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.094] @@ -184,6 +162,29 @@ let n: array(i32, G()) = (1, 2, 3); // CHECK:STDOUT: %.loc11_35.12: init %array_type = converted @__global_init.%.loc11, %.loc11_35.11 [concrete = constants.%array] // CHECK:STDOUT: %.loc11_35.13: ref %array_type = temporary %.loc11_35.2, %.loc11_35.12 [concrete = constants.%.981] // CHECK:STDOUT: %.loc11_35.14: %array_type = acquire_value %.loc11_35.13 [concrete = constants.%array] +// CHECK:STDOUT: %.loc11_23: type = splice_block %array_type [concrete = constants.%array_type] { +// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] +// CHECK:STDOUT: %F.ref: %F.type = name_ref F, %F.decl [concrete = constants.%F] +// CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete = constants.%int_3.1ba] +// CHECK:STDOUT: %impl.elem0.loc11_21: %.1c5 = impl_witness_access constants.%ImplicitAs.impl_witness.a23, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] +// CHECK:STDOUT: %bound_method.loc11_21.1: = bound_method %int_3, %impl.elem0.loc11_21 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.485] +// CHECK:STDOUT: %specific_fn.loc11_21: = specific_function %impl.elem0.loc11_21, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] +// CHECK:STDOUT: %bound_method.loc11_21.2: = bound_method %int_3, %specific_fn.loc11_21 [concrete = constants.%bound_method.763] +// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc11_21: init %i32 = call %bound_method.loc11_21.2(%int_3) [concrete = constants.%int_3.410] +// CHECK:STDOUT: %.loc11_21.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc11_21 [concrete = constants.%int_3.410] +// CHECK:STDOUT: %.loc11_21.2: %i32 = converted %int_3, %.loc11_21.1 [concrete = constants.%int_3.410] +// CHECK:STDOUT: %F.call: init %i32 = call %F.ref(%.loc11_21.2) [concrete = constants.%int_3.410] +// CHECK:STDOUT: %impl.elem0.loc11_22: %.b08 = impl_witness_access constants.%ImplicitAs.impl_witness.416, element0 [concrete = constants.%Int.as.ImplicitAs.impl.Convert.69e] +// CHECK:STDOUT: %bound_method.loc11_22.1: = bound_method %F.call, %impl.elem0.loc11_22 [concrete = constants.%Int.as.ImplicitAs.impl.Convert.bound] +// CHECK:STDOUT: %specific_fn.loc11_22: = specific_function %impl.elem0.loc11_22, @Int.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Int.as.ImplicitAs.impl.Convert.specific_fn] +// CHECK:STDOUT: %bound_method.loc11_22.2: = bound_method %F.call, %specific_fn.loc11_22 [concrete = constants.%bound_method.545] +// CHECK:STDOUT: %.loc11_22.1: %i32 = value_of_initializer %F.call [concrete = constants.%int_3.410] +// CHECK:STDOUT: %.loc11_22.2: %i32 = converted %F.call, %.loc11_22.1 [concrete = constants.%int_3.410] +// CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.call: init Core.IntLiteral = call %bound_method.loc11_22.2(%.loc11_22.2) [concrete = constants.%int_3.1ba] +// CHECK:STDOUT: %.loc11_22.3: Core.IntLiteral = value_of_initializer %Int.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_3.1ba] +// CHECK:STDOUT: %.loc11_22.4: Core.IntLiteral = converted %F.call, %.loc11_22.3 [concrete = constants.%int_3.1ba] +// CHECK:STDOUT: %array_type: type = array_type %.loc11_22.4, %i32 [concrete = constants.%array_type] +// CHECK:STDOUT: } // CHECK:STDOUT: %n: %array_type = value_binding n, %.loc11_35.14 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/eval/branch.carbon b/toolchain/check/testdata/eval/branch.carbon index b0e5b11fce40..a3c0c8c1fb82 100644 --- a/toolchain/check/testdata/eval/branch.carbon +++ b/toolchain/check/testdata/eval/branch.carbon @@ -73,10 +73,14 @@ var b: if false then A else B = MakeB(); // CHECK:STDOUT: %B: type = class_type @B [concrete] // CHECK:STDOUT: %true: bool = bool_literal true [concrete] // CHECK:STDOUT: %pattern_type.9ef: type = pattern_type %A [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.9ef = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.9ef = var_pattern %a.patt [concrete] // CHECK:STDOUT: %MakeA.type: type = fn_type @MakeA [concrete] // CHECK:STDOUT: %MakeA: %MakeA.type = struct_value () [concrete] // CHECK:STDOUT: %false: bool = bool_literal false [concrete] // CHECK:STDOUT: %pattern_type.e39: type = pattern_type %B [concrete] +// CHECK:STDOUT: %b.patt.492: %pattern_type.e39 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.e39 = var_pattern %b.patt.492 [concrete] // CHECK:STDOUT: %MakeB.type: type = fn_type @MakeB [concrete] // CHECK:STDOUT: %MakeB: %MakeB.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -88,8 +92,8 @@ var b: if false then A else B = MakeB(); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.9ef = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.9ef = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.9ef = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.9ef = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %A = var %a.var_patt [concrete] // CHECK:STDOUT: %.loc14_14.1: type = splice_block %.loc14_14.3 [concrete = constants.%A] { @@ -101,8 +105,8 @@ var b: if false then A else B = MakeB(); // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %A = ref_binding a, %a.var [concrete = %a.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.e39 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.e39 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.e39 = ref_binding_pattern b [concrete = constants.%b.patt.492] +// CHECK:STDOUT: %b.var_patt: %pattern_type.e39 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %B = var %b.var_patt [concrete] // CHECK:STDOUT: %.loc15_15.1: type = splice_block %.loc15_15.3 [concrete = constants.%B] { @@ -137,10 +141,14 @@ var b: if false then A else B = MakeB(); // CHECK:STDOUT: %B: type = class_type @B [concrete] // CHECK:STDOUT: %true: bool = bool_literal true [concrete] // CHECK:STDOUT: %pattern_type.9ef: type = pattern_type %A [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.9ef = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.9ef = var_pattern %a.patt [concrete] // CHECK:STDOUT: %MakeA.type: type = fn_type @MakeA [concrete] // CHECK:STDOUT: %MakeA: %MakeA.type = struct_value () [concrete] // CHECK:STDOUT: %false: bool = bool_literal false [concrete] // CHECK:STDOUT: %pattern_type.e39: type = pattern_type %B [concrete] +// CHECK:STDOUT: %b.patt.492: %pattern_type.e39 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.e39 = var_pattern %b.patt.492 [concrete] // CHECK:STDOUT: %MakeB.type: type = fn_type @MakeB [concrete] // CHECK:STDOUT: %MakeB: %MakeB.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -152,8 +160,8 @@ var b: if false then A else B = MakeB(); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.9ef = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.9ef = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.9ef = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.9ef = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %A = var %a.var_patt [concrete] // CHECK:STDOUT: %.loc10_14.1: type = splice_block %.loc10_14.3 [concrete = constants.%A] { @@ -165,8 +173,8 @@ var b: if false then A else B = MakeB(); // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %A = ref_binding a, %a.var [concrete = %a.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.e39 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.e39 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.e39 = ref_binding_pattern b [concrete = constants.%b.patt.492] +// CHECK:STDOUT: %b.var_patt: %pattern_type.e39 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %B = var %b.var_patt [concrete] // CHECK:STDOUT: %.loc11_15.1: type = splice_block %.loc11_15.3 [concrete = constants.%B] { diff --git a/toolchain/check/testdata/eval/call.carbon b/toolchain/check/testdata/eval/call.carbon index 2aa69fdf812c..dc8332f61064 100644 --- a/toolchain/check/testdata/eval/call.carbon +++ b/toolchain/check/testdata/eval/call.carbon @@ -99,7 +99,7 @@ fn UseFGenerically(X:! i32) { // CHECK:STDERR: var unused v: F(X) = {}; // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~ // CHECK:STDERR: - // CHECK:STDERR: fail_todo_dependent_call_type.carbon:[[@LINE+4]]:3: error: cannot access member of interface `Core.Destroy` in type `` that does not implement that interface [MissingImplInMemberAccess] + // CHECK:STDERR: fail_todo_dependent_call_type.carbon:[[@LINE+4]]:3: error: cannot access member of interface `Core.Destroy` in type `` that does not implement that interface [MissingImplInMemberAccess] // CHECK:STDERR: var unused v: F(X) = {}; // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~ // CHECK:STDERR: @@ -231,6 +231,8 @@ fn H() { // CHECK:STDOUT: %int_2.295: %i32 = int_value 2 [concrete] // CHECK:STDOUT: %int_3.410: %i32 = int_value 3 [concrete] // CHECK:STDOUT: %tuple.479: %tuple.type.555 = tuple_value (%int_1.0c6, %int_2.295, %int_3.410) [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.777 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.777 = var_pattern %a.patt [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.3: type = fn_type @Destroy.Op.loc8_3.3 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.3: %Destroy.Op.type.1d8f74.3 = struct_value () [concrete] // CHECK:STDOUT: } @@ -238,8 +240,8 @@ fn H() { // CHECK:STDOUT: fn @G() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.777 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.777 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.777 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.777 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %tuple.type.555 = var %a.var_patt // CHECK:STDOUT: %F.ref: %F.type = name_ref F, file.%F.decl [concrete = constants.%F] @@ -282,6 +284,8 @@ fn H() { // CHECK:STDOUT: %tuple.type.555: type = tuple_type (%i32, %i32, %i32) [concrete] // CHECK:STDOUT: %.718: Core.Form = init_form %tuple.type.555 [concrete] // CHECK:STDOUT: %pattern_type.777: type = pattern_type %tuple.type.555 [concrete] +// CHECK:STDOUT: %return.param_patt.789: %pattern_type.777 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e16: %pattern_type.777 = return_slot_pattern %return.param_patt.789, %tuple.type.555 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] @@ -326,8 +330,8 @@ fn H() { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.777 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.777 = return_slot_pattern %return.param_patt, %.loc5_30.2 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.777 = out_param_pattern [concrete = constants.%return.param_patt.789] +// CHECK:STDOUT: %return.patt: %pattern_type.777 = return_slot_pattern %return.param_patt, %.loc5_30.2 [concrete = constants.%return.patt.e16] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc5_17: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %i32.loc5_22: type = type_literal constants.%i32 [concrete = constants.%i32] @@ -378,8 +382,8 @@ fn H() { // CHECK:STDOUT: fn @H() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: = ref_binding_pattern a [concrete = ] +// CHECK:STDOUT: %a.var_patt: = var_pattern %a.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref = var %a.var_patt [concrete = ] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -411,6 +415,8 @@ fn H() { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %.a44: Core.Form = init_form %C [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C [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] @@ -427,8 +433,8 @@ fn H() { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C.ref [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C.ref [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %.loc6_16: Core.Form = init_form %C.ref [concrete = constants.%.a44] diff --git a/toolchain/check/testdata/eval/symbolic.carbon b/toolchain/check/testdata/eval/symbolic.carbon index 9c754b611d13..4413685d2b1b 100644 --- a/toolchain/check/testdata/eval/symbolic.carbon +++ b/toolchain/check/testdata/eval/symbolic.carbon @@ -75,6 +75,8 @@ fn F() { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %Z.impl_witness: = impl_witness @empty_struct_type.as.Z.impl.%Z.impl_witness_table [concrete] // CHECK:STDOUT: %Z.facet: %Z.type = facet_value %empty_struct_type, (%Z.impl_witness) [concrete] +// CHECK:STDOUT: %pattern_type.5d7: type = pattern_type %Z.type [concrete] +// CHECK:STDOUT: %U.patt.4a7: %pattern_type.5d7 = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %U.013: %Z.type = symbolic_binding U, 0 [symbolic] // CHECK:STDOUT: %U.as_type.ff1: type = facet_access_type %U.013 [symbolic] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -113,10 +115,12 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @E(constants.%U.013) { +// CHECK:STDOUT: %U.patt.loc6_12.2 => constants.%U.patt.4a7 // CHECK:STDOUT: %U.loc6_12.1 => constants.%U.013 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @E(constants.%Z.facet) { +// CHECK:STDOUT: %U.patt.loc6_12.2 => constants.%U.patt.4a7 // CHECK:STDOUT: %U.loc6_12.1 => constants.%Z.facet // CHECK:STDOUT: // CHECK:STDOUT: !definition: diff --git a/toolchain/check/testdata/facet/access.carbon b/toolchain/check/testdata/facet/access.carbon index 0b284d9f8419..9432700f8cd0 100644 --- a/toolchain/check/testdata/facet/access.carbon +++ b/toolchain/check/testdata/facet/access.carbon @@ -424,6 +424,8 @@ fn F(U:! W, V:! Z(.Self) where .Z1 impls (Y where .Y1 impls (X where .X1 = U))) // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] // CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, @I.WithSelf.%I.WithSelf.DoIt.decl [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %I.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: %I.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %I.WithSelf.DoIt.type.0a5: type = fn_type @I.WithSelf.DoIt, @I.WithSelf(%T) [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] @@ -458,6 +460,7 @@ fn F(U:! W, V:! Z(.Self) where .Z1 impls (Y where .Y1 impls (X where .X1 = U))) // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Use(constants.%T) { +// CHECK:STDOUT: %T.patt.loc8_9.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_9.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -467,10 +470,14 @@ fn F(U:! W, V:! Z(.Self) where .Z1 impls (Y where .Y1 impls (X where .X1 = U))) // 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.WithSelf.%I.WithSelf.Make.decl [concrete] +// CHECK:STDOUT: %pattern_type.6cb: type = pattern_type %I.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.6cb = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: %I.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] // CHECK:STDOUT: %.0ce: Core.Form = init_form %T.as_type [symbolic] // CHECK:STDOUT: %pattern_type.b3a: type = pattern_type %T.as_type [symbolic] +// CHECK:STDOUT: %return.param_patt.b82: %pattern_type.b3a = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.2e6: %pattern_type.b3a = return_slot_pattern %return.param_patt.b82, %T.as_type [symbolic] // CHECK:STDOUT: %I.WithSelf.Make.type.9c0: type = fn_type @I.WithSelf.Make, @I.WithSelf(%T) [symbolic] // CHECK:STDOUT: %I.lookup_impl_witness: = lookup_impl_witness %T, @I [symbolic] // CHECK:STDOUT: %.889: type = fn_type_with_self_type %I.WithSelf.Make.type.9c0, %T [symbolic] @@ -504,10 +511,13 @@ fn F(U:! W, V:! Z(.Self) where .Z1 impls (Y where .Y1 impls (X where .X1 = U))) // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Use(constants.%T) { +// CHECK:STDOUT: %T.patt.loc8_9.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_9.1 => constants.%T // CHECK:STDOUT: %T.as_type.loc8_18.1 => constants.%T.as_type // CHECK:STDOUT: %.loc8_18.2 => constants.%.0ce // CHECK:STDOUT: %pattern_type => constants.%pattern_type.b3a +// CHECK:STDOUT: %return.param_patt.loc8_18.2 => constants.%return.param_patt.b82 +// CHECK:STDOUT: %return.patt.loc8_15.2 => constants.%return.patt.2e6 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- access_assoc_method.carbon @@ -519,10 +529,15 @@ fn F(U:! W, V:! Z(.Self) where .Z1 impls (Y where .Y1 impls (X where .X1 = U))) // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.6cb: type = pattern_type %I.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.6cb = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: %I.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] // CHECK:STDOUT: %pattern_type.b3a: type = pattern_type %T.as_type [symbolic] +// CHECK:STDOUT: %x.param_patt: %pattern_type.b3a = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt: %pattern_type.b3a = at_binding_pattern x, %x.param_patt [symbolic] // CHECK:STDOUT: %.0ce: Core.Form = init_form %T.as_type [symbolic] +// CHECK:STDOUT: %return.param_patt.b82: %pattern_type.b3a = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.2e6: %pattern_type.b3a = return_slot_pattern %return.param_patt.b82, %T.as_type [symbolic] // CHECK:STDOUT: %Use.type: type = fn_type @Use [concrete] // CHECK:STDOUT: %Use: %Use.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type [symbolic] @@ -535,11 +550,11 @@ fn F(U:! W, V:! Z(.Self) where .Z1 impls (Y where .Y1 impls (X where .X1 = U))) // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %Use.decl: %Use.type = fn_decl @Use [concrete = constants.%Use] { -// CHECK:STDOUT: %T.patt: %pattern_type.6cb = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %x.param_patt: @Use.%pattern_type (%pattern_type.b3a) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @Use.%pattern_type (%pattern_type.b3a) = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @Use.%pattern_type (%pattern_type.b3a) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @Use.%pattern_type (%pattern_type.b3a) = return_slot_pattern %return.param_patt, %.loc9_24.3 [concrete] +// CHECK:STDOUT: %T.patt.loc9_9.1: %pattern_type.6cb = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.param_patt.loc9_16.1: @Use.%pattern_type (%pattern_type.b3a) = value_param_pattern [symbolic = %x.param_patt.loc9_16.2 (constants.%x.param_patt)] +// CHECK:STDOUT: %x.patt.loc9_16.1: @Use.%pattern_type (%pattern_type.b3a) = at_binding_pattern x, %x.param_patt.loc9_16.1 [symbolic = %x.patt.loc9_16.2 (constants.%x.patt)] +// CHECK:STDOUT: %return.param_patt.loc9_24.1: @Use.%pattern_type (%pattern_type.b3a) = out_param_pattern [symbolic = %return.param_patt.loc9_24.2 (constants.%return.param_patt.b82)] +// CHECK:STDOUT: %return.patt.loc9_21.1: @Use.%pattern_type (%pattern_type.b3a) = return_slot_pattern %return.param_patt.loc9_24.1, %.loc9_24.3 [symbolic = %return.patt.loc9_21.2 (constants.%return.patt.2e6)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc9_24: %I.type = name_ref T, %T.loc9_9.2 [symbolic = %T.loc9_9.1 (constants.%T)] // CHECK:STDOUT: %T.as_type.loc9_24: type = facet_access_type %T.ref.loc9_24 [symbolic = %T.as_type.loc9_18.1 (constants.%T.as_type)] @@ -563,10 +578,15 @@ fn F(U:! W, V:! Z(.Self) where .Z1 impls (Y where .Y1 impls (X where .X1 = U))) // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Use(%T.loc9_9.2: %I.type) { +// CHECK:STDOUT: %T.patt.loc9_9.2: %pattern_type.6cb = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_9.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc9_9.1: %I.type = symbolic_binding T, 0 [symbolic = %T.loc9_9.1 (constants.%T)] // CHECK:STDOUT: %T.as_type.loc9_18.1: type = facet_access_type %T.loc9_9.1 [symbolic = %T.as_type.loc9_18.1 (constants.%T.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc9_18.1 [symbolic = %pattern_type (constants.%pattern_type.b3a)] +// CHECK:STDOUT: %x.param_patt.loc9_16.2: @Use.%pattern_type (%pattern_type.b3a) = value_param_pattern [symbolic = %x.param_patt.loc9_16.2 (constants.%x.param_patt)] +// CHECK:STDOUT: %x.patt.loc9_16.2: @Use.%pattern_type (%pattern_type.b3a) = at_binding_pattern x, %x.param_patt.loc9_16.2 [symbolic = %x.patt.loc9_16.2 (constants.%x.patt)] // CHECK:STDOUT: %.loc9_24.2: Core.Form = init_form %T.as_type.loc9_18.1 [symbolic = %.loc9_24.2 (constants.%.0ce)] +// CHECK:STDOUT: %return.param_patt.loc9_24.2: @Use.%pattern_type (%pattern_type.b3a) = out_param_pattern [symbolic = %return.param_patt.loc9_24.2 (constants.%return.param_patt.b82)] +// CHECK:STDOUT: %return.patt.loc9_21.2: @Use.%pattern_type (%pattern_type.b3a) = return_slot_pattern %return.param_patt.loc9_24.2, %T.as_type.loc9_18.1 [symbolic = %return.patt.loc9_21.2 (constants.%return.patt.2e6)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc9_18.1 [symbolic = %require_complete (constants.%require_complete)] @@ -582,7 +602,8 @@ fn F(U:! W, V:! Z(.Self) where .Z1 impls (Y where .Y1 impls (X where .X1 = U))) // CHECK:STDOUT: %Copy.ref: %I.assoc_type = name_ref Copy, @I.WithSelf.%assoc0 [concrete = constants.%assoc0] // CHECK:STDOUT: %impl.elem0.loc10_11.1: @Use.%.loc10_11 (%.c06) = impl_witness_access constants.%I.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc10_11.2 (constants.%impl.elem0)] // CHECK:STDOUT: %bound_method.loc10_11: = bound_method %x.ref, %impl.elem0.loc10_11.1 -// CHECK:STDOUT: %.loc10_17: %I.type = converted constants.%T.as_type, constants.%T [symbolic = %T.loc9_9.1 (constants.%T)] +// CHECK:STDOUT: %.loc10_17.1: %I.type = converted constants.%T.as_type, constants.%T [symbolic = %T.loc9_9.1 (constants.%T)] +// CHECK:STDOUT: %.loc10_17.2: %I.type = converted constants.%T.as_type, constants.%T [symbolic = %T.loc9_9.1 (constants.%T)] // CHECK:STDOUT: %specific_impl_fn.loc10_11.1: = specific_impl_function %impl.elem0.loc10_11.1, @I.WithSelf.Copy(constants.%T) [symbolic = %specific_impl_fn.loc10_11.2 (constants.%specific_impl_fn)] // CHECK:STDOUT: %bound_method.loc10_17: = bound_method %x.ref, %specific_impl_fn.loc10_11.1 // CHECK:STDOUT: %.loc9_24.1: ref @Use.%T.as_type.loc9_18.1 (%T.as_type) = splice_block %return.param {} @@ -592,10 +613,15 @@ fn F(U:! W, V:! Z(.Self) where .Z1 impls (Y where .Y1 impls (X where .X1 = U))) // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Use(constants.%T) { +// CHECK:STDOUT: %T.patt.loc9_9.2 => constants.%T.patt // CHECK:STDOUT: %T.loc9_9.1 => constants.%T // CHECK:STDOUT: %T.as_type.loc9_18.1 => constants.%T.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.b3a +// CHECK:STDOUT: %x.param_patt.loc9_16.2 => constants.%x.param_patt +// CHECK:STDOUT: %x.patt.loc9_16.2 => constants.%x.patt // CHECK:STDOUT: %.loc9_24.2 => constants.%.0ce +// CHECK:STDOUT: %return.param_patt.loc9_24.2 => constants.%return.param_patt.b82 +// CHECK:STDOUT: %return.patt.loc9_21.2 => constants.%return.patt.2e6 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- access_selfless_method.carbon @@ -605,9 +631,13 @@ fn F(U:! W, V:! Z(.Self) where .Z1 impls (Y where .Y1 impls (X where .X1 = U))) // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] // CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, @I.WithSelf.%I.WithSelf.Hello.decl [concrete] +// CHECK:STDOUT: %pattern_type.6cb: type = pattern_type %I.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.6cb = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: %I.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] // CHECK:STDOUT: %pattern_type.b3a: type = pattern_type %T.as_type [symbolic] +// CHECK:STDOUT: %x.param_patt: %pattern_type.b3a = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt: %pattern_type.b3a = at_binding_pattern x, %x.param_patt [symbolic] // CHECK:STDOUT: %I.WithSelf.Hello.type.d5c: type = fn_type @I.WithSelf.Hello, @I.WithSelf(%T) [symbolic] // CHECK:STDOUT: %I.lookup_impl_witness: = lookup_impl_witness %T, @I [symbolic] // CHECK:STDOUT: %.244: type = fn_type_with_self_type %I.WithSelf.Hello.type.d5c, %T [symbolic] @@ -638,9 +668,12 @@ fn F(U:! W, V:! Z(.Self) where .Z1 impls (Y where .Y1 impls (X where .X1 = U))) // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Use(constants.%T) { +// CHECK:STDOUT: %T.patt.loc8_9.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_9.1 => constants.%T // CHECK:STDOUT: %T.as_type.loc8_18.1 => constants.%T.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.b3a +// CHECK:STDOUT: %x.param_patt.loc8_16.2 => constants.%x.param_patt +// CHECK:STDOUT: %x.patt.loc8_16.2 => constants.%x.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- access_assoc_method_indirect.carbon @@ -649,10 +682,16 @@ fn F(U:! W, V:! Z(.Self) where .Z1 impls (Y where .Y1 impls (X where .X1 = U))) // 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.WithSelf.%I.WithSelf.Copy.decl [concrete] +// CHECK:STDOUT: %pattern_type.6cb: type = pattern_type %I.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.6cb = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: %I.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] // CHECK:STDOUT: %pattern_type.b3a: type = pattern_type %T.as_type [symbolic] +// CHECK:STDOUT: %x.param_patt: %pattern_type.b3a = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt: %pattern_type.b3a = at_binding_pattern x, %x.param_patt [symbolic] // CHECK:STDOUT: %.0ce: Core.Form = init_form %T.as_type [symbolic] +// CHECK:STDOUT: %return.param_patt.b82: %pattern_type.b3a = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.2e6: %pattern_type.b3a = return_slot_pattern %return.param_patt.b82, %T.as_type [symbolic] // CHECK:STDOUT: %I.WithSelf.Copy.type.54f: type = fn_type @I.WithSelf.Copy, @I.WithSelf(%T) [symbolic] // CHECK:STDOUT: %I.lookup_impl_witness: = lookup_impl_witness %T, @I [symbolic] // CHECK:STDOUT: %.c06: type = fn_type_with_self_type %I.WithSelf.Copy.type.54f, %T [symbolic] @@ -680,7 +719,8 @@ fn F(U:! W, V:! Z(.Self) where .Z1 impls (Y where .Y1 impls (X where .X1 = U))) // CHECK:STDOUT: %Copy.ref: %I.assoc_type = name_ref Copy, @I.WithSelf.%assoc0 [concrete = constants.%assoc0] // CHECK:STDOUT: %impl.elem0.loc10_14.1: @UseIndirect.%.loc10_14.2 (%.c06) = impl_witness_access constants.%I.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc10_14.2 (constants.%impl.elem0)] // CHECK:STDOUT: %bound_method.loc10_11: = bound_method %x.ref, %impl.elem0.loc10_14.1 -// CHECK:STDOUT: %.loc10_21: %I.type = converted constants.%T.as_type, constants.%T [symbolic = %T.loc8_17.1 (constants.%T)] +// CHECK:STDOUT: %.loc10_21.1: %I.type = converted constants.%T.as_type, constants.%T [symbolic = %T.loc8_17.1 (constants.%T)] +// CHECK:STDOUT: %.loc10_21.2: %I.type = converted constants.%T.as_type, constants.%T [symbolic = %T.loc8_17.1 (constants.%T)] // CHECK:STDOUT: %specific_impl_fn.loc10_14.1: = specific_impl_function %impl.elem0.loc10_14.1, @I.WithSelf.Copy(constants.%T) [symbolic = %specific_impl_fn.loc10_14.2 (constants.%specific_impl_fn)] // CHECK:STDOUT: %bound_method.loc10_21: = bound_method %x.ref, %specific_impl_fn.loc10_14.1 // CHECK:STDOUT: @@ -690,10 +730,15 @@ fn F(U:! W, V:! Z(.Self) where .Z1 impls (Y where .Y1 impls (X where .X1 = U))) // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @UseIndirect(constants.%T) { +// CHECK:STDOUT: %T.patt.loc8_17.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_17.1 => constants.%T // CHECK:STDOUT: %T.as_type.loc8_26.1 => constants.%T.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.b3a +// CHECK:STDOUT: %x.param_patt.loc8_24.2 => constants.%x.param_patt +// CHECK:STDOUT: %x.patt.loc8_24.2 => constants.%x.patt // CHECK:STDOUT: %.loc8_32.2 => constants.%.0ce +// CHECK:STDOUT: %return.param_patt.loc8_32.2 => constants.%return.param_patt.b82 +// CHECK:STDOUT: %return.patt.loc8_29.2 => constants.%return.patt.2e6 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- access_constant_in_self_facet.carbon @@ -713,12 +758,15 @@ fn F(U:! W, V:! Z(.Self) where .Z1 impls (Y where .Y1 impls (X where .X1 = U))) // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %A_where.type: type = facet_type <@A where %impl.elem0 = %empty_tuple.type> [concrete] // CHECK:STDOUT: %pattern_type.634: type = pattern_type %A_where.type [concrete] +// CHECK:STDOUT: %AA.patt: %pattern_type.634 = symbolic_binding_pattern AA, 0 [symbolic] // CHECK:STDOUT: %AA: %A_where.type = symbolic_binding AA, 0 [symbolic] // CHECK:STDOUT: %AA.as_type: type = facet_access_type %AA [symbolic] // CHECK:STDOUT: %A.lookup_impl_witness.9cf: = lookup_impl_witness %AA, @A [symbolic] // CHECK:STDOUT: %A.facet: %A.type = facet_value %AA.as_type, (%A.lookup_impl_witness.9cf) [symbolic] // CHECK:STDOUT: %.262: Core.Form = init_form %empty_tuple.type [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern %return.param_patt, %empty_tuple.type [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -726,9 +774,9 @@ fn F(U:! W, V:! Z(.Self) where .Z1 impls (Y where .Y1 impls (X where .X1 = U))) // CHECK:STDOUT: file { // CHECK:STDOUT: %A.decl: type = interface_decl @A [concrete = constants.%A.type] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %AA.patt: %pattern_type.634 = symbolic_binding_pattern AA, 0 [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern %return.param_patt, %impl.elem0.loc6_33 [concrete] +// CHECK:STDOUT: %AA.patt.loc6_8.1: %pattern_type.634 = symbolic_binding_pattern AA, 0 [symbolic = %AA.patt.loc6_8.2 (constants.%AA.patt)] +// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern %return.param_patt, %impl.elem0.loc6_33 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %AA.ref: %A_where.type = name_ref AA, %AA.loc6_8.2 [symbolic = %AA.loc6_8.1 (constants.%AA)] // CHECK:STDOUT: %AA.as_type.loc6_33.2: type = facet_access_type %AA.ref [symbolic = %AA.as_type.loc6_33.1 (constants.%AA.as_type)] @@ -776,6 +824,7 @@ fn F(U:! W, V:! Z(.Self) where .Z1 impls (Y where .Y1 impls (X where .X1 = U))) // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%AA.loc6_8.2: %A_where.type) { +// CHECK:STDOUT: %AA.patt.loc6_8.2: %pattern_type.634 = symbolic_binding_pattern AA, 0 [symbolic = %AA.patt.loc6_8.2 (constants.%AA.patt)] // CHECK:STDOUT: %AA.loc6_8.1: %A_where.type = symbolic_binding AA, 0 [symbolic = %AA.loc6_8.1 (constants.%AA)] // CHECK:STDOUT: %AA.as_type.loc6_33.1: type = facet_access_type %AA.loc6_8.1 [symbolic = %AA.as_type.loc6_33.1 (constants.%AA.as_type)] // CHECK:STDOUT: @@ -807,6 +856,7 @@ fn F(U:! W, V:! Z(.Self) where .Z1 impls (Y where .Y1 impls (X where .X1 = U))) // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%AA) { +// CHECK:STDOUT: %AA.patt.loc6_8.2 => constants.%AA.patt // CHECK:STDOUT: %AA.loc6_8.1 => constants.%AA // CHECK:STDOUT: %AA.as_type.loc6_33.1 => constants.%AA.as_type // CHECK:STDOUT: } @@ -843,16 +893,21 @@ fn F(U:! W, V:! Z(.Self) where .Z1 impls (Y where .Y1 impls (X where .X1 = U))) // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %facet_type.121: type = facet_type <@A & @B where %impl.elem0.bfe = %empty_tuple.type and %impl.elem0.3d7 = %empty_struct_type> [concrete] // CHECK:STDOUT: %pattern_type.a40: type = pattern_type %facet_type.121 [concrete] +// CHECK:STDOUT: %AB.patt: %pattern_type.a40 = symbolic_binding_pattern AB, 0 [symbolic] // CHECK:STDOUT: %AB: %facet_type.121 = symbolic_binding AB, 0 [symbolic] // CHECK:STDOUT: %AB.as_type: type = facet_access_type %AB [symbolic] // CHECK:STDOUT: %A.lookup_impl_witness.ed2: = lookup_impl_witness %AB, @A [symbolic] // CHECK:STDOUT: %.262: Core.Form = init_form %empty_tuple.type [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %return.param_patt.900: %pattern_type.cb1 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.427: %pattern_type.cb1 = return_slot_pattern %return.param_patt.900, %empty_tuple.type [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %B.lookup_impl_witness.77c: = lookup_impl_witness %AB, @B [symbolic] // CHECK:STDOUT: %.469: Core.Form = init_form %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.a96: type = pattern_type %empty_struct_type [concrete] +// CHECK:STDOUT: %return.param_patt.296: %pattern_type.a96 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.c45: %pattern_type.a96 = return_slot_pattern %return.param_patt.296, %empty_struct_type [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -864,9 +919,9 @@ fn F(U:! W, V:! Z(.Self) where .Z1 impls (Y where .Y1 impls (X where .X1 = U))) // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %AB.patt: %pattern_type.a40 = symbolic_binding_pattern AB, 0 [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern %return.param_patt, %impl.elem0.loc14_49 [concrete] +// CHECK:STDOUT: %AB.patt.loc14_8.1: %pattern_type.a40 = symbolic_binding_pattern AB, 0 [symbolic = %AB.patt.loc14_8.2 (constants.%AB.patt)] +// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern [concrete = constants.%return.param_patt.900] +// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern %return.param_patt, %impl.elem0.loc14_49 [concrete = constants.%return.patt.427] // CHECK:STDOUT: } { // CHECK:STDOUT: %AB.ref: %facet_type.121 = name_ref AB, %AB.loc14_8.2 [symbolic = %AB.loc14_8.1 (constants.%AB)] // CHECK:STDOUT: %AB.as_type.loc14_49.2: type = facet_access_type %AB.ref [symbolic = %AB.as_type.loc14_49.1 (constants.%AB.as_type)] @@ -909,9 +964,9 @@ fn F(U:! W, V:! Z(.Self) where .Z1 impls (Y where .Y1 impls (X where .X1 = U))) // CHECK:STDOUT: %return: ref %empty_tuple.type = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %AB.patt: %pattern_type.a40 = symbolic_binding_pattern AB, 0 [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.a96 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.a96 = return_slot_pattern %return.param_patt, %impl.elem0.loc18_49 [concrete] +// CHECK:STDOUT: %AB.patt.loc18_8.1: %pattern_type.a40 = symbolic_binding_pattern AB, 0 [symbolic = %AB.patt.loc18_8.2 (constants.%AB.patt)] +// CHECK:STDOUT: %return.param_patt: %pattern_type.a96 = out_param_pattern [concrete = constants.%return.param_patt.296] +// CHECK:STDOUT: %return.patt: %pattern_type.a96 = return_slot_pattern %return.param_patt, %impl.elem0.loc18_49 [concrete = constants.%return.patt.c45] // CHECK:STDOUT: } { // CHECK:STDOUT: %AB.ref: %facet_type.121 = name_ref AB, %AB.loc18_8.2 [symbolic = %AB.loc18_8.1 (constants.%AB)] // CHECK:STDOUT: %AB.as_type.loc18_49.2: type = facet_access_type %AB.ref [symbolic = %AB.as_type.loc18_49.1 (constants.%AB.as_type)] @@ -956,6 +1011,7 @@ fn F(U:! W, V:! Z(.Self) where .Z1 impls (Y where .Y1 impls (X where .X1 = U))) // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%AB.loc14_8.2: %facet_type.121) { +// CHECK:STDOUT: %AB.patt.loc14_8.2: %pattern_type.a40 = symbolic_binding_pattern AB, 0 [symbolic = %AB.patt.loc14_8.2 (constants.%AB.patt)] // CHECK:STDOUT: %AB.loc14_8.1: %facet_type.121 = symbolic_binding AB, 0 [symbolic = %AB.loc14_8.1 (constants.%AB)] // CHECK:STDOUT: %AB.as_type.loc14_49.1: type = facet_access_type %AB.loc14_8.1 [symbolic = %AB.as_type.loc14_49.1 (constants.%AB.as_type)] // CHECK:STDOUT: @@ -971,6 +1027,7 @@ fn F(U:! W, V:! Z(.Self) where .Z1 impls (Y where .Y1 impls (X where .X1 = U))) // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @G(%AB.loc18_8.2: %facet_type.121) { +// CHECK:STDOUT: %AB.patt.loc18_8.2: %pattern_type.a40 = symbolic_binding_pattern AB, 0 [symbolic = %AB.patt.loc18_8.2 (constants.%AB.patt)] // CHECK:STDOUT: %AB.loc18_8.1: %facet_type.121 = symbolic_binding AB, 0 [symbolic = %AB.loc18_8.1 (constants.%AB)] // CHECK:STDOUT: %AB.as_type.loc18_49.1: type = facet_access_type %AB.loc18_8.1 [symbolic = %AB.as_type.loc18_49.1 (constants.%AB.as_type)] // CHECK:STDOUT: @@ -986,11 +1043,13 @@ fn F(U:! W, V:! Z(.Self) where .Z1 impls (Y where .Y1 impls (X where .X1 = U))) // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%AB) { +// CHECK:STDOUT: %AB.patt.loc14_8.2 => constants.%AB.patt // CHECK:STDOUT: %AB.loc14_8.1 => constants.%AB // CHECK:STDOUT: %AB.as_type.loc14_49.1 => constants.%AB.as_type // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%AB) { +// CHECK:STDOUT: %AB.patt.loc18_8.2 => constants.%AB.patt // CHECK:STDOUT: %AB.loc18_8.1 => constants.%AB // CHECK:STDOUT: %AB.as_type.loc18_49.1 => constants.%AB.as_type // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/facet/call_combined_impl_witness.carbon b/toolchain/check/testdata/facet/call_combined_impl_witness.carbon index 8d62f069a3ae..8cd4be2b6823 100644 --- a/toolchain/check/testdata/facet/call_combined_impl_witness.carbon +++ b/toolchain/check/testdata/facet/call_combined_impl_witness.carbon @@ -96,9 +96,12 @@ fn F() { // CHECK:STDOUT: %type.as.BitAndWith.impl.Op.bound.188: = bound_method %facet_type.b34, %type.as.BitAndWith.impl.Op [concrete] // CHECK:STDOUT: %facet_type.22e: type = facet_type <@Empty & @A & @B> [concrete] // CHECK:STDOUT: %pattern_type.a67: type = pattern_type %facet_type.22e [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.a67 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: %facet_type.22e = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] // CHECK:STDOUT: %pattern_type.653: type = pattern_type %T.as_type [symbolic] +// CHECK:STDOUT: %t.param_patt.4f9: %pattern_type.653 = value_param_pattern [symbolic] +// CHECK:STDOUT: %t.patt.ecc: %pattern_type.653 = at_binding_pattern t, %t.param_patt.4f9 [symbolic] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type [symbolic] @@ -126,6 +129,8 @@ fn F() { // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %facet_value: %facet_type.22e = facet_value %C, (%Empty.impl_witness, %A.impl_witness, %B.impl_witness) [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %t.param_patt.5f9: %pattern_type.98b = value_param_pattern [concrete] +// CHECK:STDOUT: %t.patt.c3d: %pattern_type.98b = at_binding_pattern t, %t.param_patt.5f9 [concrete] // CHECK:STDOUT: %G.specific_fn: = specific_function %G, @G(%facet_value) [concrete] // CHECK:STDOUT: %.115: ref %C = temporary invalid, %C.val [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] @@ -177,9 +182,9 @@ fn F() { // CHECK:STDOUT: %B.ref: type = name_ref B, file.%B.decl [concrete = constants.%B.type] // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %T.patt: %pattern_type.a67 = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %t.param_patt: @G.%pattern_type (%pattern_type.653) = value_param_pattern [concrete] -// CHECK:STDOUT: %t.patt: @G.%pattern_type (%pattern_type.653) = at_binding_pattern t, %t.param_patt [concrete] +// CHECK:STDOUT: %T.patt.loc33_7.1: %pattern_type.a67 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc33_7.2 (constants.%T.patt)] +// CHECK:STDOUT: %t.param_patt.loc33_26.1: @G.%pattern_type (%pattern_type.653) = value_param_pattern [symbolic = %t.param_patt.loc33_26.2 (constants.%t.param_patt.4f9)] +// CHECK:STDOUT: %t.patt.loc33_26.1: @G.%pattern_type (%pattern_type.653) = at_binding_pattern t, %t.param_patt.loc33_26.1 [symbolic = %t.patt.loc33_26.2 (constants.%t.patt.ecc)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc33_20.1: type = splice_block %.loc33_20.3 [concrete = constants.%facet_type.22e] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -314,9 +319,12 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @G(%T.loc33_7.2: %facet_type.22e) { +// CHECK:STDOUT: %T.patt.loc33_7.2: %pattern_type.a67 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc33_7.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc33_7.1: %facet_type.22e = symbolic_binding T, 0 [symbolic = %T.loc33_7.1 (constants.%T)] // CHECK:STDOUT: %T.as_type.loc33_28.1: type = facet_access_type %T.loc33_7.1 [symbolic = %T.as_type.loc33_28.1 (constants.%T.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc33_28.1 [symbolic = %pattern_type (constants.%pattern_type.653)] +// CHECK:STDOUT: %t.param_patt.loc33_26.2: @G.%pattern_type (%pattern_type.653) = value_param_pattern [symbolic = %t.param_patt.loc33_26.2 (constants.%t.param_patt.4f9)] +// CHECK:STDOUT: %t.patt.loc33_26.2: @G.%pattern_type (%pattern_type.653) = at_binding_pattern t, %t.param_patt.loc33_26.2 [symbolic = %t.patt.loc33_26.2 (constants.%t.patt.ecc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc33_28.1 [symbolic = %require_complete (constants.%require_complete)] @@ -389,8 +397,10 @@ fn F() { // CHECK:STDOUT: %.loc45_6.2: ref %C = temporary_storage // CHECK:STDOUT: %.loc45_6.3: init %C to %.loc45_6.2 = class_init () [concrete = constants.%C.val] // CHECK:STDOUT: %.loc45_8.1: init %C = converted %.loc45_6.1, %.loc45_6.3 [concrete = constants.%C.val] -// CHECK:STDOUT: %facet_value: %facet_type.22e = facet_value constants.%C, (constants.%Empty.impl_witness, constants.%A.impl_witness, constants.%B.impl_witness) [concrete = constants.%facet_value] -// CHECK:STDOUT: %.loc45_12: %facet_type.22e = converted constants.%C, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %facet_value.loc45_12.1: %facet_type.22e = facet_value constants.%C, (constants.%Empty.impl_witness, constants.%A.impl_witness, constants.%B.impl_witness) [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc45_12.1: %facet_type.22e = converted constants.%C, %facet_value.loc45_12.1 [concrete = constants.%facet_value] +// CHECK:STDOUT: %facet_value.loc45_12.2: %facet_type.22e = facet_value constants.%C, (constants.%Empty.impl_witness, constants.%A.impl_witness, constants.%B.impl_witness) [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc45_12.2: %facet_type.22e = converted constants.%C, %facet_value.loc45_12.2 [concrete = constants.%facet_value] // CHECK:STDOUT: %G.specific_fn: = specific_function %G.ref, @G(constants.%facet_value) [concrete = constants.%G.specific_fn] // CHECK:STDOUT: %.loc45_8.2: ref %C = temporary %.loc45_6.2, %.loc45_8.1 [concrete = constants.%.115] // CHECK:STDOUT: %.loc45_8.3: %C = acquire_value %.loc45_8.2 [concrete = constants.%C.val] @@ -451,9 +461,12 @@ fn F() { // CHECK:STDOUT: specific @B.WithSelf.BB(constants.%B.facet.464) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%T) { +// CHECK:STDOUT: %T.patt.loc33_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc33_7.1 => constants.%T // CHECK:STDOUT: %T.as_type.loc33_28.1 => constants.%T.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.653 +// CHECK:STDOUT: %t.param_patt.loc33_26.2 => constants.%t.param_patt.4f9 +// CHECK:STDOUT: %t.patt.loc33_26.2 => constants.%t.patt.ecc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Empty.WithSelf(constants.%T) { @@ -493,9 +506,12 @@ fn F() { // CHECK:STDOUT: specific @B.WithSelf.BB(constants.%B.facet.746) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%facet_value) { +// CHECK:STDOUT: %T.patt.loc33_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc33_7.1 => constants.%facet_value // CHECK:STDOUT: %T.as_type.loc33_28.1 => constants.%C // CHECK:STDOUT: %pattern_type => constants.%pattern_type.98b +// CHECK:STDOUT: %t.param_patt.loc33_26.2 => constants.%t.param_patt.5f9 +// CHECK:STDOUT: %t.patt.loc33_26.2 => constants.%t.patt.c3d // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type diff --git a/toolchain/check/testdata/facet/convert_class_type_to_facet_type.carbon b/toolchain/check/testdata/facet/convert_class_type_to_facet_type.carbon index c5d05228a44e..3c49830bd215 100644 --- a/toolchain/check/testdata/facet/convert_class_type_to_facet_type.carbon +++ b/toolchain/check/testdata/facet/convert_class_type_to_facet_type.carbon @@ -36,6 +36,7 @@ fn F() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type %Animal.type [concrete] +// CHECK:STDOUT: %A.patt: %pattern_type = symbolic_binding_pattern A, 0 [symbolic] // CHECK:STDOUT: %A: %Animal.type = symbolic_binding A, 0 [symbolic] // CHECK:STDOUT: %WalkAnimal.type: type = fn_type @WalkAnimal [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -68,7 +69,7 @@ fn F() { // CHECK:STDOUT: %Animal.ref: type = name_ref Animal, file.%Animal.decl [concrete = constants.%Animal.type] // CHECK:STDOUT: } // CHECK:STDOUT: %WalkAnimal.decl: %WalkAnimal.type = fn_decl @WalkAnimal [concrete = constants.%WalkAnimal] { -// CHECK:STDOUT: %A.patt: %pattern_type = symbolic_binding_pattern A, 0 [concrete] +// CHECK:STDOUT: %A.patt.loc20_23.1: %pattern_type = symbolic_binding_pattern A, 0 [symbolic = %A.patt.loc20_23.2 (constants.%A.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc20: type = splice_block %Animal.ref [concrete = constants.%Animal.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -108,6 +109,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @WalkAnimal(%A.loc20_23.2: %Animal.type) { +// CHECK:STDOUT: %A.patt.loc20_23.2: %pattern_type = symbolic_binding_pattern A, 0 [symbolic = %A.patt.loc20_23.2 (constants.%A.patt)] // CHECK:STDOUT: %A.loc20_23.1: %Animal.type = symbolic_binding A, 0 [symbolic = %A.loc20_23.1 (constants.%A)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -138,10 +140,12 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @WalkAnimal(constants.%A) { +// CHECK:STDOUT: %A.patt.loc20_23.2 => constants.%A.patt // CHECK:STDOUT: %A.loc20_23.1 => constants.%A // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @WalkAnimal(constants.%Animal.facet) { +// CHECK:STDOUT: %A.patt.loc20_23.2 => constants.%A.patt // CHECK:STDOUT: %A.loc20_23.1 => constants.%Animal.facet // CHECK:STDOUT: // CHECK:STDOUT: !definition: diff --git a/toolchain/check/testdata/facet/convert_class_type_to_generic_facet_value.carbon b/toolchain/check/testdata/facet/convert_class_type_to_generic_facet_value.carbon index 56c6aa575df5..c4aa3ad9d988 100644 --- a/toolchain/check/testdata/facet/convert_class_type_to_generic_facet_value.carbon +++ b/toolchain/check/testdata/facet/convert_class_type_to_generic_facet_value.carbon @@ -68,6 +68,7 @@ fn G() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Scalar.patt: %pattern_type.98f = symbolic_binding_pattern Scalar, 0 [symbolic] // CHECK:STDOUT: %Scalar: type = symbolic_binding Scalar, 0 [symbolic] // CHECK:STDOUT: %Generic.type.30d: type = generic_interface_type @Generic [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -94,16 +95,20 @@ fn G() { // CHECK:STDOUT: %Generic.facet: %Generic.type.b40 = facet_value %ImplsGeneric, (%Generic.impl_witness) [concrete] // CHECK:STDOUT: %Generic.WithSelf.F.type.c45: type = fn_type @Generic.WithSelf.F, @Generic.WithSelf(%GenericParam, %Generic.facet) [concrete] // CHECK:STDOUT: %Generic.WithSelf.F.d7c: %Generic.WithSelf.F.type.c45 = struct_value () [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Generic.type.ee14e9.2: type = facet_type <@Generic, @Generic(%T)> [symbolic] // CHECK:STDOUT: %pattern_type.4e0: type = pattern_type %Generic.type.ee14e9.2 [symbolic] +// CHECK:STDOUT: %U.patt.8a63c8.1: %pattern_type.4e0 = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %U.af9edd.1: %Generic.type.ee14e9.2 = symbolic_binding U, 1 [symbolic] // CHECK:STDOUT: %CallGenericMethod.type: type = fn_type @CallGenericMethod [concrete] // CHECK:STDOUT: %CallGenericMethod: %CallGenericMethod.type = struct_value () [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.de1: type = pattern_type %Generic.type.b40 [concrete] +// CHECK:STDOUT: %U.patt.e09a67.1: %pattern_type.de1 = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %CallGenericMethod.specific_fn.42a: = specific_function %CallGenericMethod, @CallGenericMethod(%GenericParam, %Generic.facet) [concrete] +// CHECK:STDOUT: %U.patt.8a63c8.2: %pattern_type.4e0 = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %U.af9edd.2: %Generic.type.ee14e9.2 = symbolic_binding U, 1 [symbolic] // CHECK:STDOUT: %PassThroughToGenericMethod.type: type = fn_type @PassThroughToGenericMethod [concrete] // CHECK:STDOUT: %PassThroughToGenericMethod: %PassThroughToGenericMethod.type = struct_value () [concrete] @@ -115,6 +120,7 @@ fn G() { // CHECK:STDOUT: %CallGenericMethod.specific_fn.151: = specific_function %CallGenericMethod, @CallGenericMethod(%T, %U.af9edd.2) [symbolic] // CHECK:STDOUT: %H.type: type = fn_type @H [concrete] // CHECK:STDOUT: %H: %H.type = struct_value () [concrete] +// CHECK:STDOUT: %U.patt.e09a67.2: %pattern_type.de1 = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %PassThroughToGenericMethod.specific_fn: = specific_function %PassThroughToGenericMethod, @PassThroughToGenericMethod(%GenericParam, %Generic.facet) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -138,7 +144,7 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Generic.decl: %Generic.type.30d = interface_decl @Generic [concrete = constants.%Generic.generic] { -// CHECK:STDOUT: %Scalar.patt: %pattern_type.98f = symbolic_binding_pattern Scalar, 0 [concrete] +// CHECK:STDOUT: %Scalar.patt.loc4_25.1: %pattern_type.98f = symbolic_binding_pattern Scalar, 0 [symbolic = %Scalar.patt.loc4_25.2 (constants.%Scalar.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_28.1: type = splice_block %.loc4_28.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -155,8 +161,8 @@ fn G() { // CHECK:STDOUT: %Generic.type: type = facet_type <@Generic, @Generic(constants.%GenericParam)> [concrete = constants.%Generic.type.b40] // CHECK:STDOUT: } // CHECK:STDOUT: %CallGenericMethod.decl: %CallGenericMethod.type = fn_decl @CallGenericMethod [concrete = constants.%CallGenericMethod] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %U.patt: @CallGenericMethod.%pattern_type (%pattern_type.4e0) = symbolic_binding_pattern U, 1 [concrete] +// CHECK:STDOUT: %T.patt.loc15_23.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_23.2 (constants.%T.patt)] +// CHECK:STDOUT: %U.patt.loc15_40.1: @CallGenericMethod.%pattern_type (%pattern_type.4e0) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc15_40.2 (constants.%U.patt.8a63c8.1)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc15_26.1: type = splice_block %.loc15_26.2 [concrete = type] { // CHECK:STDOUT: %.Self.loc15_23: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -173,8 +179,8 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] {} {} // CHECK:STDOUT: %PassThroughToGenericMethod.decl: %PassThroughToGenericMethod.type = fn_decl @PassThroughToGenericMethod [concrete = constants.%PassThroughToGenericMethod] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %U.patt: @PassThroughToGenericMethod.%pattern_type (%pattern_type.4e0) = symbolic_binding_pattern U, 1 [concrete] +// CHECK:STDOUT: %T.patt.loc21_32.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_32.2 (constants.%T.patt)] +// CHECK:STDOUT: %U.patt.loc21_42.1: @PassThroughToGenericMethod.%pattern_type (%pattern_type.4e0) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc21_42.2 (constants.%U.patt.8a63c8.2)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc21_35.1: type = splice_block %.loc21_35.2 [concrete = type] { // CHECK:STDOUT: %.Self.loc21_32: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -193,6 +199,7 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Generic(%Scalar.loc4_25.2: type) { +// CHECK:STDOUT: %Scalar.patt.loc4_25.2: %pattern_type.98f = symbolic_binding_pattern Scalar, 0 [symbolic = %Scalar.patt.loc4_25.2 (constants.%Scalar.patt)] // CHECK:STDOUT: %Scalar.loc4_25.1: type = symbolic_binding Scalar, 0 [symbolic = %Scalar.loc4_25.1 (constants.%Scalar)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -253,10 +260,12 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @CallGenericMethod(%T.loc15_23.2: type, %U.loc15_40.2: @CallGenericMethod.%Generic.type.loc15_52.1 (%Generic.type.ee14e9.2)) { +// CHECK:STDOUT: %T.patt.loc15_23.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_23.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc15_23.1: type = symbolic_binding T, 0 [symbolic = %T.loc15_23.1 (constants.%T)] // CHECK:STDOUT: %Generic.type.loc15_52.1: type = facet_type <@Generic, @Generic(%T.loc15_23.1)> [symbolic = %Generic.type.loc15_52.1 (constants.%Generic.type.ee14e9.2)] -// CHECK:STDOUT: %U.loc15_40.1: @CallGenericMethod.%Generic.type.loc15_52.1 (%Generic.type.ee14e9.2) = symbolic_binding U, 1 [symbolic = %U.loc15_40.1 (constants.%U.af9edd.1)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Generic.type.loc15_52.1 [symbolic = %pattern_type (constants.%pattern_type.4e0)] +// CHECK:STDOUT: %U.patt.loc15_40.2: @CallGenericMethod.%pattern_type (%pattern_type.4e0) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc15_40.2 (constants.%U.patt.8a63c8.1)] +// CHECK:STDOUT: %U.loc15_40.1: @CallGenericMethod.%Generic.type.loc15_52.1 (%Generic.type.ee14e9.2) = symbolic_binding U, 1 [symbolic = %U.loc15_40.1 (constants.%U.af9edd.1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -279,10 +288,12 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @PassThroughToGenericMethod(%T.loc21_32.2: type, %U.loc21_42.2: @PassThroughToGenericMethod.%Generic.type.loc21_54.1 (%Generic.type.ee14e9.2)) { +// CHECK:STDOUT: %T.patt.loc21_32.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_32.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc21_32.1: type = symbolic_binding T, 0 [symbolic = %T.loc21_32.1 (constants.%T)] // CHECK:STDOUT: %Generic.type.loc21_54.1: type = facet_type <@Generic, @Generic(%T.loc21_32.1)> [symbolic = %Generic.type.loc21_54.1 (constants.%Generic.type.ee14e9.2)] -// CHECK:STDOUT: %U.loc21_42.1: @PassThroughToGenericMethod.%Generic.type.loc21_54.1 (%Generic.type.ee14e9.2) = symbolic_binding U, 1 [symbolic = %U.loc21_42.1 (constants.%U.af9edd.2)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Generic.type.loc21_54.1 [symbolic = %pattern_type (constants.%pattern_type.4e0)] +// CHECK:STDOUT: %U.patt.loc21_42.2: @PassThroughToGenericMethod.%pattern_type (%pattern_type.4e0) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc21_42.2 (constants.%U.patt.8a63c8.2)] +// CHECK:STDOUT: %U.loc21_42.1: @PassThroughToGenericMethod.%Generic.type.loc21_54.1 (%Generic.type.ee14e9.2) = symbolic_binding U, 1 [symbolic = %U.loc21_42.1 (constants.%U.af9edd.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %CallGenericMethod.specific_fn.loc22_3.2: = specific_function constants.%CallGenericMethod, @CallGenericMethod(%T.loc21_32.1, %U.loc21_42.1) [symbolic = %CallGenericMethod.specific_fn.loc22_3.2 (constants.%CallGenericMethod.specific_fn.151)] @@ -311,6 +322,7 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Generic(constants.%Scalar) { +// CHECK:STDOUT: %Scalar.patt.loc4_25.2 => constants.%Scalar.patt // CHECK:STDOUT: %Scalar.loc4_25.1 => constants.%Scalar // CHECK:STDOUT: } // CHECK:STDOUT: @@ -319,6 +331,7 @@ fn G() { // CHECK:STDOUT: specific @Generic.WithSelf.F(constants.%Scalar, constants.%Self.8ea1ea.1) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @Generic(constants.%GenericParam) { +// CHECK:STDOUT: %Scalar.patt.loc4_25.2 => constants.%Scalar.patt // CHECK:STDOUT: %Scalar.loc4_25.1 => constants.%GenericParam // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -351,6 +364,7 @@ fn G() { // CHECK:STDOUT: specific @Generic.WithSelf.F(constants.%GenericParam, constants.%Generic.facet) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @Generic(constants.%T) { +// CHECK:STDOUT: %Scalar.patt.loc4_25.2 => constants.%Scalar.patt // CHECK:STDOUT: %Scalar.loc4_25.1 => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -359,26 +373,32 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @CallGenericMethod(constants.%T, constants.%U.af9edd.1) { +// CHECK:STDOUT: %T.patt.loc15_23.2 => constants.%T.patt // CHECK:STDOUT: %T.loc15_23.1 => constants.%T // CHECK:STDOUT: %Generic.type.loc15_52.1 => constants.%Generic.type.ee14e9.2 -// CHECK:STDOUT: %U.loc15_40.1 => constants.%U.af9edd.1 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.4e0 +// CHECK:STDOUT: %U.patt.loc15_40.2 => constants.%U.patt.8a63c8.1 +// CHECK:STDOUT: %U.loc15_40.1 => constants.%U.af9edd.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @CallGenericMethod(constants.%GenericParam, constants.%Generic.facet) { +// CHECK:STDOUT: %T.patt.loc15_23.2 => constants.%T.patt // CHECK:STDOUT: %T.loc15_23.1 => constants.%GenericParam // CHECK:STDOUT: %Generic.type.loc15_52.1 => constants.%Generic.type.b40 -// CHECK:STDOUT: %U.loc15_40.1 => constants.%Generic.facet // CHECK:STDOUT: %pattern_type => constants.%pattern_type.de1 +// CHECK:STDOUT: %U.patt.loc15_40.2 => constants.%U.patt.e09a67.1 +// CHECK:STDOUT: %U.loc15_40.1 => constants.%Generic.facet // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @PassThroughToGenericMethod(constants.%T, constants.%U.af9edd.2) { +// CHECK:STDOUT: %T.patt.loc21_32.2 => constants.%T.patt // CHECK:STDOUT: %T.loc21_32.1 => constants.%T // CHECK:STDOUT: %Generic.type.loc21_54.1 => constants.%Generic.type.ee14e9.2 -// CHECK:STDOUT: %U.loc21_42.1 => constants.%U.af9edd.2 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.4e0 +// CHECK:STDOUT: %U.patt.loc21_42.2 => constants.%U.patt.8a63c8.2 +// CHECK:STDOUT: %U.loc21_42.1 => constants.%U.af9edd.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Generic.WithSelf(constants.%T, constants.%Self.8ea1ea.1) { @@ -393,19 +413,23 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @CallGenericMethod(constants.%T, constants.%U.af9edd.2) { +// CHECK:STDOUT: %T.patt.loc15_23.2 => constants.%T.patt // CHECK:STDOUT: %T.loc15_23.1 => constants.%T // CHECK:STDOUT: %Generic.type.loc15_52.1 => constants.%Generic.type.ee14e9.2 -// CHECK:STDOUT: %U.loc15_40.1 => constants.%U.af9edd.2 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.4e0 +// CHECK:STDOUT: %U.patt.loc15_40.2 => constants.%U.patt.8a63c8.1 +// CHECK:STDOUT: %U.loc15_40.1 => constants.%U.af9edd.2 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @PassThroughToGenericMethod(constants.%GenericParam, constants.%Generic.facet) { +// CHECK:STDOUT: %T.patt.loc21_32.2 => constants.%T.patt // CHECK:STDOUT: %T.loc21_32.1 => constants.%GenericParam // CHECK:STDOUT: %Generic.type.loc21_54.1 => constants.%Generic.type.b40 -// CHECK:STDOUT: %U.loc21_42.1 => constants.%Generic.facet // CHECK:STDOUT: %pattern_type => constants.%pattern_type.de1 +// CHECK:STDOUT: %U.patt.loc21_42.2 => constants.%U.patt.e09a67.2 +// CHECK:STDOUT: %U.loc21_42.1 => constants.%Generic.facet // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %CallGenericMethod.specific_fn.loc22_3.2 => constants.%CallGenericMethod.specific_fn.42a @@ -417,6 +441,7 @@ fn G() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Scalar.patt: %pattern_type.98f = symbolic_binding_pattern Scalar, 0 [symbolic] // CHECK:STDOUT: %Scalar: type = symbolic_binding Scalar, 0 [symbolic] // CHECK:STDOUT: %Generic.type.30d: type = generic_interface_type @Generic [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -443,11 +468,15 @@ fn G() { // CHECK:STDOUT: %Generic.facet: %Generic.type.b40 = facet_value %ImplsGeneric, (%Generic.impl_witness) [concrete] // CHECK:STDOUT: %Generic.WithSelf.F.type.c45: type = fn_type @Generic.WithSelf.F, @Generic.WithSelf(%GenericParam, %Generic.facet) [concrete] // CHECK:STDOUT: %Generic.WithSelf.F.d7c: %Generic.WithSelf.F.type.c45 = struct_value () [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Generic.type.ee14e9.2: type = facet_type <@Generic, @Generic(%T)> [symbolic] // CHECK:STDOUT: %pattern_type.4e0: type = pattern_type %Generic.type.ee14e9.2 [symbolic] +// CHECK:STDOUT: %U.patt.8a6: %pattern_type.4e0 = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %U: %Generic.type.ee14e9.2 = symbolic_binding U, 1 [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %t.param_patt.513: %pattern_type.51d = value_param_pattern [symbolic] +// CHECK:STDOUT: %t.patt.dcb: %pattern_type.51d = at_binding_pattern t, %t.param_patt.513 [symbolic] // CHECK:STDOUT: %CallGenericMethod.type: type = fn_type @CallGenericMethod [concrete] // CHECK:STDOUT: %CallGenericMethod: %CallGenericMethod.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic] @@ -456,7 +485,10 @@ fn G() { // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %GenericParam.val: %GenericParam = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.de1: type = pattern_type %Generic.type.b40 [concrete] +// CHECK:STDOUT: %U.patt.e09: %pattern_type.de1 = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %pattern_type.485: type = pattern_type %GenericParam [concrete] +// CHECK:STDOUT: %t.param_patt.4d1: %pattern_type.485 = value_param_pattern [concrete] +// CHECK:STDOUT: %t.patt.0d5: %pattern_type.485 = at_binding_pattern t, %t.param_patt.4d1 [concrete] // CHECK:STDOUT: %CallGenericMethod.specific_fn: = specific_function %CallGenericMethod, @CallGenericMethod(%GenericParam, %Generic.facet) [concrete] // CHECK:STDOUT: %.b65: ref %GenericParam = temporary invalid, %GenericParam.val [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] @@ -485,7 +517,7 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Generic.decl: %Generic.type.30d = interface_decl @Generic [concrete = constants.%Generic.generic] { -// CHECK:STDOUT: %Scalar.patt: %pattern_type.98f = symbolic_binding_pattern Scalar, 0 [concrete] +// CHECK:STDOUT: %Scalar.patt.loc4_25.1: %pattern_type.98f = symbolic_binding_pattern Scalar, 0 [symbolic = %Scalar.patt.loc4_25.2 (constants.%Scalar.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_28.1: type = splice_block %.loc4_28.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -502,10 +534,10 @@ fn G() { // CHECK:STDOUT: %Generic.type: type = facet_type <@Generic, @Generic(constants.%GenericParam)> [concrete = constants.%Generic.type.b40] // CHECK:STDOUT: } // CHECK:STDOUT: %CallGenericMethod.decl: %CallGenericMethod.type = fn_decl @CallGenericMethod [concrete = constants.%CallGenericMethod] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %U.patt: @CallGenericMethod.%pattern_type.loc15_40 (%pattern_type.4e0) = symbolic_binding_pattern U, 1 [concrete] -// CHECK:STDOUT: %t.param_patt: @CallGenericMethod.%pattern_type.loc15_63 (%pattern_type.51d) = value_param_pattern [concrete] -// CHECK:STDOUT: %t.patt: @CallGenericMethod.%pattern_type.loc15_63 (%pattern_type.51d) = at_binding_pattern t, %t.param_patt [concrete] +// CHECK:STDOUT: %T.patt.loc15_23.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_23.2 (constants.%T.patt)] +// CHECK:STDOUT: %U.patt.loc15_40.1: @CallGenericMethod.%pattern_type.loc15_40 (%pattern_type.4e0) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc15_40.2 (constants.%U.patt.8a6)] +// CHECK:STDOUT: %t.param_patt.loc15_63.1: @CallGenericMethod.%pattern_type.loc15_63 (%pattern_type.51d) = value_param_pattern [symbolic = %t.param_patt.loc15_63.2 (constants.%t.param_patt.513)] +// CHECK:STDOUT: %t.patt.loc15_63.1: @CallGenericMethod.%pattern_type.loc15_63 (%pattern_type.51d) = at_binding_pattern t, %t.param_patt.loc15_63.1 [symbolic = %t.patt.loc15_63.2 (constants.%t.patt.dcb)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc15_26.1: type = splice_block %.loc15_26.2 [concrete = type] { // CHECK:STDOUT: %.Self.loc15_23: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -527,6 +559,7 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Generic(%Scalar.loc4_25.2: type) { +// CHECK:STDOUT: %Scalar.patt.loc4_25.2: %pattern_type.98f = symbolic_binding_pattern Scalar, 0 [symbolic = %Scalar.patt.loc4_25.2 (constants.%Scalar.patt)] // CHECK:STDOUT: %Scalar.loc4_25.1: type = symbolic_binding Scalar, 0 [symbolic = %Scalar.loc4_25.1 (constants.%Scalar)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -587,11 +620,15 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @CallGenericMethod(%T.loc15_23.2: type, %U.loc15_40.2: @CallGenericMethod.%Generic.type.loc15_52.1 (%Generic.type.ee14e9.2)) { +// CHECK:STDOUT: %T.patt.loc15_23.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_23.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc15_23.1: type = symbolic_binding T, 0 [symbolic = %T.loc15_23.1 (constants.%T)] // CHECK:STDOUT: %Generic.type.loc15_52.1: type = facet_type <@Generic, @Generic(%T.loc15_23.1)> [symbolic = %Generic.type.loc15_52.1 (constants.%Generic.type.ee14e9.2)] -// CHECK:STDOUT: %U.loc15_40.1: @CallGenericMethod.%Generic.type.loc15_52.1 (%Generic.type.ee14e9.2) = symbolic_binding U, 1 [symbolic = %U.loc15_40.1 (constants.%U)] // CHECK:STDOUT: %pattern_type.loc15_40: type = pattern_type %Generic.type.loc15_52.1 [symbolic = %pattern_type.loc15_40 (constants.%pattern_type.4e0)] +// CHECK:STDOUT: %U.patt.loc15_40.2: @CallGenericMethod.%pattern_type.loc15_40 (%pattern_type.4e0) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc15_40.2 (constants.%U.patt.8a6)] +// CHECK:STDOUT: %U.loc15_40.1: @CallGenericMethod.%Generic.type.loc15_52.1 (%Generic.type.ee14e9.2) = symbolic_binding U, 1 [symbolic = %U.loc15_40.1 (constants.%U)] // CHECK:STDOUT: %pattern_type.loc15_63: type = pattern_type %T.loc15_23.1 [symbolic = %pattern_type.loc15_63 (constants.%pattern_type.51d)] +// CHECK:STDOUT: %t.param_patt.loc15_63.2: @CallGenericMethod.%pattern_type.loc15_63 (%pattern_type.51d) = value_param_pattern [symbolic = %t.param_patt.loc15_63.2 (constants.%t.param_patt.513)] +// CHECK:STDOUT: %t.patt.loc15_63.2: @CallGenericMethod.%pattern_type.loc15_63 (%pattern_type.51d) = at_binding_pattern t, %t.param_patt.loc15_63.2 [symbolic = %t.patt.loc15_63.2 (constants.%t.patt.dcb)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc15_23.1 [symbolic = %require_complete (constants.%require_complete)] @@ -629,6 +666,7 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Generic(constants.%Scalar) { +// CHECK:STDOUT: %Scalar.patt.loc4_25.2 => constants.%Scalar.patt // CHECK:STDOUT: %Scalar.loc4_25.1 => constants.%Scalar // CHECK:STDOUT: } // CHECK:STDOUT: @@ -637,6 +675,7 @@ fn G() { // CHECK:STDOUT: specific @Generic.WithSelf.F(constants.%Scalar, constants.%Self.8ea) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @Generic(constants.%GenericParam) { +// CHECK:STDOUT: %Scalar.patt.loc4_25.2 => constants.%Scalar.patt // CHECK:STDOUT: %Scalar.loc4_25.1 => constants.%GenericParam // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -669,23 +708,32 @@ fn G() { // CHECK:STDOUT: specific @Generic.WithSelf.F(constants.%GenericParam, constants.%Generic.facet) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @Generic(constants.%T) { +// CHECK:STDOUT: %Scalar.patt.loc4_25.2 => constants.%Scalar.patt // CHECK:STDOUT: %Scalar.loc4_25.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @CallGenericMethod(constants.%T, constants.%U) { +// CHECK:STDOUT: %T.patt.loc15_23.2 => constants.%T.patt // CHECK:STDOUT: %T.loc15_23.1 => constants.%T // CHECK:STDOUT: %Generic.type.loc15_52.1 => constants.%Generic.type.ee14e9.2 -// CHECK:STDOUT: %U.loc15_40.1 => constants.%U // CHECK:STDOUT: %pattern_type.loc15_40 => constants.%pattern_type.4e0 +// CHECK:STDOUT: %U.patt.loc15_40.2 => constants.%U.patt.8a6 +// CHECK:STDOUT: %U.loc15_40.1 => constants.%U // CHECK:STDOUT: %pattern_type.loc15_63 => constants.%pattern_type.51d +// CHECK:STDOUT: %t.param_patt.loc15_63.2 => constants.%t.param_patt.513 +// CHECK:STDOUT: %t.patt.loc15_63.2 => constants.%t.patt.dcb // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @CallGenericMethod(constants.%GenericParam, constants.%Generic.facet) { +// CHECK:STDOUT: %T.patt.loc15_23.2 => constants.%T.patt // CHECK:STDOUT: %T.loc15_23.1 => constants.%GenericParam // CHECK:STDOUT: %Generic.type.loc15_52.1 => constants.%Generic.type.b40 -// CHECK:STDOUT: %U.loc15_40.1 => constants.%Generic.facet // CHECK:STDOUT: %pattern_type.loc15_40 => constants.%pattern_type.de1 +// CHECK:STDOUT: %U.patt.loc15_40.2 => constants.%U.patt.e09 +// CHECK:STDOUT: %U.loc15_40.1 => constants.%Generic.facet // CHECK:STDOUT: %pattern_type.loc15_63 => constants.%pattern_type.485 +// CHECK:STDOUT: %t.param_patt.loc15_63.2 => constants.%t.param_patt.4d1 +// CHECK:STDOUT: %t.patt.loc15_63.2 => constants.%t.patt.0d5 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type diff --git a/toolchain/check/testdata/facet/convert_class_value_to_facet_value_value.carbon b/toolchain/check/testdata/facet/convert_class_value_to_facet_value_value.carbon index 5f24a463814f..ff20e6bca4a1 100644 --- a/toolchain/check/testdata/facet/convert_class_value_to_facet_value_value.carbon +++ b/toolchain/check/testdata/facet/convert_class_value_to_facet_value_value.carbon @@ -31,9 +31,12 @@ fn F() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.333: type = pattern_type %Animal.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.333 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: %Animal.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] // CHECK:STDOUT: %pattern_type.e90: type = pattern_type %T.as_type [symbolic] +// CHECK:STDOUT: %a.param_patt.84e: %pattern_type.e90 = value_param_pattern [symbolic] +// CHECK:STDOUT: %a.patt.3e6: %pattern_type.e90 = at_binding_pattern a, %a.param_patt.84e [symbolic] // CHECK:STDOUT: %WalkAnimal.type: type = fn_type @WalkAnimal [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %WalkAnimal: %WalkAnimal.type = struct_value () [concrete] @@ -48,6 +51,8 @@ fn F() { // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %Goat.val: %Goat = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.283: type = pattern_type %Goat [concrete] +// CHECK:STDOUT: %a.param_patt.8f5: %pattern_type.283 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt.8aa: %pattern_type.283 = at_binding_pattern a, %a.param_patt.8f5 [concrete] // CHECK:STDOUT: %WalkAnimal.specific_fn: = specific_function %WalkAnimal, @WalkAnimal(%Animal.facet) [concrete] // CHECK:STDOUT: %.4ea: ref %Goat = temporary invalid, %Goat.val [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] @@ -76,9 +81,9 @@ fn F() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Animal.decl: type = interface_decl @Animal [concrete = constants.%Animal.type] {} {} // CHECK:STDOUT: %WalkAnimal.decl: %WalkAnimal.type = fn_decl @WalkAnimal [concrete = constants.%WalkAnimal] { -// CHECK:STDOUT: %T.patt: %pattern_type.333 = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %a.param_patt: @WalkAnimal.%pattern_type (%pattern_type.e90) = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: @WalkAnimal.%pattern_type (%pattern_type.e90) = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %T.patt.loc17_16.1: %pattern_type.333 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc17_16.2 (constants.%T.patt)] +// CHECK:STDOUT: %a.param_patt.loc17_35.1: @WalkAnimal.%pattern_type (%pattern_type.e90) = value_param_pattern [symbolic = %a.param_patt.loc17_35.2 (constants.%a.param_patt.84e)] +// CHECK:STDOUT: %a.patt.loc17_35.1: @WalkAnimal.%pattern_type (%pattern_type.e90) = at_binding_pattern a, %a.param_patt.loc17_35.1 [symbolic = %a.patt.loc17_35.2 (constants.%a.patt.3e6)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc17_19: type = splice_block %Animal.ref [concrete = constants.%Animal.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -130,9 +135,12 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @WalkAnimal(%T.loc17_16.2: %Animal.type) { +// CHECK:STDOUT: %T.patt.loc17_16.2: %pattern_type.333 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc17_16.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc17_16.1: %Animal.type = symbolic_binding T, 0 [symbolic = %T.loc17_16.1 (constants.%T)] // CHECK:STDOUT: %T.as_type.loc17_37.1: type = facet_access_type %T.loc17_16.1 [symbolic = %T.as_type.loc17_37.1 (constants.%T.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc17_37.1 [symbolic = %pattern_type (constants.%pattern_type.e90)] +// CHECK:STDOUT: %a.param_patt.loc17_35.2: @WalkAnimal.%pattern_type (%pattern_type.e90) = value_param_pattern [symbolic = %a.param_patt.loc17_35.2 (constants.%a.param_patt.84e)] +// CHECK:STDOUT: %a.patt.loc17_35.2: @WalkAnimal.%pattern_type (%pattern_type.e90) = at_binding_pattern a, %a.param_patt.loc17_35.2 [symbolic = %a.patt.loc17_35.2 (constants.%a.patt.3e6)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc17_37.1 [symbolic = %require_complete (constants.%require_complete)] @@ -151,8 +159,10 @@ fn F() { // CHECK:STDOUT: %.loc23_15.2: ref %Goat = temporary_storage // CHECK:STDOUT: %.loc23_15.3: init %Goat to %.loc23_15.2 = class_init () [concrete = constants.%Goat.val] // CHECK:STDOUT: %.loc23_17.1: init %Goat = converted %.loc23_15.1, %.loc23_15.3 [concrete = constants.%Goat.val] -// CHECK:STDOUT: %Animal.facet: %Animal.type = facet_value constants.%Goat, (constants.%Animal.impl_witness) [concrete = constants.%Animal.facet] -// CHECK:STDOUT: %.loc23_24: %Animal.type = converted constants.%Goat, %Animal.facet [concrete = constants.%Animal.facet] +// CHECK:STDOUT: %Animal.facet.loc23_24.1: %Animal.type = facet_value constants.%Goat, (constants.%Animal.impl_witness) [concrete = constants.%Animal.facet] +// CHECK:STDOUT: %.loc23_24.1: %Animal.type = converted constants.%Goat, %Animal.facet.loc23_24.1 [concrete = constants.%Animal.facet] +// CHECK:STDOUT: %Animal.facet.loc23_24.2: %Animal.type = facet_value constants.%Goat, (constants.%Animal.impl_witness) [concrete = constants.%Animal.facet] +// CHECK:STDOUT: %.loc23_24.2: %Animal.type = converted constants.%Goat, %Animal.facet.loc23_24.2 [concrete = constants.%Animal.facet] // CHECK:STDOUT: %WalkAnimal.specific_fn: = specific_function %WalkAnimal.ref, @WalkAnimal(constants.%Animal.facet) [concrete = constants.%WalkAnimal.specific_fn] // CHECK:STDOUT: %.loc23_17.2: ref %Goat = temporary %.loc23_15.2, %.loc23_17.1 [concrete = constants.%.4ea] // CHECK:STDOUT: %.loc23_17.3: %Goat = acquire_value %.loc23_17.2 [concrete = constants.%Goat.val] @@ -173,9 +183,12 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @WalkAnimal(constants.%T) { +// CHECK:STDOUT: %T.patt.loc17_16.2 => constants.%T.patt // CHECK:STDOUT: %T.loc17_16.1 => constants.%T // CHECK:STDOUT: %T.as_type.loc17_37.1 => constants.%T.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.e90 +// CHECK:STDOUT: %a.param_patt.loc17_35.2 => constants.%a.param_patt.84e +// CHECK:STDOUT: %a.patt.loc17_35.2 => constants.%a.patt.3e6 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Animal.WithSelf(constants.%Animal.facet) { @@ -183,9 +196,12 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @WalkAnimal(constants.%Animal.facet) { +// CHECK:STDOUT: %T.patt.loc17_16.2 => constants.%T.patt // CHECK:STDOUT: %T.loc17_16.1 => constants.%Animal.facet // CHECK:STDOUT: %T.as_type.loc17_37.1 => constants.%Goat // CHECK:STDOUT: %pattern_type => constants.%pattern_type.283 +// CHECK:STDOUT: %a.param_patt.loc17_35.2 => constants.%a.param_patt.8f5 +// CHECK:STDOUT: %a.patt.loc17_35.2 => constants.%a.patt.8aa // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type diff --git a/toolchain/check/testdata/facet/convert_class_value_to_generic_facet_value_value.carbon b/toolchain/check/testdata/facet/convert_class_value_to_generic_facet_value_value.carbon index 7d84bf5886fe..a116e916f50a 100644 --- a/toolchain/check/testdata/facet/convert_class_value_to_generic_facet_value_value.carbon +++ b/toolchain/check/testdata/facet/convert_class_value_to_generic_facet_value_value.carbon @@ -100,6 +100,7 @@ fn B() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Scalar.patt: %pattern_type.98f = symbolic_binding_pattern Scalar, 0 [symbolic] // CHECK:STDOUT: %Scalar: type = symbolic_binding Scalar, 0 [symbolic] // CHECK:STDOUT: %Generic.type.30d: type = generic_interface_type @Generic [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -126,9 +127,11 @@ fn B() { // CHECK:STDOUT: %Generic.facet: %Generic.type.b40 = facet_value %ImplsGeneric, (%Generic.impl_witness) [concrete] // CHECK:STDOUT: %Generic.WithSelf.F.type.c45: type = fn_type @Generic.WithSelf.F, @Generic.WithSelf(%GenericParam, %Generic.facet) [concrete] // CHECK:STDOUT: %Generic.WithSelf.F.d7c: %Generic.WithSelf.F.type.c45 = struct_value () [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Generic.type.ee14e9.2: type = facet_type <@Generic, @Generic(%T)> [symbolic] // CHECK:STDOUT: %pattern_type.4e0: type = pattern_type %Generic.type.ee14e9.2 [symbolic] +// CHECK:STDOUT: %U.patt.8a6: %pattern_type.4e0 = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %U: %Generic.type.ee14e9.2 = symbolic_binding U, 1 [symbolic] // CHECK:STDOUT: %Self.8ea1ea.2: %Generic.type.ee14e9.2 = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %Generic.WithSelf.F.type.390775.2: type = fn_type @Generic.WithSelf.F, @Generic.WithSelf(%T, %Self.8ea1ea.1) [symbolic] @@ -137,7 +140,11 @@ fn B() { // CHECK:STDOUT: %assoc0.31052a.2: %Generic.assoc_type.d7021d.2 = assoc_entity element0, @Generic.WithSelf.%Generic.WithSelf.F.decl [symbolic] // CHECK:STDOUT: %U.as_type: type = facet_access_type %U [symbolic] // CHECK:STDOUT: %pattern_type.70f: type = pattern_type %U.as_type [symbolic] +// CHECK:STDOUT: %a.param_patt.98a: %pattern_type.70f = value_param_pattern [symbolic] +// CHECK:STDOUT: %a.patt.03d: %pattern_type.70f = at_binding_pattern a, %a.param_patt.98a [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %s.param_patt.cb5: %pattern_type.51d = value_param_pattern [symbolic] +// CHECK:STDOUT: %s.patt.a4f: %pattern_type.51d = at_binding_pattern s, %s.param_patt.cb5 [symbolic] // CHECK:STDOUT: %CallGenericMethod.type: type = fn_type @CallGenericMethod [concrete] // CHECK:STDOUT: %CallGenericMethod: %CallGenericMethod.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.096: = require_complete_type %U.as_type [symbolic] @@ -155,8 +162,13 @@ fn B() { // CHECK:STDOUT: %ImplsGeneric.val: %ImplsGeneric = struct_value () [concrete] // CHECK:STDOUT: %GenericParam.val: %GenericParam = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.de1: type = pattern_type %Generic.type.b40 [concrete] +// CHECK:STDOUT: %U.patt.e09: %pattern_type.de1 = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %pattern_type.488: type = pattern_type %ImplsGeneric [concrete] +// CHECK:STDOUT: %a.param_patt.150: %pattern_type.488 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt.065: %pattern_type.488 = at_binding_pattern a, %a.param_patt.150 [concrete] // CHECK:STDOUT: %pattern_type.485: type = pattern_type %GenericParam [concrete] +// CHECK:STDOUT: %s.param_patt.12f: %pattern_type.485 = value_param_pattern [concrete] +// CHECK:STDOUT: %s.patt.a2c: %pattern_type.485 = at_binding_pattern s, %s.param_patt.12f [concrete] // CHECK:STDOUT: %CallGenericMethod.specific_fn: = specific_function %CallGenericMethod, @CallGenericMethod(%GenericParam, %Generic.facet) [concrete] // CHECK:STDOUT: %.cd4: ref %ImplsGeneric = temporary invalid, %ImplsGeneric.val [concrete] // CHECK:STDOUT: %.b65: ref %GenericParam = temporary invalid, %GenericParam.val [concrete] @@ -191,7 +203,7 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Generic.decl: %Generic.type.30d = interface_decl @Generic [concrete = constants.%Generic.generic] { -// CHECK:STDOUT: %Scalar.patt: %pattern_type.98f = symbolic_binding_pattern Scalar, 0 [concrete] +// CHECK:STDOUT: %Scalar.patt.loc4_25.1: %pattern_type.98f = symbolic_binding_pattern Scalar, 0 [symbolic = %Scalar.patt.loc4_25.2 (constants.%Scalar.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_28.1: type = splice_block %.loc4_28.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -208,12 +220,12 @@ fn B() { // CHECK:STDOUT: %Generic.type: type = facet_type <@Generic, @Generic(constants.%GenericParam)> [concrete = constants.%Generic.type.b40] // CHECK:STDOUT: } // CHECK:STDOUT: %CallGenericMethod.decl: %CallGenericMethod.type = fn_decl @CallGenericMethod [concrete = constants.%CallGenericMethod] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %U.patt: @CallGenericMethod.%pattern_type.loc15_33 (%pattern_type.4e0) = symbolic_binding_pattern U, 1 [concrete] -// CHECK:STDOUT: %a.param_patt: @CallGenericMethod.%pattern_type.loc15_56 (%pattern_type.70f) = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: @CallGenericMethod.%pattern_type.loc15_56 (%pattern_type.70f) = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %s.param_patt: @CallGenericMethod.%pattern_type.loc15_69 (%pattern_type.51d) = value_param_pattern [concrete] -// CHECK:STDOUT: %s.patt: @CallGenericMethod.%pattern_type.loc15_69 (%pattern_type.51d) = at_binding_pattern s, %s.param_patt [concrete] +// CHECK:STDOUT: %T.patt.loc15_23.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_23.2 (constants.%T.patt)] +// CHECK:STDOUT: %U.patt.loc15_33.1: @CallGenericMethod.%pattern_type.loc15_33 (%pattern_type.4e0) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc15_33.2 (constants.%U.patt.8a6)] +// CHECK:STDOUT: %a.param_patt.loc15_56.1: @CallGenericMethod.%pattern_type.loc15_56 (%pattern_type.70f) = value_param_pattern [symbolic = %a.param_patt.loc15_56.2 (constants.%a.param_patt.98a)] +// CHECK:STDOUT: %a.patt.loc15_56.1: @CallGenericMethod.%pattern_type.loc15_56 (%pattern_type.70f) = at_binding_pattern a, %a.param_patt.loc15_56.1 [symbolic = %a.patt.loc15_56.2 (constants.%a.patt.03d)] +// CHECK:STDOUT: %s.param_patt.loc15_69.1: @CallGenericMethod.%pattern_type.loc15_69 (%pattern_type.51d) = value_param_pattern [symbolic = %s.param_patt.loc15_69.2 (constants.%s.param_patt.cb5)] +// CHECK:STDOUT: %s.patt.loc15_69.1: @CallGenericMethod.%pattern_type.loc15_69 (%pattern_type.51d) = at_binding_pattern s, %s.param_patt.loc15_69.1 [symbolic = %s.patt.loc15_69.2 (constants.%s.patt.a4f)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc15_26.1: type = splice_block %.loc15_26.2 [concrete = type] { // CHECK:STDOUT: %.Self.loc15_23: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -242,6 +254,7 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Generic(%Scalar.loc4_25.2: type) { +// CHECK:STDOUT: %Scalar.patt.loc4_25.2: %pattern_type.98f = symbolic_binding_pattern Scalar, 0 [symbolic = %Scalar.patt.loc4_25.2 (constants.%Scalar.patt)] // CHECK:STDOUT: %Scalar.loc4_25.1: type = symbolic_binding Scalar, 0 [symbolic = %Scalar.loc4_25.1 (constants.%Scalar)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -302,13 +315,19 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @CallGenericMethod(%T.loc15_23.2: type, %U.loc15_33.2: @CallGenericMethod.%Generic.type.loc15_45.1 (%Generic.type.ee14e9.2)) { +// CHECK:STDOUT: %T.patt.loc15_23.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_23.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc15_23.1: type = symbolic_binding T, 0 [symbolic = %T.loc15_23.1 (constants.%T)] // CHECK:STDOUT: %Generic.type.loc15_45.1: type = facet_type <@Generic, @Generic(%T.loc15_23.1)> [symbolic = %Generic.type.loc15_45.1 (constants.%Generic.type.ee14e9.2)] -// CHECK:STDOUT: %U.loc15_33.1: @CallGenericMethod.%Generic.type.loc15_45.1 (%Generic.type.ee14e9.2) = symbolic_binding U, 1 [symbolic = %U.loc15_33.1 (constants.%U)] // CHECK:STDOUT: %pattern_type.loc15_33: type = pattern_type %Generic.type.loc15_45.1 [symbolic = %pattern_type.loc15_33 (constants.%pattern_type.4e0)] +// CHECK:STDOUT: %U.patt.loc15_33.2: @CallGenericMethod.%pattern_type.loc15_33 (%pattern_type.4e0) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc15_33.2 (constants.%U.patt.8a6)] +// CHECK:STDOUT: %U.loc15_33.1: @CallGenericMethod.%Generic.type.loc15_45.1 (%Generic.type.ee14e9.2) = symbolic_binding U, 1 [symbolic = %U.loc15_33.1 (constants.%U)] // CHECK:STDOUT: %U.as_type.loc15_58.1: type = facet_access_type %U.loc15_33.1 [symbolic = %U.as_type.loc15_58.1 (constants.%U.as_type)] // CHECK:STDOUT: %pattern_type.loc15_56: type = pattern_type %U.as_type.loc15_58.1 [symbolic = %pattern_type.loc15_56 (constants.%pattern_type.70f)] +// CHECK:STDOUT: %a.param_patt.loc15_56.2: @CallGenericMethod.%pattern_type.loc15_56 (%pattern_type.70f) = value_param_pattern [symbolic = %a.param_patt.loc15_56.2 (constants.%a.param_patt.98a)] +// CHECK:STDOUT: %a.patt.loc15_56.2: @CallGenericMethod.%pattern_type.loc15_56 (%pattern_type.70f) = at_binding_pattern a, %a.param_patt.loc15_56.2 [symbolic = %a.patt.loc15_56.2 (constants.%a.patt.03d)] // CHECK:STDOUT: %pattern_type.loc15_69: type = pattern_type %T.loc15_23.1 [symbolic = %pattern_type.loc15_69 (constants.%pattern_type.51d)] +// CHECK:STDOUT: %s.param_patt.loc15_69.2: @CallGenericMethod.%pattern_type.loc15_69 (%pattern_type.51d) = value_param_pattern [symbolic = %s.param_patt.loc15_69.2 (constants.%s.param_patt.cb5)] +// CHECK:STDOUT: %s.patt.loc15_69.2: @CallGenericMethod.%pattern_type.loc15_69 (%pattern_type.51d) = at_binding_pattern s, %s.param_patt.loc15_69.2 [symbolic = %s.patt.loc15_69.2 (constants.%s.patt.a4f)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc15_56: = require_complete_type %U.as_type.loc15_58.1 [symbolic = %require_complete.loc15_56 (constants.%require_complete.096)] @@ -375,6 +394,7 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Generic(constants.%Scalar) { +// CHECK:STDOUT: %Scalar.patt.loc4_25.2 => constants.%Scalar.patt // CHECK:STDOUT: %Scalar.loc4_25.1 => constants.%Scalar // CHECK:STDOUT: } // CHECK:STDOUT: @@ -383,6 +403,7 @@ fn B() { // CHECK:STDOUT: specific @Generic.WithSelf.F(constants.%Scalar, constants.%Self.8ea1ea.1) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @Generic(constants.%GenericParam) { +// CHECK:STDOUT: %Scalar.patt.loc4_25.2 => constants.%Scalar.patt // CHECK:STDOUT: %Scalar.loc4_25.1 => constants.%GenericParam // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -415,6 +436,7 @@ fn B() { // CHECK:STDOUT: specific @Generic.WithSelf.F(constants.%GenericParam, constants.%Generic.facet) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @Generic(constants.%T) { +// CHECK:STDOUT: %Scalar.patt.loc4_25.2 => constants.%Scalar.patt // CHECK:STDOUT: %Scalar.loc4_25.1 => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -434,13 +456,19 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @CallGenericMethod(constants.%T, constants.%U) { +// CHECK:STDOUT: %T.patt.loc15_23.2 => constants.%T.patt // CHECK:STDOUT: %T.loc15_23.1 => constants.%T // CHECK:STDOUT: %Generic.type.loc15_45.1 => constants.%Generic.type.ee14e9.2 -// CHECK:STDOUT: %U.loc15_33.1 => constants.%U // CHECK:STDOUT: %pattern_type.loc15_33 => constants.%pattern_type.4e0 +// CHECK:STDOUT: %U.patt.loc15_33.2 => constants.%U.patt.8a6 +// CHECK:STDOUT: %U.loc15_33.1 => constants.%U // CHECK:STDOUT: %U.as_type.loc15_58.1 => constants.%U.as_type // CHECK:STDOUT: %pattern_type.loc15_56 => constants.%pattern_type.70f +// CHECK:STDOUT: %a.param_patt.loc15_56.2 => constants.%a.param_patt.98a +// CHECK:STDOUT: %a.patt.loc15_56.2 => constants.%a.patt.03d // CHECK:STDOUT: %pattern_type.loc15_69 => constants.%pattern_type.51d +// CHECK:STDOUT: %s.param_patt.loc15_69.2 => constants.%s.param_patt.cb5 +// CHECK:STDOUT: %s.patt.loc15_69.2 => constants.%s.patt.a4f // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Generic.WithSelf(constants.%T, constants.%U) { @@ -457,13 +485,19 @@ fn B() { // CHECK:STDOUT: specific @Generic.WithSelf.F(constants.%T, constants.%U) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @CallGenericMethod(constants.%GenericParam, constants.%Generic.facet) { +// CHECK:STDOUT: %T.patt.loc15_23.2 => constants.%T.patt // CHECK:STDOUT: %T.loc15_23.1 => constants.%GenericParam // CHECK:STDOUT: %Generic.type.loc15_45.1 => constants.%Generic.type.b40 -// CHECK:STDOUT: %U.loc15_33.1 => constants.%Generic.facet // CHECK:STDOUT: %pattern_type.loc15_33 => constants.%pattern_type.de1 +// CHECK:STDOUT: %U.patt.loc15_33.2 => constants.%U.patt.e09 +// CHECK:STDOUT: %U.loc15_33.1 => constants.%Generic.facet // CHECK:STDOUT: %U.as_type.loc15_58.1 => constants.%ImplsGeneric // CHECK:STDOUT: %pattern_type.loc15_56 => constants.%pattern_type.488 +// CHECK:STDOUT: %a.param_patt.loc15_56.2 => constants.%a.param_patt.150 +// CHECK:STDOUT: %a.patt.loc15_56.2 => constants.%a.patt.065 // CHECK:STDOUT: %pattern_type.loc15_69 => constants.%pattern_type.485 +// CHECK:STDOUT: %s.param_patt.loc15_69.2 => constants.%s.param_patt.12f +// CHECK:STDOUT: %s.patt.loc15_69.2 => constants.%s.patt.a2c // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc15_56 => constants.%complete_type.357 @@ -484,7 +518,9 @@ fn B() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %V.patt: %pattern_type.98f = symbolic_binding_pattern V, 0 [symbolic] // CHECK:STDOUT: %V: type = symbolic_binding V, 0 [symbolic] +// CHECK:STDOUT: %W.patt: %pattern_type.98f = symbolic_binding_pattern W, 1 [symbolic] // CHECK:STDOUT: %W: type = symbolic_binding W, 1 [symbolic] // CHECK:STDOUT: %I.type.335: type = generic_interface_type @I [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -494,6 +530,7 @@ fn B() { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %T.patt.d47: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %I.type.269: type = facet_type <@I, @I(%T.67d, %empty_tuple.type)> [symbolic] @@ -504,10 +541,13 @@ fn B() { // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %I.type.722: type = facet_type <@I, @I(%empty_struct_type, %empty_tuple.type)> [concrete] // CHECK:STDOUT: %pattern_type.bd4: type = pattern_type %I.type.722 [concrete] +// CHECK:STDOUT: %T.patt.be3: %pattern_type.bd4 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.a08: %I.type.722 = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Self.9e2: %I.type.722 = symbolic_binding Self, 2 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T.a08 [symbolic] // CHECK:STDOUT: %pattern_type.d7b: type = pattern_type %T.as_type [symbolic] +// CHECK:STDOUT: %t.param_patt.be8: %pattern_type.d7b = value_param_pattern [symbolic] +// CHECK:STDOUT: %t.patt.9d2: %pattern_type.d7b = at_binding_pattern t, %t.param_patt.be8 [symbolic] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.d9e: = require_complete_type %T.as_type [symbolic] @@ -518,6 +558,8 @@ fn B() { // CHECK:STDOUT: %complete_type.dfa: = complete_type_witness %I.type.722 [concrete] // CHECK:STDOUT: %I.facet.831: %I.type.722 = facet_value %C, (%I.impl_witness.a7c) [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %t.param_patt.5f9: %pattern_type.98b = value_param_pattern [concrete] +// CHECK:STDOUT: %t.patt.c3d: %pattern_type.98b = at_binding_pattern t, %t.param_patt.5f9 [concrete] // CHECK:STDOUT: %A.specific_fn: = specific_function %A, @A(%I.facet.831) [concrete] // CHECK:STDOUT: %.115: ref %C = temporary invalid, %C.val [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] @@ -545,8 +587,8 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %I.decl: %I.type.335 = interface_decl @I [concrete = constants.%I.generic] { -// CHECK:STDOUT: %V.patt: %pattern_type.98f = symbolic_binding_pattern V, 0 [concrete] -// CHECK:STDOUT: %W.patt: %pattern_type.98f = symbolic_binding_pattern W, 1 [concrete] +// CHECK:STDOUT: %V.patt.loc3_14.1: %pattern_type.98f = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc3_14.2 (constants.%V.patt)] +// CHECK:STDOUT: %W.patt.loc3_24.1: %pattern_type.98f = symbolic_binding_pattern W, 1 [symbolic = %W.patt.loc3_24.2 (constants.%W.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc3_17.1: type = splice_block %.loc3_17.2 [concrete = type] { // CHECK:STDOUT: %.Self.loc3_14: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -561,7 +603,7 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: impl_decl @C.as.I.impl [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc7_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_15.2 (constants.%T.patt.d47)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %I.ref: %I.type.335 = name_ref I, file.%I.decl [concrete = constants.%I.generic] @@ -576,9 +618,9 @@ fn B() { // CHECK:STDOUT: %T.loc7_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc7_15.2 (constants.%T.67d)] // CHECK:STDOUT: } // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] { -// CHECK:STDOUT: %T.patt: %pattern_type.bd4 = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %t.param_patt: @A.%pattern_type (%pattern_type.d7b) = value_param_pattern [concrete] -// CHECK:STDOUT: %t.patt: @A.%pattern_type (%pattern_type.d7b) = at_binding_pattern t, %t.param_patt [concrete] +// CHECK:STDOUT: %T.patt.loc9_7.1: %pattern_type.bd4 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_7.2 (constants.%T.patt.be3)] +// CHECK:STDOUT: %t.param_patt.loc9_29.1: @A.%pattern_type (%pattern_type.d7b) = value_param_pattern [symbolic = %t.param_patt.loc9_29.2 (constants.%t.param_patt.be8)] +// CHECK:STDOUT: %t.patt.loc9_29.1: @A.%pattern_type (%pattern_type.d7b) = at_binding_pattern t, %t.param_patt.loc9_29.1 [symbolic = %t.patt.loc9_29.2 (constants.%t.patt.9d2)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc9_18.1: type = splice_block %I.type [concrete = constants.%I.type.722] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -602,7 +644,9 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @I(%V.loc3_14.2: type, %W.loc3_24.2: type) { +// CHECK:STDOUT: %V.patt.loc3_14.2: %pattern_type.98f = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc3_14.2 (constants.%V.patt)] // CHECK:STDOUT: %V.loc3_14.1: type = symbolic_binding V, 0 [symbolic = %V.loc3_14.1 (constants.%V)] +// CHECK:STDOUT: %W.patt.loc3_24.2: %pattern_type.98f = symbolic_binding_pattern W, 1 [symbolic = %W.patt.loc3_24.2 (constants.%W.patt)] // CHECK:STDOUT: %W.loc3_24.1: type = symbolic_binding W, 1 [symbolic = %W.loc3_24.1 (constants.%W)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -622,6 +666,7 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @C.as.I.impl(%T.loc7_15.1: type) { +// CHECK:STDOUT: %T.patt.loc7_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_15.2 (constants.%T.patt.d47)] // CHECK:STDOUT: %T.loc7_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc7_15.2 (constants.%T.67d)] // CHECK:STDOUT: %I.type.loc7_36.2: type = facet_type <@I, @I(%T.loc7_15.2, constants.%empty_tuple.type)> [symbolic = %I.type.loc7_36.2 (constants.%I.type.269)] // CHECK:STDOUT: %I.impl_witness.loc7_38.2: = impl_witness %I.impl_witness_table, @C.as.I.impl(%T.loc7_15.2) [symbolic = %I.impl_witness.loc7_38.2 (constants.%I.impl_witness.a35)] @@ -648,9 +693,12 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @A(%T.loc9_7.2: %I.type.722) { +// CHECK:STDOUT: %T.patt.loc9_7.2: %pattern_type.bd4 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_7.2 (constants.%T.patt.be3)] // CHECK:STDOUT: %T.loc9_7.1: %I.type.722 = symbolic_binding T, 0 [symbolic = %T.loc9_7.1 (constants.%T.a08)] // CHECK:STDOUT: %T.as_type.loc9_31.1: type = facet_access_type %T.loc9_7.1 [symbolic = %T.as_type.loc9_31.1 (constants.%T.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc9_31.1 [symbolic = %pattern_type (constants.%pattern_type.d7b)] +// CHECK:STDOUT: %t.param_patt.loc9_29.2: @A.%pattern_type (%pattern_type.d7b) = value_param_pattern [symbolic = %t.param_patt.loc9_29.2 (constants.%t.param_patt.be8)] +// CHECK:STDOUT: %t.patt.loc9_29.2: @A.%pattern_type (%pattern_type.d7b) = at_binding_pattern t, %t.param_patt.loc9_29.2 [symbolic = %t.patt.loc9_29.2 (constants.%t.patt.9d2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc9_31.1 [symbolic = %require_complete (constants.%require_complete.d9e)] @@ -669,8 +717,10 @@ fn B() { // CHECK:STDOUT: %.loc12_6.2: ref %C = temporary_storage // CHECK:STDOUT: %.loc12_6.3: init %C to %.loc12_6.2 = class_init () [concrete = constants.%C.val] // CHECK:STDOUT: %.loc12_8.1: init %C = converted %.loc12_6.1, %.loc12_6.3 [concrete = constants.%C.val] -// CHECK:STDOUT: %I.facet: %I.type.722 = facet_value constants.%C, (constants.%I.impl_witness.a7c) [concrete = constants.%I.facet.831] -// CHECK:STDOUT: %.loc12_12: %I.type.722 = converted constants.%C, %I.facet [concrete = constants.%I.facet.831] +// CHECK:STDOUT: %I.facet.loc12_12.1: %I.type.722 = facet_value constants.%C, (constants.%I.impl_witness.a7c) [concrete = constants.%I.facet.831] +// CHECK:STDOUT: %.loc12_12.1: %I.type.722 = converted constants.%C, %I.facet.loc12_12.1 [concrete = constants.%I.facet.831] +// CHECK:STDOUT: %I.facet.loc12_12.2: %I.type.722 = facet_value constants.%C, (constants.%I.impl_witness.a7c) [concrete = constants.%I.facet.831] +// CHECK:STDOUT: %.loc12_12.2: %I.type.722 = converted constants.%C, %I.facet.loc12_12.2 [concrete = constants.%I.facet.831] // CHECK:STDOUT: %A.specific_fn: = specific_function %A.ref, @A(constants.%I.facet.831) [concrete = constants.%A.specific_fn] // CHECK:STDOUT: %.loc12_8.2: ref %C = temporary %.loc12_6.2, %.loc12_8.1 [concrete = constants.%.115] // CHECK:STDOUT: %.loc12_8.3: %C = acquire_value %.loc12_8.2 [concrete = constants.%C.val] @@ -687,14 +737,18 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%V, constants.%W) { +// CHECK:STDOUT: %V.patt.loc3_14.2 => constants.%V.patt // CHECK:STDOUT: %V.loc3_14.1 => constants.%V +// CHECK:STDOUT: %W.patt.loc3_24.2 => constants.%W.patt // CHECK:STDOUT: %W.loc3_24.1 => constants.%W // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I.WithSelf(constants.%V, constants.%W, constants.%Self.299) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%T.67d, constants.%empty_tuple.type) { +// CHECK:STDOUT: %V.patt.loc3_14.2 => constants.%V.patt // CHECK:STDOUT: %V.loc3_14.1 => constants.%T.67d +// CHECK:STDOUT: %W.patt.loc3_24.2 => constants.%W.patt // CHECK:STDOUT: %W.loc3_24.1 => constants.%empty_tuple.type // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -703,6 +757,7 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C.as.I.impl(constants.%T.67d) { +// CHECK:STDOUT: %T.patt.loc7_15.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc7_15.2 => constants.%T.67d // CHECK:STDOUT: %I.type.loc7_36.2 => constants.%I.type.269 // CHECK:STDOUT: %I.impl_witness.loc7_38.2 => constants.%I.impl_witness.a35 @@ -717,7 +772,9 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%empty_struct_type, constants.%empty_tuple.type) { +// CHECK:STDOUT: %V.patt.loc3_14.2 => constants.%V.patt // CHECK:STDOUT: %V.loc3_14.1 => constants.%empty_struct_type +// CHECK:STDOUT: %W.patt.loc3_24.2 => constants.%W.patt // CHECK:STDOUT: %W.loc3_24.1 => constants.%empty_tuple.type // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -730,12 +787,16 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A(constants.%T.a08) { +// CHECK:STDOUT: %T.patt.loc9_7.2 => constants.%T.patt.be3 // CHECK:STDOUT: %T.loc9_7.1 => constants.%T.a08 // CHECK:STDOUT: %T.as_type.loc9_31.1 => constants.%T.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.d7b +// CHECK:STDOUT: %t.param_patt.loc9_29.2 => constants.%t.param_patt.be8 +// CHECK:STDOUT: %t.patt.loc9_29.2 => constants.%t.patt.9d2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C.as.I.impl(constants.%empty_struct_type) { +// CHECK:STDOUT: %T.patt.loc7_15.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc7_15.2 => constants.%empty_struct_type // CHECK:STDOUT: %I.type.loc7_36.2 => constants.%I.type.722 // CHECK:STDOUT: %I.impl_witness.loc7_38.2 => constants.%I.impl_witness.a7c @@ -745,9 +806,12 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A(constants.%I.facet.831) { +// CHECK:STDOUT: %T.patt.loc9_7.2 => constants.%T.patt.be3 // CHECK:STDOUT: %T.loc9_7.1 => constants.%I.facet.831 // CHECK:STDOUT: %T.as_type.loc9_31.1 => constants.%C // CHECK:STDOUT: %pattern_type => constants.%pattern_type.98b +// CHECK:STDOUT: %t.param_patt.loc9_29.2 => constants.%t.param_patt.5f9 +// CHECK:STDOUT: %t.patt.loc9_29.2 => constants.%t.patt.c3d // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.357 @@ -759,7 +823,9 @@ fn B() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %V.patt: %pattern_type.98f = symbolic_binding_pattern V, 0 [symbolic] // CHECK:STDOUT: %V: type = symbolic_binding V, 0 [symbolic] +// CHECK:STDOUT: %W.patt: %pattern_type.98f = symbolic_binding_pattern W, 1 [symbolic] // CHECK:STDOUT: %W: type = symbolic_binding W, 1 [symbolic] // CHECK:STDOUT: %I.type.335: type = generic_interface_type @I [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -769,6 +835,7 @@ fn B() { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %T.patt.d47: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %I.type.269: type = facet_type <@I, @I(%T.67d, %empty_tuple.type)> [symbolic] @@ -779,10 +846,13 @@ fn B() { // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %I.type.6c0: type = facet_type <@I, @I(%empty_struct_type, %empty_struct_type)> [concrete] // CHECK:STDOUT: %pattern_type.5c6: type = pattern_type %I.type.6c0 [concrete] +// CHECK:STDOUT: %T.patt.c4c: %pattern_type.5c6 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.b75: %I.type.6c0 = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Self.136: %I.type.6c0 = symbolic_binding Self, 2 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T.b75 [symbolic] // CHECK:STDOUT: %pattern_type.67d: type = pattern_type %T.as_type [symbolic] +// CHECK:STDOUT: %t.param_patt: %pattern_type.67d = value_param_pattern [symbolic] +// CHECK:STDOUT: %t.patt: %pattern_type.67d = at_binding_pattern t, %t.param_patt [symbolic] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.401: = require_complete_type %T.as_type [symbolic] @@ -808,8 +878,8 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %I.decl: %I.type.335 = interface_decl @I [concrete = constants.%I.generic] { -// CHECK:STDOUT: %V.patt: %pattern_type.98f = symbolic_binding_pattern V, 0 [concrete] -// CHECK:STDOUT: %W.patt: %pattern_type.98f = symbolic_binding_pattern W, 1 [concrete] +// CHECK:STDOUT: %V.patt.loc3_14.1: %pattern_type.98f = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc3_14.2 (constants.%V.patt)] +// CHECK:STDOUT: %W.patt.loc3_24.1: %pattern_type.98f = symbolic_binding_pattern W, 1 [symbolic = %W.patt.loc3_24.2 (constants.%W.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc3_17.1: type = splice_block %.loc3_17.2 [concrete = type] { // CHECK:STDOUT: %.Self.loc3_14: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -824,7 +894,7 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: impl_decl @C.as.I.impl [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc7_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_15.2 (constants.%T.patt.d47)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %I.ref: %I.type.335 = name_ref I, file.%I.decl [concrete = constants.%I.generic] @@ -839,9 +909,9 @@ fn B() { // CHECK:STDOUT: %T.loc7_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc7_15.2 (constants.%T.67d)] // CHECK:STDOUT: } // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] { -// CHECK:STDOUT: %T.patt: %pattern_type.5c6 = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %t.param_patt: @A.%pattern_type (%pattern_type.67d) = value_param_pattern [concrete] -// CHECK:STDOUT: %t.patt: @A.%pattern_type (%pattern_type.67d) = at_binding_pattern t, %t.param_patt [concrete] +// CHECK:STDOUT: %T.patt.loc9_7.1: %pattern_type.5c6 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_7.2 (constants.%T.patt.c4c)] +// CHECK:STDOUT: %t.param_patt.loc9_29.1: @A.%pattern_type (%pattern_type.67d) = value_param_pattern [symbolic = %t.param_patt.loc9_29.2 (constants.%t.param_patt)] +// CHECK:STDOUT: %t.patt.loc9_29.1: @A.%pattern_type (%pattern_type.67d) = at_binding_pattern t, %t.param_patt.loc9_29.1 [symbolic = %t.patt.loc9_29.2 (constants.%t.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc9_18.1: type = splice_block %I.type [concrete = constants.%I.type.6c0] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -865,7 +935,9 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @I(%V.loc3_14.2: type, %W.loc3_24.2: type) { +// CHECK:STDOUT: %V.patt.loc3_14.2: %pattern_type.98f = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc3_14.2 (constants.%V.patt)] // CHECK:STDOUT: %V.loc3_14.1: type = symbolic_binding V, 0 [symbolic = %V.loc3_14.1 (constants.%V)] +// CHECK:STDOUT: %W.patt.loc3_24.2: %pattern_type.98f = symbolic_binding_pattern W, 1 [symbolic = %W.patt.loc3_24.2 (constants.%W.patt)] // CHECK:STDOUT: %W.loc3_24.1: type = symbolic_binding W, 1 [symbolic = %W.loc3_24.1 (constants.%W)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -885,6 +957,7 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @C.as.I.impl(%T.loc7_15.1: type) { +// CHECK:STDOUT: %T.patt.loc7_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_15.2 (constants.%T.patt.d47)] // CHECK:STDOUT: %T.loc7_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc7_15.2 (constants.%T.67d)] // CHECK:STDOUT: %I.type.loc7_36.2: type = facet_type <@I, @I(%T.loc7_15.2, constants.%empty_tuple.type)> [symbolic = %I.type.loc7_36.2 (constants.%I.type.269)] // CHECK:STDOUT: %I.impl_witness.loc7_38.2: = impl_witness %I.impl_witness_table, @C.as.I.impl(%T.loc7_15.2) [symbolic = %I.impl_witness.loc7_38.2 (constants.%I.impl_witness)] @@ -911,9 +984,12 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @A(%T.loc9_7.2: %I.type.6c0) { +// CHECK:STDOUT: %T.patt.loc9_7.2: %pattern_type.5c6 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_7.2 (constants.%T.patt.c4c)] // CHECK:STDOUT: %T.loc9_7.1: %I.type.6c0 = symbolic_binding T, 0 [symbolic = %T.loc9_7.1 (constants.%T.b75)] // CHECK:STDOUT: %T.as_type.loc9_31.1: type = facet_access_type %T.loc9_7.1 [symbolic = %T.as_type.loc9_31.1 (constants.%T.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc9_31.1 [symbolic = %pattern_type (constants.%pattern_type.67d)] +// CHECK:STDOUT: %t.param_patt.loc9_29.2: @A.%pattern_type (%pattern_type.67d) = value_param_pattern [symbolic = %t.param_patt.loc9_29.2 (constants.%t.param_patt)] +// CHECK:STDOUT: %t.patt.loc9_29.2: @A.%pattern_type (%pattern_type.67d) = at_binding_pattern t, %t.param_patt.loc9_29.2 [symbolic = %t.patt.loc9_29.2 (constants.%t.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc9_31.1 [symbolic = %require_complete (constants.%require_complete.401)] @@ -936,14 +1012,18 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%V, constants.%W) { +// CHECK:STDOUT: %V.patt.loc3_14.2 => constants.%V.patt // CHECK:STDOUT: %V.loc3_14.1 => constants.%V +// CHECK:STDOUT: %W.patt.loc3_24.2 => constants.%W.patt // CHECK:STDOUT: %W.loc3_24.1 => constants.%W // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I.WithSelf(constants.%V, constants.%W, constants.%Self.299) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%T.67d, constants.%empty_tuple.type) { +// CHECK:STDOUT: %V.patt.loc3_14.2 => constants.%V.patt // CHECK:STDOUT: %V.loc3_14.1 => constants.%T.67d +// CHECK:STDOUT: %W.patt.loc3_24.2 => constants.%W.patt // CHECK:STDOUT: %W.loc3_24.1 => constants.%empty_tuple.type // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -952,6 +1032,7 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C.as.I.impl(constants.%T.67d) { +// CHECK:STDOUT: %T.patt.loc7_15.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc7_15.2 => constants.%T.67d // CHECK:STDOUT: %I.type.loc7_36.2 => constants.%I.type.269 // CHECK:STDOUT: %I.impl_witness.loc7_38.2 => constants.%I.impl_witness @@ -966,7 +1047,9 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%empty_struct_type, constants.%empty_struct_type) { +// CHECK:STDOUT: %V.patt.loc3_14.2 => constants.%V.patt // CHECK:STDOUT: %V.loc3_14.1 => constants.%empty_struct_type +// CHECK:STDOUT: %W.patt.loc3_24.2 => constants.%W.patt // CHECK:STDOUT: %W.loc3_24.1 => constants.%empty_struct_type // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -979,9 +1062,12 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A(constants.%T.b75) { +// CHECK:STDOUT: %T.patt.loc9_7.2 => constants.%T.patt.c4c // CHECK:STDOUT: %T.loc9_7.1 => constants.%T.b75 // CHECK:STDOUT: %T.as_type.loc9_31.1 => constants.%T.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.67d +// CHECK:STDOUT: %t.param_patt.loc9_29.2 => constants.%t.param_patt +// CHECK:STDOUT: %t.patt.loc9_29.2 => constants.%t.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_mismatch_impl_self_with_fixed_specific.carbon @@ -992,7 +1078,9 @@ fn B() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %V.patt: %pattern_type.98f = symbolic_binding_pattern V, 0 [symbolic] // CHECK:STDOUT: %V: type = symbolic_binding V, 0 [symbolic] +// CHECK:STDOUT: %W.patt: %pattern_type.98f = symbolic_binding_pattern W, 1 [symbolic] // CHECK:STDOUT: %W: type = symbolic_binding W, 1 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -1000,15 +1088,19 @@ fn B() { // CHECK:STDOUT: %C.47a: type = class_type @C, @C(%V, %W) [symbolic] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %T.patt.d47: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %C.ab0: type = class_type @C, @C(%T.67d, %empty_tuple.type) [symbolic] // CHECK:STDOUT: %I.impl_witness: = impl_witness @C.as.I.impl.%I.impl_witness_table, @C.as.I.impl(%T.67d) [symbolic] // CHECK:STDOUT: %I.facet: %I.type = facet_value %C.ab0, (%I.impl_witness) [symbolic] // CHECK:STDOUT: %pattern_type.6cb: type = pattern_type %I.type [concrete] +// CHECK:STDOUT: %T.patt.1df: %pattern_type.6cb = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.dda: %I.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T.dda [symbolic] // CHECK:STDOUT: %pattern_type.b3a: type = pattern_type %T.as_type [symbolic] +// CHECK:STDOUT: %t.param_patt: %pattern_type.b3a = value_param_pattern [symbolic] +// CHECK:STDOUT: %t.patt: %pattern_type.b3a = at_binding_pattern t, %t.param_patt [symbolic] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type [symbolic] @@ -1037,8 +1129,8 @@ fn B() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %I.decl: type = interface_decl @I [concrete = constants.%I.type] {} {} // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %V.patt: %pattern_type.98f = symbolic_binding_pattern V, 0 [concrete] -// CHECK:STDOUT: %W.patt: %pattern_type.98f = symbolic_binding_pattern W, 1 [concrete] +// CHECK:STDOUT: %V.patt.loc5_10.1: %pattern_type.98f = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc5_10.2 (constants.%V.patt)] +// CHECK:STDOUT: %W.patt.loc5_20.1: %pattern_type.98f = symbolic_binding_pattern W, 1 [symbolic = %W.patt.loc5_20.2 (constants.%W.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc5_13.1: type = splice_block %.loc5_13.2 [concrete = type] { // CHECK:STDOUT: %.Self.loc5_10: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1052,7 +1144,7 @@ fn B() { // CHECK:STDOUT: %W.loc5_20.2: type = symbolic_binding W, 1 [symbolic = %W.loc5_20.1 (constants.%W)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @C.as.I.impl [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc7_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_15.2 (constants.%T.patt.d47)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: %C.type = name_ref C, file.%C.decl [concrete = constants.%C.generic] // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc7_15.1 [symbolic = %T.loc7_15.2 (constants.%T.67d)] @@ -1067,9 +1159,9 @@ fn B() { // CHECK:STDOUT: %T.loc7_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc7_15.2 (constants.%T.67d)] // CHECK:STDOUT: } // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] { -// CHECK:STDOUT: %T.patt: %pattern_type.6cb = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %t.param_patt: @A.%pattern_type (%pattern_type.b3a) = value_param_pattern [concrete] -// CHECK:STDOUT: %t.patt: @A.%pattern_type (%pattern_type.b3a) = at_binding_pattern t, %t.param_patt [concrete] +// CHECK:STDOUT: %T.patt.loc9_7.1: %pattern_type.6cb = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_7.2 (constants.%T.patt.1df)] +// CHECK:STDOUT: %t.param_patt.loc9_21.1: @A.%pattern_type (%pattern_type.b3a) = value_param_pattern [symbolic = %t.param_patt.loc9_21.2 (constants.%t.param_patt)] +// CHECK:STDOUT: %t.patt.loc9_21.1: @A.%pattern_type (%pattern_type.b3a) = at_binding_pattern t, %t.param_patt.loc9_21.1 [symbolic = %t.patt.loc9_21.2 (constants.%t.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc9_10: type = splice_block %I.ref [concrete = constants.%I.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1099,6 +1191,7 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @C.as.I.impl(%T.loc7_15.1: type) { +// CHECK:STDOUT: %T.patt.loc7_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_15.2 (constants.%T.patt.d47)] // CHECK:STDOUT: %T.loc7_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc7_15.2 (constants.%T.67d)] // CHECK:STDOUT: %C.loc7_31.2: type = class_type @C, @C(%T.loc7_15.2, constants.%empty_tuple.type) [symbolic = %C.loc7_31.2 (constants.%C.ab0)] // CHECK:STDOUT: %I.impl_witness.loc7_38.2: = impl_witness %I.impl_witness_table, @C.as.I.impl(%T.loc7_15.2) [symbolic = %I.impl_witness.loc7_38.2 (constants.%I.impl_witness)] @@ -1116,7 +1209,9 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%V.loc5_10.2: type, %W.loc5_20.2: type) { +// CHECK:STDOUT: %V.patt.loc5_10.2: %pattern_type.98f = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc5_10.2 (constants.%V.patt)] // CHECK:STDOUT: %V.loc5_10.1: type = symbolic_binding V, 0 [symbolic = %V.loc5_10.1 (constants.%V)] +// CHECK:STDOUT: %W.patt.loc5_20.2: %pattern_type.98f = symbolic_binding_pattern W, 1 [symbolic = %W.patt.loc5_20.2 (constants.%W.patt)] // CHECK:STDOUT: %W.loc5_20.1: type = symbolic_binding W, 1 [symbolic = %W.loc5_20.1 (constants.%W)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1131,9 +1226,12 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @A(%T.loc9_7.2: %I.type) { +// CHECK:STDOUT: %T.patt.loc9_7.2: %pattern_type.6cb = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_7.2 (constants.%T.patt.1df)] // CHECK:STDOUT: %T.loc9_7.1: %I.type = symbolic_binding T, 0 [symbolic = %T.loc9_7.1 (constants.%T.dda)] // CHECK:STDOUT: %T.as_type.loc9_23.1: type = facet_access_type %T.loc9_7.1 [symbolic = %T.as_type.loc9_23.1 (constants.%T.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc9_23.1 [symbolic = %pattern_type (constants.%pattern_type.b3a)] +// CHECK:STDOUT: %t.param_patt.loc9_21.2: @A.%pattern_type (%pattern_type.b3a) = value_param_pattern [symbolic = %t.param_patt.loc9_21.2 (constants.%t.param_patt)] +// CHECK:STDOUT: %t.patt.loc9_21.2: @A.%pattern_type (%pattern_type.b3a) = at_binding_pattern t, %t.param_patt.loc9_21.2 [symbolic = %t.patt.loc9_21.2 (constants.%t.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc9_23.1 [symbolic = %require_complete (constants.%require_complete)] @@ -1165,16 +1263,21 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%V, constants.%W) { +// CHECK:STDOUT: %V.patt.loc5_10.2 => constants.%V.patt // CHECK:STDOUT: %V.loc5_10.1 => constants.%V +// CHECK:STDOUT: %W.patt.loc5_20.2 => constants.%W.patt // CHECK:STDOUT: %W.loc5_20.1 => constants.%W // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%T.67d, constants.%empty_tuple.type) { +// CHECK:STDOUT: %V.patt.loc5_10.2 => constants.%V.patt // CHECK:STDOUT: %V.loc5_10.1 => constants.%T.67d +// CHECK:STDOUT: %W.patt.loc5_20.2 => constants.%W.patt // CHECK:STDOUT: %W.loc5_20.1 => constants.%empty_tuple.type // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C.as.I.impl(constants.%T.67d) { +// CHECK:STDOUT: %T.patt.loc7_15.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc7_15.2 => constants.%T.67d // CHECK:STDOUT: %C.loc7_31.2 => constants.%C.ab0 // CHECK:STDOUT: %I.impl_witness.loc7_38.2 => constants.%I.impl_witness @@ -1185,13 +1288,18 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A(constants.%T.dda) { +// CHECK:STDOUT: %T.patt.loc9_7.2 => constants.%T.patt.1df // CHECK:STDOUT: %T.loc9_7.1 => constants.%T.dda // CHECK:STDOUT: %T.as_type.loc9_23.1 => constants.%T.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.b3a +// CHECK:STDOUT: %t.param_patt.loc9_21.2 => constants.%t.param_patt +// CHECK:STDOUT: %t.patt.loc9_21.2 => constants.%t.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%empty_struct_type, constants.%empty_struct_type) { +// CHECK:STDOUT: %V.patt.loc5_10.2 => constants.%V.patt // CHECK:STDOUT: %V.loc5_10.1 => constants.%empty_struct_type +// CHECK:STDOUT: %W.patt.loc5_20.2 => constants.%W.patt // CHECK:STDOUT: %W.loc5_20.1 => constants.%empty_struct_type // CHECK:STDOUT: // CHECK:STDOUT: !definition: diff --git a/toolchain/check/testdata/facet/convert_facet_value_as_type_knows_original_type.carbon b/toolchain/check/testdata/facet/convert_facet_value_as_type_knows_original_type.carbon index ef6297b54a41..97d00510bc22 100644 --- a/toolchain/check/testdata/facet/convert_facet_value_as_type_knows_original_type.carbon +++ b/toolchain/check/testdata/facet/convert_facet_value_as_type_knows_original_type.carbon @@ -144,6 +144,7 @@ fn F[A:! J, B:! A](x: C(A, B)) { // CHECK:STDOUT: %Eats.WithSelf.Eat.type.618: type = fn_type @Eats.WithSelf.Eat, @Eats.WithSelf(%Eats.facet) [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %pattern_type.283: type = pattern_type %Goat [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.283 = value_binding_pattern x [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %Goat.val: %Goat = struct_value () [concrete] // CHECK:STDOUT: %.4ea: ref %Goat = temporary invalid, %Goat.val [concrete] @@ -156,13 +157,15 @@ fn F[A:! J, B:! A](x: C(A, B)) { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.283 = value_binding_pattern x [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.283 = value_binding_pattern x [concrete = constants.%x.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc22_28.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] // CHECK:STDOUT: %Goat.ref.loc22_33: type = name_ref Goat, file.%Goat.decl [concrete = constants.%Goat] // CHECK:STDOUT: %.loc22_28.2: ref %Goat = temporary_storage // CHECK:STDOUT: %.loc22_28.3: init %Goat to %.loc22_28.2 = class_init () [concrete = constants.%Goat.val] // CHECK:STDOUT: %.loc22_30.1: init %Goat = converted %.loc22_28.1, %.loc22_28.3 [concrete = constants.%Goat.val] +// CHECK:STDOUT: %.loc22_30.2: ref %Goat = temporary %.loc22_28.2, %.loc22_30.1 [concrete = constants.%.4ea] +// CHECK:STDOUT: %.loc22_30.3: %Goat = acquire_value %.loc22_30.2 [concrete = constants.%Goat.val] // CHECK:STDOUT: %.loc22_15.1: type = splice_block %.loc22_15.3 [concrete = constants.%Goat] { // CHECK:STDOUT: %Goat.ref.loc22_10: type = name_ref Goat, file.%Goat.decl [concrete = constants.%Goat] // CHECK:STDOUT: %Animal.ref.loc22: type = name_ref Animal, file.%Animal.decl [concrete = constants.%Animal.type] @@ -171,8 +174,6 @@ fn F[A:! J, B:! A](x: C(A, B)) { // CHECK:STDOUT: %as_type.loc22: type = facet_access_type %.loc22_15.2 [concrete = constants.%Goat] // CHECK:STDOUT: %.loc22_15.3: type = converted %.loc22_15.2, %as_type.loc22 [concrete = constants.%Goat] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc22_30.2: ref %Goat = temporary %.loc22_28.2, %.loc22_30.1 [concrete = constants.%.4ea] -// CHECK:STDOUT: %.loc22_30.3: %Goat = acquire_value %.loc22_30.2 [concrete = constants.%Goat.val] // CHECK:STDOUT: %x: %Goat = value_binding x, %.loc22_30.3 // CHECK:STDOUT: %x.ref.loc23: %Goat = name_ref x, %x // CHECK:STDOUT: %Bleet.ref.loc23: %Goat.Bleet.type = name_ref Bleet, @Goat.%Goat.Bleet.decl [concrete = constants.%Goat.Bleet] @@ -227,15 +228,20 @@ fn F[A:! J, B:! A](x: C(A, B)) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %J.type: type = facet_type <@J> [concrete] +// CHECK:STDOUT: %pattern_type.2c5: type = pattern_type %J.type [concrete] +// CHECK:STDOUT: %A.patt: %pattern_type.2c5 = symbolic_binding_pattern A, 0 [symbolic] // CHECK:STDOUT: %A: %J.type = symbolic_binding A, 0 [symbolic] // CHECK:STDOUT: %A.as_type: type = facet_access_type %A [symbolic] // CHECK:STDOUT: %pattern_type.76a: type = pattern_type %A.as_type [symbolic] +// CHECK:STDOUT: %B.patt: %pattern_type.76a = symbolic_binding_pattern B, 1 [symbolic] // CHECK:STDOUT: %B: %A.as_type = symbolic_binding B, 1 [symbolic] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %C: type = class_type @C, @C(%A, %B) [symbolic] // CHECK:STDOUT: %pattern_type.bac: type = pattern_type %C [symbolic] +// CHECK:STDOUT: %x.param_patt: %pattern_type.bac = value_param_pattern [symbolic] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] +// CHECK:STDOUT: %x.patt.390072.2: %pattern_type.bac = at_binding_pattern x, %x.param_patt [symbolic] // CHECK:STDOUT: %G.specific_fn: = specific_function %G, @G(%A, %B) [symbolic] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -250,7 +256,8 @@ fn F[A:! J, B:! A](x: C(A, B)) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %G.ref: %G.type = name_ref G, file.%G.decl [concrete = constants.%G] // CHECK:STDOUT: %x.ref: @F.%C.loc25_29.1 (%C) = name_ref x, %x -// CHECK:STDOUT: %.loc27: %J.type = converted constants.%A.as_type, constants.%A [symbolic = %A.loc25_7.1 (constants.%A)] +// CHECK:STDOUT: %.loc27_6.1: %J.type = converted constants.%A.as_type, constants.%A [symbolic = %A.loc25_7.1 (constants.%A)] +// CHECK:STDOUT: %.loc27_6.2: %J.type = converted constants.%A.as_type, constants.%A [symbolic = %A.loc25_7.1 (constants.%A)] // CHECK:STDOUT: %G.specific_fn.loc27_3.1: = specific_function %G.ref, @G(constants.%A, constants.%B) [symbolic = %G.specific_fn.loc27_3.2 (constants.%G.specific_fn)] // CHECK:STDOUT: %G.call: init %empty_tuple.type = call %G.specific_fn.loc27_3.1(%x.ref) // CHECK:STDOUT: @@ -258,11 +265,15 @@ fn F[A:! J, B:! A](x: C(A, B)) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%A, constants.%B) { +// CHECK:STDOUT: %A.patt.loc25_7.2 => constants.%A.patt // CHECK:STDOUT: %A.loc25_7.1 => constants.%A // CHECK:STDOUT: %A.as_type.loc25_17.1 => constants.%A.as_type -// CHECK:STDOUT: %B.loc25_14.1 => constants.%B // CHECK:STDOUT: %pattern_type.loc25_14 => constants.%pattern_type.76a +// CHECK:STDOUT: %B.patt.loc25_14.2 => constants.%B.patt +// CHECK:STDOUT: %B.loc25_14.1 => constants.%B // CHECK:STDOUT: %C.loc25_29.1 => constants.%C // CHECK:STDOUT: %pattern_type.loc25_21 => constants.%pattern_type.bac +// CHECK:STDOUT: %x.param_patt.loc25_21.2 => constants.%x.param_patt +// CHECK:STDOUT: %x.patt.loc25_21.2 => constants.%x.patt.390072.2 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/facet/convert_facet_value_to_itself.carbon b/toolchain/check/testdata/facet/convert_facet_value_to_itself.carbon index f24c27d317be..9fd34d972b8d 100644 --- a/toolchain/check/testdata/facet/convert_facet_value_to_itself.carbon +++ b/toolchain/check/testdata/facet/convert_facet_value_to_itself.carbon @@ -33,10 +33,12 @@ fn F() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type %Animal.type [concrete] +// CHECK:STDOUT: %T.patt.e44e2f.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.443025.1: %Animal.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %FeedAnimal.type: type = fn_type @FeedAnimal [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %FeedAnimal: %FeedAnimal.type = struct_value () [concrete] +// CHECK:STDOUT: %T.patt.e44e2f.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.443025.2: %Animal.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %HandleAnimal.type: type = fn_type @HandleAnimal [concrete] // CHECK:STDOUT: %HandleAnimal: %HandleAnimal.type = struct_value () [concrete] @@ -71,7 +73,7 @@ fn F() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Animal.decl: type = interface_decl @Animal [concrete = constants.%Animal.type] {} {} // CHECK:STDOUT: %FeedAnimal.decl: %FeedAnimal.type = fn_decl @FeedAnimal [concrete = constants.%FeedAnimal] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc17_23.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc17_23.2 (constants.%T.patt.e44e2f.1)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc17: type = splice_block %Animal.ref [concrete = constants.%Animal.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -80,7 +82,7 @@ fn F() { // CHECK:STDOUT: %T.loc17_23.2: %Animal.type = symbolic_binding T, 0 [symbolic = %T.loc17_23.1 (constants.%T.443025.1)] // CHECK:STDOUT: } // CHECK:STDOUT: %HandleAnimal.decl: %HandleAnimal.type = fn_decl @HandleAnimal [concrete = constants.%HandleAnimal] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc19_18.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc19_18.2 (constants.%T.patt.e44e2f.2)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc19: type = splice_block %Animal.ref [concrete = constants.%Animal.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -125,6 +127,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @FeedAnimal(%T.loc17_23.2: %Animal.type) { +// CHECK:STDOUT: %T.patt.loc17_23.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc17_23.2 (constants.%T.patt.e44e2f.1)] // CHECK:STDOUT: %T.loc17_23.1: %Animal.type = symbolic_binding T, 0 [symbolic = %T.loc17_23.1 (constants.%T.443025.1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -136,6 +139,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @HandleAnimal(%T.loc19_18.2: %Animal.type) { +// CHECK:STDOUT: %T.patt.loc19_18.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc19_18.2 (constants.%T.patt.e44e2f.2)] // CHECK:STDOUT: %T.loc19_18.1: %Animal.type = symbolic_binding T, 0 [symbolic = %T.loc19_18.1 (constants.%T.443025.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -167,14 +171,17 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @FeedAnimal(constants.%T.443025.1) { +// CHECK:STDOUT: %T.patt.loc17_23.2 => constants.%T.patt.e44e2f.1 // CHECK:STDOUT: %T.loc17_23.1 => constants.%T.443025.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HandleAnimal(constants.%T.443025.2) { +// CHECK:STDOUT: %T.patt.loc19_18.2 => constants.%T.patt.e44e2f.2 // CHECK:STDOUT: %T.loc19_18.1 => constants.%T.443025.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @FeedAnimal(constants.%T.443025.2) { +// CHECK:STDOUT: %T.patt.loc17_23.2 => constants.%T.patt.e44e2f.1 // CHECK:STDOUT: %T.loc17_23.1 => constants.%T.443025.2 // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -185,6 +192,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HandleAnimal(constants.%Animal.facet) { +// CHECK:STDOUT: %T.patt.loc19_18.2 => constants.%T.patt.e44e2f.2 // CHECK:STDOUT: %T.loc19_18.1 => constants.%Animal.facet // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -192,6 +200,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @FeedAnimal(constants.%Animal.facet) { +// CHECK:STDOUT: %T.patt.loc17_23.2 => constants.%T.patt.e44e2f.1 // CHECK:STDOUT: %T.loc17_23.1 => constants.%Animal.facet // CHECK:STDOUT: // CHECK:STDOUT: !definition: diff --git a/toolchain/check/testdata/facet/convert_facet_value_to_narrowed_facet_type.carbon b/toolchain/check/testdata/facet/convert_facet_value_to_narrowed_facet_type.carbon index 2d9e721a87ef..2eb7af7c9536 100644 --- a/toolchain/check/testdata/facet/convert_facet_value_to_narrowed_facet_type.carbon +++ b/toolchain/check/testdata/facet/convert_facet_value_to_narrowed_facet_type.carbon @@ -99,9 +99,12 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.880: type = pattern_type %Eats.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.880 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: %Eats.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] // CHECK:STDOUT: %pattern_type.aed: type = pattern_type %T.as_type [symbolic] +// CHECK:STDOUT: %e.param_patt.0be: %pattern_type.aed = value_param_pattern [symbolic] +// CHECK:STDOUT: %e.patt.543: %pattern_type.aed = at_binding_pattern e, %e.param_patt.0be [symbolic] // CHECK:STDOUT: %Feed.type: type = fn_type @Feed [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Feed: %Feed.type = struct_value () [concrete] @@ -118,14 +121,19 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %type.as.BitAndWith.impl.Op.bound: = bound_method %Animal.type, %type.as.BitAndWith.impl.Op [concrete] // CHECK:STDOUT: %facet_type: type = facet_type <@Eats & @Animal> [concrete] // CHECK:STDOUT: %pattern_type.018: type = pattern_type %facet_type [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.018 = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %U: %facet_type = symbolic_binding U, 0 [symbolic] // CHECK:STDOUT: %U.as_type: type = facet_access_type %U [symbolic] // CHECK:STDOUT: %pattern_type.c56: type = pattern_type %U.as_type [symbolic] +// CHECK:STDOUT: %a.param_patt: %pattern_type.c56 = value_param_pattern [symbolic] +// CHECK:STDOUT: %a.patt: %pattern_type.c56 = at_binding_pattern a, %a.param_patt [symbolic] // CHECK:STDOUT: %HandleAnimal.type: type = fn_type @HandleAnimal [concrete] // CHECK:STDOUT: %HandleAnimal: %HandleAnimal.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.ad2: = require_complete_type %U.as_type [symbolic] // CHECK:STDOUT: %Eats.lookup_impl_witness: = lookup_impl_witness %U, @Eats [symbolic] // CHECK:STDOUT: %Eats.facet: %Eats.type = facet_value %U.as_type, (%Eats.lookup_impl_witness) [symbolic] +// CHECK:STDOUT: %e.param_patt.80a: %pattern_type.c56 = value_param_pattern [symbolic] +// CHECK:STDOUT: %e.patt.3cb: %pattern_type.c56 = at_binding_pattern e, %e.param_patt.80a [symbolic] // CHECK:STDOUT: %Feed.specific_fn: = specific_function %Feed, @Feed(%Eats.facet) [symbolic] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -152,9 +160,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %Eats.decl: type = interface_decl @Eats [concrete = constants.%Eats.type] {} {} // CHECK:STDOUT: %Animal.decl: type = interface_decl @Animal [concrete = constants.%Animal.type] {} {} // CHECK:STDOUT: %Feed.decl: %Feed.type = fn_decl @Feed [concrete = constants.%Feed] { -// CHECK:STDOUT: %T.patt: %pattern_type.880 = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %e.param_patt: @Feed.%pattern_type (%pattern_type.aed) = value_param_pattern [concrete] -// CHECK:STDOUT: %e.patt: @Feed.%pattern_type (%pattern_type.aed) = at_binding_pattern e, %e.param_patt [concrete] +// CHECK:STDOUT: %T.patt.loc6_10.1: %pattern_type.880 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_10.2 (constants.%T.patt)] +// CHECK:STDOUT: %e.param_patt.loc6_27.1: @Feed.%pattern_type (%pattern_type.aed) = value_param_pattern [symbolic = %e.param_patt.loc6_27.2 (constants.%e.param_patt.0be)] +// CHECK:STDOUT: %e.patt.loc6_27.1: @Feed.%pattern_type (%pattern_type.aed) = at_binding_pattern e, %e.param_patt.loc6_27.1 [symbolic = %e.patt.loc6_27.2 (constants.%e.patt.543)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6_13: type = splice_block %Eats.ref [concrete = constants.%Eats.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -170,9 +178,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %e: @Feed.%T.as_type.loc6_29.1 (%T.as_type) = value_binding e, %e.param // CHECK:STDOUT: } // CHECK:STDOUT: %HandleAnimal.decl: %HandleAnimal.type = fn_decl @HandleAnimal [concrete = constants.%HandleAnimal] { -// CHECK:STDOUT: %U.patt: %pattern_type.018 = symbolic_binding_pattern U, 0 [concrete] -// CHECK:STDOUT: %a.param_patt: @HandleAnimal.%pattern_type (%pattern_type.c56) = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: @HandleAnimal.%pattern_type (%pattern_type.c56) = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %U.patt.loc8_18.1: %pattern_type.018 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc8_18.2 (constants.%U.patt)] +// CHECK:STDOUT: %a.param_patt.loc8_37.1: @HandleAnimal.%pattern_type (%pattern_type.c56) = value_param_pattern [symbolic = %a.param_patt.loc8_37.2 (constants.%a.param_patt)] +// CHECK:STDOUT: %a.patt.loc8_37.1: @HandleAnimal.%pattern_type (%pattern_type.c56) = at_binding_pattern a, %a.param_patt.loc8_37.1 [symbolic = %a.patt.loc8_37.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8_28.1: type = splice_block %.loc8_28.3 [concrete = constants.%facet_type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -218,9 +226,12 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Feed(%T.loc6_10.2: %Eats.type) { +// CHECK:STDOUT: %T.patt.loc6_10.2: %pattern_type.880 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_10.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc6_10.1: %Eats.type = symbolic_binding T, 0 [symbolic = %T.loc6_10.1 (constants.%T)] // CHECK:STDOUT: %T.as_type.loc6_29.1: type = facet_access_type %T.loc6_10.1 [symbolic = %T.as_type.loc6_29.1 (constants.%T.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc6_29.1 [symbolic = %pattern_type (constants.%pattern_type.aed)] +// CHECK:STDOUT: %e.param_patt.loc6_27.2: @Feed.%pattern_type (%pattern_type.aed) = value_param_pattern [symbolic = %e.param_patt.loc6_27.2 (constants.%e.param_patt.0be)] +// CHECK:STDOUT: %e.patt.loc6_27.2: @Feed.%pattern_type (%pattern_type.aed) = at_binding_pattern e, %e.param_patt.loc6_27.2 [symbolic = %e.patt.loc6_27.2 (constants.%e.patt.543)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc6_29.1 [symbolic = %require_complete (constants.%require_complete.c4d)] @@ -232,22 +243,27 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @HandleAnimal(%U.loc8_18.2: %facet_type) { +// CHECK:STDOUT: %U.patt.loc8_18.2: %pattern_type.018 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc8_18.2 (constants.%U.patt)] // CHECK:STDOUT: %U.loc8_18.1: %facet_type = symbolic_binding U, 0 [symbolic = %U.loc8_18.1 (constants.%U)] // CHECK:STDOUT: %U.as_type.loc8_39.1: type = facet_access_type %U.loc8_18.1 [symbolic = %U.as_type.loc8_39.1 (constants.%U.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %U.as_type.loc8_39.1 [symbolic = %pattern_type (constants.%pattern_type.c56)] +// CHECK:STDOUT: %a.param_patt.loc8_37.2: @HandleAnimal.%pattern_type (%pattern_type.c56) = value_param_pattern [symbolic = %a.param_patt.loc8_37.2 (constants.%a.param_patt)] +// CHECK:STDOUT: %a.patt.loc8_37.2: @HandleAnimal.%pattern_type (%pattern_type.c56) = at_binding_pattern a, %a.param_patt.loc8_37.2 [symbolic = %a.patt.loc8_37.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %U.as_type.loc8_39.1 [symbolic = %require_complete (constants.%require_complete.ad2)] // CHECK:STDOUT: %Eats.lookup_impl_witness: = lookup_impl_witness %U.loc8_18.1, @Eats [symbolic = %Eats.lookup_impl_witness (constants.%Eats.lookup_impl_witness)] -// CHECK:STDOUT: %Eats.facet.loc8_50.2: %Eats.type = facet_value %U.as_type.loc8_39.1, (%Eats.lookup_impl_witness) [symbolic = %Eats.facet.loc8_50.2 (constants.%Eats.facet)] -// CHECK:STDOUT: %Feed.specific_fn.loc8_44.2: = specific_function constants.%Feed, @Feed(%Eats.facet.loc8_50.2) [symbolic = %Feed.specific_fn.loc8_44.2 (constants.%Feed.specific_fn)] +// CHECK:STDOUT: %Eats.facet.loc8_50.3: %Eats.type = facet_value %U.as_type.loc8_39.1, (%Eats.lookup_impl_witness) [symbolic = %Eats.facet.loc8_50.3 (constants.%Eats.facet)] +// CHECK:STDOUT: %Feed.specific_fn.loc8_44.2: = specific_function constants.%Feed, @Feed(%Eats.facet.loc8_50.3) [symbolic = %Feed.specific_fn.loc8_44.2 (constants.%Feed.specific_fn)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%a.param: @HandleAnimal.%U.as_type.loc8_39.1 (%U.as_type)) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Feed.ref: %Feed.type = name_ref Feed, file.%Feed.decl [concrete = constants.%Feed] // CHECK:STDOUT: %a.ref: @HandleAnimal.%U.as_type.loc8_39.1 (%U.as_type) = name_ref a, %a -// CHECK:STDOUT: %Eats.facet.loc8_50.1: %Eats.type = facet_value constants.%U.as_type, (constants.%Eats.lookup_impl_witness) [symbolic = %Eats.facet.loc8_50.2 (constants.%Eats.facet)] -// CHECK:STDOUT: %.loc8_50: %Eats.type = converted constants.%U.as_type, %Eats.facet.loc8_50.1 [symbolic = %Eats.facet.loc8_50.2 (constants.%Eats.facet)] +// CHECK:STDOUT: %Eats.facet.loc8_50.1: %Eats.type = facet_value constants.%U.as_type, (constants.%Eats.lookup_impl_witness) [symbolic = %Eats.facet.loc8_50.3 (constants.%Eats.facet)] +// CHECK:STDOUT: %.loc8_50.1: %Eats.type = converted constants.%U.as_type, %Eats.facet.loc8_50.1 [symbolic = %Eats.facet.loc8_50.3 (constants.%Eats.facet)] +// CHECK:STDOUT: %Eats.facet.loc8_50.2: %Eats.type = facet_value constants.%U.as_type, (constants.%Eats.lookup_impl_witness) [symbolic = %Eats.facet.loc8_50.3 (constants.%Eats.facet)] +// CHECK:STDOUT: %.loc8_50.2: %Eats.type = converted constants.%U.as_type, %Eats.facet.loc8_50.2 [symbolic = %Eats.facet.loc8_50.3 (constants.%Eats.facet)] // CHECK:STDOUT: %Feed.specific_fn.loc8_44.1: = specific_function %Feed.ref, @Feed(constants.%Eats.facet) [symbolic = %Feed.specific_fn.loc8_44.2 (constants.%Feed.specific_fn)] // CHECK:STDOUT: %Feed.call: init %empty_tuple.type = call %Feed.specific_fn.loc8_44.1(%a.ref) // CHECK:STDOUT: return @@ -263,21 +279,30 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Feed(constants.%T) { +// CHECK:STDOUT: %T.patt.loc6_10.2 => constants.%T.patt // CHECK:STDOUT: %T.loc6_10.1 => constants.%T // CHECK:STDOUT: %T.as_type.loc6_29.1 => constants.%T.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.aed +// CHECK:STDOUT: %e.param_patt.loc6_27.2 => constants.%e.param_patt.0be +// CHECK:STDOUT: %e.patt.loc6_27.2 => constants.%e.patt.543 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HandleAnimal(constants.%U) { +// CHECK:STDOUT: %U.patt.loc8_18.2 => constants.%U.patt // CHECK:STDOUT: %U.loc8_18.1 => constants.%U // CHECK:STDOUT: %U.as_type.loc8_39.1 => constants.%U.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.c56 +// CHECK:STDOUT: %a.param_patt.loc8_37.2 => constants.%a.param_patt +// CHECK:STDOUT: %a.patt.loc8_37.2 => constants.%a.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Feed(constants.%Eats.facet) { +// CHECK:STDOUT: %T.patt.loc6_10.2 => constants.%T.patt // CHECK:STDOUT: %T.loc6_10.1 => constants.%Eats.facet // CHECK:STDOUT: %T.as_type.loc6_29.1 => constants.%U.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.c56 +// CHECK:STDOUT: %e.param_patt.loc6_27.2 => constants.%e.param_patt.80a +// CHECK:STDOUT: %e.patt.loc6_27.2 => constants.%e.patt.3cb // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.ad2 @@ -307,9 +332,12 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %type.as.BitAndWith.impl.Op.bound.73d: = bound_method %Tame.type, %type.as.BitAndWith.impl.Op [concrete] // CHECK:STDOUT: %facet_type.bbb: type = facet_type <@Eats & @Tame> [concrete] // CHECK:STDOUT: %pattern_type.fbb: type = pattern_type %facet_type.bbb [concrete] +// CHECK:STDOUT: %V.patt: %pattern_type.fbb = symbolic_binding_pattern V, 0 [symbolic] // CHECK:STDOUT: %V: %facet_type.bbb = symbolic_binding V, 0 [symbolic] // CHECK:STDOUT: %V.as_type: type = facet_access_type %V [symbolic] // CHECK:STDOUT: %pattern_type.7b2: type = pattern_type %V.as_type [symbolic] +// CHECK:STDOUT: %v.param_patt.bb4: %pattern_type.7b2 = value_param_pattern [symbolic] +// CHECK:STDOUT: %v.patt.d6a: %pattern_type.7b2 = at_binding_pattern v, %v.param_patt.bb4 [symbolic] // CHECK:STDOUT: %FeedTame.type: type = fn_type @FeedTame [concrete] // CHECK:STDOUT: %FeedTame: %FeedTame.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.08b: = require_complete_type %V.as_type [symbolic] @@ -318,15 +346,20 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %type.as.BitAndWith.impl.Op.bound.07c: = bound_method %facet_type.0b4, %type.as.BitAndWith.impl.Op [concrete] // CHECK:STDOUT: %facet_type.dd5: type = facet_type <@Eats & @Animal & @Tame> [concrete] // CHECK:STDOUT: %pattern_type.66f: type = pattern_type %facet_type.dd5 [concrete] +// CHECK:STDOUT: %W.patt: %pattern_type.66f = symbolic_binding_pattern W, 0 [symbolic] // CHECK:STDOUT: %W: %facet_type.dd5 = symbolic_binding W, 0 [symbolic] // CHECK:STDOUT: %W.as_type: type = facet_access_type %W [symbolic] // CHECK:STDOUT: %pattern_type.b23: type = pattern_type %W.as_type [symbolic] +// CHECK:STDOUT: %w.param_patt: %pattern_type.b23 = value_param_pattern [symbolic] +// CHECK:STDOUT: %w.patt: %pattern_type.b23 = at_binding_pattern w, %w.param_patt [symbolic] // CHECK:STDOUT: %HandleTameAnimal.type: type = fn_type @HandleTameAnimal [concrete] // CHECK:STDOUT: %HandleTameAnimal: %HandleTameAnimal.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.ec1: = require_complete_type %W.as_type [symbolic] // CHECK:STDOUT: %Eats.lookup_impl_witness: = lookup_impl_witness %W, @Eats [symbolic] // CHECK:STDOUT: %Tame.lookup_impl_witness: = lookup_impl_witness %W, @Tame [symbolic] // CHECK:STDOUT: %facet_value: %facet_type.bbb = facet_value %W.as_type, (%Eats.lookup_impl_witness, %Tame.lookup_impl_witness) [symbolic] +// CHECK:STDOUT: %v.param_patt.631: %pattern_type.b23 = value_param_pattern [symbolic] +// CHECK:STDOUT: %v.patt.273: %pattern_type.b23 = at_binding_pattern v, %v.param_patt.631 [symbolic] // CHECK:STDOUT: %FeedTame.specific_fn: = specific_function %FeedTame, @FeedTame(%facet_value) [symbolic] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -355,9 +388,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %Animal.decl: type = interface_decl @Animal [concrete = constants.%Animal.type] {} {} // CHECK:STDOUT: %Tame.decl: type = interface_decl @Tame [concrete = constants.%Tame.type] {} {} // CHECK:STDOUT: %FeedTame.decl: %FeedTame.type = fn_decl @FeedTame [concrete = constants.%FeedTame] { -// CHECK:STDOUT: %V.patt: %pattern_type.fbb = symbolic_binding_pattern V, 0 [concrete] -// CHECK:STDOUT: %v.param_patt: @FeedTame.%pattern_type (%pattern_type.7b2) = value_param_pattern [concrete] -// CHECK:STDOUT: %v.patt: @FeedTame.%pattern_type (%pattern_type.7b2) = at_binding_pattern v, %v.param_patt [concrete] +// CHECK:STDOUT: %V.patt.loc7_14.1: %pattern_type.fbb = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc7_14.2 (constants.%V.patt)] +// CHECK:STDOUT: %v.param_patt.loc7_38.1: @FeedTame.%pattern_type (%pattern_type.7b2) = value_param_pattern [symbolic = %v.param_patt.loc7_38.2 (constants.%v.param_patt.bb4)] +// CHECK:STDOUT: %v.patt.loc7_38.1: @FeedTame.%pattern_type (%pattern_type.7b2) = at_binding_pattern v, %v.param_patt.loc7_38.1 [symbolic = %v.patt.loc7_38.2 (constants.%v.patt.d6a)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc7_22.1: type = splice_block %.loc7_22.3 [concrete = constants.%facet_type.bbb] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -379,9 +412,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %v: @FeedTame.%V.as_type.loc7_40.1 (%V.as_type) = value_binding v, %v.param // CHECK:STDOUT: } // CHECK:STDOUT: %HandleTameAnimal.decl: %HandleTameAnimal.type = fn_decl @HandleTameAnimal [concrete = constants.%HandleTameAnimal] { -// CHECK:STDOUT: %W.patt: %pattern_type.66f = symbolic_binding_pattern W, 0 [concrete] -// CHECK:STDOUT: %w.param_patt: @HandleTameAnimal.%pattern_type (%pattern_type.b23) = value_param_pattern [concrete] -// CHECK:STDOUT: %w.patt: @HandleTameAnimal.%pattern_type (%pattern_type.b23) = at_binding_pattern w, %w.param_patt [concrete] +// CHECK:STDOUT: %W.patt.loc9_22.1: %pattern_type.66f = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc9_22.2 (constants.%W.patt)] +// CHECK:STDOUT: %w.param_patt.loc9_48.1: @HandleTameAnimal.%pattern_type (%pattern_type.b23) = value_param_pattern [symbolic = %w.param_patt.loc9_48.2 (constants.%w.param_patt)] +// CHECK:STDOUT: %w.patt.loc9_48.1: @HandleTameAnimal.%pattern_type (%pattern_type.b23) = at_binding_pattern w, %w.param_patt.loc9_48.1 [symbolic = %w.patt.loc9_48.2 (constants.%w.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc9_39.1: type = splice_block %.loc9_39.3 [concrete = constants.%facet_type.dd5] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -444,9 +477,12 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @FeedTame(%V.loc7_14.2: %facet_type.bbb) { +// CHECK:STDOUT: %V.patt.loc7_14.2: %pattern_type.fbb = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc7_14.2 (constants.%V.patt)] // CHECK:STDOUT: %V.loc7_14.1: %facet_type.bbb = symbolic_binding V, 0 [symbolic = %V.loc7_14.1 (constants.%V)] // CHECK:STDOUT: %V.as_type.loc7_40.1: type = facet_access_type %V.loc7_14.1 [symbolic = %V.as_type.loc7_40.1 (constants.%V.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %V.as_type.loc7_40.1 [symbolic = %pattern_type (constants.%pattern_type.7b2)] +// CHECK:STDOUT: %v.param_patt.loc7_38.2: @FeedTame.%pattern_type (%pattern_type.7b2) = value_param_pattern [symbolic = %v.param_patt.loc7_38.2 (constants.%v.param_patt.bb4)] +// CHECK:STDOUT: %v.patt.loc7_38.2: @FeedTame.%pattern_type (%pattern_type.7b2) = at_binding_pattern v, %v.param_patt.loc7_38.2 [symbolic = %v.patt.loc7_38.2 (constants.%v.patt.d6a)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %V.as_type.loc7_40.1 [symbolic = %require_complete (constants.%require_complete.08b)] @@ -458,23 +494,28 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @HandleTameAnimal(%W.loc9_22.2: %facet_type.dd5) { +// CHECK:STDOUT: %W.patt.loc9_22.2: %pattern_type.66f = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc9_22.2 (constants.%W.patt)] // CHECK:STDOUT: %W.loc9_22.1: %facet_type.dd5 = symbolic_binding W, 0 [symbolic = %W.loc9_22.1 (constants.%W)] // CHECK:STDOUT: %W.as_type.loc9_50.1: type = facet_access_type %W.loc9_22.1 [symbolic = %W.as_type.loc9_50.1 (constants.%W.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %W.as_type.loc9_50.1 [symbolic = %pattern_type (constants.%pattern_type.b23)] +// CHECK:STDOUT: %w.param_patt.loc9_48.2: @HandleTameAnimal.%pattern_type (%pattern_type.b23) = value_param_pattern [symbolic = %w.param_patt.loc9_48.2 (constants.%w.param_patt)] +// CHECK:STDOUT: %w.patt.loc9_48.2: @HandleTameAnimal.%pattern_type (%pattern_type.b23) = at_binding_pattern w, %w.param_patt.loc9_48.2 [symbolic = %w.patt.loc9_48.2 (constants.%w.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %W.as_type.loc9_50.1 [symbolic = %require_complete (constants.%require_complete.ec1)] // CHECK:STDOUT: %Eats.lookup_impl_witness: = lookup_impl_witness %W.loc9_22.1, @Eats [symbolic = %Eats.lookup_impl_witness (constants.%Eats.lookup_impl_witness)] // CHECK:STDOUT: %Tame.lookup_impl_witness: = lookup_impl_witness %W.loc9_22.1, @Tame [symbolic = %Tame.lookup_impl_witness (constants.%Tame.lookup_impl_witness)] -// CHECK:STDOUT: %facet_value.loc10_13.2: %facet_type.bbb = facet_value %W.as_type.loc9_50.1, (%Eats.lookup_impl_witness, %Tame.lookup_impl_witness) [symbolic = %facet_value.loc10_13.2 (constants.%facet_value)] -// CHECK:STDOUT: %FeedTame.specific_fn.loc10_3.2: = specific_function constants.%FeedTame, @FeedTame(%facet_value.loc10_13.2) [symbolic = %FeedTame.specific_fn.loc10_3.2 (constants.%FeedTame.specific_fn)] +// CHECK:STDOUT: %facet_value.loc10_13.3: %facet_type.bbb = facet_value %W.as_type.loc9_50.1, (%Eats.lookup_impl_witness, %Tame.lookup_impl_witness) [symbolic = %facet_value.loc10_13.3 (constants.%facet_value)] +// CHECK:STDOUT: %FeedTame.specific_fn.loc10_3.2: = specific_function constants.%FeedTame, @FeedTame(%facet_value.loc10_13.3) [symbolic = %FeedTame.specific_fn.loc10_3.2 (constants.%FeedTame.specific_fn)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%w.param: @HandleTameAnimal.%W.as_type.loc9_50.1 (%W.as_type)) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %FeedTame.ref: %FeedTame.type = name_ref FeedTame, file.%FeedTame.decl [concrete = constants.%FeedTame] // CHECK:STDOUT: %w.ref: @HandleTameAnimal.%W.as_type.loc9_50.1 (%W.as_type) = name_ref w, %w -// CHECK:STDOUT: %facet_value.loc10_13.1: %facet_type.bbb = facet_value constants.%W.as_type, (constants.%Eats.lookup_impl_witness, constants.%Tame.lookup_impl_witness) [symbolic = %facet_value.loc10_13.2 (constants.%facet_value)] -// CHECK:STDOUT: %.loc10: %facet_type.bbb = converted constants.%W.as_type, %facet_value.loc10_13.1 [symbolic = %facet_value.loc10_13.2 (constants.%facet_value)] +// CHECK:STDOUT: %facet_value.loc10_13.1: %facet_type.bbb = facet_value constants.%W.as_type, (constants.%Eats.lookup_impl_witness, constants.%Tame.lookup_impl_witness) [symbolic = %facet_value.loc10_13.3 (constants.%facet_value)] +// CHECK:STDOUT: %.loc10_13.1: %facet_type.bbb = converted constants.%W.as_type, %facet_value.loc10_13.1 [symbolic = %facet_value.loc10_13.3 (constants.%facet_value)] +// CHECK:STDOUT: %facet_value.loc10_13.2: %facet_type.bbb = facet_value constants.%W.as_type, (constants.%Eats.lookup_impl_witness, constants.%Tame.lookup_impl_witness) [symbolic = %facet_value.loc10_13.3 (constants.%facet_value)] +// CHECK:STDOUT: %.loc10_13.2: %facet_type.bbb = converted constants.%W.as_type, %facet_value.loc10_13.2 [symbolic = %facet_value.loc10_13.3 (constants.%facet_value)] // CHECK:STDOUT: %FeedTame.specific_fn.loc10_3.1: = specific_function %FeedTame.ref, @FeedTame(constants.%facet_value) [symbolic = %FeedTame.specific_fn.loc10_3.2 (constants.%FeedTame.specific_fn)] // CHECK:STDOUT: %FeedTame.call: init %empty_tuple.type = call %FeedTame.specific_fn.loc10_3.1(%w.ref) // CHECK:STDOUT: return @@ -494,21 +535,30 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @FeedTame(constants.%V) { +// CHECK:STDOUT: %V.patt.loc7_14.2 => constants.%V.patt // CHECK:STDOUT: %V.loc7_14.1 => constants.%V // CHECK:STDOUT: %V.as_type.loc7_40.1 => constants.%V.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.7b2 +// CHECK:STDOUT: %v.param_patt.loc7_38.2 => constants.%v.param_patt.bb4 +// CHECK:STDOUT: %v.patt.loc7_38.2 => constants.%v.patt.d6a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HandleTameAnimal(constants.%W) { +// CHECK:STDOUT: %W.patt.loc9_22.2 => constants.%W.patt // CHECK:STDOUT: %W.loc9_22.1 => constants.%W // CHECK:STDOUT: %W.as_type.loc9_50.1 => constants.%W.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.b23 +// CHECK:STDOUT: %w.param_patt.loc9_48.2 => constants.%w.param_patt +// CHECK:STDOUT: %w.patt.loc9_48.2 => constants.%w.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @FeedTame(constants.%facet_value) { +// CHECK:STDOUT: %V.patt.loc7_14.2 => constants.%V.patt // CHECK:STDOUT: %V.loc7_14.1 => constants.%facet_value // CHECK:STDOUT: %V.as_type.loc7_40.1 => constants.%W.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.b23 +// CHECK:STDOUT: %v.param_patt.loc7_38.2 => constants.%v.param_patt.631 +// CHECK:STDOUT: %v.patt.loc7_38.2 => constants.%v.patt.273 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.ec1 @@ -526,6 +576,7 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.333: type = pattern_type %Animal.type [concrete] +// CHECK:STDOUT: %A.patt: %pattern_type.333 = symbolic_binding_pattern A, 0 [symbolic] // CHECK:STDOUT: %A: %Animal.type = symbolic_binding A, 0 [symbolic] // CHECK:STDOUT: %A.as_type: type = facet_access_type %A [symbolic] // CHECK:STDOUT: %Eats.impl_witness.e08: = impl_witness @A.as_type.as.Eats.impl.%Eats.impl_witness_table, @A.as_type.as.Eats.impl(%A) [symbolic] @@ -543,18 +594,24 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %type.as.BitAndWith.impl.Op.bound.73d: = bound_method %Tame.type, %type.as.BitAndWith.impl.Op [concrete] // CHECK:STDOUT: %facet_type.bbb: type = facet_type <@Eats & @Tame> [concrete] // CHECK:STDOUT: %pattern_type.fbb: type = pattern_type %facet_type.bbb [concrete] +// CHECK:STDOUT: %V.patt: %pattern_type.fbb = symbolic_binding_pattern V, 0 [symbolic] // CHECK:STDOUT: %V: %facet_type.bbb = symbolic_binding V, 0 [symbolic] // CHECK:STDOUT: %V.as_type: type = facet_access_type %V [symbolic] // CHECK:STDOUT: %pattern_type.7b2: type = pattern_type %V.as_type [symbolic] +// CHECK:STDOUT: %v.param_patt.bb4: %pattern_type.7b2 = value_param_pattern [symbolic] +// CHECK:STDOUT: %v.patt.d6a: %pattern_type.7b2 = at_binding_pattern v, %v.param_patt.bb4 [symbolic] // CHECK:STDOUT: %FeedTame2.type: type = fn_type @FeedTame2 [concrete] // CHECK:STDOUT: %FeedTame2: %FeedTame2.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.08b: = require_complete_type %V.as_type [symbolic] // CHECK:STDOUT: %type.as.BitAndWith.impl.Op.bound.f7d: = bound_method %Animal.type, %type.as.BitAndWith.impl.Op [concrete] // CHECK:STDOUT: %facet_type.83c: type = facet_type <@Animal & @Tame> [concrete] // CHECK:STDOUT: %pattern_type.82c: type = pattern_type %facet_type.83c [concrete] +// CHECK:STDOUT: %W.patt: %pattern_type.82c = symbolic_binding_pattern W, 0 [symbolic] // CHECK:STDOUT: %W: %facet_type.83c = symbolic_binding W, 0 [symbolic] // CHECK:STDOUT: %W.as_type: type = facet_access_type %W [symbolic] // CHECK:STDOUT: %pattern_type.493: type = pattern_type %W.as_type [symbolic] +// CHECK:STDOUT: %w.param_patt: %pattern_type.493 = value_param_pattern [symbolic] +// CHECK:STDOUT: %w.patt: %pattern_type.493 = at_binding_pattern w, %w.param_patt [symbolic] // CHECK:STDOUT: %HandleTameAnimal2.type: type = fn_type @HandleTameAnimal2 [concrete] // CHECK:STDOUT: %HandleTameAnimal2: %HandleTameAnimal2.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.837: = require_complete_type %W.as_type [symbolic] @@ -565,6 +622,8 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %.86f: require_specific_def_type = require_specific_def @A.as_type.as.Eats.impl(%Animal.facet) [symbolic] // CHECK:STDOUT: %Tame.lookup_impl_witness: = lookup_impl_witness %W, @Tame [symbolic] // CHECK:STDOUT: %facet_value: %facet_type.bbb = facet_value %W.as_type, (%Eats.lookup_impl_witness, %Tame.lookup_impl_witness) [symbolic] +// CHECK:STDOUT: %v.param_patt.ef6: %pattern_type.493 = value_param_pattern [symbolic] +// CHECK:STDOUT: %v.patt.346: %pattern_type.493 = at_binding_pattern v, %v.param_patt.ef6 [symbolic] // CHECK:STDOUT: %FeedTame2.specific_fn: = specific_function %FeedTame2, @FeedTame2(%facet_value) [symbolic] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -593,7 +652,7 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %Animal.decl: type = interface_decl @Animal [concrete = constants.%Animal.type] {} {} // CHECK:STDOUT: %Tame.decl: type = interface_decl @Tame [concrete = constants.%Tame.type] {} {} // CHECK:STDOUT: impl_decl @A.as_type.as.Eats.impl [concrete] { -// CHECK:STDOUT: %A.patt: %pattern_type.333 = symbolic_binding_pattern A, 0 [concrete] +// CHECK:STDOUT: %A.patt.loc7_15.1: %pattern_type.333 = symbolic_binding_pattern A, 0 [symbolic = %A.patt.loc7_15.2 (constants.%A.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %A.ref: %Animal.type = name_ref A, %A.loc7_15.1 [symbolic = %A.loc7_15.2 (constants.%A)] // CHECK:STDOUT: %A.as_type.loc7_26.1: type = facet_access_type %A.ref [symbolic = %A.as_type.loc7_26.2 (constants.%A.as_type)] @@ -606,9 +665,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %A.loc7_15.1: %Animal.type = symbolic_binding A, 0 [symbolic = %A.loc7_15.2 (constants.%A)] // CHECK:STDOUT: } // CHECK:STDOUT: %FeedTame2.decl: %FeedTame2.type = fn_decl @FeedTame2 [concrete = constants.%FeedTame2] { -// CHECK:STDOUT: %V.patt: %pattern_type.fbb = symbolic_binding_pattern V, 0 [concrete] -// CHECK:STDOUT: %v.param_patt: @FeedTame2.%pattern_type (%pattern_type.7b2) = value_param_pattern [concrete] -// CHECK:STDOUT: %v.patt: @FeedTame2.%pattern_type (%pattern_type.7b2) = at_binding_pattern v, %v.param_patt [concrete] +// CHECK:STDOUT: %V.patt.loc9_15.1: %pattern_type.fbb = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc9_15.2 (constants.%V.patt)] +// CHECK:STDOUT: %v.param_patt.loc9_39.1: @FeedTame2.%pattern_type (%pattern_type.7b2) = value_param_pattern [symbolic = %v.param_patt.loc9_39.2 (constants.%v.param_patt.bb4)] +// CHECK:STDOUT: %v.patt.loc9_39.1: @FeedTame2.%pattern_type (%pattern_type.7b2) = at_binding_pattern v, %v.param_patt.loc9_39.1 [symbolic = %v.patt.loc9_39.2 (constants.%v.patt.d6a)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc9_23.1: type = splice_block %.loc9_23.3 [concrete = constants.%facet_type.bbb] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -630,9 +689,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %v: @FeedTame2.%V.as_type.loc9_41.1 (%V.as_type) = value_binding v, %v.param // CHECK:STDOUT: } // CHECK:STDOUT: %HandleTameAnimal2.decl: %HandleTameAnimal2.type = fn_decl @HandleTameAnimal2 [concrete = constants.%HandleTameAnimal2] { -// CHECK:STDOUT: %W.patt: %pattern_type.82c = symbolic_binding_pattern W, 0 [concrete] -// CHECK:STDOUT: %w.param_patt: @HandleTameAnimal2.%pattern_type (%pattern_type.493) = value_param_pattern [concrete] -// CHECK:STDOUT: %w.patt: @HandleTameAnimal2.%pattern_type (%pattern_type.493) = at_binding_pattern w, %w.param_patt [concrete] +// CHECK:STDOUT: %W.patt.loc11_23.1: %pattern_type.82c = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc11_23.2 (constants.%W.patt)] +// CHECK:STDOUT: %w.param_patt.loc11_42.1: @HandleTameAnimal2.%pattern_type (%pattern_type.493) = value_param_pattern [symbolic = %w.param_patt.loc11_42.2 (constants.%w.param_patt)] +// CHECK:STDOUT: %w.patt.loc11_42.1: @HandleTameAnimal2.%pattern_type (%pattern_type.493) = at_binding_pattern w, %w.param_patt.loc11_42.1 [symbolic = %w.patt.loc11_42.2 (constants.%w.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc11_33.1: type = splice_block %.loc11_33.3 [concrete = constants.%facet_type.83c] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -689,6 +748,7 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @A.as_type.as.Eats.impl(%A.loc7_15.1: %Animal.type) { +// CHECK:STDOUT: %A.patt.loc7_15.2: %pattern_type.333 = symbolic_binding_pattern A, 0 [symbolic = %A.patt.loc7_15.2 (constants.%A.patt)] // CHECK:STDOUT: %A.loc7_15.2: %Animal.type = symbolic_binding A, 0 [symbolic = %A.loc7_15.2 (constants.%A)] // CHECK:STDOUT: %A.as_type.loc7_26.2: type = facet_access_type %A.loc7_15.2 [symbolic = %A.as_type.loc7_26.2 (constants.%A.as_type)] // CHECK:STDOUT: %Eats.impl_witness.loc7_36.2: = impl_witness %Eats.impl_witness_table, @A.as_type.as.Eats.impl(%A.loc7_15.2) [symbolic = %Eats.impl_witness.loc7_36.2 (constants.%Eats.impl_witness.e08)] @@ -706,9 +766,12 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @FeedTame2(%V.loc9_15.2: %facet_type.bbb) { +// CHECK:STDOUT: %V.patt.loc9_15.2: %pattern_type.fbb = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc9_15.2 (constants.%V.patt)] // CHECK:STDOUT: %V.loc9_15.1: %facet_type.bbb = symbolic_binding V, 0 [symbolic = %V.loc9_15.1 (constants.%V)] // CHECK:STDOUT: %V.as_type.loc9_41.1: type = facet_access_type %V.loc9_15.1 [symbolic = %V.as_type.loc9_41.1 (constants.%V.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %V.as_type.loc9_41.1 [symbolic = %pattern_type (constants.%pattern_type.7b2)] +// CHECK:STDOUT: %v.param_patt.loc9_39.2: @FeedTame2.%pattern_type (%pattern_type.7b2) = value_param_pattern [symbolic = %v.param_patt.loc9_39.2 (constants.%v.param_patt.bb4)] +// CHECK:STDOUT: %v.patt.loc9_39.2: @FeedTame2.%pattern_type (%pattern_type.7b2) = at_binding_pattern v, %v.param_patt.loc9_39.2 [symbolic = %v.patt.loc9_39.2 (constants.%v.patt.d6a)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %V.as_type.loc9_41.1 [symbolic = %require_complete (constants.%require_complete.08b)] @@ -720,26 +783,31 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @HandleTameAnimal2(%W.loc11_23.2: %facet_type.83c) { +// CHECK:STDOUT: %W.patt.loc11_23.2: %pattern_type.82c = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc11_23.2 (constants.%W.patt)] // CHECK:STDOUT: %W.loc11_23.1: %facet_type.83c = symbolic_binding W, 0 [symbolic = %W.loc11_23.1 (constants.%W)] // CHECK:STDOUT: %W.as_type.loc11_44.1: type = facet_access_type %W.loc11_23.1 [symbolic = %W.as_type.loc11_44.1 (constants.%W.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %W.as_type.loc11_44.1 [symbolic = %pattern_type (constants.%pattern_type.493)] +// CHECK:STDOUT: %w.param_patt.loc11_42.2: @HandleTameAnimal2.%pattern_type (%pattern_type.493) = value_param_pattern [symbolic = %w.param_patt.loc11_42.2 (constants.%w.param_patt)] +// CHECK:STDOUT: %w.patt.loc11_42.2: @HandleTameAnimal2.%pattern_type (%pattern_type.493) = at_binding_pattern w, %w.param_patt.loc11_42.2 [symbolic = %w.patt.loc11_42.2 (constants.%w.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %W.as_type.loc11_44.1 [symbolic = %require_complete (constants.%require_complete.837)] // CHECK:STDOUT: %Animal.lookup_impl_witness: = lookup_impl_witness %W.loc11_23.1, @Animal [symbolic = %Animal.lookup_impl_witness (constants.%Animal.lookup_impl_witness)] // CHECK:STDOUT: %Animal.facet: %Animal.type = facet_value %W.as_type.loc11_44.1, (%Animal.lookup_impl_witness) [symbolic = %Animal.facet (constants.%Animal.facet)] -// CHECK:STDOUT: %.loc12_14.2: require_specific_def_type = require_specific_def @A.as_type.as.Eats.impl(%Animal.facet) [symbolic = %.loc12_14.2 (constants.%.86f)] +// CHECK:STDOUT: %.loc12_14.3: require_specific_def_type = require_specific_def @A.as_type.as.Eats.impl(%Animal.facet) [symbolic = %.loc12_14.3 (constants.%.86f)] // CHECK:STDOUT: %Eats.lookup_impl_witness: = lookup_impl_witness %W.loc11_23.1, @Eats [symbolic = %Eats.lookup_impl_witness (constants.%Eats.lookup_impl_witness)] // CHECK:STDOUT: %Tame.lookup_impl_witness: = lookup_impl_witness %W.loc11_23.1, @Tame [symbolic = %Tame.lookup_impl_witness (constants.%Tame.lookup_impl_witness)] -// CHECK:STDOUT: %facet_value.loc12_14.2: %facet_type.bbb = facet_value %W.as_type.loc11_44.1, (%Eats.lookup_impl_witness, %Tame.lookup_impl_witness) [symbolic = %facet_value.loc12_14.2 (constants.%facet_value)] -// CHECK:STDOUT: %FeedTame2.specific_fn.loc12_3.2: = specific_function constants.%FeedTame2, @FeedTame2(%facet_value.loc12_14.2) [symbolic = %FeedTame2.specific_fn.loc12_3.2 (constants.%FeedTame2.specific_fn)] +// CHECK:STDOUT: %facet_value.loc12_14.3: %facet_type.bbb = facet_value %W.as_type.loc11_44.1, (%Eats.lookup_impl_witness, %Tame.lookup_impl_witness) [symbolic = %facet_value.loc12_14.3 (constants.%facet_value)] +// CHECK:STDOUT: %FeedTame2.specific_fn.loc12_3.2: = specific_function constants.%FeedTame2, @FeedTame2(%facet_value.loc12_14.3) [symbolic = %FeedTame2.specific_fn.loc12_3.2 (constants.%FeedTame2.specific_fn)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%w.param: @HandleTameAnimal2.%W.as_type.loc11_44.1 (%W.as_type)) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %FeedTame2.ref: %FeedTame2.type = name_ref FeedTame2, file.%FeedTame2.decl [concrete = constants.%FeedTame2] // CHECK:STDOUT: %w.ref: @HandleTameAnimal2.%W.as_type.loc11_44.1 (%W.as_type) = name_ref w, %w -// CHECK:STDOUT: %facet_value.loc12_14.1: %facet_type.bbb = facet_value constants.%W.as_type, (constants.%Eats.lookup_impl_witness, constants.%Tame.lookup_impl_witness) [symbolic = %facet_value.loc12_14.2 (constants.%facet_value)] -// CHECK:STDOUT: %.loc12_14.1: %facet_type.bbb = converted constants.%W.as_type, %facet_value.loc12_14.1 [symbolic = %facet_value.loc12_14.2 (constants.%facet_value)] +// CHECK:STDOUT: %facet_value.loc12_14.1: %facet_type.bbb = facet_value constants.%W.as_type, (constants.%Eats.lookup_impl_witness, constants.%Tame.lookup_impl_witness) [symbolic = %facet_value.loc12_14.3 (constants.%facet_value)] +// CHECK:STDOUT: %.loc12_14.1: %facet_type.bbb = converted constants.%W.as_type, %facet_value.loc12_14.1 [symbolic = %facet_value.loc12_14.3 (constants.%facet_value)] +// CHECK:STDOUT: %facet_value.loc12_14.2: %facet_type.bbb = facet_value constants.%W.as_type, (constants.%Eats.lookup_impl_witness, constants.%Tame.lookup_impl_witness) [symbolic = %facet_value.loc12_14.3 (constants.%facet_value)] +// CHECK:STDOUT: %.loc12_14.2: %facet_type.bbb = converted constants.%W.as_type, %facet_value.loc12_14.2 [symbolic = %facet_value.loc12_14.3 (constants.%facet_value)] // CHECK:STDOUT: %FeedTame2.specific_fn.loc12_3.1: = specific_function %FeedTame2.ref, @FeedTame2(constants.%facet_value) [symbolic = %FeedTame2.specific_fn.loc12_3.2 (constants.%FeedTame2.specific_fn)] // CHECK:STDOUT: %FeedTame2.call: init %empty_tuple.type = call %FeedTame2.specific_fn.loc12_3.1(%w.ref) // CHECK:STDOUT: return @@ -759,6 +827,7 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A.as_type.as.Eats.impl(constants.%A) { +// CHECK:STDOUT: %A.patt.loc7_15.2 => constants.%A.patt // CHECK:STDOUT: %A.loc7_15.2 => constants.%A // CHECK:STDOUT: %A.as_type.loc7_26.2 => constants.%A.as_type // CHECK:STDOUT: %Eats.impl_witness.loc7_36.2 => constants.%Eats.impl_witness.e08 @@ -769,18 +838,25 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @FeedTame2(constants.%V) { +// CHECK:STDOUT: %V.patt.loc9_15.2 => constants.%V.patt // CHECK:STDOUT: %V.loc9_15.1 => constants.%V // CHECK:STDOUT: %V.as_type.loc9_41.1 => constants.%V.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.7b2 +// CHECK:STDOUT: %v.param_patt.loc9_39.2 => constants.%v.param_patt.bb4 +// CHECK:STDOUT: %v.patt.loc9_39.2 => constants.%v.patt.d6a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HandleTameAnimal2(constants.%W) { +// CHECK:STDOUT: %W.patt.loc11_23.2 => constants.%W.patt // CHECK:STDOUT: %W.loc11_23.1 => constants.%W // CHECK:STDOUT: %W.as_type.loc11_44.1 => constants.%W.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.493 +// CHECK:STDOUT: %w.param_patt.loc11_42.2 => constants.%w.param_patt +// CHECK:STDOUT: %w.patt.loc11_42.2 => constants.%w.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A.as_type.as.Eats.impl(constants.%Animal.facet) { +// CHECK:STDOUT: %A.patt.loc7_15.2 => constants.%A.patt // CHECK:STDOUT: %A.loc7_15.2 => constants.%Animal.facet // CHECK:STDOUT: %A.as_type.loc7_26.2 => constants.%W.as_type // CHECK:STDOUT: %Eats.impl_witness.loc7_36.2 => constants.%Eats.impl_witness.7a5 @@ -789,9 +865,12 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @FeedTame2(constants.%facet_value) { +// CHECK:STDOUT: %V.patt.loc9_15.2 => constants.%V.patt // CHECK:STDOUT: %V.loc9_15.1 => constants.%facet_value // CHECK:STDOUT: %V.as_type.loc9_41.1 => constants.%W.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.493 +// CHECK:STDOUT: %v.param_patt.loc9_39.2 => constants.%v.param_patt.ef6 +// CHECK:STDOUT: %v.patt.loc9_39.2 => constants.%v.patt.346 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.837 @@ -805,21 +884,29 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self.c39: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.029: type = pattern_type %A.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.029 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: %A.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] // CHECK:STDOUT: %pattern_type.a0e098.1: type = pattern_type %T.as_type [symbolic] +// CHECK:STDOUT: %x.param_patt.241db7.1: %pattern_type.a0e098.1 = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.19b9f1.1: %pattern_type.a0e098.1 = at_binding_pattern x, %x.param_patt.241db7.1 [symbolic] // CHECK:STDOUT: %TakesA.type: type = fn_type @TakesA [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %TakesA: %TakesA.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.94f9a3.1: = require_complete_type %T.as_type [symbolic] // CHECK:STDOUT: %.Self.dad: %A.type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self.dad [symbolic_self] +// CHECK:STDOUT: %U.patt: %pattern_type.029 = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %U: %A.type = symbolic_binding U, 0 [symbolic] // CHECK:STDOUT: %U.as_type: type = facet_access_type %U [symbolic] // CHECK:STDOUT: %pattern_type.a0e098.2: type = pattern_type %U.as_type [symbolic] +// CHECK:STDOUT: %y.param_patt: %pattern_type.a0e098.2 = value_param_pattern [symbolic] +// CHECK:STDOUT: %y.patt: %pattern_type.a0e098.2 = at_binding_pattern y, %y.param_patt [symbolic] // CHECK:STDOUT: %WithExtraWhere.type: type = fn_type @WithExtraWhere [concrete] // CHECK:STDOUT: %WithExtraWhere: %WithExtraWhere.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.94f9a3.2: = require_complete_type %U.as_type [symbolic] +// CHECK:STDOUT: %x.param_patt.241db7.2: %pattern_type.a0e098.2 = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.19b9f1.2: %pattern_type.a0e098.2 = at_binding_pattern x, %x.param_patt.241db7.2 [symbolic] // CHECK:STDOUT: %TakesA.specific_fn: = specific_function %TakesA, @TakesA(%U) [symbolic] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -840,9 +927,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl: type = interface_decl @A [concrete = constants.%A.type] {} {} // CHECK:STDOUT: %TakesA.decl: %TakesA.type = fn_decl @TakesA [concrete = constants.%TakesA] { -// CHECK:STDOUT: %T.patt: %pattern_type.029 = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %x.param_patt: @TakesA.%pattern_type (%pattern_type.a0e098.1) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @TakesA.%pattern_type (%pattern_type.a0e098.1) = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %T.patt.loc7_12.1: %pattern_type.029 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_12.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.param_patt.loc7_26.1: @TakesA.%pattern_type (%pattern_type.a0e098.1) = value_param_pattern [symbolic = %x.param_patt.loc7_26.2 (constants.%x.param_patt.241db7.1)] +// CHECK:STDOUT: %x.patt.loc7_26.1: @TakesA.%pattern_type (%pattern_type.a0e098.1) = at_binding_pattern x, %x.param_patt.loc7_26.1 [symbolic = %x.patt.loc7_26.2 (constants.%x.patt.19b9f1.1)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc7_15: type = splice_block %A.ref [concrete = constants.%A.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.c39] @@ -858,9 +945,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %x: @TakesA.%T.as_type.loc7_28.1 (%T.as_type) = value_binding x, %x.param // CHECK:STDOUT: } // CHECK:STDOUT: %WithExtraWhere.decl: %WithExtraWhere.type = fn_decl @WithExtraWhere [concrete = constants.%WithExtraWhere] { -// CHECK:STDOUT: %U.patt: %pattern_type.029 = symbolic_binding_pattern U, 0 [concrete] -// CHECK:STDOUT: %y.param_patt: @WithExtraWhere.%pattern_type (%pattern_type.a0e098.2) = value_param_pattern [concrete] -// CHECK:STDOUT: %y.patt: @WithExtraWhere.%pattern_type (%pattern_type.a0e098.2) = at_binding_pattern y, %y.param_patt [concrete] +// CHECK:STDOUT: %U.patt.loc9_20.1: %pattern_type.029 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc9_20.2 (constants.%U.patt)] +// CHECK:STDOUT: %y.param_patt.loc9_50.1: @WithExtraWhere.%pattern_type (%pattern_type.a0e098.2) = value_param_pattern [symbolic = %y.param_patt.loc9_50.2 (constants.%y.param_patt)] +// CHECK:STDOUT: %y.patt.loc9_50.1: @WithExtraWhere.%pattern_type (%pattern_type.a0e098.2) = at_binding_pattern y, %y.param_patt.loc9_50.1 [symbolic = %y.patt.loc9_50.2 (constants.%y.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc9_25.1: type = splice_block %.loc9_25.2 [concrete = constants.%A.type] { // CHECK:STDOUT: %.Self.loc9_20: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.c39] @@ -898,9 +985,12 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @TakesA(%T.loc7_12.2: %A.type) { +// CHECK:STDOUT: %T.patt.loc7_12.2: %pattern_type.029 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_12.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc7_12.1: %A.type = symbolic_binding T, 0 [symbolic = %T.loc7_12.1 (constants.%T)] // CHECK:STDOUT: %T.as_type.loc7_28.1: type = facet_access_type %T.loc7_12.1 [symbolic = %T.as_type.loc7_28.1 (constants.%T.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc7_28.1 [symbolic = %pattern_type (constants.%pattern_type.a0e098.1)] +// CHECK:STDOUT: %x.param_patt.loc7_26.2: @TakesA.%pattern_type (%pattern_type.a0e098.1) = value_param_pattern [symbolic = %x.param_patt.loc7_26.2 (constants.%x.param_patt.241db7.1)] +// CHECK:STDOUT: %x.patt.loc7_26.2: @TakesA.%pattern_type (%pattern_type.a0e098.1) = at_binding_pattern x, %x.param_patt.loc7_26.2 [symbolic = %x.patt.loc7_26.2 (constants.%x.patt.19b9f1.1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc7_28.1 [symbolic = %require_complete (constants.%require_complete.94f9a3.1)] @@ -912,9 +1002,12 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @WithExtraWhere(%U.loc9_20.2: %A.type) { +// CHECK:STDOUT: %U.patt.loc9_20.2: %pattern_type.029 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc9_20.2 (constants.%U.patt)] // CHECK:STDOUT: %U.loc9_20.1: %A.type = symbolic_binding U, 0 [symbolic = %U.loc9_20.1 (constants.%U)] // CHECK:STDOUT: %U.as_type.loc9_52.1: type = facet_access_type %U.loc9_20.1 [symbolic = %U.as_type.loc9_52.1 (constants.%U.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %U.as_type.loc9_52.1 [symbolic = %pattern_type (constants.%pattern_type.a0e098.2)] +// CHECK:STDOUT: %y.param_patt.loc9_50.2: @WithExtraWhere.%pattern_type (%pattern_type.a0e098.2) = value_param_pattern [symbolic = %y.param_patt.loc9_50.2 (constants.%y.param_patt)] +// CHECK:STDOUT: %y.patt.loc9_50.2: @WithExtraWhere.%pattern_type (%pattern_type.a0e098.2) = at_binding_pattern y, %y.param_patt.loc9_50.2 [symbolic = %y.patt.loc9_50.2 (constants.%y.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %U.as_type.loc9_52.1 [symbolic = %require_complete (constants.%require_complete.94f9a3.2)] @@ -924,7 +1017,8 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %TakesA.ref: %TakesA.type = name_ref TakesA, file.%TakesA.decl [concrete = constants.%TakesA] // CHECK:STDOUT: %y.ref: @WithExtraWhere.%U.as_type.loc9_52.1 (%U.as_type) = name_ref y, %y -// CHECK:STDOUT: %.loc10: %A.type = converted constants.%U.as_type, constants.%U [symbolic = %U.loc9_20.1 (constants.%U)] +// CHECK:STDOUT: %.loc10_11.1: %A.type = converted constants.%U.as_type, constants.%U [symbolic = %U.loc9_20.1 (constants.%U)] +// CHECK:STDOUT: %.loc10_11.2: %A.type = converted constants.%U.as_type, constants.%U [symbolic = %U.loc9_20.1 (constants.%U)] // CHECK:STDOUT: %TakesA.specific_fn.loc10_3.1: = specific_function %TakesA.ref, @TakesA(constants.%U) [symbolic = %TakesA.specific_fn.loc10_3.2 (constants.%TakesA.specific_fn)] // CHECK:STDOUT: %TakesA.call: init %empty_tuple.type = call %TakesA.specific_fn.loc10_3.1(%y.ref) // CHECK:STDOUT: return @@ -936,21 +1030,30 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TakesA(constants.%T) { +// CHECK:STDOUT: %T.patt.loc7_12.2 => constants.%T.patt // CHECK:STDOUT: %T.loc7_12.1 => constants.%T // CHECK:STDOUT: %T.as_type.loc7_28.1 => constants.%T.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.a0e098.1 +// CHECK:STDOUT: %x.param_patt.loc7_26.2 => constants.%x.param_patt.241db7.1 +// CHECK:STDOUT: %x.patt.loc7_26.2 => constants.%x.patt.19b9f1.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @WithExtraWhere(constants.%U) { +// CHECK:STDOUT: %U.patt.loc9_20.2 => constants.%U.patt // CHECK:STDOUT: %U.loc9_20.1 => constants.%U // CHECK:STDOUT: %U.as_type.loc9_52.1 => constants.%U.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.a0e098.2 +// CHECK:STDOUT: %y.param_patt.loc9_50.2 => constants.%y.param_patt +// CHECK:STDOUT: %y.patt.loc9_50.2 => constants.%y.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TakesA(constants.%U) { +// CHECK:STDOUT: %T.patt.loc7_12.2 => constants.%T.patt // CHECK:STDOUT: %T.loc7_12.1 => constants.%U // CHECK:STDOUT: %T.as_type.loc7_28.1 => constants.%U.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.a0e098.2 +// CHECK:STDOUT: %x.param_patt.loc7_26.2 => constants.%x.param_patt.241db7.2 +// CHECK:STDOUT: %x.patt.loc7_26.2 => constants.%x.patt.19b9f1.2 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.94f9a3.2 @@ -962,20 +1065,28 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.67db0b.1: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T.67db0b.1 [symbolic] +// CHECK:STDOUT: %x.param_patt.91d: %pattern_type.51d = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.800: %pattern_type.51d = at_binding_pattern x, %x.param_patt.91d [symbolic] // CHECK:STDOUT: %TakesTypeDeduced.type: type = fn_type @TakesTypeDeduced [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %TakesTypeDeduced: %TakesTypeDeduced.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.944: = require_complete_type %T.67db0b.1 [symbolic] // CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self [symbolic_self] // CHECK:STDOUT: %pattern_type.9a5: type = pattern_type %type [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.9a5 = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %U: %type = symbolic_binding U, 0 [symbolic] // CHECK:STDOUT: %U.as_type: type = facet_access_type %U [symbolic] // CHECK:STDOUT: %pattern_type.86a: type = pattern_type %U.as_type [symbolic] +// CHECK:STDOUT: %y.param_patt: %pattern_type.86a = value_param_pattern [symbolic] +// CHECK:STDOUT: %y.patt: %pattern_type.86a = at_binding_pattern y, %y.param_patt [symbolic] // CHECK:STDOUT: %CallsWithExtraWhere.type: type = fn_type @CallsWithExtraWhere [concrete] // CHECK:STDOUT: %CallsWithExtraWhere: %CallsWithExtraWhere.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.5ef: = require_complete_type %U.as_type [symbolic] +// CHECK:STDOUT: %x.param_patt.9a2: %pattern_type.86a = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.fe1: %pattern_type.86a = at_binding_pattern x, %x.param_patt.9a2 [symbolic] // CHECK:STDOUT: %TakesTypeDeduced.specific_fn: = specific_function %TakesTypeDeduced, @TakesTypeDeduced(%U.as_type) [symbolic] // CHECK:STDOUT: %T.67db0b.2: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %TakesTypeExplicit.type: type = fn_type @TakesTypeExplicit [concrete] @@ -1002,9 +1113,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %TakesTypeDeduced.decl: %TakesTypeDeduced.type = fn_decl @TakesTypeDeduced [concrete = constants.%TakesTypeDeduced] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %x.param_patt: @TakesTypeDeduced.%pattern_type (%pattern_type.51d) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @TakesTypeDeduced.%pattern_type (%pattern_type.51d) = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %T.patt.loc3_22.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_22.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.param_patt.loc3_39.1: @TakesTypeDeduced.%pattern_type (%pattern_type.51d) = value_param_pattern [symbolic = %x.param_patt.loc3_39.2 (constants.%x.param_patt.91d)] +// CHECK:STDOUT: %x.patt.loc3_39.1: @TakesTypeDeduced.%pattern_type (%pattern_type.51d) = at_binding_pattern x, %x.param_patt.loc3_39.1 [symbolic = %x.patt.loc3_39.2 (constants.%x.patt.800)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc3_25.1: type = splice_block %.loc3_25.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1016,9 +1127,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %x: @TakesTypeDeduced.%T.loc3_22.1 (%T.67db0b.1) = value_binding x, %x.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallsWithExtraWhere.decl: %CallsWithExtraWhere.type = fn_decl @CallsWithExtraWhere [concrete = constants.%CallsWithExtraWhere] { -// CHECK:STDOUT: %U.patt: %pattern_type.9a5 = symbolic_binding_pattern U, 0 [concrete] -// CHECK:STDOUT: %y.param_patt: @CallsWithExtraWhere.%pattern_type (%pattern_type.86a) = value_param_pattern [concrete] -// CHECK:STDOUT: %y.patt: @CallsWithExtraWhere.%pattern_type (%pattern_type.86a) = at_binding_pattern y, %y.param_patt [concrete] +// CHECK:STDOUT: %U.patt.loc4_25.1: %pattern_type.9a5 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc4_25.2 (constants.%U.patt)] +// CHECK:STDOUT: %y.param_patt.loc4_58.1: @CallsWithExtraWhere.%pattern_type (%pattern_type.86a) = value_param_pattern [symbolic = %y.param_patt.loc4_58.2 (constants.%y.param_patt)] +// CHECK:STDOUT: %y.patt.loc4_58.1: @CallsWithExtraWhere.%pattern_type (%pattern_type.86a) = at_binding_pattern y, %y.param_patt.loc4_58.1 [symbolic = %y.patt.loc4_58.2 (constants.%y.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_33.1: type = splice_block %.loc4_33.2 [concrete = constants.%type] { // CHECK:STDOUT: %.Self.loc4_25: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1043,7 +1154,7 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %y: @CallsWithExtraWhere.%U.as_type.loc4_60.1 (%U.as_type) = value_binding y, %y.param // CHECK:STDOUT: } // CHECK:STDOUT: %TakesTypeExplicit.decl: %TakesTypeExplicit.type = fn_decl @TakesTypeExplicit [concrete = constants.%TakesTypeExplicit] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc8_30.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_30.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8_33.1: type = splice_block %.loc8_33.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1052,7 +1163,7 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %T.loc8_30.3: type = symbolic_binding T, 0 [symbolic = %T.loc8_30.2 (constants.%T.67db0b.2)] // CHECK:STDOUT: } // CHECK:STDOUT: %CallsWithExtraWhereExplicit.decl: %CallsWithExtraWhereExplicit.type = fn_decl @CallsWithExtraWhereExplicit [concrete = constants.%CallsWithExtraWhereExplicit] { -// CHECK:STDOUT: %U.patt: %pattern_type.9a5 = symbolic_binding_pattern U, 0 [concrete] +// CHECK:STDOUT: %U.patt.loc9_33.1: %pattern_type.9a5 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc9_33.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc9_41.1: type = splice_block %.loc9_41.2 [concrete = constants.%type] { // CHECK:STDOUT: %.Self.loc9_33: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1072,8 +1183,11 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @TakesTypeDeduced(%T.loc3_22.2: type) { +// CHECK:STDOUT: %T.patt.loc3_22.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_22.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc3_22.1: type = symbolic_binding T, 0 [symbolic = %T.loc3_22.1 (constants.%T.67db0b.1)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc3_22.1 [symbolic = %pattern_type (constants.%pattern_type.51d)] +// CHECK:STDOUT: %x.param_patt.loc3_39.2: @TakesTypeDeduced.%pattern_type (%pattern_type.51d) = value_param_pattern [symbolic = %x.param_patt.loc3_39.2 (constants.%x.param_patt.91d)] +// CHECK:STDOUT: %x.patt.loc3_39.2: @TakesTypeDeduced.%pattern_type (%pattern_type.51d) = at_binding_pattern x, %x.param_patt.loc3_39.2 [symbolic = %x.patt.loc3_39.2 (constants.%x.patt.800)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc3_22.1 [symbolic = %require_complete (constants.%require_complete.944)] @@ -1085,9 +1199,12 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @CallsWithExtraWhere(%U.loc4_25.2: %type) { +// CHECK:STDOUT: %U.patt.loc4_25.2: %pattern_type.9a5 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc4_25.2 (constants.%U.patt)] // CHECK:STDOUT: %U.loc4_25.1: %type = symbolic_binding U, 0 [symbolic = %U.loc4_25.1 (constants.%U)] // CHECK:STDOUT: %U.as_type.loc4_60.1: type = facet_access_type %U.loc4_25.1 [symbolic = %U.as_type.loc4_60.1 (constants.%U.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %U.as_type.loc4_60.1 [symbolic = %pattern_type (constants.%pattern_type.86a)] +// CHECK:STDOUT: %y.param_patt.loc4_58.2: @CallsWithExtraWhere.%pattern_type (%pattern_type.86a) = value_param_pattern [symbolic = %y.param_patt.loc4_58.2 (constants.%y.param_patt)] +// CHECK:STDOUT: %y.patt.loc4_58.2: @CallsWithExtraWhere.%pattern_type (%pattern_type.86a) = at_binding_pattern y, %y.param_patt.loc4_58.2 [symbolic = %y.patt.loc4_58.2 (constants.%y.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %U.as_type.loc4_60.1 [symbolic = %require_complete (constants.%require_complete.5ef)] @@ -1104,6 +1221,7 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @TakesTypeExplicit(%T.loc8_30.3: type) { +// CHECK:STDOUT: %T.patt.loc8_30.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_30.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc8_30.1: type = symbolic_binding T, 0 [symbolic = %T.loc8_30.1 (constants.%T.67db0b.1)] // CHECK:STDOUT: %T.loc8_30.2: type = symbolic_binding T, 0 [symbolic = %T.loc8_30.2 (constants.%T.67db0b.2)] // CHECK:STDOUT: @@ -1116,6 +1234,7 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @CallsWithExtraWhereExplicit(%U.loc9_33.2: %type) { +// CHECK:STDOUT: %U.patt.loc9_33.2: %pattern_type.9a5 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc9_33.2 (constants.%U.patt)] // CHECK:STDOUT: %U.loc9_33.1: %type = symbolic_binding U, 0 [symbolic = %U.loc9_33.1 (constants.%U)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1135,34 +1254,46 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TakesTypeDeduced(constants.%T.67db0b.1) { +// CHECK:STDOUT: %T.patt.loc3_22.2 => constants.%T.patt // CHECK:STDOUT: %T.loc3_22.1 => constants.%T.67db0b.1 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d +// CHECK:STDOUT: %x.param_patt.loc3_39.2 => constants.%x.param_patt.91d +// CHECK:STDOUT: %x.patt.loc3_39.2 => constants.%x.patt.800 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @CallsWithExtraWhere(constants.%U) { +// CHECK:STDOUT: %U.patt.loc4_25.2 => constants.%U.patt // CHECK:STDOUT: %U.loc4_25.1 => constants.%U // CHECK:STDOUT: %U.as_type.loc4_60.1 => constants.%U.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.86a +// CHECK:STDOUT: %y.param_patt.loc4_58.2 => constants.%y.param_patt +// CHECK:STDOUT: %y.patt.loc4_58.2 => constants.%y.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TakesTypeDeduced(constants.%U.as_type) { +// CHECK:STDOUT: %T.patt.loc3_22.2 => constants.%T.patt // CHECK:STDOUT: %T.loc3_22.1 => constants.%U.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.86a +// CHECK:STDOUT: %x.param_patt.loc3_39.2 => constants.%x.param_patt.9a2 +// CHECK:STDOUT: %x.patt.loc3_39.2 => constants.%x.patt.fe1 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.5ef // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TakesTypeExplicit(constants.%T.67db0b.2) { +// CHECK:STDOUT: %T.patt.loc8_30.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_30.1 => constants.%T.67db0b.2 // CHECK:STDOUT: %T.loc8_30.2 => constants.%T.67db0b.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @CallsWithExtraWhereExplicit(constants.%U) { +// CHECK:STDOUT: %U.patt.loc9_33.2 => constants.%U.patt // CHECK:STDOUT: %U.loc9_33.1 => constants.%U // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TakesTypeExplicit(constants.%U.as_type) { +// CHECK:STDOUT: %T.patt.loc8_30.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_30.1 => constants.%U.as_type // CHECK:STDOUT: %T.loc8_30.2 => constants.%U.as_type // CHECK:STDOUT: @@ -1176,20 +1307,28 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self [symbolic_self] // CHECK:STDOUT: %pattern_type.9a5: type = pattern_type %type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.9a5 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.f45530.1: %type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T.f45530.1 [symbolic] // CHECK:STDOUT: %pattern_type.86a: type = pattern_type %T.as_type [symbolic] +// CHECK:STDOUT: %x.param_patt.9a2: %pattern_type.86a = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.fe1: %pattern_type.86a = at_binding_pattern x, %x.param_patt.9a2 [symbolic] // CHECK:STDOUT: %TakesExtraWhereDeduced.type: type = fn_type @TakesExtraWhereDeduced [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %TakesExtraWhereDeduced: %TakesExtraWhereDeduced.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.5ef: = require_complete_type %T.as_type [symbolic] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %U: type = symbolic_binding U, 0 [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %U [symbolic] +// CHECK:STDOUT: %y.param_patt: %pattern_type.51d = value_param_pattern [symbolic] +// CHECK:STDOUT: %y.patt: %pattern_type.51d = at_binding_pattern y, %y.param_patt [symbolic] // CHECK:STDOUT: %CallsWithType.type: type = fn_type @CallsWithType [concrete] // CHECK:STDOUT: %CallsWithType: %CallsWithType.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.944: = require_complete_type %U [symbolic] // CHECK:STDOUT: %facet_value: %type = facet_value %U, () [symbolic] +// CHECK:STDOUT: %x.param_patt.91d: %pattern_type.51d = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.800: %pattern_type.51d = at_binding_pattern x, %x.param_patt.91d [symbolic] // CHECK:STDOUT: %TakesExtraWhereDeduced.specific_fn: = specific_function %TakesExtraWhereDeduced, @TakesExtraWhereDeduced(%facet_value) [symbolic] // CHECK:STDOUT: %T.f45530.2: %type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %TakesExtraWhereExplicit.type: type = fn_type @TakesExtraWhereExplicit [concrete] @@ -1216,9 +1355,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %TakesExtraWhereDeduced.decl: %TakesExtraWhereDeduced.type = fn_decl @TakesExtraWhereDeduced [concrete = constants.%TakesExtraWhereDeduced] { -// CHECK:STDOUT: %T.patt: %pattern_type.9a5 = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %x.param_patt: @TakesExtraWhereDeduced.%pattern_type (%pattern_type.86a) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @TakesExtraWhereDeduced.%pattern_type (%pattern_type.86a) = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %T.patt.loc3_28.1: %pattern_type.9a5 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_28.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.param_patt.loc3_68.1: @TakesExtraWhereDeduced.%pattern_type (%pattern_type.86a) = value_param_pattern [symbolic = %x.param_patt.loc3_68.2 (constants.%x.param_patt.9a2)] +// CHECK:STDOUT: %x.patt.loc3_68.1: @TakesExtraWhereDeduced.%pattern_type (%pattern_type.86a) = at_binding_pattern x, %x.param_patt.loc3_68.1 [symbolic = %x.patt.loc3_68.2 (constants.%x.patt.fe1)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc3_36.1: type = splice_block %.loc3_36.2 [concrete = constants.%type] { // CHECK:STDOUT: %.Self.loc3_28: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1243,9 +1382,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %x: @TakesExtraWhereDeduced.%T.as_type.loc3_70.1 (%T.as_type) = value_binding x, %x.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallsWithType.decl: %CallsWithType.type = fn_decl @CallsWithType [concrete = constants.%CallsWithType] { -// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [concrete] -// CHECK:STDOUT: %y.param_patt: @CallsWithType.%pattern_type (%pattern_type.51d) = value_param_pattern [concrete] -// CHECK:STDOUT: %y.patt: @CallsWithType.%pattern_type (%pattern_type.51d) = at_binding_pattern y, %y.param_patt [concrete] +// CHECK:STDOUT: %U.patt.loc4_19.1: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc4_19.2 (constants.%U.patt)] +// CHECK:STDOUT: %y.param_patt.loc4_29.1: @CallsWithType.%pattern_type (%pattern_type.51d) = value_param_pattern [symbolic = %y.param_patt.loc4_29.2 (constants.%y.param_patt)] +// CHECK:STDOUT: %y.patt.loc4_29.1: @CallsWithType.%pattern_type (%pattern_type.51d) = at_binding_pattern y, %y.param_patt.loc4_29.1 [symbolic = %y.patt.loc4_29.2 (constants.%y.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_22.1: type = splice_block %.loc4_22.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1257,7 +1396,7 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %y: @CallsWithType.%U.loc4_19.1 (%U) = value_binding y, %y.param // CHECK:STDOUT: } // CHECK:STDOUT: %TakesExtraWhereExplicit.decl: %TakesExtraWhereExplicit.type = fn_decl @TakesExtraWhereExplicit [concrete = constants.%TakesExtraWhereExplicit] { -// CHECK:STDOUT: %T.patt: %pattern_type.9a5 = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc8_36.1: %pattern_type.9a5 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_36.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8_44.1: type = splice_block %.loc8_44.2 [concrete = constants.%type] { // CHECK:STDOUT: %.Self.loc8_36: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1275,7 +1414,7 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %T.loc8_36.3: %type = symbolic_binding T, 0 [symbolic = %T.loc8_36.2 (constants.%T.f45530.2)] // CHECK:STDOUT: } // CHECK:STDOUT: %CallsWithTypeExplicit.decl: %CallsWithTypeExplicit.type = fn_decl @CallsWithTypeExplicit [concrete = constants.%CallsWithTypeExplicit] { -// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [concrete] +// CHECK:STDOUT: %U.patt.loc9_27.1: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc9_27.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc9_30.1: type = splice_block %.loc9_30.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1286,9 +1425,12 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @TakesExtraWhereDeduced(%T.loc3_28.2: %type) { +// CHECK:STDOUT: %T.patt.loc3_28.2: %pattern_type.9a5 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_28.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc3_28.1: %type = symbolic_binding T, 0 [symbolic = %T.loc3_28.1 (constants.%T.f45530.1)] // CHECK:STDOUT: %T.as_type.loc3_70.1: type = facet_access_type %T.loc3_28.1 [symbolic = %T.as_type.loc3_70.1 (constants.%T.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc3_70.1 [symbolic = %pattern_type (constants.%pattern_type.86a)] +// CHECK:STDOUT: %x.param_patt.loc3_68.2: @TakesExtraWhereDeduced.%pattern_type (%pattern_type.86a) = value_param_pattern [symbolic = %x.param_patt.loc3_68.2 (constants.%x.param_patt.9a2)] +// CHECK:STDOUT: %x.patt.loc3_68.2: @TakesExtraWhereDeduced.%pattern_type (%pattern_type.86a) = at_binding_pattern x, %x.param_patt.loc3_68.2 [symbolic = %x.patt.loc3_68.2 (constants.%x.patt.fe1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc3_70.1 [symbolic = %require_complete (constants.%require_complete.5ef)] @@ -1300,20 +1442,25 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @CallsWithType(%U.loc4_19.2: type) { +// CHECK:STDOUT: %U.patt.loc4_19.2: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc4_19.2 (constants.%U.patt)] // CHECK:STDOUT: %U.loc4_19.1: type = symbolic_binding U, 0 [symbolic = %U.loc4_19.1 (constants.%U)] // CHECK:STDOUT: %pattern_type: type = pattern_type %U.loc4_19.1 [symbolic = %pattern_type (constants.%pattern_type.51d)] +// CHECK:STDOUT: %y.param_patt.loc4_29.2: @CallsWithType.%pattern_type (%pattern_type.51d) = value_param_pattern [symbolic = %y.param_patt.loc4_29.2 (constants.%y.param_patt)] +// CHECK:STDOUT: %y.patt.loc4_29.2: @CallsWithType.%pattern_type (%pattern_type.51d) = at_binding_pattern y, %y.param_patt.loc4_29.2 [symbolic = %y.patt.loc4_29.2 (constants.%y.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %U.loc4_19.1 [symbolic = %require_complete (constants.%require_complete.944)] -// CHECK:STDOUT: %facet_value.loc5_27.2: %type = facet_value %U.loc4_19.1, () [symbolic = %facet_value.loc5_27.2 (constants.%facet_value)] -// CHECK:STDOUT: %TakesExtraWhereDeduced.specific_fn.loc5_3.2: = specific_function constants.%TakesExtraWhereDeduced, @TakesExtraWhereDeduced(%facet_value.loc5_27.2) [symbolic = %TakesExtraWhereDeduced.specific_fn.loc5_3.2 (constants.%TakesExtraWhereDeduced.specific_fn)] +// CHECK:STDOUT: %facet_value.loc5_27.3: %type = facet_value %U.loc4_19.1, () [symbolic = %facet_value.loc5_27.3 (constants.%facet_value)] +// CHECK:STDOUT: %TakesExtraWhereDeduced.specific_fn.loc5_3.2: = specific_function constants.%TakesExtraWhereDeduced, @TakesExtraWhereDeduced(%facet_value.loc5_27.3) [symbolic = %TakesExtraWhereDeduced.specific_fn.loc5_3.2 (constants.%TakesExtraWhereDeduced.specific_fn)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%y.param: @CallsWithType.%U.loc4_19.1 (%U)) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %TakesExtraWhereDeduced.ref: %TakesExtraWhereDeduced.type = name_ref TakesExtraWhereDeduced, file.%TakesExtraWhereDeduced.decl [concrete = constants.%TakesExtraWhereDeduced] // CHECK:STDOUT: %y.ref: @CallsWithType.%U.loc4_19.1 (%U) = name_ref y, %y -// CHECK:STDOUT: %facet_value.loc5_27.1: %type = facet_value constants.%U, () [symbolic = %facet_value.loc5_27.2 (constants.%facet_value)] -// CHECK:STDOUT: %.loc5: %type = converted constants.%U, %facet_value.loc5_27.1 [symbolic = %facet_value.loc5_27.2 (constants.%facet_value)] +// CHECK:STDOUT: %facet_value.loc5_27.1: %type = facet_value constants.%U, () [symbolic = %facet_value.loc5_27.3 (constants.%facet_value)] +// CHECK:STDOUT: %.loc5_27.1: %type = converted constants.%U, %facet_value.loc5_27.1 [symbolic = %facet_value.loc5_27.3 (constants.%facet_value)] +// CHECK:STDOUT: %facet_value.loc5_27.2: %type = facet_value constants.%U, () [symbolic = %facet_value.loc5_27.3 (constants.%facet_value)] +// CHECK:STDOUT: %.loc5_27.2: %type = converted constants.%U, %facet_value.loc5_27.2 [symbolic = %facet_value.loc5_27.3 (constants.%facet_value)] // CHECK:STDOUT: %TakesExtraWhereDeduced.specific_fn.loc5_3.1: = specific_function %TakesExtraWhereDeduced.ref, @TakesExtraWhereDeduced(constants.%facet_value) [symbolic = %TakesExtraWhereDeduced.specific_fn.loc5_3.2 (constants.%TakesExtraWhereDeduced.specific_fn)] // CHECK:STDOUT: %TakesExtraWhereDeduced.call: init %empty_tuple.type = call %TakesExtraWhereDeduced.specific_fn.loc5_3.1(%y.ref) // CHECK:STDOUT: return @@ -1321,6 +1468,7 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @TakesExtraWhereExplicit(%T.loc8_36.3: %type) { +// CHECK:STDOUT: %T.patt.loc8_36.2: %pattern_type.9a5 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_36.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc8_36.1: %type = symbolic_binding T, 0 [symbolic = %T.loc8_36.1 (constants.%T.f45530.1)] // CHECK:STDOUT: %T.loc8_36.2: %type = symbolic_binding T, 0 [symbolic = %T.loc8_36.2 (constants.%T.f45530.2)] // CHECK:STDOUT: @@ -1333,6 +1481,7 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @CallsWithTypeExplicit(%U.loc9_27.2: type) { +// CHECK:STDOUT: %U.patt.loc9_27.2: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc9_27.2 (constants.%U.patt)] // CHECK:STDOUT: %U.loc9_27.1: type = symbolic_binding U, 0 [symbolic = %U.loc9_27.1 (constants.%U)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1352,35 +1501,47 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TakesExtraWhereDeduced(constants.%T.f45530.1) { +// CHECK:STDOUT: %T.patt.loc3_28.2 => constants.%T.patt // CHECK:STDOUT: %T.loc3_28.1 => constants.%T.f45530.1 // CHECK:STDOUT: %T.as_type.loc3_70.1 => constants.%T.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.86a +// CHECK:STDOUT: %x.param_patt.loc3_68.2 => constants.%x.param_patt.9a2 +// CHECK:STDOUT: %x.patt.loc3_68.2 => constants.%x.patt.fe1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @CallsWithType(constants.%U) { +// CHECK:STDOUT: %U.patt.loc4_19.2 => constants.%U.patt // CHECK:STDOUT: %U.loc4_19.1 => constants.%U // CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d +// CHECK:STDOUT: %y.param_patt.loc4_29.2 => constants.%y.param_patt +// CHECK:STDOUT: %y.patt.loc4_29.2 => constants.%y.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TakesExtraWhereDeduced(constants.%facet_value) { +// CHECK:STDOUT: %T.patt.loc3_28.2 => constants.%T.patt // CHECK:STDOUT: %T.loc3_28.1 => constants.%facet_value // CHECK:STDOUT: %T.as_type.loc3_70.1 => constants.%U // CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d +// CHECK:STDOUT: %x.param_patt.loc3_68.2 => constants.%x.param_patt.91d +// CHECK:STDOUT: %x.patt.loc3_68.2 => constants.%x.patt.800 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.944 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TakesExtraWhereExplicit(constants.%T.f45530.2) { +// CHECK:STDOUT: %T.patt.loc8_36.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_36.1 => constants.%T.f45530.2 // CHECK:STDOUT: %T.loc8_36.2 => constants.%T.f45530.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @CallsWithTypeExplicit(constants.%U) { +// CHECK:STDOUT: %U.patt.loc9_27.2 => constants.%U.patt // CHECK:STDOUT: %U.loc9_27.1 => constants.%U // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TakesExtraWhereExplicit(constants.%facet_value) { +// CHECK:STDOUT: %T.patt.loc8_36.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_36.1 => constants.%facet_value // CHECK:STDOUT: %T.loc8_36.2 => constants.%facet_value // CHECK:STDOUT: diff --git a/toolchain/check/testdata/facet/convert_facet_value_value_to_blanket_impl.carbon b/toolchain/check/testdata/facet/convert_facet_value_value_to_blanket_impl.carbon index 77d98f124375..5d60c86a0b8e 100644 --- a/toolchain/check/testdata/facet/convert_facet_value_value_to_blanket_impl.carbon +++ b/toolchain/check/testdata/facet/convert_facet_value_value_to_blanket_impl.carbon @@ -31,21 +31,28 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.333: type = pattern_type %Animal.type [concrete] +// CHECK:STDOUT: %A.patt: %pattern_type.333 = symbolic_binding_pattern A, 0 [symbolic] // CHECK:STDOUT: %A: %Animal.type = symbolic_binding A, 0 [symbolic] // CHECK:STDOUT: %A.as_type: type = facet_access_type %A [symbolic] // CHECK:STDOUT: %Eats.impl_witness.e0811c.1: = impl_witness @A.as_type.as.Eats.impl.%Eats.impl_witness_table, @A.as_type.as.Eats.impl(%A) [symbolic] // CHECK:STDOUT: %Eats.facet.f93: %Eats.type = facet_value %A.as_type, (%Eats.impl_witness.e0811c.1) [symbolic] // CHECK:STDOUT: %pattern_type.880: type = pattern_type %Eats.type [concrete] +// CHECK:STDOUT: %T.patt.9e8: %pattern_type.880 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.672: %Eats.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.422: type = facet_access_type %T.672 [symbolic] // CHECK:STDOUT: %pattern_type.aed: type = pattern_type %T.as_type.422 [symbolic] +// CHECK:STDOUT: %e.param_patt.0be: %pattern_type.aed = value_param_pattern [symbolic] +// CHECK:STDOUT: %e.patt.543: %pattern_type.aed = at_binding_pattern e, %e.param_patt.0be [symbolic] // CHECK:STDOUT: %Feed.type: type = fn_type @Feed [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Feed: %Feed.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.c4d: = require_complete_type %T.as_type.422 [symbolic] +// CHECK:STDOUT: %T.patt.e44: %pattern_type.333 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.443: %Animal.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.01d: type = facet_access_type %T.443 [symbolic] // CHECK:STDOUT: %pattern_type.e90: type = pattern_type %T.as_type.01d [symbolic] +// CHECK:STDOUT: %a.param_patt: %pattern_type.e90 = value_param_pattern [symbolic] +// CHECK:STDOUT: %a.patt: %pattern_type.e90 = at_binding_pattern a, %a.param_patt [symbolic] // CHECK:STDOUT: %HandleAnimal.type: type = fn_type @HandleAnimal [concrete] // CHECK:STDOUT: %HandleAnimal: %HandleAnimal.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.db4: = require_complete_type %T.as_type.01d [symbolic] @@ -53,6 +60,8 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: %Eats.impl_witness.e0811c.2: = impl_witness @A.as_type.as.Eats.impl.%Eats.impl_witness_table, @A.as_type.as.Eats.impl(%T.443) [symbolic] // CHECK:STDOUT: %.2fe: require_specific_def_type = require_specific_def @A.as_type.as.Eats.impl(%T.443) [symbolic] // CHECK:STDOUT: %Eats.facet.934: %Eats.type = facet_value %T.as_type.01d, (%Eats.lookup_impl_witness) [symbolic] +// CHECK:STDOUT: %e.param_patt.1c7: %pattern_type.e90 = value_param_pattern [symbolic] +// CHECK:STDOUT: %e.patt.637: %pattern_type.e90 = at_binding_pattern e, %e.param_patt.1c7 [symbolic] // CHECK:STDOUT: %Feed.specific_fn: = specific_function %Feed, @Feed(%Eats.facet.934) [symbolic] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -75,7 +84,7 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: %Eats.decl: type = interface_decl @Eats [concrete = constants.%Eats.type] {} {} // CHECK:STDOUT: %Animal.decl: type = interface_decl @Animal [concrete = constants.%Animal.type] {} {} // CHECK:STDOUT: impl_decl @A.as_type.as.Eats.impl [concrete] { -// CHECK:STDOUT: %A.patt: %pattern_type.333 = symbolic_binding_pattern A, 0 [concrete] +// CHECK:STDOUT: %A.patt.loc18_15.1: %pattern_type.333 = symbolic_binding_pattern A, 0 [symbolic = %A.patt.loc18_15.2 (constants.%A.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %A.ref: %Animal.type = name_ref A, %A.loc18_15.1 [symbolic = %A.loc18_15.2 (constants.%A)] // CHECK:STDOUT: %A.as_type.loc18_26.1: type = facet_access_type %A.ref [symbolic = %A.as_type.loc18_26.2 (constants.%A.as_type)] @@ -88,9 +97,9 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: %A.loc18_15.1: %Animal.type = symbolic_binding A, 0 [symbolic = %A.loc18_15.2 (constants.%A)] // CHECK:STDOUT: } // CHECK:STDOUT: %Feed.decl: %Feed.type = fn_decl @Feed [concrete = constants.%Feed] { -// CHECK:STDOUT: %T.patt: %pattern_type.880 = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %e.param_patt: @Feed.%pattern_type (%pattern_type.aed) = value_param_pattern [concrete] -// CHECK:STDOUT: %e.patt: @Feed.%pattern_type (%pattern_type.aed) = at_binding_pattern e, %e.param_patt [concrete] +// CHECK:STDOUT: %T.patt.loc20_10.1: %pattern_type.880 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc20_10.2 (constants.%T.patt.9e8)] +// CHECK:STDOUT: %e.param_patt.loc20_27.1: @Feed.%pattern_type (%pattern_type.aed) = value_param_pattern [symbolic = %e.param_patt.loc20_27.2 (constants.%e.param_patt.0be)] +// CHECK:STDOUT: %e.patt.loc20_27.1: @Feed.%pattern_type (%pattern_type.aed) = at_binding_pattern e, %e.param_patt.loc20_27.1 [symbolic = %e.patt.loc20_27.2 (constants.%e.patt.543)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc20_13: type = splice_block %Eats.ref [concrete = constants.%Eats.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -106,9 +115,9 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: %e: @Feed.%T.as_type.loc20_29.1 (%T.as_type.422) = value_binding e, %e.param // CHECK:STDOUT: } // CHECK:STDOUT: %HandleAnimal.decl: %HandleAnimal.type = fn_decl @HandleAnimal [concrete = constants.%HandleAnimal] { -// CHECK:STDOUT: %T.patt: %pattern_type.333 = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %a.param_patt: @HandleAnimal.%pattern_type (%pattern_type.e90) = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: @HandleAnimal.%pattern_type (%pattern_type.e90) = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %T.patt.loc22_18.1: %pattern_type.333 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc22_18.2 (constants.%T.patt.e44)] +// CHECK:STDOUT: %a.param_patt.loc22_30.1: @HandleAnimal.%pattern_type (%pattern_type.e90) = value_param_pattern [symbolic = %a.param_patt.loc22_30.2 (constants.%a.param_patt)] +// CHECK:STDOUT: %a.patt.loc22_30.1: @HandleAnimal.%pattern_type (%pattern_type.e90) = at_binding_pattern a, %a.param_patt.loc22_30.1 [symbolic = %a.patt.loc22_30.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc22_21: type = splice_block %Animal.ref [concrete = constants.%Animal.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -148,6 +157,7 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @A.as_type.as.Eats.impl(%A.loc18_15.1: %Animal.type) { +// CHECK:STDOUT: %A.patt.loc18_15.2: %pattern_type.333 = symbolic_binding_pattern A, 0 [symbolic = %A.patt.loc18_15.2 (constants.%A.patt)] // CHECK:STDOUT: %A.loc18_15.2: %Animal.type = symbolic_binding A, 0 [symbolic = %A.loc18_15.2 (constants.%A)] // CHECK:STDOUT: %A.as_type.loc18_26.2: type = facet_access_type %A.loc18_15.2 [symbolic = %A.as_type.loc18_26.2 (constants.%A.as_type)] // CHECK:STDOUT: %Eats.impl_witness.loc18_36.2: = impl_witness %Eats.impl_witness_table, @A.as_type.as.Eats.impl(%A.loc18_15.2) [symbolic = %Eats.impl_witness.loc18_36.2 (constants.%Eats.impl_witness.e0811c.1)] @@ -165,9 +175,12 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Feed(%T.loc20_10.2: %Eats.type) { +// CHECK:STDOUT: %T.patt.loc20_10.2: %pattern_type.880 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc20_10.2 (constants.%T.patt.9e8)] // CHECK:STDOUT: %T.loc20_10.1: %Eats.type = symbolic_binding T, 0 [symbolic = %T.loc20_10.1 (constants.%T.672)] // CHECK:STDOUT: %T.as_type.loc20_29.1: type = facet_access_type %T.loc20_10.1 [symbolic = %T.as_type.loc20_29.1 (constants.%T.as_type.422)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc20_29.1 [symbolic = %pattern_type (constants.%pattern_type.aed)] +// CHECK:STDOUT: %e.param_patt.loc20_27.2: @Feed.%pattern_type (%pattern_type.aed) = value_param_pattern [symbolic = %e.param_patt.loc20_27.2 (constants.%e.param_patt.0be)] +// CHECK:STDOUT: %e.patt.loc20_27.2: @Feed.%pattern_type (%pattern_type.aed) = at_binding_pattern e, %e.param_patt.loc20_27.2 [symbolic = %e.patt.loc20_27.2 (constants.%e.patt.543)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc20_29.1 [symbolic = %require_complete (constants.%require_complete.c4d)] @@ -179,23 +192,28 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @HandleAnimal(%T.loc22_18.2: %Animal.type) { +// CHECK:STDOUT: %T.patt.loc22_18.2: %pattern_type.333 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc22_18.2 (constants.%T.patt.e44)] // CHECK:STDOUT: %T.loc22_18.1: %Animal.type = symbolic_binding T, 0 [symbolic = %T.loc22_18.1 (constants.%T.443)] // CHECK:STDOUT: %T.as_type.loc22_32.1: type = facet_access_type %T.loc22_18.1 [symbolic = %T.as_type.loc22_32.1 (constants.%T.as_type.01d)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc22_32.1 [symbolic = %pattern_type (constants.%pattern_type.e90)] +// CHECK:STDOUT: %a.param_patt.loc22_30.2: @HandleAnimal.%pattern_type (%pattern_type.e90) = value_param_pattern [symbolic = %a.param_patt.loc22_30.2 (constants.%a.param_patt)] +// CHECK:STDOUT: %a.patt.loc22_30.2: @HandleAnimal.%pattern_type (%pattern_type.e90) = at_binding_pattern a, %a.param_patt.loc22_30.2 [symbolic = %a.patt.loc22_30.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc22_32.1 [symbolic = %require_complete (constants.%require_complete.db4)] -// CHECK:STDOUT: %.loc22_43.2: require_specific_def_type = require_specific_def @A.as_type.as.Eats.impl(%T.loc22_18.1) [symbolic = %.loc22_43.2 (constants.%.2fe)] +// CHECK:STDOUT: %.loc22_43.3: require_specific_def_type = require_specific_def @A.as_type.as.Eats.impl(%T.loc22_18.1) [symbolic = %.loc22_43.3 (constants.%.2fe)] // CHECK:STDOUT: %Eats.lookup_impl_witness: = lookup_impl_witness %T.loc22_18.1, @Eats [symbolic = %Eats.lookup_impl_witness (constants.%Eats.lookup_impl_witness)] -// CHECK:STDOUT: %Eats.facet.loc22_43.2: %Eats.type = facet_value %T.as_type.loc22_32.1, (%Eats.lookup_impl_witness) [symbolic = %Eats.facet.loc22_43.2 (constants.%Eats.facet.934)] -// CHECK:STDOUT: %Feed.specific_fn.loc22_37.2: = specific_function constants.%Feed, @Feed(%Eats.facet.loc22_43.2) [symbolic = %Feed.specific_fn.loc22_37.2 (constants.%Feed.specific_fn)] +// CHECK:STDOUT: %Eats.facet.loc22_43.3: %Eats.type = facet_value %T.as_type.loc22_32.1, (%Eats.lookup_impl_witness) [symbolic = %Eats.facet.loc22_43.3 (constants.%Eats.facet.934)] +// CHECK:STDOUT: %Feed.specific_fn.loc22_37.2: = specific_function constants.%Feed, @Feed(%Eats.facet.loc22_43.3) [symbolic = %Feed.specific_fn.loc22_37.2 (constants.%Feed.specific_fn)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%a.param: @HandleAnimal.%T.as_type.loc22_32.1 (%T.as_type.01d)) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Feed.ref: %Feed.type = name_ref Feed, file.%Feed.decl [concrete = constants.%Feed] // CHECK:STDOUT: %a.ref: @HandleAnimal.%T.as_type.loc22_32.1 (%T.as_type.01d) = name_ref a, %a -// CHECK:STDOUT: %Eats.facet.loc22_43.1: %Eats.type = facet_value constants.%T.as_type.01d, (constants.%Eats.lookup_impl_witness) [symbolic = %Eats.facet.loc22_43.2 (constants.%Eats.facet.934)] -// CHECK:STDOUT: %.loc22_43.1: %Eats.type = converted constants.%T.as_type.01d, %Eats.facet.loc22_43.1 [symbolic = %Eats.facet.loc22_43.2 (constants.%Eats.facet.934)] +// CHECK:STDOUT: %Eats.facet.loc22_43.1: %Eats.type = facet_value constants.%T.as_type.01d, (constants.%Eats.lookup_impl_witness) [symbolic = %Eats.facet.loc22_43.3 (constants.%Eats.facet.934)] +// CHECK:STDOUT: %.loc22_43.1: %Eats.type = converted constants.%T.as_type.01d, %Eats.facet.loc22_43.1 [symbolic = %Eats.facet.loc22_43.3 (constants.%Eats.facet.934)] +// CHECK:STDOUT: %Eats.facet.loc22_43.2: %Eats.type = facet_value constants.%T.as_type.01d, (constants.%Eats.lookup_impl_witness) [symbolic = %Eats.facet.loc22_43.3 (constants.%Eats.facet.934)] +// CHECK:STDOUT: %.loc22_43.2: %Eats.type = converted constants.%T.as_type.01d, %Eats.facet.loc22_43.2 [symbolic = %Eats.facet.loc22_43.3 (constants.%Eats.facet.934)] // CHECK:STDOUT: %Feed.specific_fn.loc22_37.1: = specific_function %Feed.ref, @Feed(constants.%Eats.facet.934) [symbolic = %Feed.specific_fn.loc22_37.2 (constants.%Feed.specific_fn)] // CHECK:STDOUT: %Feed.call: init %empty_tuple.type = call %Feed.specific_fn.loc22_37.1(%a.ref) // CHECK:STDOUT: return @@ -211,6 +229,7 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A.as_type.as.Eats.impl(constants.%A) { +// CHECK:STDOUT: %A.patt.loc18_15.2 => constants.%A.patt // CHECK:STDOUT: %A.loc18_15.2 => constants.%A // CHECK:STDOUT: %A.as_type.loc18_26.2 => constants.%A.as_type // CHECK:STDOUT: %Eats.impl_witness.loc18_36.2 => constants.%Eats.impl_witness.e0811c.1 @@ -221,18 +240,25 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Feed(constants.%T.672) { +// CHECK:STDOUT: %T.patt.loc20_10.2 => constants.%T.patt.9e8 // CHECK:STDOUT: %T.loc20_10.1 => constants.%T.672 // CHECK:STDOUT: %T.as_type.loc20_29.1 => constants.%T.as_type.422 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.aed +// CHECK:STDOUT: %e.param_patt.loc20_27.2 => constants.%e.param_patt.0be +// CHECK:STDOUT: %e.patt.loc20_27.2 => constants.%e.patt.543 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HandleAnimal(constants.%T.443) { +// CHECK:STDOUT: %T.patt.loc22_18.2 => constants.%T.patt.e44 // CHECK:STDOUT: %T.loc22_18.1 => constants.%T.443 // CHECK:STDOUT: %T.as_type.loc22_32.1 => constants.%T.as_type.01d // CHECK:STDOUT: %pattern_type => constants.%pattern_type.e90 +// CHECK:STDOUT: %a.param_patt.loc22_30.2 => constants.%a.param_patt +// CHECK:STDOUT: %a.patt.loc22_30.2 => constants.%a.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A.as_type.as.Eats.impl(constants.%T.443) { +// CHECK:STDOUT: %A.patt.loc18_15.2 => constants.%A.patt // CHECK:STDOUT: %A.loc18_15.2 => constants.%T.443 // CHECK:STDOUT: %A.as_type.loc18_26.2 => constants.%T.as_type.01d // CHECK:STDOUT: %Eats.impl_witness.loc18_36.2 => constants.%Eats.impl_witness.e0811c.2 @@ -241,9 +267,12 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Feed(constants.%Eats.facet.934) { +// CHECK:STDOUT: %T.patt.loc20_10.2 => constants.%T.patt.9e8 // CHECK:STDOUT: %T.loc20_10.1 => constants.%Eats.facet.934 // CHECK:STDOUT: %T.as_type.loc20_29.1 => constants.%T.as_type.01d // CHECK:STDOUT: %pattern_type => constants.%pattern_type.e90 +// CHECK:STDOUT: %e.param_patt.loc20_27.2 => constants.%e.param_patt.1c7 +// CHECK:STDOUT: %e.patt.loc20_27.2 => constants.%e.patt.637 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.db4 diff --git a/toolchain/check/testdata/facet/convert_facet_value_value_to_generic_facet_value_value.carbon b/toolchain/check/testdata/facet/convert_facet_value_value_to_generic_facet_value_value.carbon index 55ff8ae09cc8..4b67f5af7cb2 100644 --- a/toolchain/check/testdata/facet/convert_facet_value_value_to_generic_facet_value_value.carbon +++ b/toolchain/check/testdata/facet/convert_facet_value_value_to_generic_facet_value_value.carbon @@ -50,6 +50,7 @@ fn F() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Food.patt.d47: %pattern_type.98f = symbolic_binding_pattern Food, 0 [symbolic] // CHECK:STDOUT: %Food.67d: type = symbolic_binding Food, 0 [symbolic] // CHECK:STDOUT: %Eats.type.8ef: type = generic_interface_type @Eats [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -57,8 +58,10 @@ fn F() { // CHECK:STDOUT: %Eats.type.b81: type = facet_type <@Eats, @Eats(%Food.67d)> [symbolic] // CHECK:STDOUT: %Self.db3: %Eats.type.b81 = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %pattern_type.333: type = pattern_type %Animal.type [concrete] +// CHECK:STDOUT: %T.patt.e44: %pattern_type.333 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.443: %Animal.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %pattern_type.e90e: type = pattern_type %Edible.type [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.e90e = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %U: %Edible.type = symbolic_binding U, 1 [symbolic] // CHECK:STDOUT: %T.as_type.01d: type = facet_access_type %T.443 [symbolic] // CHECK:STDOUT: %U.as_type: type = facet_access_type %U [symbolic] @@ -70,25 +73,37 @@ fn F() { // CHECK:STDOUT: %Goat: type = class_type @Goat [concrete] // CHECK:STDOUT: %Animal.impl_witness: = impl_witness @Goat.as.Animal.impl.%Animal.impl_witness_table [concrete] // CHECK:STDOUT: %Animal.facet: %Animal.type = facet_value %Goat, (%Animal.impl_witness) [concrete] +// CHECK:STDOUT: %Food.patt.bbd: %pattern_type.e90e = symbolic_binding_pattern Food, 0 [symbolic] // CHECK:STDOUT: %Food.196: %Edible.type = symbolic_binding Food, 0 [symbolic] // CHECK:STDOUT: %Food.as_type.bca: type = facet_access_type %Food.196 [symbolic] // CHECK:STDOUT: %Eats.type.eb4: type = facet_type <@Eats, @Eats(%Food.as_type.bca)> [symbolic] // CHECK:STDOUT: %pattern_type.560: type = pattern_type %Eats.type.eb4 [symbolic] +// CHECK:STDOUT: %T.patt.02f: %pattern_type.560 = symbolic_binding_pattern T, 1 [symbolic] // CHECK:STDOUT: %T.b01: %Eats.type.eb4 = symbolic_binding T, 1 [symbolic] // CHECK:STDOUT: %Self.377: %Eats.type.eb4 = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %T.as_type.b84: type = facet_access_type %T.b01 [symbolic] // CHECK:STDOUT: %pattern_type.371: type = pattern_type %T.as_type.b84 [symbolic] +// CHECK:STDOUT: %e.param_patt.32e: %pattern_type.371 = value_param_pattern [symbolic] +// CHECK:STDOUT: %e.patt.af1: %pattern_type.371 = at_binding_pattern e, %e.param_patt.32e [symbolic] // CHECK:STDOUT: %pattern_type.e40: type = pattern_type %Food.as_type.bca [symbolic] +// CHECK:STDOUT: %food.param_patt.1bd: %pattern_type.e40 = value_param_pattern [symbolic] +// CHECK:STDOUT: %food.patt.bcf: %pattern_type.e40 = at_binding_pattern food, %food.param_patt.1bd [symbolic] // CHECK:STDOUT: %Feed.type: type = fn_type @Feed [concrete] // CHECK:STDOUT: %Feed: %Feed.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.363: = require_complete_type %T.as_type.b84 [symbolic] // CHECK:STDOUT: %require_complete.d57: = require_complete_type %Food.as_type.bca [symbolic] +// CHECK:STDOUT: %A.patt: %pattern_type.333 = symbolic_binding_pattern A, 0 [symbolic] // CHECK:STDOUT: %A: %Animal.type = symbolic_binding A, 0 [symbolic] +// CHECK:STDOUT: %Food.patt.0d1: %pattern_type.e90e = symbolic_binding_pattern Food, 1 [symbolic] // CHECK:STDOUT: %Food.5f8: %Edible.type = symbolic_binding Food, 1 [symbolic] // CHECK:STDOUT: %A.as_type: type = facet_access_type %A [symbolic] // CHECK:STDOUT: %pattern_type.e90c: type = pattern_type %A.as_type [symbolic] +// CHECK:STDOUT: %a.param_patt.84e: %pattern_type.e90c = value_param_pattern [symbolic] +// CHECK:STDOUT: %a.patt.3e6: %pattern_type.e90c = at_binding_pattern a, %a.param_patt.84e [symbolic] // CHECK:STDOUT: %Food.as_type.24e: type = facet_access_type %Food.5f8 [symbolic] // CHECK:STDOUT: %pattern_type.ea8: type = pattern_type %Food.as_type.24e [symbolic] +// CHECK:STDOUT: %food.param_patt.38d: %pattern_type.ea8 = value_param_pattern [symbolic] +// CHECK:STDOUT: %food.patt.09a8ec.1: %pattern_type.ea8 = at_binding_pattern food, %food.param_patt.38d [symbolic] // CHECK:STDOUT: %HandleAnimal.type: type = fn_type @HandleAnimal [concrete] // CHECK:STDOUT: %HandleAnimal: %HandleAnimal.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.db4: = require_complete_type %A.as_type [symbolic] @@ -100,6 +115,10 @@ fn F() { // CHECK:STDOUT: %.86d: require_specific_def_type = require_specific_def @T.as_type.as.Eats.impl(%A, %Food.5f8) [symbolic] // CHECK:STDOUT: %Eats.facet.f11: %Eats.type.ceea62.2 = facet_value %A.as_type, (%Eats.lookup_impl_witness) [symbolic] // CHECK:STDOUT: %pattern_type.efc: type = pattern_type %Eats.type.ceea62.2 [symbolic] +// CHECK:STDOUT: %T.patt.59c: %pattern_type.efc = symbolic_binding_pattern T, 1 [symbolic] +// CHECK:STDOUT: %e.param_patt.1c7: %pattern_type.e90c = value_param_pattern [symbolic] +// CHECK:STDOUT: %e.patt.637: %pattern_type.e90c = at_binding_pattern e, %e.param_patt.1c7 [symbolic] +// CHECK:STDOUT: %food.patt.09a8ec.2: %pattern_type.ea8 = at_binding_pattern food, %food.param_patt.38d [symbolic] // CHECK:STDOUT: %Feed.specific_fn.292: = specific_function %Feed, @Feed(%Food.5f8, %Eats.facet.f11) [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] @@ -107,7 +126,11 @@ fn F() { // CHECK:STDOUT: %Goat.val: %Goat = struct_value () [concrete] // CHECK:STDOUT: %Grass.val: %Grass = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.283: type = pattern_type %Goat [concrete] +// CHECK:STDOUT: %a.param_patt.8f5: %pattern_type.283 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt.8aa: %pattern_type.283 = at_binding_pattern a, %a.param_patt.8f5 [concrete] // CHECK:STDOUT: %pattern_type.92e: type = pattern_type %Grass [concrete] +// CHECK:STDOUT: %food.param_patt.42e: %pattern_type.92e = value_param_pattern [concrete] +// CHECK:STDOUT: %food.patt.b2a068.1: %pattern_type.92e = at_binding_pattern food, %food.param_patt.42e [concrete] // CHECK:STDOUT: %HandleAnimal.specific_fn: = specific_function %HandleAnimal, @HandleAnimal(%Animal.facet, %Edible.facet) [concrete] // CHECK:STDOUT: %.4ea: ref %Goat = temporary invalid, %Goat.val [concrete] // CHECK:STDOUT: %.202: ref %Grass = temporary invalid, %Grass.val [concrete] @@ -125,6 +148,10 @@ fn F() { // CHECK:STDOUT: %.86e: require_specific_def_type = require_specific_def @T.as_type.as.Eats.impl(%Animal.facet, %Edible.facet) [concrete] // CHECK:STDOUT: %Eats.facet.d00: %Eats.type.682 = facet_value %Goat, (%Eats.impl_witness.fd5) [concrete] // CHECK:STDOUT: %pattern_type.a69: type = pattern_type %Eats.type.682 [concrete] +// CHECK:STDOUT: %T.patt.55e: %pattern_type.a69 = symbolic_binding_pattern T, 1 [symbolic] +// CHECK:STDOUT: %e.param_patt.b2f: %pattern_type.283 = value_param_pattern [concrete] +// CHECK:STDOUT: %e.patt.ccf: %pattern_type.283 = at_binding_pattern e, %e.param_patt.b2f [concrete] +// CHECK:STDOUT: %food.patt.b2a068.2: %pattern_type.92e = at_binding_pattern food, %food.param_patt.42e [concrete] // CHECK:STDOUT: %Feed.specific_fn.166: = specific_function %Feed, @Feed(%Edible.facet, %Eats.facet.d00) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -158,7 +185,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %Animal.decl: type = interface_decl @Animal [concrete = constants.%Animal.type] {} {} // CHECK:STDOUT: %Eats.decl: %Eats.type.8ef = interface_decl @Eats [concrete = constants.%Eats.generic] { -// CHECK:STDOUT: %Food.patt: %pattern_type.98f = symbolic_binding_pattern Food, 0 [concrete] +// CHECK:STDOUT: %Food.patt.loc21_20.1: %pattern_type.98f = symbolic_binding_pattern Food, 0 [symbolic = %Food.patt.loc21_20.2 (constants.%Food.patt.d47)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc21_23.1: type = splice_block %.loc21_23.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -167,8 +194,8 @@ fn F() { // CHECK:STDOUT: %Food.loc21_20.2: type = symbolic_binding Food, 0 [symbolic = %Food.loc21_20.1 (constants.%Food.67d)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @T.as_type.as.Eats.impl [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type.333 = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %U.patt: %pattern_type.e90e = symbolic_binding_pattern U, 1 [concrete] +// CHECK:STDOUT: %T.patt.loc26_15.1: %pattern_type.333 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc26_15.2 (constants.%T.patt.e44)] +// CHECK:STDOUT: %U.patt.loc26_27.1: %pattern_type.e90e = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc26_27.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: %Animal.type = name_ref T, %T.loc26_15.1 [symbolic = %T.loc26_15.2 (constants.%T.443)] // CHECK:STDOUT: %T.as_type.loc26_38.1: type = facet_access_type %T.ref [symbolic = %T.as_type.loc26_38.2 (constants.%T.as_type.01d)] @@ -195,12 +222,12 @@ fn F() { // CHECK:STDOUT: %Animal.ref: type = name_ref Animal, file.%Animal.decl [concrete = constants.%Animal.type] // CHECK:STDOUT: } // CHECK:STDOUT: %Feed.decl: %Feed.type = fn_decl @Feed [concrete = constants.%Feed] { -// CHECK:STDOUT: %Food.patt: %pattern_type.e90e = symbolic_binding_pattern Food, 0 [concrete] -// CHECK:STDOUT: %T.patt: @Feed.%pattern_type.loc31_25 (%pattern_type.560) = symbolic_binding_pattern T, 1 [concrete] -// CHECK:STDOUT: %e.param_patt: @Feed.%pattern_type.loc31_48 (%pattern_type.371) = value_param_pattern [concrete] -// CHECK:STDOUT: %e.patt: @Feed.%pattern_type.loc31_48 (%pattern_type.371) = at_binding_pattern e, %e.param_patt [concrete] -// CHECK:STDOUT: %food.param_patt: @Feed.%pattern_type.loc31_64 (%pattern_type.e40) = value_param_pattern [concrete] -// CHECK:STDOUT: %food.patt: @Feed.%pattern_type.loc31_64 (%pattern_type.e40) = at_binding_pattern food, %food.param_patt [concrete] +// CHECK:STDOUT: %Food.patt.loc31_13.1: %pattern_type.e90e = symbolic_binding_pattern Food, 0 [symbolic = %Food.patt.loc31_13.2 (constants.%Food.patt.bbd)] +// CHECK:STDOUT: %T.patt.loc31_25.1: @Feed.%pattern_type.loc31_25 (%pattern_type.560) = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc31_25.2 (constants.%T.patt.02f)] +// CHECK:STDOUT: %e.param_patt.loc31_48.1: @Feed.%pattern_type.loc31_48 (%pattern_type.371) = value_param_pattern [symbolic = %e.param_patt.loc31_48.2 (constants.%e.param_patt.32e)] +// CHECK:STDOUT: %e.patt.loc31_48.1: @Feed.%pattern_type.loc31_48 (%pattern_type.371) = at_binding_pattern e, %e.param_patt.loc31_48.1 [symbolic = %e.patt.loc31_48.2 (constants.%e.patt.af1)] +// CHECK:STDOUT: %food.param_patt.loc31_64.1: @Feed.%pattern_type.loc31_64 (%pattern_type.e40) = value_param_pattern [symbolic = %food.param_patt.loc31_64.2 (constants.%food.param_patt.1bd)] +// CHECK:STDOUT: %food.patt.loc31_64.1: @Feed.%pattern_type.loc31_64 (%pattern_type.e40) = at_binding_pattern food, %food.param_patt.loc31_64.1 [symbolic = %food.patt.loc31_64.2 (constants.%food.patt.bcf)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc31_16: type = splice_block %Edible.ref [concrete = constants.%Edible.type] { // CHECK:STDOUT: %.Self.loc31_13: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -232,12 +259,12 @@ fn F() { // CHECK:STDOUT: %food: @Feed.%Food.as_type.loc31_37.1 (%Food.as_type.bca) = value_binding food, %food.param // CHECK:STDOUT: } // CHECK:STDOUT: %HandleAnimal.decl: %HandleAnimal.type = fn_decl @HandleAnimal [concrete = constants.%HandleAnimal] { -// CHECK:STDOUT: %A.patt: %pattern_type.333 = symbolic_binding_pattern A, 0 [concrete] -// CHECK:STDOUT: %Food.patt: %pattern_type.e90e = symbolic_binding_pattern Food, 1 [concrete] -// CHECK:STDOUT: %a.param_patt: @HandleAnimal.%pattern_type.loc32_45 (%pattern_type.e90c) = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: @HandleAnimal.%pattern_type.loc32_45 (%pattern_type.e90c) = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %food.param_patt: @HandleAnimal.%pattern_type.loc32_54 (%pattern_type.ea8) = value_param_pattern [concrete] -// CHECK:STDOUT: %food.patt: @HandleAnimal.%pattern_type.loc32_54 (%pattern_type.ea8) = at_binding_pattern food, %food.param_patt [concrete] +// CHECK:STDOUT: %A.patt.loc32_18.1: %pattern_type.333 = symbolic_binding_pattern A, 0 [symbolic = %A.patt.loc32_18.2 (constants.%A.patt)] +// CHECK:STDOUT: %Food.patt.loc32_33.1: %pattern_type.e90e = symbolic_binding_pattern Food, 1 [symbolic = %Food.patt.loc32_33.2 (constants.%Food.patt.0d1)] +// CHECK:STDOUT: %a.param_patt.loc32_45.1: @HandleAnimal.%pattern_type.loc32_45 (%pattern_type.e90c) = value_param_pattern [symbolic = %a.param_patt.loc32_45.2 (constants.%a.param_patt.84e)] +// CHECK:STDOUT: %a.patt.loc32_45.1: @HandleAnimal.%pattern_type.loc32_45 (%pattern_type.e90c) = at_binding_pattern a, %a.param_patt.loc32_45.1 [symbolic = %a.patt.loc32_45.2 (constants.%a.patt.3e6)] +// CHECK:STDOUT: %food.param_patt.loc32_54.1: @HandleAnimal.%pattern_type.loc32_54 (%pattern_type.ea8) = value_param_pattern [symbolic = %food.param_patt.loc32_54.2 (constants.%food.param_patt.38d)] +// CHECK:STDOUT: %food.patt.loc32_54.1: @HandleAnimal.%pattern_type.loc32_54 (%pattern_type.ea8) = at_binding_pattern food, %food.param_patt.loc32_54.1 [symbolic = %food.patt.loc32_54.2 (constants.%food.patt.09a8ec.1)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc32_21: type = splice_block %Animal.ref [concrete = constants.%Animal.type] { // CHECK:STDOUT: %.Self.loc32_18: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -290,6 +317,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Eats(%Food.loc21_20.2: type) { +// CHECK:STDOUT: %Food.patt.loc21_20.2: %pattern_type.98f = symbolic_binding_pattern Food, 0 [symbolic = %Food.patt.loc21_20.2 (constants.%Food.patt.d47)] // CHECK:STDOUT: %Food.loc21_20.1: type = symbolic_binding Food, 0 [symbolic = %Food.loc21_20.1 (constants.%Food.67d)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -318,7 +346,9 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @T.as_type.as.Eats.impl(%T.loc26_15.1: %Animal.type, %U.loc26_27.1: %Edible.type) { +// CHECK:STDOUT: %T.patt.loc26_15.2: %pattern_type.333 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc26_15.2 (constants.%T.patt.e44)] // CHECK:STDOUT: %T.loc26_15.2: %Animal.type = symbolic_binding T, 0 [symbolic = %T.loc26_15.2 (constants.%T.443)] +// CHECK:STDOUT: %U.patt.loc26_27.2: %pattern_type.e90e = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc26_27.2 (constants.%U.patt)] // CHECK:STDOUT: %U.loc26_27.2: %Edible.type = symbolic_binding U, 1 [symbolic = %U.loc26_27.2 (constants.%U)] // CHECK:STDOUT: %T.as_type.loc26_38.2: type = facet_access_type %T.loc26_15.2 [symbolic = %T.as_type.loc26_38.2 (constants.%T.as_type.01d)] // CHECK:STDOUT: %U.as_type.loc26_49.2: type = facet_access_type %U.loc26_27.2 [symbolic = %U.as_type.loc26_49.2 (constants.%U.as_type)] @@ -364,14 +394,20 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Feed(%Food.loc31_13.2: %Edible.type, %T.loc31_25.2: @Feed.%Eats.type.loc31_37.1 (%Eats.type.eb4)) { +// CHECK:STDOUT: %Food.patt.loc31_13.2: %pattern_type.e90e = symbolic_binding_pattern Food, 0 [symbolic = %Food.patt.loc31_13.2 (constants.%Food.patt.bbd)] // CHECK:STDOUT: %Food.loc31_13.1: %Edible.type = symbolic_binding Food, 0 [symbolic = %Food.loc31_13.1 (constants.%Food.196)] // CHECK:STDOUT: %Food.as_type.loc31_37.1: type = facet_access_type %Food.loc31_13.1 [symbolic = %Food.as_type.loc31_37.1 (constants.%Food.as_type.bca)] // CHECK:STDOUT: %Eats.type.loc31_37.1: type = facet_type <@Eats, @Eats(%Food.as_type.loc31_37.1)> [symbolic = %Eats.type.loc31_37.1 (constants.%Eats.type.eb4)] -// CHECK:STDOUT: %T.loc31_25.1: @Feed.%Eats.type.loc31_37.1 (%Eats.type.eb4) = symbolic_binding T, 1 [symbolic = %T.loc31_25.1 (constants.%T.b01)] // CHECK:STDOUT: %pattern_type.loc31_25: type = pattern_type %Eats.type.loc31_37.1 [symbolic = %pattern_type.loc31_25 (constants.%pattern_type.560)] +// CHECK:STDOUT: %T.patt.loc31_25.2: @Feed.%pattern_type.loc31_25 (%pattern_type.560) = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc31_25.2 (constants.%T.patt.02f)] +// CHECK:STDOUT: %T.loc31_25.1: @Feed.%Eats.type.loc31_37.1 (%Eats.type.eb4) = symbolic_binding T, 1 [symbolic = %T.loc31_25.1 (constants.%T.b01)] // CHECK:STDOUT: %T.as_type.loc31_50.1: type = facet_access_type %T.loc31_25.1 [symbolic = %T.as_type.loc31_50.1 (constants.%T.as_type.b84)] // CHECK:STDOUT: %pattern_type.loc31_48: type = pattern_type %T.as_type.loc31_50.1 [symbolic = %pattern_type.loc31_48 (constants.%pattern_type.371)] +// CHECK:STDOUT: %e.param_patt.loc31_48.2: @Feed.%pattern_type.loc31_48 (%pattern_type.371) = value_param_pattern [symbolic = %e.param_patt.loc31_48.2 (constants.%e.param_patt.32e)] +// CHECK:STDOUT: %e.patt.loc31_48.2: @Feed.%pattern_type.loc31_48 (%pattern_type.371) = at_binding_pattern e, %e.param_patt.loc31_48.2 [symbolic = %e.patt.loc31_48.2 (constants.%e.patt.af1)] // CHECK:STDOUT: %pattern_type.loc31_64: type = pattern_type %Food.as_type.loc31_37.1 [symbolic = %pattern_type.loc31_64 (constants.%pattern_type.e40)] +// CHECK:STDOUT: %food.param_patt.loc31_64.2: @Feed.%pattern_type.loc31_64 (%pattern_type.e40) = value_param_pattern [symbolic = %food.param_patt.loc31_64.2 (constants.%food.param_patt.1bd)] +// CHECK:STDOUT: %food.patt.loc31_64.2: @Feed.%pattern_type.loc31_64 (%pattern_type.e40) = at_binding_pattern food, %food.param_patt.loc31_64.2 [symbolic = %food.patt.loc31_64.2 (constants.%food.patt.bcf)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc31_48: = require_complete_type %T.as_type.loc31_50.1 [symbolic = %require_complete.loc31_48 (constants.%require_complete.363)] @@ -384,17 +420,23 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @HandleAnimal(%A.loc32_18.2: %Animal.type, %Food.loc32_33.2: %Edible.type) { +// CHECK:STDOUT: %A.patt.loc32_18.2: %pattern_type.333 = symbolic_binding_pattern A, 0 [symbolic = %A.patt.loc32_18.2 (constants.%A.patt)] // CHECK:STDOUT: %A.loc32_18.1: %Animal.type = symbolic_binding A, 0 [symbolic = %A.loc32_18.1 (constants.%A)] +// CHECK:STDOUT: %Food.patt.loc32_33.2: %pattern_type.e90e = symbolic_binding_pattern Food, 1 [symbolic = %Food.patt.loc32_33.2 (constants.%Food.patt.0d1)] // CHECK:STDOUT: %Food.loc32_33.1: %Edible.type = symbolic_binding Food, 1 [symbolic = %Food.loc32_33.1 (constants.%Food.5f8)] // CHECK:STDOUT: %A.as_type.loc32_47.1: type = facet_access_type %A.loc32_18.1 [symbolic = %A.as_type.loc32_47.1 (constants.%A.as_type)] // CHECK:STDOUT: %pattern_type.loc32_45: type = pattern_type %A.as_type.loc32_47.1 [symbolic = %pattern_type.loc32_45 (constants.%pattern_type.e90c)] +// CHECK:STDOUT: %a.param_patt.loc32_45.2: @HandleAnimal.%pattern_type.loc32_45 (%pattern_type.e90c) = value_param_pattern [symbolic = %a.param_patt.loc32_45.2 (constants.%a.param_patt.84e)] +// CHECK:STDOUT: %a.patt.loc32_45.2: @HandleAnimal.%pattern_type.loc32_45 (%pattern_type.e90c) = at_binding_pattern a, %a.param_patt.loc32_45.2 [symbolic = %a.patt.loc32_45.2 (constants.%a.patt.3e6)] // CHECK:STDOUT: %Food.as_type.loc32_56.1: type = facet_access_type %Food.loc32_33.1 [symbolic = %Food.as_type.loc32_56.1 (constants.%Food.as_type.24e)] // CHECK:STDOUT: %pattern_type.loc32_54: type = pattern_type %Food.as_type.loc32_56.1 [symbolic = %pattern_type.loc32_54 (constants.%pattern_type.ea8)] +// CHECK:STDOUT: %food.param_patt.loc32_54.2: @HandleAnimal.%pattern_type.loc32_54 (%pattern_type.ea8) = value_param_pattern [symbolic = %food.param_patt.loc32_54.2 (constants.%food.param_patt.38d)] +// CHECK:STDOUT: %food.patt.loc32_54.2: @HandleAnimal.%pattern_type.loc32_54 (%pattern_type.ea8) = at_binding_pattern food, %food.param_patt.loc32_54.2 [symbolic = %food.patt.loc32_54.2 (constants.%food.patt.09a8ec.1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc32_45: = require_complete_type %A.as_type.loc32_47.1 [symbolic = %require_complete.loc32_45 (constants.%require_complete.db4)] // CHECK:STDOUT: %require_complete.loc32_54: = require_complete_type %Food.as_type.loc32_56.1 [symbolic = %require_complete.loc32_54 (constants.%require_complete.3cc)] -// CHECK:STDOUT: %.loc32_76.3: require_specific_def_type = require_specific_def @T.as_type.as.Eats.impl(%A.loc32_18.1, %Food.loc32_33.1) [symbolic = %.loc32_76.3 (constants.%.86d)] +// CHECK:STDOUT: %.loc32_76.4: require_specific_def_type = require_specific_def @T.as_type.as.Eats.impl(%A.loc32_18.1, %Food.loc32_33.1) [symbolic = %.loc32_76.4 (constants.%.86d)] // CHECK:STDOUT: %Eats.type: type = facet_type <@Eats, @Eats(%Food.as_type.loc32_56.1)> [symbolic = %Eats.type (constants.%Eats.type.ceea62.2)] // CHECK:STDOUT: %Eats.lookup_impl_witness: = lookup_impl_witness %A.loc32_18.1, @Eats, @Eats(%Food.as_type.loc32_56.1) [symbolic = %Eats.lookup_impl_witness (constants.%Eats.lookup_impl_witness)] // CHECK:STDOUT: %Eats.facet.loc32_76.2: @HandleAnimal.%Eats.type (%Eats.type.ceea62.2) = facet_value %A.as_type.loc32_47.1, (%Eats.lookup_impl_witness) [symbolic = %Eats.facet.loc32_76.2 (constants.%Eats.facet.f11)] @@ -406,8 +448,9 @@ fn F() { // CHECK:STDOUT: %a.ref: @HandleAnimal.%A.as_type.loc32_47.1 (%A.as_type) = name_ref a, %a // CHECK:STDOUT: %food.ref: @HandleAnimal.%Food.as_type.loc32_56.1 (%Food.as_type.24e) = name_ref food, %food // CHECK:STDOUT: %.loc32_76.1: %Edible.type = converted constants.%Food.as_type.24e, constants.%Food.5f8 [symbolic = %Food.loc32_33.1 (constants.%Food.5f8)] +// CHECK:STDOUT: %.loc32_76.2: %Edible.type = converted constants.%Food.as_type.24e, constants.%Food.5f8 [symbolic = %Food.loc32_33.1 (constants.%Food.5f8)] // CHECK:STDOUT: %Eats.facet.loc32_76.1: @HandleAnimal.%Eats.type (%Eats.type.ceea62.2) = facet_value constants.%A.as_type, (constants.%Eats.lookup_impl_witness) [symbolic = %Eats.facet.loc32_76.2 (constants.%Eats.facet.f11)] -// CHECK:STDOUT: %.loc32_76.2: @HandleAnimal.%Eats.type (%Eats.type.ceea62.2) = converted constants.%A.as_type, %Eats.facet.loc32_76.1 [symbolic = %Eats.facet.loc32_76.2 (constants.%Eats.facet.f11)] +// CHECK:STDOUT: %.loc32_76.3: @HandleAnimal.%Eats.type (%Eats.type.ceea62.2) = converted constants.%A.as_type, %Eats.facet.loc32_76.1 [symbolic = %Eats.facet.loc32_76.2 (constants.%Eats.facet.f11)] // CHECK:STDOUT: %Feed.specific_fn.loc32_64.1: = specific_function %Feed.ref, @Feed(constants.%Food.5f8, constants.%Eats.facet.f11) [symbolic = %Feed.specific_fn.loc32_64.2 (constants.%Feed.specific_fn.292)] // CHECK:STDOUT: %Feed.call: init %empty_tuple.type = call %Feed.specific_fn.loc32_64.1(%a.ref, %food.ref) // CHECK:STDOUT: return @@ -427,10 +470,14 @@ fn F() { // CHECK:STDOUT: %.loc35_29.2: ref %Grass = temporary_storage // CHECK:STDOUT: %.loc35_29.3: init %Grass to %.loc35_29.2 = class_init () [concrete = constants.%Grass.val] // CHECK:STDOUT: %.loc35_31.1: init %Grass = converted %.loc35_29.1, %.loc35_29.3 [concrete = constants.%Grass.val] -// CHECK:STDOUT: %Animal.facet: %Animal.type = facet_value constants.%Goat, (constants.%Animal.impl_witness) [concrete = constants.%Animal.facet] -// CHECK:STDOUT: %.loc35_39.1: %Animal.type = converted constants.%Goat, %Animal.facet [concrete = constants.%Animal.facet] -// CHECK:STDOUT: %Edible.facet: %Edible.type = facet_value constants.%Grass, (constants.%Edible.impl_witness) [concrete = constants.%Edible.facet] -// CHECK:STDOUT: %.loc35_39.2: %Edible.type = converted constants.%Grass, %Edible.facet [concrete = constants.%Edible.facet] +// CHECK:STDOUT: %Animal.facet.loc35_39.1: %Animal.type = facet_value constants.%Goat, (constants.%Animal.impl_witness) [concrete = constants.%Animal.facet] +// CHECK:STDOUT: %.loc35_39.1: %Animal.type = converted constants.%Goat, %Animal.facet.loc35_39.1 [concrete = constants.%Animal.facet] +// CHECK:STDOUT: %Animal.facet.loc35_39.2: %Animal.type = facet_value constants.%Goat, (constants.%Animal.impl_witness) [concrete = constants.%Animal.facet] +// CHECK:STDOUT: %.loc35_39.2: %Animal.type = converted constants.%Goat, %Animal.facet.loc35_39.2 [concrete = constants.%Animal.facet] +// CHECK:STDOUT: %Edible.facet.loc35_39.1: %Edible.type = facet_value constants.%Grass, (constants.%Edible.impl_witness) [concrete = constants.%Edible.facet] +// CHECK:STDOUT: %.loc35_39.3: %Edible.type = converted constants.%Grass, %Edible.facet.loc35_39.1 [concrete = constants.%Edible.facet] +// CHECK:STDOUT: %Edible.facet.loc35_39.2: %Edible.type = facet_value constants.%Grass, (constants.%Edible.impl_witness) [concrete = constants.%Edible.facet] +// CHECK:STDOUT: %.loc35_39.4: %Edible.type = converted constants.%Grass, %Edible.facet.loc35_39.2 [concrete = constants.%Edible.facet] // CHECK:STDOUT: %HandleAnimal.specific_fn: = specific_function %HandleAnimal.ref, @HandleAnimal(constants.%Animal.facet, constants.%Edible.facet) [concrete = constants.%HandleAnimal.specific_fn] // CHECK:STDOUT: %.loc35_19.2: ref %Goat = temporary %.loc35_17.2, %.loc35_19.1 [concrete = constants.%.4ea] // CHECK:STDOUT: %.loc35_19.3: %Goat = acquire_value %.loc35_19.2 [concrete = constants.%Goat.val] @@ -467,12 +514,14 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Eats(constants.%Food.67d) { +// CHECK:STDOUT: %Food.patt.loc21_20.2 => constants.%Food.patt.d47 // CHECK:STDOUT: %Food.loc21_20.1 => constants.%Food.67d // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Eats.WithSelf(constants.%Food.67d, constants.%Self.db3) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @Eats(constants.%U.as_type) { +// CHECK:STDOUT: %Food.patt.loc21_20.2 => constants.%Food.patt.d47 // CHECK:STDOUT: %Food.loc21_20.1 => constants.%U.as_type // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -481,7 +530,9 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @T.as_type.as.Eats.impl(constants.%T.443, constants.%U) { +// CHECK:STDOUT: %T.patt.loc26_15.2 => constants.%T.patt.e44 // CHECK:STDOUT: %T.loc26_15.2 => constants.%T.443 +// CHECK:STDOUT: %U.patt.loc26_27.2 => constants.%U.patt // CHECK:STDOUT: %U.loc26_27.2 => constants.%U // CHECK:STDOUT: %T.as_type.loc26_38.2 => constants.%T.as_type.01d // CHECK:STDOUT: %U.as_type.loc26_49.2 => constants.%U.as_type @@ -502,6 +553,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Eats(constants.%Food.as_type.bca) { +// CHECK:STDOUT: %Food.patt.loc21_20.2 => constants.%Food.patt.d47 // CHECK:STDOUT: %Food.loc21_20.1 => constants.%Food.as_type.bca // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -514,31 +566,46 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Feed(constants.%Food.196, constants.%T.b01) { +// CHECK:STDOUT: %Food.patt.loc31_13.2 => constants.%Food.patt.bbd // CHECK:STDOUT: %Food.loc31_13.1 => constants.%Food.196 // CHECK:STDOUT: %Food.as_type.loc31_37.1 => constants.%Food.as_type.bca // CHECK:STDOUT: %Eats.type.loc31_37.1 => constants.%Eats.type.eb4 -// CHECK:STDOUT: %T.loc31_25.1 => constants.%T.b01 // CHECK:STDOUT: %pattern_type.loc31_25 => constants.%pattern_type.560 +// CHECK:STDOUT: %T.patt.loc31_25.2 => constants.%T.patt.02f +// CHECK:STDOUT: %T.loc31_25.1 => constants.%T.b01 // CHECK:STDOUT: %T.as_type.loc31_50.1 => constants.%T.as_type.b84 // CHECK:STDOUT: %pattern_type.loc31_48 => constants.%pattern_type.371 +// CHECK:STDOUT: %e.param_patt.loc31_48.2 => constants.%e.param_patt.32e +// CHECK:STDOUT: %e.patt.loc31_48.2 => constants.%e.patt.af1 // CHECK:STDOUT: %pattern_type.loc31_64 => constants.%pattern_type.e40 +// CHECK:STDOUT: %food.param_patt.loc31_64.2 => constants.%food.param_patt.1bd +// CHECK:STDOUT: %food.patt.loc31_64.2 => constants.%food.patt.bcf // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HandleAnimal(constants.%A, constants.%Food.5f8) { +// CHECK:STDOUT: %A.patt.loc32_18.2 => constants.%A.patt // CHECK:STDOUT: %A.loc32_18.1 => constants.%A +// CHECK:STDOUT: %Food.patt.loc32_33.2 => constants.%Food.patt.0d1 // CHECK:STDOUT: %Food.loc32_33.1 => constants.%Food.5f8 // CHECK:STDOUT: %A.as_type.loc32_47.1 => constants.%A.as_type // CHECK:STDOUT: %pattern_type.loc32_45 => constants.%pattern_type.e90c +// CHECK:STDOUT: %a.param_patt.loc32_45.2 => constants.%a.param_patt.84e +// CHECK:STDOUT: %a.patt.loc32_45.2 => constants.%a.patt.3e6 // CHECK:STDOUT: %Food.as_type.loc32_56.1 => constants.%Food.as_type.24e // CHECK:STDOUT: %pattern_type.loc32_54 => constants.%pattern_type.ea8 +// CHECK:STDOUT: %food.param_patt.loc32_54.2 => constants.%food.param_patt.38d +// CHECK:STDOUT: %food.patt.loc32_54.2 => constants.%food.patt.09a8ec.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Eats(constants.%Food.as_type.24e) { +// CHECK:STDOUT: %Food.patt.loc21_20.2 => constants.%Food.patt.d47 // CHECK:STDOUT: %Food.loc21_20.1 => constants.%Food.as_type.24e // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @T.as_type.as.Eats.impl(constants.%A, constants.%Food.5f8) { +// CHECK:STDOUT: %T.patt.loc26_15.2 => constants.%T.patt.e44 // CHECK:STDOUT: %T.loc26_15.2 => constants.%A +// CHECK:STDOUT: %U.patt.loc26_27.2 => constants.%U.patt // CHECK:STDOUT: %U.loc26_27.2 => constants.%Food.5f8 // CHECK:STDOUT: %T.as_type.loc26_38.2 => constants.%A.as_type // CHECK:STDOUT: %U.as_type.loc26_49.2 => constants.%Food.as_type.24e @@ -550,14 +617,20 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Feed(constants.%Food.5f8, constants.%Eats.facet.f11) { +// CHECK:STDOUT: %Food.patt.loc31_13.2 => constants.%Food.patt.bbd // CHECK:STDOUT: %Food.loc31_13.1 => constants.%Food.5f8 // CHECK:STDOUT: %Food.as_type.loc31_37.1 => constants.%Food.as_type.24e // CHECK:STDOUT: %Eats.type.loc31_37.1 => constants.%Eats.type.ceea62.2 -// CHECK:STDOUT: %T.loc31_25.1 => constants.%Eats.facet.f11 // CHECK:STDOUT: %pattern_type.loc31_25 => constants.%pattern_type.efc +// CHECK:STDOUT: %T.patt.loc31_25.2 => constants.%T.patt.59c +// CHECK:STDOUT: %T.loc31_25.1 => constants.%Eats.facet.f11 // CHECK:STDOUT: %T.as_type.loc31_50.1 => constants.%A.as_type // CHECK:STDOUT: %pattern_type.loc31_48 => constants.%pattern_type.e90c +// CHECK:STDOUT: %e.param_patt.loc31_48.2 => constants.%e.param_patt.1c7 +// CHECK:STDOUT: %e.patt.loc31_48.2 => constants.%e.patt.637 // CHECK:STDOUT: %pattern_type.loc31_64 => constants.%pattern_type.ea8 +// CHECK:STDOUT: %food.param_patt.loc31_64.2 => constants.%food.param_patt.38d +// CHECK:STDOUT: %food.patt.loc31_64.2 => constants.%food.patt.09a8ec.2 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc31_48 => constants.%require_complete.db4 @@ -565,17 +638,23 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HandleAnimal(constants.%Animal.facet, constants.%Edible.facet) { +// CHECK:STDOUT: %A.patt.loc32_18.2 => constants.%A.patt // CHECK:STDOUT: %A.loc32_18.1 => constants.%Animal.facet +// CHECK:STDOUT: %Food.patt.loc32_33.2 => constants.%Food.patt.0d1 // CHECK:STDOUT: %Food.loc32_33.1 => constants.%Edible.facet // CHECK:STDOUT: %A.as_type.loc32_47.1 => constants.%Goat // CHECK:STDOUT: %pattern_type.loc32_45 => constants.%pattern_type.283 +// CHECK:STDOUT: %a.param_patt.loc32_45.2 => constants.%a.param_patt.8f5 +// CHECK:STDOUT: %a.patt.loc32_45.2 => constants.%a.patt.8aa // CHECK:STDOUT: %Food.as_type.loc32_56.1 => constants.%Grass // CHECK:STDOUT: %pattern_type.loc32_54 => constants.%pattern_type.92e +// CHECK:STDOUT: %food.param_patt.loc32_54.2 => constants.%food.param_patt.42e +// CHECK:STDOUT: %food.patt.loc32_54.2 => constants.%food.patt.b2a068.1 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc32_45 => constants.%complete_type.357 // CHECK:STDOUT: %require_complete.loc32_54 => constants.%complete_type.357 -// CHECK:STDOUT: %.loc32_76.3 => constants.%.86e +// CHECK:STDOUT: %.loc32_76.4 => constants.%.86e // CHECK:STDOUT: %Eats.type => constants.%Eats.type.682 // CHECK:STDOUT: %Eats.lookup_impl_witness => constants.%Eats.impl_witness.fd5 // CHECK:STDOUT: %Eats.facet.loc32_76.2 => constants.%Eats.facet.d00 @@ -583,7 +662,9 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @T.as_type.as.Eats.impl(constants.%Animal.facet, constants.%Edible.facet) { +// CHECK:STDOUT: %T.patt.loc26_15.2 => constants.%T.patt.e44 // CHECK:STDOUT: %T.loc26_15.2 => constants.%Animal.facet +// CHECK:STDOUT: %U.patt.loc26_27.2 => constants.%U.patt // CHECK:STDOUT: %U.loc26_27.2 => constants.%Edible.facet // CHECK:STDOUT: %T.as_type.loc26_38.2 => constants.%Goat // CHECK:STDOUT: %U.as_type.loc26_49.2 => constants.%Grass @@ -595,6 +676,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Eats(constants.%Grass) { +// CHECK:STDOUT: %Food.patt.loc21_20.2 => constants.%Food.patt.d47 // CHECK:STDOUT: %Food.loc21_20.1 => constants.%Grass // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -607,14 +689,20 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Feed(constants.%Edible.facet, constants.%Eats.facet.d00) { +// CHECK:STDOUT: %Food.patt.loc31_13.2 => constants.%Food.patt.bbd // CHECK:STDOUT: %Food.loc31_13.1 => constants.%Edible.facet // CHECK:STDOUT: %Food.as_type.loc31_37.1 => constants.%Grass // CHECK:STDOUT: %Eats.type.loc31_37.1 => constants.%Eats.type.682 -// CHECK:STDOUT: %T.loc31_25.1 => constants.%Eats.facet.d00 // CHECK:STDOUT: %pattern_type.loc31_25 => constants.%pattern_type.a69 +// CHECK:STDOUT: %T.patt.loc31_25.2 => constants.%T.patt.55e +// CHECK:STDOUT: %T.loc31_25.1 => constants.%Eats.facet.d00 // CHECK:STDOUT: %T.as_type.loc31_50.1 => constants.%Goat // CHECK:STDOUT: %pattern_type.loc31_48 => constants.%pattern_type.283 +// CHECK:STDOUT: %e.param_patt.loc31_48.2 => constants.%e.param_patt.b2f +// CHECK:STDOUT: %e.patt.loc31_48.2 => constants.%e.patt.ccf // CHECK:STDOUT: %pattern_type.loc31_64 => constants.%pattern_type.92e +// CHECK:STDOUT: %food.param_patt.loc31_64.2 => constants.%food.param_patt.42e +// CHECK:STDOUT: %food.patt.loc31_64.2 => constants.%food.patt.b2a068.2 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc31_48 => constants.%complete_type.357 diff --git a/toolchain/check/testdata/facet/convert_facet_value_value_to_itself.carbon b/toolchain/check/testdata/facet/convert_facet_value_value_to_itself.carbon index 1a7de9c114ec..4d9a773c7ee8 100644 --- a/toolchain/check/testdata/facet/convert_facet_value_value_to_itself.carbon +++ b/toolchain/check/testdata/facet/convert_facet_value_value_to_itself.carbon @@ -33,13 +33,17 @@ fn F() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.333: type = pattern_type %Animal.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.333 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: %Animal.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] // CHECK:STDOUT: %pattern_type.e90: type = pattern_type %T.as_type [symbolic] +// CHECK:STDOUT: %a.param_patt.84e: %pattern_type.e90 = value_param_pattern [symbolic] +// CHECK:STDOUT: %a.patt.3e60af.1: %pattern_type.e90 = at_binding_pattern a, %a.param_patt.84e [symbolic] // CHECK:STDOUT: %FeedAnimal.type: type = fn_type @FeedAnimal [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %FeedAnimal: %FeedAnimal.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type [symbolic] +// CHECK:STDOUT: %a.patt.3e60af.2: %pattern_type.e90 = at_binding_pattern a, %a.param_patt.84e [symbolic] // CHECK:STDOUT: %HandleAnimal.type: type = fn_type @HandleAnimal [concrete] // CHECK:STDOUT: %HandleAnimal: %HandleAnimal.type = struct_value () [concrete] // CHECK:STDOUT: %FeedAnimal.specific_fn.5bd: = specific_function %FeedAnimal, @FeedAnimal(%T) [symbolic] @@ -53,12 +57,15 @@ fn F() { // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %Goat.val: %Goat = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.283: type = pattern_type %Goat [concrete] +// CHECK:STDOUT: %a.param_patt.8f5: %pattern_type.283 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt.8aa5e9.1: %pattern_type.283 = at_binding_pattern a, %a.param_patt.8f5 [concrete] // CHECK:STDOUT: %HandleAnimal.specific_fn: = specific_function %HandleAnimal, @HandleAnimal(%Animal.facet) [concrete] // CHECK:STDOUT: %.4ea: ref %Goat = temporary invalid, %Goat.val [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.2: type = fn_type @Destroy.Op.loc25_19.2 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.2: %Destroy.Op.type.1d8f74.2 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.Op.bound: = bound_method %.4ea, %Destroy.Op.1a2547.2 [concrete] +// CHECK:STDOUT: %a.patt.8aa5e9.2: %pattern_type.283 = at_binding_pattern a, %a.param_patt.8f5 [concrete] // CHECK:STDOUT: %FeedAnimal.specific_fn.42c: = specific_function %FeedAnimal, @FeedAnimal(%Animal.facet) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -83,9 +90,9 @@ fn F() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Animal.decl: type = interface_decl @Animal [concrete = constants.%Animal.type] {} {} // CHECK:STDOUT: %FeedAnimal.decl: %FeedAnimal.type = fn_decl @FeedAnimal [concrete = constants.%FeedAnimal] { -// CHECK:STDOUT: %T.patt: %pattern_type.333 = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %a.param_patt: @FeedAnimal.%pattern_type (%pattern_type.e90) = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: @FeedAnimal.%pattern_type (%pattern_type.e90) = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %T.patt.loc17_16.1: %pattern_type.333 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc17_16.2 (constants.%T.patt)] +// CHECK:STDOUT: %a.param_patt.loc17_35.1: @FeedAnimal.%pattern_type (%pattern_type.e90) = value_param_pattern [symbolic = %a.param_patt.loc17_35.2 (constants.%a.param_patt.84e)] +// CHECK:STDOUT: %a.patt.loc17_35.1: @FeedAnimal.%pattern_type (%pattern_type.e90) = at_binding_pattern a, %a.param_patt.loc17_35.1 [symbolic = %a.patt.loc17_35.2 (constants.%a.patt.3e60af.1)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc17_19: type = splice_block %Animal.ref [concrete = constants.%Animal.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -101,9 +108,9 @@ fn F() { // CHECK:STDOUT: %a: @FeedAnimal.%T.as_type.loc17_37.1 (%T.as_type) = value_binding a, %a.param // CHECK:STDOUT: } // CHECK:STDOUT: %HandleAnimal.decl: %HandleAnimal.type = fn_decl @HandleAnimal [concrete = constants.%HandleAnimal] { -// CHECK:STDOUT: %T.patt: %pattern_type.333 = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %a.param_patt: @HandleAnimal.%pattern_type (%pattern_type.e90) = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: @HandleAnimal.%pattern_type (%pattern_type.e90) = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %T.patt.loc19_18.1: %pattern_type.333 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc19_18.2 (constants.%T.patt)] +// CHECK:STDOUT: %a.param_patt.loc19_30.1: @HandleAnimal.%pattern_type (%pattern_type.e90) = value_param_pattern [symbolic = %a.param_patt.loc19_30.2 (constants.%a.param_patt.84e)] +// CHECK:STDOUT: %a.patt.loc19_30.1: @HandleAnimal.%pattern_type (%pattern_type.e90) = at_binding_pattern a, %a.param_patt.loc19_30.1 [symbolic = %a.patt.loc19_30.2 (constants.%a.patt.3e60af.2)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc19_21: type = splice_block %Animal.ref [concrete = constants.%Animal.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -155,9 +162,12 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @FeedAnimal(%T.loc17_16.2: %Animal.type) { +// CHECK:STDOUT: %T.patt.loc17_16.2: %pattern_type.333 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc17_16.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc17_16.1: %Animal.type = symbolic_binding T, 0 [symbolic = %T.loc17_16.1 (constants.%T)] // CHECK:STDOUT: %T.as_type.loc17_37.1: type = facet_access_type %T.loc17_16.1 [symbolic = %T.as_type.loc17_37.1 (constants.%T.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc17_37.1 [symbolic = %pattern_type (constants.%pattern_type.e90)] +// CHECK:STDOUT: %a.param_patt.loc17_35.2: @FeedAnimal.%pattern_type (%pattern_type.e90) = value_param_pattern [symbolic = %a.param_patt.loc17_35.2 (constants.%a.param_patt.84e)] +// CHECK:STDOUT: %a.patt.loc17_35.2: @FeedAnimal.%pattern_type (%pattern_type.e90) = at_binding_pattern a, %a.param_patt.loc17_35.2 [symbolic = %a.patt.loc17_35.2 (constants.%a.patt.3e60af.1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc17_37.1 [symbolic = %require_complete (constants.%require_complete)] @@ -169,9 +179,12 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @HandleAnimal(%T.loc19_18.2: %Animal.type) { +// CHECK:STDOUT: %T.patt.loc19_18.2: %pattern_type.333 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc19_18.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc19_18.1: %Animal.type = symbolic_binding T, 0 [symbolic = %T.loc19_18.1 (constants.%T)] // CHECK:STDOUT: %T.as_type.loc19_32.1: type = facet_access_type %T.loc19_18.1 [symbolic = %T.as_type.loc19_32.1 (constants.%T.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc19_32.1 [symbolic = %pattern_type (constants.%pattern_type.e90)] +// CHECK:STDOUT: %a.param_patt.loc19_30.2: @HandleAnimal.%pattern_type (%pattern_type.e90) = value_param_pattern [symbolic = %a.param_patt.loc19_30.2 (constants.%a.param_patt.84e)] +// CHECK:STDOUT: %a.patt.loc19_30.2: @HandleAnimal.%pattern_type (%pattern_type.e90) = at_binding_pattern a, %a.param_patt.loc19_30.2 [symbolic = %a.patt.loc19_30.2 (constants.%a.patt.3e60af.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc19_32.1 [symbolic = %require_complete (constants.%require_complete)] @@ -181,7 +194,8 @@ fn F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %FeedAnimal.ref: %FeedAnimal.type = name_ref FeedAnimal, file.%FeedAnimal.decl [concrete = constants.%FeedAnimal] // CHECK:STDOUT: %a.ref: @HandleAnimal.%T.as_type.loc19_32.1 (%T.as_type) = name_ref a, %a -// CHECK:STDOUT: %.loc19_49: %Animal.type = converted constants.%T.as_type, constants.%T [symbolic = %T.loc19_18.1 (constants.%T)] +// CHECK:STDOUT: %.loc19_49.1: %Animal.type = converted constants.%T.as_type, constants.%T [symbolic = %T.loc19_18.1 (constants.%T)] +// CHECK:STDOUT: %.loc19_49.2: %Animal.type = converted constants.%T.as_type, constants.%T [symbolic = %T.loc19_18.1 (constants.%T)] // CHECK:STDOUT: %FeedAnimal.specific_fn.loc19_37.1: = specific_function %FeedAnimal.ref, @FeedAnimal(constants.%T) [symbolic = %FeedAnimal.specific_fn.loc19_37.2 (constants.%FeedAnimal.specific_fn.5bd)] // CHECK:STDOUT: %FeedAnimal.call: init %empty_tuple.type = call %FeedAnimal.specific_fn.loc19_37.1(%a.ref) // CHECK:STDOUT: return @@ -196,8 +210,10 @@ fn F() { // CHECK:STDOUT: %.loc25_17.2: ref %Goat = temporary_storage // CHECK:STDOUT: %.loc25_17.3: init %Goat to %.loc25_17.2 = class_init () [concrete = constants.%Goat.val] // CHECK:STDOUT: %.loc25_19.1: init %Goat = converted %.loc25_17.1, %.loc25_17.3 [concrete = constants.%Goat.val] -// CHECK:STDOUT: %Animal.facet: %Animal.type = facet_value constants.%Goat, (constants.%Animal.impl_witness) [concrete = constants.%Animal.facet] -// CHECK:STDOUT: %.loc25_26: %Animal.type = converted constants.%Goat, %Animal.facet [concrete = constants.%Animal.facet] +// CHECK:STDOUT: %Animal.facet.loc25_26.1: %Animal.type = facet_value constants.%Goat, (constants.%Animal.impl_witness) [concrete = constants.%Animal.facet] +// CHECK:STDOUT: %.loc25_26.1: %Animal.type = converted constants.%Goat, %Animal.facet.loc25_26.1 [concrete = constants.%Animal.facet] +// CHECK:STDOUT: %Animal.facet.loc25_26.2: %Animal.type = facet_value constants.%Goat, (constants.%Animal.impl_witness) [concrete = constants.%Animal.facet] +// CHECK:STDOUT: %.loc25_26.2: %Animal.type = converted constants.%Goat, %Animal.facet.loc25_26.2 [concrete = constants.%Animal.facet] // CHECK:STDOUT: %HandleAnimal.specific_fn: = specific_function %HandleAnimal.ref, @HandleAnimal(constants.%Animal.facet) [concrete = constants.%HandleAnimal.specific_fn] // CHECK:STDOUT: %.loc25_19.2: ref %Goat = temporary %.loc25_17.2, %.loc25_19.1 [concrete = constants.%.4ea] // CHECK:STDOUT: %.loc25_19.3: %Goat = acquire_value %.loc25_19.2 [concrete = constants.%Goat.val] @@ -218,18 +234,24 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @FeedAnimal(constants.%T) { +// CHECK:STDOUT: %T.patt.loc17_16.2 => constants.%T.patt // CHECK:STDOUT: %T.loc17_16.1 => constants.%T // CHECK:STDOUT: %T.as_type.loc17_37.1 => constants.%T.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.e90 +// CHECK:STDOUT: %a.param_patt.loc17_35.2 => constants.%a.param_patt.84e +// CHECK:STDOUT: %a.patt.loc17_35.2 => constants.%a.patt.3e60af.1 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HandleAnimal(constants.%T) { +// CHECK:STDOUT: %T.patt.loc19_18.2 => constants.%T.patt // CHECK:STDOUT: %T.loc19_18.1 => constants.%T // CHECK:STDOUT: %T.as_type.loc19_32.1 => constants.%T.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.e90 +// CHECK:STDOUT: %a.param_patt.loc19_30.2 => constants.%a.param_patt.84e +// CHECK:STDOUT: %a.patt.loc19_30.2 => constants.%a.patt.3e60af.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Animal.WithSelf(constants.%Animal.facet) { @@ -237,9 +259,12 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HandleAnimal(constants.%Animal.facet) { +// CHECK:STDOUT: %T.patt.loc19_18.2 => constants.%T.patt // CHECK:STDOUT: %T.loc19_18.1 => constants.%Animal.facet // CHECK:STDOUT: %T.as_type.loc19_32.1 => constants.%Goat // CHECK:STDOUT: %pattern_type => constants.%pattern_type.283 +// CHECK:STDOUT: %a.param_patt.loc19_30.2 => constants.%a.param_patt.8f5 +// CHECK:STDOUT: %a.patt.loc19_30.2 => constants.%a.patt.8aa5e9.1 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type @@ -247,9 +272,12 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @FeedAnimal(constants.%Animal.facet) { +// CHECK:STDOUT: %T.patt.loc17_16.2 => constants.%T.patt // CHECK:STDOUT: %T.loc17_16.1 => constants.%Animal.facet // CHECK:STDOUT: %T.as_type.loc17_37.1 => constants.%Goat // CHECK:STDOUT: %pattern_type => constants.%pattern_type.283 +// CHECK:STDOUT: %a.param_patt.loc17_35.2 => constants.%a.param_patt.8f5 +// CHECK:STDOUT: %a.patt.loc17_35.2 => constants.%a.patt.8aa5e9.2 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type diff --git a/toolchain/check/testdata/facet/convert_interface.carbon b/toolchain/check/testdata/facet/convert_interface.carbon index c60ec920a57d..7b3034b75478 100644 --- a/toolchain/check/testdata/facet/convert_interface.carbon +++ b/toolchain/check/testdata/facet/convert_interface.carbon @@ -32,6 +32,8 @@ fn G() { F(Animal); } // CHECK:STDOUT: %Eats.impl_witness: = impl_witness @Animal.type.as.Eats.impl.%Eats.impl_witness_table [concrete] // CHECK:STDOUT: %Eats.facet: %Eats.type = facet_value %Animal.type, (%Eats.impl_witness) [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %Eats.type [concrete] +// CHECK:STDOUT: %e.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type = at_binding_pattern e, %e.param_patt [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] @@ -62,8 +64,8 @@ fn G() { F(Animal); } // CHECK:STDOUT: %Eats.ref: type = name_ref Eats, file.%Eats.decl [concrete = constants.%Eats.type] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %e.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %e.patt: %pattern_type = at_binding_pattern e, %e.param_patt [concrete] +// CHECK:STDOUT: %e.param_patt: %pattern_type = value_param_pattern [concrete = constants.%e.param_patt] +// CHECK:STDOUT: %e.patt: %pattern_type = at_binding_pattern e, %e.param_patt [concrete = constants.%e.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %e.param: %Eats.type = value_param call_param0 // CHECK:STDOUT: %Eats.ref: type = name_ref Eats, file.%Eats.decl [concrete = constants.%Eats.type] diff --git a/toolchain/check/testdata/facet/facet_assoc_const.carbon b/toolchain/check/testdata/facet/facet_assoc_const.carbon index 61f7da7d5591..3e4a2fa23208 100644 --- a/toolchain/check/testdata/facet/facet_assoc_const.carbon +++ b/toolchain/check/testdata/facet/facet_assoc_const.carbon @@ -663,7 +663,7 @@ fn F(unused T:! I & J where .I1 = .J1.I2) {} // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt: = symbolic_binding_pattern T, 0 [concrete = ] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc13_19.1: type = splice_block %.loc13_19.2 [concrete = ] { // CHECK:STDOUT: %.Self.loc13_14: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.c39] diff --git a/toolchain/check/testdata/facet/fail_convert_class_type_to_generic_facet_value.carbon b/toolchain/check/testdata/facet/fail_convert_class_type_to_generic_facet_value.carbon index 1c9d74080e4a..a98d664116bb 100644 --- a/toolchain/check/testdata/facet/fail_convert_class_type_to_generic_facet_value.carbon +++ b/toolchain/check/testdata/facet/fail_convert_class_type_to_generic_facet_value.carbon @@ -43,6 +43,7 @@ fn G() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Scalar.patt: %pattern_type.98f = symbolic_binding_pattern Scalar, 0 [symbolic] // CHECK:STDOUT: %Scalar: type = symbolic_binding Scalar, 0 [symbolic] // CHECK:STDOUT: %Generic.type.30d: type = generic_interface_type @Generic [concrete] // CHECK:STDOUT: %Generic.generic: %Generic.type.30d = struct_value () [concrete] @@ -69,9 +70,11 @@ fn G() { // CHECK:STDOUT: %Generic.facet: %Generic.type.b40 = facet_value %ImplsGeneric, (%Generic.impl_witness) [concrete] // CHECK:STDOUT: %Generic.WithSelf.F.type.c45: type = fn_type @Generic.WithSelf.F, @Generic.WithSelf(%GenericParam, %Generic.facet) [concrete] // CHECK:STDOUT: %Generic.WithSelf.F.d7c: %Generic.WithSelf.F.type.c45 = struct_value () [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Generic.type.ee14e9.2: type = facet_type <@Generic, @Generic(%T)> [symbolic] // CHECK:STDOUT: %pattern_type.4e0: type = pattern_type %Generic.type.ee14e9.2 [symbolic] +// CHECK:STDOUT: %U.patt: %pattern_type.4e0 = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %U: %Generic.type.ee14e9.2 = symbolic_binding U, 1 [symbolic] // CHECK:STDOUT: %CallGenericMethod.type: type = fn_type @CallGenericMethod [concrete] // CHECK:STDOUT: %CallGenericMethod: %CallGenericMethod.type = struct_value () [concrete] @@ -98,7 +101,7 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Generic.decl: %Generic.type.30d = interface_decl @Generic [concrete = constants.%Generic.generic] { -// CHECK:STDOUT: %Scalar.patt: %pattern_type.98f = symbolic_binding_pattern Scalar, 0 [concrete] +// CHECK:STDOUT: %Scalar.patt.loc15_25.1: %pattern_type.98f = symbolic_binding_pattern Scalar, 0 [symbolic = %Scalar.patt.loc15_25.2 (constants.%Scalar.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc15_28.1: type = splice_block %.loc15_28.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -116,8 +119,8 @@ fn G() { // CHECK:STDOUT: %Generic.type: type = facet_type <@Generic, @Generic(constants.%GenericParam)> [concrete = constants.%Generic.type.b40] // CHECK:STDOUT: } // CHECK:STDOUT: %CallGenericMethod.decl: %CallGenericMethod.type = fn_decl @CallGenericMethod [concrete = constants.%CallGenericMethod] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %U.patt: @CallGenericMethod.%pattern_type (%pattern_type.4e0) = symbolic_binding_pattern U, 1 [concrete] +// CHECK:STDOUT: %T.patt.loc27_23.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc27_23.2 (constants.%T.patt)] +// CHECK:STDOUT: %U.patt.loc27_40.1: @CallGenericMethod.%pattern_type (%pattern_type.4e0) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc27_40.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc27_26.1: type = splice_block %.loc27_26.2 [concrete = type] { // CHECK:STDOUT: %.Self.loc27_23: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -136,6 +139,7 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Generic(%Scalar.loc15_25.2: type) { +// CHECK:STDOUT: %Scalar.patt.loc15_25.2: %pattern_type.98f = symbolic_binding_pattern Scalar, 0 [symbolic = %Scalar.patt.loc15_25.2 (constants.%Scalar.patt)] // CHECK:STDOUT: %Scalar.loc15_25.1: type = symbolic_binding Scalar, 0 [symbolic = %Scalar.loc15_25.1 (constants.%Scalar)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -204,10 +208,12 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @CallGenericMethod(%T.loc27_23.2: type, %U.loc27_40.2: @CallGenericMethod.%Generic.type.loc27_52.1 (%Generic.type.ee14e9.2)) { +// CHECK:STDOUT: %T.patt.loc27_23.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc27_23.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc27_23.1: type = symbolic_binding T, 0 [symbolic = %T.loc27_23.1 (constants.%T)] // CHECK:STDOUT: %Generic.type.loc27_52.1: type = facet_type <@Generic, @Generic(%T.loc27_23.1)> [symbolic = %Generic.type.loc27_52.1 (constants.%Generic.type.ee14e9.2)] -// CHECK:STDOUT: %U.loc27_40.1: @CallGenericMethod.%Generic.type.loc27_52.1 (%Generic.type.ee14e9.2) = symbolic_binding U, 1 [symbolic = %U.loc27_40.1 (constants.%U)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Generic.type.loc27_52.1 [symbolic = %pattern_type (constants.%pattern_type.4e0)] +// CHECK:STDOUT: %U.patt.loc27_40.2: @CallGenericMethod.%pattern_type (%pattern_type.4e0) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc27_40.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.loc27_40.1: @CallGenericMethod.%Generic.type.loc27_52.1 (%Generic.type.ee14e9.2) = symbolic_binding U, 1 [symbolic = %U.loc27_40.1 (constants.%U)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -226,6 +232,7 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Generic(constants.%Scalar) { +// CHECK:STDOUT: %Scalar.patt.loc15_25.2 => constants.%Scalar.patt // CHECK:STDOUT: %Scalar.loc15_25.1 => constants.%Scalar // CHECK:STDOUT: } // CHECK:STDOUT: @@ -234,6 +241,7 @@ fn G() { // CHECK:STDOUT: specific @Generic.WithSelf.F(constants.%Scalar, constants.%Self.8ea) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @Generic(constants.%GenericParam) { +// CHECK:STDOUT: %Scalar.patt.loc15_25.2 => constants.%Scalar.patt // CHECK:STDOUT: %Scalar.loc15_25.1 => constants.%GenericParam // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -266,17 +274,21 @@ fn G() { // CHECK:STDOUT: specific @Generic.WithSelf.F(constants.%GenericParam, constants.%Generic.facet) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @Generic(constants.%T) { +// CHECK:STDOUT: %Scalar.patt.loc15_25.2 => constants.%Scalar.patt // CHECK:STDOUT: %Scalar.loc15_25.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @CallGenericMethod(constants.%T, constants.%U) { +// CHECK:STDOUT: %T.patt.loc27_23.2 => constants.%T.patt // CHECK:STDOUT: %T.loc27_23.1 => constants.%T // CHECK:STDOUT: %Generic.type.loc27_52.1 => constants.%Generic.type.ee14e9.2 -// CHECK:STDOUT: %U.loc27_40.1 => constants.%U // CHECK:STDOUT: %pattern_type => constants.%pattern_type.4e0 +// CHECK:STDOUT: %U.patt.loc27_40.2 => constants.%U.patt +// CHECK:STDOUT: %U.loc27_40.1 => constants.%U // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Generic(constants.%WrongGenericParam) { +// CHECK:STDOUT: %Scalar.patt.loc15_25.2 => constants.%Scalar.patt // CHECK:STDOUT: %Scalar.loc15_25.1 => constants.%WrongGenericParam // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/facet/fail_convert_facet_value_to_missing_impl.carbon b/toolchain/check/testdata/facet/fail_convert_facet_value_to_missing_impl.carbon index 8f50669e9f29..81927cdf534d 100644 --- a/toolchain/check/testdata/facet/fail_convert_facet_value_to_missing_impl.carbon +++ b/toolchain/check/testdata/facet/fail_convert_facet_value_to_missing_impl.carbon @@ -36,16 +36,22 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.880: type = pattern_type %Eats.type [concrete] +// CHECK:STDOUT: %T.patt.9e8: %pattern_type.880 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.672: %Eats.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.422: type = facet_access_type %T.672 [symbolic] // CHECK:STDOUT: %pattern_type.aed: type = pattern_type %T.as_type.422 [symbolic] +// CHECK:STDOUT: %e.param_patt: %pattern_type.aed = value_param_pattern [symbolic] +// CHECK:STDOUT: %e.patt: %pattern_type.aed = at_binding_pattern e, %e.param_patt [symbolic] // CHECK:STDOUT: %Feed.type: type = fn_type @Feed [concrete] // CHECK:STDOUT: %Feed: %Feed.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.c4d: = require_complete_type %T.as_type.422 [symbolic] // CHECK:STDOUT: %pattern_type.333: type = pattern_type %Animal.type [concrete] +// CHECK:STDOUT: %T.patt.e44: %pattern_type.333 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.443: %Animal.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.01d: type = facet_access_type %T.443 [symbolic] // CHECK:STDOUT: %pattern_type.e90: type = pattern_type %T.as_type.01d [symbolic] +// CHECK:STDOUT: %a.param_patt: %pattern_type.e90 = value_param_pattern [symbolic] +// CHECK:STDOUT: %a.patt: %pattern_type.e90 = at_binding_pattern a, %a.param_patt [symbolic] // CHECK:STDOUT: %HandleAnimal.type: type = fn_type @HandleAnimal [concrete] // CHECK:STDOUT: %HandleAnimal: %HandleAnimal.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.db4: = require_complete_type %T.as_type.01d [symbolic] @@ -70,9 +76,9 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: %Eats.decl: type = interface_decl @Eats [concrete = constants.%Eats.type] {} {} // CHECK:STDOUT: %Animal.decl: type = interface_decl @Animal [concrete = constants.%Animal.type] {} {} // CHECK:STDOUT: %Feed.decl: %Feed.type = fn_decl @Feed [concrete = constants.%Feed] { -// CHECK:STDOUT: %T.patt: %pattern_type.880 = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %e.param_patt: @Feed.%pattern_type (%pattern_type.aed) = value_param_pattern [concrete] -// CHECK:STDOUT: %e.patt: @Feed.%pattern_type (%pattern_type.aed) = at_binding_pattern e, %e.param_patt [concrete] +// CHECK:STDOUT: %T.patt.loc18_10.1: %pattern_type.880 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc18_10.2 (constants.%T.patt.9e8)] +// CHECK:STDOUT: %e.param_patt.loc18_27.1: @Feed.%pattern_type (%pattern_type.aed) = value_param_pattern [symbolic = %e.param_patt.loc18_27.2 (constants.%e.param_patt)] +// CHECK:STDOUT: %e.patt.loc18_27.1: @Feed.%pattern_type (%pattern_type.aed) = at_binding_pattern e, %e.param_patt.loc18_27.1 [symbolic = %e.patt.loc18_27.2 (constants.%e.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc18_13: type = splice_block %Eats.ref [concrete = constants.%Eats.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -88,9 +94,9 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: %e: @Feed.%T.as_type.loc18_29.1 (%T.as_type.422) = value_binding e, %e.param // CHECK:STDOUT: } // CHECK:STDOUT: %HandleAnimal.decl: %HandleAnimal.type = fn_decl @HandleAnimal [concrete = constants.%HandleAnimal] { -// CHECK:STDOUT: %T.patt: %pattern_type.333 = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %a.param_patt: @HandleAnimal.%pattern_type (%pattern_type.e90) = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: @HandleAnimal.%pattern_type (%pattern_type.e90) = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %T.patt.loc27_18.1: %pattern_type.333 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc27_18.2 (constants.%T.patt.e44)] +// CHECK:STDOUT: %a.param_patt.loc27_30.1: @HandleAnimal.%pattern_type (%pattern_type.e90) = value_param_pattern [symbolic = %a.param_patt.loc27_30.2 (constants.%a.param_patt)] +// CHECK:STDOUT: %a.patt.loc27_30.1: @HandleAnimal.%pattern_type (%pattern_type.e90) = at_binding_pattern a, %a.param_patt.loc27_30.1 [symbolic = %a.patt.loc27_30.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc27_21: type = splice_block %Animal.ref [concrete = constants.%Animal.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -130,9 +136,12 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Feed(%T.loc18_10.2: %Eats.type) { +// CHECK:STDOUT: %T.patt.loc18_10.2: %pattern_type.880 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc18_10.2 (constants.%T.patt.9e8)] // CHECK:STDOUT: %T.loc18_10.1: %Eats.type = symbolic_binding T, 0 [symbolic = %T.loc18_10.1 (constants.%T.672)] // CHECK:STDOUT: %T.as_type.loc18_29.1: type = facet_access_type %T.loc18_10.1 [symbolic = %T.as_type.loc18_29.1 (constants.%T.as_type.422)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc18_29.1 [symbolic = %pattern_type (constants.%pattern_type.aed)] +// CHECK:STDOUT: %e.param_patt.loc18_27.2: @Feed.%pattern_type (%pattern_type.aed) = value_param_pattern [symbolic = %e.param_patt.loc18_27.2 (constants.%e.param_patt)] +// CHECK:STDOUT: %e.patt.loc18_27.2: @Feed.%pattern_type (%pattern_type.aed) = at_binding_pattern e, %e.param_patt.loc18_27.2 [symbolic = %e.patt.loc18_27.2 (constants.%e.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc18_29.1 [symbolic = %require_complete (constants.%require_complete.c4d)] @@ -144,9 +153,12 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @HandleAnimal(%T.loc27_18.2: %Animal.type) { +// CHECK:STDOUT: %T.patt.loc27_18.2: %pattern_type.333 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc27_18.2 (constants.%T.patt.e44)] // CHECK:STDOUT: %T.loc27_18.1: %Animal.type = symbolic_binding T, 0 [symbolic = %T.loc27_18.1 (constants.%T.443)] // CHECK:STDOUT: %T.as_type.loc27_32.1: type = facet_access_type %T.loc27_18.1 [symbolic = %T.as_type.loc27_32.1 (constants.%T.as_type.01d)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc27_32.1 [symbolic = %pattern_type (constants.%pattern_type.e90)] +// CHECK:STDOUT: %a.param_patt.loc27_30.2: @HandleAnimal.%pattern_type (%pattern_type.e90) = value_param_pattern [symbolic = %a.param_patt.loc27_30.2 (constants.%a.param_patt)] +// CHECK:STDOUT: %a.patt.loc27_30.2: @HandleAnimal.%pattern_type (%pattern_type.e90) = at_binding_pattern a, %a.param_patt.loc27_30.2 [symbolic = %a.patt.loc27_30.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc27_32.1 [symbolic = %require_complete (constants.%require_complete.db4)] @@ -168,14 +180,20 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Feed(constants.%T.672) { +// CHECK:STDOUT: %T.patt.loc18_10.2 => constants.%T.patt.9e8 // CHECK:STDOUT: %T.loc18_10.1 => constants.%T.672 // CHECK:STDOUT: %T.as_type.loc18_29.1 => constants.%T.as_type.422 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.aed +// CHECK:STDOUT: %e.param_patt.loc18_27.2 => constants.%e.param_patt +// CHECK:STDOUT: %e.patt.loc18_27.2 => constants.%e.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HandleAnimal(constants.%T.443) { +// CHECK:STDOUT: %T.patt.loc27_18.2 => constants.%T.patt.e44 // CHECK:STDOUT: %T.loc27_18.1 => constants.%T.443 // CHECK:STDOUT: %T.as_type.loc27_32.1 => constants.%T.as_type.01d // CHECK:STDOUT: %pattern_type => constants.%pattern_type.e90 +// CHECK:STDOUT: %a.param_patt.loc27_30.2 => constants.%a.param_patt +// CHECK:STDOUT: %a.patt.loc27_30.2 => constants.%a.patt // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/facet/fail_convert_type_erased_type_to_facet.carbon b/toolchain/check/testdata/facet/fail_convert_type_erased_type_to_facet.carbon index 8c94ba0b73ee..2f6854d88dcf 100644 --- a/toolchain/check/testdata/facet/fail_convert_type_erased_type_to_facet.carbon +++ b/toolchain/check/testdata/facet/fail_convert_type_erased_type_to_facet.carbon @@ -38,6 +38,8 @@ fn F() { // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %Animal.impl_witness: = impl_witness .inst{{[0-9A-F]+}}.loc18_21 [concrete] // CHECK:STDOUT: %Animal.facet: %Animal.type = facet_value %Goat, (%Animal.impl_witness) [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Animal.type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %a: %Animal.type = symbolic_binding a, 0 [symbolic] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -70,6 +72,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @WalkAnimal(.inst{{[0-9A-F]+}}.loc20_23: %Animal.type) { +// CHECK:STDOUT: %a.patt.loc20_23.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc20_23.2 (constants.%a.patt)] // CHECK:STDOUT: %a: %Animal.type = symbolic_binding a, 0 [symbolic = %a (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -91,6 +94,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @WalkAnimal(constants.%a) { +// CHECK:STDOUT: %a.patt.loc20_23.2 => constants.%a.patt // CHECK:STDOUT: %a => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/facet/fail_deduction_uses_runtime_type_conversion.carbon b/toolchain/check/testdata/facet/fail_deduction_uses_runtime_type_conversion.carbon index 7615d126d67d..0904e717dee9 100644 --- a/toolchain/check/testdata/facet/fail_deduction_uses_runtime_type_conversion.carbon +++ b/toolchain/check/testdata/facet/fail_deduction_uses_runtime_type_conversion.carbon @@ -49,6 +49,7 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, )), from:! RuntimeConvertFrom) { // CHECK:STDOUT: %tuple.type: type = tuple_type (type) [concrete] // CHECK:STDOUT: %tuple.0d2: %tuple.type = tuple_value (type) [concrete] // CHECK:STDOUT: %pattern_type.f1e: type = pattern_type %tuple.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.f1e = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: %tuple.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %HoldsType.type: type = generic_class_type @HoldsType [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -63,8 +64,12 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, )), from:! RuntimeConvertFrom) { // CHECK:STDOUT: %ImplicitAs.type.286: type = facet_type <@ImplicitAs, @ImplicitAs(%RuntimeConvertTo)> [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness: = impl_witness @RuntimeConvertFrom.as.ImplicitAs.impl.%ImplicitAs.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.598: type = pattern_type %RuntimeConvertFrom [concrete] +// CHECK:STDOUT: %self.param_patt.c41: %pattern_type.598 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.65f: %pattern_type.598 = at_binding_pattern self, %self.param_patt.c41 [concrete] // CHECK:STDOUT: %.aac: Core.Form = init_form %RuntimeConvertTo [concrete] // CHECK:STDOUT: %pattern_type.c10: type = pattern_type %RuntimeConvertTo [concrete] +// CHECK:STDOUT: %return.param_patt.183: %pattern_type.c10 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.b01: %pattern_type.c10 = return_slot_pattern %return.param_patt.183, %RuntimeConvertTo [concrete] // CHECK:STDOUT: %RuntimeConvertFrom.as.ImplicitAs.impl.Convert.type: type = fn_type @RuntimeConvertFrom.as.ImplicitAs.impl.Convert [concrete] // CHECK:STDOUT: %RuntimeConvertFrom.as.ImplicitAs.impl.Convert: %RuntimeConvertFrom.as.ImplicitAs.impl.Convert.type = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.286 = facet_value %RuntimeConvertFrom, (%ImplicitAs.impl_witness) [concrete] @@ -74,19 +79,28 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, )), from:! RuntimeConvertFrom) { // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %tuple.elem0: type = tuple_access %T, element0 [symbolic] // CHECK:STDOUT: %pattern_type.e66: type = pattern_type %tuple.elem0 [symbolic] +// CHECK:STDOUT: %A.patt.aee: %pattern_type.e66 = symbolic_binding_pattern A, 1 [symbolic] // CHECK:STDOUT: %A: %tuple.elem0 = symbolic_binding A, 1 [symbolic] // CHECK:STDOUT: %pattern_type.b2f: type = pattern_type %HoldsType.a83 [symbolic] +// CHECK:STDOUT: %x.param_patt.321: %pattern_type.b2f = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.a80: %pattern_type.b2f = at_binding_pattern x, %x.param_patt.321 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %HoldsType.a83 [symbolic] // CHECK:STDOUT: %tuple.162: %tuple.type = tuple_value (%RuntimeConvertTo) [concrete] // CHECK:STDOUT: %HoldsType.9f2: type = class_type @HoldsType, @HoldsType(%tuple.162) [concrete] // CHECK:STDOUT: %pattern_type.905: type = pattern_type %HoldsType.9f2 [concrete] +// CHECK:STDOUT: %holds_to.param_patt: %pattern_type.905 = value_param_pattern [concrete] +// CHECK:STDOUT: %holds_to.patt: %pattern_type.905 = at_binding_pattern holds_to, %holds_to.param_patt [concrete] +// CHECK:STDOUT: %from.patt: %pattern_type.598 = symbolic_binding_pattern from, 0 [symbolic] // CHECK:STDOUT: %from: %RuntimeConvertFrom = symbolic_binding from, 0 [symbolic] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %.820: type = fn_type_with_self_type %ImplicitAs.WithSelf.Convert.type.f8a, %ImplicitAs.facet [concrete] // CHECK:STDOUT: %RuntimeConvertFrom.as.ImplicitAs.impl.Convert.bound: = bound_method %from, %RuntimeConvertFrom.as.ImplicitAs.impl.Convert [symbolic] +// CHECK:STDOUT: %A.patt.797: %pattern_type.c10 = symbolic_binding_pattern A, 1 [symbolic] +// CHECK:STDOUT: %x.param_patt.fbd: %pattern_type.905 = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.32c: %pattern_type.905 = at_binding_pattern x, %x.param_patt.fbd [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.2: type = fn_type @Destroy.Op.loc40_19.2 [concrete] @@ -115,7 +129,7 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, )), from:! RuntimeConvertFrom) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %HoldsType.decl: %HoldsType.type = class_decl @HoldsType [concrete = constants.%HoldsType.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.f1e = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc17_18.1: %pattern_type.f1e = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc17_18.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc17_28.1: type = splice_block %.loc17_28.3 [concrete = constants.%tuple.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -135,10 +149,10 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, )), from:! RuntimeConvertFrom) { // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(constants.%RuntimeConvertTo)> [concrete = constants.%ImplicitAs.type.286] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type.f1e = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %A.patt: @F.%pattern_type.loc27_28 (%pattern_type.e66) = symbolic_binding_pattern A, 1 [concrete] -// CHECK:STDOUT: %x.param_patt: @F.%pattern_type.loc27_44 (%pattern_type.b2f) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @F.%pattern_type.loc27_44 (%pattern_type.b2f) = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %T.patt.loc27_7.1: %pattern_type.f1e = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc27_7.2 (constants.%T.patt)] +// CHECK:STDOUT: %A.patt.loc27_28.1: @F.%pattern_type.loc27_28 (%pattern_type.e66) = symbolic_binding_pattern A, 1 [symbolic = %A.patt.loc27_28.2 (constants.%A.patt.aee)] +// CHECK:STDOUT: %x.param_patt.loc27_44.1: @F.%pattern_type.loc27_44 (%pattern_type.b2f) = value_param_pattern [symbolic = %x.param_patt.loc27_44.2 (constants.%x.param_patt.321)] +// CHECK:STDOUT: %x.patt.loc27_44.1: @F.%pattern_type.loc27_44 (%pattern_type.b2f) = at_binding_pattern x, %x.param_patt.loc27_44.1 [symbolic = %x.patt.loc27_44.2 (constants.%x.patt.a80)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc27_17.1: type = splice_block %.loc27_17.3 [concrete = constants.%tuple.type] { // CHECK:STDOUT: %.Self.loc27_7: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -163,9 +177,9 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, )), from:! RuntimeConvertFrom) { // CHECK:STDOUT: %x: @F.%HoldsType.loc27_57.1 (%HoldsType.a83) = value_binding x, %x.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %holds_to.param_patt: %pattern_type.905 = value_param_pattern [concrete] -// CHECK:STDOUT: %holds_to.patt: %pattern_type.905 = at_binding_pattern holds_to, %holds_to.param_patt [concrete] -// CHECK:STDOUT: %from.patt: %pattern_type.598 = symbolic_binding_pattern from, 0 [concrete] +// CHECK:STDOUT: %holds_to.param_patt: %pattern_type.905 = value_param_pattern [concrete = constants.%holds_to.param_patt] +// CHECK:STDOUT: %holds_to.patt: %pattern_type.905 = at_binding_pattern holds_to, %holds_to.param_patt [concrete = constants.%holds_to.patt] +// CHECK:STDOUT: %from.patt.loc29_53.1: %pattern_type.598 = symbolic_binding_pattern from, 0 [symbolic = %from.patt.loc29_53.2 (constants.%from.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %holds_to.param: %HoldsType.9f2 = value_param call_param0 // CHECK:STDOUT: %.loc29_46.1: type = splice_block %HoldsType [concrete = constants.%HoldsType.9f2] { @@ -187,10 +201,10 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, )), from:! RuntimeConvertFrom) { // CHECK:STDOUT: // CHECK:STDOUT: impl @RuntimeConvertFrom.as.ImplicitAs.impl: %RuntimeConvertFrom.ref as %ImplicitAs.type { // CHECK:STDOUT: %RuntimeConvertFrom.as.ImplicitAs.impl.Convert.decl: %RuntimeConvertFrom.as.ImplicitAs.impl.Convert.type = fn_decl @RuntimeConvertFrom.as.ImplicitAs.impl.Convert [concrete = constants.%RuntimeConvertFrom.as.ImplicitAs.impl.Convert] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.598 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.598 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.c10 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.c10 = return_slot_pattern %return.param_patt, %RuntimeConvertTo.ref [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.598 = value_param_pattern [concrete = constants.%self.param_patt.c41] +// CHECK:STDOUT: %self.patt: %pattern_type.598 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.65f] +// CHECK:STDOUT: %return.param_patt: %pattern_type.c10 = out_param_pattern [concrete = constants.%return.param_patt.183] +// CHECK:STDOUT: %return.patt: %pattern_type.c10 = return_slot_pattern %return.param_patt, %RuntimeConvertTo.ref [concrete = constants.%return.patt.b01] // CHECK:STDOUT: } { // CHECK:STDOUT: %RuntimeConvertTo.ref: type = name_ref RuntimeConvertTo, file.%RuntimeConvertTo.decl [concrete = constants.%RuntimeConvertTo] // CHECK:STDOUT: %.loc24_30: Core.Form = init_form %RuntimeConvertTo.ref [concrete = constants.%.aac] @@ -211,6 +225,7 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, )), from:! RuntimeConvertFrom) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @HoldsType(%T.loc17_18.2: %tuple.type) { +// CHECK:STDOUT: %T.patt.loc17_18.2: %pattern_type.f1e = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc17_18.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc17_18.1: %tuple.type = symbolic_binding T, 0 [symbolic = %T.loc17_18.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -249,12 +264,16 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, )), from:! RuntimeConvertFrom) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc27_7.2: %tuple.type, %A.loc27_28.2: @F.%tuple.elem0.loc27_32.1 (%tuple.elem0)) { +// CHECK:STDOUT: %T.patt.loc27_7.2: %pattern_type.f1e = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc27_7.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc27_7.1: %tuple.type = symbolic_binding T, 0 [symbolic = %T.loc27_7.1 (constants.%T)] // CHECK:STDOUT: %tuple.elem0.loc27_32.1: type = tuple_access %T.loc27_7.1, element0 [symbolic = %tuple.elem0.loc27_32.1 (constants.%tuple.elem0)] -// CHECK:STDOUT: %A.loc27_28.1: @F.%tuple.elem0.loc27_32.1 (%tuple.elem0) = symbolic_binding A, 1 [symbolic = %A.loc27_28.1 (constants.%A)] // CHECK:STDOUT: %pattern_type.loc27_28: type = pattern_type %tuple.elem0.loc27_32.1 [symbolic = %pattern_type.loc27_28 (constants.%pattern_type.e66)] +// CHECK:STDOUT: %A.patt.loc27_28.2: @F.%pattern_type.loc27_28 (%pattern_type.e66) = symbolic_binding_pattern A, 1 [symbolic = %A.patt.loc27_28.2 (constants.%A.patt.aee)] +// CHECK:STDOUT: %A.loc27_28.1: @F.%tuple.elem0.loc27_32.1 (%tuple.elem0) = symbolic_binding A, 1 [symbolic = %A.loc27_28.1 (constants.%A)] // CHECK:STDOUT: %HoldsType.loc27_57.1: type = class_type @HoldsType, @HoldsType(%T.loc27_7.1) [symbolic = %HoldsType.loc27_57.1 (constants.%HoldsType.a83)] // CHECK:STDOUT: %pattern_type.loc27_44: type = pattern_type %HoldsType.loc27_57.1 [symbolic = %pattern_type.loc27_44 (constants.%pattern_type.b2f)] +// CHECK:STDOUT: %x.param_patt.loc27_44.2: @F.%pattern_type.loc27_44 (%pattern_type.b2f) = value_param_pattern [symbolic = %x.param_patt.loc27_44.2 (constants.%x.param_patt.321)] +// CHECK:STDOUT: %x.patt.loc27_44.2: @F.%pattern_type.loc27_44 (%pattern_type.b2f) = at_binding_pattern x, %x.param_patt.loc27_44.2 [symbolic = %x.patt.loc27_44.2 (constants.%x.patt.a80)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %HoldsType.loc27_57.1 [symbolic = %require_complete (constants.%require_complete)] @@ -266,6 +285,7 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, )), from:! RuntimeConvertFrom) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @G(%from.loc29_53.2: %RuntimeConvertFrom) { +// CHECK:STDOUT: %from.patt.loc29_53.2: %pattern_type.598 = symbolic_binding_pattern from, 0 [symbolic = %from.patt.loc29_53.2 (constants.%from.patt)] // CHECK:STDOUT: %from.loc29_53.1: %RuntimeConvertFrom = symbolic_binding from, 0 [symbolic = %from.loc29_53.1 (constants.%from)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -301,36 +321,47 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, )), from:! RuntimeConvertFrom) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HoldsType(constants.%T) { +// CHECK:STDOUT: %T.patt.loc17_18.2 => constants.%T.patt // CHECK:STDOUT: %T.loc17_18.1 => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T, constants.%A) { +// CHECK:STDOUT: %T.patt.loc27_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc27_7.1 => constants.%T // CHECK:STDOUT: %tuple.elem0.loc27_32.1 => constants.%tuple.elem0 -// CHECK:STDOUT: %A.loc27_28.1 => constants.%A // CHECK:STDOUT: %pattern_type.loc27_28 => constants.%pattern_type.e66 +// CHECK:STDOUT: %A.patt.loc27_28.2 => constants.%A.patt.aee +// CHECK:STDOUT: %A.loc27_28.1 => constants.%A // CHECK:STDOUT: %HoldsType.loc27_57.1 => constants.%HoldsType.a83 // CHECK:STDOUT: %pattern_type.loc27_44 => constants.%pattern_type.b2f +// CHECK:STDOUT: %x.param_patt.loc27_44.2 => constants.%x.param_patt.321 +// CHECK:STDOUT: %x.patt.loc27_44.2 => constants.%x.patt.a80 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HoldsType(constants.%tuple.162) { +// CHECK:STDOUT: %T.patt.loc17_18.2 => constants.%T.patt // CHECK:STDOUT: %T.loc17_18.1 => constants.%tuple.162 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%from) { +// CHECK:STDOUT: %from.patt.loc29_53.2 => constants.%from.patt // CHECK:STDOUT: %from.loc29_53.1 => constants.%from // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%tuple.162, ) { +// CHECK:STDOUT: %T.patt.loc27_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc27_7.1 => constants.%tuple.162 // CHECK:STDOUT: %tuple.elem0.loc27_32.1 => constants.%RuntimeConvertTo -// CHECK:STDOUT: %A.loc27_28.1 => // CHECK:STDOUT: %pattern_type.loc27_28 => constants.%pattern_type.c10 +// CHECK:STDOUT: %A.patt.loc27_28.2 => constants.%A.patt.797 +// CHECK:STDOUT: %A.loc27_28.1 => // CHECK:STDOUT: %HoldsType.loc27_57.1 => constants.%HoldsType.9f2 // CHECK:STDOUT: %pattern_type.loc27_44 => constants.%pattern_type.905 +// CHECK:STDOUT: %x.param_patt.loc27_44.2 => constants.%x.param_patt.fbd +// CHECK:STDOUT: %x.patt.loc27_44.2 => constants.%x.patt.32c // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/facet/period_self.carbon b/toolchain/check/testdata/facet/period_self.carbon index f8961c71b03e..222cc4874ef1 100644 --- a/toolchain/check/testdata/facet/period_self.carbon +++ b/toolchain/check/testdata/facet/period_self.carbon @@ -469,6 +469,7 @@ fn F() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self.c39: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.d47: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %I.type.335: type = generic_interface_type @I [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -489,6 +490,7 @@ fn F() { // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %I_where.type: type = facet_type <@I, @I(%.Self.as_type.246) where %impl.elem0 = %empty_tuple.type> [symbolic_self] // CHECK:STDOUT: %pattern_type.021: type = pattern_type %I_where.type [symbolic_self] +// CHECK:STDOUT: %T.patt.e6f: %pattern_type.021 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.8c8: %I_where.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T.8c8 [symbolic] // CHECK:STDOUT: %facet_value: %type = facet_value %T.as_type, () [symbolic] @@ -496,6 +498,8 @@ fn F() { // CHECK:STDOUT: %I.facet: %I.type.f3d = facet_value %T.as_type, (%I.lookup_impl_witness.506) [symbolic] // CHECK:STDOUT: %.262: Core.Form = init_form %empty_tuple.type [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern %return.param_patt, %empty_tuple.type [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] @@ -504,7 +508,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %I.decl: %I.type.335 = interface_decl @I [concrete = constants.%I.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc4_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt.d47)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_17.1: type = splice_block %.loc4_17.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.c39] @@ -513,9 +517,9 @@ fn F() { // CHECK:STDOUT: %T.loc4_14.2: type = symbolic_binding T, 0 [symbolic = %T.loc4_14.1 (constants.%T.67d)] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type.021 = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern %return.param_patt, %impl.elem0.loc8_39 [concrete] +// CHECK:STDOUT: %T.patt.loc8_7.1: %pattern_type.021 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_7.2 (constants.%T.patt.e6f)] +// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern %return.param_patt, %impl.elem0.loc8_39 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: %I_where.type = name_ref T, %T.loc8_7.2 [symbolic = %T.loc8_7.1 (constants.%T.8c8)] // CHECK:STDOUT: %T.as_type.loc8_39.2: type = facet_access_type %T.ref [symbolic = %T.as_type.loc8_39.1 (constants.%T.as_type)] @@ -558,9 +562,9 @@ fn F() { // CHECK:STDOUT: %return: ref %empty_tuple.type = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %T.patt: %pattern_type.021 = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern %return.param_patt, %impl.elem0.loc12_47 [concrete] +// CHECK:STDOUT: %T.patt.loc12_7.1: %pattern_type.021 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_7.2 (constants.%T.patt.e6f)] +// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern %return.param_patt, %impl.elem0.loc12_47 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: %I_where.type = name_ref T, %T.loc12_7.2 [symbolic = %T.loc12_7.1 (constants.%T.8c8)] // CHECK:STDOUT: %T.as_type.loc12_47.2: type = facet_access_type %T.ref [symbolic = %T.as_type.loc12_47.1 (constants.%T.as_type)] @@ -601,6 +605,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @I(%T.loc4_14.2: type) { +// CHECK:STDOUT: %T.patt.loc4_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt.d47)] // CHECK:STDOUT: %T.loc4_14.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_14.1 (constants.%T.67d)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -626,6 +631,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc8_7.2: %I_where.type) { +// CHECK:STDOUT: %T.patt.loc8_7.2: %pattern_type.021 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_7.2 (constants.%T.patt.e6f)] // CHECK:STDOUT: %T.loc8_7.1: %I_where.type = symbolic_binding T, 0 [symbolic = %T.loc8_7.1 (constants.%T.8c8)] // CHECK:STDOUT: %T.as_type.loc8_39.1: type = facet_access_type %T.loc8_7.1 [symbolic = %T.as_type.loc8_39.1 (constants.%T.as_type)] // CHECK:STDOUT: %facet_value.loc8_39.1: %type = facet_value %T.as_type.loc8_39.1, () [symbolic = %facet_value.loc8_39.1 (constants.%facet_value)] @@ -642,6 +648,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @G(%T.loc12_7.2: %I_where.type) { +// CHECK:STDOUT: %T.patt.loc12_7.2: %pattern_type.021 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_7.2 (constants.%T.patt.e6f)] // CHECK:STDOUT: %T.loc12_7.1: %I_where.type = symbolic_binding T, 0 [symbolic = %T.loc12_7.1 (constants.%T.8c8)] // CHECK:STDOUT: %T.as_type.loc12_47.1: type = facet_access_type %T.loc12_7.1 [symbolic = %T.as_type.loc12_47.1 (constants.%T.as_type)] // CHECK:STDOUT: %facet_value.loc12_47.1: %type = facet_value %T.as_type.loc12_47.1, () [symbolic = %facet_value.loc12_47.1 (constants.%facet_value)] @@ -658,12 +665,14 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%T.67d) { +// CHECK:STDOUT: %T.patt.loc4_14.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc4_14.1 => constants.%T.67d // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I.WithSelf(constants.%T.67d, constants.%Self.191) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%.Self.as_type.246) { +// CHECK:STDOUT: %T.patt.loc4_14.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc4_14.1 => constants.%.Self.as_type.246 // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -693,6 +702,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%T.as_type) { +// CHECK:STDOUT: %T.patt.loc4_14.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc4_14.1 => constants.%T.as_type // CHECK:STDOUT: } // CHECK:STDOUT: @@ -704,12 +714,14 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T.8c8) { +// CHECK:STDOUT: %T.patt.loc8_7.2 => constants.%T.patt.e6f // CHECK:STDOUT: %T.loc8_7.1 => constants.%T.8c8 // CHECK:STDOUT: %T.as_type.loc8_39.1 => constants.%T.as_type // CHECK:STDOUT: %facet_value.loc8_39.1 => constants.%facet_value // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%T.8c8) { +// CHECK:STDOUT: %T.patt.loc12_7.2 => constants.%T.patt.e6f // CHECK:STDOUT: %T.loc12_7.1 => constants.%T.8c8 // CHECK:STDOUT: %T.as_type.loc12_47.1 => constants.%T.as_type // CHECK:STDOUT: %facet_value.loc12_47.1 => constants.%facet_value diff --git a/toolchain/check/testdata/facet/require_import.carbon b/toolchain/check/testdata/facet/require_import.carbon index d91737709e97..fc78ead3945d 100644 --- a/toolchain/check/testdata/facet/require_import.carbon +++ b/toolchain/check/testdata/facet/require_import.carbon @@ -61,6 +61,8 @@ fn F(B:! Y) { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Z.type.924: type = facet_type <@Z, @Z(%T)> [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Self.d5d: %Z.type.924 = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %Z.assoc_type.496: type = assoc_entity_type @Z, @Z(%T) [symbolic] // CHECK:STDOUT: %Z.WithSelf.F.type.bc1: type = fn_type @Z.WithSelf.F, @Z.WithSelf(%T, %Self.d5d) [symbolic] @@ -69,6 +71,7 @@ fn F(B:! Y) { // CHECK:STDOUT: %Self.c0a: %Z.type.ecd906.1 = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %require_complete.55f146.1: = require_complete_type %Z.type.ecd906.1 [symbolic] // CHECK:STDOUT: %pattern_type.9a5: type = pattern_type %X.type [concrete] +// CHECK:STDOUT: %A.patt: %pattern_type.9a5 = symbolic_binding_pattern A, 0 [symbolic] // CHECK:STDOUT: %A: %X.type = symbolic_binding A, 0 [symbolic] // CHECK:STDOUT: %Y.type: type = facet_type <@Y> [concrete] // CHECK:STDOUT: %Self.95b: %Y.type = symbolic_binding Self, 0 [symbolic] @@ -76,6 +79,7 @@ fn F(B:! Y) { // CHECK:STDOUT: %Z.type.abb: type = facet_type <@Z, @Z(%Self.as_type.917)> [symbolic] // CHECK:STDOUT: %Self.87c: %Z.type.abb = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %pattern_type.cfb: type = pattern_type %Y.type [concrete] +// CHECK:STDOUT: %B.patt: %pattern_type.cfb = symbolic_binding_pattern B, 1 [symbolic] // CHECK:STDOUT: %B: %Y.type = symbolic_binding B, 1 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] @@ -130,8 +134,8 @@ fn F(B:! Y) { // CHECK:STDOUT: %default.import.loc2_17.1 = import // CHECK:STDOUT: %default.import.loc2_17.2 = import // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %A.patt: %pattern_type.9a5 = symbolic_binding_pattern A, 0 [concrete] -// CHECK:STDOUT: %B.patt: %pattern_type.cfb = symbolic_binding_pattern B, 1 [concrete] +// CHECK:STDOUT: %A.patt.loc4_7.1: %pattern_type.9a5 = symbolic_binding_pattern A, 0 [symbolic = %A.patt.loc4_7.2 (constants.%A.patt)] +// CHECK:STDOUT: %B.patt.loc4_21.1: %pattern_type.cfb = symbolic_binding_pattern B, 1 [symbolic = %B.patt.loc4_21.2 (constants.%B.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_10: type = splice_block %X.ref [concrete = constants.%X.type] { // CHECK:STDOUT: %.Self.loc4_7: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -147,6 +151,7 @@ fn F(B:! Y) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Z(imports.%Main.import_ref.b3bc94.3: type) [from "a.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -204,7 +209,9 @@ fn F(B:! Y) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%A.loc4_7.2: %X.type, %B.loc4_21.2: %Y.type) { +// CHECK:STDOUT: %A.patt.loc4_7.2: %pattern_type.9a5 = symbolic_binding_pattern A, 0 [symbolic = %A.patt.loc4_7.2 (constants.%A.patt)] // CHECK:STDOUT: %A.loc4_7.1: %X.type = symbolic_binding A, 0 [symbolic = %A.loc4_7.1 (constants.%A)] +// CHECK:STDOUT: %B.patt.loc4_21.2: %pattern_type.cfb = symbolic_binding_pattern B, 1 [symbolic = %B.patt.loc4_21.2 (constants.%B.patt)] // CHECK:STDOUT: %B.loc4_21.1: %Y.type = symbolic_binding B, 1 [symbolic = %B.loc4_21.1 (constants.%B)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -234,6 +241,7 @@ fn F(B:! Y) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Z(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -242,6 +250,7 @@ fn F(B:! Y) { // CHECK:STDOUT: specific @Z.WithSelf.F(constants.%T, constants.%Self.d5d) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @Z(constants.%Self.as_type.190) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%Self.as_type.190 // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -264,6 +273,7 @@ fn F(B:! Y) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Z(constants.%Self.as_type.917) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%Self.as_type.917 // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -280,7 +290,9 @@ fn F(B:! Y) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%A, constants.%B) { +// CHECK:STDOUT: %A.patt.loc4_7.2 => constants.%A.patt // CHECK:STDOUT: %A.loc4_7.1 => constants.%A +// CHECK:STDOUT: %B.patt.loc4_21.2 => constants.%B.patt // CHECK:STDOUT: %B.loc4_21.1 => constants.%B // CHECK:STDOUT: } // CHECK:STDOUT: @@ -293,6 +305,7 @@ fn F(B:! Y) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Z(constants.%A.as_type) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%A.as_type // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/facet/runtime_value.carbon b/toolchain/check/testdata/facet/runtime_value.carbon index 30f92c3c2ba0..e15b1368bbd3 100644 --- a/toolchain/check/testdata/facet/runtime_value.carbon +++ b/toolchain/check/testdata/facet/runtime_value.carbon @@ -136,12 +136,13 @@ fn F(T: Z) { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %pattern_type.6cb: type = pattern_type %I.type [concrete] // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %I.type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6cb = value_binding_pattern a [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F(%c.param: %C) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.6cb = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6cb = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.ref: %C = name_ref c, %c // CHECK:STDOUT: %i.ref: %C.elem = name_ref i, @C.%.loc6 [concrete = @C.%.loc6] @@ -160,12 +161,13 @@ fn F(T: Z) { // CHECK:STDOUT: %facet_type: type = facet_type <@I & @J> [concrete] // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %facet_type [concrete] // CHECK:STDOUT: %pattern_type.6cb: type = pattern_type %I.type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6cb = value_binding_pattern a [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F(%c.param: %C) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.6cb = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6cb = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.ref: %C = name_ref c, %c // CHECK:STDOUT: %ij.ref: %C.elem = name_ref ij, @C.%.loc7 [concrete = @C.%.loc7] diff --git a/toolchain/check/testdata/facet/self_in_interface_param.carbon b/toolchain/check/testdata/facet/self_in_interface_param.carbon index 7f767e0386a2..27b389ab9415 100644 --- a/toolchain/check/testdata/facet/self_in_interface_param.carbon +++ b/toolchain/check/testdata/facet/self_in_interface_param.carbon @@ -41,21 +41,24 @@ fn G(_:! I(.Self) where .I1 = ()) {} // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %I_where.type: type = facet_type <@I, @I(%.Self.as_type.246) where %impl.elem0 = %empty_tuple.type> [symbolic_self] // CHECK:STDOUT: %pattern_type.021: type = pattern_type %I_where.type [symbolic_self] +// CHECK:STDOUT: %T.patt.e6f: %pattern_type.021 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.8c8: %I_where.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T.8c8 [symbolic] // CHECK:STDOUT: %facet_value: %type = facet_value %T.as_type, () [symbolic] // CHECK:STDOUT: %I.lookup_impl_witness.506: = lookup_impl_witness %T.8c8, @I, @I(%T.as_type) [symbolic] // CHECK:STDOUT: %.262: Core.Form = init_form %empty_tuple.type [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern %return.param_patt, %empty_tuple.type [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type.021 = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern %return.param_patt, %impl.elem0.loc18_39 [concrete] +// CHECK:STDOUT: %T.patt.loc18_7.1: %pattern_type.021 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc18_7.2 (constants.%T.patt.e6f)] +// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern %return.param_patt, %impl.elem0.loc18_39 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: %I_where.type = name_ref T, %T.loc18_7.2 [symbolic = %T.loc18_7.1 (constants.%T.8c8)] // CHECK:STDOUT: %T.as_type.loc18_39.2: type = facet_access_type %T.ref [symbolic = %T.as_type.loc18_39.1 (constants.%T.as_type)] @@ -100,6 +103,7 @@ fn G(_:! I(.Self) where .I1 = ()) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc18_7.2: %I_where.type) { +// CHECK:STDOUT: %T.patt.loc18_7.2: %pattern_type.021 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc18_7.2 (constants.%T.patt.e6f)] // CHECK:STDOUT: %T.loc18_7.1: %I_where.type = symbolic_binding T, 0 [symbolic = %T.loc18_7.1 (constants.%T.8c8)] // CHECK:STDOUT: %T.as_type.loc18_39.1: type = facet_access_type %T.loc18_7.1 [symbolic = %T.as_type.loc18_39.1 (constants.%T.as_type)] // CHECK:STDOUT: %facet_value.loc18_39.1: %type = facet_value %T.as_type.loc18_39.1, () [symbolic = %facet_value.loc18_39.1 (constants.%facet_value)] @@ -116,6 +120,7 @@ fn G(_:! I(.Self) where .I1 = ()) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T.8c8) { +// CHECK:STDOUT: %T.patt.loc18_7.2 => constants.%T.patt.e6f // CHECK:STDOUT: %T.loc18_7.1 => constants.%T.8c8 // CHECK:STDOUT: %T.as_type.loc18_39.1 => constants.%T.as_type // CHECK:STDOUT: %facet_value.loc18_39.1 => constants.%facet_value diff --git a/toolchain/check/testdata/for/actual.carbon b/toolchain/check/testdata/for/actual.carbon index 33bf3414bd10..3745fd5fced0 100644 --- a/toolchain/check/testdata/for/actual.carbon +++ b/toolchain/check/testdata/for/actual.carbon @@ -56,6 +56,7 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self.c39: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.dc0: type = pattern_type Core.IntLiteral [concrete] +// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %IntRange.type: type = generic_class_type @IntRange [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -65,8 +66,14 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %Int.67af24.1: type = class_type @Int, @Int(%N) [symbolic] // CHECK:STDOUT: %pattern_type.142cb7.1: type = pattern_type %Int.67af24.1 [symbolic] +// CHECK:STDOUT: %start.param_patt.b2c: %pattern_type.142cb7.1 = value_param_pattern [symbolic] +// CHECK:STDOUT: %start.patt.9ef: %pattern_type.142cb7.1 = at_binding_pattern start, %start.param_patt.b2c [symbolic] +// CHECK:STDOUT: %end.param_patt.8ab: %pattern_type.142cb7.1 = value_param_pattern [symbolic] +// CHECK:STDOUT: %end.patt.960: %pattern_type.142cb7.1 = at_binding_pattern end, %end.param_patt.8ab [symbolic] // CHECK:STDOUT: %.5c3: Core.Form = init_form %IntRange.2c4 [symbolic] // CHECK:STDOUT: %pattern_type.1ea: type = pattern_type %IntRange.2c4 [symbolic] +// CHECK:STDOUT: %return.param_patt.262: %pattern_type.1ea = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.dbf: %pattern_type.1ea = return_slot_pattern %return.param_patt.262, %IntRange.2c4 [symbolic] // CHECK:STDOUT: %IntRange.Make.type.522: type = fn_type @IntRange.Make, @IntRange(%N) [symbolic] // CHECK:STDOUT: %IntRange.Make.8ef: %IntRange.Make.type.522 = struct_value () [symbolic] // CHECK:STDOUT: %Iterate.type: type = facet_type <@Iterate> [concrete] @@ -89,11 +96,12 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %impl.elem1.543: %Destroy.type = impl_witness_access %Iterate.lookup_impl_witness.b37, element1 [symbolic_self] // CHECK:STDOUT: %Destroy.lookup_impl_witness.173: = lookup_impl_witness %Int.67af24.1, @Destroy [symbolic] // CHECK:STDOUT: %Destroy.facet.7bb: %Destroy.type = facet_value %Int.67af24.1, (%Destroy.lookup_impl_witness.173) [symbolic] -// CHECK:STDOUT: %assoc0.0f0: %Iterate.assoc_type = assoc_entity element0, imports.%Core.import_ref.ebd [concrete] +// CHECK:STDOUT: %assoc0.0f0: %Iterate.assoc_type = assoc_entity element0, imports.%Core.import_ref.ebd7 [concrete] // CHECK:STDOUT: %impl.elem0.903: %facet_type.f48 = impl_witness_access %Iterate.lookup_impl_witness.b37, element0 [symbolic_self] // CHECK:STDOUT: %require_complete.4dfb92.1: = require_complete_type %Int.67af24.1 [symbolic] // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.ac8: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N) [symbolic] // CHECK:STDOUT: %Int.as.Copy.impl.Op.5e0: %Int.as.Copy.impl.Op.type.ac8 = struct_value () [symbolic] +// CHECK:STDOUT: %return.param_patt.5a2679.1: %pattern_type.142cb7.1 = out_param_pattern [symbolic] // CHECK:STDOUT: %.df5d8d.1: Core.Form = init_form %Int.67af24.1 [symbolic] // CHECK:STDOUT: %Copy.lookup_impl_witness.df6: = lookup_impl_witness %Int.67af24.1, @Copy [symbolic] // CHECK:STDOUT: %.a53: require_specific_def_type = require_specific_def @Int.as.Copy.impl(%N) [symbolic] @@ -101,19 +109,28 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %Iterate_where.type: type = facet_type <@Iterate where %impl.elem1.543 = %Destroy.facet.7bb and %impl.elem0.903 = %facet_value> [symbolic] // CHECK:STDOUT: %Iterate.impl_witness: = impl_witness @IntRange.as.Iterate.impl.%Iterate.impl_witness_table, @IntRange.as.Iterate.impl(%N) [symbolic] // CHECK:STDOUT: %require_complete.975: = require_complete_type %Iterate_where.type [symbolic] +// CHECK:STDOUT: %self.param_patt.5cc: %pattern_type.1ea = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.13b: %pattern_type.1ea = at_binding_pattern self, %self.param_patt.5cc [symbolic] +// CHECK:STDOUT: %return.patt.434: %pattern_type.142cb7.1 = return_slot_pattern %return.param_patt.5a2679.1, %Int.67af24.1 [symbolic] // CHECK:STDOUT: %IntRange.as.Iterate.impl.NewCursor.type: type = fn_type @IntRange.as.Iterate.impl.NewCursor, @IntRange.as.Iterate.impl(%N) [symbolic] // CHECK:STDOUT: %IntRange.as.Iterate.impl.NewCursor: %IntRange.as.Iterate.impl.NewCursor.type = struct_value () [symbolic] // CHECK:STDOUT: %ptr.41e: type = ptr_type %Int.67af24.1 [symbolic] // CHECK:STDOUT: %pattern_type.833: type = pattern_type %ptr.41e [symbolic] +// CHECK:STDOUT: %cursor.param_patt.328: %pattern_type.833 = value_param_pattern [symbolic] +// CHECK:STDOUT: %cursor.patt.652: %pattern_type.833 = at_binding_pattern cursor, %cursor.param_patt.328 [symbolic] // CHECK:STDOUT: %OptionalStorage.lookup_impl_witness.a32: = lookup_impl_witness %Int.67af24.1, @OptionalStorage [symbolic] // CHECK:STDOUT: %.17c: require_specific_def_type = require_specific_def @T.as_type.as.OptionalStorage.impl(%facet_value) [symbolic] // CHECK:STDOUT: %OptionalStorage.facet.b99: %OptionalStorage.type = facet_value %Int.67af24.1, (%OptionalStorage.lookup_impl_witness.a32) [symbolic] // CHECK:STDOUT: %Optional.5ec: type = class_type @Optional, @Optional(%OptionalStorage.facet.b99) [symbolic] // CHECK:STDOUT: %.3f3: Core.Form = init_form %Optional.5ec [symbolic] // CHECK:STDOUT: %pattern_type.b38: type = pattern_type %Optional.5ec [symbolic] +// CHECK:STDOUT: %return.param_patt.4bb: %pattern_type.b38 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.427: %pattern_type.b38 = return_slot_pattern %return.param_patt.4bb, %Optional.5ec [symbolic] // CHECK:STDOUT: %IntRange.as.Iterate.impl.Next.type: type = fn_type @IntRange.as.Iterate.impl.Next, @IntRange.as.Iterate.impl(%N) [symbolic] // CHECK:STDOUT: %IntRange.as.Iterate.impl.Next: %IntRange.as.Iterate.impl.Next.type = struct_value () [symbolic] +// CHECK:STDOUT: %start.patt.477: %pattern_type.142cb7.1 = ref_binding_pattern start [symbolic] // CHECK:STDOUT: %IntRange.elem.bed: type = unbound_element_type %IntRange.2c4, %Int.67af24.1 [symbolic] +// CHECK:STDOUT: %end.patt.535: %pattern_type.142cb7.1 = ref_binding_pattern end [symbolic] // CHECK:STDOUT: %struct_type.start.end.d4d: type = struct_type {.start: %Int.67af24.1, .end: %Int.67af24.1} [symbolic] // CHECK:STDOUT: %complete_type.aa1: = complete_type_witness %struct_type.start.end.d4d [symbolic] // CHECK:STDOUT: %require_complete.5d9: = require_complete_type %IntRange.2c4 [symbolic] @@ -128,6 +145,8 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %Optional.Some.type.422: type = fn_type @Optional.Some, @Optional(%OptionalStorage.facet.b99) [symbolic] // CHECK:STDOUT: %Optional.Some.bcf: %Optional.Some.type.422 = struct_value () [symbolic] // CHECK:STDOUT: %require_complete.63c: = require_complete_type %Optional.5ec [symbolic] +// CHECK:STDOUT: %value.patt.505: %pattern_type.142cb7.1 = ref_binding_pattern value [symbolic] +// CHECK:STDOUT: %value.var_patt: %pattern_type.142cb7.1 = var_pattern %value.patt.505 [symbolic] // CHECK:STDOUT: %OrderedWith.type.ad8: type = generic_interface_type @OrderedWith [concrete] // CHECK:STDOUT: %OrderedWith.generic: %OrderedWith.type.ad8 = struct_value () [concrete] // CHECK:STDOUT: %Other: type = symbolic_binding Other, 0 [symbolic] @@ -171,19 +190,27 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %end.param_patt.c55: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %end.patt.367: %pattern_type.6b6 = at_binding_pattern end, %end.param_patt.c55 [concrete] // CHECK:STDOUT: %IntRange.bbd: type = class_type @IntRange, @IntRange(%int_32) [concrete] // CHECK:STDOUT: %.9fd: Core.Form = init_form %IntRange.bbd [concrete] // CHECK:STDOUT: %pattern_type.0f3: type = pattern_type %IntRange.bbd [concrete] +// CHECK:STDOUT: %return.param_patt.108: %pattern_type.0f3 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.7d9: %pattern_type.0f3 = return_slot_pattern %return.param_patt.108, %IntRange.bbd [concrete] // CHECK:STDOUT: %Range.type: type = fn_type @Range [concrete] // CHECK:STDOUT: %Range: %Range.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %complete_type.f8a: = complete_type_witness %i32.builtin [concrete] // CHECK:STDOUT: %IntRange.Make.type.d27: type = fn_type @IntRange.Make, @IntRange(%int_32) [concrete] // CHECK:STDOUT: %IntRange.Make.9ef: %IntRange.Make.type.d27 = struct_value () [concrete] +// CHECK:STDOUT: %start.patt.c23: %pattern_type.6b6 = ref_binding_pattern start [concrete] // CHECK:STDOUT: %IntRange.elem.6b1: type = unbound_element_type %IntRange.bbd, %i32 [concrete] +// CHECK:STDOUT: %end.patt.46f: %pattern_type.6b6 = ref_binding_pattern end [concrete] // CHECK:STDOUT: %struct_type.start.end.e93: type = struct_type {.start: %i32, .end: %i32} [concrete] // CHECK:STDOUT: %complete_type.ec7: = complete_type_witness %struct_type.start.end.e93 [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] +// CHECK:STDOUT: %start.param_patt.619: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %start.patt.304: %pattern_type.6b6 = at_binding_pattern start, %start.param_patt.619 [concrete] // CHECK:STDOUT: %IntRange.Make.specific_fn: = specific_function %IntRange.Make.9ef, @IntRange.Make(%int_32) [concrete] // CHECK:STDOUT: %ImplicitAs.type.914: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %To: Core.IntLiteral = symbolic_binding To, 0 [symbolic] @@ -229,10 +256,10 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %Core.import_ref.96b: %Iterate.assoc_type = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [concrete = constants.%assoc0.0f0] // CHECK:STDOUT: %Core.import_ref.5be: %Iterate.assoc_type = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [concrete = constants.%assoc1.c91] // CHECK:STDOUT: %Core.import_ref.6e4: @Optional.%Optional.None.type (%Optional.None.type.bdc) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @Optional.%Optional.None (constants.%Optional.None.01e)] -// CHECK:STDOUT: %Core.import_ref.84b: @Optional.%Optional.Some.type (%Optional.Some.type.304) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @Optional.%Optional.Some (constants.%Optional.Some.2a0)] +// CHECK:STDOUT: %Core.import_ref.84ba: @Optional.%Optional.Some.type (%Optional.Some.type.304) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @Optional.%Optional.Some (constants.%Optional.Some.2a0)] // CHECK:STDOUT: %Core.import_ref.dd9: %Destroy.type = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [concrete = %CursorType] // CHECK:STDOUT: %CursorType: %Destroy.type = assoc_const_decl @CursorType [concrete] {} -// CHECK:STDOUT: %Core.import_ref.ebd: %facet_type.f48 = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [concrete = %ElementType] +// CHECK:STDOUT: %Core.import_ref.ebd7: %facet_type.f48 = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [concrete = %ElementType] // CHECK:STDOUT: %ElementType: %facet_type.f48 = assoc_const_decl @ElementType [concrete] {} // CHECK:STDOUT: %Core.import_ref.cd6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.ac8) = import_ref Core//prelude/types/int, loc{{\d+_\d+}}, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.5e0)] // CHECK:STDOUT: %Copy.impl_witness_table.367 = impl_witness_table (%Core.import_ref.cd6), @Int.as.Copy.impl [concrete] @@ -262,7 +289,7 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %IntRange.decl: %IntRange.type = class_decl @IntRange [concrete = constants.%IntRange.generic] { -// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [concrete] +// CHECK:STDOUT: %N.patt.loc4_17.1: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_17.2 (constants.%N.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4: type = splice_block %IntLiteral.ref [concrete = Core.IntLiteral] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.c39] @@ -272,10 +299,10 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %N.loc4_17.2: Core.IntLiteral = symbolic_binding N, 0 [symbolic = %N.loc4_17.1 (constants.%N)] // CHECK:STDOUT: } // CHECK:STDOUT: %Range.decl: %Range.type = fn_decl @Range [concrete = constants.%Range] { -// CHECK:STDOUT: %end.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %end.patt: %pattern_type.6b6 = at_binding_pattern end, %end.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.0f3 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.0f3 = return_slot_pattern %return.param_patt, %IntRange.loc26 [concrete] +// CHECK:STDOUT: %end.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%end.param_patt.c55] +// CHECK:STDOUT: %end.patt: %pattern_type.6b6 = at_binding_pattern end, %end.param_patt [concrete = constants.%end.patt.367] +// CHECK:STDOUT: %return.param_patt: %pattern_type.0f3 = out_param_pattern [concrete = constants.%return.param_patt.108] +// CHECK:STDOUT: %return.patt: %pattern_type.0f3 = return_slot_pattern %return.param_patt, %IntRange.loc26 [concrete = constants.%return.patt.7d9] // CHECK:STDOUT: } { // CHECK:STDOUT: %IntRange.ref.loc26: %IntRange.type = name_ref IntRange, file.%IntRange.decl [concrete = constants.%IntRange.generic] // CHECK:STDOUT: %int_32.loc26: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -310,10 +337,10 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: // CHECK:STDOUT: impl: %Self.ref as %.loc9_24 { // CHECK:STDOUT: %IntRange.as.Iterate.impl.NewCursor.decl: @IntRange.as.Iterate.impl.%IntRange.as.Iterate.impl.NewCursor.type (%IntRange.as.Iterate.impl.NewCursor.type) = fn_decl @IntRange.as.Iterate.impl.NewCursor [symbolic = @IntRange.as.Iterate.impl.%IntRange.as.Iterate.impl.NewCursor (constants.%IntRange.as.Iterate.impl.NewCursor)] { -// CHECK:STDOUT: %self.param_patt: @IntRange.as.Iterate.impl.NewCursor.%pattern_type.loc10_18 (%pattern_type.1ea) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @IntRange.as.Iterate.impl.NewCursor.%pattern_type.loc10_18 (%pattern_type.1ea) = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @IntRange.as.Iterate.impl.NewCursor.%pattern_type.loc10_37 (%pattern_type.142cb7.1) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @IntRange.as.Iterate.impl.NewCursor.%pattern_type.loc10_37 (%pattern_type.142cb7.1) = return_slot_pattern %return.param_patt, %Int.loc10_37.2 [concrete] +// CHECK:STDOUT: %self.param_patt.loc10_18.1: @IntRange.as.Iterate.impl.NewCursor.%pattern_type.loc10_18 (%pattern_type.1ea) = value_param_pattern [symbolic = %self.param_patt.loc10_18.2 (constants.%self.param_patt.5cc)] +// CHECK:STDOUT: %self.patt.loc10_18.1: @IntRange.as.Iterate.impl.NewCursor.%pattern_type.loc10_18 (%pattern_type.1ea) = at_binding_pattern self, %self.param_patt.loc10_18.1 [symbolic = %self.patt.loc10_18.2 (constants.%self.patt.13b)] +// CHECK:STDOUT: %return.param_patt.loc10_37.1: @IntRange.as.Iterate.impl.NewCursor.%pattern_type.loc10_37 (%pattern_type.142cb7.1) = out_param_pattern [symbolic = %return.param_patt.loc10_37.2 (constants.%return.param_patt.5a2679.1)] +// CHECK:STDOUT: %return.patt.loc10_24.1: @IntRange.as.Iterate.impl.NewCursor.%pattern_type.loc10_37 (%pattern_type.142cb7.1) = return_slot_pattern %return.param_patt.loc10_37.1, %Int.loc10_37.2 [symbolic = %return.patt.loc10_24.2 (constants.%return.patt.434)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Core.ref: = name_ref Core, imports.%Core [concrete = imports.%Core] // CHECK:STDOUT: %Int.ref: %Int.type = name_ref Int, imports.%Core.Int [concrete = constants.%Int.generic] @@ -330,12 +357,12 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %return: ref @IntRange.as.Iterate.impl.NewCursor.%Int.loc10_37.1 (%Int.67af24.1) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %IntRange.as.Iterate.impl.Next.decl: @IntRange.as.Iterate.impl.%IntRange.as.Iterate.impl.Next.type (%IntRange.as.Iterate.impl.Next.type) = fn_decl @IntRange.as.Iterate.impl.Next [symbolic = @IntRange.as.Iterate.impl.%IntRange.as.Iterate.impl.Next (constants.%IntRange.as.Iterate.impl.Next)] { -// CHECK:STDOUT: %self.param_patt: @IntRange.as.Iterate.impl.Next.%pattern_type.loc11_13 (%pattern_type.1ea) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @IntRange.as.Iterate.impl.Next.%pattern_type.loc11_13 (%pattern_type.1ea) = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %cursor.param_patt: @IntRange.as.Iterate.impl.Next.%pattern_type.loc11_25 (%pattern_type.833) = value_param_pattern [concrete] -// CHECK:STDOUT: %cursor.patt: @IntRange.as.Iterate.impl.Next.%pattern_type.loc11_25 (%pattern_type.833) = at_binding_pattern cursor, %cursor.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @IntRange.as.Iterate.impl.Next.%pattern_type.loc11_69 (%pattern_type.b38) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @IntRange.as.Iterate.impl.Next.%pattern_type.loc11_69 (%pattern_type.b38) = return_slot_pattern %return.param_patt, %Optional.loc11_69.2 [concrete] +// CHECK:STDOUT: %self.param_patt.loc11_13.1: @IntRange.as.Iterate.impl.Next.%pattern_type.loc11_13 (%pattern_type.1ea) = value_param_pattern [symbolic = %self.param_patt.loc11_13.2 (constants.%self.param_patt.5cc)] +// CHECK:STDOUT: %self.patt.loc11_13.1: @IntRange.as.Iterate.impl.Next.%pattern_type.loc11_13 (%pattern_type.1ea) = at_binding_pattern self, %self.param_patt.loc11_13.1 [symbolic = %self.patt.loc11_13.2 (constants.%self.patt.13b)] +// CHECK:STDOUT: %cursor.param_patt.loc11_25.1: @IntRange.as.Iterate.impl.Next.%pattern_type.loc11_25 (%pattern_type.833) = value_param_pattern [symbolic = %cursor.param_patt.loc11_25.2 (constants.%cursor.param_patt.328)] +// CHECK:STDOUT: %cursor.patt.loc11_25.1: @IntRange.as.Iterate.impl.Next.%pattern_type.loc11_25 (%pattern_type.833) = at_binding_pattern cursor, %cursor.param_patt.loc11_25.1 [symbolic = %cursor.patt.loc11_25.2 (constants.%cursor.patt.652)] +// CHECK:STDOUT: %return.param_patt.loc11_69.1: @IntRange.as.Iterate.impl.Next.%pattern_type.loc11_69 (%pattern_type.b38) = out_param_pattern [symbolic = %return.param_patt.loc11_69.2 (constants.%return.param_patt.4bb)] +// CHECK:STDOUT: %return.patt.loc11_41.1: @IntRange.as.Iterate.impl.Next.%pattern_type.loc11_69 (%pattern_type.b38) = return_slot_pattern %return.param_patt.loc11_69.1, %Optional.loc11_69.2 [symbolic = %return.patt.loc11_41.2 (constants.%return.patt.427)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Core.ref.loc11_44: = name_ref Core, imports.%Core [concrete = imports.%Core] // CHECK:STDOUT: %Optional.ref.loc11: %Optional.type = name_ref Optional, imports.%Core.Optional [concrete = constants.%Optional.generic] @@ -380,6 +407,7 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @IntRange(%N.loc4_17.2: Core.IntLiteral) { +// CHECK:STDOUT: %N.patt.loc4_17.2: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_17.2 (constants.%N.patt)] // CHECK:STDOUT: %N.loc4_17.1: Core.IntLiteral = symbolic_binding N, 0 [symbolic = %N.loc4_17.1 (constants.%N)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -387,19 +415,22 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %IntRange.Make: @IntRange.%IntRange.Make.type (%IntRange.Make.type.522) = struct_value () [symbolic = %IntRange.Make (constants.%IntRange.Make.8ef)] // CHECK:STDOUT: %Int: type = class_type @Int, @Int(%N.loc4_17.1) [symbolic = %Int (constants.%Int.67af24.1)] // CHECK:STDOUT: %require_complete: = require_complete_type %Int [symbolic = %require_complete (constants.%require_complete.4dfb92.1)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Int [symbolic = %pattern_type (constants.%pattern_type.142cb7.1)] +// CHECK:STDOUT: %start.patt: @IntRange.%pattern_type (%pattern_type.142cb7.1) = ref_binding_pattern start [symbolic = %start.patt (constants.%start.patt.477)] // CHECK:STDOUT: %IntRange: type = class_type @IntRange, @IntRange(%N.loc4_17.1) [symbolic = %IntRange (constants.%IntRange.2c4)] // CHECK:STDOUT: %IntRange.elem: type = unbound_element_type %IntRange, %Int [symbolic = %IntRange.elem (constants.%IntRange.elem.bed)] +// CHECK:STDOUT: %end.patt: @IntRange.%pattern_type (%pattern_type.142cb7.1) = ref_binding_pattern end [symbolic = %end.patt (constants.%end.patt.535)] // CHECK:STDOUT: %struct_type.start.end: type = struct_type {.start: @IntRange.%Int (%Int.67af24.1), .end: @IntRange.%Int (%Int.67af24.1)} [symbolic = %struct_type.start.end (constants.%struct_type.start.end.d4d)] // CHECK:STDOUT: %complete_type.loc24_1.2: = complete_type_witness %struct_type.start.end [symbolic = %complete_type.loc24_1.2 (constants.%complete_type.aa1)] // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %IntRange.Make.decl: @IntRange.%IntRange.Make.type (%IntRange.Make.type.522) = fn_decl @IntRange.Make [symbolic = @IntRange.%IntRange.Make (constants.%IntRange.Make.8ef)] { -// CHECK:STDOUT: %start.param_patt: @IntRange.Make.%pattern_type.loc5_16 (%pattern_type.142cb7.1) = value_param_pattern [concrete] -// CHECK:STDOUT: %start.patt: @IntRange.Make.%pattern_type.loc5_16 (%pattern_type.142cb7.1) = at_binding_pattern start, %start.param_patt [concrete] -// CHECK:STDOUT: %end.param_patt: @IntRange.Make.%pattern_type.loc5_16 (%pattern_type.142cb7.1) = value_param_pattern [concrete] -// CHECK:STDOUT: %end.patt: @IntRange.Make.%pattern_type.loc5_16 (%pattern_type.142cb7.1) = at_binding_pattern end, %end.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @IntRange.Make.%pattern_type.loc5_52 (%pattern_type.1ea) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @IntRange.Make.%pattern_type.loc5_52 (%pattern_type.1ea) = return_slot_pattern %return.param_patt, %Self.ref [concrete] +// CHECK:STDOUT: %start.param_patt.loc5_16.1: @IntRange.Make.%pattern_type.loc5_16 (%pattern_type.142cb7.1) = value_param_pattern [symbolic = %start.param_patt.loc5_16.2 (constants.%start.param_patt.b2c)] +// CHECK:STDOUT: %start.patt.loc5_16.1: @IntRange.Make.%pattern_type.loc5_16 (%pattern_type.142cb7.1) = at_binding_pattern start, %start.param_patt.loc5_16.1 [symbolic = %start.patt.loc5_16.2 (constants.%start.patt.9ef)] +// CHECK:STDOUT: %end.param_patt.loc5_34.1: @IntRange.Make.%pattern_type.loc5_16 (%pattern_type.142cb7.1) = value_param_pattern [symbolic = %end.param_patt.loc5_34.2 (constants.%end.param_patt.8ab)] +// CHECK:STDOUT: %end.patt.loc5_34.1: @IntRange.Make.%pattern_type.loc5_16 (%pattern_type.142cb7.1) = at_binding_pattern end, %end.param_patt.loc5_34.1 [symbolic = %end.patt.loc5_34.2 (constants.%end.patt.960)] +// CHECK:STDOUT: %return.param_patt.loc5_52.1: @IntRange.Make.%pattern_type.loc5_52 (%pattern_type.1ea) = out_param_pattern [symbolic = %return.param_patt.loc5_52.2 (constants.%return.param_patt.262)] +// CHECK:STDOUT: %return.patt.loc5_49.1: @IntRange.Make.%pattern_type.loc5_52 (%pattern_type.1ea) = return_slot_pattern %return.param_patt.loc5_52.1, %Self.ref [symbolic = %return.patt.loc5_49.2 (constants.%return.patt.dbf)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc5_52.2: type = specific_constant constants.%IntRange.2c4, @IntRange(constants.%N) [symbolic = %IntRange (constants.%IntRange.2c4)] // CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc5_52.2 [symbolic = %IntRange (constants.%IntRange.2c4)] @@ -474,40 +505,50 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic = %N (constants.%N)] // CHECK:STDOUT: %Int.loc5_28.1: type = class_type @Int, @Int(%N) [symbolic = %Int.loc5_28.1 (constants.%Int.67af24.1)] // CHECK:STDOUT: %pattern_type.loc5_16: type = pattern_type %Int.loc5_28.1 [symbolic = %pattern_type.loc5_16 (constants.%pattern_type.142cb7.1)] +// CHECK:STDOUT: %start.param_patt.loc5_16.2: @IntRange.Make.%pattern_type.loc5_16 (%pattern_type.142cb7.1) = value_param_pattern [symbolic = %start.param_patt.loc5_16.2 (constants.%start.param_patt.b2c)] +// CHECK:STDOUT: %start.patt.loc5_16.2: @IntRange.Make.%pattern_type.loc5_16 (%pattern_type.142cb7.1) = at_binding_pattern start, %start.param_patt.loc5_16.2 [symbolic = %start.patt.loc5_16.2 (constants.%start.patt.9ef)] +// CHECK:STDOUT: %end.param_patt.loc5_34.2: @IntRange.Make.%pattern_type.loc5_16 (%pattern_type.142cb7.1) = value_param_pattern [symbolic = %end.param_patt.loc5_34.2 (constants.%end.param_patt.8ab)] +// CHECK:STDOUT: %end.patt.loc5_34.2: @IntRange.Make.%pattern_type.loc5_16 (%pattern_type.142cb7.1) = at_binding_pattern end, %end.param_patt.loc5_34.2 [symbolic = %end.patt.loc5_34.2 (constants.%end.patt.960)] // CHECK:STDOUT: %IntRange: type = class_type @IntRange, @IntRange(%N) [symbolic = %IntRange (constants.%IntRange.2c4)] // CHECK:STDOUT: %.loc5_52.1: Core.Form = init_form %IntRange [symbolic = %.loc5_52.1 (constants.%.5c3)] // CHECK:STDOUT: %pattern_type.loc5_52: type = pattern_type %IntRange [symbolic = %pattern_type.loc5_52 (constants.%pattern_type.1ea)] +// CHECK:STDOUT: %return.param_patt.loc5_52.2: @IntRange.Make.%pattern_type.loc5_52 (%pattern_type.1ea) = out_param_pattern [symbolic = %return.param_patt.loc5_52.2 (constants.%return.param_patt.262)] +// CHECK:STDOUT: %return.patt.loc5_49.2: @IntRange.Make.%pattern_type.loc5_52 (%pattern_type.1ea) = return_slot_pattern %return.param_patt.loc5_52.2, %IntRange [symbolic = %return.patt.loc5_49.2 (constants.%return.patt.dbf)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc5_16: = require_complete_type %Int.loc5_28.1 [symbolic = %require_complete.loc5_16 (constants.%require_complete.4dfb92.1)] // CHECK:STDOUT: %require_complete.loc5_49: = require_complete_type %IntRange [symbolic = %require_complete.loc5_49 (constants.%require_complete.5d9)] // CHECK:STDOUT: %struct_type.start.end: type = struct_type {.start: @IntRange.Make.%Int.loc5_28.1 (%Int.67af24.1), .end: @IntRange.Make.%Int.loc5_28.1 (%Int.67af24.1)} [symbolic = %struct_type.start.end (constants.%struct_type.start.end.d4d)] -// CHECK:STDOUT: %.loc6_22.2: require_specific_def_type = require_specific_def @Int.as.Copy.impl(%N) [symbolic = %.loc6_22.2 (constants.%.a53)] +// CHECK:STDOUT: %.loc6_22.3: require_specific_def_type = require_specific_def @Int.as.Copy.impl(%N) [symbolic = %.loc6_22.3 (constants.%.a53)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %Int.loc5_28.1, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.df6)] -// CHECK:STDOUT: %Copy.facet.loc6_22.2: %Copy.type = facet_value %Int.loc5_28.1, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc6_22.2 (constants.%Copy.facet.f12)] -// CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.loc6_22.2) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.b83)] -// CHECK:STDOUT: %.loc6_22.3: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %Copy.facet.loc6_22.2 [symbolic = %.loc6_22.3 (constants.%.c60)] -// CHECK:STDOUT: %impl.elem0.loc6_22.2: @IntRange.Make.%.loc6_22.3 (%.c60) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc6_22.2 (constants.%impl.elem0.284)] -// CHECK:STDOUT: %specific_impl_fn.loc6_22.2: = specific_impl_function %impl.elem0.loc6_22.2, @Copy.WithSelf.Op(%Copy.facet.loc6_22.2) [symbolic = %specific_impl_fn.loc6_22.2 (constants.%specific_impl_fn.f9f)] +// CHECK:STDOUT: %Copy.facet.loc6_22.3: %Copy.type = facet_value %Int.loc5_28.1, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc6_22.3 (constants.%Copy.facet.f12)] +// CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.loc6_22.3) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.b83)] +// CHECK:STDOUT: %.loc6_22.4: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %Copy.facet.loc6_22.3 [symbolic = %.loc6_22.4 (constants.%.c60)] +// CHECK:STDOUT: %impl.elem0.loc6_22.2: @IntRange.Make.%.loc6_22.4 (%.c60) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc6_22.2 (constants.%impl.elem0.284)] +// CHECK:STDOUT: %specific_impl_fn.loc6_22.2: = specific_impl_function %impl.elem0.loc6_22.2, @Copy.WithSelf.Op(%Copy.facet.loc6_22.3) [symbolic = %specific_impl_fn.loc6_22.2 (constants.%specific_impl_fn.f9f)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%start.param: @IntRange.Make.%Int.loc5_28.1 (%Int.67af24.1), %end.param: @IntRange.Make.%Int.loc5_28.1 (%Int.67af24.1)) -> out %return.param: @IntRange.Make.%IntRange (%IntRange.2c4) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %start.ref: @IntRange.Make.%Int.loc5_28.1 (%Int.67af24.1) = name_ref start, %start // CHECK:STDOUT: %end.ref: @IntRange.Make.%Int.loc5_28.1 (%Int.67af24.1) = name_ref end, %end // CHECK:STDOUT: %.loc6_39.1: @IntRange.Make.%struct_type.start.end (%struct_type.start.end.d4d) = struct_literal (%start.ref, %end.ref) -// CHECK:STDOUT: %impl.elem0.loc6_22.1: @IntRange.Make.%.loc6_22.3 (%.c60) = impl_witness_access constants.%Copy.lookup_impl_witness.df6, element0 [symbolic = %impl.elem0.loc6_22.2 (constants.%impl.elem0.284)] +// CHECK:STDOUT: %impl.elem0.loc6_22.1: @IntRange.Make.%.loc6_22.4 (%.c60) = impl_witness_access constants.%Copy.lookup_impl_witness.df6, element0 [symbolic = %impl.elem0.loc6_22.2 (constants.%impl.elem0.284)] // CHECK:STDOUT: %bound_method.loc6_22.1: = bound_method %start.ref, %impl.elem0.loc6_22.1 -// CHECK:STDOUT: %Copy.facet.loc6_22.1: %Copy.type = facet_value constants.%Int.67af24.1, (constants.%Copy.lookup_impl_witness.df6) [symbolic = %Copy.facet.loc6_22.2 (constants.%Copy.facet.f12)] -// CHECK:STDOUT: %.loc6_22.1: %Copy.type = converted constants.%Int.67af24.1, %Copy.facet.loc6_22.1 [symbolic = %Copy.facet.loc6_22.2 (constants.%Copy.facet.f12)] +// CHECK:STDOUT: %Copy.facet.loc6_22.1: %Copy.type = facet_value constants.%Int.67af24.1, (constants.%Copy.lookup_impl_witness.df6) [symbolic = %Copy.facet.loc6_22.3 (constants.%Copy.facet.f12)] +// CHECK:STDOUT: %.loc6_22.1: %Copy.type = converted constants.%Int.67af24.1, %Copy.facet.loc6_22.1 [symbolic = %Copy.facet.loc6_22.3 (constants.%Copy.facet.f12)] +// CHECK:STDOUT: %Copy.facet.loc6_22.2: %Copy.type = facet_value constants.%Int.67af24.1, (constants.%Copy.lookup_impl_witness.df6) [symbolic = %Copy.facet.loc6_22.3 (constants.%Copy.facet.f12)] +// CHECK:STDOUT: %.loc6_22.2: %Copy.type = converted constants.%Int.67af24.1, %Copy.facet.loc6_22.2 [symbolic = %Copy.facet.loc6_22.3 (constants.%Copy.facet.f12)] // CHECK:STDOUT: %specific_impl_fn.loc6_22.1: = specific_impl_function %impl.elem0.loc6_22.1, @Copy.WithSelf.Op(constants.%Copy.facet.f12) [symbolic = %specific_impl_fn.loc6_22.2 (constants.%specific_impl_fn.f9f)] // CHECK:STDOUT: %bound_method.loc6_22.2: = bound_method %start.ref, %specific_impl_fn.loc6_22.1 // CHECK:STDOUT: %Copy.WithSelf.Op.call.loc6_22: init @IntRange.Make.%Int.loc5_28.1 (%Int.67af24.1) = call %bound_method.loc6_22.2(%start.ref) // CHECK:STDOUT: %.loc6_39.2: ref @IntRange.Make.%Int.loc5_28.1 (%Int.67af24.1) = class_element_access %return.param, element0 // CHECK:STDOUT: %.loc6_39.3: init @IntRange.Make.%Int.loc5_28.1 (%Int.67af24.1) to %.loc6_39.2 = in_place_init %Copy.WithSelf.Op.call.loc6_22 -// CHECK:STDOUT: %impl.elem0.loc6_36: @IntRange.Make.%.loc6_22.3 (%.c60) = impl_witness_access constants.%Copy.lookup_impl_witness.df6, element0 [symbolic = %impl.elem0.loc6_22.2 (constants.%impl.elem0.284)] +// CHECK:STDOUT: %impl.elem0.loc6_36: @IntRange.Make.%.loc6_22.4 (%.c60) = impl_witness_access constants.%Copy.lookup_impl_witness.df6, element0 [symbolic = %impl.elem0.loc6_22.2 (constants.%impl.elem0.284)] // CHECK:STDOUT: %bound_method.loc6_36.1: = bound_method %end.ref, %impl.elem0.loc6_36 -// CHECK:STDOUT: %Copy.facet.loc6_36: %Copy.type = facet_value constants.%Int.67af24.1, (constants.%Copy.lookup_impl_witness.df6) [symbolic = %Copy.facet.loc6_22.2 (constants.%Copy.facet.f12)] -// CHECK:STDOUT: %.loc6_36: %Copy.type = converted constants.%Int.67af24.1, %Copy.facet.loc6_36 [symbolic = %Copy.facet.loc6_22.2 (constants.%Copy.facet.f12)] +// CHECK:STDOUT: %Copy.facet.loc6_36.1: %Copy.type = facet_value constants.%Int.67af24.1, (constants.%Copy.lookup_impl_witness.df6) [symbolic = %Copy.facet.loc6_22.3 (constants.%Copy.facet.f12)] +// CHECK:STDOUT: %.loc6_36.1: %Copy.type = converted constants.%Int.67af24.1, %Copy.facet.loc6_36.1 [symbolic = %Copy.facet.loc6_22.3 (constants.%Copy.facet.f12)] +// CHECK:STDOUT: %Copy.facet.loc6_36.2: %Copy.type = facet_value constants.%Int.67af24.1, (constants.%Copy.lookup_impl_witness.df6) [symbolic = %Copy.facet.loc6_22.3 (constants.%Copy.facet.f12)] +// CHECK:STDOUT: %.loc6_36.2: %Copy.type = converted constants.%Int.67af24.1, %Copy.facet.loc6_36.2 [symbolic = %Copy.facet.loc6_22.3 (constants.%Copy.facet.f12)] // CHECK:STDOUT: %specific_impl_fn.loc6_36: = specific_impl_function %impl.elem0.loc6_36, @Copy.WithSelf.Op(constants.%Copy.facet.f12) [symbolic = %specific_impl_fn.loc6_22.2 (constants.%specific_impl_fn.f9f)] // CHECK:STDOUT: %bound_method.loc6_36.2: = bound_method %end.ref, %specific_impl_fn.loc6_36 // CHECK:STDOUT: %Copy.WithSelf.Op.call.loc6_36: init @IntRange.Make.%Int.loc5_28.1 (%Int.67af24.1) = call %bound_method.loc6_36.2(%end.ref) @@ -523,21 +564,25 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic = %N (constants.%N)] // CHECK:STDOUT: %IntRange: type = class_type @IntRange, @IntRange(%N) [symbolic = %IntRange (constants.%IntRange.2c4)] // CHECK:STDOUT: %pattern_type.loc10_18: type = pattern_type %IntRange [symbolic = %pattern_type.loc10_18 (constants.%pattern_type.1ea)] +// CHECK:STDOUT: %self.param_patt.loc10_18.2: @IntRange.as.Iterate.impl.NewCursor.%pattern_type.loc10_18 (%pattern_type.1ea) = value_param_pattern [symbolic = %self.param_patt.loc10_18.2 (constants.%self.param_patt.5cc)] +// CHECK:STDOUT: %self.patt.loc10_18.2: @IntRange.as.Iterate.impl.NewCursor.%pattern_type.loc10_18 (%pattern_type.1ea) = at_binding_pattern self, %self.param_patt.loc10_18.2 [symbolic = %self.patt.loc10_18.2 (constants.%self.patt.13b)] // CHECK:STDOUT: %Int.loc10_37.1: type = class_type @Int, @Int(%N) [symbolic = %Int.loc10_37.1 (constants.%Int.67af24.1)] // CHECK:STDOUT: %.loc10_37.1: Core.Form = init_form %Int.loc10_37.1 [symbolic = %.loc10_37.1 (constants.%.df5d8d.1)] // CHECK:STDOUT: %pattern_type.loc10_37: type = pattern_type %Int.loc10_37.1 [symbolic = %pattern_type.loc10_37 (constants.%pattern_type.142cb7.1)] +// CHECK:STDOUT: %return.param_patt.loc10_37.2: @IntRange.as.Iterate.impl.NewCursor.%pattern_type.loc10_37 (%pattern_type.142cb7.1) = out_param_pattern [symbolic = %return.param_patt.loc10_37.2 (constants.%return.param_patt.5a2679.1)] +// CHECK:STDOUT: %return.patt.loc10_24.2: @IntRange.as.Iterate.impl.NewCursor.%pattern_type.loc10_37 (%pattern_type.142cb7.1) = return_slot_pattern %return.param_patt.loc10_37.2, %Int.loc10_37.1 [symbolic = %return.patt.loc10_24.2 (constants.%return.patt.434)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc10_18: = require_complete_type %IntRange [symbolic = %require_complete.loc10_18 (constants.%require_complete.5d9)] // CHECK:STDOUT: %IntRange.elem: type = unbound_element_type %IntRange, %Int.loc10_37.1 [symbolic = %IntRange.elem (constants.%IntRange.elem.bed)] // CHECK:STDOUT: %require_complete.loc10_52: = require_complete_type %Int.loc10_37.1 [symbolic = %require_complete.loc10_52 (constants.%require_complete.4dfb92.1)] -// CHECK:STDOUT: %.loc10_52.4: require_specific_def_type = require_specific_def @Int.as.Copy.impl(%N) [symbolic = %.loc10_52.4 (constants.%.a53)] +// CHECK:STDOUT: %.loc10_52.5: require_specific_def_type = require_specific_def @Int.as.Copy.impl(%N) [symbolic = %.loc10_52.5 (constants.%.a53)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %Int.loc10_37.1, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.df6)] -// CHECK:STDOUT: %Copy.facet.loc10_52.2: %Copy.type = facet_value %Int.loc10_37.1, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc10_52.2 (constants.%Copy.facet.f12)] -// CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.loc10_52.2) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.b83)] -// CHECK:STDOUT: %.loc10_52.5: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %Copy.facet.loc10_52.2 [symbolic = %.loc10_52.5 (constants.%.c60)] -// CHECK:STDOUT: %impl.elem0.loc10_52.2: @IntRange.as.Iterate.impl.NewCursor.%.loc10_52.5 (%.c60) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc10_52.2 (constants.%impl.elem0.284)] -// CHECK:STDOUT: %specific_impl_fn.loc10_52.2: = specific_impl_function %impl.elem0.loc10_52.2, @Copy.WithSelf.Op(%Copy.facet.loc10_52.2) [symbolic = %specific_impl_fn.loc10_52.2 (constants.%specific_impl_fn.f9f)] +// CHECK:STDOUT: %Copy.facet.loc10_52.3: %Copy.type = facet_value %Int.loc10_37.1, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc10_52.3 (constants.%Copy.facet.f12)] +// CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.loc10_52.3) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.b83)] +// CHECK:STDOUT: %.loc10_52.6: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %Copy.facet.loc10_52.3 [symbolic = %.loc10_52.6 (constants.%.c60)] +// CHECK:STDOUT: %impl.elem0.loc10_52.2: @IntRange.as.Iterate.impl.NewCursor.%.loc10_52.6 (%.c60) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc10_52.2 (constants.%impl.elem0.284)] +// CHECK:STDOUT: %specific_impl_fn.loc10_52.2: = specific_impl_function %impl.elem0.loc10_52.2, @Copy.WithSelf.Op(%Copy.facet.loc10_52.3) [symbolic = %specific_impl_fn.loc10_52.2 (constants.%specific_impl_fn.f9f)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @IntRange.as.Iterate.impl.NewCursor.%IntRange (%IntRange.2c4)) -> out %return.param: @IntRange.as.Iterate.impl.NewCursor.%Int.loc10_37.1 (%Int.67af24.1) { // CHECK:STDOUT: !entry: @@ -545,10 +590,12 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %start.ref: @IntRange.as.Iterate.impl.NewCursor.%IntRange.elem (%IntRange.elem.bed) = name_ref start, @IntRange.%.loc22 [concrete = @IntRange.%.loc22] // CHECK:STDOUT: %.loc10_52.1: ref @IntRange.as.Iterate.impl.NewCursor.%Int.loc10_37.1 (%Int.67af24.1) = class_element_access %self.ref, element0 // CHECK:STDOUT: %.loc10_52.2: @IntRange.as.Iterate.impl.NewCursor.%Int.loc10_37.1 (%Int.67af24.1) = acquire_value %.loc10_52.1 -// CHECK:STDOUT: %impl.elem0.loc10_52.1: @IntRange.as.Iterate.impl.NewCursor.%.loc10_52.5 (%.c60) = impl_witness_access constants.%Copy.lookup_impl_witness.df6, element0 [symbolic = %impl.elem0.loc10_52.2 (constants.%impl.elem0.284)] +// CHECK:STDOUT: %impl.elem0.loc10_52.1: @IntRange.as.Iterate.impl.NewCursor.%.loc10_52.6 (%.c60) = impl_witness_access constants.%Copy.lookup_impl_witness.df6, element0 [symbolic = %impl.elem0.loc10_52.2 (constants.%impl.elem0.284)] // CHECK:STDOUT: %bound_method.loc10_52.1: = bound_method %.loc10_52.2, %impl.elem0.loc10_52.1 -// CHECK:STDOUT: %Copy.facet.loc10_52.1: %Copy.type = facet_value constants.%Int.67af24.1, (constants.%Copy.lookup_impl_witness.df6) [symbolic = %Copy.facet.loc10_52.2 (constants.%Copy.facet.f12)] -// CHECK:STDOUT: %.loc10_52.3: %Copy.type = converted constants.%Int.67af24.1, %Copy.facet.loc10_52.1 [symbolic = %Copy.facet.loc10_52.2 (constants.%Copy.facet.f12)] +// CHECK:STDOUT: %Copy.facet.loc10_52.1: %Copy.type = facet_value constants.%Int.67af24.1, (constants.%Copy.lookup_impl_witness.df6) [symbolic = %Copy.facet.loc10_52.3 (constants.%Copy.facet.f12)] +// CHECK:STDOUT: %.loc10_52.3: %Copy.type = converted constants.%Int.67af24.1, %Copy.facet.loc10_52.1 [symbolic = %Copy.facet.loc10_52.3 (constants.%Copy.facet.f12)] +// CHECK:STDOUT: %Copy.facet.loc10_52.2: %Copy.type = facet_value constants.%Int.67af24.1, (constants.%Copy.lookup_impl_witness.df6) [symbolic = %Copy.facet.loc10_52.3 (constants.%Copy.facet.f12)] +// CHECK:STDOUT: %.loc10_52.4: %Copy.type = converted constants.%Int.67af24.1, %Copy.facet.loc10_52.2 [symbolic = %Copy.facet.loc10_52.3 (constants.%Copy.facet.f12)] // CHECK:STDOUT: %specific_impl_fn.loc10_52.1: = specific_impl_function %impl.elem0.loc10_52.1, @Copy.WithSelf.Op(constants.%Copy.facet.f12) [symbolic = %specific_impl_fn.loc10_52.2 (constants.%specific_impl_fn.f9f)] // CHECK:STDOUT: %bound_method.loc10_52.2: = bound_method %.loc10_52.2, %specific_impl_fn.loc10_52.1 // CHECK:STDOUT: %Copy.WithSelf.Op.call: init @IntRange.as.Iterate.impl.NewCursor.%Int.loc10_37.1 (%Int.67af24.1) = call %bound_method.loc10_52.2(%.loc10_52.2) @@ -560,9 +607,13 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic = %N (constants.%N)] // CHECK:STDOUT: %IntRange: type = class_type @IntRange, @IntRange(%N) [symbolic = %IntRange (constants.%IntRange.2c4)] // CHECK:STDOUT: %pattern_type.loc11_13: type = pattern_type %IntRange [symbolic = %pattern_type.loc11_13 (constants.%pattern_type.1ea)] +// CHECK:STDOUT: %self.param_patt.loc11_13.2: @IntRange.as.Iterate.impl.Next.%pattern_type.loc11_13 (%pattern_type.1ea) = value_param_pattern [symbolic = %self.param_patt.loc11_13.2 (constants.%self.param_patt.5cc)] +// CHECK:STDOUT: %self.patt.loc11_13.2: @IntRange.as.Iterate.impl.Next.%pattern_type.loc11_13 (%pattern_type.1ea) = at_binding_pattern self, %self.param_patt.loc11_13.2 [symbolic = %self.patt.loc11_13.2 (constants.%self.patt.13b)] // CHECK:STDOUT: %Int.loc11_37.1: type = class_type @Int, @Int(%N) [symbolic = %Int.loc11_37.1 (constants.%Int.67af24.1)] // CHECK:STDOUT: %ptr.loc11_38.1: type = ptr_type %Int.loc11_37.1 [symbolic = %ptr.loc11_38.1 (constants.%ptr.41e)] // CHECK:STDOUT: %pattern_type.loc11_25: type = pattern_type %ptr.loc11_38.1 [symbolic = %pattern_type.loc11_25 (constants.%pattern_type.833)] +// CHECK:STDOUT: %cursor.param_patt.loc11_25.2: @IntRange.as.Iterate.impl.Next.%pattern_type.loc11_25 (%pattern_type.833) = value_param_pattern [symbolic = %cursor.param_patt.loc11_25.2 (constants.%cursor.param_patt.328)] +// CHECK:STDOUT: %cursor.patt.loc11_25.2: @IntRange.as.Iterate.impl.Next.%pattern_type.loc11_25 (%pattern_type.833) = at_binding_pattern cursor, %cursor.param_patt.loc11_25.2 [symbolic = %cursor.patt.loc11_25.2 (constants.%cursor.patt.652)] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %Int.loc11_37.1, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness.173)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %Int.loc11_37.1, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.df6)] // CHECK:STDOUT: %facet_value: %facet_type.f48 = facet_value %Int.loc11_37.1, (%Destroy.lookup_impl_witness, %Copy.lookup_impl_witness) [symbolic = %facet_value (constants.%facet_value)] @@ -572,6 +623,8 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %Optional.loc11_69.1: type = class_type @Optional, @Optional(%OptionalStorage.facet.loc11_69.1) [symbolic = %Optional.loc11_69.1 (constants.%Optional.5ec)] // CHECK:STDOUT: %.loc11_69.4: Core.Form = init_form %Optional.loc11_69.1 [symbolic = %.loc11_69.4 (constants.%.3f3)] // CHECK:STDOUT: %pattern_type.loc11_69: type = pattern_type %Optional.loc11_69.1 [symbolic = %pattern_type.loc11_69 (constants.%pattern_type.b38)] +// CHECK:STDOUT: %return.param_patt.loc11_69.2: @IntRange.as.Iterate.impl.Next.%pattern_type.loc11_69 (%pattern_type.b38) = out_param_pattern [symbolic = %return.param_patt.loc11_69.2 (constants.%return.param_patt.4bb)] +// CHECK:STDOUT: %return.patt.loc11_41.2: @IntRange.as.Iterate.impl.Next.%pattern_type.loc11_69 (%pattern_type.b38) = return_slot_pattern %return.param_patt.loc11_69.2, %Optional.loc11_69.1 [symbolic = %return.patt.loc11_41.2 (constants.%return.patt.427)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc11_13: = require_complete_type %IntRange [symbolic = %require_complete.loc11_13 (constants.%require_complete.5d9)] @@ -579,12 +632,14 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %require_complete.loc11_41: = require_complete_type %Optional.loc11_69.1 [symbolic = %require_complete.loc11_41 (constants.%require_complete.63c)] // CHECK:STDOUT: %require_complete.loc12: = require_complete_type %Int.loc11_37.1 [symbolic = %require_complete.loc12 (constants.%require_complete.4dfb92.1)] // CHECK:STDOUT: %pattern_type.loc12: type = pattern_type %Int.loc11_37.1 [symbolic = %pattern_type.loc12 (constants.%pattern_type.142cb7.1)] -// CHECK:STDOUT: %.loc12_32.4: require_specific_def_type = require_specific_def @Int.as.Copy.impl(%N) [symbolic = %.loc12_32.4 (constants.%.a53)] -// CHECK:STDOUT: %Copy.facet.loc12_32.2: %Copy.type = facet_value %Int.loc11_37.1, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc12_32.2 (constants.%Copy.facet.f12)] -// CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.loc12_32.2) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.b83)] -// CHECK:STDOUT: %.loc12_32.5: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %Copy.facet.loc12_32.2 [symbolic = %.loc12_32.5 (constants.%.c60)] -// CHECK:STDOUT: %impl.elem0.loc12_32.2: @IntRange.as.Iterate.impl.Next.%.loc12_32.5 (%.c60) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc12_32.2 (constants.%impl.elem0.284)] -// CHECK:STDOUT: %specific_impl_fn.loc12_32.2: = specific_impl_function %impl.elem0.loc12_32.2, @Copy.WithSelf.Op(%Copy.facet.loc12_32.2) [symbolic = %specific_impl_fn.loc12_32.2 (constants.%specific_impl_fn.f9f)] +// CHECK:STDOUT: %value.patt.loc12_16.2: @IntRange.as.Iterate.impl.Next.%pattern_type.loc12 (%pattern_type.142cb7.1) = ref_binding_pattern value [symbolic = %value.patt.loc12_16.2 (constants.%value.patt.505)] +// CHECK:STDOUT: %value.var_patt.loc12_7.2: @IntRange.as.Iterate.impl.Next.%pattern_type.loc12 (%pattern_type.142cb7.1) = var_pattern %value.patt.loc12_16.2 [symbolic = %value.var_patt.loc12_7.2 (constants.%value.var_patt)] +// CHECK:STDOUT: %.loc12_32.5: require_specific_def_type = require_specific_def @Int.as.Copy.impl(%N) [symbolic = %.loc12_32.5 (constants.%.a53)] +// CHECK:STDOUT: %Copy.facet.loc12_32.3: %Copy.type = facet_value %Int.loc11_37.1, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc12_32.3 (constants.%Copy.facet.f12)] +// CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.loc12_32.3) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.b83)] +// CHECK:STDOUT: %.loc12_32.6: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %Copy.facet.loc12_32.3 [symbolic = %.loc12_32.6 (constants.%.c60)] +// CHECK:STDOUT: %impl.elem0.loc12_32.2: @IntRange.as.Iterate.impl.Next.%.loc12_32.6 (%.c60) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc12_32.2 (constants.%impl.elem0.284)] +// CHECK:STDOUT: %specific_impl_fn.loc12_32.2: = specific_impl_function %impl.elem0.loc12_32.2, @Copy.WithSelf.Op(%Copy.facet.loc12_32.3) [symbolic = %specific_impl_fn.loc12_32.2 (constants.%specific_impl_fn.f9f)] // CHECK:STDOUT: %IntRange.elem: type = unbound_element_type %IntRange, %Int.loc11_37.1 [symbolic = %IntRange.elem (constants.%IntRange.elem.bed)] // CHECK:STDOUT: %OrderedWith.type.loc13_17.2: type = facet_type <@OrderedWith, @OrderedWith(%Int.loc11_37.1)> [symbolic = %OrderedWith.type.loc13_17.2 (constants.%OrderedWith.type.6f8)] // CHECK:STDOUT: %require_complete.loc13: = require_complete_type %OrderedWith.type.loc13_17.2 [symbolic = %require_complete.loc13 (constants.%require_complete.4c8)] @@ -598,21 +653,21 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %Int.as.OrderedWith.impl.Less.type: type = fn_type @Int.as.OrderedWith.impl.Less.1, @Int.as.OrderedWith.impl.ab3(%N, %N) [symbolic = %Int.as.OrderedWith.impl.Less.type (constants.%Int.as.OrderedWith.impl.Less.type.f5c)] // CHECK:STDOUT: %Int.as.OrderedWith.impl.Less: @IntRange.as.Iterate.impl.Next.%Int.as.OrderedWith.impl.Less.type (%Int.as.OrderedWith.impl.Less.type.f5c) = struct_value () [symbolic = %Int.as.OrderedWith.impl.Less (constants.%Int.as.OrderedWith.impl.Less.13c)] // CHECK:STDOUT: %Int.as.OrderedWith.impl.Less.specific_fn: = specific_function %Int.as.OrderedWith.impl.Less, @Int.as.OrderedWith.impl.Less.1(%N, %N) [symbolic = %Int.as.OrderedWith.impl.Less.specific_fn (constants.%Int.as.OrderedWith.impl.Less.specific_fn.6ce)] -// CHECK:STDOUT: %.loc14_9.2: require_specific_def_type = require_specific_def @Int.as.Inc.impl(%N) [symbolic = %.loc14_9.2 (constants.%.f62)] +// CHECK:STDOUT: %.loc14_9.3: require_specific_def_type = require_specific_def @Int.as.Inc.impl(%N) [symbolic = %.loc14_9.3 (constants.%.f62)] // CHECK:STDOUT: %Inc.lookup_impl_witness: = lookup_impl_witness %Int.loc11_37.1, @Inc [symbolic = %Inc.lookup_impl_witness (constants.%Inc.lookup_impl_witness)] -// CHECK:STDOUT: %Inc.facet.loc14_9.2: %Inc.type = facet_value %Int.loc11_37.1, (%Inc.lookup_impl_witness) [symbolic = %Inc.facet.loc14_9.2 (constants.%Inc.facet)] -// CHECK:STDOUT: %Inc.WithSelf.Op.type: type = fn_type @Inc.WithSelf.Op, @Inc.WithSelf(%Inc.facet.loc14_9.2) [symbolic = %Inc.WithSelf.Op.type (constants.%Inc.WithSelf.Op.type.36a)] -// CHECK:STDOUT: %.loc14_9.3: type = fn_type_with_self_type %Inc.WithSelf.Op.type, %Inc.facet.loc14_9.2 [symbolic = %.loc14_9.3 (constants.%.952)] -// CHECK:STDOUT: %impl.elem0.loc14_9.2: @IntRange.as.Iterate.impl.Next.%.loc14_9.3 (%.952) = impl_witness_access %Inc.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc14_9.2 (constants.%impl.elem0.7b5)] -// CHECK:STDOUT: %specific_impl_fn.loc14_9.2: = specific_impl_function %impl.elem0.loc14_9.2, @Inc.WithSelf.Op(%Inc.facet.loc14_9.2) [symbolic = %specific_impl_fn.loc14_9.2 (constants.%specific_impl_fn.ed1)] +// CHECK:STDOUT: %Inc.facet.loc14_9.3: %Inc.type = facet_value %Int.loc11_37.1, (%Inc.lookup_impl_witness) [symbolic = %Inc.facet.loc14_9.3 (constants.%Inc.facet)] +// CHECK:STDOUT: %Inc.WithSelf.Op.type: type = fn_type @Inc.WithSelf.Op, @Inc.WithSelf(%Inc.facet.loc14_9.3) [symbolic = %Inc.WithSelf.Op.type (constants.%Inc.WithSelf.Op.type.36a)] +// CHECK:STDOUT: %.loc14_9.4: type = fn_type_with_self_type %Inc.WithSelf.Op.type, %Inc.facet.loc14_9.3 [symbolic = %.loc14_9.4 (constants.%.952)] +// CHECK:STDOUT: %impl.elem0.loc14_9.2: @IntRange.as.Iterate.impl.Next.%.loc14_9.4 (%.952) = impl_witness_access %Inc.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc14_9.2 (constants.%impl.elem0.7b5)] +// CHECK:STDOUT: %specific_impl_fn.loc14_9.2: = specific_impl_function %impl.elem0.loc14_9.2, @Inc.WithSelf.Op(%Inc.facet.loc14_9.3) [symbolic = %specific_impl_fn.loc14_9.2 (constants.%specific_impl_fn.ed1)] // CHECK:STDOUT: %Optional.Some.type: type = fn_type @Optional.Some, @Optional(%OptionalStorage.facet.loc11_69.1) [symbolic = %Optional.Some.type (constants.%Optional.Some.type.422)] // CHECK:STDOUT: %Optional.Some: @IntRange.as.Iterate.impl.Next.%Optional.Some.type (%Optional.Some.type.422) = struct_value () [symbolic = %Optional.Some (constants.%Optional.Some.bcf)] // CHECK:STDOUT: %Optional.Some.specific_fn.loc15_42.2: = specific_function %Optional.Some, @Optional.Some(%OptionalStorage.facet.loc11_69.1) [symbolic = %Optional.Some.specific_fn.loc15_42.2 (constants.%Optional.Some.specific_fn)] -// CHECK:STDOUT: %Destroy.facet.loc12_7.3: %Destroy.type = facet_value %Int.loc11_37.1, (%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.loc12_7.3 (constants.%Destroy.facet.7bb)] -// CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.loc12_7.3) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.8f1)] -// CHECK:STDOUT: %.loc12_7.3: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Destroy.facet.loc12_7.3 [symbolic = %.loc12_7.3 (constants.%.2c6)] -// CHECK:STDOUT: %impl.elem0.loc12_7.3: @IntRange.as.Iterate.impl.Next.%.loc12_7.3 (%.2c6) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc12_7.3 (constants.%impl.elem0.604)] -// CHECK:STDOUT: %specific_impl_fn.loc12_7.3: = specific_impl_function %impl.elem0.loc12_7.3, @Destroy.WithSelf.Op(%Destroy.facet.loc12_7.3) [symbolic = %specific_impl_fn.loc12_7.3 (constants.%specific_impl_fn.693)] +// CHECK:STDOUT: %Destroy.facet.loc12_7.5: %Destroy.type = facet_value %Int.loc11_37.1, (%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.loc12_7.5 (constants.%Destroy.facet.7bb)] +// CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.loc12_7.5) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.8f1)] +// CHECK:STDOUT: %.loc12_7.5: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Destroy.facet.loc12_7.5 [symbolic = %.loc12_7.5 (constants.%.2c6)] +// CHECK:STDOUT: %impl.elem0.loc12_7.3: @IntRange.as.Iterate.impl.Next.%.loc12_7.5 (%.2c6) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc12_7.3 (constants.%impl.elem0.604)] +// CHECK:STDOUT: %specific_impl_fn.loc12_7.3: = specific_impl_function %impl.elem0.loc12_7.3, @Destroy.WithSelf.Op(%Destroy.facet.loc12_7.5) [symbolic = %specific_impl_fn.loc12_7.3 (constants.%specific_impl_fn.693)] // CHECK:STDOUT: %Optional.None.type: type = fn_type @Optional.None, @Optional(%OptionalStorage.facet.loc11_69.1) [symbolic = %Optional.None.type (constants.%Optional.None.type.2aa)] // CHECK:STDOUT: %Optional.None: @IntRange.as.Iterate.impl.Next.%Optional.None.type (%Optional.None.type.2aa) = struct_value () [symbolic = %Optional.None (constants.%Optional.None.fb7)] // CHECK:STDOUT: %Optional.None.specific_fn.loc17_42.2: = specific_function %Optional.None, @Optional.None(%OptionalStorage.facet.loc11_69.1) [symbolic = %Optional.None.specific_fn.loc17_42.2 (constants.%Optional.None.specific_fn)] @@ -620,17 +675,19 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: fn(%self.param: @IntRange.as.Iterate.impl.Next.%IntRange (%IntRange.2c4), %cursor.param: @IntRange.as.Iterate.impl.Next.%ptr.loc11_38.1 (%ptr.41e)) -> out %return.param: @IntRange.as.Iterate.impl.Next.%Optional.loc11_69.1 (%Optional.5ec) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %value.patt: @IntRange.as.Iterate.impl.Next.%pattern_type.loc12 (%pattern_type.142cb7.1) = ref_binding_pattern value [concrete] -// CHECK:STDOUT: %value.var_patt: @IntRange.as.Iterate.impl.Next.%pattern_type.loc12 (%pattern_type.142cb7.1) = var_pattern %value.patt [concrete] +// CHECK:STDOUT: %value.patt.loc12_16.1: @IntRange.as.Iterate.impl.Next.%pattern_type.loc12 (%pattern_type.142cb7.1) = ref_binding_pattern value [symbolic = %value.patt.loc12_16.2 (constants.%value.patt.505)] +// CHECK:STDOUT: %value.var_patt.loc12_7.1: @IntRange.as.Iterate.impl.Next.%pattern_type.loc12 (%pattern_type.142cb7.1) = var_pattern %value.patt.loc12_16.1 [symbolic = %value.var_patt.loc12_7.2 (constants.%value.var_patt)] // CHECK:STDOUT: } -// CHECK:STDOUT: %value.var: ref @IntRange.as.Iterate.impl.Next.%Int.loc11_37.1 (%Int.67af24.1) = var %value.var_patt +// CHECK:STDOUT: %value.var: ref @IntRange.as.Iterate.impl.Next.%Int.loc11_37.1 (%Int.67af24.1) = var %value.var_patt.loc12_7.1 // CHECK:STDOUT: %cursor.ref.loc12: @IntRange.as.Iterate.impl.Next.%ptr.loc11_38.1 (%ptr.41e) = name_ref cursor, %cursor // CHECK:STDOUT: %.loc12_32.1: ref @IntRange.as.Iterate.impl.Next.%Int.loc11_37.1 (%Int.67af24.1) = deref %cursor.ref.loc12 // CHECK:STDOUT: %.loc12_32.2: @IntRange.as.Iterate.impl.Next.%Int.loc11_37.1 (%Int.67af24.1) = acquire_value %.loc12_32.1 -// CHECK:STDOUT: %impl.elem0.loc12_32.1: @IntRange.as.Iterate.impl.Next.%.loc12_32.5 (%.c60) = impl_witness_access constants.%Copy.lookup_impl_witness.df6, element0 [symbolic = %impl.elem0.loc12_32.2 (constants.%impl.elem0.284)] +// CHECK:STDOUT: %impl.elem0.loc12_32.1: @IntRange.as.Iterate.impl.Next.%.loc12_32.6 (%.c60) = impl_witness_access constants.%Copy.lookup_impl_witness.df6, element0 [symbolic = %impl.elem0.loc12_32.2 (constants.%impl.elem0.284)] // CHECK:STDOUT: %bound_method.loc12_32.1: = bound_method %.loc12_32.2, %impl.elem0.loc12_32.1 -// CHECK:STDOUT: %Copy.facet.loc12_32.1: %Copy.type = facet_value constants.%Int.67af24.1, (constants.%Copy.lookup_impl_witness.df6) [symbolic = %Copy.facet.loc12_32.2 (constants.%Copy.facet.f12)] -// CHECK:STDOUT: %.loc12_32.3: %Copy.type = converted constants.%Int.67af24.1, %Copy.facet.loc12_32.1 [symbolic = %Copy.facet.loc12_32.2 (constants.%Copy.facet.f12)] +// CHECK:STDOUT: %Copy.facet.loc12_32.1: %Copy.type = facet_value constants.%Int.67af24.1, (constants.%Copy.lookup_impl_witness.df6) [symbolic = %Copy.facet.loc12_32.3 (constants.%Copy.facet.f12)] +// CHECK:STDOUT: %.loc12_32.3: %Copy.type = converted constants.%Int.67af24.1, %Copy.facet.loc12_32.1 [symbolic = %Copy.facet.loc12_32.3 (constants.%Copy.facet.f12)] +// CHECK:STDOUT: %Copy.facet.loc12_32.2: %Copy.type = facet_value constants.%Int.67af24.1, (constants.%Copy.lookup_impl_witness.df6) [symbolic = %Copy.facet.loc12_32.3 (constants.%Copy.facet.f12)] +// CHECK:STDOUT: %.loc12_32.4: %Copy.type = converted constants.%Int.67af24.1, %Copy.facet.loc12_32.2 [symbolic = %Copy.facet.loc12_32.3 (constants.%Copy.facet.f12)] // CHECK:STDOUT: %specific_impl_fn.loc12_32.1: = specific_impl_function %impl.elem0.loc12_32.1, @Copy.WithSelf.Op(constants.%Copy.facet.f12) [symbolic = %specific_impl_fn.loc12_32.2 (constants.%specific_impl_fn.f9f)] // CHECK:STDOUT: %bound_method.loc12_32.2: = bound_method %.loc12_32.2, %specific_impl_fn.loc12_32.1 // CHECK:STDOUT: %Copy.WithSelf.Op.call: init @IntRange.as.Iterate.impl.Next.%Int.loc11_37.1 (%Int.67af24.1) = call %bound_method.loc12_32.2(%.loc12_32.2) @@ -663,10 +720,12 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: !if.then: // CHECK:STDOUT: %cursor.ref.loc14: @IntRange.as.Iterate.impl.Next.%ptr.loc11_38.1 (%ptr.41e) = name_ref cursor, %cursor // CHECK:STDOUT: %.loc14_11: ref @IntRange.as.Iterate.impl.Next.%Int.loc11_37.1 (%Int.67af24.1) = deref %cursor.ref.loc14 -// CHECK:STDOUT: %impl.elem0.loc14_9.1: @IntRange.as.Iterate.impl.Next.%.loc14_9.3 (%.952) = impl_witness_access constants.%Inc.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc14_9.2 (constants.%impl.elem0.7b5)] +// CHECK:STDOUT: %impl.elem0.loc14_9.1: @IntRange.as.Iterate.impl.Next.%.loc14_9.4 (%.952) = impl_witness_access constants.%Inc.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc14_9.2 (constants.%impl.elem0.7b5)] // CHECK:STDOUT: %bound_method.loc14_9.1: = bound_method %.loc14_11, %impl.elem0.loc14_9.1 -// CHECK:STDOUT: %Inc.facet.loc14_9.1: %Inc.type = facet_value constants.%Int.67af24.1, (constants.%Inc.lookup_impl_witness) [symbolic = %Inc.facet.loc14_9.2 (constants.%Inc.facet)] -// CHECK:STDOUT: %.loc14_9.1: %Inc.type = converted constants.%Int.67af24.1, %Inc.facet.loc14_9.1 [symbolic = %Inc.facet.loc14_9.2 (constants.%Inc.facet)] +// CHECK:STDOUT: %Inc.facet.loc14_9.1: %Inc.type = facet_value constants.%Int.67af24.1, (constants.%Inc.lookup_impl_witness) [symbolic = %Inc.facet.loc14_9.3 (constants.%Inc.facet)] +// CHECK:STDOUT: %.loc14_9.1: %Inc.type = converted constants.%Int.67af24.1, %Inc.facet.loc14_9.1 [symbolic = %Inc.facet.loc14_9.3 (constants.%Inc.facet)] +// CHECK:STDOUT: %Inc.facet.loc14_9.2: %Inc.type = facet_value constants.%Int.67af24.1, (constants.%Inc.lookup_impl_witness) [symbolic = %Inc.facet.loc14_9.3 (constants.%Inc.facet)] +// CHECK:STDOUT: %.loc14_9.2: %Inc.type = converted constants.%Int.67af24.1, %Inc.facet.loc14_9.2 [symbolic = %Inc.facet.loc14_9.3 (constants.%Inc.facet)] // CHECK:STDOUT: %specific_impl_fn.loc14_9.1: = specific_impl_function %impl.elem0.loc14_9.1, @Inc.WithSelf.Op(constants.%Inc.facet) [symbolic = %specific_impl_fn.loc14_9.2 (constants.%specific_impl_fn.ed1)] // CHECK:STDOUT: %bound_method.loc14_9.2: = bound_method %.loc14_11, %specific_impl_fn.loc14_9.1 // CHECK:STDOUT: %Inc.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc14_9.2(%.loc14_11) @@ -679,19 +738,23 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %OptionalStorage.facet.loc15_41: %OptionalStorage.type = facet_value %Int.loc15, (constants.%OptionalStorage.lookup_impl_witness.a32) [symbolic = %OptionalStorage.facet.loc11_69.1 (constants.%OptionalStorage.facet.b99)] // CHECK:STDOUT: %.loc15_41: %OptionalStorage.type = converted %Int.loc15, %OptionalStorage.facet.loc15_41 [symbolic = %OptionalStorage.facet.loc11_69.1 (constants.%OptionalStorage.facet.b99)] // CHECK:STDOUT: %Optional.loc15: type = class_type @Optional, @Optional(constants.%OptionalStorage.facet.b99) [symbolic = %Optional.loc11_69.1 (constants.%Optional.5ec)] -// CHECK:STDOUT: %.loc15_42: @IntRange.as.Iterate.impl.Next.%Optional.Some.type (%Optional.Some.type.422) = specific_constant imports.%Core.import_ref.84b, @Optional(constants.%OptionalStorage.facet.b99) [symbolic = %Optional.Some (constants.%Optional.Some.bcf)] +// CHECK:STDOUT: %.loc15_42: @IntRange.as.Iterate.impl.Next.%Optional.Some.type (%Optional.Some.type.422) = specific_constant imports.%Core.import_ref.84ba, @Optional(constants.%OptionalStorage.facet.b99) [symbolic = %Optional.Some (constants.%Optional.Some.bcf)] // CHECK:STDOUT: %Some.ref: @IntRange.as.Iterate.impl.Next.%Optional.Some.type (%Optional.Some.type.422) = name_ref Some, %.loc15_42 [symbolic = %Optional.Some (constants.%Optional.Some.bcf)] // CHECK:STDOUT: %value.ref.loc15: ref @IntRange.as.Iterate.impl.Next.%Int.loc11_37.1 (%Int.67af24.1) = name_ref value, %value -// CHECK:STDOUT: %OptionalStorage.facet.loc15_53: %OptionalStorage.type = facet_value constants.%Int.67af24.1, (constants.%OptionalStorage.lookup_impl_witness.a32) [symbolic = %OptionalStorage.facet.loc11_69.1 (constants.%OptionalStorage.facet.b99)] -// CHECK:STDOUT: %.loc15_53: %OptionalStorage.type = converted constants.%Int.67af24.1, %OptionalStorage.facet.loc15_53 [symbolic = %OptionalStorage.facet.loc11_69.1 (constants.%OptionalStorage.facet.b99)] +// CHECK:STDOUT: %OptionalStorage.facet.loc15_53.1: %OptionalStorage.type = facet_value constants.%Int.67af24.1, (constants.%OptionalStorage.lookup_impl_witness.a32) [symbolic = %OptionalStorage.facet.loc11_69.1 (constants.%OptionalStorage.facet.b99)] +// CHECK:STDOUT: %.loc15_53.1: %OptionalStorage.type = converted constants.%Int.67af24.1, %OptionalStorage.facet.loc15_53.1 [symbolic = %OptionalStorage.facet.loc11_69.1 (constants.%OptionalStorage.facet.b99)] +// CHECK:STDOUT: %OptionalStorage.facet.loc15_53.2: %OptionalStorage.type = facet_value constants.%Int.67af24.1, (constants.%OptionalStorage.lookup_impl_witness.a32) [symbolic = %OptionalStorage.facet.loc11_69.1 (constants.%OptionalStorage.facet.b99)] +// CHECK:STDOUT: %.loc15_53.2: %OptionalStorage.type = converted constants.%Int.67af24.1, %OptionalStorage.facet.loc15_53.2 [symbolic = %OptionalStorage.facet.loc11_69.1 (constants.%OptionalStorage.facet.b99)] // CHECK:STDOUT: %Optional.Some.specific_fn.loc15_42.1: = specific_function %Some.ref, @Optional.Some(constants.%OptionalStorage.facet.b99) [symbolic = %Optional.Some.specific_fn.loc15_42.2 (constants.%Optional.Some.specific_fn)] // CHECK:STDOUT: %.loc11_69.1: ref @IntRange.as.Iterate.impl.Next.%Optional.loc11_69.1 (%Optional.5ec) = splice_block %return.param {} // CHECK:STDOUT: %.loc15_48: @IntRange.as.Iterate.impl.Next.%Int.loc11_37.1 (%Int.67af24.1) = acquire_value %value.ref.loc15 // CHECK:STDOUT: %Optional.Some.call: init @IntRange.as.Iterate.impl.Next.%Optional.loc11_69.1 (%Optional.5ec) to %.loc11_69.1 = call %Optional.Some.specific_fn.loc15_42.1(%.loc15_48) -// CHECK:STDOUT: %impl.elem0.loc12_7.1: @IntRange.as.Iterate.impl.Next.%.loc12_7.3 (%.2c6) = impl_witness_access constants.%Destroy.lookup_impl_witness.173, element0 [symbolic = %impl.elem0.loc12_7.3 (constants.%impl.elem0.604)] +// CHECK:STDOUT: %impl.elem0.loc12_7.1: @IntRange.as.Iterate.impl.Next.%.loc12_7.5 (%.2c6) = impl_witness_access constants.%Destroy.lookup_impl_witness.173, element0 [symbolic = %impl.elem0.loc12_7.3 (constants.%impl.elem0.604)] // CHECK:STDOUT: %bound_method.loc12_7.1: = bound_method %value.var, %impl.elem0.loc12_7.1 -// CHECK:STDOUT: %Destroy.facet.loc12_7.1: %Destroy.type = facet_value constants.%Int.67af24.1, (constants.%Destroy.lookup_impl_witness.173) [symbolic = %Destroy.facet.loc12_7.3 (constants.%Destroy.facet.7bb)] -// CHECK:STDOUT: %.loc12_7.1: %Destroy.type = converted constants.%Int.67af24.1, %Destroy.facet.loc12_7.1 [symbolic = %Destroy.facet.loc12_7.3 (constants.%Destroy.facet.7bb)] +// CHECK:STDOUT: %Destroy.facet.loc12_7.1: %Destroy.type = facet_value constants.%Int.67af24.1, (constants.%Destroy.lookup_impl_witness.173) [symbolic = %Destroy.facet.loc12_7.5 (constants.%Destroy.facet.7bb)] +// CHECK:STDOUT: %.loc12_7.1: %Destroy.type = converted constants.%Int.67af24.1, %Destroy.facet.loc12_7.1 [symbolic = %Destroy.facet.loc12_7.5 (constants.%Destroy.facet.7bb)] +// CHECK:STDOUT: %Destroy.facet.loc12_7.2: %Destroy.type = facet_value constants.%Int.67af24.1, (constants.%Destroy.lookup_impl_witness.173) [symbolic = %Destroy.facet.loc12_7.5 (constants.%Destroy.facet.7bb)] +// CHECK:STDOUT: %.loc12_7.2: %Destroy.type = converted constants.%Int.67af24.1, %Destroy.facet.loc12_7.2 [symbolic = %Destroy.facet.loc12_7.5 (constants.%Destroy.facet.7bb)] // CHECK:STDOUT: %specific_impl_fn.loc12_7.1: = specific_impl_function %impl.elem0.loc12_7.1, @Destroy.WithSelf.Op(constants.%Destroy.facet.7bb) [symbolic = %specific_impl_fn.loc12_7.3 (constants.%specific_impl_fn.693)] // CHECK:STDOUT: %bound_method.loc12_7.2: = bound_method %value.var, %specific_impl_fn.loc12_7.1 // CHECK:STDOUT: %Destroy.WithSelf.Op.call.loc12_7.1: init %empty_tuple.type = call %bound_method.loc12_7.2(%value.var) @@ -712,10 +775,12 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %Optional.None.specific_fn.loc17_42.1: = specific_function %None.ref, @Optional.None(constants.%OptionalStorage.facet.b99) [symbolic = %Optional.None.specific_fn.loc17_42.2 (constants.%Optional.None.specific_fn)] // CHECK:STDOUT: %.loc11_69.2: ref @IntRange.as.Iterate.impl.Next.%Optional.loc11_69.1 (%Optional.5ec) = splice_block %return.param {} // CHECK:STDOUT: %Optional.None.call: init @IntRange.as.Iterate.impl.Next.%Optional.loc11_69.1 (%Optional.5ec) to %.loc11_69.2 = call %Optional.None.specific_fn.loc17_42.1() -// CHECK:STDOUT: %impl.elem0.loc12_7.2: @IntRange.as.Iterate.impl.Next.%.loc12_7.3 (%.2c6) = impl_witness_access constants.%Destroy.lookup_impl_witness.173, element0 [symbolic = %impl.elem0.loc12_7.3 (constants.%impl.elem0.604)] +// CHECK:STDOUT: %impl.elem0.loc12_7.2: @IntRange.as.Iterate.impl.Next.%.loc12_7.5 (%.2c6) = impl_witness_access constants.%Destroy.lookup_impl_witness.173, element0 [symbolic = %impl.elem0.loc12_7.3 (constants.%impl.elem0.604)] // CHECK:STDOUT: %bound_method.loc12_7.3: = bound_method %value.var, %impl.elem0.loc12_7.2 -// CHECK:STDOUT: %Destroy.facet.loc12_7.2: %Destroy.type = facet_value constants.%Int.67af24.1, (constants.%Destroy.lookup_impl_witness.173) [symbolic = %Destroy.facet.loc12_7.3 (constants.%Destroy.facet.7bb)] -// CHECK:STDOUT: %.loc12_7.2: %Destroy.type = converted constants.%Int.67af24.1, %Destroy.facet.loc12_7.2 [symbolic = %Destroy.facet.loc12_7.3 (constants.%Destroy.facet.7bb)] +// CHECK:STDOUT: %Destroy.facet.loc12_7.3: %Destroy.type = facet_value constants.%Int.67af24.1, (constants.%Destroy.lookup_impl_witness.173) [symbolic = %Destroy.facet.loc12_7.5 (constants.%Destroy.facet.7bb)] +// CHECK:STDOUT: %.loc12_7.3: %Destroy.type = converted constants.%Int.67af24.1, %Destroy.facet.loc12_7.3 [symbolic = %Destroy.facet.loc12_7.5 (constants.%Destroy.facet.7bb)] +// CHECK:STDOUT: %Destroy.facet.loc12_7.4: %Destroy.type = facet_value constants.%Int.67af24.1, (constants.%Destroy.lookup_impl_witness.173) [symbolic = %Destroy.facet.loc12_7.5 (constants.%Destroy.facet.7bb)] +// CHECK:STDOUT: %.loc12_7.4: %Destroy.type = converted constants.%Int.67af24.1, %Destroy.facet.loc12_7.4 [symbolic = %Destroy.facet.loc12_7.5 (constants.%Destroy.facet.7bb)] // CHECK:STDOUT: %specific_impl_fn.loc12_7.2: = specific_impl_function %impl.elem0.loc12_7.2, @Destroy.WithSelf.Op(constants.%Destroy.facet.7bb) [symbolic = %specific_impl_fn.loc12_7.3 (constants.%specific_impl_fn.693)] // CHECK:STDOUT: %bound_method.loc12_7.4: = bound_method %value.var, %specific_impl_fn.loc12_7.2 // CHECK:STDOUT: %Destroy.WithSelf.Op.call.loc12_7.2: init %empty_tuple.type = call %bound_method.loc12_7.4(%value.var) @@ -746,6 +811,7 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @IntRange(constants.%N) { +// CHECK:STDOUT: %N.patt.loc4_17.2 => constants.%N.patt // CHECK:STDOUT: %N.loc4_17.1 => constants.%N // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -753,8 +819,11 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %IntRange.Make => constants.%IntRange.Make.8ef // CHECK:STDOUT: %Int => constants.%Int.67af24.1 // CHECK:STDOUT: %require_complete => constants.%require_complete.4dfb92.1 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.142cb7.1 +// CHECK:STDOUT: %start.patt => constants.%start.patt.477 // CHECK:STDOUT: %IntRange => constants.%IntRange.2c4 // CHECK:STDOUT: %IntRange.elem => constants.%IntRange.elem.bed +// CHECK:STDOUT: %end.patt => constants.%end.patt.535 // CHECK:STDOUT: %struct_type.start.end => constants.%struct_type.start.end.d4d // CHECK:STDOUT: %complete_type.loc24_1.2 => constants.%complete_type.aa1 // CHECK:STDOUT: } @@ -763,9 +832,15 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %N => constants.%N // CHECK:STDOUT: %Int.loc5_28.1 => constants.%Int.67af24.1 // CHECK:STDOUT: %pattern_type.loc5_16 => constants.%pattern_type.142cb7.1 +// CHECK:STDOUT: %start.param_patt.loc5_16.2 => constants.%start.param_patt.b2c +// CHECK:STDOUT: %start.patt.loc5_16.2 => constants.%start.patt.9ef +// CHECK:STDOUT: %end.param_patt.loc5_34.2 => constants.%end.param_patt.8ab +// CHECK:STDOUT: %end.patt.loc5_34.2 => constants.%end.patt.960 // CHECK:STDOUT: %IntRange => constants.%IntRange.2c4 // CHECK:STDOUT: %.loc5_52.1 => constants.%.5c3 // CHECK:STDOUT: %pattern_type.loc5_52 => constants.%pattern_type.1ea +// CHECK:STDOUT: %return.param_patt.loc5_52.2 => constants.%return.param_patt.262 +// CHECK:STDOUT: %return.patt.loc5_49.2 => constants.%return.patt.dbf // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @IntRange.as.Iterate.impl(constants.%N) { @@ -792,18 +867,26 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %N => constants.%N // CHECK:STDOUT: %IntRange => constants.%IntRange.2c4 // CHECK:STDOUT: %pattern_type.loc10_18 => constants.%pattern_type.1ea +// CHECK:STDOUT: %self.param_patt.loc10_18.2 => constants.%self.param_patt.5cc +// CHECK:STDOUT: %self.patt.loc10_18.2 => constants.%self.patt.13b // CHECK:STDOUT: %Int.loc10_37.1 => constants.%Int.67af24.1 // CHECK:STDOUT: %.loc10_37.1 => constants.%.df5d8d.1 // CHECK:STDOUT: %pattern_type.loc10_37 => constants.%pattern_type.142cb7.1 +// CHECK:STDOUT: %return.param_patt.loc10_37.2 => constants.%return.param_patt.5a2679.1 +// CHECK:STDOUT: %return.patt.loc10_24.2 => constants.%return.patt.434 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @IntRange.as.Iterate.impl.Next(constants.%N) { // CHECK:STDOUT: %N => constants.%N // CHECK:STDOUT: %IntRange => constants.%IntRange.2c4 // CHECK:STDOUT: %pattern_type.loc11_13 => constants.%pattern_type.1ea +// CHECK:STDOUT: %self.param_patt.loc11_13.2 => constants.%self.param_patt.5cc +// CHECK:STDOUT: %self.patt.loc11_13.2 => constants.%self.patt.13b // CHECK:STDOUT: %Int.loc11_37.1 => constants.%Int.67af24.1 // CHECK:STDOUT: %ptr.loc11_38.1 => constants.%ptr.41e // CHECK:STDOUT: %pattern_type.loc11_25 => constants.%pattern_type.833 +// CHECK:STDOUT: %cursor.param_patt.loc11_25.2 => constants.%cursor.param_patt.328 +// CHECK:STDOUT: %cursor.patt.loc11_25.2 => constants.%cursor.patt.652 // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%Destroy.lookup_impl_witness.173 // CHECK:STDOUT: %Copy.lookup_impl_witness => constants.%Copy.lookup_impl_witness.df6 // CHECK:STDOUT: %facet_value => constants.%facet_value @@ -813,9 +896,12 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %Optional.loc11_69.1 => constants.%Optional.5ec // CHECK:STDOUT: %.loc11_69.4 => constants.%.3f3 // CHECK:STDOUT: %pattern_type.loc11_69 => constants.%pattern_type.b38 +// CHECK:STDOUT: %return.param_patt.loc11_69.2 => constants.%return.param_patt.4bb +// CHECK:STDOUT: %return.patt.loc11_41.2 => constants.%return.patt.427 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @IntRange(constants.%int_32) { +// CHECK:STDOUT: %N.patt.loc4_17.2 => constants.%N.patt // CHECK:STDOUT: %N.loc4_17.1 => constants.%int_32 // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -823,8 +909,11 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %IntRange.Make => constants.%IntRange.Make.9ef // CHECK:STDOUT: %Int => constants.%i32 // CHECK:STDOUT: %require_complete => constants.%complete_type.f8a +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.6b6 +// CHECK:STDOUT: %start.patt => constants.%start.patt.c23 // CHECK:STDOUT: %IntRange => constants.%IntRange.bbd // CHECK:STDOUT: %IntRange.elem => constants.%IntRange.elem.6b1 +// CHECK:STDOUT: %end.patt => constants.%end.patt.46f // CHECK:STDOUT: %struct_type.start.end => constants.%struct_type.start.end.e93 // CHECK:STDOUT: %complete_type.loc24_1.2 => constants.%complete_type.ec7 // CHECK:STDOUT: } @@ -833,19 +922,25 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %N => constants.%int_32 // CHECK:STDOUT: %Int.loc5_28.1 => constants.%i32 // CHECK:STDOUT: %pattern_type.loc5_16 => constants.%pattern_type.6b6 +// CHECK:STDOUT: %start.param_patt.loc5_16.2 => constants.%start.param_patt.619 +// CHECK:STDOUT: %start.patt.loc5_16.2 => constants.%start.patt.304 +// CHECK:STDOUT: %end.param_patt.loc5_34.2 => constants.%end.param_patt.c55 +// CHECK:STDOUT: %end.patt.loc5_34.2 => constants.%end.patt.367 // CHECK:STDOUT: %IntRange => constants.%IntRange.bbd // CHECK:STDOUT: %.loc5_52.1 => constants.%.9fd // CHECK:STDOUT: %pattern_type.loc5_52 => constants.%pattern_type.0f3 +// CHECK:STDOUT: %return.param_patt.loc5_52.2 => constants.%return.param_patt.108 +// CHECK:STDOUT: %return.patt.loc5_49.2 => constants.%return.patt.7d9 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc5_16 => constants.%complete_type.f8a // CHECK:STDOUT: %require_complete.loc5_49 => constants.%complete_type.ec7 // CHECK:STDOUT: %struct_type.start.end => constants.%struct_type.start.end.e93 -// CHECK:STDOUT: %.loc6_22.2 => constants.%.cf6 +// CHECK:STDOUT: %.loc6_22.3 => constants.%.cf6 // CHECK:STDOUT: %Copy.lookup_impl_witness => constants.%Copy.impl_witness.0e0 -// CHECK:STDOUT: %Copy.facet.loc6_22.2 => constants.%Copy.facet.987 +// CHECK:STDOUT: %Copy.facet.loc6_22.3 => constants.%Copy.facet.987 // CHECK:STDOUT: %Copy.WithSelf.Op.type => constants.%Copy.WithSelf.Op.type.d09 -// CHECK:STDOUT: %.loc6_22.3 => constants.%.7a6 +// CHECK:STDOUT: %.loc6_22.4 => constants.%.7a6 // CHECK:STDOUT: %impl.elem0.loc6_22.2 => constants.%Int.as.Copy.impl.Op.4f6 // CHECK:STDOUT: %specific_impl_fn.loc6_22.2 => constants.%Int.as.Copy.impl.Op.specific_fn // CHECK:STDOUT: } @@ -856,6 +951,7 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.dc0: type = pattern_type Core.IntLiteral [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.dc0 = symbolic_binding_pattern y, 0 [symbolic] // CHECK:STDOUT: %y: Core.IntLiteral = symbolic_binding y, 0 [symbolic] // CHECK:STDOUT: %Read.type: type = fn_type @Read [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -864,16 +960,25 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %IntRange.generic: %IntRange.type = struct_value () [concrete] // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %Int.67af24.1: type = class_type @Int, @Int(%N) [symbolic] +// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %struct_type.start.end.d4d: type = struct_type {.start: %Int.67af24.1, .end: %Int.67af24.1} [symbolic] // CHECK:STDOUT: %complete_type.aa1: = complete_type_witness %struct_type.start.end.d4d [symbolic] // CHECK:STDOUT: %IntRange.2c4: type = class_type @IntRange, @IntRange(%N) [symbolic] +// CHECK:STDOUT: %pattern_type.142cb7.1: type = pattern_type %Int.67af24.1 [symbolic] +// CHECK:STDOUT: %end.patt.535: %pattern_type.142cb7.1 = ref_binding_pattern end [symbolic] // CHECK:STDOUT: %IntRange.elem.bed: type = unbound_element_type %IntRange.2c4, %Int.67af24.1 [symbolic] +// CHECK:STDOUT: %start.patt.477: %pattern_type.142cb7.1 = ref_binding_pattern start [symbolic] // CHECK:STDOUT: %require_complete.4dfb92.1: = require_complete_type %Int.67af24.1 [symbolic] // CHECK:STDOUT: %IntRange.Make.type.522: type = fn_type @IntRange.Make, @IntRange(%N) [symbolic] // CHECK:STDOUT: %IntRange.Make.8ef: %IntRange.Make.type.522 = struct_value () [symbolic] // CHECK:STDOUT: %pattern_type.1ea: type = pattern_type %IntRange.2c4 [symbolic] +// CHECK:STDOUT: %return.param_patt.262: %pattern_type.1ea = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.ca9: %pattern_type.1ea = return_slot_pattern %return.param_patt.262, invalid [symbolic] // CHECK:STDOUT: %.5c3: Core.Form = init_form %IntRange.2c4 [symbolic] -// CHECK:STDOUT: %pattern_type.142cb7.1: type = pattern_type %Int.67af24.1 [symbolic] +// CHECK:STDOUT: %end.param_patt.8ab: %pattern_type.142cb7.1 = value_param_pattern [symbolic] +// CHECK:STDOUT: %end.patt.960: %pattern_type.142cb7.1 = at_binding_pattern end, %end.param_patt.8ab [symbolic] +// CHECK:STDOUT: %start.param_patt: %pattern_type.142cb7.1 = value_param_pattern [symbolic] +// CHECK:STDOUT: %start.patt.9ef: %pattern_type.142cb7.1 = at_binding_pattern start, %start.param_patt [symbolic] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %Copy.lookup_impl_witness.df6: = lookup_impl_witness %Int.67af24.1, @Copy [symbolic] // CHECK:STDOUT: %Copy.facet: %Copy.type = facet_value %Int.67af24.1, (%Copy.lookup_impl_witness.df6) [symbolic] @@ -890,10 +995,15 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %complete_type.f8a: = complete_type_witness %i32.builtin [concrete] +// CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %start.patt.c23: %pattern_type.6b6 = ref_binding_pattern start [concrete] // CHECK:STDOUT: %IntRange.elem.6b1: type = unbound_element_type %IntRange.bbd, %i32 [concrete] +// CHECK:STDOUT: %end.patt.46f: %pattern_type.6b6 = ref_binding_pattern end [concrete] // CHECK:STDOUT: %struct_type.start.end.e93: type = struct_type {.start: %i32, .end: %i32} [concrete] // CHECK:STDOUT: %complete_type.ec7: = complete_type_witness %struct_type.start.end.e93 [concrete] // CHECK:STDOUT: %pattern_type.0f3: type = pattern_type %IntRange.bbd [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.0f3 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.0f3 = var_pattern %x.patt [concrete] // CHECK:STDOUT: %Range.type: type = fn_type @Range [concrete] // CHECK:STDOUT: %Range: %Range.type = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] @@ -951,7 +1061,7 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %Read.decl: %Read.type = fn_decl @Read [concrete = constants.%Read] { -// CHECK:STDOUT: %y.patt: %pattern_type.dc0 = symbolic_binding_pattern y, 0 [concrete] +// CHECK:STDOUT: %y.patt.loc4_10.1: %pattern_type.dc0 = symbolic_binding_pattern y, 0 [symbolic = %y.patt.loc4_10.2 (constants.%y.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4: type = splice_block %IntLiteral.ref [concrete = Core.IntLiteral] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -963,6 +1073,7 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @IntRange(imports.%Main.import_ref.6b552a.2: Core.IntLiteral) [from "lib.carbon"] { +// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt (constants.%N.patt)] // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic = %N (constants.%N)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -970,8 +1081,11 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %IntRange.Make: @IntRange.%IntRange.Make.type (%IntRange.Make.type.522) = struct_value () [symbolic = %IntRange.Make (constants.%IntRange.Make.8ef)] // CHECK:STDOUT: %Int: type = class_type @Int, @Int(%N) [symbolic = %Int (constants.%Int.67af24.1)] // CHECK:STDOUT: %require_complete: = require_complete_type %Int [symbolic = %require_complete (constants.%require_complete.4dfb92.1)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Int [symbolic = %pattern_type (constants.%pattern_type.142cb7.1)] +// CHECK:STDOUT: %start.patt: @IntRange.%pattern_type (%pattern_type.142cb7.1) = ref_binding_pattern start [symbolic = %start.patt (constants.%start.patt.477)] // CHECK:STDOUT: %IntRange: type = class_type @IntRange, @IntRange(%N) [symbolic = %IntRange (constants.%IntRange.2c4)] // CHECK:STDOUT: %IntRange.elem: type = unbound_element_type %IntRange, %Int [symbolic = %IntRange.elem (constants.%IntRange.elem.bed)] +// CHECK:STDOUT: %end.patt: @IntRange.%pattern_type (%pattern_type.142cb7.1) = ref_binding_pattern end [symbolic = %end.patt (constants.%end.patt.535)] // CHECK:STDOUT: %struct_type.start.end: type = struct_type {.start: @IntRange.%Int (%Int.67af24.1), .end: @IntRange.%Int (%Int.67af24.1)} [symbolic = %struct_type.start.end (constants.%struct_type.start.end.d4d)] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.start.end [symbolic = %complete_type (constants.%complete_type.aa1)] // CHECK:STDOUT: @@ -987,6 +1101,7 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Read(%y.loc4_10.2: Core.IntLiteral) { +// CHECK:STDOUT: %y.patt.loc4_10.2: %pattern_type.dc0 = symbolic_binding_pattern y, 0 [symbolic = %y.patt.loc4_10.2 (constants.%y.patt)] // CHECK:STDOUT: %y.loc4_10.1: Core.IntLiteral = symbolic_binding y, 0 [symbolic = %y.loc4_10.1 (constants.%y)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -997,8 +1112,8 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: fn() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.0f3 = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.0f3 = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.0f3 = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.0f3 = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %IntRange.bbd = var %x.var_patt // CHECK:STDOUT: %Range.ref: %Range.type = name_ref Range, imports.%Main.Range [concrete = constants.%Range] @@ -1029,9 +1144,15 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic = %N (constants.%N)] // CHECK:STDOUT: %Int: type = class_type @Int, @Int(%N) [symbolic = %Int (constants.%Int.67af24.1)] // CHECK:STDOUT: %pattern_type.1: type = pattern_type %Int [symbolic = %pattern_type.1 (constants.%pattern_type.142cb7.1)] +// CHECK:STDOUT: %start.param_patt: @IntRange.Make.%pattern_type.1 (%pattern_type.142cb7.1) = value_param_pattern [symbolic = %start.param_patt (constants.%start.param_patt)] +// CHECK:STDOUT: %start.patt: @IntRange.Make.%pattern_type.1 (%pattern_type.142cb7.1) = at_binding_pattern start, %start.param_patt [symbolic = %start.patt (constants.%start.patt.9ef)] +// CHECK:STDOUT: %end.param_patt: @IntRange.Make.%pattern_type.1 (%pattern_type.142cb7.1) = value_param_pattern [symbolic = %end.param_patt (constants.%end.param_patt.8ab)] +// CHECK:STDOUT: %end.patt: @IntRange.Make.%pattern_type.1 (%pattern_type.142cb7.1) = at_binding_pattern end, %end.param_patt [symbolic = %end.patt (constants.%end.patt.960)] // CHECK:STDOUT: %IntRange: type = class_type @IntRange, @IntRange(%N) [symbolic = %IntRange (constants.%IntRange.2c4)] // CHECK:STDOUT: %.1: Core.Form = init_form %IntRange [symbolic = %.1 (constants.%.5c3)] // CHECK:STDOUT: %pattern_type.2: type = pattern_type %IntRange [symbolic = %pattern_type.2 (constants.%pattern_type.1ea)] +// CHECK:STDOUT: %return.param_patt: @IntRange.Make.%pattern_type.2 (%pattern_type.1ea) = out_param_pattern [symbolic = %return.param_patt (constants.%return.param_patt.262)] +// CHECK:STDOUT: %return.patt: @IntRange.Make.%pattern_type.2 (%pattern_type.1ea) = return_slot_pattern %return.param_patt, invalid [symbolic = %return.patt (constants.%return.patt.ca9)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.1: = require_complete_type %Int [symbolic = %require_complete.1 (constants.%require_complete.4dfb92.1)] @@ -1068,10 +1189,12 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Read(constants.%y) { +// CHECK:STDOUT: %y.patt.loc4_10.2 => constants.%y.patt // CHECK:STDOUT: %y.loc4_10.1 => constants.%y // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @IntRange(constants.%N) { +// CHECK:STDOUT: %N.patt => constants.%N.patt // CHECK:STDOUT: %N => constants.%N // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1079,8 +1202,11 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %IntRange.Make => constants.%IntRange.Make.8ef // CHECK:STDOUT: %Int => constants.%Int.67af24.1 // CHECK:STDOUT: %require_complete => constants.%require_complete.4dfb92.1 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.142cb7.1 +// CHECK:STDOUT: %start.patt => constants.%start.patt.477 // CHECK:STDOUT: %IntRange => constants.%IntRange.2c4 // CHECK:STDOUT: %IntRange.elem => constants.%IntRange.elem.bed +// CHECK:STDOUT: %end.patt => constants.%end.patt.535 // CHECK:STDOUT: %struct_type.start.end => constants.%struct_type.start.end.d4d // CHECK:STDOUT: %complete_type => constants.%complete_type.aa1 // CHECK:STDOUT: } @@ -1089,12 +1215,19 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %N => constants.%N // CHECK:STDOUT: %Int => constants.%Int.67af24.1 // CHECK:STDOUT: %pattern_type.1 => constants.%pattern_type.142cb7.1 +// CHECK:STDOUT: %start.param_patt => constants.%start.param_patt +// CHECK:STDOUT: %start.patt => constants.%start.patt.9ef +// CHECK:STDOUT: %end.param_patt => constants.%end.param_patt.8ab +// CHECK:STDOUT: %end.patt => constants.%end.patt.960 // CHECK:STDOUT: %IntRange => constants.%IntRange.2c4 // CHECK:STDOUT: %.1 => constants.%.5c3 // CHECK:STDOUT: %pattern_type.2 => constants.%pattern_type.1ea +// CHECK:STDOUT: %return.param_patt => constants.%return.param_patt.262 +// CHECK:STDOUT: %return.patt => constants.%return.patt.ca9 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @IntRange(constants.%int_32) { +// CHECK:STDOUT: %N.patt => constants.%N.patt // CHECK:STDOUT: %N => constants.%int_32 // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1102,8 +1235,11 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %IntRange.Make => constants.%IntRange.Make.9ef // CHECK:STDOUT: %Int => constants.%i32 // CHECK:STDOUT: %require_complete => constants.%complete_type.f8a +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.6b6 +// CHECK:STDOUT: %start.patt => constants.%start.patt.c23 // CHECK:STDOUT: %IntRange => constants.%IntRange.bbd // CHECK:STDOUT: %IntRange.elem => constants.%IntRange.elem.6b1 +// CHECK:STDOUT: %end.patt => constants.%end.patt.46f // CHECK:STDOUT: %struct_type.start.end => constants.%struct_type.start.end.e93 // CHECK:STDOUT: %complete_type => constants.%complete_type.ec7 // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/for/basic.carbon b/toolchain/check/testdata/for/basic.carbon index 3dd5225fc6f6..357b4f6ba106 100644 --- a/toolchain/check/testdata/for/basic.carbon +++ b/toolchain/check/testdata/for/basic.carbon @@ -92,6 +92,7 @@ fn Run() { // CHECK:STDOUT: %Body: %Body.type = struct_value () [concrete] // CHECK:STDOUT: %AfterLoop.type: type = fn_type @AfterLoop [concrete] // CHECK:STDOUT: %AfterLoop: %AfterLoop.type = struct_value () [concrete] +// CHECK:STDOUT: %_.patt: %pattern_type.cb1 = value_binding_pattern _ [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %TrivialRange.val: %TrivialRange = struct_value () [concrete] // CHECK:STDOUT: %.50e: ref %TrivialRange = temporary invalid, %TrivialRange.val [concrete] @@ -123,7 +124,7 @@ fn Run() { // CHECK:STDOUT: fn @Run() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt: %pattern_type.cb1 = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt: %pattern_type.cb1 = value_binding_pattern _ [concrete = constants.%_.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc18_18.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] // CHECK:STDOUT: %TrivialRange.ref: type = name_ref TrivialRange, file.%TrivialRange.decl [concrete = constants.%TrivialRange] @@ -168,14 +169,14 @@ fn Run() { // CHECK:STDOUT: %bound_method.loc18_35.4: = bound_method %.loc18_35.2, %Optional.Get.specific_fn // CHECK:STDOUT: %.loc18_35.8: %Optional.21a = acquire_value %.loc18_35.2 // CHECK:STDOUT: %Optional.Get.call: init %empty_tuple.type = call %bound_method.loc18_35.4(%.loc18_35.8) -// CHECK:STDOUT: %.loc18_12.1: type = splice_block %.loc18_12.3 [concrete = constants.%empty_tuple.type] { -// CHECK:STDOUT: %.loc18_12.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc18_12.3: type = converted %.loc18_12.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] -// CHECK:STDOUT: } // CHECK:STDOUT: %.loc18_35.9: ref %empty_tuple.type = temporary_storage // CHECK:STDOUT: %.loc18_35.10: ref %empty_tuple.type = temporary %.loc18_35.9, %Optional.Get.call // CHECK:STDOUT: %tuple: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc18_35.11: %empty_tuple.type = converted %Optional.Get.call, %tuple [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc18_12.1: type = splice_block %.loc18_12.3 [concrete = constants.%empty_tuple.type] { +// CHECK:STDOUT: %.loc18_12.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc18_12.3: type = converted %.loc18_12.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] +// CHECK:STDOUT: } // CHECK:STDOUT: %_: %empty_tuple.type = value_binding _, %.loc18_35.11 // CHECK:STDOUT: %Body.ref: %Body.type = name_ref Body, file.%Body.decl [concrete = constants.%Body] // CHECK:STDOUT: %Body.call: init %empty_tuple.type = call %Body.ref() diff --git a/toolchain/check/testdata/for/pattern.carbon b/toolchain/check/testdata/for/pattern.carbon index f5b530ce5252..332aa9366275 100644 --- a/toolchain/check/testdata/for/pattern.carbon +++ b/toolchain/check/testdata/for/pattern.carbon @@ -128,6 +128,7 @@ fn Run() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Body: %Body.type = struct_value () [concrete] // CHECK:STDOUT: %ptr.c28: type = ptr_type %empty_struct_type [concrete] +// CHECK:STDOUT: %c.patt.aa8: %pattern_type.98b = value_binding_pattern c [concrete] // CHECK:STDOUT: %EmptyRange.type: type = generic_class_type @EmptyRange [concrete] // CHECK:STDOUT: %EmptyRange.generic: %EmptyRange.type = struct_value () [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -199,7 +200,7 @@ fn Run() { // CHECK:STDOUT: fn @Run() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.98b = value_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = value_binding_pattern c [concrete = constants.%c.patt.aa8] // CHECK:STDOUT: } // CHECK:STDOUT: %EmptyRange.ref: %EmptyRange.type = name_ref EmptyRange, imports.%Main.EmptyRange [concrete = constants.%EmptyRange.generic] // CHECK:STDOUT: %C.ref.loc10_27: type = name_ref C, imports.%Main.C [concrete = constants.%C] @@ -252,9 +253,9 @@ fn Run() { // CHECK:STDOUT: %.loc10_36.8: ref %C = temporary_storage // CHECK:STDOUT: %.loc10_36.9: %Optional.f82 = acquire_value %.loc10_36.2 // CHECK:STDOUT: %Optional.Get.call: init %C to %.loc10_36.8 = call %bound_method.loc10_36.6(%.loc10_36.9) -// CHECK:STDOUT: %C.ref.loc10_11: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %.loc10_36.10: ref %C = temporary %.loc10_36.8, %Optional.Get.call // CHECK:STDOUT: %.loc10_36.11: %C = acquire_value %.loc10_36.10 +// CHECK:STDOUT: %C.ref.loc10_11: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %c: %C = value_binding c, %.loc10_36.11 // CHECK:STDOUT: %Body.ref: %Body.type = name_ref Body, file.%Body.decl [concrete = constants.%Body] // CHECK:STDOUT: %c.ref: %C = name_ref c, %c @@ -308,6 +309,8 @@ fn Run() { // CHECK:STDOUT: %Body: %Body.type = struct_value () [concrete] // CHECK:STDOUT: %ptr.c28: type = ptr_type %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt.dd0: %pattern_type.98b = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt.dd0 [concrete] // CHECK:STDOUT: %EmptyRange.type: type = generic_class_type @EmptyRange [concrete] // CHECK:STDOUT: %EmptyRange.generic: %EmptyRange.type = struct_value () [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -379,8 +382,8 @@ fn Run() { // CHECK:STDOUT: fn @Run() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete = constants.%c.patt.dd0] +// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %EmptyRange.ref: %EmptyRange.type = name_ref EmptyRange, imports.%Main.EmptyRange [concrete = constants.%EmptyRange.generic] // CHECK:STDOUT: %C.ref.loc10_31: type = name_ref C, imports.%Main.C [concrete = constants.%C] @@ -486,8 +489,11 @@ fn Run() { // CHECK:STDOUT: %Body.type: type = fn_type @Body [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Body: %Body.type = struct_value () [concrete] +// CHECK:STDOUT: %a.patt.9e2: %pattern_type.831 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %b.patt.0c3: %pattern_type.831 = value_binding_pattern b [concrete] // CHECK:STDOUT: %tuple.type.784: type = tuple_type (bool, bool) [concrete] // CHECK:STDOUT: %pattern_type.860: type = pattern_type %tuple.type.784 [concrete] +// CHECK:STDOUT: %.d8a: %pattern_type.860 = tuple_pattern (%a.patt.9e2, %b.patt.0c3) [concrete] // CHECK:STDOUT: %EmptyRange.type: type = generic_class_type @EmptyRange [concrete] // CHECK:STDOUT: %EmptyRange.generic: %EmptyRange.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] @@ -569,9 +575,9 @@ fn Run() { // CHECK:STDOUT: fn @Run() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.831 = value_binding_pattern a [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.831 = value_binding_pattern b [concrete] -// CHECK:STDOUT: %.loc10_25: %pattern_type.860 = tuple_pattern (%a.patt, %b.patt) [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.831 = value_binding_pattern a [concrete = constants.%a.patt.9e2] +// CHECK:STDOUT: %b.patt: %pattern_type.831 = value_binding_pattern b [concrete = constants.%b.patt.0c3] +// CHECK:STDOUT: %.loc10_25: %pattern_type.860 = tuple_pattern (%a.patt, %b.patt) [concrete = constants.%.d8a] // CHECK:STDOUT: } // CHECK:STDOUT: %EmptyRange.ref: %EmptyRange.type = name_ref EmptyRange, imports.%Main.EmptyRange [concrete = constants.%EmptyRange.generic] // CHECK:STDOUT: %.loc10_42: type = type_literal bool [concrete = bool] @@ -629,11 +635,11 @@ fn Run() { // CHECK:STDOUT: %.loc10_61.10: ref %tuple.type.784 = temporary %.loc10_61.8, %Optional.Get.call // CHECK:STDOUT: %tuple.elem0: ref bool = tuple_access %.loc10_61.10, element0 // CHECK:STDOUT: %tuple.elem1: ref bool = tuple_access %.loc10_61.10, element1 -// CHECK:STDOUT: %.loc10_12: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc10_61.11: bool = acquire_value %tuple.elem0 +// CHECK:STDOUT: %.loc10_12: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %a: bool = value_binding a, %.loc10_61.11 -// CHECK:STDOUT: %.loc10_21: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc10_61.12: bool = acquire_value %tuple.elem1 +// CHECK:STDOUT: %.loc10_21: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %b: bool = value_binding b, %.loc10_61.12 // CHECK:STDOUT: %Body.ref: %Body.type = name_ref Body, file.%Body.decl [concrete = constants.%Body] // CHECK:STDOUT: %a.ref: bool = name_ref a, %a @@ -687,8 +693,11 @@ fn Run() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Body: %Body.type = struct_value () [concrete] // CHECK:STDOUT: %ptr.c28: type = ptr_type %empty_struct_type [concrete] +// CHECK:STDOUT: %a.patt.1ad: %pattern_type.98b = value_binding_pattern a [concrete] +// CHECK:STDOUT: %b.patt.29b: %pattern_type.98b = value_binding_pattern b [concrete] // CHECK:STDOUT: %tuple.type.748: type = tuple_type (%C, %C) [concrete] // CHECK:STDOUT: %pattern_type.8b4: type = pattern_type %tuple.type.748 [concrete] +// CHECK:STDOUT: %.d56: %pattern_type.8b4 = tuple_pattern (%a.patt.1ad, %b.patt.29b) [concrete] // CHECK:STDOUT: %EmptyRange.type: type = generic_class_type @EmptyRange [concrete] // CHECK:STDOUT: %EmptyRange.generic: %EmptyRange.type = struct_value () [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -769,9 +778,9 @@ fn Run() { // CHECK:STDOUT: fn @Run() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.98b = value_binding_pattern a [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.98b = value_binding_pattern b [concrete] -// CHECK:STDOUT: %.loc10_19: %pattern_type.8b4 = tuple_pattern (%a.patt, %b.patt) [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.98b = value_binding_pattern a [concrete = constants.%a.patt.1ad] +// CHECK:STDOUT: %b.patt: %pattern_type.98b = value_binding_pattern b [concrete = constants.%b.patt.29b] +// CHECK:STDOUT: %.loc10_19: %pattern_type.8b4 = tuple_pattern (%a.patt, %b.patt) [concrete = constants.%.d56] // CHECK:STDOUT: } // CHECK:STDOUT: %EmptyRange.ref: %EmptyRange.type = name_ref EmptyRange, imports.%Main.EmptyRange [concrete = constants.%EmptyRange.generic] // CHECK:STDOUT: %C.ref.loc10_36: type = name_ref C, imports.%Main.C [concrete = constants.%C] @@ -829,11 +838,11 @@ fn Run() { // CHECK:STDOUT: %.loc10_49.10: ref %tuple.type.748 = temporary %.loc10_49.8, %Optional.Get.call // CHECK:STDOUT: %tuple.elem0: ref %C = tuple_access %.loc10_49.10, element0 // CHECK:STDOUT: %tuple.elem1: ref %C = tuple_access %.loc10_49.10, element1 -// CHECK:STDOUT: %C.ref.loc10_12: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %.loc10_49.11: %C = acquire_value %tuple.elem0 +// CHECK:STDOUT: %C.ref.loc10_12: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %a: %C = value_binding a, %.loc10_49.11 -// CHECK:STDOUT: %C.ref.loc10_18: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %.loc10_49.12: %C = acquire_value %tuple.elem1 +// CHECK:STDOUT: %C.ref.loc10_18: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %b: %C = value_binding b, %.loc10_49.12 // CHECK:STDOUT: %Body.ref: %Body.type = name_ref Body, file.%Body.decl [concrete = constants.%Body] // CHECK:STDOUT: %a.ref: %C = name_ref a, %a diff --git a/toolchain/check/testdata/function/builtin/adapted_type.carbon b/toolchain/check/testdata/function/builtin/adapted_type.carbon index df5ff10db7c7..43c3ae5c68d8 100644 --- a/toolchain/check/testdata/function/builtin/adapted_type.carbon +++ b/toolchain/check/testdata/function/builtin/adapted_type.carbon @@ -56,24 +56,38 @@ fn Int(N: MyIntLiteral) -> type = "int.make_type_signed"; // CHECK:STDOUT: constants { // CHECK:STDOUT: %.805: Core.Form = init_form type [concrete] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %return.param_patt.70e: %pattern_type.98f = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.3ae: %pattern_type.98f = return_slot_pattern %return.param_patt.70e, type [concrete] // CHECK:STDOUT: %MakeIntLiteral.type: type = fn_type @MakeIntLiteral [concrete] // CHECK:STDOUT: %MakeIntLiteral: %MakeIntLiteral.type = struct_value () [concrete] // CHECK:STDOUT: %MyIntLiteral: type = class_type @MyIntLiteral [concrete] // CHECK:STDOUT: %complete_type.972: = complete_type_witness Core.IntLiteral [concrete] // CHECK:STDOUT: %pattern_type.129: type = pattern_type %MyIntLiteral [concrete] +// CHECK:STDOUT: %N.param_patt: %pattern_type.129 = value_param_pattern [concrete] +// CHECK:STDOUT: %N.patt: %pattern_type.129 = at_binding_pattern N, %N.param_patt [concrete] // CHECK:STDOUT: %Int.type: type = fn_type @Int [concrete] // CHECK:STDOUT: %Int: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %MyInt32: type = class_type @MyInt32 [concrete] // CHECK:STDOUT: %int_32.be0: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %int_32.80c: %MyIntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32.80c [concrete] +// CHECK:STDOUT: %a.param_patt.c64: %pattern_type.129 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt.3fb: %pattern_type.129 = at_binding_pattern a, %a.param_patt.c64 [concrete] // CHECK:STDOUT: %.6a2: Core.Form = init_form %MyInt32 [concrete] // CHECK:STDOUT: %pattern_type.af4: type = pattern_type %MyInt32 [concrete] +// CHECK:STDOUT: %return.param_patt.cca: %pattern_type.af4 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.5b1: %pattern_type.af4 = return_slot_pattern %return.param_patt.cca, %MyInt32 [concrete] // CHECK:STDOUT: %MyInt32.Make.type: type = fn_type @MyInt32.Make [concrete] // CHECK:STDOUT: %MyInt32.Make: %MyInt32.Make.type = struct_value () [concrete] // CHECK:STDOUT: %complete_type.113: = complete_type_witness %i32.builtin [concrete] +// CHECK:STDOUT: %a.param_patt.c63: %pattern_type.af4 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt.603: %pattern_type.af4 = at_binding_pattern a, %a.param_patt.c63 [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.af4 = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.af4 = at_binding_pattern b, %b.param_patt [concrete] // CHECK:STDOUT: %MyAdd.type: type = fn_type @MyAdd [concrete] // CHECK:STDOUT: %MyAdd: %MyAdd.type = struct_value () [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.af4 = ref_binding_pattern v [concrete] +// CHECK:STDOUT: %v.var_patt: %pattern_type.af4 = var_pattern %v.patt [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_1.004: %MyIntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_1.adf: %MyInt32 = int_value 1 [concrete] @@ -94,8 +108,8 @@ fn Int(N: MyIntLiteral) -> type = "int.make_type_signed"; // CHECK:STDOUT: .v = %v // CHECK:STDOUT: } // CHECK:STDOUT: %MakeIntLiteral.decl: %MakeIntLiteral.type = fn_decl @MakeIntLiteral [concrete = constants.%MakeIntLiteral] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.98f = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern %return.param_patt, %.loc4_24.1 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.98f = out_param_pattern [concrete = constants.%return.param_patt.70e] +// CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern %return.param_patt, %.loc4_24.1 [concrete = constants.%return.patt.3ae] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_24.1: type = type_literal type [concrete = type] // CHECK:STDOUT: %.loc4_24.2: Core.Form = init_form %.loc4_24.1 [concrete = constants.%.805] @@ -109,10 +123,10 @@ fn Int(N: MyIntLiteral) -> type = "int.make_type_signed"; // CHECK:STDOUT: %IntLiteral: type = alias_binding IntLiteral, %.loc5_35.2 [concrete = Core.IntLiteral] // CHECK:STDOUT: %MyIntLiteral.decl: type = class_decl @MyIntLiteral [concrete = constants.%MyIntLiteral] {} {} // CHECK:STDOUT: %Int.decl: %Int.type = fn_decl @Int [concrete = constants.%Int] { -// CHECK:STDOUT: %N.param_patt: %pattern_type.129 = value_param_pattern [concrete] -// CHECK:STDOUT: %N.patt: %pattern_type.129 = at_binding_pattern N, %N.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.98f = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern %return.param_patt, %.loc11_28.1 [concrete] +// CHECK:STDOUT: %N.param_patt: %pattern_type.129 = value_param_pattern [concrete = constants.%N.param_patt] +// CHECK:STDOUT: %N.patt: %pattern_type.129 = at_binding_pattern N, %N.param_patt [concrete = constants.%N.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.98f = out_param_pattern [concrete = constants.%return.param_patt.70e] +// CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern %return.param_patt, %.loc11_28.1 [concrete = constants.%return.patt.3ae] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc11_28.1: type = type_literal type [concrete = type] // CHECK:STDOUT: %.loc11_28.2: Core.Form = init_form %.loc11_28.1 [concrete = constants.%.805] @@ -124,10 +138,10 @@ fn Int(N: MyIntLiteral) -> type = "int.make_type_signed"; // CHECK:STDOUT: } // CHECK:STDOUT: %MyInt32.decl: type = class_decl @MyInt32 [concrete = constants.%MyInt32] {} {} // CHECK:STDOUT: %MyInt32.Make.decl: %MyInt32.Make.type = fn_decl @MyInt32.Make [concrete = constants.%MyInt32.Make] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.129 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.129 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.af4 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.af4 = return_slot_pattern %return.param_patt, %MyInt32.ref.loc19 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.129 = value_param_pattern [concrete = constants.%a.param_patt.c64] +// CHECK:STDOUT: %a.patt: %pattern_type.129 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt.3fb] +// CHECK:STDOUT: %return.param_patt: %pattern_type.af4 = out_param_pattern [concrete = constants.%return.param_patt.cca] +// CHECK:STDOUT: %return.patt: %pattern_type.af4 = return_slot_pattern %return.param_patt, %MyInt32.ref.loc19 [concrete = constants.%return.patt.5b1] // CHECK:STDOUT: } { // CHECK:STDOUT: %MyInt32.ref.loc19: type = name_ref MyInt32, file.%MyInt32.decl [concrete = constants.%MyInt32] // CHECK:STDOUT: %.loc19: Core.Form = init_form %MyInt32.ref.loc19 [concrete = constants.%.6a2] @@ -138,12 +152,12 @@ fn Int(N: MyIntLiteral) -> type = "int.make_type_signed"; // CHECK:STDOUT: %return.loc19: ref %MyInt32 = return_slot %return.param.loc19 // CHECK:STDOUT: } // CHECK:STDOUT: %MyAdd.decl: %MyAdd.type = fn_decl @MyAdd [concrete = constants.%MyAdd] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.af4 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.af4 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.af4 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.af4 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.af4 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.af4 = return_slot_pattern %return.param_patt, %MyInt32.ref.loc21_37 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.af4 = value_param_pattern [concrete = constants.%a.param_patt.c63] +// CHECK:STDOUT: %a.patt: %pattern_type.af4 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt.603] +// CHECK:STDOUT: %b.param_patt: %pattern_type.af4 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.af4 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.af4 = out_param_pattern [concrete = constants.%return.param_patt.cca] +// CHECK:STDOUT: %return.patt: %pattern_type.af4 = return_slot_pattern %return.param_patt, %MyInt32.ref.loc21_37 [concrete = constants.%return.patt.5b1] // CHECK:STDOUT: } { // CHECK:STDOUT: %MyInt32.ref.loc21_37: type = name_ref MyInt32, file.%MyInt32.decl [concrete = constants.%MyInt32] // CHECK:STDOUT: %.loc21: Core.Form = init_form %MyInt32.ref.loc21_37 [concrete = constants.%.6a2] @@ -157,8 +171,8 @@ fn Int(N: MyIntLiteral) -> type = "int.make_type_signed"; // CHECK:STDOUT: %return: ref %MyInt32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %pattern_type.af4 = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: %pattern_type.af4 = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.af4 = ref_binding_pattern v [concrete = constants.%v.patt] +// CHECK:STDOUT: %v.var_patt: %pattern_type.af4 = var_pattern %v.patt [concrete = constants.%v.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %MyInt32 = var %v.var_patt [concrete] // CHECK:STDOUT: %MyInt32.ref: type = name_ref MyInt32, %MyInt32.decl [concrete = constants.%MyInt32] @@ -187,10 +201,10 @@ fn Int(N: MyIntLiteral) -> type = "int.make_type_signed"; // CHECK:STDOUT: %.loc14_32.2: type = converted %Int.call, %.loc14_32.1 [concrete = constants.%i32.builtin] // CHECK:STDOUT: adapt_decl %.loc14_32.2 [concrete] // CHECK:STDOUT: %MyInt32.Make.decl: %MyInt32.Make.type = fn_decl @MyInt32.Make [concrete = constants.%MyInt32.Make] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.129 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.129 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.af4 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.af4 = return_slot_pattern %return.param_patt, %MyInt32.ref.loc19 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.129 = value_param_pattern [concrete = constants.%a.param_patt.c64] +// CHECK:STDOUT: %a.patt: %pattern_type.129 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt.3fb] +// CHECK:STDOUT: %return.param_patt: %pattern_type.af4 = out_param_pattern [concrete = constants.%return.param_patt.cca] +// CHECK:STDOUT: %return.patt: %pattern_type.af4 = return_slot_pattern %return.param_patt, %MyInt32.ref.loc19 [concrete = constants.%return.patt.5b1] // CHECK:STDOUT: } { // CHECK:STDOUT: %MyInt32.ref.loc16: type = name_ref MyInt32, file.%MyInt32.decl [concrete = constants.%MyInt32] // CHECK:STDOUT: %.loc16: Core.Form = init_form %MyInt32.ref.loc16 [concrete = constants.%.6a2] @@ -253,8 +267,12 @@ fn Int(N: MyIntLiteral) -> type = "int.make_type_signed"; // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.129: type = pattern_type %MyIntLiteral [concrete] +// CHECK:STDOUT: %N.param_patt: %pattern_type.129 = value_param_pattern [concrete] +// CHECK:STDOUT: %N.patt: %pattern_type.129 = at_binding_pattern N, %N.param_patt [concrete] // CHECK:STDOUT: %.805: Core.Form = init_form type [concrete] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.98f = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern %return.param_patt, type [concrete] // CHECK:STDOUT: %Int.type: type = fn_type @Int [concrete] // CHECK:STDOUT: %Int: %Int.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -266,10 +284,10 @@ fn Int(N: MyIntLiteral) -> type = "int.make_type_signed"; // CHECK:STDOUT: } // CHECK:STDOUT: %MyIntLiteral.decl: type = class_decl @MyIntLiteral [concrete = constants.%MyIntLiteral] {} {} // CHECK:STDOUT: %Int.decl: %Int.type = fn_decl @Int [concrete = constants.%Int] { -// CHECK:STDOUT: %N.param_patt: %pattern_type.129 = value_param_pattern [concrete] -// CHECK:STDOUT: %N.patt: %pattern_type.129 = at_binding_pattern N, %N.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.98f = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern %return.param_patt, %.loc12_28.1 [concrete] +// CHECK:STDOUT: %N.param_patt: %pattern_type.129 = value_param_pattern [concrete = constants.%N.param_patt] +// CHECK:STDOUT: %N.patt: %pattern_type.129 = at_binding_pattern N, %N.param_patt [concrete = constants.%N.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.98f = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern %return.param_patt, %.loc12_28.1 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc12_28.1: type = type_literal type [concrete = type] // CHECK:STDOUT: %.loc12_28.2: Core.Form = init_form %.loc12_28.1 [concrete = constants.%.805] diff --git a/toolchain/check/testdata/function/builtin/call.carbon b/toolchain/check/testdata/function/builtin/call.carbon index c22c8e4ac586..82cd2e480fc0 100644 --- a/toolchain/check/testdata/function/builtin/call.carbon +++ b/toolchain/check/testdata/function/builtin/call.carbon @@ -28,7 +28,13 @@ fn RuntimeCall(a: i32, b: i32) -> i32 { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %Add.type: type = fn_type @Add [concrete] // CHECK:STDOUT: %Add: %Add.type = struct_value () [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] @@ -69,6 +75,8 @@ fn RuntimeCall(a: i32, b: i32) -> i32 { // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_3.1ba, %i32 [concrete] // CHECK:STDOUT: %pattern_type.771: type = pattern_type %array_type [concrete] +// CHECK:STDOUT: %arr.patt: %pattern_type.771 = ref_binding_pattern arr [concrete] +// CHECK:STDOUT: %arr.var_patt: %pattern_type.771 = var_pattern %arr.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.150: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] @@ -110,12 +118,12 @@ fn RuntimeCall(a: i32, b: i32) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Add.decl: %Add.type = fn_decl @Add [concrete = constants.%Add] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc15_27 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc15_27 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc15_27: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc15: Core.Form = init_form %i32.loc15_27 [concrete = constants.%.795] @@ -129,8 +137,8 @@ fn RuntimeCall(a: i32, b: i32) -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %arr.patt: %pattern_type.771 = ref_binding_pattern arr [concrete] -// CHECK:STDOUT: %arr.var_patt: %pattern_type.771 = var_pattern %arr.patt [concrete] +// CHECK:STDOUT: %arr.patt: %pattern_type.771 = ref_binding_pattern arr [concrete = constants.%arr.patt] +// CHECK:STDOUT: %arr.var_patt: %pattern_type.771 = var_pattern %arr.patt [concrete = constants.%arr.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %arr.var: ref %array_type = var %arr.var_patt [concrete] // CHECK:STDOUT: %.loc17_30: type = splice_block %array_type [concrete = constants.%array_type] { @@ -166,12 +174,12 @@ fn RuntimeCall(a: i32, b: i32) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %arr: ref %array_type = ref_binding arr, %arr.var [concrete = %arr.var] // CHECK:STDOUT: %RuntimeCall.decl: %RuntimeCall.type = fn_decl @RuntimeCall [concrete = constants.%RuntimeCall] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc19_35 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc19_35 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc19_35: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc19: Core.Form = init_form %i32.loc19_35 [concrete = constants.%.795] diff --git a/toolchain/check/testdata/function/builtin/call_from_operator.carbon b/toolchain/check/testdata/function/builtin/call_from_operator.carbon index e2421cb977ae..77a69ef6d1a5 100644 --- a/toolchain/check/testdata/function/builtin/call_from_operator.carbon +++ b/toolchain/check/testdata/function/builtin/call_from_operator.carbon @@ -60,13 +60,18 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: constants { // CHECK:STDOUT: %.805: Core.Form = init_form type [concrete] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %return.param_patt.70e: %pattern_type.98f = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.3ae: %pattern_type.98f = return_slot_pattern %return.param_patt.70e, type [concrete] // CHECK:STDOUT: %MakeIntLiteral.type: type = fn_type @MakeIntLiteral [concrete] // CHECK:STDOUT: %MakeIntLiteral: %MakeIntLiteral.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.dc0: type = pattern_type Core.IntLiteral [concrete] +// CHECK:STDOUT: %N.param_patt: %pattern_type.dc0 = value_param_pattern [concrete] +// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = at_binding_pattern N, %N.param_patt [concrete] // CHECK:STDOUT: %Int.type: type = fn_type @Int [concrete] // CHECK:STDOUT: %Int: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %AddWith.type.2ef: type = generic_interface_type @AddWith [concrete] // CHECK:STDOUT: %AddWith.generic: %AddWith.type.2ef = struct_value () [concrete] @@ -74,7 +79,13 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %Self.8d5: %AddWith.type.7e9 = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.48c: type = facet_access_type %Self.8d5 [symbolic] // CHECK:STDOUT: %pattern_type.131: type = pattern_type %Self.as_type.48c [symbolic] +// CHECK:STDOUT: %self.param_patt.72e: %pattern_type.131 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.ac5: %pattern_type.131 = at_binding_pattern self, %self.param_patt.72e [symbolic] +// CHECK:STDOUT: %other.param_patt.89e: %pattern_type.131 = value_param_pattern [symbolic] +// CHECK:STDOUT: %other.patt.f3d: %pattern_type.131 = at_binding_pattern other, %other.param_patt.89e [symbolic] // CHECK:STDOUT: %.e80: Core.Form = init_form %Self.as_type.48c [symbolic] +// CHECK:STDOUT: %return.param_patt.8c6: %pattern_type.131 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.169: %pattern_type.131 = return_slot_pattern %return.param_patt.8c6, %Self.as_type.48c [symbolic] // CHECK:STDOUT: %AddWith.WithSelf.Op.type.e49: type = fn_type @AddWith.WithSelf.Op, @AddWith.WithSelf(%T, %Self.8d5) [symbolic] // CHECK:STDOUT: %AddWith.WithSelf.Op.adc: %AddWith.WithSelf.Op.type.e49 = struct_value () [symbolic] // CHECK:STDOUT: %AddWith.assoc_type.588: type = assoc_entity_type @AddWith, @AddWith(%T) [symbolic] @@ -85,8 +96,12 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %Self.f80: %As.type.c5f = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.1ce: type = facet_access_type %Self.f80 [symbolic] // CHECK:STDOUT: %pattern_type.a01: type = pattern_type %Self.as_type.1ce [symbolic] +// CHECK:STDOUT: %self.param_patt.29a: %pattern_type.a01 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.a95: %pattern_type.a01 = at_binding_pattern self, %self.param_patt.29a [symbolic] // CHECK:STDOUT: %.184: Core.Form = init_form %T [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %return.param_patt.41d: %pattern_type.51d = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.b39: %pattern_type.51d = return_slot_pattern %return.param_patt.41d, %T [symbolic] // CHECK:STDOUT: %As.WithSelf.Convert.type.640: type = fn_type @As.WithSelf.Convert, @As.WithSelf(%T, %Self.f80) [symbolic] // CHECK:STDOUT: %As.WithSelf.Convert.896: %As.WithSelf.Convert.type.640 = struct_value () [symbolic] // CHECK:STDOUT: %As.assoc_type.b40: type = assoc_entity_type @As, @As(%T) [symbolic] @@ -97,6 +112,8 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %Self.bb1: %ImplicitAs.type.3aa = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.5b8: type = facet_access_type %Self.bb1 [symbolic] // CHECK:STDOUT: %pattern_type.701: type = pattern_type %Self.as_type.5b8 [symbolic] +// CHECK:STDOUT: %self.param_patt.c3f: %pattern_type.701 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.f5a: %pattern_type.701 = at_binding_pattern self, %self.param_patt.c3f [symbolic] // CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.type.920: type = fn_type @ImplicitAs.WithSelf.Convert, @ImplicitAs.WithSelf(%T, %Self.bb1) [symbolic] // CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.293: %ImplicitAs.WithSelf.Convert.type.920 = struct_value () [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type.fcc: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%T) [symbolic] @@ -111,7 +128,13 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %AddWith.assoc_type.439: type = assoc_entity_type @AddWith, @AddWith(%i32.builtin) [concrete] // CHECK:STDOUT: %assoc0.7f8: %AddWith.assoc_type.439 = assoc_entity element0, @AddWith.WithSelf.%AddWith.WithSelf.Op.decl [concrete] // CHECK:STDOUT: %pattern_type.956: type = pattern_type %i32.builtin [concrete] +// CHECK:STDOUT: %self.param_patt.936: %pattern_type.956 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.703: %pattern_type.956 = at_binding_pattern self, %self.param_patt.936 [concrete] +// CHECK:STDOUT: %other.param_patt.36d: %pattern_type.956 = value_param_pattern [concrete] +// CHECK:STDOUT: %other.patt.760: %pattern_type.956 = at_binding_pattern other, %other.param_patt.36d [concrete] // CHECK:STDOUT: %.9cb: Core.Form = init_form %i32.builtin [concrete] +// CHECK:STDOUT: %return.param_patt.903: %pattern_type.956 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.930: %pattern_type.956 = return_slot_pattern %return.param_patt.903, %i32.builtin [concrete] // CHECK:STDOUT: %i32.builtin.as.AddWith.impl.Op.type: type = fn_type @i32.builtin.as.AddWith.impl.Op [concrete] // CHECK:STDOUT: %i32.builtin.as.AddWith.impl.Op: %i32.builtin.as.AddWith.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %AddWith.facet: %AddWith.type.7c6 = facet_value %i32.builtin, (%AddWith.impl_witness) [concrete] @@ -124,6 +147,8 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %As.WithSelf.Convert.140: %As.WithSelf.Convert.type.d9c = struct_value () [symbolic] // CHECK:STDOUT: %As.assoc_type.7f2: type = assoc_entity_type @As, @As(%i32.builtin) [concrete] // CHECK:STDOUT: %assoc0.402: %As.assoc_type.7f2 = assoc_entity element0, @As.WithSelf.%As.WithSelf.Convert.decl [concrete] +// CHECK:STDOUT: %self.param_patt.1ca: %pattern_type.dc0 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.cea: %pattern_type.dc0 = at_binding_pattern self, %self.param_patt.1ca [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.type: type = fn_type @Core.IntLiteral.as.As.impl.Convert [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert: %Core.IntLiteral.as.As.impl.Convert.type = struct_value () [concrete] // CHECK:STDOUT: %As.facet: %As.type.dfb = facet_value Core.IntLiteral, (%As.impl_witness) [concrete] @@ -149,6 +174,8 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %ImplicitAs.assoc_type.e73: type = assoc_entity_type @ImplicitAs, @ImplicitAs(Core.IntLiteral) [concrete] // CHECK:STDOUT: %assoc0.a37: %ImplicitAs.assoc_type.e73 = assoc_entity element0, @ImplicitAs.WithSelf.%ImplicitAs.WithSelf.Convert.decl [concrete] // CHECK:STDOUT: %.f7d: Core.Form = init_form Core.IntLiteral [concrete] +// CHECK:STDOUT: %return.param_patt.eab: %pattern_type.dc0 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.cd4: %pattern_type.dc0 = return_slot_pattern %return.param_patt.eab, Core.IntLiteral [concrete] // CHECK:STDOUT: %i32.builtin.as.ImplicitAs.impl.Convert.type: type = fn_type @i32.builtin.as.ImplicitAs.impl.Convert [concrete] // CHECK:STDOUT: %i32.builtin.as.ImplicitAs.impl.Convert: %i32.builtin.as.ImplicitAs.impl.Convert.type = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.facet.776: %ImplicitAs.type.7cb = facet_value %i32.builtin, (%ImplicitAs.impl_witness.9d7) [concrete] @@ -166,8 +193,8 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: .ImplicitAs = %ImplicitAs.decl // CHECK:STDOUT: } // CHECK:STDOUT: %MakeIntLiteral.decl: %MakeIntLiteral.type = fn_decl @MakeIntLiteral [concrete = constants.%MakeIntLiteral] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.98f = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern %return.param_patt, %.loc4_24.1 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.98f = out_param_pattern [concrete = constants.%return.param_patt.70e] +// CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern %return.param_patt, %.loc4_24.1 [concrete = constants.%return.patt.3ae] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_24.1: type = type_literal type [concrete = type] // CHECK:STDOUT: %.loc4_24.2: Core.Form = init_form %.loc4_24.1 [concrete = constants.%.805] @@ -180,10 +207,10 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %.loc5_35.2: type = converted %MakeIntLiteral.call, %.loc5_35.1 [concrete = Core.IntLiteral] // CHECK:STDOUT: %IntLiteral: type = alias_binding IntLiteral, %.loc5_35.2 [concrete = Core.IntLiteral] // CHECK:STDOUT: %Int.decl: %Int.type = fn_decl @Int [concrete = constants.%Int] { -// CHECK:STDOUT: %N.param_patt: %pattern_type.dc0 = value_param_pattern [concrete] -// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = at_binding_pattern N, %N.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.98f = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern %return.param_patt, %.loc6_26.1 [concrete] +// CHECK:STDOUT: %N.param_patt: %pattern_type.dc0 = value_param_pattern [concrete = constants.%N.param_patt] +// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = at_binding_pattern N, %N.param_patt [concrete = constants.%N.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.98f = out_param_pattern [concrete = constants.%return.param_patt.70e] +// CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern %return.param_patt, %.loc6_26.1 [concrete = constants.%return.patt.3ae] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6_26.1: type = type_literal type [concrete = type] // CHECK:STDOUT: %.loc6_26.2: Core.Form = init_form %.loc6_26.1 [concrete = constants.%.805] @@ -194,7 +221,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %return: ref type = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %AddWith.decl: %AddWith.type.2ef = interface_decl @AddWith [concrete = constants.%AddWith.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc8_20.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_20.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8_23.1: type = splice_block %.loc8_23.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -203,7 +230,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %T.loc8_20.2: type = symbolic_binding T, 0 [symbolic = %T.loc8_20.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %As.decl: %As.type.116 = interface_decl @As [concrete = constants.%As.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc12_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc12_18.1: type = splice_block %.loc12_18.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -212,7 +239,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %T.loc12_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc12_15.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %ImplicitAs.decl: %ImplicitAs.type.0ff = interface_decl @ImplicitAs [concrete = constants.%ImplicitAs.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc16_23.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc16_23.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc16_26.1: type = splice_block %.loc16_26.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -247,6 +274,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @AddWith(%T.loc8_20.2: type) { +// CHECK:STDOUT: %T.patt.loc8_20.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_20.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc8_20.1: type = symbolic_binding T, 0 [symbolic = %T.loc8_20.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -259,12 +287,12 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %AddWith.WithSelf.Op.decl: @AddWith.WithSelf.%AddWith.WithSelf.Op.type (%AddWith.WithSelf.Op.type.e49) = fn_decl @AddWith.WithSelf.Op [symbolic = @AddWith.WithSelf.%AddWith.WithSelf.Op (constants.%AddWith.WithSelf.Op.adc)] { -// CHECK:STDOUT: %self.param_patt: @AddWith.WithSelf.Op.%pattern_type (%pattern_type.131) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @AddWith.WithSelf.Op.%pattern_type (%pattern_type.131) = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %other.param_patt: @AddWith.WithSelf.Op.%pattern_type (%pattern_type.131) = value_param_pattern [concrete] -// CHECK:STDOUT: %other.patt: @AddWith.WithSelf.Op.%pattern_type (%pattern_type.131) = at_binding_pattern other, %other.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @AddWith.WithSelf.Op.%pattern_type (%pattern_type.131) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @AddWith.WithSelf.Op.%pattern_type (%pattern_type.131) = return_slot_pattern %return.param_patt, %.loc9_31.3 [concrete] +// CHECK:STDOUT: %self.param_patt.loc9_9.1: @AddWith.WithSelf.Op.%pattern_type (%pattern_type.131) = value_param_pattern [symbolic = %self.param_patt.loc9_9.2 (constants.%self.param_patt.72e)] +// CHECK:STDOUT: %self.patt.loc9_9.1: @AddWith.WithSelf.Op.%pattern_type (%pattern_type.131) = at_binding_pattern self, %self.param_patt.loc9_9.1 [symbolic = %self.patt.loc9_9.2 (constants.%self.patt.ac5)] +// CHECK:STDOUT: %other.param_patt.loc9_20.1: @AddWith.WithSelf.Op.%pattern_type (%pattern_type.131) = value_param_pattern [symbolic = %other.param_patt.loc9_20.2 (constants.%other.param_patt.89e)] +// CHECK:STDOUT: %other.patt.loc9_20.1: @AddWith.WithSelf.Op.%pattern_type (%pattern_type.131) = at_binding_pattern other, %other.param_patt.loc9_20.1 [symbolic = %other.patt.loc9_20.2 (constants.%other.patt.f3d)] +// CHECK:STDOUT: %return.param_patt.loc9_31.1: @AddWith.WithSelf.Op.%pattern_type (%pattern_type.131) = out_param_pattern [symbolic = %return.param_patt.loc9_31.2 (constants.%return.param_patt.8c6)] +// CHECK:STDOUT: %return.patt.loc9_28.1: @AddWith.WithSelf.Op.%pattern_type (%pattern_type.131) = return_slot_pattern %return.param_patt.loc9_31.1, %.loc9_31.3 [symbolic = %return.patt.loc9_28.2 (constants.%return.patt.169)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc9_31.2: @AddWith.WithSelf.Op.%AddWith.type (%AddWith.type.7e9) = specific_constant @AddWith.%Self.loc8_29.1, @AddWith(constants.%T) [symbolic = %Self (constants.%Self.8d5)] // CHECK:STDOUT: %Self.ref.loc9_31: @AddWith.WithSelf.Op.%AddWith.type (%AddWith.type.7e9) = name_ref Self, %.loc9_31.2 [symbolic = %Self (constants.%Self.8d5)] @@ -302,6 +330,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @As(%T.loc12_15.2: type) { +// CHECK:STDOUT: %T.patt.loc12_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_15.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc12_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc12_15.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -314,10 +343,10 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %As.WithSelf.Convert.decl: @As.WithSelf.%As.WithSelf.Convert.type (%As.WithSelf.Convert.type.640) = fn_decl @As.WithSelf.Convert [symbolic = @As.WithSelf.%As.WithSelf.Convert (constants.%As.WithSelf.Convert.896)] { -// CHECK:STDOUT: %self.param_patt: @As.WithSelf.Convert.%pattern_type.loc13_14 (%pattern_type.a01) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @As.WithSelf.Convert.%pattern_type.loc13_14 (%pattern_type.a01) = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @As.WithSelf.Convert.%pattern_type.loc13_23 (%pattern_type.51d) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @As.WithSelf.Convert.%pattern_type.loc13_23 (%pattern_type.51d) = return_slot_pattern %return.param_patt, %T.ref [concrete] +// CHECK:STDOUT: %self.param_patt.loc13_14.1: @As.WithSelf.Convert.%pattern_type.loc13_14 (%pattern_type.a01) = value_param_pattern [symbolic = %self.param_patt.loc13_14.2 (constants.%self.param_patt.29a)] +// CHECK:STDOUT: %self.patt.loc13_14.1: @As.WithSelf.Convert.%pattern_type.loc13_14 (%pattern_type.a01) = at_binding_pattern self, %self.param_patt.loc13_14.1 [symbolic = %self.patt.loc13_14.2 (constants.%self.patt.a95)] +// CHECK:STDOUT: %return.param_patt.loc13_23.1: @As.WithSelf.Convert.%pattern_type.loc13_23 (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt.loc13_23.2 (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt.loc13_20.1: @As.WithSelf.Convert.%pattern_type.loc13_23 (%pattern_type.51d) = return_slot_pattern %return.param_patt.loc13_23.1, %T.ref [symbolic = %return.patt.loc13_20.2 (constants.%return.patt.b39)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, @As.%T.loc12_15.2 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %.loc13_23.2: Core.Form = init_form %T.ref [symbolic = %.loc13_23.1 (constants.%.184)] @@ -346,6 +375,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(%T.loc16_23.2: type) { +// CHECK:STDOUT: %T.patt.loc16_23.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc16_23.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc16_23.1: type = symbolic_binding T, 0 [symbolic = %T.loc16_23.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -358,10 +388,10 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.decl: @ImplicitAs.WithSelf.%ImplicitAs.WithSelf.Convert.type (%ImplicitAs.WithSelf.Convert.type.920) = fn_decl @ImplicitAs.WithSelf.Convert [symbolic = @ImplicitAs.WithSelf.%ImplicitAs.WithSelf.Convert (constants.%ImplicitAs.WithSelf.Convert.293)] { -// CHECK:STDOUT: %self.param_patt: @ImplicitAs.WithSelf.Convert.%pattern_type.loc17_14 (%pattern_type.701) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @ImplicitAs.WithSelf.Convert.%pattern_type.loc17_14 (%pattern_type.701) = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @ImplicitAs.WithSelf.Convert.%pattern_type.loc17_23 (%pattern_type.51d) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @ImplicitAs.WithSelf.Convert.%pattern_type.loc17_23 (%pattern_type.51d) = return_slot_pattern %return.param_patt, %T.ref [concrete] +// CHECK:STDOUT: %self.param_patt.loc17_14.1: @ImplicitAs.WithSelf.Convert.%pattern_type.loc17_14 (%pattern_type.701) = value_param_pattern [symbolic = %self.param_patt.loc17_14.2 (constants.%self.param_patt.c3f)] +// CHECK:STDOUT: %self.patt.loc17_14.1: @ImplicitAs.WithSelf.Convert.%pattern_type.loc17_14 (%pattern_type.701) = at_binding_pattern self, %self.param_patt.loc17_14.1 [symbolic = %self.patt.loc17_14.2 (constants.%self.patt.f5a)] +// CHECK:STDOUT: %return.param_patt.loc17_23.1: @ImplicitAs.WithSelf.Convert.%pattern_type.loc17_23 (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt.loc17_23.2 (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt.loc17_20.1: @ImplicitAs.WithSelf.Convert.%pattern_type.loc17_23 (%pattern_type.51d) = return_slot_pattern %return.param_patt.loc17_23.1, %T.ref [symbolic = %return.patt.loc17_20.2 (constants.%return.patt.b39)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, @ImplicitAs.%T.loc16_23.2 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %.loc17_23.2: Core.Form = init_form %T.ref [symbolic = %.loc17_23.1 (constants.%.184)] @@ -392,12 +422,12 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: // CHECK:STDOUT: impl @i32.builtin.as.AddWith.impl: %.loc20_6 as %AddWith.type { // CHECK:STDOUT: %i32.builtin.as.AddWith.impl.Op.decl: %i32.builtin.as.AddWith.impl.Op.type = fn_decl @i32.builtin.as.AddWith.impl.Op [concrete = constants.%i32.builtin.as.AddWith.impl.Op] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.956 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.956 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %other.param_patt: %pattern_type.956 = value_param_pattern [concrete] -// CHECK:STDOUT: %other.patt: %pattern_type.956 = at_binding_pattern other, %other.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.956 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.956 = return_slot_pattern %return.param_patt, %Self.ref.loc21_31 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.956 = value_param_pattern [concrete = constants.%self.param_patt.936] +// CHECK:STDOUT: %self.patt: %pattern_type.956 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.703] +// CHECK:STDOUT: %other.param_patt: %pattern_type.956 = value_param_pattern [concrete = constants.%other.param_patt.36d] +// CHECK:STDOUT: %other.patt: %pattern_type.956 = at_binding_pattern other, %other.param_patt [concrete = constants.%other.patt.760] +// CHECK:STDOUT: %return.param_patt: %pattern_type.956 = out_param_pattern [concrete = constants.%return.param_patt.903] +// CHECK:STDOUT: %return.patt: %pattern_type.956 = return_slot_pattern %return.param_patt, %Self.ref.loc21_31 [concrete = constants.%return.patt.930] // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc21_31: type = name_ref Self, @i32.builtin.as.AddWith.impl.%.loc20_6 [concrete = constants.%i32.builtin] // CHECK:STDOUT: %.loc21: Core.Form = init_form %Self.ref.loc21_31 [concrete = constants.%.9cb] @@ -421,10 +451,10 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: // CHECK:STDOUT: impl @Core.IntLiteral.as.As.impl: %IntLiteral.ref as %As.type { // CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.decl: %Core.IntLiteral.as.As.impl.Convert.type = fn_decl @Core.IntLiteral.as.As.impl.Convert [concrete = constants.%Core.IntLiteral.as.As.impl.Convert] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.dc0 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.dc0 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.956 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.956 = return_slot_pattern %return.param_patt, %.loc25_23.1 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.dc0 = value_param_pattern [concrete = constants.%self.param_patt.1ca] +// CHECK:STDOUT: %self.patt: %pattern_type.dc0 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.cea] +// CHECK:STDOUT: %return.param_patt: %pattern_type.956 = out_param_pattern [concrete = constants.%return.param_patt.903] +// CHECK:STDOUT: %return.patt: %pattern_type.956 = return_slot_pattern %return.param_patt, %.loc25_23.1 [concrete = constants.%return.patt.930] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc25_23.1: type = type_literal constants.%i32.builtin [concrete = constants.%i32.builtin] // CHECK:STDOUT: %.loc25_23.2: Core.Form = init_form %.loc25_23.1 [concrete = constants.%.9cb] @@ -445,10 +475,10 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: // CHECK:STDOUT: impl @Core.IntLiteral.as.ImplicitAs.impl: %IntLiteral.ref as %ImplicitAs.type { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.decl: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type = fn_decl @Core.IntLiteral.as.ImplicitAs.impl.Convert [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.dc0 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.dc0 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.956 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.956 = return_slot_pattern %return.param_patt, %.loc29_23.1 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.dc0 = value_param_pattern [concrete = constants.%self.param_patt.1ca] +// CHECK:STDOUT: %self.patt: %pattern_type.dc0 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.cea] +// CHECK:STDOUT: %return.param_patt: %pattern_type.956 = out_param_pattern [concrete = constants.%return.param_patt.903] +// CHECK:STDOUT: %return.patt: %pattern_type.956 = return_slot_pattern %return.param_patt, %.loc29_23.1 [concrete = constants.%return.patt.930] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc29_23.1: type = type_literal constants.%i32.builtin [concrete = constants.%i32.builtin] // CHECK:STDOUT: %.loc29_23.2: Core.Form = init_form %.loc29_23.1 [concrete = constants.%.9cb] @@ -469,10 +499,10 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: // CHECK:STDOUT: impl @i32.builtin.as.ImplicitAs.impl: %.loc32 as %ImplicitAs.type { // CHECK:STDOUT: %i32.builtin.as.ImplicitAs.impl.Convert.decl: %i32.builtin.as.ImplicitAs.impl.Convert.type = fn_decl @i32.builtin.as.ImplicitAs.impl.Convert [concrete = constants.%i32.builtin.as.ImplicitAs.impl.Convert] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.956 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.956 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.dc0 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.dc0 = return_slot_pattern %return.param_patt, %IntLiteral.ref [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.956 = value_param_pattern [concrete = constants.%self.param_patt.936] +// CHECK:STDOUT: %self.patt: %pattern_type.956 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.703] +// CHECK:STDOUT: %return.param_patt: %pattern_type.dc0 = out_param_pattern [concrete = constants.%return.param_patt.eab] +// CHECK:STDOUT: %return.patt: %pattern_type.dc0 = return_slot_pattern %return.param_patt, %IntLiteral.ref [concrete = constants.%return.patt.cd4] // CHECK:STDOUT: } { // CHECK:STDOUT: %IntLiteral.ref: type = name_ref IntLiteral, file.%IntLiteral [concrete = Core.IntLiteral] // CHECK:STDOUT: %.loc33: Core.Form = init_form %IntLiteral.ref [concrete = constants.%.f7d] @@ -502,7 +532,13 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %Self: @AddWith.WithSelf.Op.%AddWith.type (%AddWith.type.7e9) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self.8d5)] // CHECK:STDOUT: %Self.as_type.loc9_9.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc9_9.1 (constants.%Self.as_type.48c)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc9_9.1 [symbolic = %pattern_type (constants.%pattern_type.131)] +// CHECK:STDOUT: %self.param_patt.loc9_9.2: @AddWith.WithSelf.Op.%pattern_type (%pattern_type.131) = value_param_pattern [symbolic = %self.param_patt.loc9_9.2 (constants.%self.param_patt.72e)] +// CHECK:STDOUT: %self.patt.loc9_9.2: @AddWith.WithSelf.Op.%pattern_type (%pattern_type.131) = at_binding_pattern self, %self.param_patt.loc9_9.2 [symbolic = %self.patt.loc9_9.2 (constants.%self.patt.ac5)] +// CHECK:STDOUT: %other.param_patt.loc9_20.2: @AddWith.WithSelf.Op.%pattern_type (%pattern_type.131) = value_param_pattern [symbolic = %other.param_patt.loc9_20.2 (constants.%other.param_patt.89e)] +// CHECK:STDOUT: %other.patt.loc9_20.2: @AddWith.WithSelf.Op.%pattern_type (%pattern_type.131) = at_binding_pattern other, %other.param_patt.loc9_20.2 [symbolic = %other.patt.loc9_20.2 (constants.%other.patt.f3d)] // CHECK:STDOUT: %.loc9_31.1: Core.Form = init_form %Self.as_type.loc9_9.1 [symbolic = %.loc9_31.1 (constants.%.e80)] +// CHECK:STDOUT: %return.param_patt.loc9_31.2: @AddWith.WithSelf.Op.%pattern_type (%pattern_type.131) = out_param_pattern [symbolic = %return.param_patt.loc9_31.2 (constants.%return.param_patt.8c6)] +// CHECK:STDOUT: %return.patt.loc9_28.2: @AddWith.WithSelf.Op.%pattern_type (%pattern_type.131) = return_slot_pattern %return.param_patt.loc9_31.2, %Self.as_type.loc9_9.1 [symbolic = %return.patt.loc9_28.2 (constants.%return.patt.169)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @AddWith.WithSelf.Op.%Self.as_type.loc9_9.1 (%Self.as_type.48c), %other.param: @AddWith.WithSelf.Op.%Self.as_type.loc9_9.1 (%Self.as_type.48c)) -> out %return.param: @AddWith.WithSelf.Op.%Self.as_type.loc9_9.1 (%Self.as_type.48c); // CHECK:STDOUT: } @@ -513,8 +549,12 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %Self: @As.WithSelf.Convert.%As.type (%As.type.c5f) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self.f80)] // CHECK:STDOUT: %Self.as_type.loc13_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc13_14.1 (constants.%Self.as_type.1ce)] // CHECK:STDOUT: %pattern_type.loc13_14: type = pattern_type %Self.as_type.loc13_14.1 [symbolic = %pattern_type.loc13_14 (constants.%pattern_type.a01)] +// CHECK:STDOUT: %self.param_patt.loc13_14.2: @As.WithSelf.Convert.%pattern_type.loc13_14 (%pattern_type.a01) = value_param_pattern [symbolic = %self.param_patt.loc13_14.2 (constants.%self.param_patt.29a)] +// CHECK:STDOUT: %self.patt.loc13_14.2: @As.WithSelf.Convert.%pattern_type.loc13_14 (%pattern_type.a01) = at_binding_pattern self, %self.param_patt.loc13_14.2 [symbolic = %self.patt.loc13_14.2 (constants.%self.patt.a95)] // CHECK:STDOUT: %.loc13_23.1: Core.Form = init_form %T [symbolic = %.loc13_23.1 (constants.%.184)] // CHECK:STDOUT: %pattern_type.loc13_23: type = pattern_type %T [symbolic = %pattern_type.loc13_23 (constants.%pattern_type.51d)] +// CHECK:STDOUT: %return.param_patt.loc13_23.2: @As.WithSelf.Convert.%pattern_type.loc13_23 (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt.loc13_23.2 (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt.loc13_20.2: @As.WithSelf.Convert.%pattern_type.loc13_23 (%pattern_type.51d) = return_slot_pattern %return.param_patt.loc13_23.2, %T [symbolic = %return.patt.loc13_20.2 (constants.%return.patt.b39)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @As.WithSelf.Convert.%Self.as_type.loc13_14.1 (%Self.as_type.1ce)) -> out %return.param: @As.WithSelf.Convert.%T (%T); // CHECK:STDOUT: } @@ -525,8 +565,12 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %Self: @ImplicitAs.WithSelf.Convert.%ImplicitAs.type (%ImplicitAs.type.3aa) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self.bb1)] // CHECK:STDOUT: %Self.as_type.loc17_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc17_14.1 (constants.%Self.as_type.5b8)] // CHECK:STDOUT: %pattern_type.loc17_14: type = pattern_type %Self.as_type.loc17_14.1 [symbolic = %pattern_type.loc17_14 (constants.%pattern_type.701)] +// CHECK:STDOUT: %self.param_patt.loc17_14.2: @ImplicitAs.WithSelf.Convert.%pattern_type.loc17_14 (%pattern_type.701) = value_param_pattern [symbolic = %self.param_patt.loc17_14.2 (constants.%self.param_patt.c3f)] +// CHECK:STDOUT: %self.patt.loc17_14.2: @ImplicitAs.WithSelf.Convert.%pattern_type.loc17_14 (%pattern_type.701) = at_binding_pattern self, %self.param_patt.loc17_14.2 [symbolic = %self.patt.loc17_14.2 (constants.%self.patt.f5a)] // CHECK:STDOUT: %.loc17_23.1: Core.Form = init_form %T [symbolic = %.loc17_23.1 (constants.%.184)] // CHECK:STDOUT: %pattern_type.loc17_23: type = pattern_type %T [symbolic = %pattern_type.loc17_23 (constants.%pattern_type.51d)] +// CHECK:STDOUT: %return.param_patt.loc17_23.2: @ImplicitAs.WithSelf.Convert.%pattern_type.loc17_23 (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt.loc17_23.2 (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt.loc17_20.2: @ImplicitAs.WithSelf.Convert.%pattern_type.loc17_23 (%pattern_type.51d) = return_slot_pattern %return.param_patt.loc17_23.2, %T [symbolic = %return.patt.loc17_20.2 (constants.%return.patt.b39)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @ImplicitAs.WithSelf.Convert.%Self.as_type.loc17_14.1 (%Self.as_type.5b8)) -> out %return.param: @ImplicitAs.WithSelf.Convert.%T (%T); // CHECK:STDOUT: } @@ -540,6 +584,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: fn @i32.builtin.as.ImplicitAs.impl.Convert(%self.param: %i32.builtin) -> out %return.param: Core.IntLiteral = "int.convert_checked"; // CHECK:STDOUT: // CHECK:STDOUT: specific @AddWith(constants.%T) { +// CHECK:STDOUT: %T.patt.loc8_20.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_20.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -551,10 +596,17 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %Self => constants.%Self.8d5 // CHECK:STDOUT: %Self.as_type.loc9_9.1 => constants.%Self.as_type.48c // CHECK:STDOUT: %pattern_type => constants.%pattern_type.131 +// CHECK:STDOUT: %self.param_patt.loc9_9.2 => constants.%self.param_patt.72e +// CHECK:STDOUT: %self.patt.loc9_9.2 => constants.%self.patt.ac5 +// CHECK:STDOUT: %other.param_patt.loc9_20.2 => constants.%other.param_patt.89e +// CHECK:STDOUT: %other.patt.loc9_20.2 => constants.%other.patt.f3d // CHECK:STDOUT: %.loc9_31.1 => constants.%.e80 +// CHECK:STDOUT: %return.param_patt.loc9_31.2 => constants.%return.param_patt.8c6 +// CHECK:STDOUT: %return.patt.loc9_28.2 => constants.%return.patt.169 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @As(constants.%T) { +// CHECK:STDOUT: %T.patt.loc12_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc12_15.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -566,11 +618,16 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %Self => constants.%Self.f80 // CHECK:STDOUT: %Self.as_type.loc13_14.1 => constants.%Self.as_type.1ce // CHECK:STDOUT: %pattern_type.loc13_14 => constants.%pattern_type.a01 +// CHECK:STDOUT: %self.param_patt.loc13_14.2 => constants.%self.param_patt.29a +// CHECK:STDOUT: %self.patt.loc13_14.2 => constants.%self.patt.a95 // CHECK:STDOUT: %.loc13_23.1 => constants.%.184 // CHECK:STDOUT: %pattern_type.loc13_23 => constants.%pattern_type.51d +// CHECK:STDOUT: %return.param_patt.loc13_23.2 => constants.%return.param_patt.41d +// CHECK:STDOUT: %return.patt.loc13_20.2 => constants.%return.patt.b39 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(constants.%T) { +// CHECK:STDOUT: %T.patt.loc16_23.2 => constants.%T.patt // CHECK:STDOUT: %T.loc16_23.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -582,11 +639,16 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %Self => constants.%Self.bb1 // CHECK:STDOUT: %Self.as_type.loc17_14.1 => constants.%Self.as_type.5b8 // CHECK:STDOUT: %pattern_type.loc17_14 => constants.%pattern_type.701 +// CHECK:STDOUT: %self.param_patt.loc17_14.2 => constants.%self.param_patt.c3f +// CHECK:STDOUT: %self.patt.loc17_14.2 => constants.%self.patt.f5a // CHECK:STDOUT: %.loc17_23.1 => constants.%.184 // CHECK:STDOUT: %pattern_type.loc17_23 => constants.%pattern_type.51d +// CHECK:STDOUT: %return.param_patt.loc17_23.2 => constants.%return.param_patt.41d +// CHECK:STDOUT: %return.patt.loc17_20.2 => constants.%return.patt.b39 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @AddWith(constants.%i32.builtin) { +// CHECK:STDOUT: %T.patt.loc8_20.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_20.1 => constants.%i32.builtin // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -622,10 +684,17 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %Self => constants.%AddWith.facet // CHECK:STDOUT: %Self.as_type.loc9_9.1 => constants.%i32.builtin // CHECK:STDOUT: %pattern_type => constants.%pattern_type.956 +// CHECK:STDOUT: %self.param_patt.loc9_9.2 => constants.%self.param_patt.936 +// CHECK:STDOUT: %self.patt.loc9_9.2 => constants.%self.patt.703 +// CHECK:STDOUT: %other.param_patt.loc9_20.2 => constants.%other.param_patt.36d +// CHECK:STDOUT: %other.patt.loc9_20.2 => constants.%other.patt.760 // CHECK:STDOUT: %.loc9_31.1 => constants.%.9cb +// CHECK:STDOUT: %return.param_patt.loc9_31.2 => constants.%return.param_patt.903 +// CHECK:STDOUT: %return.patt.loc9_28.2 => constants.%return.patt.930 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @As(constants.%i32.builtin) { +// CHECK:STDOUT: %T.patt.loc12_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc12_15.1 => constants.%i32.builtin // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -661,11 +730,16 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %Self => constants.%As.facet // CHECK:STDOUT: %Self.as_type.loc13_14.1 => Core.IntLiteral // CHECK:STDOUT: %pattern_type.loc13_14 => constants.%pattern_type.dc0 +// CHECK:STDOUT: %self.param_patt.loc13_14.2 => constants.%self.param_patt.1ca +// CHECK:STDOUT: %self.patt.loc13_14.2 => constants.%self.patt.cea // CHECK:STDOUT: %.loc13_23.1 => constants.%.9cb // CHECK:STDOUT: %pattern_type.loc13_23 => constants.%pattern_type.956 +// CHECK:STDOUT: %return.param_patt.loc13_23.2 => constants.%return.param_patt.903 +// CHECK:STDOUT: %return.patt.loc13_20.2 => constants.%return.patt.930 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(constants.%i32.builtin) { +// CHECK:STDOUT: %T.patt.loc16_23.2 => constants.%T.patt // CHECK:STDOUT: %T.loc16_23.1 => constants.%i32.builtin // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -701,11 +775,16 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %Self => constants.%ImplicitAs.facet.18f // CHECK:STDOUT: %Self.as_type.loc17_14.1 => Core.IntLiteral // CHECK:STDOUT: %pattern_type.loc17_14 => constants.%pattern_type.dc0 +// CHECK:STDOUT: %self.param_patt.loc17_14.2 => constants.%self.param_patt.1ca +// CHECK:STDOUT: %self.patt.loc17_14.2 => constants.%self.patt.cea // CHECK:STDOUT: %.loc17_23.1 => constants.%.9cb // CHECK:STDOUT: %pattern_type.loc17_23 => constants.%pattern_type.956 +// CHECK:STDOUT: %return.param_patt.loc17_23.2 => constants.%return.param_patt.903 +// CHECK:STDOUT: %return.patt.loc17_20.2 => constants.%return.patt.930 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(Core.IntLiteral) { +// CHECK:STDOUT: %T.patt.loc16_23.2 => constants.%T.patt // CHECK:STDOUT: %T.loc16_23.1 => Core.IntLiteral // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -741,8 +820,12 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %Self => constants.%ImplicitAs.facet.776 // CHECK:STDOUT: %Self.as_type.loc17_14.1 => constants.%i32.builtin // CHECK:STDOUT: %pattern_type.loc17_14 => constants.%pattern_type.956 +// CHECK:STDOUT: %self.param_patt.loc17_14.2 => constants.%self.param_patt.936 +// CHECK:STDOUT: %self.patt.loc17_14.2 => constants.%self.patt.703 // CHECK:STDOUT: %.loc17_23.1 => constants.%.f7d // CHECK:STDOUT: %pattern_type.loc17_23 => constants.%pattern_type.dc0 +// CHECK:STDOUT: %return.param_patt.loc17_23.2 => constants.%return.param_patt.eab +// CHECK:STDOUT: %return.patt.loc17_20.2 => constants.%return.patt.cd4 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- user.carbon @@ -751,19 +834,25 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %Int.type: type = fn_type @Int [concrete] // CHECK:STDOUT: %Int: %Int.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %As.type.116: type = generic_interface_type @As [concrete] // CHECK:STDOUT: %As.generic: %As.type.116 = struct_value () [concrete] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %As.type.c5f: type = facet_type <@As, @As(%T)> [symbolic] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Self.37a: %As.type.c5f = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %As.assoc_type.b40: type = assoc_entity_type @As, @As(%T) [symbolic] // CHECK:STDOUT: %As.WithSelf.Convert.type.ff8: type = fn_type @As.WithSelf.Convert, @As.WithSelf(%T, %Self.37a) [symbolic] // CHECK:STDOUT: %As.WithSelf.Convert.87d: %As.WithSelf.Convert.type.ff8 = struct_value () [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %return.param_patt.41d: %pattern_type.51d = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.c39: %pattern_type.51d = return_slot_pattern %return.param_patt.41d, invalid [symbolic] // CHECK:STDOUT: %Self.as_type.d4a: type = facet_access_type %Self.37a [symbolic] // CHECK:STDOUT: %pattern_type.e33: type = pattern_type %Self.as_type.d4a [symbolic] +// CHECK:STDOUT: %self.param_patt.9e9: %pattern_type.e33 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.51c: %pattern_type.e33 = at_binding_pattern self, %self.param_patt.9e9 [symbolic] // CHECK:STDOUT: %.184: Core.Form = init_form %T [symbolic] // CHECK:STDOUT: %As.type.dfb: type = facet_type <@As, @As(%i32.builtin)> [concrete] // CHECK:STDOUT: %Self.256: %As.type.dfb = symbolic_binding Self, 1 [symbolic] @@ -793,7 +882,13 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %AddWith.WithSelf.Op.eab: %AddWith.WithSelf.Op.type.28e = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type.331: type = facet_access_type %Self.96a [symbolic] // CHECK:STDOUT: %pattern_type.aed: type = pattern_type %Self.as_type.331 [symbolic] +// CHECK:STDOUT: %return.param_patt.7c8: %pattern_type.aed = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.1c8: %pattern_type.aed = return_slot_pattern %return.param_patt.7c8, invalid [symbolic] +// CHECK:STDOUT: %self.param_patt.aae: %pattern_type.aed = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.c4d: %pattern_type.aed = at_binding_pattern self, %self.param_patt.aae [symbolic] // CHECK:STDOUT: %.4cc: Core.Form = init_form %Self.as_type.331 [symbolic] +// CHECK:STDOUT: %other.param_patt.076: %pattern_type.aed = value_param_pattern [symbolic] +// CHECK:STDOUT: %other.patt.667: %pattern_type.aed = at_binding_pattern other, %other.param_patt.076 [symbolic] // CHECK:STDOUT: %AddWith.type.7c6: type = facet_type <@AddWith, @AddWith(%i32.builtin)> [concrete] // CHECK:STDOUT: %Self.bd2: %AddWith.type.7c6 = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %AddWith.WithSelf.Op.type.0ff: type = fn_type @AddWith.WithSelf.Op, @AddWith.WithSelf(%i32.builtin, %Self.96a) [symbolic] @@ -819,6 +914,8 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.945: %ImplicitAs.WithSelf.Convert.type.97e = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type.ef0: type = facet_access_type %Self.294 [symbolic] // CHECK:STDOUT: %pattern_type.20e: type = pattern_type %Self.as_type.ef0 [symbolic] +// CHECK:STDOUT: %self.param_patt.360: %pattern_type.20e = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.25f: %pattern_type.20e = at_binding_pattern self, %self.param_patt.360 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.7cb: type = facet_type <@ImplicitAs, @ImplicitAs(Core.IntLiteral)> [concrete] // CHECK:STDOUT: %Self.f63: %ImplicitAs.type.7cb = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.type.e70: type = fn_type @ImplicitAs.WithSelf.Convert, @ImplicitAs.WithSelf(Core.IntLiteral, %Self.294) [symbolic] @@ -839,6 +936,8 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_3.1ba, %i32.builtin [concrete] // CHECK:STDOUT: %pattern_type.9e2: type = pattern_type %array_type [concrete] +// CHECK:STDOUT: %arr.patt: %pattern_type.9e2 = ref_binding_pattern arr [concrete] +// CHECK:STDOUT: %arr.var_patt: %pattern_type.9e2 = var_pattern %arr.patt [concrete] // CHECK:STDOUT: %int_4.0c1: Core.IntLiteral = int_value 4 [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.bound.94b: = bound_method %int_3.1ba, %Core.IntLiteral.as.As.impl.Convert [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.bound.0f9: = bound_method %int_4.0c1, %Core.IntLiteral.as.As.impl.Convert [concrete] @@ -929,8 +1028,8 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %arr.patt: %pattern_type.9e2 = ref_binding_pattern arr [concrete] -// CHECK:STDOUT: %arr.var_patt: %pattern_type.9e2 = var_pattern %arr.patt [concrete] +// CHECK:STDOUT: %arr.patt: %pattern_type.9e2 = ref_binding_pattern arr [concrete = constants.%arr.patt] +// CHECK:STDOUT: %arr.var_patt: %pattern_type.9e2 = var_pattern %arr.patt [concrete = constants.%arr.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %arr.var: ref %array_type = var %arr.var_patt [concrete] // CHECK:STDOUT: %.loc4_44: type = splice_block %array_type [concrete = constants.%array_type] { @@ -965,6 +1064,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @As(imports.%Core.import_ref.b3bc94.3: type) [from "core.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -982,6 +1082,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @AddWith(imports.%Core.import_ref.b3bc94.6: type) [from "core.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -999,6 +1100,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(imports.%Core.import_ref.b3bc94.9: type) [from "core.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1043,8 +1145,12 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %Self: @As.WithSelf.Convert.%As.type (%As.type.c5f) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self.37a)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.d4a)] // CHECK:STDOUT: %pattern_type.1: type = pattern_type %Self.as_type [symbolic = %pattern_type.1 (constants.%pattern_type.e33)] +// CHECK:STDOUT: %self.param_patt: @As.WithSelf.Convert.%pattern_type.1 (%pattern_type.e33) = value_param_pattern [symbolic = %self.param_patt (constants.%self.param_patt.9e9)] +// CHECK:STDOUT: %self.patt: @As.WithSelf.Convert.%pattern_type.1 (%pattern_type.e33) = at_binding_pattern self, %self.param_patt [symbolic = %self.patt (constants.%self.patt.51c)] // CHECK:STDOUT: %.1: Core.Form = init_form %T [symbolic = %.1 (constants.%.184)] // CHECK:STDOUT: %pattern_type.2: type = pattern_type %T [symbolic = %pattern_type.2 (constants.%pattern_type.51d)] +// CHECK:STDOUT: %return.param_patt: @As.WithSelf.Convert.%pattern_type.2 (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt: @As.WithSelf.Convert.%pattern_type.2 (%pattern_type.51d) = return_slot_pattern %return.param_patt, invalid [symbolic = %return.patt (constants.%return.patt.c39)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -1057,7 +1163,13 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %Self: @AddWith.WithSelf.Op.%AddWith.type (%AddWith.type.7e9) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self.96a)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.331)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.aed)] +// CHECK:STDOUT: %self.param_patt: @AddWith.WithSelf.Op.%pattern_type (%pattern_type.aed) = value_param_pattern [symbolic = %self.param_patt (constants.%self.param_patt.aae)] +// CHECK:STDOUT: %self.patt: @AddWith.WithSelf.Op.%pattern_type (%pattern_type.aed) = at_binding_pattern self, %self.param_patt [symbolic = %self.patt (constants.%self.patt.c4d)] +// CHECK:STDOUT: %other.param_patt: @AddWith.WithSelf.Op.%pattern_type (%pattern_type.aed) = value_param_pattern [symbolic = %other.param_patt (constants.%other.param_patt.076)] +// CHECK:STDOUT: %other.patt: @AddWith.WithSelf.Op.%pattern_type (%pattern_type.aed) = at_binding_pattern other, %other.param_patt [symbolic = %other.patt (constants.%other.patt.667)] // CHECK:STDOUT: %.1: Core.Form = init_form %Self.as_type [symbolic = %.1 (constants.%.4cc)] +// CHECK:STDOUT: %return.param_patt: @AddWith.WithSelf.Op.%pattern_type (%pattern_type.aed) = out_param_pattern [symbolic = %return.param_patt (constants.%return.param_patt.7c8)] +// CHECK:STDOUT: %return.patt: @AddWith.WithSelf.Op.%pattern_type (%pattern_type.aed) = return_slot_pattern %return.param_patt, invalid [symbolic = %return.patt (constants.%return.patt.1c8)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -1070,8 +1182,12 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %Self: @ImplicitAs.WithSelf.Convert.%ImplicitAs.type (%ImplicitAs.type.3aa) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self.294)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.ef0)] // CHECK:STDOUT: %pattern_type.1: type = pattern_type %Self.as_type [symbolic = %pattern_type.1 (constants.%pattern_type.20e)] +// CHECK:STDOUT: %self.param_patt: @ImplicitAs.WithSelf.Convert.%pattern_type.1 (%pattern_type.20e) = value_param_pattern [symbolic = %self.param_patt (constants.%self.param_patt.360)] +// CHECK:STDOUT: %self.patt: @ImplicitAs.WithSelf.Convert.%pattern_type.1 (%pattern_type.20e) = at_binding_pattern self, %self.param_patt [symbolic = %self.patt (constants.%self.patt.25f)] // CHECK:STDOUT: %.1: Core.Form = init_form %T [symbolic = %.1 (constants.%.184)] // CHECK:STDOUT: %pattern_type.2: type = pattern_type %T [symbolic = %pattern_type.2 (constants.%pattern_type.51d)] +// CHECK:STDOUT: %return.param_patt: @ImplicitAs.WithSelf.Convert.%pattern_type.2 (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt: @ImplicitAs.WithSelf.Convert.%pattern_type.2 (%pattern_type.51d) = return_slot_pattern %return.param_patt, invalid [symbolic = %return.patt (constants.%return.patt.c39)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -1126,6 +1242,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @As(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1137,11 +1254,16 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %Self => constants.%Self.37a // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.d4a // CHECK:STDOUT: %pattern_type.1 => constants.%pattern_type.e33 +// CHECK:STDOUT: %self.param_patt => constants.%self.param_patt.9e9 +// CHECK:STDOUT: %self.patt => constants.%self.patt.51c // CHECK:STDOUT: %.1 => constants.%.184 // CHECK:STDOUT: %pattern_type.2 => constants.%pattern_type.51d +// CHECK:STDOUT: %return.param_patt => constants.%return.param_patt.41d +// CHECK:STDOUT: %return.patt => constants.%return.patt.c39 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @As(constants.%i32.builtin) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%i32.builtin // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1172,6 +1294,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @AddWith(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1183,10 +1306,17 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %Self => constants.%Self.96a // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.331 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.aed +// CHECK:STDOUT: %self.param_patt => constants.%self.param_patt.aae +// CHECK:STDOUT: %self.patt => constants.%self.patt.c4d +// CHECK:STDOUT: %other.param_patt => constants.%other.param_patt.076 +// CHECK:STDOUT: %other.patt => constants.%other.patt.667 // CHECK:STDOUT: %.1 => constants.%.4cc +// CHECK:STDOUT: %return.param_patt => constants.%return.param_patt.7c8 +// CHECK:STDOUT: %return.patt => constants.%return.patt.1c8 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @AddWith(constants.%i32.builtin) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%i32.builtin // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1217,6 +1347,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1228,11 +1359,16 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %Self => constants.%Self.294 // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.ef0 // CHECK:STDOUT: %pattern_type.1 => constants.%pattern_type.20e +// CHECK:STDOUT: %self.param_patt => constants.%self.param_patt.360 +// CHECK:STDOUT: %self.patt => constants.%self.patt.25f // CHECK:STDOUT: %.1 => constants.%.184 // CHECK:STDOUT: %pattern_type.2 => constants.%pattern_type.51d +// CHECK:STDOUT: %return.param_patt => constants.%return.param_patt.41d +// CHECK:STDOUT: %return.patt => constants.%return.patt.c39 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(Core.IntLiteral) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => Core.IntLiteral // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1252,6 +1388,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(constants.%i32.builtin) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%i32.builtin // CHECK:STDOUT: // CHECK:STDOUT: !definition: diff --git a/toolchain/check/testdata/function/builtin/definition.carbon b/toolchain/check/testdata/function/builtin/definition.carbon index 8ca92fd8b433..3107a0a900d1 100644 --- a/toolchain/check/testdata/function/builtin/definition.carbon +++ b/toolchain/check/testdata/function/builtin/definition.carbon @@ -22,7 +22,13 @@ fn Add(a: i32, b: i32) -> i32 = "int.sadd"; // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] // CHECK:STDOUT: %Add.type: type = fn_type @Add [concrete] // CHECK:STDOUT: %Add: %Add.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -43,12 +49,12 @@ fn Add(a: i32, b: i32) -> i32 = "int.sadd"; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Add.decl: %Add.type = fn_decl @Add [concrete = constants.%Add] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc15_27 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc15_27 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc15_27: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc15: Core.Form = init_form %i32.loc15_27 [concrete = constants.%.795] diff --git a/toolchain/check/testdata/function/builtin/fail_redefined.carbon b/toolchain/check/testdata/function/builtin/fail_redefined.carbon index fcab3e3d194c..41fcdf178dae 100644 --- a/toolchain/check/testdata/function/builtin/fail_redefined.carbon +++ b/toolchain/check/testdata/function/builtin/fail_redefined.carbon @@ -51,7 +51,13 @@ fn C(n: i32, m: i32) -> i32 = "int.sadd"; // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete] +// CHECK:STDOUT: %m.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %m.patt: %pattern_type.6b6 = at_binding_pattern m, %m.param_patt [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %A.type.9f4a6d.1: type = fn_type @A.loc15 [concrete] // CHECK:STDOUT: %A.921eb9.1: %A.type.9f4a6d.1 = struct_value () [concrete] // CHECK:STDOUT: %A.type.9f4a6d.2: type = fn_type @A.loc23 [concrete] @@ -98,12 +104,12 @@ fn C(n: i32, m: i32) -> i32 = "int.sadd"; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl.loc15: %A.type.9f4a6d.1 = fn_decl @A.loc15 [concrete = constants.%A.921eb9.1] { -// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete] -// CHECK:STDOUT: %m.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %m.patt: %pattern_type.6b6 = at_binding_pattern m, %m.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc15_25 [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%n.param_patt] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete = constants.%n.patt] +// CHECK:STDOUT: %m.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%m.param_patt] +// CHECK:STDOUT: %m.patt: %pattern_type.6b6 = at_binding_pattern m, %m.param_patt [concrete = constants.%m.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc15_25 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc15_25: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc15: Core.Form = init_form %i32.loc15_25 [concrete = constants.%.795] @@ -117,12 +123,12 @@ fn C(n: i32, m: i32) -> i32 = "int.sadd"; // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %A.decl.loc23: %A.type.9f4a6d.2 = fn_decl @A.loc23 [concrete = constants.%A.921eb9.2] { -// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete] -// CHECK:STDOUT: %m.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %m.patt: %pattern_type.6b6 = at_binding_pattern m, %m.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc23_32 [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%n.param_patt] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete = constants.%n.patt] +// CHECK:STDOUT: %m.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%m.param_patt] +// CHECK:STDOUT: %m.patt: %pattern_type.6b6 = at_binding_pattern m, %m.param_patt [concrete = constants.%m.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc23_32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc23_32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc23: Core.Form = init_form %i32.loc23_32 [concrete = constants.%.795] @@ -136,12 +142,12 @@ fn C(n: i32, m: i32) -> i32 = "int.sadd"; // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %B.decl.loc25: %B.type.573c71.1 = fn_decl @B.loc25 [concrete = constants.%B.08ed21.1] { -// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete] -// CHECK:STDOUT: %m.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %m.patt: %pattern_type.6b6 = at_binding_pattern m, %m.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc25_32 [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%n.param_patt] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete = constants.%n.patt] +// CHECK:STDOUT: %m.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%m.param_patt] +// CHECK:STDOUT: %m.patt: %pattern_type.6b6 = at_binding_pattern m, %m.param_patt [concrete = constants.%m.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc25_32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc25_32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc25: Core.Form = init_form %i32.loc25_32 [concrete = constants.%.795] @@ -155,12 +161,12 @@ fn C(n: i32, m: i32) -> i32 = "int.sadd"; // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %B.decl.loc33: %B.type.573c71.2 = fn_decl @B.loc33 [concrete = constants.%B.08ed21.2] { -// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete] -// CHECK:STDOUT: %m.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %m.patt: %pattern_type.6b6 = at_binding_pattern m, %m.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc33_25 [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%n.param_patt] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete = constants.%n.patt] +// CHECK:STDOUT: %m.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%m.param_patt] +// CHECK:STDOUT: %m.patt: %pattern_type.6b6 = at_binding_pattern m, %m.param_patt [concrete = constants.%m.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc33_25 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc33_25: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc33: Core.Form = init_form %i32.loc33_25 [concrete = constants.%.795] @@ -174,12 +180,12 @@ fn C(n: i32, m: i32) -> i32 = "int.sadd"; // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl.loc35: %C.type.322e3b.1 = fn_decl @C.loc35 [concrete = constants.%C.010386.1] { -// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete] -// CHECK:STDOUT: %m.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %m.patt: %pattern_type.6b6 = at_binding_pattern m, %m.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc35_25 [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%n.param_patt] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete = constants.%n.patt] +// CHECK:STDOUT: %m.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%m.param_patt] +// CHECK:STDOUT: %m.patt: %pattern_type.6b6 = at_binding_pattern m, %m.param_patt [concrete = constants.%m.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc35_25 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc35_25: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc35: Core.Form = init_form %i32.loc35_25 [concrete = constants.%.795] @@ -193,12 +199,12 @@ fn C(n: i32, m: i32) -> i32 = "int.sadd"; // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl.loc43: %C.type.322e3b.2 = fn_decl @C.loc43 [concrete = constants.%C.010386.2] { -// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete] -// CHECK:STDOUT: %m.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %m.patt: %pattern_type.6b6 = at_binding_pattern m, %m.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc43_25 [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%n.param_patt] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete = constants.%n.patt] +// CHECK:STDOUT: %m.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%m.param_patt] +// CHECK:STDOUT: %m.patt: %pattern_type.6b6 = at_binding_pattern m, %m.param_patt [concrete = constants.%m.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc43_25 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc43_25: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc43: Core.Form = init_form %i32.loc43_25 [concrete = constants.%.795] diff --git a/toolchain/check/testdata/function/builtin/import.carbon b/toolchain/check/testdata/function/builtin/import.carbon index d5d8dcfaaf03..e73c3c98ff12 100644 --- a/toolchain/check/testdata/function/builtin/import.carbon +++ b/toolchain/check/testdata/function/builtin/import.carbon @@ -37,20 +37,34 @@ var arr: array(i32, Core.AsIntLiteral(Core.TestAdd(Core.AsI32(1), Core.AsI32(2)) // CHECK:STDOUT: constants { // CHECK:STDOUT: %.805: Core.Form = init_form type [concrete] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %return.param_patt.70e: %pattern_type.98f = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.3ae: %pattern_type.98f = return_slot_pattern %return.param_patt.70e, type [concrete] // CHECK:STDOUT: %MakeIntLiteral.type: type = fn_type @MakeIntLiteral [concrete] // CHECK:STDOUT: %MakeIntLiteral: %MakeIntLiteral.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.dc0: type = pattern_type Core.IntLiteral [concrete] +// CHECK:STDOUT: %N.param_patt: %pattern_type.dc0 = value_param_pattern [concrete] +// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = at_binding_pattern N, %N.param_patt [concrete] // CHECK:STDOUT: %Int.type: type = fn_type @Int [concrete] // CHECK:STDOUT: %Int: %Int.type = struct_value () [concrete] +// CHECK:STDOUT: %a.param_patt.ba0: %pattern_type.dc0 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt.442: %pattern_type.dc0 = at_binding_pattern a, %a.param_patt.ba0 [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %.9cb: Core.Form = init_form %i32.builtin [concrete] // CHECK:STDOUT: %pattern_type.956: type = pattern_type %i32.builtin [concrete] +// CHECK:STDOUT: %return.param_patt.903: %pattern_type.956 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.930: %pattern_type.956 = return_slot_pattern %return.param_patt.903, %i32.builtin [concrete] // CHECK:STDOUT: %AsI32.type: type = fn_type @AsI32 [concrete] // CHECK:STDOUT: %AsI32: %AsI32.type = struct_value () [concrete] +// CHECK:STDOUT: %a.param_patt.b97: %pattern_type.956 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt.9c9: %pattern_type.956 = at_binding_pattern a, %a.param_patt.b97 [concrete] // CHECK:STDOUT: %.f7d: Core.Form = init_form Core.IntLiteral [concrete] +// CHECK:STDOUT: %return.param_patt.eab: %pattern_type.dc0 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.cd4: %pattern_type.dc0 = return_slot_pattern %return.param_patt.eab, Core.IntLiteral [concrete] // CHECK:STDOUT: %AsIntLiteral.type: type = fn_type @AsIntLiteral [concrete] // CHECK:STDOUT: %AsIntLiteral: %AsIntLiteral.type = struct_value () [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.956 = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.956 = at_binding_pattern b, %b.param_patt [concrete] // CHECK:STDOUT: %TestAdd.type: type = fn_type @TestAdd [concrete] // CHECK:STDOUT: %TestAdd: %TestAdd.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -65,8 +79,8 @@ var arr: array(i32, Core.AsIntLiteral(Core.TestAdd(Core.AsI32(1), Core.AsI32(2)) // CHECK:STDOUT: .TestAdd = %TestAdd.decl // CHECK:STDOUT: } // CHECK:STDOUT: %MakeIntLiteral.decl: %MakeIntLiteral.type = fn_decl @MakeIntLiteral [concrete = constants.%MakeIntLiteral] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.98f = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern %return.param_patt, %.loc5_24.1 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.98f = out_param_pattern [concrete = constants.%return.param_patt.70e] +// CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern %return.param_patt, %.loc5_24.1 [concrete = constants.%return.patt.3ae] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc5_24.1: type = type_literal type [concrete = type] // CHECK:STDOUT: %.loc5_24.2: Core.Form = init_form %.loc5_24.1 [concrete = constants.%.805] @@ -79,10 +93,10 @@ var arr: array(i32, Core.AsIntLiteral(Core.TestAdd(Core.AsI32(1), Core.AsI32(2)) // CHECK:STDOUT: %.loc6_35.2: type = converted %MakeIntLiteral.call, %.loc6_35.1 [concrete = Core.IntLiteral] // CHECK:STDOUT: %IntLiteral: type = alias_binding IntLiteral, %.loc6_35.2 [concrete = Core.IntLiteral] // CHECK:STDOUT: %Int.decl: %Int.type = fn_decl @Int [concrete = constants.%Int] { -// CHECK:STDOUT: %N.param_patt: %pattern_type.dc0 = value_param_pattern [concrete] -// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = at_binding_pattern N, %N.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.98f = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern %return.param_patt, %.loc7_26.1 [concrete] +// CHECK:STDOUT: %N.param_patt: %pattern_type.dc0 = value_param_pattern [concrete = constants.%N.param_patt] +// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = at_binding_pattern N, %N.param_patt [concrete = constants.%N.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.98f = out_param_pattern [concrete = constants.%return.param_patt.70e] +// CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern %return.param_patt, %.loc7_26.1 [concrete = constants.%return.patt.3ae] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc7_26.1: type = type_literal type [concrete = type] // CHECK:STDOUT: %.loc7_26.2: Core.Form = init_form %.loc7_26.1 [concrete = constants.%.805] @@ -93,10 +107,10 @@ var arr: array(i32, Core.AsIntLiteral(Core.TestAdd(Core.AsI32(1), Core.AsI32(2)) // CHECK:STDOUT: %return: ref type = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %AsI32.decl: %AsI32.type = fn_decl @AsI32 [concrete = constants.%AsI32] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.dc0 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.dc0 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.956 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.956 = return_slot_pattern %return.param_patt, %.loc9_28.1 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.dc0 = value_param_pattern [concrete = constants.%a.param_patt.ba0] +// CHECK:STDOUT: %a.patt: %pattern_type.dc0 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt.442] +// CHECK:STDOUT: %return.param_patt: %pattern_type.956 = out_param_pattern [concrete = constants.%return.param_patt.903] +// CHECK:STDOUT: %return.patt: %pattern_type.956 = return_slot_pattern %return.param_patt, %.loc9_28.1 [concrete = constants.%return.patt.930] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc9_28.1: type = type_literal constants.%i32.builtin [concrete = constants.%i32.builtin] // CHECK:STDOUT: %.loc9_28.2: Core.Form = init_form %.loc9_28.1 [concrete = constants.%.9cb] @@ -107,10 +121,10 @@ var arr: array(i32, Core.AsIntLiteral(Core.TestAdd(Core.AsI32(1), Core.AsI32(2)) // CHECK:STDOUT: %return: ref %i32.builtin = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %AsIntLiteral.decl: %AsIntLiteral.type = fn_decl @AsIntLiteral [concrete = constants.%AsIntLiteral] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.956 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.956 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.dc0 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.dc0 = return_slot_pattern %return.param_patt, %IntLiteral.ref [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.956 = value_param_pattern [concrete = constants.%a.param_patt.b97] +// CHECK:STDOUT: %a.patt: %pattern_type.956 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt.9c9] +// CHECK:STDOUT: %return.param_patt: %pattern_type.dc0 = out_param_pattern [concrete = constants.%return.param_patt.eab] +// CHECK:STDOUT: %return.patt: %pattern_type.dc0 = return_slot_pattern %return.param_patt, %IntLiteral.ref [concrete = constants.%return.patt.cd4] // CHECK:STDOUT: } { // CHECK:STDOUT: %IntLiteral.ref: type = name_ref IntLiteral, file.%IntLiteral [concrete = Core.IntLiteral] // CHECK:STDOUT: %.loc10_28: Core.Form = init_form %IntLiteral.ref [concrete = constants.%.f7d] @@ -121,12 +135,12 @@ var arr: array(i32, Core.AsIntLiteral(Core.TestAdd(Core.AsI32(1), Core.AsI32(2)) // CHECK:STDOUT: %return: ref Core.IntLiteral = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestAdd.decl: %TestAdd.type = fn_decl @TestAdd [concrete = constants.%TestAdd] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.956 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.956 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.956 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.956 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.956 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.956 = return_slot_pattern %return.param_patt, %.loc12_31.1 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.956 = value_param_pattern [concrete = constants.%a.param_patt.b97] +// CHECK:STDOUT: %a.patt: %pattern_type.956 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt.9c9] +// CHECK:STDOUT: %b.param_patt: %pattern_type.956 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.956 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.956 = out_param_pattern [concrete = constants.%return.param_patt.903] +// CHECK:STDOUT: %return.patt: %pattern_type.956 = return_slot_pattern %return.param_patt, %.loc12_31.1 [concrete = constants.%return.patt.930] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc12_31.1: type = type_literal constants.%i32.builtin [concrete = constants.%i32.builtin] // CHECK:STDOUT: %.loc12_31.2: Core.Form = init_form %.loc12_31.1 [concrete = constants.%.9cb] @@ -172,6 +186,8 @@ var arr: array(i32, Core.AsIntLiteral(Core.TestAdd(Core.AsI32(1), Core.AsI32(2)) // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_3.1ba, %i32.builtin [concrete] // CHECK:STDOUT: %pattern_type.9e2: type = pattern_type %array_type [concrete] +// CHECK:STDOUT: %arr.patt: %pattern_type.9e2 = ref_binding_pattern arr [concrete] +// CHECK:STDOUT: %arr.var_patt: %pattern_type.9e2 = var_pattern %arr.patt [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (%i32.builtin, %i32.builtin, %i32.builtin) [concrete] // CHECK:STDOUT: %tuple: %tuple.type = tuple_value (%int_1.f38, %int_2.5a1, %int_3.a0f) [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] @@ -199,8 +215,8 @@ var arr: array(i32, Core.AsIntLiteral(Core.TestAdd(Core.AsI32(1), Core.AsI32(2)) // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %arr.patt: %pattern_type.9e2 = ref_binding_pattern arr [concrete] -// CHECK:STDOUT: %arr.var_patt: %pattern_type.9e2 = var_pattern %arr.patt [concrete] +// CHECK:STDOUT: %arr.patt: %pattern_type.9e2 = ref_binding_pattern arr [concrete = constants.%arr.patt] +// CHECK:STDOUT: %arr.var_patt: %pattern_type.9e2 = var_pattern %arr.patt [concrete = constants.%arr.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %arr.var: ref %array_type = var %arr.var_patt [concrete] // CHECK:STDOUT: %.loc4_82: type = splice_block %array_type [concrete = constants.%array_type] { diff --git a/toolchain/check/testdata/function/builtin/method.carbon b/toolchain/check/testdata/function/builtin/method.carbon index c0a5ee772ae0..2ecff9294d5a 100644 --- a/toolchain/check/testdata/function/builtin/method.carbon +++ b/toolchain/check/testdata/function/builtin/method.carbon @@ -30,7 +30,13 @@ var arr: array(i32, (1 as i32).(I.F)(2)); // CHECK:STDOUT: %Self.37e: %I.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type.c84: type = facet_access_type %Self.37e [symbolic] // CHECK:STDOUT: %pattern_type.c60: type = pattern_type %Self.as_type.c84 [symbolic] +// CHECK:STDOUT: %self.param_patt.a33: %pattern_type.c60 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.696: %pattern_type.c60 = at_binding_pattern self, %self.param_patt.a33 [symbolic] +// CHECK:STDOUT: %other.param_patt.03c: %pattern_type.c60 = value_param_pattern [symbolic] +// CHECK:STDOUT: %other.patt.852: %pattern_type.c60 = at_binding_pattern other, %other.param_patt.03c [symbolic] // CHECK:STDOUT: %.8fc: Core.Form = init_form %Self.as_type.c84 [symbolic] +// CHECK:STDOUT: %return.param_patt.434: %pattern_type.c60 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.44a: %pattern_type.c60 = return_slot_pattern %return.param_patt.434, %Self.as_type.c84 [symbolic] // CHECK:STDOUT: %I.WithSelf.F.type.dcc: type = fn_type @I.WithSelf.F, @I.WithSelf(%Self.37e) [symbolic] // CHECK:STDOUT: %I.WithSelf.F.ec6: %I.WithSelf.F.type.dcc = struct_value () [symbolic] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] @@ -41,7 +47,13 @@ var arr: array(i32, (1 as i32).(I.F)(2)); // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness @i32.as.I.impl.%I.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %self.param_patt.049: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.f6c: %pattern_type.6b6 = at_binding_pattern self, %self.param_patt.049 [concrete] +// CHECK:STDOUT: %other.param_patt.12c: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %other.patt.656: %pattern_type.6b6 = at_binding_pattern other, %other.param_patt.12c [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %i32.as.I.impl.F.type: type = fn_type @i32.as.I.impl.F [concrete] // CHECK:STDOUT: %i32.as.I.impl.F: %i32.as.I.impl.F.type = struct_value () [concrete] // CHECK:STDOUT: %I.facet: %I.type = facet_value %i32, (%I.impl_witness) [concrete] @@ -99,6 +111,8 @@ var arr: array(i32, (1 as i32).(I.F)(2)); // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_3.1ba, %i32 [concrete] // CHECK:STDOUT: %pattern_type.771: type = pattern_type %array_type [concrete] +// CHECK:STDOUT: %arr.patt: %pattern_type.771 = ref_binding_pattern arr [concrete] +// CHECK:STDOUT: %arr.var_patt: %pattern_type.771 = var_pattern %arr.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.150: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] @@ -146,8 +160,8 @@ var arr: array(i32, (1 as i32).(I.F)(2)); // CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type] // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %arr.patt: %pattern_type.771 = ref_binding_pattern arr [concrete] -// CHECK:STDOUT: %arr.var_patt: %pattern_type.771 = var_pattern %arr.patt [concrete] +// CHECK:STDOUT: %arr.patt: %pattern_type.771 = ref_binding_pattern arr [concrete = constants.%arr.patt] +// CHECK:STDOUT: %arr.var_patt: %pattern_type.771 = var_pattern %arr.patt [concrete = constants.%arr.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %arr.var: ref %array_type = var %arr.var_patt [concrete] // CHECK:STDOUT: %.loc23_40: type = splice_block %array_type [concrete = constants.%array_type] { @@ -194,12 +208,12 @@ var arr: array(i32, (1 as i32).(I.F)(2)); // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %I.WithSelf.F.decl: @I.WithSelf.%I.WithSelf.F.type (%I.WithSelf.F.type.dcc) = fn_decl @I.WithSelf.F [symbolic = @I.WithSelf.%I.WithSelf.F (constants.%I.WithSelf.F.ec6)] { -// CHECK:STDOUT: %self.param_patt: @I.WithSelf.F.%pattern_type (%pattern_type.c60) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @I.WithSelf.F.%pattern_type (%pattern_type.c60) = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %other.param_patt: @I.WithSelf.F.%pattern_type (%pattern_type.c60) = value_param_pattern [concrete] -// CHECK:STDOUT: %other.patt: @I.WithSelf.F.%pattern_type (%pattern_type.c60) = at_binding_pattern other, %other.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @I.WithSelf.F.%pattern_type (%pattern_type.c60) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @I.WithSelf.F.%pattern_type (%pattern_type.c60) = return_slot_pattern %return.param_patt, %.loc16_30.2 [concrete] +// CHECK:STDOUT: %self.param_patt.loc16_8.1: @I.WithSelf.F.%pattern_type (%pattern_type.c60) = value_param_pattern [symbolic = %self.param_patt.loc16_8.2 (constants.%self.param_patt.a33)] +// CHECK:STDOUT: %self.patt.loc16_8.1: @I.WithSelf.F.%pattern_type (%pattern_type.c60) = at_binding_pattern self, %self.param_patt.loc16_8.1 [symbolic = %self.patt.loc16_8.2 (constants.%self.patt.696)] +// CHECK:STDOUT: %other.param_patt.loc16_19.1: @I.WithSelf.F.%pattern_type (%pattern_type.c60) = value_param_pattern [symbolic = %other.param_patt.loc16_19.2 (constants.%other.param_patt.03c)] +// CHECK:STDOUT: %other.patt.loc16_19.1: @I.WithSelf.F.%pattern_type (%pattern_type.c60) = at_binding_pattern other, %other.param_patt.loc16_19.1 [symbolic = %other.patt.loc16_19.2 (constants.%other.patt.852)] +// CHECK:STDOUT: %return.param_patt.loc16_30.1: @I.WithSelf.F.%pattern_type (%pattern_type.c60) = out_param_pattern [symbolic = %return.param_patt.loc16_30.2 (constants.%return.param_patt.434)] +// CHECK:STDOUT: %return.patt.loc16_27.1: @I.WithSelf.F.%pattern_type (%pattern_type.c60) = return_slot_pattern %return.param_patt.loc16_30.1, %.loc16_30.2 [symbolic = %return.patt.loc16_27.2 (constants.%return.patt.44a)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc16_30: %I.type = name_ref Self, @I.%Self [symbolic = %Self (constants.%Self.37e)] // CHECK:STDOUT: %Self.as_type.loc16_30: type = facet_access_type %Self.ref.loc16_30 [symbolic = %Self.as_type.loc16_8.1 (constants.%Self.as_type.c84)] @@ -234,12 +248,12 @@ var arr: array(i32, (1 as i32).(I.F)(2)); // CHECK:STDOUT: // CHECK:STDOUT: impl @i32.as.I.impl: %i32 as %I.ref { // CHECK:STDOUT: %i32.as.I.impl.F.decl: %i32.as.I.impl.F.type = fn_decl @i32.as.I.impl.F [concrete = constants.%i32.as.I.impl.F] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.6b6 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %other.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %other.patt: %pattern_type.6b6 = at_binding_pattern other, %other.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc20_34 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%self.param_patt.049] +// CHECK:STDOUT: %self.patt: %pattern_type.6b6 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.f6c] +// CHECK:STDOUT: %other.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%other.param_patt.12c] +// CHECK:STDOUT: %other.patt: %pattern_type.6b6 = at_binding_pattern other, %other.param_patt [concrete = constants.%other.patt.656] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc20_34 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc20_34: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc20: Core.Form = init_form %i32.loc20_34 [concrete = constants.%.795] @@ -265,7 +279,13 @@ var arr: array(i32, (1 as i32).(I.F)(2)); // CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.37e)] // CHECK:STDOUT: %Self.as_type.loc16_8.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc16_8.1 (constants.%Self.as_type.c84)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc16_8.1 [symbolic = %pattern_type (constants.%pattern_type.c60)] +// CHECK:STDOUT: %self.param_patt.loc16_8.2: @I.WithSelf.F.%pattern_type (%pattern_type.c60) = value_param_pattern [symbolic = %self.param_patt.loc16_8.2 (constants.%self.param_patt.a33)] +// CHECK:STDOUT: %self.patt.loc16_8.2: @I.WithSelf.F.%pattern_type (%pattern_type.c60) = at_binding_pattern self, %self.param_patt.loc16_8.2 [symbolic = %self.patt.loc16_8.2 (constants.%self.patt.696)] +// CHECK:STDOUT: %other.param_patt.loc16_19.2: @I.WithSelf.F.%pattern_type (%pattern_type.c60) = value_param_pattern [symbolic = %other.param_patt.loc16_19.2 (constants.%other.param_patt.03c)] +// CHECK:STDOUT: %other.patt.loc16_19.2: @I.WithSelf.F.%pattern_type (%pattern_type.c60) = at_binding_pattern other, %other.param_patt.loc16_19.2 [symbolic = %other.patt.loc16_19.2 (constants.%other.patt.852)] // CHECK:STDOUT: %.loc16_30.1: Core.Form = init_form %Self.as_type.loc16_8.1 [symbolic = %.loc16_30.1 (constants.%.8fc)] +// CHECK:STDOUT: %return.param_patt.loc16_30.2: @I.WithSelf.F.%pattern_type (%pattern_type.c60) = out_param_pattern [symbolic = %return.param_patt.loc16_30.2 (constants.%return.param_patt.434)] +// CHECK:STDOUT: %return.patt.loc16_27.2: @I.WithSelf.F.%pattern_type (%pattern_type.c60) = return_slot_pattern %return.param_patt.loc16_30.2, %Self.as_type.loc16_8.1 [symbolic = %return.patt.loc16_27.2 (constants.%return.patt.44a)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @I.WithSelf.F.%Self.as_type.loc16_8.1 (%Self.as_type.c84), %other.param: @I.WithSelf.F.%Self.as_type.loc16_8.1 (%Self.as_type.c84)) -> out %return.param: @I.WithSelf.F.%Self.as_type.loc16_8.1 (%Self.as_type.c84); // CHECK:STDOUT: } @@ -296,7 +316,13 @@ var arr: array(i32, (1 as i32).(I.F)(2)); // CHECK:STDOUT: %Self => constants.%Self.37e // CHECK:STDOUT: %Self.as_type.loc16_8.1 => constants.%Self.as_type.c84 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.c60 +// CHECK:STDOUT: %self.param_patt.loc16_8.2 => constants.%self.param_patt.a33 +// CHECK:STDOUT: %self.patt.loc16_8.2 => constants.%self.patt.696 +// CHECK:STDOUT: %other.param_patt.loc16_19.2 => constants.%other.param_patt.03c +// CHECK:STDOUT: %other.patt.loc16_19.2 => constants.%other.patt.852 // CHECK:STDOUT: %.loc16_30.1 => constants.%.8fc +// CHECK:STDOUT: %return.param_patt.loc16_30.2 => constants.%return.param_patt.434 +// CHECK:STDOUT: %return.patt.loc16_27.2 => constants.%return.patt.44a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I.WithSelf(constants.%I.facet) { @@ -310,6 +336,12 @@ var arr: array(i32, (1 as i32).(I.F)(2)); // CHECK:STDOUT: %Self => constants.%I.facet // CHECK:STDOUT: %Self.as_type.loc16_8.1 => constants.%i32 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.6b6 +// CHECK:STDOUT: %self.param_patt.loc16_8.2 => constants.%self.param_patt.049 +// CHECK:STDOUT: %self.patt.loc16_8.2 => constants.%self.patt.f6c +// CHECK:STDOUT: %other.param_patt.loc16_19.2 => constants.%other.param_patt.12c +// CHECK:STDOUT: %other.patt.loc16_19.2 => constants.%other.patt.656 // CHECK:STDOUT: %.loc16_30.1 => constants.%.795 +// CHECK:STDOUT: %return.param_patt.loc16_30.2 => constants.%return.param_patt.a9a +// CHECK:STDOUT: %return.patt.loc16_27.2 => constants.%return.patt.e1b // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/function/builtin/positional.carbon b/toolchain/check/testdata/function/builtin/positional.carbon index 46da8d23808b..d33fba49906d 100644 --- a/toolchain/check/testdata/function/builtin/positional.carbon +++ b/toolchain/check/testdata/function/builtin/positional.carbon @@ -43,6 +43,8 @@ fn Mul = "int.smul"; // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] // CHECK:STDOUT: %Add.type: type = fn_type @Add [concrete] // CHECK:STDOUT: %Add: %Add.type = struct_value () [concrete] // CHECK:STDOUT: %Mul.type: type = fn_type @Mul [concrete] @@ -66,8 +68,8 @@ fn Mul = "int.smul"; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Add.decl: %Add.type = fn_decl @Add [concrete = constants.%Add] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc10: Core.Form = init_form %i32 [concrete = constants.%.795] diff --git a/toolchain/check/testdata/function/call/alias.carbon b/toolchain/check/testdata/function/call/alias.carbon index c8e3a1ec773b..68c904d925bc 100644 --- a/toolchain/check/testdata/function/call/alias.carbon +++ b/toolchain/check/testdata/function/call/alias.carbon @@ -27,10 +27,14 @@ fn Main() { // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %.262: Core.Form = init_form %empty_tuple.type [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern %return.param_patt, %empty_tuple.type [concrete] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.cb1 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.cb1 = var_pattern %b.patt [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] // CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] @@ -54,8 +58,8 @@ fn Main() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern %return.param_patt, %.loc15_12.2 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern %return.param_patt, %.loc15_12.2 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc15_12.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc15_12.2: type = converted %.loc15_12.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -79,8 +83,8 @@ fn Main() { // CHECK:STDOUT: fn @Main() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.cb1 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.cb1 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.cb1 = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type.cb1 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %empty_tuple.type = var %b.var_patt // CHECK:STDOUT: %B.ref: %A.type = name_ref B, file.%B [concrete = constants.%A] diff --git a/toolchain/check/testdata/function/call/empty_struct.carbon b/toolchain/check/testdata/function/call/empty_struct.carbon index 37088866f0d6..c710cae45b1c 100644 --- a/toolchain/check/testdata/function/call/empty_struct.carbon +++ b/toolchain/check/testdata/function/call/empty_struct.carbon @@ -26,7 +26,11 @@ fn Main() { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_struct_type [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %.469: Core.Form = init_form %empty_struct_type [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %empty_struct_type [concrete] // CHECK:STDOUT: %Echo.type: type = fn_type @Echo [concrete] // CHECK:STDOUT: %Echo: %Echo.type = struct_value () [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] @@ -39,10 +43,10 @@ fn Main() { // CHECK:STDOUT: .Main = %Main.decl // CHECK:STDOUT: } // CHECK:STDOUT: %Echo.decl: %Echo.type = fn_decl @Echo [concrete = constants.%Echo] { -// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %.loc15_20.2 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %.loc15_20.2 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc15_20.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] // CHECK:STDOUT: %.loc15_20.2: type = converted %.loc15_20.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type] diff --git a/toolchain/check/testdata/function/call/empty_tuple.carbon b/toolchain/check/testdata/function/call/empty_tuple.carbon index 8cabaed45bc3..bc421277c36d 100644 --- a/toolchain/check/testdata/function/call/empty_tuple.carbon +++ b/toolchain/check/testdata/function/call/empty_tuple.carbon @@ -26,7 +26,11 @@ fn Main() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %.262: Core.Form = init_form %empty_tuple.type [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %empty_tuple.type [concrete] // CHECK:STDOUT: %Echo.type: type = fn_type @Echo [concrete] // CHECK:STDOUT: %Echo: %Echo.type = struct_value () [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] @@ -39,10 +43,10 @@ fn Main() { // CHECK:STDOUT: .Main = %Main.decl // CHECK:STDOUT: } // CHECK:STDOUT: %Echo.decl: %Echo.type = fn_decl @Echo [concrete = constants.%Echo] { -// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %.loc15_20.2 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %.loc15_20.2 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc15_20.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc15_20.2: type = converted %.loc15_20.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] diff --git a/toolchain/check/testdata/function/call/fail_param_count.carbon b/toolchain/check/testdata/function/call/fail_param_count.carbon index 4181432c7845..fa55f6997a42 100644 --- a/toolchain/check/testdata/function/call/fail_param_count.carbon +++ b/toolchain/check/testdata/function/call/fail_param_count.carbon @@ -79,8 +79,13 @@ fn Main() { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt.28ecbf.1: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %Run1.type: type = fn_type @Run1 [concrete] // CHECK:STDOUT: %Run1: %Run1.type = struct_value () [concrete] +// CHECK:STDOUT: %a.patt.28ecbf.2: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete] // CHECK:STDOUT: %Run2.type: type = fn_type @Run2 [concrete] // CHECK:STDOUT: %Run2: %Run2.type = struct_value () [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] @@ -109,18 +114,18 @@ fn Main() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Run0.decl: %Run0.type = fn_decl @Run0 [concrete = constants.%Run0] {} {} // CHECK:STDOUT: %Run1.decl: %Run1.type = fn_decl @Run1 [concrete = constants.%Run1] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt.28ecbf.1] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %i32 = value_param call_param0 // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %a: %i32 = value_binding a, %a.param // CHECK:STDOUT: } // CHECK:STDOUT: %Run2.decl: %Run2.type = fn_decl @Run2 [concrete = constants.%Run2] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt.28ecbf.2] +// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %i32 = value_param call_param0 // CHECK:STDOUT: %i32.loc17_19: type = type_literal constants.%i32 [concrete = constants.%i32] diff --git a/toolchain/check/testdata/function/call/fail_param_type.carbon b/toolchain/check/testdata/function/call/fail_param_type.carbon index d7bc86e5119b..b50079dfea8d 100644 --- a/toolchain/check/testdata/function/call/fail_param_type.carbon +++ b/toolchain/check/testdata/function/call/fail_param_type.carbon @@ -37,6 +37,8 @@ fn F() { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] @@ -65,8 +67,8 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %i32 = value_param call_param0 // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] diff --git a/toolchain/check/testdata/function/call/fail_return_type_mismatch.carbon b/toolchain/check/testdata/function/call/fail_return_type_mismatch.carbon index 82d00ec6ce68..eb470c0b573d 100644 --- a/toolchain/check/testdata/function/call/fail_return_type_mismatch.carbon +++ b/toolchain/check/testdata/function/call/fail_return_type_mismatch.carbon @@ -35,6 +35,8 @@ fn Run() { // CHECK:STDOUT: %f64.dc1: type = class_type @Float, @Float(%int_64) [concrete] // CHECK:STDOUT: %.b6c: Core.Form = init_form %f64.dc1 [concrete] // CHECK:STDOUT: %pattern_type.fb7: type = pattern_type %f64.dc1 [concrete] +// CHECK:STDOUT: %return.param_patt.b08: %pattern_type.fb7 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.8e6: %pattern_type.fb7 = return_slot_pattern %return.param_patt.b08, %f64.dc1 [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: %float.6da: Core.FloatLiteral = float_literal_value 10e-1 [concrete] @@ -62,6 +64,8 @@ fn Run() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.6b6 = var_pattern %x.patt [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.2: type = fn_type @Destroy.Op.loc25_3.2 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.2: %Destroy.Op.type.1d8f74.2 = struct_value () [concrete] @@ -92,8 +96,8 @@ fn Run() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Foo.decl: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.fb7 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.fb7 = return_slot_pattern %return.param_patt, %f64 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.fb7 = out_param_pattern [concrete = constants.%return.param_patt.b08] +// CHECK:STDOUT: %return.patt: %pattern_type.fb7 = return_slot_pattern %return.param_patt, %f64 [concrete = constants.%return.patt.8e6] // CHECK:STDOUT: } { // CHECK:STDOUT: %f64: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %.loc15_13: Core.Form = init_form %f64 [concrete = constants.%.b6c] @@ -118,8 +122,8 @@ fn Run() { // CHECK:STDOUT: fn @Run() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.6b6 = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.6b6 = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %i32 = var %x.var_patt // CHECK:STDOUT: %Foo.ref: %Foo.type = name_ref Foo, file.%Foo.decl [concrete = constants.%Foo] diff --git a/toolchain/check/testdata/function/call/form.carbon b/toolchain/check/testdata/function/call/form.carbon index 832194a37372..f72f60401310 100644 --- a/toolchain/check/testdata/function/call/form.carbon +++ b/toolchain/check/testdata/function/call/form.carbon @@ -214,14 +214,16 @@ fn F(Form:! Core.Form) ->? Form; // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.512: Core.Form = ref_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.6b6 = ref_param_pattern [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = at_binding_pattern x, %x.param_patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %x.param_patt: %pattern_type.6b6 = ref_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.6b6 = ref_param_pattern [concrete = constants.%x.param_patt] +// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: ref %i32 = ref_param call_param0 // CHECK:STDOUT: %.loc4_15.1: Core.Form = splice_block %.loc4_15.2 [concrete = constants.%.512] { @@ -252,6 +254,9 @@ fn F(Form:! Core.Form) ->? Form; // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.6b6 = ref_param_pattern [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.6b6 = var_pattern %x.param_patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = at_binding_pattern x, %x.var_patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] @@ -281,9 +286,9 @@ fn F(Form:! Core.Form) ->? Form; // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %x.param_patt: %pattern_type.6b6 = ref_param_pattern [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.6b6 = var_pattern %x.param_patt [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = at_binding_pattern x, %x.var_patt [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.6b6 = ref_param_pattern [concrete = constants.%x.param_patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.6b6 = var_pattern %x.param_patt [concrete = constants.%x.var_patt] +// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = at_binding_pattern x, %x.var_patt [concrete = constants.%x.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: ref %i32 = ref_param call_param0 // CHECK:STDOUT: %.loc4_15.1: Core.Form = splice_block %.loc4_15.2 [concrete = constants.%.795] { @@ -329,6 +334,8 @@ fn F(Form:! Core.Form) ->? Form; // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.c2a: Core.Form = value_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = at_binding_pattern x, %x.param_patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] @@ -355,8 +362,8 @@ fn F(Form:! Core.Form) ->? Form; // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %x.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%x.param_patt] +// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %i32 = value_param call_param0 // CHECK:STDOUT: %.loc4_15.1: Core.Form = splice_block %.loc4_15.2 [concrete = constants.%.c2a] { @@ -391,14 +398,16 @@ fn F(Form:! Core.Form) ->? Form; // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %.9f9: Core.Form = ref_form %empty_tuple.type [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type = ref_param_pattern [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = at_binding_pattern x, %x.param_patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %x.param_patt: %pattern_type = ref_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type = ref_param_pattern [concrete = constants.%x.param_patt] +// CHECK:STDOUT: %x.patt: %pattern_type = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: ref %empty_tuple.type = ref_param call_param0 // CHECK:STDOUT: %.loc4_15.1: Core.Form = splice_block %.loc4_15.2 [concrete = constants.%.9f9] { @@ -419,14 +428,17 @@ fn F(Form:! Core.Form) ->? Form; // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.512: Core.Form = ref_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %.ae0: %pattern_type.6b6 = ref_return_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %.ae0, %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] +// CHECK:STDOUT: %_.patt: %pattern_type.6b6 = ref_binding_pattern _ [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %.loc4_17.1: %pattern_type.6b6 = ref_return_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %.loc4_17.1, constants.%i32 [concrete] +// CHECK:STDOUT: %.loc4_17.1: %pattern_type.6b6 = ref_return_pattern [concrete = constants.%.ae0] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %.loc4_17.1, constants.%i32 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc4_17.2: Core.Form = ref_form %i32 [concrete = constants.%.512] @@ -440,7 +452,7 @@ fn F(Form:! Core.Form) ->? Form; // CHECK:STDOUT: fn @G() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt: %pattern_type.6b6 = ref_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt: %pattern_type.6b6 = ref_binding_pattern _ [concrete = constants.%_.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %F.ref: %F.type = name_ref F, file.%F.decl [concrete = constants.%F] // CHECK:STDOUT: %F.call: ref %i32 = call %F.ref() @@ -457,17 +469,21 @@ fn F(Form:! Core.Form) ->? Form; // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] +// CHECK:STDOUT: %_.patt: %pattern_type.6b6 = ref_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.var_patt: %pattern_type.6b6 = var_pattern %_.patt [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.2: type = fn_type @Destroy.Op.loc9_7.2 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.2: %Destroy.Op.type.1d8f74.2 = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, constants.%i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, constants.%i32 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc4: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -481,8 +497,8 @@ fn F(Form:! Core.Form) ->? Form; // CHECK:STDOUT: fn @G() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt: %pattern_type.6b6 = ref_binding_pattern _ [concrete] -// CHECK:STDOUT: %_.var_patt: %pattern_type.6b6 = var_pattern %_.patt [concrete] +// CHECK:STDOUT: %_.patt: %pattern_type.6b6 = ref_binding_pattern _ [concrete = constants.%_.patt] +// CHECK:STDOUT: %_.var_patt: %pattern_type.6b6 = var_pattern %_.patt [concrete = constants.%_.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %_.var: ref %i32 = var %_.var_patt // CHECK:STDOUT: %F.ref: %F.type = name_ref F, file.%F.decl [concrete = constants.%F] @@ -509,14 +525,17 @@ fn F(Form:! Core.Form) ->? Form; // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.c2a: Core.Form = value_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %.1a5: %pattern_type.6b6 = value_return_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %.1a5, %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] +// CHECK:STDOUT: %_.patt: %pattern_type.6b6 = value_binding_pattern _ [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %.loc4_17.1: %pattern_type.6b6 = value_return_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %.loc4_17.1, constants.%i32 [concrete] +// CHECK:STDOUT: %.loc4_17.1: %pattern_type.6b6 = value_return_pattern [concrete = constants.%.1a5] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %.loc4_17.1, constants.%i32 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc4_17.2: Core.Form = value_form %i32 [concrete = constants.%.c2a] @@ -530,7 +549,7 @@ fn F(Form:! Core.Form) ->? Form; // CHECK:STDOUT: fn @G() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt: %pattern_type.6b6 = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt: %pattern_type.6b6 = value_binding_pattern _ [concrete = constants.%_.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %F.ref: %F.type = name_ref F, file.%F.decl [concrete = constants.%F] // CHECK:STDOUT: %F.call: %i32 = call %F.ref() @@ -545,17 +564,20 @@ fn F(Form:! Core.Form) ->? Form; // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.13f: type = pattern_type Core.Form [concrete] +// CHECK:STDOUT: %Form.patt: %pattern_type.13f = symbolic_binding_pattern Form, 0 [symbolic] // CHECK:STDOUT: %Form: Core.Form = symbolic_binding Form, 0 [symbolic] // CHECK:STDOUT: %.344: Core.Form = splice_inst @F.%.loc4_28.1 [template] // CHECK:STDOUT: %.82f: type = type_component_of %.344 [template] // CHECK:STDOUT: %pattern_type.ec7: type = pattern_type %.82f [template] // CHECK:STDOUT: %.f74: %.82f = splice_inst @F.%.loc4_24.2 [template] +// CHECK:STDOUT: %return.patt.08d: %pattern_type.ec7 = return_slot_pattern %.f74, %.82f [template] // CHECK:STDOUT: %.33d: = refine_form_action %Form [template] // CHECK:STDOUT: %.80a: Core.Form = splice_inst %.33d [template] // CHECK:STDOUT: %.af3: = out_form_param_pattern_action %.80a [template] // CHECK:STDOUT: %.465: type = type_component_of %.80a [template] // CHECK:STDOUT: %.e7f: %.465 = splice_inst %.af3 [template] // CHECK:STDOUT: %pattern_type.a51: type = pattern_type %.465 [template] +// CHECK:STDOUT: %return.patt.de8: %pattern_type.a51 = return_slot_pattern %.e7f, %.465 [template] // CHECK:STDOUT: %.cab: = callee_pattern_match_action %.e7f, call_param0 [template] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] @@ -572,8 +594,8 @@ fn F(Form:! Core.Form) ->? Form; // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %Form.patt: %pattern_type.13f = symbolic_binding_pattern Form, 0 [concrete] -// CHECK:STDOUT: %return.patt: @F.%pattern_type (%pattern_type.ec7) = return_slot_pattern %.loc4_24.6, constants.%.82f [concrete] +// CHECK:STDOUT: %Form.patt.loc4_10.1: %pattern_type.13f = symbolic_binding_pattern Form, 0 [symbolic = %Form.patt.loc4_10.2 (constants.%Form.patt)] +// CHECK:STDOUT: %return.patt.loc4_24.1: @F.%pattern_type (%pattern_type.ec7) = return_slot_pattern %.loc4_24.6, constants.%.82f [template = %return.patt.loc4_24.2 (constants.%return.patt.08d)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Form.ref.loc4_28: Core.Form = name_ref Form, %Form.loc4_10.2 [symbolic = %Form.loc4_10.1 (constants.%Form)] // CHECK:STDOUT: %.loc4_28.3: Core.Form = splice_inst %.loc4_28.1 [template = %.loc4_28.2 (constants.%.344)] @@ -590,6 +612,7 @@ fn F(Form:! Core.Form) ->? Form; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%Form.loc4_10.2: Core.Form) { +// CHECK:STDOUT: %Form.patt.loc4_10.2: %pattern_type.13f = symbolic_binding_pattern Form, 0 [symbolic = %Form.patt.loc4_10.2 (constants.%Form.patt)] // CHECK:STDOUT: %Form.loc4_10.1: Core.Form = symbolic_binding Form, 0 [symbolic = %Form.loc4_10.1 (constants.%Form)] // CHECK:STDOUT: %.loc4_28.1: = refine_form_action %Form.ref.loc4_28 [template] // CHECK:STDOUT: %.loc4_28.2: Core.Form = splice_inst %.loc4_28.1 [template = %.loc4_28.2 (constants.%.344)] @@ -597,12 +620,14 @@ fn F(Form:! Core.Form) ->? Form; // CHECK:STDOUT: %.loc4_24.3: type = type_component_of %.loc4_28.2 [template = %.loc4_24.3 (constants.%.82f)] // CHECK:STDOUT: %.loc4_24.4: @F.%.loc4_24.3 (%.82f) = splice_inst %.loc4_24.2 [template = %.loc4_24.4 (constants.%.f74)] // CHECK:STDOUT: %pattern_type: type = pattern_type %.loc4_24.3 [template = %pattern_type (constants.%pattern_type.ec7)] +// CHECK:STDOUT: %return.patt.loc4_24.2: @F.%pattern_type (%pattern_type.ec7) = return_slot_pattern %.loc4_24.4, %.loc4_24.3 [template = %return.patt.loc4_24.2 (constants.%return.patt.08d)] // CHECK:STDOUT: %.loc4_24.5: = callee_pattern_match_action %.loc4_24.6, call_param0 [template] // CHECK:STDOUT: // CHECK:STDOUT: fn() -> out %.loc4_24.1:? @F.%.loc4_28.1 (@F.%.loc4_28.1); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%Form) { +// CHECK:STDOUT: %Form.patt.loc4_10.2 => constants.%Form.patt // CHECK:STDOUT: %Form.loc4_10.1 => constants.%Form // CHECK:STDOUT: %.loc4_28.1 => constants.%.33d // CHECK:STDOUT: %.loc4_28.2 => constants.%.80a @@ -610,6 +635,7 @@ fn F(Form:! Core.Form) ->? Form; // CHECK:STDOUT: %.loc4_24.3 => constants.%.465 // CHECK:STDOUT: %.loc4_24.4 => constants.%.e7f // CHECK:STDOUT: %pattern_type => constants.%pattern_type.a51 +// CHECK:STDOUT: %return.patt.loc4_24.2 => constants.%return.patt.de8 // CHECK:STDOUT: %.loc4_24.5 => constants.%.cab // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/function/call/i32.carbon b/toolchain/check/testdata/function/call/i32.carbon index d84a65798dbf..4eac8f74b4e3 100644 --- a/toolchain/check/testdata/function/call/i32.carbon +++ b/toolchain/check/testdata/function/call/i32.carbon @@ -30,7 +30,11 @@ fn Main() { // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %Echo.type: type = fn_type @Echo [concrete] // CHECK:STDOUT: %Echo: %Echo.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] @@ -46,6 +50,8 @@ fn Main() { // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.4f6, @Int.as.Copy.impl.Op(%int_32) [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -95,10 +101,10 @@ fn Main() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Echo.decl: %Echo.type = fn_decl @Echo [concrete = constants.%Echo] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc15_20 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc15_20 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc15_20: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc15: Core.Form = init_form %i32.loc15_20 [concrete = constants.%.795] @@ -125,8 +131,8 @@ fn Main() { // CHECK:STDOUT: fn @Main() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var %b.var_patt // CHECK:STDOUT: %Echo.ref: %Echo.type = name_ref Echo, file.%Echo.decl [concrete = constants.%Echo] diff --git a/toolchain/check/testdata/function/call/more_param_ir.carbon b/toolchain/check/testdata/function/call/more_param_ir.carbon index 115b75382c17..86d58f94b575 100644 --- a/toolchain/check/testdata/function/call/more_param_ir.carbon +++ b/toolchain/check/testdata/function/call/more_param_ir.carbon @@ -29,6 +29,10 @@ fn Main() { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] @@ -38,6 +42,8 @@ fn Main() { // CHECK:STDOUT: %tuple.19c: %tuple.type.85c = tuple_value (%i32) [concrete] // CHECK:STDOUT: %tuple.type.a8a: type = tuple_type (%i32) [concrete] // CHECK:STDOUT: %pattern_type.e71: type = pattern_type %tuple.type.a8a [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.e71 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.e71 = var_pattern %x.patt [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %tuple.type.985: type = tuple_type (Core.IntLiteral) [concrete] // CHECK:STDOUT: %tuple.378: %tuple.type.985 = tuple_value (%int_1.5b8) [concrete] @@ -91,10 +97,10 @@ fn Main() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Foo.decl: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %i32 = value_param call_param0 // CHECK:STDOUT: %i32.loc15_18: type = type_literal constants.%i32 [concrete = constants.%i32] @@ -114,8 +120,8 @@ fn Main() { // CHECK:STDOUT: fn @Main() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.e71 = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.e71 = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.e71 = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.e71 = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %tuple.type.a8a = var %x.var_patt // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] diff --git a/toolchain/check/testdata/function/call/params_one.carbon b/toolchain/check/testdata/function/call/params_one.carbon index 63dbf4564e44..793cd8a0ebd9 100644 --- a/toolchain/check/testdata/function/call/params_one.carbon +++ b/toolchain/check/testdata/function/call/params_one.carbon @@ -27,6 +27,8 @@ fn Main() { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] @@ -71,8 +73,8 @@ fn Main() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Foo.decl: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %i32 = value_param call_param0 // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] diff --git a/toolchain/check/testdata/function/call/params_one_comma.carbon b/toolchain/check/testdata/function/call/params_one_comma.carbon index bb3163b5987c..d8ea38e62604 100644 --- a/toolchain/check/testdata/function/call/params_one_comma.carbon +++ b/toolchain/check/testdata/function/call/params_one_comma.carbon @@ -28,6 +28,8 @@ fn Main() { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] @@ -72,8 +74,8 @@ fn Main() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Foo.decl: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %i32 = value_param call_param0 // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] diff --git a/toolchain/check/testdata/function/call/params_two.carbon b/toolchain/check/testdata/function/call/params_two.carbon index 3c7bdc2ed63f..ac3dd53df5c5 100644 --- a/toolchain/check/testdata/function/call/params_two.carbon +++ b/toolchain/check/testdata/function/call/params_two.carbon @@ -27,6 +27,10 @@ fn Main() { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] @@ -75,10 +79,10 @@ fn Main() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Foo.decl: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %i32 = value_param call_param0 // CHECK:STDOUT: %i32.loc15_18: type = type_literal constants.%i32 [concrete = constants.%i32] diff --git a/toolchain/check/testdata/function/call/params_two_comma.carbon b/toolchain/check/testdata/function/call/params_two_comma.carbon index d4cb98a0c9c8..3c16ccdb3e0d 100644 --- a/toolchain/check/testdata/function/call/params_two_comma.carbon +++ b/toolchain/check/testdata/function/call/params_two_comma.carbon @@ -28,6 +28,10 @@ fn Main() { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] @@ -76,10 +80,10 @@ fn Main() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Foo.decl: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %i32 = value_param call_param0 // CHECK:STDOUT: %i32.loc15_18: type = type_literal constants.%i32 [concrete = constants.%i32] diff --git a/toolchain/check/testdata/function/call/prefer_unqualified_lookup.carbon b/toolchain/check/testdata/function/call/prefer_unqualified_lookup.carbon index 81d7066406f8..cbdb90d8deaa 100644 --- a/toolchain/check/testdata/function/call/prefer_unqualified_lookup.carbon +++ b/toolchain/check/testdata/function/call/prefer_unqualified_lookup.carbon @@ -33,6 +33,7 @@ fn Class(F:! type).Inner.G() -> i32 { return F(); } // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %F.patt: %pattern_type.98f = symbolic_binding_pattern F, 0 [symbolic] // CHECK:STDOUT: %F: type = symbolic_binding F, 0 [symbolic] // CHECK:STDOUT: %Class.type: type = generic_class_type @Class [concrete] // CHECK:STDOUT: %Class.generic: %Class.type = struct_value () [concrete] @@ -44,6 +45,8 @@ fn Class(F:! type).Inner.G() -> i32 { return F(); } // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %Inner.F.type: type = fn_type @Inner.F, @Inner(%F) [symbolic] // CHECK:STDOUT: %Inner.F: %Inner.F.type = struct_value () [symbolic] // CHECK:STDOUT: %Inner.G.type: type = fn_type @Inner.G, @Inner(%F) [symbolic] @@ -90,7 +93,7 @@ fn Class(F:! type).Inner.G() -> i32 { return F(); } // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: %Class.type = class_decl @Class [concrete = constants.%Class.generic] { -// CHECK:STDOUT: %F.patt: %pattern_type.98f = symbolic_binding_pattern F, 0 [concrete] +// CHECK:STDOUT: %F.patt.loc5_14.1: %pattern_type.98f = symbolic_binding_pattern F, 0 [symbolic = %F.patt.loc5_14.2 (constants.%F.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc5_17.1: type = splice_block %.loc5_17.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -99,8 +102,8 @@ fn Class(F:! type).Inner.G() -> i32 { return F(); } // CHECK:STDOUT: %F.loc5_14.2: type = symbolic_binding F, 0 [symbolic = %F.loc5_14.1 (constants.%F)] // CHECK:STDOUT: } // CHECK:STDOUT: %Inner.G.decl: %Inner.G.type = fn_decl @Inner.G [symbolic = constants.%Inner.G] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc13 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc13 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc13_14.1: type = splice_block %.loc13_14.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -115,6 +118,7 @@ fn Class(F:! type).Inner.G() -> i32 { return F(); } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%F.loc5_14.2: type) { +// CHECK:STDOUT: %F.patt.loc5_14.2: %pattern_type.98f = symbolic_binding_pattern F, 0 [symbolic = %F.patt.loc5_14.2 (constants.%F.patt)] // CHECK:STDOUT: %F.loc5_14.1: type = symbolic_binding F, 0 [symbolic = %F.loc5_14.1 (constants.%F)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -141,8 +145,8 @@ fn Class(F:! type).Inner.G() -> i32 { return F(); } // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %Inner.F.decl: @Inner.%Inner.F.type (%Inner.F.type) = fn_decl @Inner.F [symbolic = @Inner.%Inner.F (constants.%Inner.F)] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc8_15: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -150,8 +154,8 @@ fn Class(F:! type).Inner.G() -> i32 { return F(); } // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Inner.G.decl: @Inner.%Inner.G.type (%Inner.G.type) = fn_decl @Inner.G [symbolic = @Inner.%Inner.G (constants.%Inner.G)] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc13 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc13 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc9: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc9: Core.Form = init_form %i32.loc9 [concrete = constants.%.795] @@ -202,6 +206,7 @@ fn Class(F:! type).Inner.G() -> i32 { return F(); } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%F) { +// CHECK:STDOUT: %F.patt.loc5_14.2 => constants.%F.patt // CHECK:STDOUT: %F.loc5_14.1 => constants.%F // CHECK:STDOUT: // CHECK:STDOUT: !definition: diff --git a/toolchain/check/testdata/function/call/ref.carbon b/toolchain/check/testdata/function/call/ref.carbon index daad33cc5d1c..10636dbec318 100644 --- a/toolchain/check/testdata/function/call/ref.carbon +++ b/toolchain/check/testdata/function/call/ref.carbon @@ -118,11 +118,15 @@ fn G(ref d: D) { F(ref d); } // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.6b6 = ref_param_pattern [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = at_binding_pattern x, %x.param_patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.6b6 = ref_binding_pattern y [concrete] +// CHECK:STDOUT: %y.var_patt: %pattern_type.6b6 = var_pattern %y.patt [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %ImplicitAs.type.914: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %To: Core.IntLiteral = symbolic_binding To, 0 [symbolic] @@ -149,8 +153,8 @@ fn G(ref d: D) { F(ref d); } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %x.param_patt: %pattern_type.6b6 = ref_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.6b6 = ref_param_pattern [concrete = constants.%x.param_patt] +// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: ref %i32 = ref_param call_param0 // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] @@ -164,8 +168,8 @@ fn G(ref d: D) { F(ref d); } // CHECK:STDOUT: fn @G() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %pattern_type.6b6 = ref_binding_pattern y [concrete] -// CHECK:STDOUT: %y.var_patt: %pattern_type.6b6 = var_pattern %y.patt [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.6b6 = ref_binding_pattern y [concrete = constants.%y.patt] +// CHECK:STDOUT: %y.var_patt: %pattern_type.6b6 = var_pattern %y.patt [concrete = constants.%y.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %i32 = var %y.var_patt // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0.5c6] @@ -199,6 +203,8 @@ fn G(ref d: D) { F(ref d); } // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %self.param_patt.99a: %pattern_type.98b = ref_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.807: %pattern_type.98b = at_binding_pattern self, %self.param_patt.99a [concrete] // CHECK:STDOUT: %C.F.type: type = fn_type @C.F [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %C.F: %C.F.type = struct_value () [concrete] @@ -206,6 +212,8 @@ fn G(ref d: D) { F(ref d); } // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.150: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] @@ -228,8 +236,8 @@ fn G(ref d: D) { F(ref d); } // CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: %C.F.decl: %C.F.type = fn_decl @C.F [concrete = constants.%C.F] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.98b = ref_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.98b = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.98b = ref_param_pattern [concrete = constants.%self.param_patt.99a] +// CHECK:STDOUT: %self.patt: %pattern_type.98b = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.807] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %C = ref_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] @@ -248,8 +256,8 @@ fn G(ref d: D) { F(ref d); } // CHECK:STDOUT: fn @G() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt // CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%C, (constants.%DefaultOrUnformed.impl_witness.59d) [concrete = constants.%DefaultOrUnformed.facet] diff --git a/toolchain/check/testdata/function/call/return_implicit.carbon b/toolchain/check/testdata/function/call/return_implicit.carbon index 9ed76b4bd33a..db73ff851a6e 100644 --- a/toolchain/check/testdata/function/call/return_implicit.carbon +++ b/toolchain/check/testdata/function/call/return_implicit.carbon @@ -29,6 +29,8 @@ fn Main() { // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.cb1 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.cb1 = var_pattern %b.patt [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] // CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] @@ -62,8 +64,8 @@ fn Main() { // CHECK:STDOUT: fn @Main() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.cb1 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.cb1 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.cb1 = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type.cb1 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %empty_tuple.type = var %b.var_patt // CHECK:STDOUT: %MakeImplicitEmptyTuple.ref: %MakeImplicitEmptyTuple.type = name_ref MakeImplicitEmptyTuple, file.%MakeImplicitEmptyTuple.decl [concrete = constants.%MakeImplicitEmptyTuple] diff --git a/toolchain/check/testdata/function/declaration/export_name.carbon b/toolchain/check/testdata/function/declaration/export_name.carbon index 458eba4137d4..0bc970467133 100644 --- a/toolchain/check/testdata/function/declaration/export_name.carbon +++ b/toolchain/check/testdata/function/declaration/export_name.carbon @@ -85,6 +85,8 @@ var f: () = F(); // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type = ref_binding_pattern f [concrete] +// CHECK:STDOUT: %f.var_patt: %pattern_type = var_pattern %f.patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -100,8 +102,8 @@ var f: () = F(); // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %f.patt: %pattern_type = ref_binding_pattern f [concrete] -// CHECK:STDOUT: %f.var_patt: %pattern_type = var_pattern %f.patt [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type = ref_binding_pattern f [concrete = constants.%f.patt] +// CHECK:STDOUT: %f.var_patt: %pattern_type = var_pattern %f.patt [concrete = constants.%f.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %f.var: ref %empty_tuple.type = var %f.var_patt [concrete] // CHECK:STDOUT: %.loc6_9.1: type = splice_block %.loc6_9.3 [concrete = constants.%empty_tuple.type] { diff --git a/toolchain/check/testdata/function/declaration/extern.carbon b/toolchain/check/testdata/function/declaration/extern.carbon index 3e588f5a2bc0..8ffc6f6eb753 100644 --- a/toolchain/check/testdata/function/declaration/extern.carbon +++ b/toolchain/check/testdata/function/declaration/extern.carbon @@ -107,6 +107,8 @@ extern library "basic" fn F(); // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -122,8 +124,8 @@ extern library "basic" fn F(); // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %empty_tuple.type = var %x.var_patt [concrete] // CHECK:STDOUT: %.loc4_9.1: type = splice_block %.loc4_9.3 [concrete = constants.%empty_tuple.type] { @@ -184,6 +186,8 @@ extern library "basic" fn F(); // CHECK:STDOUT: %C.F.type: type = fn_type @C.F [concrete] // CHECK:STDOUT: %C.F: %C.F.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt: %pattern_type = at_binding_pattern self, %self.param_patt [concrete] // CHECK:STDOUT: %C.G.type: type = fn_type @C.G [concrete] // CHECK:STDOUT: %C.G: %C.G.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] @@ -200,8 +204,8 @@ extern library "basic" fn F(); // CHECK:STDOUT: class @C { // CHECK:STDOUT: %C.F.decl: %C.F.type = fn_decl @C.F [concrete = constants.%C.F] {} {} // CHECK:STDOUT: %C.G.decl: %C.G.type = fn_decl @C.G [concrete = constants.%C.G] { -// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern [concrete = constants.%self.param_patt] +// CHECK:STDOUT: %self.patt: %pattern_type = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %C = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] diff --git a/toolchain/check/testdata/function/declaration/fail_import_incomplete_return.carbon b/toolchain/check/testdata/function/declaration/fail_import_incomplete_return.carbon index 7c19649770de..1acfc0b0112c 100644 --- a/toolchain/check/testdata/function/declaration/fail_import_incomplete_return.carbon +++ b/toolchain/check/testdata/function/declaration/fail_import_incomplete_return.carbon @@ -95,12 +95,16 @@ fn CallFAndGIncomplete() { // CHECK:STDOUT: %D: type = class_type @D [concrete] // CHECK:STDOUT: %.a44: Core.Form = init_form %C [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %return.param_patt.89a: %pattern_type.98b = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e4a: %pattern_type.98b = return_slot_pattern %return.param_patt.89a, %C [concrete] // CHECK:STDOUT: %ReturnCUnused.type: type = fn_type @ReturnCUnused [concrete] // CHECK:STDOUT: %ReturnCUnused: %ReturnCUnused.type = struct_value () [concrete] // CHECK:STDOUT: %ReturnCUsed.type: type = fn_type @ReturnCUsed [concrete] // CHECK:STDOUT: %ReturnCUsed: %ReturnCUsed.type = struct_value () [concrete] // CHECK:STDOUT: %.592: Core.Form = init_form %D [concrete] // CHECK:STDOUT: %pattern_type.d8d: type = pattern_type %D [concrete] +// CHECK:STDOUT: %return.param_patt.eae: %pattern_type.d8d = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e38: %pattern_type.d8d = return_slot_pattern %return.param_patt.eae, %D [concrete] // CHECK:STDOUT: %ReturnDUnused.type: type = fn_type @ReturnDUnused [concrete] // CHECK:STDOUT: %ReturnDUnused: %ReturnDUnused.type = struct_value () [concrete] // CHECK:STDOUT: %ReturnDUsed.type: type = fn_type @ReturnDUsed [concrete] @@ -133,8 +137,8 @@ fn CallFAndGIncomplete() { // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %D.decl.loc5: type = class_decl @D [concrete = constants.%D] {} {} // CHECK:STDOUT: %ReturnCUnused.decl: %ReturnCUnused.type = fn_decl @ReturnCUnused [concrete = constants.%ReturnCUnused] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C.ref [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete = constants.%return.param_patt.89a] +// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C.ref [concrete = constants.%return.patt.e4a] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %.loc7: Core.Form = init_form %C.ref [concrete = constants.%.a44] @@ -142,8 +146,8 @@ fn CallFAndGIncomplete() { // CHECK:STDOUT: %return: ref %C = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %ReturnCUsed.decl: %ReturnCUsed.type = fn_decl @ReturnCUsed [concrete = constants.%ReturnCUsed] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C.ref [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete = constants.%return.param_patt.89a] +// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C.ref [concrete = constants.%return.patt.e4a] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %.loc8: Core.Form = init_form %C.ref [concrete = constants.%.a44] @@ -151,8 +155,8 @@ fn CallFAndGIncomplete() { // CHECK:STDOUT: %return: ref %C = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %ReturnDUnused.decl: %ReturnDUnused.type = fn_decl @ReturnDUnused [concrete = constants.%ReturnDUnused] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.d8d = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.d8d = return_slot_pattern %return.param_patt, %D.ref [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.d8d = out_param_pattern [concrete = constants.%return.param_patt.eae] +// CHECK:STDOUT: %return.patt: %pattern_type.d8d = return_slot_pattern %return.param_patt, %D.ref [concrete = constants.%return.patt.e38] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl.loc5 [concrete = constants.%D] // CHECK:STDOUT: %.loc9: Core.Form = init_form %D.ref [concrete = constants.%.592] @@ -160,8 +164,8 @@ fn CallFAndGIncomplete() { // CHECK:STDOUT: %return: ref %D = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %ReturnDUsed.decl: %ReturnDUsed.type = fn_decl @ReturnDUsed [concrete = constants.%ReturnDUsed] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.d8d = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.d8d = return_slot_pattern %return.param_patt, %D.ref [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.d8d = out_param_pattern [concrete = constants.%return.param_patt.eae] +// CHECK:STDOUT: %return.patt: %pattern_type.d8d = return_slot_pattern %return.param_patt, %D.ref [concrete = constants.%return.patt.e38] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl.loc5 [concrete = constants.%D] // CHECK:STDOUT: %.loc10: Core.Form = init_form %D.ref [concrete = constants.%.592] diff --git a/toolchain/check/testdata/function/declaration/fail_param_in_type.carbon b/toolchain/check/testdata/function/declaration/fail_param_in_type.carbon index 672d487864c1..526d059d3fc9 100644 --- a/toolchain/check/testdata/function/declaration/fail_param_in_type.carbon +++ b/toolchain/check/testdata/function/declaration/fail_param_in_type.carbon @@ -26,6 +26,8 @@ fn F(n: i32, a: array(i32, n)*); // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -46,10 +48,10 @@ fn F(n: i32, a: array(i32, n)*); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete] -// CHECK:STDOUT: %a.param_patt: = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%n.param_patt] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete = constants.%n.patt] +// CHECK:STDOUT: %a.param_patt: = value_param_pattern [concrete = ] +// CHECK:STDOUT: %a.patt: = at_binding_pattern a, %a.param_patt [concrete = ] // CHECK:STDOUT: } { // CHECK:STDOUT: %n.param: %i32 = value_param call_param0 // CHECK:STDOUT: %i32.loc19_9: type = type_literal constants.%i32 [concrete = constants.%i32] diff --git a/toolchain/check/testdata/function/declaration/fail_param_redecl.carbon b/toolchain/check/testdata/function/declaration/fail_param_redecl.carbon index 68a6f677e6ad..861bb53e5c3c 100644 --- a/toolchain/check/testdata/function/declaration/fail_param_redecl.carbon +++ b/toolchain/check/testdata/function/declaration/fail_param_redecl.carbon @@ -29,6 +29,8 @@ fn F(n: i32, n: i32); // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -49,10 +51,10 @@ fn F(n: i32, n: i32); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %n.param_patt.loc22_7: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %n.patt.loc22_7: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt.loc22_7 [concrete] -// CHECK:STDOUT: %n.param_patt.loc22_15: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %n.patt.loc22_15: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt.loc22_15 [concrete] +// CHECK:STDOUT: %n.param_patt.loc22_7: %pattern_type.6b6 = value_param_pattern [concrete = constants.%n.param_patt] +// CHECK:STDOUT: %n.patt.loc22_7: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt.loc22_7 [concrete = constants.%n.patt] +// CHECK:STDOUT: %n.param_patt.loc22_15: %pattern_type.6b6 = value_param_pattern [concrete = constants.%n.param_patt] +// CHECK:STDOUT: %n.patt.loc22_15: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt.loc22_15 [concrete = constants.%n.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %n.param.loc22_7: %i32 = value_param call_param0 // CHECK:STDOUT: %i32.loc22_9: type = type_literal constants.%i32 [concrete = constants.%i32] diff --git a/toolchain/check/testdata/function/declaration/fail_redecl.carbon b/toolchain/check/testdata/function/declaration/fail_redecl.carbon index 672a3f8f5a3c..d297d5b26995 100644 --- a/toolchain/check/testdata/function/declaration/fail_redecl.carbon +++ b/toolchain/check/testdata/function/declaration/fail_redecl.carbon @@ -70,6 +70,8 @@ fn E() {} // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = at_binding_pattern x, %x.param_patt [concrete] // CHECK:STDOUT: %B.type: type = fn_type @B [concrete] // CHECK:STDOUT: %B: %B.type = struct_value () [concrete] // CHECK:STDOUT: %C.type.322e3b.1: type = fn_type @C.loc35 [concrete] @@ -95,8 +97,8 @@ fn E() {} // CHECK:STDOUT: %A.decl.loc15: %A.type = fn_decl @A [concrete = constants.%A] {} {} // CHECK:STDOUT: %A.decl.loc23: %A.type = fn_decl @A [concrete = constants.%A] {} {} // CHECK:STDOUT: %B.decl.loc25: %B.type = fn_decl @B [concrete = constants.%B] { -// CHECK:STDOUT: %x.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type = value_param_pattern [concrete = constants.%x.param_patt] +// CHECK:STDOUT: %x.patt: %pattern_type = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param.loc25: %empty_tuple.type = value_param call_param0 // CHECK:STDOUT: %.loc25_10.1: type = splice_block %.loc25_10.3 [concrete = constants.%empty_tuple.type] { @@ -106,8 +108,8 @@ fn E() {} // CHECK:STDOUT: %x.loc25: %empty_tuple.type = value_binding x, %x.param.loc25 // CHECK:STDOUT: } // CHECK:STDOUT: %B.decl.loc33: %B.type = fn_decl @B [concrete = constants.%B] { -// CHECK:STDOUT: %x.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type = value_param_pattern [concrete = constants.%x.param_patt] +// CHECK:STDOUT: %x.patt: %pattern_type = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param.loc33: %empty_tuple.type = value_param call_param0 // CHECK:STDOUT: %.loc33_10.1: type = splice_block %.loc33_10.3 [concrete = constants.%empty_tuple.type] { @@ -118,8 +120,8 @@ fn E() {} // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl.loc35: %C.type.322e3b.1 = fn_decl @C.loc35 [concrete = constants.%C.010386.1] {} {} // CHECK:STDOUT: %C.decl.loc43: %C.type.322e3b.2 = fn_decl @C.loc43 [concrete = constants.%C.010386.2] { -// CHECK:STDOUT: %x.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type = value_param_pattern [concrete = constants.%x.param_patt] +// CHECK:STDOUT: %x.patt: %pattern_type = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %empty_tuple.type = value_param call_param0 // CHECK:STDOUT: %.loc43_10.1: type = splice_block %.loc43_10.3 [concrete = constants.%empty_tuple.type] { diff --git a/toolchain/check/testdata/function/declaration/fail_todo_no_params.carbon b/toolchain/check/testdata/function/declaration/fail_todo_no_params.carbon index 82c1c7ce1de9..8fa85959c507 100644 --- a/toolchain/check/testdata/function/declaration/fail_todo_no_params.carbon +++ b/toolchain/check/testdata/function/declaration/fail_todo_no_params.carbon @@ -123,6 +123,8 @@ fn A { // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %.262: Core.Form = init_form %empty_tuple.type [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %empty_tuple.type [concrete] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -132,8 +134,8 @@ fn A { // CHECK:STDOUT: .A = %A.decl // CHECK:STDOUT: } // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] { -// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %.loc7_10.2 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %.loc7_10.2 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc7_10.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc7_10.2: type = converted %.loc7_10.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -152,6 +154,8 @@ fn A { // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %.262: Core.Form = init_form %empty_tuple.type [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %empty_tuple.type [concrete] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -161,8 +165,8 @@ fn A { // CHECK:STDOUT: .A = %A.decl // CHECK:STDOUT: } // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] { -// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %.loc7_12.2 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %.loc7_12.2 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc7_12.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc7_12.2: type = converted %.loc7_12.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] diff --git a/toolchain/check/testdata/function/declaration/import.carbon b/toolchain/check/testdata/function/declaration/import.carbon index edcba93b808f..172848ca81a9 100644 --- a/toolchain/check/testdata/function/declaration/import.carbon +++ b/toolchain/check/testdata/function/declaration/import.carbon @@ -270,16 +270,24 @@ import library "extern_api"; // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %B.type: type = fn_type @B [concrete] // CHECK:STDOUT: %B: %B.type = struct_value () [concrete] // CHECK:STDOUT: %tuple.type.85c: type = tuple_type (type) [concrete] // CHECK:STDOUT: %tuple: %tuple.type.85c = tuple_value (%i32) [concrete] // CHECK:STDOUT: %tuple.type.a8a: type = tuple_type (%i32) [concrete] // CHECK:STDOUT: %pattern_type.e71: type = pattern_type %tuple.type.a8a [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.e71 = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.e71 = at_binding_pattern c, %c.param_patt [concrete] // CHECK:STDOUT: %struct_type.c: type = struct_type {.c: %i32} [concrete] // CHECK:STDOUT: %.510: Core.Form = init_form %struct_type.c [concrete] // CHECK:STDOUT: %pattern_type.e1a: type = pattern_type %struct_type.c [concrete] +// CHECK:STDOUT: %return.param_patt.b6f: %pattern_type.e1a = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.00b: %pattern_type.e1a = return_slot_pattern %return.param_patt.b6f, %struct_type.c [concrete] // CHECK:STDOUT: %C.type: type = fn_type @C [concrete] // CHECK:STDOUT: %C: %C.type = struct_value () [concrete] // CHECK:STDOUT: %D.type: type = fn_type @D [concrete] @@ -309,10 +317,10 @@ import library "extern_api"; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] {} {} // CHECK:STDOUT: %B.decl: %B.type = fn_decl @B [concrete = constants.%B] { -// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc5_17 [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc5_17 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc5_17: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc5: Core.Form = init_form %i32.loc5_17 [concrete = constants.%.795] @@ -323,10 +331,10 @@ import library "extern_api"; // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: %C.type = fn_decl @C [concrete = constants.%C] { -// CHECK:STDOUT: %c.param_patt: %pattern_type.e71 = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.e71 = at_binding_pattern c, %c.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.e1a = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.e1a = return_slot_pattern %return.param_patt, %struct_type.c [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.e71 = value_param_pattern [concrete = constants.%c.param_patt] +// CHECK:STDOUT: %c.patt: %pattern_type.e71 = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.e1a = out_param_pattern [concrete = constants.%return.param_patt.b6f] +// CHECK:STDOUT: %return.patt: %pattern_type.e1a = return_slot_pattern %return.param_patt, %struct_type.c [concrete = constants.%return.patt.00b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc6_25: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %struct_type.c: type = struct_type {.c: %i32} [concrete = constants.%struct_type.c] @@ -368,16 +376,24 @@ import library "extern_api"; // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %B.type: type = fn_type @B [concrete] // CHECK:STDOUT: %B: %B.type = struct_value () [concrete] // CHECK:STDOUT: %tuple.type.85c: type = tuple_type (type) [concrete] // CHECK:STDOUT: %tuple: %tuple.type.85c = tuple_value (%i32) [concrete] // CHECK:STDOUT: %tuple.type.a8a: type = tuple_type (%i32) [concrete] // CHECK:STDOUT: %pattern_type.e71: type = pattern_type %tuple.type.a8a [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.e71 = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.e71 = at_binding_pattern c, %c.param_patt [concrete] // CHECK:STDOUT: %struct_type.c: type = struct_type {.c: %i32} [concrete] // CHECK:STDOUT: %.510: Core.Form = init_form %struct_type.c [concrete] // CHECK:STDOUT: %pattern_type.e1a: type = pattern_type %struct_type.c [concrete] +// CHECK:STDOUT: %return.param_patt.b6f: %pattern_type.e1a = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.00b: %pattern_type.e1a = return_slot_pattern %return.param_patt.b6f, %struct_type.c [concrete] // CHECK:STDOUT: %C.type: type = fn_type @C [concrete] // CHECK:STDOUT: %C: %C.type = struct_value () [concrete] // CHECK:STDOUT: %D.type: type = fn_type @D [concrete] @@ -407,10 +423,10 @@ import library "extern_api"; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] {} {} // CHECK:STDOUT: %B.decl: %B.type = fn_decl @B [concrete = constants.%B] { -// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc5_52 [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc5_52 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc5_52: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc5: Core.Form = init_form %i32.loc5_52 [concrete = constants.%.795] @@ -421,10 +437,10 @@ import library "extern_api"; // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: %C.type = fn_decl @C [concrete = constants.%C] { -// CHECK:STDOUT: %c.param_patt: %pattern_type.e71 = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.e71 = at_binding_pattern c, %c.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.e1a = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.e1a = return_slot_pattern %return.param_patt, %struct_type.c [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.e71 = value_param_pattern [concrete = constants.%c.param_patt] +// CHECK:STDOUT: %c.patt: %pattern_type.e71 = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.e1a = out_param_pattern [concrete = constants.%return.param_patt.b6f] +// CHECK:STDOUT: %return.patt: %pattern_type.e1a = return_slot_pattern %return.param_patt, %struct_type.c [concrete = constants.%return.patt.00b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc6_60: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %struct_type.c: type = struct_type {.c: %i32} [concrete = constants.%struct_type.c] @@ -462,6 +478,8 @@ import library "extern_api"; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.cb1 = var_pattern %a.patt [concrete] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] @@ -469,6 +487,8 @@ import library "extern_api"; // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %b.patt.b23: %pattern_type.6b6 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt.b23 [concrete] // CHECK:STDOUT: %B.type: type = fn_type @B [concrete] // CHECK:STDOUT: %B: %B.type = struct_value () [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] @@ -490,14 +510,20 @@ import library "extern_api"; // CHECK:STDOUT: %int_1.0c6: %i32 = int_value 1 [concrete] // CHECK:STDOUT: %struct_type.c: type = struct_type {.c: %i32} [concrete] // CHECK:STDOUT: %pattern_type.e1a: type = pattern_type %struct_type.c [concrete] +// CHECK:STDOUT: %c.patt.863: %pattern_type.e1a = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.e1a = var_pattern %c.patt.863 [concrete] // CHECK:STDOUT: %C.type: type = fn_type @C [concrete] // CHECK:STDOUT: %C: %C.type = struct_value () [concrete] // CHECK:STDOUT: %tuple.type.a8a: type = tuple_type (%i32) [concrete] // CHECK:STDOUT: %tuple.type.985: type = tuple_type (Core.IntLiteral) [concrete] // CHECK:STDOUT: %tuple.378: %tuple.type.985 = tuple_value (%int_1.5b8) [concrete] // CHECK:STDOUT: %tuple.a1e: %tuple.type.a8a = tuple_value (%int_1.0c6) [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.cb1 = ref_binding_pattern d [concrete] +// CHECK:STDOUT: %d.var_patt: %pattern_type.cb1 = var_pattern %d.patt [concrete] // CHECK:STDOUT: %D.type: type = fn_type @D [concrete] // CHECK:STDOUT: %D: %D.type = struct_value () [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type.cb1 = ref_binding_pattern e [concrete] +// CHECK:STDOUT: %e.var_patt: %pattern_type.cb1 = var_pattern %e.patt [concrete] // CHECK:STDOUT: %E.type: type = fn_type @E [concrete] // CHECK:STDOUT: %E: %E.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -541,8 +567,8 @@ import library "extern_api"; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.cb1 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.cb1 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %empty_tuple.type = var %a.var_patt [concrete] // CHECK:STDOUT: %.loc6_9.1: type = splice_block %.loc6_9.3 [concrete = constants.%empty_tuple.type] { @@ -551,15 +577,15 @@ import library "extern_api"; // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %empty_tuple.type = ref_binding a, %a.var [concrete = %a.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete = constants.%b.patt.b23] +// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var %b.var_patt [concrete] // CHECK:STDOUT: %i32.loc7: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %b: ref %i32 = ref_binding b, %b.var [concrete = %b.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.e1a = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.e1a = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.e1a = ref_binding_pattern c [concrete = constants.%c.patt.863] +// CHECK:STDOUT: %c.var_patt: %pattern_type.e1a = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %struct_type.c = var %c.var_patt [concrete] // CHECK:STDOUT: %.loc8: type = splice_block %struct_type.c [concrete = constants.%struct_type.c] { @@ -568,8 +594,8 @@ import library "extern_api"; // CHECK:STDOUT: } // CHECK:STDOUT: %c: ref %struct_type.c = ref_binding c, %c.var [concrete = %c.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.cb1 = ref_binding_pattern d [concrete] -// CHECK:STDOUT: %d.var_patt: %pattern_type.cb1 = var_pattern %d.patt [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.cb1 = ref_binding_pattern d [concrete = constants.%d.patt] +// CHECK:STDOUT: %d.var_patt: %pattern_type.cb1 = var_pattern %d.patt [concrete = constants.%d.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %empty_tuple.type = var %d.var_patt [concrete] // CHECK:STDOUT: %.loc9_9.1: type = splice_block %.loc9_9.3 [concrete = constants.%empty_tuple.type] { @@ -578,8 +604,8 @@ import library "extern_api"; // CHECK:STDOUT: } // CHECK:STDOUT: %d: ref %empty_tuple.type = ref_binding d, %d.var [concrete = %d.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %e.patt: %pattern_type.cb1 = ref_binding_pattern e [concrete] -// CHECK:STDOUT: %e.var_patt: %pattern_type.cb1 = var_pattern %e.patt [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type.cb1 = ref_binding_pattern e [concrete = constants.%e.patt] +// CHECK:STDOUT: %e.var_patt: %pattern_type.cb1 = var_pattern %e.patt [concrete = constants.%e.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %e.var: ref %empty_tuple.type = var %e.var_patt [concrete] // CHECK:STDOUT: %.loc10_9.1: type = splice_block %.loc10_9.3 [concrete = constants.%empty_tuple.type] { @@ -667,6 +693,10 @@ import library "extern_api"; // CHECK:STDOUT: %E: %E.type = struct_value () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.cb1 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %b.patt.b23: %pattern_type.6b6 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt.b23 [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -684,9 +714,15 @@ import library "extern_api"; // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39, @Core.IntLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete] // CHECK:STDOUT: %bound_method: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_1.0c6: %i32 = int_value 1 [concrete] +// CHECK:STDOUT: %c.patt.863: %pattern_type.e1a = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.e1a = var_pattern %c.patt.863 [concrete] // CHECK:STDOUT: %tuple.type.985: type = tuple_type (Core.IntLiteral) [concrete] // CHECK:STDOUT: %tuple.378: %tuple.type.985 = tuple_value (%int_1.5b8) [concrete] // CHECK:STDOUT: %tuple.a1e: %tuple.type.a8a = tuple_value (%int_1.0c6) [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.cb1 = ref_binding_pattern d [concrete] +// CHECK:STDOUT: %d.var_patt: %pattern_type.cb1 = var_pattern %d.patt [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type.cb1 = ref_binding_pattern e [concrete] +// CHECK:STDOUT: %e.var_patt: %pattern_type.cb1 = var_pattern %e.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -749,8 +785,8 @@ import library "extern_api"; // CHECK:STDOUT: %D.decl: %D.type = fn_decl @D [concrete = constants.%D] {} {} // CHECK:STDOUT: %E.decl: %E.type = fn_decl @E [concrete = constants.%E] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.cb1 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.cb1 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %empty_tuple.type = var %a.var_patt [concrete] // CHECK:STDOUT: %.loc52_9.1: type = splice_block %.loc52_9.3 [concrete = constants.%empty_tuple.type] { @@ -759,15 +795,15 @@ import library "extern_api"; // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %empty_tuple.type = ref_binding a, %a.var [concrete = %a.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete = constants.%b.patt.b23] +// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var %b.var_patt [concrete] // CHECK:STDOUT: %i32.loc53: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %b: ref %i32 = ref_binding b, %b.var [concrete = %b.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.e1a = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.e1a = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.e1a = ref_binding_pattern c [concrete = constants.%c.patt.863] +// CHECK:STDOUT: %c.var_patt: %pattern_type.e1a = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %struct_type.c = var %c.var_patt [concrete] // CHECK:STDOUT: %.loc54: type = splice_block %struct_type.c [concrete = constants.%struct_type.c] { @@ -776,8 +812,8 @@ import library "extern_api"; // CHECK:STDOUT: } // CHECK:STDOUT: %c: ref %struct_type.c = ref_binding c, %c.var [concrete = %c.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.cb1 = ref_binding_pattern d [concrete] -// CHECK:STDOUT: %d.var_patt: %pattern_type.cb1 = var_pattern %d.patt [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.cb1 = ref_binding_pattern d [concrete = constants.%d.patt] +// CHECK:STDOUT: %d.var_patt: %pattern_type.cb1 = var_pattern %d.patt [concrete = constants.%d.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %empty_tuple.type = var %d.var_patt [concrete] // CHECK:STDOUT: %.loc55_9.1: type = splice_block %.loc55_9.3 [concrete = constants.%empty_tuple.type] { @@ -786,8 +822,8 @@ import library "extern_api"; // CHECK:STDOUT: } // CHECK:STDOUT: %d: ref %empty_tuple.type = ref_binding d, %d.var [concrete = %d.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %e.patt: %pattern_type.cb1 = ref_binding_pattern e [concrete] -// CHECK:STDOUT: %e.var_patt: %pattern_type.cb1 = var_pattern %e.patt [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type.cb1 = ref_binding_pattern e [concrete = constants.%e.patt] +// CHECK:STDOUT: %e.var_patt: %pattern_type.cb1 = var_pattern %e.patt [concrete = constants.%e.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %e.var: ref %empty_tuple.type = var %e.var_patt [concrete] // CHECK:STDOUT: %.loc56_9.1: type = splice_block %.loc56_9.3 [concrete = constants.%empty_tuple.type] { @@ -875,6 +911,10 @@ import library "extern_api"; // CHECK:STDOUT: %tuple.19c: %tuple.type.85c = tuple_value (%i32) [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.cb1 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %b.patt.b23: %pattern_type.6b6 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt.b23 [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -892,9 +932,15 @@ import library "extern_api"; // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39, @Core.IntLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete] // CHECK:STDOUT: %bound_method: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_1.0c6: %i32 = int_value 1 [concrete] +// CHECK:STDOUT: %c.patt.863: %pattern_type.e1a = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.e1a = var_pattern %c.patt.863 [concrete] // CHECK:STDOUT: %tuple.type.985: type = tuple_type (Core.IntLiteral) [concrete] // CHECK:STDOUT: %tuple.378: %tuple.type.985 = tuple_value (%int_1.5b8) [concrete] // CHECK:STDOUT: %tuple.a1e: %tuple.type.a8a = tuple_value (%int_1.0c6) [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.cb1 = ref_binding_pattern d [concrete] +// CHECK:STDOUT: %d.var_patt: %pattern_type.cb1 = var_pattern %d.patt [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type.cb1 = ref_binding_pattern e [concrete] +// CHECK:STDOUT: %e.var_patt: %pattern_type.cb1 = var_pattern %e.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -957,8 +1003,8 @@ import library "extern_api"; // CHECK:STDOUT: %D.decl: %D.type = fn_decl @D [concrete = constants.%D] {} {} // CHECK:STDOUT: %E.decl: %E.type = fn_decl @E [concrete = constants.%E] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.cb1 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.cb1 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %empty_tuple.type = var %a.var_patt [concrete] // CHECK:STDOUT: %.loc12_9.1: type = splice_block %.loc12_9.3 [concrete = constants.%empty_tuple.type] { @@ -967,15 +1013,15 @@ import library "extern_api"; // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %empty_tuple.type = ref_binding a, %a.var [concrete = %a.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete = constants.%b.patt.b23] +// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var %b.var_patt [concrete] // CHECK:STDOUT: %i32.loc13: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %b: ref %i32 = ref_binding b, %b.var [concrete = %b.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.e1a = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.e1a = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.e1a = ref_binding_pattern c [concrete = constants.%c.patt.863] +// CHECK:STDOUT: %c.var_patt: %pattern_type.e1a = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %struct_type.c = var %c.var_patt [concrete] // CHECK:STDOUT: %.loc14: type = splice_block %struct_type.c [concrete = constants.%struct_type.c] { @@ -984,8 +1030,8 @@ import library "extern_api"; // CHECK:STDOUT: } // CHECK:STDOUT: %c: ref %struct_type.c = ref_binding c, %c.var [concrete = %c.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.cb1 = ref_binding_pattern d [concrete] -// CHECK:STDOUT: %d.var_patt: %pattern_type.cb1 = var_pattern %d.patt [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.cb1 = ref_binding_pattern d [concrete = constants.%d.patt] +// CHECK:STDOUT: %d.var_patt: %pattern_type.cb1 = var_pattern %d.patt [concrete = constants.%d.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %empty_tuple.type = var %d.var_patt [concrete] // CHECK:STDOUT: %.loc15_9.1: type = splice_block %.loc15_9.3 [concrete = constants.%empty_tuple.type] { @@ -994,8 +1040,8 @@ import library "extern_api"; // CHECK:STDOUT: } // CHECK:STDOUT: %d: ref %empty_tuple.type = ref_binding d, %d.var [concrete = %d.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %e.patt: %pattern_type.cb1 = ref_binding_pattern e [concrete] -// CHECK:STDOUT: %e.var_patt: %pattern_type.cb1 = var_pattern %e.patt [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type.cb1 = ref_binding_pattern e [concrete = constants.%e.patt] +// CHECK:STDOUT: %e.var_patt: %pattern_type.cb1 = var_pattern %e.patt [concrete = constants.%e.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %e.var: ref %empty_tuple.type = var %e.var_patt [concrete] // CHECK:STDOUT: %.loc16_9.1: type = splice_block %.loc16_9.3 [concrete = constants.%empty_tuple.type] { @@ -1061,6 +1107,8 @@ import library "extern_api"; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.cb1 = var_pattern %a.patt [concrete] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] @@ -1068,6 +1116,8 @@ import library "extern_api"; // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %b.patt.b23: %pattern_type.6b6 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt.b23 [concrete] // CHECK:STDOUT: %B.type: type = fn_type @B [concrete] // CHECK:STDOUT: %B: %B.type = struct_value () [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] @@ -1089,14 +1139,20 @@ import library "extern_api"; // CHECK:STDOUT: %int_1.0c6: %i32 = int_value 1 [concrete] // CHECK:STDOUT: %struct_type.c: type = struct_type {.c: %i32} [concrete] // CHECK:STDOUT: %pattern_type.e1a: type = pattern_type %struct_type.c [concrete] +// CHECK:STDOUT: %c.patt.863: %pattern_type.e1a = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.e1a = var_pattern %c.patt.863 [concrete] // CHECK:STDOUT: %C.type: type = fn_type @C [concrete] // CHECK:STDOUT: %C: %C.type = struct_value () [concrete] // CHECK:STDOUT: %tuple.type.a8a: type = tuple_type (%i32) [concrete] // CHECK:STDOUT: %tuple.type.985: type = tuple_type (Core.IntLiteral) [concrete] // CHECK:STDOUT: %tuple.378: %tuple.type.985 = tuple_value (%int_1.5b8) [concrete] // CHECK:STDOUT: %tuple.a1e: %tuple.type.a8a = tuple_value (%int_1.0c6) [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.cb1 = ref_binding_pattern d [concrete] +// CHECK:STDOUT: %d.var_patt: %pattern_type.cb1 = var_pattern %d.patt [concrete] // CHECK:STDOUT: %D.type: type = fn_type @D [concrete] // CHECK:STDOUT: %D: %D.type = struct_value () [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type.cb1 = ref_binding_pattern e [concrete] +// CHECK:STDOUT: %e.var_patt: %pattern_type.cb1 = var_pattern %e.patt [concrete] // CHECK:STDOUT: %E.type: type = fn_type @E [concrete] // CHECK:STDOUT: %E: %E.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -1140,8 +1196,8 @@ import library "extern_api"; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.cb1 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.cb1 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %empty_tuple.type = var %a.var_patt [concrete] // CHECK:STDOUT: %.loc52_9.1: type = splice_block %.loc52_9.3 [concrete = constants.%empty_tuple.type] { @@ -1150,15 +1206,15 @@ import library "extern_api"; // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %empty_tuple.type = ref_binding a, %a.var [concrete = %a.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete = constants.%b.patt.b23] +// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var %b.var_patt [concrete] // CHECK:STDOUT: %i32.loc53: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %b: ref %i32 = ref_binding b, %b.var [concrete = %b.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.e1a = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.e1a = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.e1a = ref_binding_pattern c [concrete = constants.%c.patt.863] +// CHECK:STDOUT: %c.var_patt: %pattern_type.e1a = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %struct_type.c = var %c.var_patt [concrete] // CHECK:STDOUT: %.loc54: type = splice_block %struct_type.c [concrete = constants.%struct_type.c] { @@ -1167,8 +1223,8 @@ import library "extern_api"; // CHECK:STDOUT: } // CHECK:STDOUT: %c: ref %struct_type.c = ref_binding c, %c.var [concrete = %c.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.cb1 = ref_binding_pattern d [concrete] -// CHECK:STDOUT: %d.var_patt: %pattern_type.cb1 = var_pattern %d.patt [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.cb1 = ref_binding_pattern d [concrete = constants.%d.patt] +// CHECK:STDOUT: %d.var_patt: %pattern_type.cb1 = var_pattern %d.patt [concrete = constants.%d.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %empty_tuple.type = var %d.var_patt [concrete] // CHECK:STDOUT: %.loc55_9.1: type = splice_block %.loc55_9.3 [concrete = constants.%empty_tuple.type] { @@ -1177,8 +1233,8 @@ import library "extern_api"; // CHECK:STDOUT: } // CHECK:STDOUT: %d: ref %empty_tuple.type = ref_binding d, %d.var [concrete = %d.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %e.patt: %pattern_type.cb1 = ref_binding_pattern e [concrete] -// CHECK:STDOUT: %e.var_patt: %pattern_type.cb1 = var_pattern %e.patt [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type.cb1 = ref_binding_pattern e [concrete = constants.%e.patt] +// CHECK:STDOUT: %e.var_patt: %pattern_type.cb1 = var_pattern %e.patt [concrete = constants.%e.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %e.var: ref %empty_tuple.type = var %e.var_patt [concrete] // CHECK:STDOUT: %.loc56_9.1: type = splice_block %.loc56_9.3 [concrete = constants.%empty_tuple.type] { @@ -1244,6 +1300,8 @@ import library "extern_api"; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.cb1 = var_pattern %a.patt [concrete] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] @@ -1251,6 +1309,8 @@ import library "extern_api"; // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %b.patt.b23: %pattern_type.6b6 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt.b23 [concrete] // CHECK:STDOUT: %B.type: type = fn_type @B [concrete] // CHECK:STDOUT: %B: %B.type = struct_value () [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] @@ -1272,14 +1332,20 @@ import library "extern_api"; // CHECK:STDOUT: %int_1.0c6: %i32 = int_value 1 [concrete] // CHECK:STDOUT: %struct_type.c: type = struct_type {.c: %i32} [concrete] // CHECK:STDOUT: %pattern_type.e1a: type = pattern_type %struct_type.c [concrete] +// CHECK:STDOUT: %c.patt.863: %pattern_type.e1a = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.e1a = var_pattern %c.patt.863 [concrete] // CHECK:STDOUT: %C.type: type = fn_type @C [concrete] // CHECK:STDOUT: %C: %C.type = struct_value () [concrete] // CHECK:STDOUT: %tuple.type.a8a: type = tuple_type (%i32) [concrete] // CHECK:STDOUT: %tuple.type.985: type = tuple_type (Core.IntLiteral) [concrete] // CHECK:STDOUT: %tuple.378: %tuple.type.985 = tuple_value (%int_1.5b8) [concrete] // CHECK:STDOUT: %tuple.a1e: %tuple.type.a8a = tuple_value (%int_1.0c6) [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.cb1 = ref_binding_pattern d [concrete] +// CHECK:STDOUT: %d.var_patt: %pattern_type.cb1 = var_pattern %d.patt [concrete] // CHECK:STDOUT: %D.type: type = fn_type @D [concrete] // CHECK:STDOUT: %D: %D.type = struct_value () [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type.cb1 = ref_binding_pattern e [concrete] +// CHECK:STDOUT: %e.var_patt: %pattern_type.cb1 = var_pattern %e.patt [concrete] // CHECK:STDOUT: %E.type: type = fn_type @E [concrete] // CHECK:STDOUT: %E: %E.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -1323,8 +1389,8 @@ import library "extern_api"; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.cb1 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.cb1 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %empty_tuple.type = var %a.var_patt [concrete] // CHECK:STDOUT: %.loc52_9.1: type = splice_block %.loc52_9.3 [concrete = constants.%empty_tuple.type] { @@ -1333,15 +1399,15 @@ import library "extern_api"; // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %empty_tuple.type = ref_binding a, %a.var [concrete = %a.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete = constants.%b.patt.b23] +// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var %b.var_patt [concrete] // CHECK:STDOUT: %i32.loc53: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %b: ref %i32 = ref_binding b, %b.var [concrete = %b.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.e1a = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.e1a = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.e1a = ref_binding_pattern c [concrete = constants.%c.patt.863] +// CHECK:STDOUT: %c.var_patt: %pattern_type.e1a = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %struct_type.c = var %c.var_patt [concrete] // CHECK:STDOUT: %.loc54: type = splice_block %struct_type.c [concrete = constants.%struct_type.c] { @@ -1350,8 +1416,8 @@ import library "extern_api"; // CHECK:STDOUT: } // CHECK:STDOUT: %c: ref %struct_type.c = ref_binding c, %c.var [concrete = %c.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.cb1 = ref_binding_pattern d [concrete] -// CHECK:STDOUT: %d.var_patt: %pattern_type.cb1 = var_pattern %d.patt [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.cb1 = ref_binding_pattern d [concrete = constants.%d.patt] +// CHECK:STDOUT: %d.var_patt: %pattern_type.cb1 = var_pattern %d.patt [concrete = constants.%d.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %empty_tuple.type = var %d.var_patt [concrete] // CHECK:STDOUT: %.loc55_9.1: type = splice_block %.loc55_9.3 [concrete = constants.%empty_tuple.type] { @@ -1360,8 +1426,8 @@ import library "extern_api"; // CHECK:STDOUT: } // CHECK:STDOUT: %d: ref %empty_tuple.type = ref_binding d, %d.var [concrete = %d.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %e.patt: %pattern_type.cb1 = ref_binding_pattern e [concrete] -// CHECK:STDOUT: %e.var_patt: %pattern_type.cb1 = var_pattern %e.patt [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type.cb1 = ref_binding_pattern e [concrete = constants.%e.patt] +// CHECK:STDOUT: %e.var_patt: %pattern_type.cb1 = var_pattern %e.patt [concrete = constants.%e.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %e.var: ref %empty_tuple.type = var %e.var_patt [concrete] // CHECK:STDOUT: %.loc56_9.1: type = splice_block %.loc56_9.3 [concrete = constants.%empty_tuple.type] { diff --git a/toolchain/check/testdata/function/declaration/param_same_name.carbon b/toolchain/check/testdata/function/declaration/param_same_name.carbon index 7dcc348f182a..e630214a59cc 100644 --- a/toolchain/check/testdata/function/declaration/param_same_name.carbon +++ b/toolchain/check/testdata/function/declaration/param_same_name.carbon @@ -24,6 +24,8 @@ fn G(a: i32); // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] @@ -47,16 +49,16 @@ fn G(a: i32); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %i32 = value_param call_param0 // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %a: %i32 = value_binding a, %a.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %i32 = value_param call_param0 // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] diff --git a/toolchain/check/testdata/function/declaration/pattern_in_signature.carbon b/toolchain/check/testdata/function/declaration/pattern_in_signature.carbon index b2e01138e361..836e638ef34f 100644 --- a/toolchain/check/testdata/function/declaration/pattern_in_signature.carbon +++ b/toolchain/check/testdata/function/declaration/pattern_in_signature.carbon @@ -27,24 +27,34 @@ fn CallF(ab: ({}, {}), c: {}) { // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %pattern_type.a96: type = pattern_type %empty_struct_type [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.a96 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.a96 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.a96 = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.a96 = at_binding_pattern b, %b.param_patt [concrete] // CHECK:STDOUT: %tuple.type.b6b: type = tuple_type (%empty_struct_type, %empty_struct_type) [concrete] // CHECK:STDOUT: %pattern_type.de4: type = pattern_type %tuple.type.b6b [concrete] +// CHECK:STDOUT: %.20f: %pattern_type.de4 = tuple_pattern (%a.patt, %b.patt) [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.a96 = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt.d53327.1: %pattern_type.a96 = at_binding_pattern c, %c.param_patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %tuple: %tuple.type.b6b = tuple_value (%empty_struct, %empty_struct) [concrete] +// CHECK:STDOUT: %ab.param_patt: %pattern_type.de4 = value_param_pattern [concrete] +// CHECK:STDOUT: %ab.patt: %pattern_type.de4 = at_binding_pattern ab, %ab.param_patt [concrete] +// CHECK:STDOUT: %c.patt.d53327.2: %pattern_type.a96 = at_binding_pattern c, %c.param_patt [concrete] // CHECK:STDOUT: %CallF.type: type = fn_type @CallF [concrete] // CHECK:STDOUT: %CallF: %CallF.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.a96 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.a96 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.a96 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.a96 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %.loc14_33: %pattern_type.de4 = tuple_pattern (%a.patt, %b.patt) [concrete] -// CHECK:STDOUT: %c.param_patt: %pattern_type.a96 = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.a96 = at_binding_pattern c, %c.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.a96 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.a96 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %b.param_patt: %pattern_type.a96 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.a96 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] +// CHECK:STDOUT: %.loc14_33: %pattern_type.de4 = tuple_pattern (%a.patt, %b.patt) [concrete = constants.%.20f] +// CHECK:STDOUT: %c.param_patt: %pattern_type.a96 = value_param_pattern [concrete = constants.%c.param_patt] +// CHECK:STDOUT: %c.patt: %pattern_type.a96 = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt.d53327.1] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %empty_struct_type = value_param call_param0 // CHECK:STDOUT: %.loc14_18.1: type = splice_block %.loc14_18.3 [concrete = constants.%empty_struct_type] { @@ -66,10 +76,10 @@ fn CallF(ab: ({}, {}), c: {}) { // CHECK:STDOUT: %c: %empty_struct_type = value_binding c, %c.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallF.decl: %CallF.type = fn_decl @CallF [concrete = constants.%CallF] { -// CHECK:STDOUT: %ab.param_patt: %pattern_type.de4 = value_param_pattern [concrete] -// CHECK:STDOUT: %ab.patt: %pattern_type.de4 = at_binding_pattern ab, %ab.param_patt [concrete] -// CHECK:STDOUT: %c.param_patt: %pattern_type.a96 = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.a96 = at_binding_pattern c, %c.param_patt [concrete] +// CHECK:STDOUT: %ab.param_patt: %pattern_type.de4 = value_param_pattern [concrete = constants.%ab.param_patt] +// CHECK:STDOUT: %ab.patt: %pattern_type.de4 = at_binding_pattern ab, %ab.param_patt [concrete = constants.%ab.patt] +// CHECK:STDOUT: %c.param_patt: %pattern_type.a96 = value_param_pattern [concrete = constants.%c.param_patt] +// CHECK:STDOUT: %c.patt: %pattern_type.a96 = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt.d53327.2] // CHECK:STDOUT: } { // CHECK:STDOUT: %ab.param: %tuple.type.b6b = value_param call_param0 // CHECK:STDOUT: %.loc18_21.1: type = splice_block %.loc18_21.5 [concrete = constants.%tuple.type.b6b] { diff --git a/toolchain/check/testdata/function/declaration/ref.carbon b/toolchain/check/testdata/function/declaration/ref.carbon index 25146fff61a6..5b0b5cc7c4ca 100644 --- a/toolchain/check/testdata/function/declaration/ref.carbon +++ b/toolchain/check/testdata/function/declaration/ref.carbon @@ -30,10 +30,13 @@ fn G() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.512: Core.Form = ref_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %.ae0: %pattern_type.6b6 = ref_return_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %.ae0, %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = ref_binding_pattern x [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -53,8 +56,8 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %.loc4_11.1: %pattern_type.6b6 = ref_return_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %.loc4_11.1, %i32 [concrete] +// CHECK:STDOUT: %.loc4_11.1: %pattern_type.6b6 = ref_return_pattern [concrete = constants.%.ae0] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %.loc4_11.1, %i32 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc4_11.2: type = ref_tag %i32 @@ -70,7 +73,7 @@ fn G() { // CHECK:STDOUT: fn @G() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = ref_binding_pattern x [concrete = constants.%x.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %F.ref: %F.type = name_ref F, file.%F.decl [concrete = constants.%F] // CHECK:STDOUT: %F.call: ref %i32 = call %F.ref() diff --git a/toolchain/check/testdata/function/definition/basics.carbon b/toolchain/check/testdata/function/definition/basics.carbon index 5d7e1992c412..cc5145be574f 100644 --- a/toolchain/check/testdata/function/definition/basics.carbon +++ b/toolchain/check/testdata/function/definition/basics.carbon @@ -31,6 +31,8 @@ fn F(unused n: C) {} // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type = at_binding_pattern n, %n.param_patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -42,8 +44,8 @@ fn F(unused n: C) {} // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %n.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %n.patt: %pattern_type = at_binding_pattern n, %n.param_patt [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type = value_param_pattern [concrete = constants.%n.param_patt] +// CHECK:STDOUT: %n.patt: %pattern_type = at_binding_pattern n, %n.param_patt [concrete = constants.%n.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %n.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] diff --git a/toolchain/check/testdata/function/definition/fail_decl_param_mismatch.carbon b/toolchain/check/testdata/function/definition/fail_decl_param_mismatch.carbon index d94724f6751d..fd8d582cde08 100644 --- a/toolchain/check/testdata/function/definition/fail_decl_param_mismatch.carbon +++ b/toolchain/check/testdata/function/definition/fail_decl_param_mismatch.carbon @@ -77,8 +77,11 @@ fn K() -> {} { return {}; } // CHECK:STDOUT: %F.7088cc.1: %F.type.eb3ec9.1 = struct_value () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.cb1 = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.7ba44d.1: %pattern_type.cb1 = at_binding_pattern x, %x.param_patt [concrete] // CHECK:STDOUT: %F.type.eb3ec9.2: type = fn_type @F.loc23 [concrete] // CHECK:STDOUT: %F.7088cc.2: %F.type.eb3ec9.2 = struct_value () [concrete] +// CHECK:STDOUT: %x.patt.7ba44d.2: %pattern_type.cb1 = at_binding_pattern x, %x.param_patt [concrete] // CHECK:STDOUT: %G.type.f42045.1: type = fn_type @G.loc25 [concrete] // CHECK:STDOUT: %G.4228ed.1: %G.type.f42045.1 = struct_value () [concrete] // CHECK:STDOUT: %G.type.f42045.2: type = fn_type @G.loc33 [concrete] @@ -90,6 +93,8 @@ fn K() -> {} { return {}; } // CHECK:STDOUT: %I.type.4c8936.1: type = fn_type @I.loc42 [concrete] // CHECK:STDOUT: %I.8a67f5.1: %I.type.4c8936.1 = struct_value () [concrete] // CHECK:STDOUT: %.262: Core.Form = init_form %empty_tuple.type [concrete] +// CHECK:STDOUT: %return.param_patt.900: %pattern_type.cb1 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.427: %pattern_type.cb1 = return_slot_pattern %return.param_patt.900, %empty_tuple.type [concrete] // CHECK:STDOUT: %I.type.4c8936.2: type = fn_type @I.loc50 [concrete] // CHECK:STDOUT: %I.8a67f5.2: %I.type.4c8936.2 = struct_value () [concrete] // CHECK:STDOUT: %J.type.6304f1.1: type = fn_type @J.loc52 [concrete] @@ -102,6 +107,8 @@ fn K() -> {} { return {}; } // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %.469: Core.Form = init_form %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.a96: type = pattern_type %empty_struct_type [concrete] +// CHECK:STDOUT: %return.param_patt.296: %pattern_type.a96 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.c45: %pattern_type.a96 = return_slot_pattern %return.param_patt.296, %empty_struct_type [concrete] // CHECK:STDOUT: %K.type.b73f4f.2: type = fn_type @K.loc70 [concrete] // CHECK:STDOUT: %K.4fd1e7.2: %K.type.b73f4f.2 = struct_value () [concrete] // CHECK:STDOUT: } @@ -117,8 +124,8 @@ fn K() -> {} { return {}; } // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl.loc15: %F.type.eb3ec9.1 = fn_decl @F.loc15 [concrete = constants.%F.7088cc.1] {} {} // CHECK:STDOUT: %F.decl.loc23: %F.type.eb3ec9.2 = fn_decl @F.loc23 [concrete = constants.%F.7088cc.2] { -// CHECK:STDOUT: %x.param_patt: %pattern_type.cb1 = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.cb1 = value_param_pattern [concrete = constants.%x.param_patt] +// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt.7ba44d.1] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %empty_tuple.type = value_param call_param0 // CHECK:STDOUT: %.loc23_17.1: type = splice_block %.loc23_17.3 [concrete = constants.%empty_tuple.type] { @@ -128,8 +135,8 @@ fn K() -> {} { return {}; } // CHECK:STDOUT: %x: %empty_tuple.type = value_binding x, %x.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl.loc25: %G.type.f42045.1 = fn_decl @G.loc25 [concrete = constants.%G.4228ed.1] { -// CHECK:STDOUT: %x.param_patt: %pattern_type.cb1 = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.cb1 = value_param_pattern [concrete = constants.%x.param_patt] +// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt.7ba44d.2] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %empty_tuple.type = value_param call_param0 // CHECK:STDOUT: %.loc25_10.1: type = splice_block %.loc25_10.3 [concrete = constants.%empty_tuple.type] { @@ -140,8 +147,8 @@ fn K() -> {} { return {}; } // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl.loc33: %G.type.f42045.2 = fn_decl @G.loc33 [concrete = constants.%G.4228ed.2] {} {} // CHECK:STDOUT: %H.decl.loc35: %H.type.c0bf33.1 = fn_decl @H.loc35 [concrete = constants.%H.aacb46.1] { -// CHECK:STDOUT: %x.param_patt: %pattern_type.cb1 = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.cb1 = value_param_pattern [concrete = constants.%x.param_patt] +// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt.7ba44d.2] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %empty_tuple.type = value_param call_param0 // CHECK:STDOUT: %.loc35_10.1: type = splice_block %.loc35_10.3 [concrete = constants.%empty_tuple.type] { @@ -151,8 +158,8 @@ fn K() -> {} { return {}; } // CHECK:STDOUT: %x: %empty_tuple.type = value_binding x, %x.param // CHECK:STDOUT: } // CHECK:STDOUT: %H.decl.loc40: %H.type.c0bf33.2 = fn_decl @H.loc40 [concrete = constants.%H.aacb46.2] { -// CHECK:STDOUT: %x.param_patt: = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %x.param_patt: = value_param_pattern [concrete = ] +// CHECK:STDOUT: %x.patt: = at_binding_pattern x, %x.param_patt [concrete = ] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: = value_param call_param0 // CHECK:STDOUT: %.loc40: type = type_literal [concrete = ] @@ -160,8 +167,8 @@ fn K() -> {} { return {}; } // CHECK:STDOUT: } // CHECK:STDOUT: %I.decl.loc42: %I.type.4c8936.1 = fn_decl @I.loc42 [concrete = constants.%I.8a67f5.1] {} {} // CHECK:STDOUT: %I.decl.loc50: %I.type.4c8936.2 = fn_decl @I.loc50 [concrete = constants.%I.8a67f5.2] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern %return.param_patt, %.loc50_12.2 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern [concrete = constants.%return.param_patt.900] +// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern %return.param_patt, %.loc50_12.2 [concrete = constants.%return.patt.427] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc50_12.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc50_12.2: type = converted %.loc50_12.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -170,8 +177,8 @@ fn K() -> {} { return {}; } // CHECK:STDOUT: %return: ref %empty_tuple.type = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %J.decl.loc52: %J.type.6304f1.1 = fn_decl @J.loc52 [concrete = constants.%J.64b370.1] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern %return.param_patt, %.loc52_12.2 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern [concrete = constants.%return.param_patt.900] +// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern %return.param_patt, %.loc52_12.2 [concrete = constants.%return.patt.427] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc52_12.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc52_12.2: type = converted %.loc52_12.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -181,8 +188,8 @@ fn K() -> {} { return {}; } // CHECK:STDOUT: } // CHECK:STDOUT: %J.decl.loc60: %J.type.6304f1.2 = fn_decl @J.loc60 [concrete = constants.%J.64b370.2] {} {} // CHECK:STDOUT: %K.decl.loc62: %K.type.b73f4f.1 = fn_decl @K.loc62 [concrete = constants.%K.4fd1e7.1] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern %return.param_patt, %.loc62_12.2 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern [concrete = constants.%return.param_patt.900] +// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern %return.param_patt, %.loc62_12.2 [concrete = constants.%return.patt.427] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc62_12.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc62_12.2: type = converted %.loc62_12.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -191,8 +198,8 @@ fn K() -> {} { return {}; } // CHECK:STDOUT: %return: ref %empty_tuple.type = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %K.decl.loc70: %K.type.b73f4f.2 = fn_decl @K.loc70 [concrete = constants.%K.4fd1e7.2] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.a96 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.a96 = return_slot_pattern %return.param_patt, %.loc70_12.2 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.a96 = out_param_pattern [concrete = constants.%return.param_patt.296] +// CHECK:STDOUT: %return.patt: %pattern_type.a96 = return_slot_pattern %return.param_patt, %.loc70_12.2 [concrete = constants.%return.patt.c45] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc70_12.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] // CHECK:STDOUT: %.loc70_12.2: type = converted %.loc70_12.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type] diff --git a/toolchain/check/testdata/function/definition/import.carbon b/toolchain/check/testdata/function/definition/import.carbon index e94ac2b81163..d630b636602a 100644 --- a/toolchain/check/testdata/function/definition/import.carbon +++ b/toolchain/check/testdata/function/definition/import.carbon @@ -125,7 +125,11 @@ fn D() {} // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %B.type: type = fn_type @B [concrete] // CHECK:STDOUT: %B: %B.type = struct_value () [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -142,9 +146,13 @@ fn D() {} // CHECK:STDOUT: %tuple.19c: %tuple.type.85c = tuple_value (%i32) [concrete] // CHECK:STDOUT: %tuple.type.a8a: type = tuple_type (%i32) [concrete] // CHECK:STDOUT: %pattern_type.e71: type = pattern_type %tuple.type.a8a [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.e71 = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.e71 = at_binding_pattern c, %c.param_patt [concrete] // CHECK:STDOUT: %struct_type.c: type = struct_type {.c: %i32} [concrete] // CHECK:STDOUT: %.510: Core.Form = init_form %struct_type.c [concrete] // CHECK:STDOUT: %pattern_type.e1a: type = pattern_type %struct_type.c [concrete] +// CHECK:STDOUT: %return.param_patt.b6f: %pattern_type.e1a = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.00b: %pattern_type.e1a = return_slot_pattern %return.param_patt.b6f, %struct_type.c [concrete] // CHECK:STDOUT: %C.type: type = fn_type @C [concrete] // CHECK:STDOUT: %C: %C.type = struct_value () [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] @@ -176,10 +184,10 @@ fn D() {} // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] {} {} // CHECK:STDOUT: %B.decl: %B.type = fn_decl @B [concrete = constants.%B] { -// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc5_17 [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc5_17 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc5_17: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc5: Core.Form = init_form %i32.loc5_17 [concrete = constants.%.795] @@ -190,10 +198,10 @@ fn D() {} // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: %C.type = fn_decl @C [concrete = constants.%C] { -// CHECK:STDOUT: %c.param_patt: %pattern_type.e71 = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.e71 = at_binding_pattern c, %c.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.e1a = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.e1a = return_slot_pattern %return.param_patt, %struct_type.c [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.e71 = value_param_pattern [concrete = constants.%c.param_patt] +// CHECK:STDOUT: %c.patt: %pattern_type.e71 = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.e1a = out_param_pattern [concrete = constants.%return.param_patt.b6f] +// CHECK:STDOUT: %return.patt: %pattern_type.e1a = return_slot_pattern %return.param_patt, %struct_type.c [concrete = constants.%return.patt.00b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc6_25: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %struct_type.c: type = struct_type {.c: %i32} [concrete = constants.%struct_type.c] @@ -276,6 +284,8 @@ fn D() {} // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.cb1 = var_pattern %a.patt [concrete] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] @@ -283,6 +293,8 @@ fn D() {} // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %b.patt.b23: %pattern_type.6b6 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt.b23 [concrete] // CHECK:STDOUT: %B.type: type = fn_type @B [concrete] // CHECK:STDOUT: %B: %B.type = struct_value () [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] @@ -304,6 +316,8 @@ fn D() {} // CHECK:STDOUT: %int_1.0c6: %i32 = int_value 1 [concrete] // CHECK:STDOUT: %struct_type.c: type = struct_type {.c: %i32} [concrete] // CHECK:STDOUT: %pattern_type.e1a: type = pattern_type %struct_type.c [concrete] +// CHECK:STDOUT: %c.patt.863: %pattern_type.e1a = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.e1a = var_pattern %c.patt.863 [concrete] // CHECK:STDOUT: %C.type: type = fn_type @C [concrete] // CHECK:STDOUT: %C: %C.type = struct_value () [concrete] // CHECK:STDOUT: %tuple.type.a8a: type = tuple_type (%i32) [concrete] @@ -343,8 +357,8 @@ fn D() {} // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.cb1 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.cb1 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %empty_tuple.type = var %a.var_patt [concrete] // CHECK:STDOUT: %.loc6_9.1: type = splice_block %.loc6_9.3 [concrete = constants.%empty_tuple.type] { @@ -353,15 +367,15 @@ fn D() {} // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %empty_tuple.type = ref_binding a, %a.var [concrete = %a.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete = constants.%b.patt.b23] +// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var %b.var_patt [concrete] // CHECK:STDOUT: %i32.loc7: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %b: ref %i32 = ref_binding b, %b.var [concrete = %b.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.e1a = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.e1a = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.e1a = ref_binding_pattern c [concrete = constants.%c.patt.863] +// CHECK:STDOUT: %c.var_patt: %pattern_type.e1a = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %struct_type.c = var %c.var_patt [concrete] // CHECK:STDOUT: %.loc8: type = splice_block %struct_type.c [concrete = constants.%struct_type.c] { diff --git a/toolchain/check/testdata/function/definition/import_access.carbon b/toolchain/check/testdata/function/definition/import_access.carbon index f3d678041be4..73e5fc50bce3 100644 --- a/toolchain/check/testdata/function/definition/import_access.carbon +++ b/toolchain/check/testdata/function/definition/import_access.carbon @@ -201,6 +201,8 @@ private fn Redecl() {} // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type = ref_binding_pattern f [concrete] +// CHECK:STDOUT: %f.var_patt: %pattern_type = var_pattern %f.patt [concrete] // CHECK:STDOUT: %Def.type: type = fn_type @Def [concrete] // CHECK:STDOUT: %Def: %Def.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -217,8 +219,8 @@ private fn Redecl() {} // CHECK:STDOUT: %Test.import = import Test // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %f.patt: %pattern_type = ref_binding_pattern f [concrete] -// CHECK:STDOUT: %f.var_patt: %pattern_type = var_pattern %f.patt [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type = ref_binding_pattern f [concrete = constants.%f.patt] +// CHECK:STDOUT: %f.var_patt: %pattern_type = var_pattern %f.patt [concrete = constants.%f.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %f.var: ref %empty_tuple.type = var %f.var_patt [concrete] // CHECK:STDOUT: %.loc4_9.1: type = splice_block %.loc4_9.3 [concrete = constants.%empty_tuple.type] { @@ -244,6 +246,8 @@ private fn Redecl() {} // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type = ref_binding_pattern f [concrete] +// CHECK:STDOUT: %f.var_patt: %pattern_type = var_pattern %f.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -253,8 +257,8 @@ private fn Redecl() {} // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %f.patt: %pattern_type = ref_binding_pattern f [concrete] -// CHECK:STDOUT: %f.var_patt: %pattern_type = var_pattern %f.patt [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type = ref_binding_pattern f [concrete = constants.%f.patt] +// CHECK:STDOUT: %f.var_patt: %pattern_type = var_pattern %f.patt [concrete = constants.%f.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %f.var: ref %empty_tuple.type = var %f.var_patt [concrete] // CHECK:STDOUT: %.loc10_9.1: type = splice_block %.loc10_9.3 [concrete = constants.%empty_tuple.type] { @@ -277,6 +281,8 @@ private fn Redecl() {} // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type = ref_binding_pattern f [concrete] +// CHECK:STDOUT: %f.var_patt: %pattern_type = var_pattern %f.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -293,8 +299,8 @@ private fn Redecl() {} // CHECK:STDOUT: } // CHECK:STDOUT: %Test.import = import Test // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %f.patt: %pattern_type = ref_binding_pattern f [concrete] -// CHECK:STDOUT: %f.var_patt: %pattern_type = var_pattern %f.patt [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type = ref_binding_pattern f [concrete = constants.%f.patt] +// CHECK:STDOUT: %f.var_patt: %pattern_type = var_pattern %f.patt [concrete = constants.%f.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %f.var: ref %empty_tuple.type = var %f.var_patt [concrete] // CHECK:STDOUT: %.loc10_9.1: type = splice_block %.loc10_9.3 [concrete = constants.%empty_tuple.type] { @@ -318,6 +324,8 @@ private fn Redecl() {} // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type = ref_binding_pattern f [concrete] +// CHECK:STDOUT: %f.var_patt: %pattern_type = var_pattern %f.patt [concrete] // CHECK:STDOUT: %ForwardWithDef.type: type = fn_type @ForwardWithDef [concrete] // CHECK:STDOUT: %ForwardWithDef: %ForwardWithDef.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -334,8 +342,8 @@ private fn Redecl() {} // CHECK:STDOUT: %Test.import = import Test // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %f.patt: %pattern_type = ref_binding_pattern f [concrete] -// CHECK:STDOUT: %f.var_patt: %pattern_type = var_pattern %f.patt [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type = ref_binding_pattern f [concrete = constants.%f.patt] +// CHECK:STDOUT: %f.var_patt: %pattern_type = var_pattern %f.patt [concrete = constants.%f.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %f.var: ref %empty_tuple.type = var %f.var_patt [concrete] // CHECK:STDOUT: %.loc4_9.1: type = splice_block %.loc4_9.3 [concrete = constants.%empty_tuple.type] { @@ -361,6 +369,8 @@ private fn Redecl() {} // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type = ref_binding_pattern f [concrete] +// CHECK:STDOUT: %f.var_patt: %pattern_type = var_pattern %f.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -370,8 +380,8 @@ private fn Redecl() {} // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %f.patt: %pattern_type = ref_binding_pattern f [concrete] -// CHECK:STDOUT: %f.var_patt: %pattern_type = var_pattern %f.patt [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type = ref_binding_pattern f [concrete = constants.%f.patt] +// CHECK:STDOUT: %f.var_patt: %pattern_type = var_pattern %f.patt [concrete = constants.%f.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %f.var: ref %empty_tuple.type = var %f.var_patt [concrete] // CHECK:STDOUT: %.loc10_9.1: type = splice_block %.loc10_9.3 [concrete = constants.%empty_tuple.type] { @@ -394,6 +404,8 @@ private fn Redecl() {} // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type = ref_binding_pattern f [concrete] +// CHECK:STDOUT: %f.var_patt: %pattern_type = var_pattern %f.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -410,8 +422,8 @@ private fn Redecl() {} // CHECK:STDOUT: } // CHECK:STDOUT: %Test.import = import Test // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %f.patt: %pattern_type = ref_binding_pattern f [concrete] -// CHECK:STDOUT: %f.var_patt: %pattern_type = var_pattern %f.patt [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type = ref_binding_pattern f [concrete = constants.%f.patt] +// CHECK:STDOUT: %f.var_patt: %pattern_type = var_pattern %f.patt [concrete = constants.%f.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %f.var: ref %empty_tuple.type = var %f.var_patt [concrete] // CHECK:STDOUT: %.loc10_9.1: type = splice_block %.loc10_9.3 [concrete = constants.%empty_tuple.type] { @@ -435,6 +447,8 @@ private fn Redecl() {} // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type = ref_binding_pattern f [concrete] +// CHECK:STDOUT: %f.var_patt: %pattern_type = var_pattern %f.patt [concrete] // CHECK:STDOUT: %Forward.type: type = fn_type @Forward [concrete] // CHECK:STDOUT: %Forward: %Forward.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -451,8 +465,8 @@ private fn Redecl() {} // CHECK:STDOUT: %Test.import = import Test // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %f.patt: %pattern_type = ref_binding_pattern f [concrete] -// CHECK:STDOUT: %f.var_patt: %pattern_type = var_pattern %f.patt [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type = ref_binding_pattern f [concrete = constants.%f.patt] +// CHECK:STDOUT: %f.var_patt: %pattern_type = var_pattern %f.patt [concrete = constants.%f.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %f.var: ref %empty_tuple.type = var %f.var_patt [concrete] // CHECK:STDOUT: %.loc4_9.1: type = splice_block %.loc4_9.3 [concrete = constants.%empty_tuple.type] { @@ -482,6 +496,8 @@ private fn Redecl() {} // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type = ref_binding_pattern f [concrete] +// CHECK:STDOUT: %f.var_patt: %pattern_type = var_pattern %f.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -491,8 +507,8 @@ private fn Redecl() {} // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %f.patt: %pattern_type = ref_binding_pattern f [concrete] -// CHECK:STDOUT: %f.var_patt: %pattern_type = var_pattern %f.patt [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type = ref_binding_pattern f [concrete = constants.%f.patt] +// CHECK:STDOUT: %f.var_patt: %pattern_type = var_pattern %f.patt [concrete = constants.%f.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %f.var: ref %empty_tuple.type = var %f.var_patt [concrete] // CHECK:STDOUT: %.loc10_9.1: type = splice_block %.loc10_9.3 [concrete = constants.%empty_tuple.type] { @@ -515,6 +531,8 @@ private fn Redecl() {} // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type = ref_binding_pattern f [concrete] +// CHECK:STDOUT: %f.var_patt: %pattern_type = var_pattern %f.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -531,8 +549,8 @@ private fn Redecl() {} // CHECK:STDOUT: } // CHECK:STDOUT: %Test.import = import Test // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %f.patt: %pattern_type = ref_binding_pattern f [concrete] -// CHECK:STDOUT: %f.var_patt: %pattern_type = var_pattern %f.patt [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type = ref_binding_pattern f [concrete = constants.%f.patt] +// CHECK:STDOUT: %f.var_patt: %pattern_type = var_pattern %f.patt [concrete = constants.%f.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %f.var: ref %empty_tuple.type = var %f.var_patt [concrete] // CHECK:STDOUT: %.loc10_9.1: type = splice_block %.loc10_9.3 [concrete = constants.%empty_tuple.type] { diff --git a/toolchain/check/testdata/function/definition/params_one.carbon b/toolchain/check/testdata/function/definition/params_one.carbon index 7c6f999e5895..85b9a5a5d147 100644 --- a/toolchain/check/testdata/function/definition/params_one.carbon +++ b/toolchain/check/testdata/function/definition/params_one.carbon @@ -22,6 +22,8 @@ fn Foo(unused a: i32) {} // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -42,8 +44,8 @@ fn Foo(unused a: i32) {} // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Foo.decl: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %i32 = value_param call_param0 // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] diff --git a/toolchain/check/testdata/function/definition/params_one_comma.carbon b/toolchain/check/testdata/function/definition/params_one_comma.carbon index 0e091c458f5e..f03f59e7f278 100644 --- a/toolchain/check/testdata/function/definition/params_one_comma.carbon +++ b/toolchain/check/testdata/function/definition/params_one_comma.carbon @@ -22,6 +22,8 @@ fn Foo(unused a: i32,) {} // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -42,8 +44,8 @@ fn Foo(unused a: i32,) {} // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Foo.decl: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %i32 = value_param call_param0 // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] diff --git a/toolchain/check/testdata/function/definition/params_two.carbon b/toolchain/check/testdata/function/definition/params_two.carbon index 20ef8d7289dc..e363366801d1 100644 --- a/toolchain/check/testdata/function/definition/params_two.carbon +++ b/toolchain/check/testdata/function/definition/params_two.carbon @@ -22,6 +22,10 @@ fn Foo(unused a: i32, unused b: i32) {} // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -42,10 +46,10 @@ fn Foo(unused a: i32, unused b: i32) {} // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Foo.decl: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %i32 = value_param call_param0 // CHECK:STDOUT: %i32.loc15_18: type = type_literal constants.%i32 [concrete = constants.%i32] diff --git a/toolchain/check/testdata/function/definition/params_two_comma.carbon b/toolchain/check/testdata/function/definition/params_two_comma.carbon index 4329aae127b6..db28910eabdd 100644 --- a/toolchain/check/testdata/function/definition/params_two_comma.carbon +++ b/toolchain/check/testdata/function/definition/params_two_comma.carbon @@ -22,6 +22,10 @@ fn Foo(unused a: i32, unused b: i32,) {} // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -42,10 +46,10 @@ fn Foo(unused a: i32, unused b: i32,) {} // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Foo.decl: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %i32 = value_param call_param0 // CHECK:STDOUT: %i32.loc15_18: type = type_literal constants.%i32 [concrete = constants.%i32] diff --git a/toolchain/check/testdata/function/definition/syntactic_merge.carbon b/toolchain/check/testdata/function/definition/syntactic_merge.carbon index a526a7e92150..6e4c6c5f3e09 100644 --- a/toolchain/check/testdata/function/definition/syntactic_merge.carbon +++ b/toolchain/check/testdata/function/definition/syntactic_merge.carbon @@ -212,6 +212,8 @@ fn Foo(unused a: const (const C)) {} // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: %Bar.type: type = fn_type @Bar [concrete] @@ -229,32 +231,32 @@ fn Foo(unused a: const (const C)) {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %D: type = alias_binding D, %C.ref [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param.loc7: %C = value_param call_param0 // CHECK:STDOUT: %C.ref.loc7: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.loc7: %C = value_binding a, %a.param.loc7 // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc8: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param.loc8: %C = value_param call_param0 // CHECK:STDOUT: %C.ref.loc8: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.loc8: %C = value_binding a, %a.param.loc8 // CHECK:STDOUT: } // CHECK:STDOUT: %Bar.decl.loc10: %Bar.type = fn_decl @Bar [concrete = constants.%Bar] { -// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param.loc10: %C = value_param call_param0 // CHECK:STDOUT: %D.ref.loc10: type = name_ref D, file.%D [concrete = constants.%C] // CHECK:STDOUT: %a.loc10: %C = value_binding a, %a.param.loc10 // CHECK:STDOUT: } // CHECK:STDOUT: %Bar.decl.loc11: %Bar.type = fn_decl @Bar [concrete = constants.%Bar] { -// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param.loc11: %C = value_param call_param0 // CHECK:STDOUT: %D.ref.loc11: type = name_ref D, file.%D [concrete = constants.%C] @@ -287,6 +289,8 @@ fn Foo(unused a: const (const C)) {} // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -298,16 +302,16 @@ fn Foo(unused a: const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %Foo.decl.loc6: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param.loc6: %C = value_param call_param0 // CHECK:STDOUT: %C.ref.loc6: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.loc6: %C = value_binding a, %a.param.loc6 // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param.loc7: %C = value_param call_param0 // CHECK:STDOUT: %C.ref.loc7: type = name_ref C, file.%C.decl [concrete = constants.%C] @@ -335,6 +339,8 @@ fn Foo(unused a: const (const C)) {} // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %Foo.type.11c674.1: type = fn_type @Foo.loc6 [concrete] // CHECK:STDOUT: %Foo.12ccef.1: %Foo.type.11c674.1 = struct_value () [concrete] // CHECK:STDOUT: %Foo.type.11c674.2: type = fn_type @Foo.loc14 [concrete] @@ -348,16 +354,16 @@ fn Foo(unused a: const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %Foo.decl.loc6: %Foo.type.11c674.1 = fn_decl @Foo.loc6 [concrete = constants.%Foo.12ccef.1] { -// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a: %C = value_binding a, %a.param // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc14: %Foo.type.11c674.2 = fn_decl @Foo.loc14 [concrete = constants.%Foo.12ccef.2] { -// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] @@ -424,6 +430,8 @@ fn Foo(unused a: const (const C)) {} // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %_.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %_.patt: %pattern_type = at_binding_pattern _, %_.param_patt [concrete] // CHECK:STDOUT: %Foo.type.11c674.1: type = fn_type @Foo.loc6 [concrete] // CHECK:STDOUT: %Foo.12ccef.1: %Foo.type.11c674.1 = struct_value () [concrete] // CHECK:STDOUT: %Foo.type.11c674.2: type = fn_type @Foo.loc14 [concrete] @@ -437,16 +445,16 @@ fn Foo(unused a: const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %Foo.decl.loc6: %Foo.type.11c674.1 = fn_decl @Foo.loc6 [concrete = constants.%Foo.12ccef.1] { -// CHECK:STDOUT: %_.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %_.patt: %pattern_type = at_binding_pattern _, %_.param_patt [concrete] +// CHECK:STDOUT: %_.param_patt: %pattern_type = value_param_pattern [concrete = constants.%_.param_patt] +// CHECK:STDOUT: %_.patt: %pattern_type = at_binding_pattern _, %_.param_patt [concrete = constants.%_.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %_.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %_: %C = value_binding _, %_.param // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc14: %Foo.type.11c674.2 = fn_decl @Foo.loc14 [concrete = constants.%Foo.12ccef.2] { -// CHECK:STDOUT: %_.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %_.patt: %pattern_type = at_binding_pattern _, %_.param_patt [concrete] +// CHECK:STDOUT: %_.param_patt: %pattern_type = value_param_pattern [concrete = constants.%_.param_patt] +// CHECK:STDOUT: %_.patt: %pattern_type = at_binding_pattern _, %_.param_patt [concrete = constants.%_.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %_.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] @@ -476,6 +484,8 @@ fn Foo(unused a: const (const C)) {} // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: %Bar.type: type = fn_type @Bar [concrete] @@ -493,16 +503,16 @@ fn Foo(unused a: const (const C)) {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %D: type = alias_binding D, %C.ref [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a: %C = value_binding a, %a.param // CHECK:STDOUT: } // CHECK:STDOUT: %Bar.decl: %Bar.type = fn_decl @Bar [concrete = constants.%Bar] { -// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %C = value_param call_param0 // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D [concrete = constants.%C] @@ -529,8 +539,11 @@ fn Foo(unused a: const (const C)) {} // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt.159dab.1: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] +// CHECK:STDOUT: %a.patt.159dab.2: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %Bar.type: type = fn_type @Bar [concrete] // CHECK:STDOUT: %Bar: %Bar.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -552,16 +565,16 @@ fn Foo(unused a: const (const C)) {} // CHECK:STDOUT: %default.import.loc2_24.1 = import // CHECK:STDOUT: %default.import.loc2_24.2 = import // CHECK:STDOUT: %Foo.decl: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt.159dab.1] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %a: %C = value_binding a, %a.param // CHECK:STDOUT: } // CHECK:STDOUT: %Bar.decl: %Bar.type = fn_decl @Bar [concrete = constants.%Bar] { -// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt.159dab.2] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %C = value_param call_param0 // CHECK:STDOUT: %D.ref: type = name_ref D, imports.%Main.D [concrete = constants.%C] @@ -593,8 +606,12 @@ fn Foo(unused a: const (const C)) {} // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %Foo.type.11c674.1: type = fn_type @Foo.loc7 [concrete] // CHECK:STDOUT: %Foo.12ccef.1: %Foo.type.11c674.1 = struct_value () [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type = at_binding_pattern b, %b.param_patt [concrete] // CHECK:STDOUT: %Foo.type.11c674.2: type = fn_type @Foo.loc15 [concrete] // CHECK:STDOUT: %Foo.12ccef.2: %Foo.type.11c674.2 = struct_value () [concrete] // CHECK:STDOUT: } @@ -609,16 +626,16 @@ fn Foo(unused a: const (const C)) {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %D: type = alias_binding D, %C.ref [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type.11c674.1 = fn_decl @Foo.loc7 [concrete = constants.%Foo.12ccef.1] { -// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a: %C = value_binding a, %a.param // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc15: %Foo.type.11c674.2 = fn_decl @Foo.loc15 [concrete = constants.%Foo.12ccef.2] { -// CHECK:STDOUT: %b.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type = at_binding_pattern b, %b.param_patt [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %b.param: %C = value_param call_param0 // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D [concrete = constants.%C] @@ -648,6 +665,8 @@ fn Foo(unused a: const (const C)) {} // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %Foo.type.11c674.1: type = fn_type @Foo.loc7 [concrete] // CHECK:STDOUT: %Foo.12ccef.1: %Foo.type.11c674.1 = struct_value () [concrete] // CHECK:STDOUT: %Foo.type.11c674.2: type = fn_type @Foo.loc15 [concrete] @@ -664,16 +683,16 @@ fn Foo(unused a: const (const C)) {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %D: type = alias_binding D, %C.ref [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type.11c674.1 = fn_decl @Foo.loc7 [concrete = constants.%Foo.12ccef.1] { -// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a: %C = value_binding a, %a.param // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc15: %Foo.type.11c674.2 = fn_decl @Foo.loc15 [concrete = constants.%Foo.12ccef.2] { -// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %C = value_param call_param0 // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D [concrete = constants.%C] @@ -705,6 +724,7 @@ fn Foo(unused a: const (const C)) {} // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %a.1bf9e8.1: %C = symbolic_binding a, 0 [symbolic] // CHECK:STDOUT: %Foo.type.11c674.1: type = fn_type @Foo.loc7 [concrete] // CHECK:STDOUT: %Foo.12ccef.1: %Foo.type.11c674.1 = struct_value () [concrete] @@ -723,7 +743,7 @@ fn Foo(unused a: const (const C)) {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %D: type = alias_binding D, %C.ref [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type.11c674.1 = fn_decl @Foo.loc7 [concrete = constants.%Foo.12ccef.1] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc7_9.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_9.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc7: type = splice_block %C.ref [concrete = constants.%C] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -732,7 +752,7 @@ fn Foo(unused a: const (const C)) {} // CHECK:STDOUT: %a.loc7_9.2: %C = symbolic_binding a, 0 [symbolic = %a.loc7_9.1 (constants.%a.1bf9e8.1)] // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc15: %Foo.type.11c674.2 = fn_decl @Foo.loc15 [concrete = constants.%Foo.12ccef.2] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc15_16.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc15_16.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc15: type = splice_block %D.ref [concrete = constants.%C] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -751,12 +771,14 @@ fn Foo(unused a: const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Foo.loc7(%a.loc7_9.2: %C) { +// CHECK:STDOUT: %a.patt.loc7_9.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_9.2 (constants.%a.patt)] // CHECK:STDOUT: %a.loc7_9.1: %C = symbolic_binding a, 0 [symbolic = %a.loc7_9.1 (constants.%a.1bf9e8.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Foo.loc15(%a.loc15_16.3: %C) { +// CHECK:STDOUT: %a.patt.loc15_16.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc15_16.2 (constants.%a.patt)] // CHECK:STDOUT: %a.loc15_16.1: %C = symbolic_binding a, 0 [symbolic = %a.loc15_16.1 (constants.%a.1bf9e8.1)] // CHECK:STDOUT: %a.loc15_16.2: %C = symbolic_binding a, 0 [symbolic = %a.loc15_16.2 (constants.%a.1bf9e8.2)] // CHECK:STDOUT: @@ -769,10 +791,12 @@ fn Foo(unused a: const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo.loc7(constants.%a.1bf9e8.1) { +// CHECK:STDOUT: %a.patt.loc7_9.2 => constants.%a.patt // CHECK:STDOUT: %a.loc7_9.1 => constants.%a.1bf9e8.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo.loc15(constants.%a.1bf9e8.2) { +// CHECK:STDOUT: %a.patt.loc15_16.2 => constants.%a.patt // CHECK:STDOUT: %a.loc15_16.1 => constants.%a.1bf9e8.2 // CHECK:STDOUT: %a.loc15_16.2 => constants.%a.1bf9e8.2 // CHECK:STDOUT: } @@ -785,6 +809,8 @@ fn Foo(unused a: const (const C)) {} // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %.a44: Core.Form = init_form %C [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %C [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] @@ -801,8 +827,8 @@ fn Foo(unused a: const (const C)) {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %D: type = alias_binding D, %C.ref [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %D.ref [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %D.ref [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %.loc7: Core.Form = init_form %C.ref [concrete = constants.%.a44] @@ -810,8 +836,8 @@ fn Foo(unused a: const (const C)) {} // CHECK:STDOUT: %return.loc7: ref %C = return_slot %return.param.loc7 // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc8: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %D.ref [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %D.ref [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D [concrete = constants.%C] // CHECK:STDOUT: %.loc8_13: Core.Form = init_form %D.ref [concrete = constants.%.a44] @@ -843,6 +869,8 @@ fn Foo(unused a: const (const C)) {} // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -854,8 +882,8 @@ fn Foo(unused a: const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %Foo.decl: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] @@ -880,6 +908,8 @@ fn Foo(unused a: const (const C)) {} // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt.159dab.1: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -901,8 +931,8 @@ fn Foo(unused a: const (const C)) {} // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %D: type = alias_binding D, %C.ref [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt.159dab.1] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %C = value_param call_param0 // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D [concrete = constants.%C] @@ -930,6 +960,8 @@ fn Foo(unused a: const (const C)) {} // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %const: type = const_type %C [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %const [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %Foo.type.11c674.1: type = fn_type @Foo.loc6 [concrete] // CHECK:STDOUT: %Foo.12ccef.1: %Foo.type.11c674.1 = struct_value () [concrete] // CHECK:STDOUT: %Foo.type.11c674.2: type = fn_type @Foo.loc18 [concrete] @@ -943,8 +975,8 @@ fn Foo(unused a: const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %Foo.decl.loc6: %Foo.type.11c674.1 = fn_decl @Foo.loc6 [concrete = constants.%Foo.12ccef.1] { -// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %const = value_param call_param0 // CHECK:STDOUT: %.loc6: type = splice_block %const [concrete = constants.%const] { @@ -954,8 +986,8 @@ fn Foo(unused a: const (const C)) {} // CHECK:STDOUT: %a: %const = value_binding a, %a.param // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc18: %Foo.type.11c674.2 = fn_decl @Foo.loc18 [concrete = constants.%Foo.12ccef.2] { -// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %const = value_param call_param0 // CHECK:STDOUT: %.loc18: type = splice_block %const.loc18_18 [concrete = constants.%const] { diff --git a/toolchain/check/testdata/function/generic/call.carbon b/toolchain/check/testdata/function/generic/call.carbon index a4144a301767..65c4d4920a34 100644 --- a/toolchain/check/testdata/function/generic/call.carbon +++ b/toolchain/check/testdata/function/generic/call.carbon @@ -78,10 +78,15 @@ fn CallSpecific(x: C*) -> C* { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %pattern_type.e81: type = pattern_type %Copy.type [concrete] +// CHECK:STDOUT: %T.patt.fe6: %pattern_type.e81 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.f84: %Copy.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T.f84 [symbolic] // CHECK:STDOUT: %pattern_type.2c66b4.2: type = pattern_type %T.as_type [symbolic] +// CHECK:STDOUT: %x.param_patt.1f4: %pattern_type.2c66b4.2 = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.f93: %pattern_type.2c66b4.2 = at_binding_pattern x, %x.param_patt.1f4 [symbolic] // CHECK:STDOUT: %.1ce700.2: Core.Form = init_form %T.as_type [symbolic] +// CHECK:STDOUT: %return.param_patt.bf4475.2: %pattern_type.2c66b4.2 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.f44: %pattern_type.2c66b4.2 = return_slot_pattern %return.param_patt.bf4475.2, %T.as_type [symbolic] // CHECK:STDOUT: %Function.type: type = fn_type @Function [concrete] // CHECK:STDOUT: %Function: %Function.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.d83: = require_complete_type %T.as_type [symbolic] @@ -92,12 +97,18 @@ fn CallSpecific(x: C*) -> C* { // CHECK:STDOUT: %specific_impl_fn.e2a: = specific_impl_function %impl.elem0.bd2, @Copy.WithSelf.Op(%T.f84) [symbolic] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %ptr.e8f: type = ptr_type %T.67d [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.d47: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %require_complete.ef1: = require_complete_type %ptr.e8f [symbolic] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.type.ff5: type = fn_type @ptr.as.Copy.impl.Op, @ptr.as.Copy.impl(%T.67d) [symbolic] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.ce9: %ptr.as.Copy.impl.Op.type.ff5 = struct_value () [symbolic] // CHECK:STDOUT: %pattern_type.4f4: type = pattern_type %ptr.e8f [symbolic] +// CHECK:STDOUT: %return.param_patt.27f: %pattern_type.4f4 = out_param_pattern [symbolic] // CHECK:STDOUT: %.cb6: Core.Form = init_form %ptr.e8f [symbolic] // CHECK:STDOUT: %Function.specific_fn.4db: = specific_function %Function, @Function(%T.f84) [symbolic] +// CHECK:STDOUT: %x.param_patt.b5c: %pattern_type.4f4 = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.b28: %pattern_type.4f4 = at_binding_pattern x, %x.param_patt.b5c [symbolic] +// CHECK:STDOUT: %return.patt.d67: %pattern_type.4f4 = return_slot_pattern %return.param_patt.27f, %ptr.e8f [symbolic] // CHECK:STDOUT: %Copy.lookup_impl_witness.1da: = lookup_impl_witness %ptr.e8f, @Copy [symbolic] // CHECK:STDOUT: %.0e9: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.67d) [symbolic] // CHECK:STDOUT: %Copy.facet.302: %Copy.type = facet_value %ptr.e8f, (%Copy.lookup_impl_witness.1da) [symbolic] @@ -105,7 +116,11 @@ fn CallSpecific(x: C*) -> C* { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %ptr.6b6: type = ptr_type %C [concrete] // CHECK:STDOUT: %pattern_type.fcb: type = pattern_type %ptr.6b6 [concrete] +// CHECK:STDOUT: %x.param_patt.503: %pattern_type.fcb = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.eca: %pattern_type.fcb = at_binding_pattern x, %x.param_patt.503 [concrete] // CHECK:STDOUT: %.8fa: Core.Form = init_form %ptr.6b6 [concrete] +// CHECK:STDOUT: %return.param_patt.ada: %pattern_type.fcb = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.783: %pattern_type.fcb = return_slot_pattern %return.param_patt.ada, %ptr.6b6 [concrete] // CHECK:STDOUT: %Copy.impl_witness.65f: = impl_witness imports.%Copy.impl_witness_table.4f1, @ptr.as.Copy.impl(%C) [concrete] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.type.b22: type = fn_type @ptr.as.Copy.impl.Op, @ptr.as.Copy.impl(%C) [concrete] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.c19: %ptr.as.Copy.impl.Op.type.b22 = struct_value () [concrete] @@ -134,11 +149,11 @@ fn CallSpecific(x: C*) -> C* { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %Function.decl: %Function.type = fn_decl @Function [concrete = constants.%Function] { -// CHECK:STDOUT: %T.patt: %pattern_type.e81 = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %x.param_patt: @Function.%pattern_type (%pattern_type.2c66b4.2) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @Function.%pattern_type (%pattern_type.2c66b4.2) = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @Function.%pattern_type (%pattern_type.2c66b4.2) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @Function.%pattern_type (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt, %.loc5_37.3 [concrete] +// CHECK:STDOUT: %T.patt.loc5_14.1: %pattern_type.e81 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_14.2 (constants.%T.patt.fe6)] +// CHECK:STDOUT: %x.param_patt.loc5_29.1: @Function.%pattern_type (%pattern_type.2c66b4.2) = value_param_pattern [symbolic = %x.param_patt.loc5_29.2 (constants.%x.param_patt.1f4)] +// CHECK:STDOUT: %x.patt.loc5_29.1: @Function.%pattern_type (%pattern_type.2c66b4.2) = at_binding_pattern x, %x.param_patt.loc5_29.1 [symbolic = %x.patt.loc5_29.2 (constants.%x.patt.f93)] +// CHECK:STDOUT: %return.param_patt.loc5_37.1: @Function.%pattern_type (%pattern_type.2c66b4.2) = out_param_pattern [symbolic = %return.param_patt.loc5_37.2 (constants.%return.param_patt.bf4475.2)] +// CHECK:STDOUT: %return.patt.loc5_34.1: @Function.%pattern_type (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt.loc5_37.1, %.loc5_37.3 [symbolic = %return.patt.loc5_34.2 (constants.%return.patt.f44)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc5_37: %Copy.type = name_ref T, %T.loc5_14.2 [symbolic = %T.loc5_14.1 (constants.%T.f84)] // CHECK:STDOUT: %T.as_type.loc5_37: type = facet_access_type %T.ref.loc5_37 [symbolic = %T.as_type.loc5_31.1 (constants.%T.as_type)] @@ -163,25 +178,31 @@ fn CallSpecific(x: C*) -> C* { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Function(%T.loc5_14.2: %Copy.type) { +// CHECK:STDOUT: %T.patt.loc5_14.2: %pattern_type.e81 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_14.2 (constants.%T.patt.fe6)] // CHECK:STDOUT: %T.loc5_14.1: %Copy.type = symbolic_binding T, 0 [symbolic = %T.loc5_14.1 (constants.%T.f84)] // CHECK:STDOUT: %T.as_type.loc5_31.1: type = facet_access_type %T.loc5_14.1 [symbolic = %T.as_type.loc5_31.1 (constants.%T.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc5_31.1 [symbolic = %pattern_type (constants.%pattern_type.2c66b4.2)] +// CHECK:STDOUT: %x.param_patt.loc5_29.2: @Function.%pattern_type (%pattern_type.2c66b4.2) = value_param_pattern [symbolic = %x.param_patt.loc5_29.2 (constants.%x.param_patt.1f4)] +// CHECK:STDOUT: %x.patt.loc5_29.2: @Function.%pattern_type (%pattern_type.2c66b4.2) = at_binding_pattern x, %x.param_patt.loc5_29.2 [symbolic = %x.patt.loc5_29.2 (constants.%x.patt.f93)] // CHECK:STDOUT: %.loc5_37.2: Core.Form = init_form %T.as_type.loc5_31.1 [symbolic = %.loc5_37.2 (constants.%.1ce700.2)] +// CHECK:STDOUT: %return.param_patt.loc5_37.2: @Function.%pattern_type (%pattern_type.2c66b4.2) = out_param_pattern [symbolic = %return.param_patt.loc5_37.2 (constants.%return.param_patt.bf4475.2)] +// CHECK:STDOUT: %return.patt.loc5_34.2: @Function.%pattern_type (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt.loc5_37.2, %T.as_type.loc5_31.1 [symbolic = %return.patt.loc5_34.2 (constants.%return.patt.f44)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc5_31.1 [symbolic = %require_complete (constants.%require_complete.d83)] // CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%T.loc5_14.1) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.c85f21.2)] -// CHECK:STDOUT: %.loc6_10.2: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %T.loc5_14.1 [symbolic = %.loc6_10.2 (constants.%.c29)] +// CHECK:STDOUT: %.loc6_10.3: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %T.loc5_14.1 [symbolic = %.loc6_10.3 (constants.%.c29)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %T.loc5_14.1, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.d9c)] -// CHECK:STDOUT: %impl.elem0.loc6_10.2: @Function.%.loc6_10.2 (%.c29) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc6_10.2 (constants.%impl.elem0.bd2)] +// CHECK:STDOUT: %impl.elem0.loc6_10.2: @Function.%.loc6_10.3 (%.c29) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc6_10.2 (constants.%impl.elem0.bd2)] // CHECK:STDOUT: %specific_impl_fn.loc6_10.2: = specific_impl_function %impl.elem0.loc6_10.2, @Copy.WithSelf.Op(%T.loc5_14.1) [symbolic = %specific_impl_fn.loc6_10.2 (constants.%specific_impl_fn.e2a)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%x.param: @Function.%T.as_type.loc5_31.1 (%T.as_type)) -> out %return.param: @Function.%T.as_type.loc5_31.1 (%T.as_type) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %x.ref: @Function.%T.as_type.loc5_31.1 (%T.as_type) = name_ref x, %x -// CHECK:STDOUT: %impl.elem0.loc6_10.1: @Function.%.loc6_10.2 (%.c29) = impl_witness_access constants.%Copy.lookup_impl_witness.d9c, element0 [symbolic = %impl.elem0.loc6_10.2 (constants.%impl.elem0.bd2)] +// CHECK:STDOUT: %impl.elem0.loc6_10.1: @Function.%.loc6_10.3 (%.c29) = impl_witness_access constants.%Copy.lookup_impl_witness.d9c, element0 [symbolic = %impl.elem0.loc6_10.2 (constants.%impl.elem0.bd2)] // CHECK:STDOUT: %bound_method.loc6_10.1: = bound_method %x.ref, %impl.elem0.loc6_10.1 // CHECK:STDOUT: %.loc6_10.1: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T.loc5_14.1 (constants.%T.f84)] +// CHECK:STDOUT: %.loc6_10.2: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T.loc5_14.1 (constants.%T.f84)] // CHECK:STDOUT: %specific_impl_fn.loc6_10.1: = specific_impl_function %impl.elem0.loc6_10.1, @Copy.WithSelf.Op(constants.%T.f84) [symbolic = %specific_impl_fn.loc6_10.2 (constants.%specific_impl_fn.e2a)] // CHECK:STDOUT: %bound_method.loc6_10.2: = bound_method %x.ref, %specific_impl_fn.loc6_10.1 // CHECK:STDOUT: %.loc5_37.1: ref @Function.%T.as_type.loc5_31.1 (%T.as_type) = splice_block %return.param {} @@ -202,7 +223,8 @@ fn CallSpecific(x: C*) -> C* { // CHECK:STDOUT: %Function.ref: %Function.type = name_ref Function, file.%Function.decl [concrete = constants.%Function] // CHECK:STDOUT: %T.ref.loc12: %Copy.type = name_ref T, %T.loc10_17.2 [symbolic = %T.loc10_17.1 (constants.%T.f84)] // CHECK:STDOUT: %x.ref: @CallGeneric.%T.as_type.loc10_34.1 (%T.as_type) = name_ref x, %x -// CHECK:STDOUT: %.loc12: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T.loc10_17.1 (constants.%T.f84)] +// CHECK:STDOUT: %.loc12_23.1: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T.loc10_17.1 (constants.%T.f84)] +// CHECK:STDOUT: %.loc12_23.2: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T.loc10_17.1 (constants.%T.f84)] // CHECK:STDOUT: %Function.specific_fn.loc12_10.1: = specific_function %Function.ref, @Function(constants.%T.f84) [symbolic = %Function.specific_fn.loc12_10.2 (constants.%Function.specific_fn.4db)] // CHECK:STDOUT: // CHECK:STDOUT: %Function.call: init @CallGeneric.%T.as_type.loc10_34.1 (%T.as_type) to %.loc10_40.1 = call %Function.specific_fn.loc12_10.1(%x.ref) @@ -215,10 +237,10 @@ fn CallSpecific(x: C*) -> C* { // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: -// CHECK:STDOUT: %.loc18_24.3: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.loc16_20.1) [symbolic = %.loc18_24.3 (constants.%.0e9)] +// CHECK:STDOUT: %.loc18_24.4: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.loc16_20.1) [symbolic = %.loc18_24.4 (constants.%.0e9)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %ptr.loc16_33.1, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.1da)] -// CHECK:STDOUT: %Copy.facet.loc18_24.3: %Copy.type = facet_value %ptr.loc16_33.1, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc18_24.3 (constants.%Copy.facet.302)] -// CHECK:STDOUT: %Function.specific_fn.loc18_10.2: = specific_function constants.%Function, @Function(%Copy.facet.loc18_24.3) [symbolic = %Function.specific_fn.loc18_10.2 (constants.%Function.specific_fn.162)] +// CHECK:STDOUT: %Copy.facet.loc18_24.4: %Copy.type = facet_value %ptr.loc16_33.1, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc18_24.4 (constants.%Copy.facet.302)] +// CHECK:STDOUT: %Function.specific_fn.loc18_10.2: = specific_function constants.%Function, @Function(%Copy.facet.loc18_24.4) [symbolic = %Function.specific_fn.loc18_10.2 (constants.%Function.specific_fn.162)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%x.param: @CallGenericPtr.%ptr.loc16_33.1 (%ptr.e8f)) -> out %return.param: @CallGenericPtr.%ptr.loc16_33.1 (%ptr.e8f) { // CHECK:STDOUT: !entry: @@ -226,10 +248,12 @@ fn CallSpecific(x: C*) -> C* { // CHECK:STDOUT: %T.ref.loc18: type = name_ref T, %T.loc16_20.2 [symbolic = %T.loc16_20.1 (constants.%T.67d)] // CHECK:STDOUT: %ptr.loc18: type = ptr_type %T.ref.loc18 [symbolic = %ptr.loc16_33.1 (constants.%ptr.e8f)] // CHECK:STDOUT: %x.ref: @CallGenericPtr.%ptr.loc16_33.1 (%ptr.e8f) = name_ref x, %x -// CHECK:STDOUT: %Copy.facet.loc18_24.1: %Copy.type = facet_value %ptr.loc18, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc18_24.3 (constants.%Copy.facet.302)] -// CHECK:STDOUT: %.loc18_24.1: %Copy.type = converted %ptr.loc18, %Copy.facet.loc18_24.1 [symbolic = %Copy.facet.loc18_24.3 (constants.%Copy.facet.302)] -// CHECK:STDOUT: %Copy.facet.loc18_24.2: %Copy.type = facet_value constants.%ptr.e8f, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc18_24.3 (constants.%Copy.facet.302)] -// CHECK:STDOUT: %.loc18_24.2: %Copy.type = converted constants.%ptr.e8f, %Copy.facet.loc18_24.2 [symbolic = %Copy.facet.loc18_24.3 (constants.%Copy.facet.302)] +// CHECK:STDOUT: %Copy.facet.loc18_24.1: %Copy.type = facet_value %ptr.loc18, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc18_24.4 (constants.%Copy.facet.302)] +// CHECK:STDOUT: %.loc18_24.1: %Copy.type = converted %ptr.loc18, %Copy.facet.loc18_24.1 [symbolic = %Copy.facet.loc18_24.4 (constants.%Copy.facet.302)] +// CHECK:STDOUT: %Copy.facet.loc18_24.2: %Copy.type = facet_value constants.%ptr.e8f, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc18_24.4 (constants.%Copy.facet.302)] +// CHECK:STDOUT: %.loc18_24.2: %Copy.type = converted constants.%ptr.e8f, %Copy.facet.loc18_24.2 [symbolic = %Copy.facet.loc18_24.4 (constants.%Copy.facet.302)] +// CHECK:STDOUT: %Copy.facet.loc18_24.3: %Copy.type = facet_value constants.%ptr.e8f, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc18_24.4 (constants.%Copy.facet.302)] +// CHECK:STDOUT: %.loc18_24.3: %Copy.type = converted constants.%ptr.e8f, %Copy.facet.loc18_24.3 [symbolic = %Copy.facet.loc18_24.4 (constants.%Copy.facet.302)] // CHECK:STDOUT: %Function.specific_fn.loc18_10.1: = specific_function %Function.ref, @Function(constants.%Copy.facet.302) [symbolic = %Function.specific_fn.loc18_10.2 (constants.%Function.specific_fn.162)] // CHECK:STDOUT: %Function.call: init @CallGenericPtr.%ptr.loc16_33.1 (%ptr.e8f) = call %Function.specific_fn.loc18_10.1(%x.ref) // CHECK:STDOUT: return %Function.call @@ -246,65 +270,92 @@ fn CallSpecific(x: C*) -> C* { // CHECK:STDOUT: %.loc26_24.1: %Copy.type = converted %ptr.loc26, %Copy.facet.loc26_24.1 [concrete = constants.%Copy.facet.3f0] // CHECK:STDOUT: %Copy.facet.loc26_24.2: %Copy.type = facet_value constants.%ptr.6b6, (constants.%Copy.impl_witness.65f) [concrete = constants.%Copy.facet.3f0] // CHECK:STDOUT: %.loc26_24.2: %Copy.type = converted constants.%ptr.6b6, %Copy.facet.loc26_24.2 [concrete = constants.%Copy.facet.3f0] +// CHECK:STDOUT: %Copy.facet.loc26_24.3: %Copy.type = facet_value constants.%ptr.6b6, (constants.%Copy.impl_witness.65f) [concrete = constants.%Copy.facet.3f0] +// CHECK:STDOUT: %.loc26_24.3: %Copy.type = converted constants.%ptr.6b6, %Copy.facet.loc26_24.3 [concrete = constants.%Copy.facet.3f0] // CHECK:STDOUT: %Function.specific_fn: = specific_function %Function.ref, @Function(constants.%Copy.facet.3f0) [concrete = constants.%Function.specific_fn.710] // CHECK:STDOUT: %Function.call: init %ptr.6b6 = call %Function.specific_fn(%x.ref) // CHECK:STDOUT: return %Function.call // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Function(constants.%T.f84) { +// CHECK:STDOUT: %T.patt.loc5_14.2 => constants.%T.patt.fe6 // CHECK:STDOUT: %T.loc5_14.1 => constants.%T.f84 // CHECK:STDOUT: %T.as_type.loc5_31.1 => constants.%T.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.2c66b4.2 +// CHECK:STDOUT: %x.param_patt.loc5_29.2 => constants.%x.param_patt.1f4 +// CHECK:STDOUT: %x.patt.loc5_29.2 => constants.%x.patt.f93 // CHECK:STDOUT: %.loc5_37.2 => constants.%.1ce700.2 +// CHECK:STDOUT: %return.param_patt.loc5_37.2 => constants.%return.param_patt.bf4475.2 +// CHECK:STDOUT: %return.patt.loc5_34.2 => constants.%return.patt.f44 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.d83 // CHECK:STDOUT: %Copy.WithSelf.Op.type => constants.%Copy.WithSelf.Op.type.c85f21.2 -// CHECK:STDOUT: %.loc6_10.2 => constants.%.c29 +// CHECK:STDOUT: %.loc6_10.3 => constants.%.c29 // CHECK:STDOUT: %Copy.lookup_impl_witness => constants.%Copy.lookup_impl_witness.d9c // CHECK:STDOUT: %impl.elem0.loc6_10.2 => constants.%impl.elem0.bd2 // CHECK:STDOUT: %specific_impl_fn.loc6_10.2 => constants.%specific_impl_fn.e2a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @CallGeneric(constants.%T.f84) { +// CHECK:STDOUT: %T.patt.loc10_17.2 => constants.%T.patt.fe6 // CHECK:STDOUT: %T.loc10_17.1 => constants.%T.f84 // CHECK:STDOUT: %T.as_type.loc10_34.1 => constants.%T.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.2c66b4.2 +// CHECK:STDOUT: %x.param_patt.loc10_32.2 => constants.%x.param_patt.1f4 +// CHECK:STDOUT: %x.patt.loc10_32.2 => constants.%x.patt.f93 // CHECK:STDOUT: %.loc10_40.2 => constants.%.1ce700.2 +// CHECK:STDOUT: %return.param_patt.loc10_40.2 => constants.%return.param_patt.bf4475.2 +// CHECK:STDOUT: %return.patt.loc10_37.2 => constants.%return.patt.f44 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @CallGenericPtr(constants.%T.67d) { +// CHECK:STDOUT: %T.patt.loc16_20.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc16_20.1 => constants.%T.67d // CHECK:STDOUT: %ptr.loc16_33.1 => constants.%ptr.e8f // CHECK:STDOUT: %pattern_type => constants.%pattern_type.4f4 +// CHECK:STDOUT: %x.param_patt.loc16_30.2 => constants.%x.param_patt.b5c +// CHECK:STDOUT: %x.patt.loc16_30.2 => constants.%x.patt.b28 // CHECK:STDOUT: %.loc16_40.1 => constants.%.cb6 +// CHECK:STDOUT: %return.param_patt.loc16_40.2 => constants.%return.param_patt.27f +// CHECK:STDOUT: %return.patt.loc16_36.2 => constants.%return.patt.d67 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Function(constants.%Copy.facet.302) { +// CHECK:STDOUT: %T.patt.loc5_14.2 => constants.%T.patt.fe6 // CHECK:STDOUT: %T.loc5_14.1 => constants.%Copy.facet.302 // CHECK:STDOUT: %T.as_type.loc5_31.1 => constants.%ptr.e8f // CHECK:STDOUT: %pattern_type => constants.%pattern_type.4f4 +// CHECK:STDOUT: %x.param_patt.loc5_29.2 => constants.%x.param_patt.b5c +// CHECK:STDOUT: %x.patt.loc5_29.2 => constants.%x.patt.b28 // CHECK:STDOUT: %.loc5_37.2 => constants.%.cb6 +// CHECK:STDOUT: %return.param_patt.loc5_37.2 => constants.%return.param_patt.27f +// CHECK:STDOUT: %return.patt.loc5_34.2 => constants.%return.patt.d67 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.ef1 // CHECK:STDOUT: %Copy.WithSelf.Op.type => constants.%Copy.WithSelf.Op.type.884 -// CHECK:STDOUT: %.loc6_10.2 => constants.%.be5 +// CHECK:STDOUT: %.loc6_10.3 => constants.%.be5 // CHECK:STDOUT: %Copy.lookup_impl_witness => constants.%Copy.lookup_impl_witness.1da // CHECK:STDOUT: %impl.elem0.loc6_10.2 => constants.%impl.elem0.484 // CHECK:STDOUT: %specific_impl_fn.loc6_10.2 => constants.%specific_impl_fn.a76 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Function(constants.%Copy.facet.3f0) { +// CHECK:STDOUT: %T.patt.loc5_14.2 => constants.%T.patt.fe6 // CHECK:STDOUT: %T.loc5_14.1 => constants.%Copy.facet.3f0 // CHECK:STDOUT: %T.as_type.loc5_31.1 => constants.%ptr.6b6 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.fcb +// CHECK:STDOUT: %x.param_patt.loc5_29.2 => constants.%x.param_patt.503 +// CHECK:STDOUT: %x.patt.loc5_29.2 => constants.%x.patt.eca // CHECK:STDOUT: %.loc5_37.2 => constants.%.8fa +// CHECK:STDOUT: %return.param_patt.loc5_37.2 => constants.%return.param_patt.ada +// CHECK:STDOUT: %return.patt.loc5_34.2 => constants.%return.patt.783 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.bf9 // CHECK:STDOUT: %Copy.WithSelf.Op.type => constants.%Copy.WithSelf.Op.type.c6a -// CHECK:STDOUT: %.loc6_10.2 => constants.%.a68 +// CHECK:STDOUT: %.loc6_10.3 => constants.%.a68 // CHECK:STDOUT: %Copy.lookup_impl_witness => constants.%Copy.impl_witness.65f // CHECK:STDOUT: %impl.elem0.loc6_10.2 => constants.%ptr.as.Copy.impl.Op.c19 // CHECK:STDOUT: %specific_impl_fn.loc6_10.2 => constants.%ptr.as.Copy.impl.Op.specific_fn @@ -317,10 +368,15 @@ fn CallSpecific(x: C*) -> C* { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %pattern_type.e81: type = pattern_type %Copy.type [concrete] +// CHECK:STDOUT: %T.patt.fe6: %pattern_type.e81 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.f84: %Copy.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T.f84 [symbolic] // CHECK:STDOUT: %pattern_type.2c66b4.2: type = pattern_type %T.as_type [symbolic] +// CHECK:STDOUT: %x.param_patt.1f4: %pattern_type.2c66b4.2 = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.f93: %pattern_type.2c66b4.2 = at_binding_pattern x, %x.param_patt.1f4 [symbolic] // CHECK:STDOUT: %.1ce700.2: Core.Form = init_form %T.as_type [symbolic] +// CHECK:STDOUT: %return.param_patt.bf4475.2: %pattern_type.2c66b4.2 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.f44: %pattern_type.2c66b4.2 = return_slot_pattern %return.param_patt.bf4475.2, %T.as_type [symbolic] // CHECK:STDOUT: %Function.type: type = fn_type @Function [concrete] // CHECK:STDOUT: %Function: %Function.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.d83: = require_complete_type %T.as_type [symbolic] @@ -331,12 +387,18 @@ fn CallSpecific(x: C*) -> C* { // CHECK:STDOUT: %specific_impl_fn.e2a: = specific_impl_function %impl.elem0.bd2, @Copy.WithSelf.Op(%T.f84) [symbolic] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %ptr.e8f: type = ptr_type %T.67d [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.d47: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %require_complete.ef1: = require_complete_type %ptr.e8f [symbolic] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.type.ff5: type = fn_type @ptr.as.Copy.impl.Op, @ptr.as.Copy.impl(%T.67d) [symbolic] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.ce9: %ptr.as.Copy.impl.Op.type.ff5 = struct_value () [symbolic] // CHECK:STDOUT: %pattern_type.4f4: type = pattern_type %ptr.e8f [symbolic] +// CHECK:STDOUT: %return.param_patt.27f: %pattern_type.4f4 = out_param_pattern [symbolic] // CHECK:STDOUT: %.cb6: Core.Form = init_form %ptr.e8f [symbolic] // CHECK:STDOUT: %Function.specific_fn.4db: = specific_function %Function, @Function(%T.f84) [symbolic] +// CHECK:STDOUT: %x.param_patt.b5c: %pattern_type.4f4 = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.b28: %pattern_type.4f4 = at_binding_pattern x, %x.param_patt.b5c [symbolic] +// CHECK:STDOUT: %return.patt.d67: %pattern_type.4f4 = return_slot_pattern %return.param_patt.27f, %ptr.e8f [symbolic] // CHECK:STDOUT: %Copy.lookup_impl_witness.1da: = lookup_impl_witness %ptr.e8f, @Copy [symbolic] // CHECK:STDOUT: %.0e9: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.67d) [symbolic] // CHECK:STDOUT: %Copy.facet.302: %Copy.type = facet_value %ptr.e8f, (%Copy.lookup_impl_witness.1da) [symbolic] @@ -344,7 +406,11 @@ fn CallSpecific(x: C*) -> C* { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %ptr.6b6: type = ptr_type %C [concrete] // CHECK:STDOUT: %pattern_type.fcb: type = pattern_type %ptr.6b6 [concrete] +// CHECK:STDOUT: %x.param_patt.503: %pattern_type.fcb = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.eca: %pattern_type.fcb = at_binding_pattern x, %x.param_patt.503 [concrete] // CHECK:STDOUT: %.8fa: Core.Form = init_form %ptr.6b6 [concrete] +// CHECK:STDOUT: %return.param_patt.ada: %pattern_type.fcb = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.783: %pattern_type.fcb = return_slot_pattern %return.param_patt.ada, %ptr.6b6 [concrete] // CHECK:STDOUT: %Copy.impl_witness.65f: = impl_witness imports.%Copy.impl_witness_table.4f1, @ptr.as.Copy.impl(%C) [concrete] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.type.b22: type = fn_type @ptr.as.Copy.impl.Op, @ptr.as.Copy.impl(%C) [concrete] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.c19: %ptr.as.Copy.impl.Op.type.b22 = struct_value () [concrete] @@ -373,11 +439,11 @@ fn CallSpecific(x: C*) -> C* { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %Function.decl: %Function.type = fn_decl @Function [concrete = constants.%Function] { -// CHECK:STDOUT: %T.patt: %pattern_type.e81 = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %x.param_patt: @Function.%pattern_type (%pattern_type.2c66b4.2) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @Function.%pattern_type (%pattern_type.2c66b4.2) = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @Function.%pattern_type (%pattern_type.2c66b4.2) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @Function.%pattern_type (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt, %.loc5_37.3 [concrete] +// CHECK:STDOUT: %T.patt.loc5_14.1: %pattern_type.e81 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_14.2 (constants.%T.patt.fe6)] +// CHECK:STDOUT: %x.param_patt.loc5_29.1: @Function.%pattern_type (%pattern_type.2c66b4.2) = value_param_pattern [symbolic = %x.param_patt.loc5_29.2 (constants.%x.param_patt.1f4)] +// CHECK:STDOUT: %x.patt.loc5_29.1: @Function.%pattern_type (%pattern_type.2c66b4.2) = at_binding_pattern x, %x.param_patt.loc5_29.1 [symbolic = %x.patt.loc5_29.2 (constants.%x.patt.f93)] +// CHECK:STDOUT: %return.param_patt.loc5_37.1: @Function.%pattern_type (%pattern_type.2c66b4.2) = out_param_pattern [symbolic = %return.param_patt.loc5_37.2 (constants.%return.param_patt.bf4475.2)] +// CHECK:STDOUT: %return.patt.loc5_34.1: @Function.%pattern_type (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt.loc5_37.1, %.loc5_37.3 [symbolic = %return.patt.loc5_34.2 (constants.%return.patt.f44)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc5_37: %Copy.type = name_ref T, %T.loc5_14.2 [symbolic = %T.loc5_14.1 (constants.%T.f84)] // CHECK:STDOUT: %T.as_type.loc5_37: type = facet_access_type %T.ref.loc5_37 [symbolic = %T.as_type.loc5_31.1 (constants.%T.as_type)] @@ -402,25 +468,31 @@ fn CallSpecific(x: C*) -> C* { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Function(%T.loc5_14.2: %Copy.type) { +// CHECK:STDOUT: %T.patt.loc5_14.2: %pattern_type.e81 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_14.2 (constants.%T.patt.fe6)] // CHECK:STDOUT: %T.loc5_14.1: %Copy.type = symbolic_binding T, 0 [symbolic = %T.loc5_14.1 (constants.%T.f84)] // CHECK:STDOUT: %T.as_type.loc5_31.1: type = facet_access_type %T.loc5_14.1 [symbolic = %T.as_type.loc5_31.1 (constants.%T.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc5_31.1 [symbolic = %pattern_type (constants.%pattern_type.2c66b4.2)] +// CHECK:STDOUT: %x.param_patt.loc5_29.2: @Function.%pattern_type (%pattern_type.2c66b4.2) = value_param_pattern [symbolic = %x.param_patt.loc5_29.2 (constants.%x.param_patt.1f4)] +// CHECK:STDOUT: %x.patt.loc5_29.2: @Function.%pattern_type (%pattern_type.2c66b4.2) = at_binding_pattern x, %x.param_patt.loc5_29.2 [symbolic = %x.patt.loc5_29.2 (constants.%x.patt.f93)] // CHECK:STDOUT: %.loc5_37.2: Core.Form = init_form %T.as_type.loc5_31.1 [symbolic = %.loc5_37.2 (constants.%.1ce700.2)] +// CHECK:STDOUT: %return.param_patt.loc5_37.2: @Function.%pattern_type (%pattern_type.2c66b4.2) = out_param_pattern [symbolic = %return.param_patt.loc5_37.2 (constants.%return.param_patt.bf4475.2)] +// CHECK:STDOUT: %return.patt.loc5_34.2: @Function.%pattern_type (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt.loc5_37.2, %T.as_type.loc5_31.1 [symbolic = %return.patt.loc5_34.2 (constants.%return.patt.f44)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc5_31.1 [symbolic = %require_complete (constants.%require_complete.d83)] // CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%T.loc5_14.1) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.c85f21.2)] -// CHECK:STDOUT: %.loc6_10.2: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %T.loc5_14.1 [symbolic = %.loc6_10.2 (constants.%.c29)] +// CHECK:STDOUT: %.loc6_10.3: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %T.loc5_14.1 [symbolic = %.loc6_10.3 (constants.%.c29)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %T.loc5_14.1, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.d9c)] -// CHECK:STDOUT: %impl.elem0.loc6_10.2: @Function.%.loc6_10.2 (%.c29) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc6_10.2 (constants.%impl.elem0.bd2)] +// CHECK:STDOUT: %impl.elem0.loc6_10.2: @Function.%.loc6_10.3 (%.c29) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc6_10.2 (constants.%impl.elem0.bd2)] // CHECK:STDOUT: %specific_impl_fn.loc6_10.2: = specific_impl_function %impl.elem0.loc6_10.2, @Copy.WithSelf.Op(%T.loc5_14.1) [symbolic = %specific_impl_fn.loc6_10.2 (constants.%specific_impl_fn.e2a)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%x.param: @Function.%T.as_type.loc5_31.1 (%T.as_type)) -> out %return.param: @Function.%T.as_type.loc5_31.1 (%T.as_type) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %x.ref: @Function.%T.as_type.loc5_31.1 (%T.as_type) = name_ref x, %x -// CHECK:STDOUT: %impl.elem0.loc6_10.1: @Function.%.loc6_10.2 (%.c29) = impl_witness_access constants.%Copy.lookup_impl_witness.d9c, element0 [symbolic = %impl.elem0.loc6_10.2 (constants.%impl.elem0.bd2)] +// CHECK:STDOUT: %impl.elem0.loc6_10.1: @Function.%.loc6_10.3 (%.c29) = impl_witness_access constants.%Copy.lookup_impl_witness.d9c, element0 [symbolic = %impl.elem0.loc6_10.2 (constants.%impl.elem0.bd2)] // CHECK:STDOUT: %bound_method.loc6_10.1: = bound_method %x.ref, %impl.elem0.loc6_10.1 // CHECK:STDOUT: %.loc6_10.1: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T.loc5_14.1 (constants.%T.f84)] +// CHECK:STDOUT: %.loc6_10.2: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T.loc5_14.1 (constants.%T.f84)] // CHECK:STDOUT: %specific_impl_fn.loc6_10.1: = specific_impl_function %impl.elem0.loc6_10.1, @Copy.WithSelf.Op(constants.%T.f84) [symbolic = %specific_impl_fn.loc6_10.2 (constants.%specific_impl_fn.e2a)] // CHECK:STDOUT: %bound_method.loc6_10.2: = bound_method %x.ref, %specific_impl_fn.loc6_10.1 // CHECK:STDOUT: %.loc5_37.1: ref @Function.%T.as_type.loc5_31.1 (%T.as_type) = splice_block %return.param {} @@ -440,7 +512,8 @@ fn CallSpecific(x: C*) -> C* { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Function.ref: %Function.type = name_ref Function, file.%Function.decl [concrete = constants.%Function] // CHECK:STDOUT: %x.ref: @CallGeneric.%T.as_type.loc10_34.1 (%T.as_type) = name_ref x, %x -// CHECK:STDOUT: %.loc12: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T.loc10_17.1 (constants.%T.f84)] +// CHECK:STDOUT: %.loc12_20.1: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T.loc10_17.1 (constants.%T.f84)] +// CHECK:STDOUT: %.loc12_20.2: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T.loc10_17.1 (constants.%T.f84)] // CHECK:STDOUT: %Function.specific_fn.loc12_10.1: = specific_function %Function.ref, @Function(constants.%T.f84) [symbolic = %Function.specific_fn.loc12_10.2 (constants.%Function.specific_fn.4db)] // CHECK:STDOUT: // CHECK:STDOUT: %Function.call: init @CallGeneric.%T.as_type.loc10_34.1 (%T.as_type) to %.loc10_40.1 = call %Function.specific_fn.loc12_10.1(%x.ref) @@ -453,17 +526,19 @@ fn CallSpecific(x: C*) -> C* { // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: -// CHECK:STDOUT: %.loc18_20.2: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.loc16_20.1) [symbolic = %.loc18_20.2 (constants.%.0e9)] +// CHECK:STDOUT: %.loc18_20.3: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.loc16_20.1) [symbolic = %.loc18_20.3 (constants.%.0e9)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %ptr.loc16_33.1, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.1da)] -// CHECK:STDOUT: %Copy.facet.loc18_20.2: %Copy.type = facet_value %ptr.loc16_33.1, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc18_20.2 (constants.%Copy.facet.302)] -// CHECK:STDOUT: %Function.specific_fn.loc18_10.2: = specific_function constants.%Function, @Function(%Copy.facet.loc18_20.2) [symbolic = %Function.specific_fn.loc18_10.2 (constants.%Function.specific_fn.162)] +// CHECK:STDOUT: %Copy.facet.loc18_20.3: %Copy.type = facet_value %ptr.loc16_33.1, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc18_20.3 (constants.%Copy.facet.302)] +// CHECK:STDOUT: %Function.specific_fn.loc18_10.2: = specific_function constants.%Function, @Function(%Copy.facet.loc18_20.3) [symbolic = %Function.specific_fn.loc18_10.2 (constants.%Function.specific_fn.162)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%x.param: @CallGenericPtr.%ptr.loc16_33.1 (%ptr.e8f)) -> out %return.param: @CallGenericPtr.%ptr.loc16_33.1 (%ptr.e8f) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Function.ref: %Function.type = name_ref Function, file.%Function.decl [concrete = constants.%Function] // CHECK:STDOUT: %x.ref: @CallGenericPtr.%ptr.loc16_33.1 (%ptr.e8f) = name_ref x, %x -// CHECK:STDOUT: %Copy.facet.loc18_20.1: %Copy.type = facet_value constants.%ptr.e8f, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc18_20.2 (constants.%Copy.facet.302)] -// CHECK:STDOUT: %.loc18_20.1: %Copy.type = converted constants.%ptr.e8f, %Copy.facet.loc18_20.1 [symbolic = %Copy.facet.loc18_20.2 (constants.%Copy.facet.302)] +// CHECK:STDOUT: %Copy.facet.loc18_20.1: %Copy.type = facet_value constants.%ptr.e8f, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc18_20.3 (constants.%Copy.facet.302)] +// CHECK:STDOUT: %.loc18_20.1: %Copy.type = converted constants.%ptr.e8f, %Copy.facet.loc18_20.1 [symbolic = %Copy.facet.loc18_20.3 (constants.%Copy.facet.302)] +// CHECK:STDOUT: %Copy.facet.loc18_20.2: %Copy.type = facet_value constants.%ptr.e8f, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc18_20.3 (constants.%Copy.facet.302)] +// CHECK:STDOUT: %.loc18_20.2: %Copy.type = converted constants.%ptr.e8f, %Copy.facet.loc18_20.2 [symbolic = %Copy.facet.loc18_20.3 (constants.%Copy.facet.302)] // CHECK:STDOUT: %Function.specific_fn.loc18_10.1: = specific_function %Function.ref, @Function(constants.%Copy.facet.302) [symbolic = %Function.specific_fn.loc18_10.2 (constants.%Function.specific_fn.162)] // CHECK:STDOUT: %Function.call: init @CallGenericPtr.%ptr.loc16_33.1 (%ptr.e8f) = call %Function.specific_fn.loc18_10.1(%x.ref) // CHECK:STDOUT: return %Function.call @@ -474,67 +549,94 @@ fn CallSpecific(x: C*) -> C* { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Function.ref: %Function.type = name_ref Function, file.%Function.decl [concrete = constants.%Function] // CHECK:STDOUT: %x.ref: %ptr.6b6 = name_ref x, %x -// CHECK:STDOUT: %Copy.facet: %Copy.type = facet_value constants.%ptr.6b6, (constants.%Copy.impl_witness.65f) [concrete = constants.%Copy.facet.3f0] -// CHECK:STDOUT: %.loc26: %Copy.type = converted constants.%ptr.6b6, %Copy.facet [concrete = constants.%Copy.facet.3f0] +// CHECK:STDOUT: %Copy.facet.loc26_20.1: %Copy.type = facet_value constants.%ptr.6b6, (constants.%Copy.impl_witness.65f) [concrete = constants.%Copy.facet.3f0] +// CHECK:STDOUT: %.loc26_20.1: %Copy.type = converted constants.%ptr.6b6, %Copy.facet.loc26_20.1 [concrete = constants.%Copy.facet.3f0] +// CHECK:STDOUT: %Copy.facet.loc26_20.2: %Copy.type = facet_value constants.%ptr.6b6, (constants.%Copy.impl_witness.65f) [concrete = constants.%Copy.facet.3f0] +// CHECK:STDOUT: %.loc26_20.2: %Copy.type = converted constants.%ptr.6b6, %Copy.facet.loc26_20.2 [concrete = constants.%Copy.facet.3f0] // CHECK:STDOUT: %Function.specific_fn: = specific_function %Function.ref, @Function(constants.%Copy.facet.3f0) [concrete = constants.%Function.specific_fn.710] // CHECK:STDOUT: %Function.call: init %ptr.6b6 = call %Function.specific_fn(%x.ref) // CHECK:STDOUT: return %Function.call // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Function(constants.%T.f84) { +// CHECK:STDOUT: %T.patt.loc5_14.2 => constants.%T.patt.fe6 // CHECK:STDOUT: %T.loc5_14.1 => constants.%T.f84 // CHECK:STDOUT: %T.as_type.loc5_31.1 => constants.%T.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.2c66b4.2 +// CHECK:STDOUT: %x.param_patt.loc5_29.2 => constants.%x.param_patt.1f4 +// CHECK:STDOUT: %x.patt.loc5_29.2 => constants.%x.patt.f93 // CHECK:STDOUT: %.loc5_37.2 => constants.%.1ce700.2 +// CHECK:STDOUT: %return.param_patt.loc5_37.2 => constants.%return.param_patt.bf4475.2 +// CHECK:STDOUT: %return.patt.loc5_34.2 => constants.%return.patt.f44 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.d83 // CHECK:STDOUT: %Copy.WithSelf.Op.type => constants.%Copy.WithSelf.Op.type.c85f21.2 -// CHECK:STDOUT: %.loc6_10.2 => constants.%.c29 +// CHECK:STDOUT: %.loc6_10.3 => constants.%.c29 // CHECK:STDOUT: %Copy.lookup_impl_witness => constants.%Copy.lookup_impl_witness.d9c // CHECK:STDOUT: %impl.elem0.loc6_10.2 => constants.%impl.elem0.bd2 // CHECK:STDOUT: %specific_impl_fn.loc6_10.2 => constants.%specific_impl_fn.e2a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @CallGeneric(constants.%T.f84) { +// CHECK:STDOUT: %T.patt.loc10_17.2 => constants.%T.patt.fe6 // CHECK:STDOUT: %T.loc10_17.1 => constants.%T.f84 // CHECK:STDOUT: %T.as_type.loc10_34.1 => constants.%T.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.2c66b4.2 +// CHECK:STDOUT: %x.param_patt.loc10_32.2 => constants.%x.param_patt.1f4 +// CHECK:STDOUT: %x.patt.loc10_32.2 => constants.%x.patt.f93 // CHECK:STDOUT: %.loc10_40.2 => constants.%.1ce700.2 +// CHECK:STDOUT: %return.param_patt.loc10_40.2 => constants.%return.param_patt.bf4475.2 +// CHECK:STDOUT: %return.patt.loc10_37.2 => constants.%return.patt.f44 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @CallGenericPtr(constants.%T.67d) { +// CHECK:STDOUT: %T.patt.loc16_20.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc16_20.1 => constants.%T.67d // CHECK:STDOUT: %ptr.loc16_33.1 => constants.%ptr.e8f // CHECK:STDOUT: %pattern_type => constants.%pattern_type.4f4 +// CHECK:STDOUT: %x.param_patt.loc16_30.2 => constants.%x.param_patt.b5c +// CHECK:STDOUT: %x.patt.loc16_30.2 => constants.%x.patt.b28 // CHECK:STDOUT: %.loc16_40.1 => constants.%.cb6 +// CHECK:STDOUT: %return.param_patt.loc16_40.2 => constants.%return.param_patt.27f +// CHECK:STDOUT: %return.patt.loc16_36.2 => constants.%return.patt.d67 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Function(constants.%Copy.facet.302) { +// CHECK:STDOUT: %T.patt.loc5_14.2 => constants.%T.patt.fe6 // CHECK:STDOUT: %T.loc5_14.1 => constants.%Copy.facet.302 // CHECK:STDOUT: %T.as_type.loc5_31.1 => constants.%ptr.e8f // CHECK:STDOUT: %pattern_type => constants.%pattern_type.4f4 +// CHECK:STDOUT: %x.param_patt.loc5_29.2 => constants.%x.param_patt.b5c +// CHECK:STDOUT: %x.patt.loc5_29.2 => constants.%x.patt.b28 // CHECK:STDOUT: %.loc5_37.2 => constants.%.cb6 +// CHECK:STDOUT: %return.param_patt.loc5_37.2 => constants.%return.param_patt.27f +// CHECK:STDOUT: %return.patt.loc5_34.2 => constants.%return.patt.d67 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.ef1 // CHECK:STDOUT: %Copy.WithSelf.Op.type => constants.%Copy.WithSelf.Op.type.884 -// CHECK:STDOUT: %.loc6_10.2 => constants.%.be5 +// CHECK:STDOUT: %.loc6_10.3 => constants.%.be5 // CHECK:STDOUT: %Copy.lookup_impl_witness => constants.%Copy.lookup_impl_witness.1da // CHECK:STDOUT: %impl.elem0.loc6_10.2 => constants.%impl.elem0.484 // CHECK:STDOUT: %specific_impl_fn.loc6_10.2 => constants.%specific_impl_fn.a76 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Function(constants.%Copy.facet.3f0) { +// CHECK:STDOUT: %T.patt.loc5_14.2 => constants.%T.patt.fe6 // CHECK:STDOUT: %T.loc5_14.1 => constants.%Copy.facet.3f0 // CHECK:STDOUT: %T.as_type.loc5_31.1 => constants.%ptr.6b6 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.fcb +// CHECK:STDOUT: %x.param_patt.loc5_29.2 => constants.%x.param_patt.503 +// CHECK:STDOUT: %x.patt.loc5_29.2 => constants.%x.patt.eca // CHECK:STDOUT: %.loc5_37.2 => constants.%.8fa +// CHECK:STDOUT: %return.param_patt.loc5_37.2 => constants.%return.param_patt.ada +// CHECK:STDOUT: %return.patt.loc5_34.2 => constants.%return.patt.783 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.bf9 // CHECK:STDOUT: %Copy.WithSelf.Op.type => constants.%Copy.WithSelf.Op.type.c6a -// CHECK:STDOUT: %.loc6_10.2 => constants.%.a68 +// CHECK:STDOUT: %.loc6_10.3 => constants.%.a68 // CHECK:STDOUT: %Copy.lookup_impl_witness => constants.%Copy.impl_witness.65f // CHECK:STDOUT: %impl.elem0.loc6_10.2 => constants.%ptr.as.Copy.impl.Op.c19 // CHECK:STDOUT: %specific_impl_fn.loc6_10.2 => constants.%ptr.as.Copy.impl.Op.specific_fn diff --git a/toolchain/check/testdata/function/generic/call_method_on_generic_facet.carbon b/toolchain/check/testdata/function/generic/call_method_on_generic_facet.carbon index 480987821391..5370fa0bdb8b 100644 --- a/toolchain/check/testdata/function/generic/call_method_on_generic_facet.carbon +++ b/toolchain/check/testdata/function/generic/call_method_on_generic_facet.carbon @@ -44,6 +44,7 @@ fn G() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Scalar.patt: %pattern_type.98f = symbolic_binding_pattern Scalar, 0 [symbolic] // CHECK:STDOUT: %Scalar: type = symbolic_binding Scalar, 0 [symbolic] // CHECK:STDOUT: %Generic.type.30d: type = generic_interface_type @Generic [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -82,9 +83,11 @@ fn G() { // CHECK:STDOUT: %Other.facet: %Other.type = facet_value %ImplsGeneric, (%Other.impl_witness) [concrete] // CHECK:STDOUT: %Other.WithSelf.G.type.933: type = fn_type @Other.WithSelf.G, @Other.WithSelf(%Other.facet) [concrete] // CHECK:STDOUT: %Other.WithSelf.G.4ce: %Other.WithSelf.G.type.933 = struct_value () [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Generic.type.ee14e9.2: type = facet_type <@Generic, @Generic(%T)> [symbolic] // CHECK:STDOUT: %pattern_type.4e0: type = pattern_type %Generic.type.ee14e9.2 [symbolic] +// CHECK:STDOUT: %U.patt.8a6: %pattern_type.4e0 = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %U: %Generic.type.ee14e9.2 = symbolic_binding U, 1 [symbolic] // CHECK:STDOUT: %CallGenericMethod.type: type = fn_type @CallGenericMethod [concrete] // CHECK:STDOUT: %CallGenericMethod: %CallGenericMethod.type = struct_value () [concrete] @@ -104,6 +107,7 @@ fn G() { // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.de1: type = pattern_type %Generic.type.b40 [concrete] +// CHECK:STDOUT: %U.patt.e09: %pattern_type.de1 = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %CallGenericMethod.specific_fn: = specific_function %CallGenericMethod, @CallGenericMethod(%GenericParam, %Generic.facet) [concrete] // CHECK:STDOUT: %complete_type.35b: = complete_type_witness %Generic.type.b40 [concrete] // CHECK:STDOUT: %.1fa: type = fn_type_with_self_type %Generic.WithSelf.F.type.c45, %Generic.facet [concrete] @@ -128,7 +132,7 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Generic.decl: %Generic.type.30d = interface_decl @Generic [concrete = constants.%Generic.generic] { -// CHECK:STDOUT: %Scalar.patt: %pattern_type.98f = symbolic_binding_pattern Scalar, 0 [concrete] +// CHECK:STDOUT: %Scalar.patt.loc15_25.1: %pattern_type.98f = symbolic_binding_pattern Scalar, 0 [symbolic = %Scalar.patt.loc15_25.2 (constants.%Scalar.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc15_28.1: type = splice_block %.loc15_28.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -150,8 +154,8 @@ fn G() { // CHECK:STDOUT: %Other.ref: type = name_ref Other, file.%Other.decl [concrete = constants.%Other.type] // CHECK:STDOUT: } // CHECK:STDOUT: %CallGenericMethod.decl: %CallGenericMethod.type = fn_decl @CallGenericMethod [concrete = constants.%CallGenericMethod] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %U.patt: @CallGenericMethod.%pattern_type (%pattern_type.4e0) = symbolic_binding_pattern U, 1 [concrete] +// CHECK:STDOUT: %T.patt.loc33_23.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc33_23.2 (constants.%T.patt)] +// CHECK:STDOUT: %U.patt.loc33_33.1: @CallGenericMethod.%pattern_type (%pattern_type.4e0) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc33_33.2 (constants.%U.patt.8a6)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc33_26.1: type = splice_block %.loc33_26.2 [concrete = type] { // CHECK:STDOUT: %.Self.loc33_23: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -170,6 +174,7 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Generic(%Scalar.loc15_25.2: type) { +// CHECK:STDOUT: %Scalar.patt.loc15_25.2: %pattern_type.98f = symbolic_binding_pattern Scalar, 0 [symbolic = %Scalar.patt.loc15_25.2 (constants.%Scalar.patt)] // CHECK:STDOUT: %Scalar.loc15_25.1: type = symbolic_binding Scalar, 0 [symbolic = %Scalar.loc15_25.1 (constants.%Scalar)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -263,10 +268,12 @@ fn G() { // CHECK:STDOUT: fn @ImplsGeneric.as.Other.impl.G(); // CHECK:STDOUT: // CHECK:STDOUT: generic fn @CallGenericMethod(%T.loc33_23.2: type, %U.loc33_33.2: @CallGenericMethod.%Generic.type.loc33_45.1 (%Generic.type.ee14e9.2)) { +// CHECK:STDOUT: %T.patt.loc33_23.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc33_23.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc33_23.1: type = symbolic_binding T, 0 [symbolic = %T.loc33_23.1 (constants.%T)] // CHECK:STDOUT: %Generic.type.loc33_45.1: type = facet_type <@Generic, @Generic(%T.loc33_23.1)> [symbolic = %Generic.type.loc33_45.1 (constants.%Generic.type.ee14e9.2)] -// CHECK:STDOUT: %U.loc33_33.1: @CallGenericMethod.%Generic.type.loc33_45.1 (%Generic.type.ee14e9.2) = symbolic_binding U, 1 [symbolic = %U.loc33_33.1 (constants.%U)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Generic.type.loc33_45.1 [symbolic = %pattern_type (constants.%pattern_type.4e0)] +// CHECK:STDOUT: %U.patt.loc33_33.2: @CallGenericMethod.%pattern_type (%pattern_type.4e0) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc33_33.2 (constants.%U.patt.8a6)] +// CHECK:STDOUT: %U.loc33_33.1: @CallGenericMethod.%Generic.type.loc33_45.1 (%Generic.type.ee14e9.2) = symbolic_binding U, 1 [symbolic = %U.loc33_33.1 (constants.%U)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %Generic.type.loc33_45.1 [symbolic = %require_complete (constants.%require_complete)] @@ -306,6 +313,7 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Generic(constants.%Scalar) { +// CHECK:STDOUT: %Scalar.patt.loc15_25.2 => constants.%Scalar.patt // CHECK:STDOUT: %Scalar.loc15_25.1 => constants.%Scalar // CHECK:STDOUT: } // CHECK:STDOUT: @@ -314,6 +322,7 @@ fn G() { // CHECK:STDOUT: specific @Generic.WithSelf.F(constants.%Scalar, constants.%Self.8ea1ea.1) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @Generic(constants.%GenericParam) { +// CHECK:STDOUT: %Scalar.patt.loc15_25.2 => constants.%Scalar.patt // CHECK:STDOUT: %Scalar.loc15_25.1 => constants.%GenericParam // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -364,6 +373,7 @@ fn G() { // CHECK:STDOUT: specific @Other.WithSelf.G(constants.%Other.facet) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @Generic(constants.%T) { +// CHECK:STDOUT: %Scalar.patt.loc15_25.2 => constants.%Scalar.patt // CHECK:STDOUT: %Scalar.loc15_25.1 => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -372,10 +382,12 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @CallGenericMethod(constants.%T, constants.%U) { +// CHECK:STDOUT: %T.patt.loc33_23.2 => constants.%T.patt // CHECK:STDOUT: %T.loc33_23.1 => constants.%T // CHECK:STDOUT: %Generic.type.loc33_45.1 => constants.%Generic.type.ee14e9.2 -// CHECK:STDOUT: %U.loc33_33.1 => constants.%U // CHECK:STDOUT: %pattern_type => constants.%pattern_type.4e0 +// CHECK:STDOUT: %U.patt.loc33_33.2 => constants.%U.patt.8a6 +// CHECK:STDOUT: %U.loc33_33.1 => constants.%U // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Generic.WithSelf(constants.%T, constants.%Self.8ea1ea.1) { @@ -403,10 +415,12 @@ fn G() { // CHECK:STDOUT: specific @Generic.WithSelf.F(constants.%T, constants.%U) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @CallGenericMethod(constants.%GenericParam, constants.%Generic.facet) { +// CHECK:STDOUT: %T.patt.loc33_23.2 => constants.%T.patt // CHECK:STDOUT: %T.loc33_23.1 => constants.%GenericParam // CHECK:STDOUT: %Generic.type.loc33_45.1 => constants.%Generic.type.b40 -// CHECK:STDOUT: %U.loc33_33.1 => constants.%Generic.facet // CHECK:STDOUT: %pattern_type => constants.%pattern_type.de1 +// CHECK:STDOUT: %U.patt.loc33_33.2 => constants.%U.patt.e09 +// CHECK:STDOUT: %U.loc33_33.1 => constants.%Generic.facet // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.35b diff --git a/toolchain/check/testdata/function/generic/deduce.carbon b/toolchain/check/testdata/function/generic/deduce.carbon index a8772c09f201..7c103f34d3d4 100644 --- a/toolchain/check/testdata/function/generic/deduce.carbon +++ b/toolchain/check/testdata/function/generic/deduce.carbon @@ -219,10 +219,13 @@ fn F() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %ptr.e8f: type = ptr_type %T [symbolic] // CHECK:STDOUT: %.cb6: Core.Form = init_form %ptr.e8f [symbolic] // CHECK:STDOUT: %pattern_type.4f4: type = pattern_type %ptr.e8f [symbolic] +// CHECK:STDOUT: %return.param_patt.27f: %pattern_type.4f4 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.d67: %pattern_type.4f4 = return_slot_pattern %return.param_patt.27f, %ptr.e8f [symbolic] // CHECK:STDOUT: %ExplicitGenericParam.type: type = fn_type @ExplicitGenericParam [concrete] // CHECK:STDOUT: %ExplicitGenericParam: %ExplicitGenericParam.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.ef1: = require_complete_type %ptr.e8f [symbolic] @@ -234,6 +237,8 @@ fn F() { // CHECK:STDOUT: %ptr.d08: type = ptr_type %i32 [concrete] // CHECK:STDOUT: %.952: Core.Form = init_form %ptr.d08 [concrete] // CHECK:STDOUT: %pattern_type.f00: type = pattern_type %ptr.d08 [concrete] +// CHECK:STDOUT: %return.param_patt.7dd: %pattern_type.f00 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.dbe: %pattern_type.f00 = return_slot_pattern %return.param_patt.7dd, %ptr.d08 [concrete] // CHECK:STDOUT: %CallExplicitGenericParam.type: type = fn_type @CallExplicitGenericParam [concrete] // CHECK:STDOUT: %CallExplicitGenericParam: %CallExplicitGenericParam.type = struct_value () [concrete] // CHECK:STDOUT: %ExplicitGenericParam.specific_fn.330: = specific_function %ExplicitGenericParam, @ExplicitGenericParam(%i32) [concrete] @@ -241,6 +246,8 @@ fn F() { // CHECK:STDOUT: %ptr.88d: type = ptr_type %struct_type.a [symbolic] // CHECK:STDOUT: %.edd: Core.Form = init_form %ptr.88d [symbolic] // CHECK:STDOUT: %pattern_type.1cb: type = pattern_type %ptr.88d [symbolic] +// CHECK:STDOUT: %return.param_patt.83b: %pattern_type.1cb = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.4ff: %pattern_type.1cb = return_slot_pattern %return.param_patt.83b, %ptr.88d [symbolic] // CHECK:STDOUT: %CallExplicitGenericParamWithGenericArg.type: type = fn_type @CallExplicitGenericParamWithGenericArg [concrete] // CHECK:STDOUT: %CallExplicitGenericParamWithGenericArg: %CallExplicitGenericParamWithGenericArg.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.61f: = require_complete_type %ptr.88d [symbolic] @@ -266,9 +273,9 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %ExplicitGenericParam.decl: %ExplicitGenericParam.type = fn_decl @ExplicitGenericParam [concrete = constants.%ExplicitGenericParam] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %return.param_patt: @ExplicitGenericParam.%pattern_type (%pattern_type.4f4) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @ExplicitGenericParam.%pattern_type (%pattern_type.4f4) = return_slot_pattern %return.param_patt, %ptr.loc4_39.2 [concrete] +// CHECK:STDOUT: %T.patt.loc4_26.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_26.2 (constants.%T.patt)] +// CHECK:STDOUT: %return.param_patt.loc4_39.1: @ExplicitGenericParam.%pattern_type (%pattern_type.4f4) = out_param_pattern [symbolic = %return.param_patt.loc4_39.2 (constants.%return.param_patt.27f)] +// CHECK:STDOUT: %return.patt.loc4_35.1: @ExplicitGenericParam.%pattern_type (%pattern_type.4f4) = return_slot_pattern %return.param_patt.loc4_39.1, %ptr.loc4_39.2 [symbolic = %return.patt.loc4_35.2 (constants.%return.patt.d67)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc4_38: type = name_ref T, %T.loc4_26.2 [symbolic = %T.loc4_26.1 (constants.%T)] // CHECK:STDOUT: %ptr.loc4_39.2: type = ptr_type %T.ref.loc4_38 [symbolic = %ptr.loc4_39.1 (constants.%ptr.e8f)] @@ -282,8 +289,8 @@ fn F() { // CHECK:STDOUT: %return: ref @ExplicitGenericParam.%ptr.loc4_39.1 (%ptr.e8f) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallExplicitGenericParam.decl: %CallExplicitGenericParam.type = fn_decl @CallExplicitGenericParam [concrete = constants.%CallExplicitGenericParam] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.f00 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.f00 = return_slot_pattern %return.param_patt, %ptr [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.f00 = out_param_pattern [concrete = constants.%return.param_patt.7dd] +// CHECK:STDOUT: %return.patt: %pattern_type.f00 = return_slot_pattern %return.param_patt, %ptr [concrete = constants.%return.patt.dbe] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc6: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %ptr: type = ptr_type %i32.loc6 [concrete = constants.%ptr.d08] @@ -292,9 +299,9 @@ fn F() { // CHECK:STDOUT: %return: ref %ptr.d08 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallExplicitGenericParamWithGenericArg.decl: %CallExplicitGenericParamWithGenericArg.type = fn_decl @CallExplicitGenericParamWithGenericArg [concrete = constants.%CallExplicitGenericParamWithGenericArg] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %return.param_patt: @CallExplicitGenericParamWithGenericArg.%pattern_type (%pattern_type.1cb) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @CallExplicitGenericParamWithGenericArg.%pattern_type (%pattern_type.1cb) = return_slot_pattern %return.param_patt, %ptr.loc10_63.2 [concrete] +// CHECK:STDOUT: %T.patt.loc10_44.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc10_44.2 (constants.%T.patt)] +// CHECK:STDOUT: %return.param_patt.loc10_63.1: @CallExplicitGenericParamWithGenericArg.%pattern_type (%pattern_type.1cb) = out_param_pattern [symbolic = %return.param_patt.loc10_63.2 (constants.%return.param_patt.83b)] +// CHECK:STDOUT: %return.patt.loc10_53.1: @CallExplicitGenericParamWithGenericArg.%pattern_type (%pattern_type.1cb) = return_slot_pattern %return.param_patt.loc10_63.1, %ptr.loc10_63.2 [symbolic = %return.patt.loc10_53.2 (constants.%return.patt.4ff)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc10: type = name_ref T, %T.loc10_44.2 [symbolic = %T.loc10_44.1 (constants.%T)] // CHECK:STDOUT: %struct_type.a.loc10_62.2: type = struct_type {.a: @CallExplicitGenericParamWithGenericArg.%T.loc10_44.1 (%T)} [symbolic = %struct_type.a.loc10_62.1 (constants.%struct_type.a)] @@ -311,10 +318,13 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @ExplicitGenericParam(%T.loc4_26.2: type) { +// CHECK:STDOUT: %T.patt.loc4_26.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_26.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_26.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_26.1 (constants.%T)] // CHECK:STDOUT: %ptr.loc4_39.1: type = ptr_type %T.loc4_26.1 [symbolic = %ptr.loc4_39.1 (constants.%ptr.e8f)] // CHECK:STDOUT: %.loc4_39.1: Core.Form = init_form %ptr.loc4_39.1 [symbolic = %.loc4_39.1 (constants.%.cb6)] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc4_39.1 [symbolic = %pattern_type (constants.%pattern_type.4f4)] +// CHECK:STDOUT: %return.param_patt.loc4_39.2: @ExplicitGenericParam.%pattern_type (%pattern_type.4f4) = out_param_pattern [symbolic = %return.param_patt.loc4_39.2 (constants.%return.param_patt.27f)] +// CHECK:STDOUT: %return.patt.loc4_35.2: @ExplicitGenericParam.%pattern_type (%pattern_type.4f4) = return_slot_pattern %return.param_patt.loc4_39.2, %ptr.loc4_39.1 [symbolic = %return.patt.loc4_35.2 (constants.%return.patt.d67)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %ptr.loc4_39.1 [symbolic = %require_complete (constants.%require_complete.ef1)] @@ -340,11 +350,14 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @CallExplicitGenericParamWithGenericArg(%T.loc10_44.2: type) { +// CHECK:STDOUT: %T.patt.loc10_44.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc10_44.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc10_44.1: type = symbolic_binding T, 0 [symbolic = %T.loc10_44.1 (constants.%T)] // CHECK:STDOUT: %struct_type.a.loc10_62.1: type = struct_type {.a: @CallExplicitGenericParamWithGenericArg.%T.loc10_44.1 (%T)} [symbolic = %struct_type.a.loc10_62.1 (constants.%struct_type.a)] // CHECK:STDOUT: %ptr.loc10_63.1: type = ptr_type %struct_type.a.loc10_62.1 [symbolic = %ptr.loc10_63.1 (constants.%ptr.88d)] // CHECK:STDOUT: %.loc10_63.1: Core.Form = init_form %ptr.loc10_63.1 [symbolic = %.loc10_63.1 (constants.%.edd)] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc10_63.1 [symbolic = %pattern_type (constants.%pattern_type.1cb)] +// CHECK:STDOUT: %return.param_patt.loc10_63.2: @CallExplicitGenericParamWithGenericArg.%pattern_type (%pattern_type.1cb) = out_param_pattern [symbolic = %return.param_patt.loc10_63.2 (constants.%return.param_patt.83b)] +// CHECK:STDOUT: %return.patt.loc10_53.2: @CallExplicitGenericParamWithGenericArg.%pattern_type (%pattern_type.1cb) = return_slot_pattern %return.param_patt.loc10_63.2, %ptr.loc10_63.1 [symbolic = %return.patt.loc10_53.2 (constants.%return.patt.4ff)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %ptr.loc10_63.1 [symbolic = %require_complete (constants.%require_complete.61f)] @@ -362,10 +375,13 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ExplicitGenericParam(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_26.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_26.1 => constants.%T // CHECK:STDOUT: %ptr.loc4_39.1 => constants.%ptr.e8f // CHECK:STDOUT: %.loc4_39.1 => constants.%.cb6 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.4f4 +// CHECK:STDOUT: %return.param_patt.loc4_39.2 => constants.%return.param_patt.27f +// CHECK:STDOUT: %return.patt.loc4_35.2 => constants.%return.patt.d67 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.ef1 @@ -373,10 +389,13 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ExplicitGenericParam(constants.%i32) { +// CHECK:STDOUT: %T.patt.loc4_26.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_26.1 => constants.%i32 // CHECK:STDOUT: %ptr.loc4_39.1 => constants.%ptr.d08 // CHECK:STDOUT: %.loc4_39.1 => constants.%.952 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.f00 +// CHECK:STDOUT: %return.param_patt.loc4_39.2 => constants.%return.param_patt.7dd +// CHECK:STDOUT: %return.patt.loc4_35.2 => constants.%return.patt.dbe // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.07f @@ -384,18 +403,24 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @CallExplicitGenericParamWithGenericArg(constants.%T) { +// CHECK:STDOUT: %T.patt.loc10_44.2 => constants.%T.patt // CHECK:STDOUT: %T.loc10_44.1 => constants.%T // CHECK:STDOUT: %struct_type.a.loc10_62.1 => constants.%struct_type.a // CHECK:STDOUT: %ptr.loc10_63.1 => constants.%ptr.88d // CHECK:STDOUT: %.loc10_63.1 => constants.%.edd // CHECK:STDOUT: %pattern_type => constants.%pattern_type.1cb +// CHECK:STDOUT: %return.param_patt.loc10_63.2 => constants.%return.param_patt.83b +// CHECK:STDOUT: %return.patt.loc10_53.2 => constants.%return.patt.4ff // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ExplicitGenericParam(constants.%struct_type.a) { +// CHECK:STDOUT: %T.patt.loc4_26.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_26.1 => constants.%struct_type.a // CHECK:STDOUT: %ptr.loc4_39.1 => constants.%ptr.88d // CHECK:STDOUT: %.loc4_39.1 => constants.%.edd // CHECK:STDOUT: %pattern_type => constants.%pattern_type.1cb +// CHECK:STDOUT: %return.param_patt.loc4_39.2 => constants.%return.param_patt.83b +// CHECK:STDOUT: %return.patt.loc4_35.2 => constants.%return.patt.4ff // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.61f @@ -408,16 +433,21 @@ fn F() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.d47: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %ptr: type = ptr_type %T [symbolic] // CHECK:STDOUT: %.cb6: Core.Form = init_form %ptr [symbolic] // CHECK:STDOUT: %pattern_type.4f4: type = pattern_type %ptr [symbolic] +// CHECK:STDOUT: %return.param_patt: %pattern_type.4f4 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt: %pattern_type.4f4 = return_slot_pattern %return.param_patt, %ptr [symbolic] // CHECK:STDOUT: %ExplicitGenericParam.type: type = fn_type @ExplicitGenericParam [concrete] // CHECK:STDOUT: %ExplicitGenericParam: %ExplicitGenericParam.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %ptr [symbolic] // CHECK:STDOUT: %ExplicitGenericParam.specific_fn: = specific_function %ExplicitGenericParam, @ExplicitGenericParam(%T) [symbolic] // CHECK:STDOUT: %CallExplicitGenericParamConst.type: type = fn_type @CallExplicitGenericParamConst [concrete] // CHECK:STDOUT: %CallExplicitGenericParamConst: %CallExplicitGenericParamConst.type = struct_value () [concrete] +// CHECK:STDOUT: %T.param_patt: %pattern_type.98f = value_param_pattern [concrete] +// CHECK:STDOUT: %T.patt.e4c: %pattern_type.98f = at_binding_pattern T, %T.param_patt [concrete] // CHECK:STDOUT: %CallExplicitGenericParamNonConst.type: type = fn_type @CallExplicitGenericParamNonConst [concrete] // CHECK:STDOUT: %CallExplicitGenericParamNonConst: %CallExplicitGenericParamNonConst.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -438,9 +468,9 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %ExplicitGenericParam.decl: %ExplicitGenericParam.type = fn_decl @ExplicitGenericParam [concrete = constants.%ExplicitGenericParam] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %return.param_patt: @ExplicitGenericParam.%pattern_type (%pattern_type.4f4) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @ExplicitGenericParam.%pattern_type (%pattern_type.4f4) = return_slot_pattern %return.param_patt, %ptr.loc4_39.2 [concrete] +// CHECK:STDOUT: %T.patt.loc4_26.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_26.2 (constants.%T.patt.d47)] +// CHECK:STDOUT: %return.param_patt.loc4_39.1: @ExplicitGenericParam.%pattern_type (%pattern_type.4f4) = out_param_pattern [symbolic = %return.param_patt.loc4_39.2 (constants.%return.param_patt)] +// CHECK:STDOUT: %return.patt.loc4_35.1: @ExplicitGenericParam.%pattern_type (%pattern_type.4f4) = return_slot_pattern %return.param_patt.loc4_39.1, %ptr.loc4_39.2 [symbolic = %return.patt.loc4_35.2 (constants.%return.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc4_38: type = name_ref T, %T.loc4_26.2 [symbolic = %T.loc4_26.1 (constants.%T)] // CHECK:STDOUT: %ptr.loc4_39.2: type = ptr_type %T.ref.loc4_38 [symbolic = %ptr.loc4_39.1 (constants.%ptr)] @@ -454,7 +484,7 @@ fn F() { // CHECK:STDOUT: %return: ref @ExplicitGenericParam.%ptr.loc4_39.1 (%ptr) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallExplicitGenericParamConst.decl: %CallExplicitGenericParamConst.type = fn_decl @CallExplicitGenericParamConst [concrete = constants.%CallExplicitGenericParamConst] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc6_35.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_35.2 (constants.%T.patt.d47)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6_38.1: type = splice_block %.loc6_38.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -463,8 +493,8 @@ fn F() { // CHECK:STDOUT: %T.loc6_35.2: type = symbolic_binding T, 0 [symbolic = %T.loc6_35.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %CallExplicitGenericParamNonConst.decl: %CallExplicitGenericParamNonConst.type = fn_decl @CallExplicitGenericParamNonConst [concrete = constants.%CallExplicitGenericParamNonConst] { -// CHECK:STDOUT: %T.param_patt: %pattern_type.98f = value_param_pattern [concrete] -// CHECK:STDOUT: %T.patt: %pattern_type.98f = at_binding_pattern T, %T.param_patt [concrete] +// CHECK:STDOUT: %T.param_patt: %pattern_type.98f = value_param_pattern [concrete = constants.%T.param_patt] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = at_binding_pattern T, %T.param_patt [concrete = constants.%T.patt.e4c] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.param: type = value_param call_param0 // CHECK:STDOUT: %.loc10: type = type_literal type [concrete = type] @@ -473,10 +503,13 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @ExplicitGenericParam(%T.loc4_26.2: type) { +// CHECK:STDOUT: %T.patt.loc4_26.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_26.2 (constants.%T.patt.d47)] // CHECK:STDOUT: %T.loc4_26.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_26.1 (constants.%T)] // CHECK:STDOUT: %ptr.loc4_39.1: type = ptr_type %T.loc4_26.1 [symbolic = %ptr.loc4_39.1 (constants.%ptr)] // CHECK:STDOUT: %.loc4_39.1: Core.Form = init_form %ptr.loc4_39.1 [symbolic = %.loc4_39.1 (constants.%.cb6)] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc4_39.1 [symbolic = %pattern_type (constants.%pattern_type.4f4)] +// CHECK:STDOUT: %return.param_patt.loc4_39.2: @ExplicitGenericParam.%pattern_type (%pattern_type.4f4) = out_param_pattern [symbolic = %return.param_patt.loc4_39.2 (constants.%return.param_patt)] +// CHECK:STDOUT: %return.patt.loc4_35.2: @ExplicitGenericParam.%pattern_type (%pattern_type.4f4) = return_slot_pattern %return.param_patt.loc4_39.2, %ptr.loc4_39.1 [symbolic = %return.patt.loc4_35.2 (constants.%return.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %ptr.loc4_39.1 [symbolic = %require_complete (constants.%require_complete)] @@ -493,6 +526,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @CallExplicitGenericParamConst(%T.loc6_35.2: type) { +// CHECK:STDOUT: %T.patt.loc6_35.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_35.2 (constants.%T.patt.d47)] // CHECK:STDOUT: %T.loc6_35.1: type = symbolic_binding T, 0 [symbolic = %T.loc6_35.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -517,10 +551,13 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ExplicitGenericParam(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_26.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc4_26.1 => constants.%T // CHECK:STDOUT: %ptr.loc4_39.1 => constants.%ptr // CHECK:STDOUT: %.loc4_39.1 => constants.%.cb6 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.4f4 +// CHECK:STDOUT: %return.param_patt.loc4_39.2 => constants.%return.param_patt +// CHECK:STDOUT: %return.patt.loc4_35.2 => constants.%return.patt // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete @@ -528,6 +565,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @CallExplicitGenericParamConst(constants.%T) { +// CHECK:STDOUT: %T.patt.loc6_35.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc6_35.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -540,11 +578,16 @@ fn F() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %x.param_patt.91d: %pattern_type.51d = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.800: %pattern_type.51d = at_binding_pattern x, %x.param_patt.91d [symbolic] // CHECK:STDOUT: %ptr.e8f: type = ptr_type %T [symbolic] // CHECK:STDOUT: %.cb6: Core.Form = init_form %ptr.e8f [symbolic] // CHECK:STDOUT: %pattern_type.4f4: type = pattern_type %ptr.e8f [symbolic] +// CHECK:STDOUT: %return.param_patt.27f: %pattern_type.4f4 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.d67: %pattern_type.4f4 = return_slot_pattern %return.param_patt.27f, %ptr.e8f [symbolic] // CHECK:STDOUT: %ExplicitAndAlsoDeduced.type: type = fn_type @ExplicitAndAlsoDeduced [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %ExplicitAndAlsoDeduced: %ExplicitAndAlsoDeduced.type = struct_value () [concrete] @@ -554,10 +597,14 @@ fn F() { // CHECK:STDOUT: %ptr.d43: type = ptr_type %A [concrete] // CHECK:STDOUT: %.1a4: Core.Form = init_form %ptr.d43 [concrete] // CHECK:STDOUT: %pattern_type.8a5: type = pattern_type %ptr.d43 [concrete] +// CHECK:STDOUT: %return.param_patt.7a0: %pattern_type.8a5 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.264: %pattern_type.8a5 = return_slot_pattern %return.param_patt.7a0, %ptr.d43 [concrete] // CHECK:STDOUT: %CallExplicitAndAlsoDeduced.type: type = fn_type @CallExplicitAndAlsoDeduced [concrete] // CHECK:STDOUT: %CallExplicitAndAlsoDeduced: %CallExplicitAndAlsoDeduced.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.9ef: type = pattern_type %A [concrete] +// CHECK:STDOUT: %x.param_patt.4c3: %pattern_type.9ef = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.313: %pattern_type.9ef = at_binding_pattern x, %x.param_patt.4c3 [concrete] // CHECK:STDOUT: %ExplicitAndAlsoDeduced.specific_fn.d5b: = specific_function %ExplicitAndAlsoDeduced, @ExplicitAndAlsoDeduced(%A) [concrete] // CHECK:STDOUT: %A.val: %A = struct_value () [concrete] // CHECK:STDOUT: %.367: ref %A = temporary invalid, %A.val [concrete] @@ -587,11 +634,11 @@ fn F() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl: type = class_decl @A [concrete = constants.%A] {} {} // CHECK:STDOUT: %ExplicitAndAlsoDeduced.decl: %ExplicitAndAlsoDeduced.type = fn_decl @ExplicitAndAlsoDeduced [concrete = constants.%ExplicitAndAlsoDeduced] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %x.param_patt: @ExplicitAndAlsoDeduced.%pattern_type.loc6_38 (%pattern_type.51d) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @ExplicitAndAlsoDeduced.%pattern_type.loc6_38 (%pattern_type.51d) = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @ExplicitAndAlsoDeduced.%pattern_type.loc6_47 (%pattern_type.4f4) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @ExplicitAndAlsoDeduced.%pattern_type.loc6_47 (%pattern_type.4f4) = return_slot_pattern %return.param_patt, %ptr.loc6_47.2 [concrete] +// CHECK:STDOUT: %T.patt.loc6_28.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_28.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.param_patt.loc6_38.1: @ExplicitAndAlsoDeduced.%pattern_type.loc6_38 (%pattern_type.51d) = value_param_pattern [symbolic = %x.param_patt.loc6_38.2 (constants.%x.param_patt.91d)] +// CHECK:STDOUT: %x.patt.loc6_38.1: @ExplicitAndAlsoDeduced.%pattern_type.loc6_38 (%pattern_type.51d) = at_binding_pattern x, %x.param_patt.loc6_38.1 [symbolic = %x.patt.loc6_38.2 (constants.%x.patt.800)] +// CHECK:STDOUT: %return.param_patt.loc6_47.1: @ExplicitAndAlsoDeduced.%pattern_type.loc6_47 (%pattern_type.4f4) = out_param_pattern [symbolic = %return.param_patt.loc6_47.2 (constants.%return.param_patt.27f)] +// CHECK:STDOUT: %return.patt.loc6_43.1: @ExplicitAndAlsoDeduced.%pattern_type.loc6_47 (%pattern_type.4f4) = return_slot_pattern %return.param_patt.loc6_47.1, %ptr.loc6_47.2 [symbolic = %return.patt.loc6_43.2 (constants.%return.patt.d67)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc6_46: type = name_ref T, %T.loc6_28.2 [symbolic = %T.loc6_28.1 (constants.%T)] // CHECK:STDOUT: %ptr.loc6_47.2: type = ptr_type %T.ref.loc6_46 [symbolic = %ptr.loc6_47.1 (constants.%ptr.e8f)] @@ -608,8 +655,8 @@ fn F() { // CHECK:STDOUT: %return: ref @ExplicitAndAlsoDeduced.%ptr.loc6_47.1 (%ptr.e8f) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallExplicitAndAlsoDeduced.decl: %CallExplicitAndAlsoDeduced.type = fn_decl @CallExplicitAndAlsoDeduced [concrete = constants.%CallExplicitAndAlsoDeduced] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.8a5 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.8a5 = return_slot_pattern %return.param_patt, %ptr [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.8a5 = out_param_pattern [concrete = constants.%return.param_patt.7a0] +// CHECK:STDOUT: %return.patt: %pattern_type.8a5 = return_slot_pattern %return.param_patt, %ptr [concrete = constants.%return.patt.264] // CHECK:STDOUT: } { // CHECK:STDOUT: %A.ref.loc10: type = name_ref A, file.%A.decl [concrete = constants.%A] // CHECK:STDOUT: %ptr: type = ptr_type %A.ref.loc10 [concrete = constants.%ptr.d43] @@ -628,11 +675,16 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @ExplicitAndAlsoDeduced(%T.loc6_28.2: type) { +// CHECK:STDOUT: %T.patt.loc6_28.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_28.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc6_28.1: type = symbolic_binding T, 0 [symbolic = %T.loc6_28.1 (constants.%T)] // CHECK:STDOUT: %pattern_type.loc6_38: type = pattern_type %T.loc6_28.1 [symbolic = %pattern_type.loc6_38 (constants.%pattern_type.51d)] +// CHECK:STDOUT: %x.param_patt.loc6_38.2: @ExplicitAndAlsoDeduced.%pattern_type.loc6_38 (%pattern_type.51d) = value_param_pattern [symbolic = %x.param_patt.loc6_38.2 (constants.%x.param_patt.91d)] +// CHECK:STDOUT: %x.patt.loc6_38.2: @ExplicitAndAlsoDeduced.%pattern_type.loc6_38 (%pattern_type.51d) = at_binding_pattern x, %x.param_patt.loc6_38.2 [symbolic = %x.patt.loc6_38.2 (constants.%x.patt.800)] // CHECK:STDOUT: %ptr.loc6_47.1: type = ptr_type %T.loc6_28.1 [symbolic = %ptr.loc6_47.1 (constants.%ptr.e8f)] // CHECK:STDOUT: %.loc6_47.1: Core.Form = init_form %ptr.loc6_47.1 [symbolic = %.loc6_47.1 (constants.%.cb6)] // CHECK:STDOUT: %pattern_type.loc6_47: type = pattern_type %ptr.loc6_47.1 [symbolic = %pattern_type.loc6_47 (constants.%pattern_type.4f4)] +// CHECK:STDOUT: %return.param_patt.loc6_47.2: @ExplicitAndAlsoDeduced.%pattern_type.loc6_47 (%pattern_type.4f4) = out_param_pattern [symbolic = %return.param_patt.loc6_47.2 (constants.%return.param_patt.27f)] +// CHECK:STDOUT: %return.patt.loc6_43.2: @ExplicitAndAlsoDeduced.%pattern_type.loc6_47 (%pattern_type.4f4) = return_slot_pattern %return.param_patt.loc6_47.2, %ptr.loc6_47.1 [symbolic = %return.patt.loc6_43.2 (constants.%return.patt.d67)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc6_38: = require_complete_type %T.loc6_28.1 [symbolic = %require_complete.loc6_38 (constants.%require_complete.944)] @@ -674,11 +726,16 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ExplicitAndAlsoDeduced(constants.%T) { +// CHECK:STDOUT: %T.patt.loc6_28.2 => constants.%T.patt // CHECK:STDOUT: %T.loc6_28.1 => constants.%T // CHECK:STDOUT: %pattern_type.loc6_38 => constants.%pattern_type.51d +// CHECK:STDOUT: %x.param_patt.loc6_38.2 => constants.%x.param_patt.91d +// CHECK:STDOUT: %x.patt.loc6_38.2 => constants.%x.patt.800 // CHECK:STDOUT: %ptr.loc6_47.1 => constants.%ptr.e8f // CHECK:STDOUT: %.loc6_47.1 => constants.%.cb6 // CHECK:STDOUT: %pattern_type.loc6_47 => constants.%pattern_type.4f4 +// CHECK:STDOUT: %return.param_patt.loc6_47.2 => constants.%return.param_patt.27f +// CHECK:STDOUT: %return.patt.loc6_43.2 => constants.%return.patt.d67 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc6_38 => constants.%require_complete.944 @@ -687,11 +744,16 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ExplicitAndAlsoDeduced(constants.%A) { +// CHECK:STDOUT: %T.patt.loc6_28.2 => constants.%T.patt // CHECK:STDOUT: %T.loc6_28.1 => constants.%A // CHECK:STDOUT: %pattern_type.loc6_38 => constants.%pattern_type.9ef +// CHECK:STDOUT: %x.param_patt.loc6_38.2 => constants.%x.param_patt.4c3 +// CHECK:STDOUT: %x.patt.loc6_38.2 => constants.%x.patt.313 // CHECK:STDOUT: %ptr.loc6_47.1 => constants.%ptr.d43 // CHECK:STDOUT: %.loc6_47.1 => constants.%.1a4 // CHECK:STDOUT: %pattern_type.loc6_47 => constants.%pattern_type.8a5 +// CHECK:STDOUT: %return.param_patt.loc6_47.2 => constants.%return.param_patt.7a0 +// CHECK:STDOUT: %return.patt.loc6_43.2 => constants.%return.patt.264 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc6_38 => constants.%complete_type.357 @@ -705,11 +767,16 @@ fn F() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %x.param_patt.91d: %pattern_type.51d = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.800: %pattern_type.51d = at_binding_pattern x, %x.param_patt.91d [symbolic] // CHECK:STDOUT: %ptr.e8f: type = ptr_type %T [symbolic] // CHECK:STDOUT: %.cb6: Core.Form = init_form %ptr.e8f [symbolic] // CHECK:STDOUT: %pattern_type.4f4: type = pattern_type %ptr.e8f [symbolic] +// CHECK:STDOUT: %return.param_patt.27f: %pattern_type.4f4 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.d67: %pattern_type.4f4 = return_slot_pattern %return.param_patt.27f, %ptr.e8f [symbolic] // CHECK:STDOUT: %ImplicitGenericParam.type: type = fn_type @ImplicitGenericParam [concrete] // CHECK:STDOUT: %ImplicitGenericParam: %ImplicitGenericParam.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.944: = require_complete_type %T [symbolic] @@ -720,13 +787,19 @@ fn F() { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete] // CHECK:STDOUT: %ptr.d08: type = ptr_type %i32 [concrete] // CHECK:STDOUT: %.952: Core.Form = init_form %ptr.d08 [concrete] // CHECK:STDOUT: %pattern_type.f00: type = pattern_type %ptr.d08 [concrete] +// CHECK:STDOUT: %return.param_patt.7dd: %pattern_type.f00 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.dbe: %pattern_type.f00 = return_slot_pattern %return.param_patt.7dd, %ptr.d08 [concrete] // CHECK:STDOUT: %CallImplicitGenericParam.type: type = fn_type @CallImplicitGenericParam [concrete] // CHECK:STDOUT: %CallImplicitGenericParam: %CallImplicitGenericParam.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %complete_type.f8a: = complete_type_witness %i32.builtin [concrete] +// CHECK:STDOUT: %x.param_patt.cee: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.fbe: %pattern_type.6b6 = at_binding_pattern x, %x.param_patt.cee [concrete] // CHECK:STDOUT: %ImplicitGenericParam.specific_fn.ae4: = specific_function %ImplicitGenericParam, @ImplicitGenericParam(%i32) [concrete] // CHECK:STDOUT: %complete_type.07f: = complete_type_witness %ptr.d08 [concrete] // CHECK:STDOUT: } @@ -748,11 +821,11 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %ImplicitGenericParam.decl: %ImplicitGenericParam.type = fn_decl @ImplicitGenericParam [concrete = constants.%ImplicitGenericParam] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %x.param_patt: @ImplicitGenericParam.%pattern_type.loc4_36 (%pattern_type.51d) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @ImplicitGenericParam.%pattern_type.loc4_36 (%pattern_type.51d) = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @ImplicitGenericParam.%pattern_type.loc4_45 (%pattern_type.4f4) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @ImplicitGenericParam.%pattern_type.loc4_45 (%pattern_type.4f4) = return_slot_pattern %return.param_patt, %ptr.loc4_45.2 [concrete] +// CHECK:STDOUT: %T.patt.loc4_26.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_26.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.param_patt.loc4_36.1: @ImplicitGenericParam.%pattern_type.loc4_36 (%pattern_type.51d) = value_param_pattern [symbolic = %x.param_patt.loc4_36.2 (constants.%x.param_patt.91d)] +// CHECK:STDOUT: %x.patt.loc4_36.1: @ImplicitGenericParam.%pattern_type.loc4_36 (%pattern_type.51d) = at_binding_pattern x, %x.param_patt.loc4_36.1 [symbolic = %x.patt.loc4_36.2 (constants.%x.patt.800)] +// CHECK:STDOUT: %return.param_patt.loc4_45.1: @ImplicitGenericParam.%pattern_type.loc4_45 (%pattern_type.4f4) = out_param_pattern [symbolic = %return.param_patt.loc4_45.2 (constants.%return.param_patt.27f)] +// CHECK:STDOUT: %return.patt.loc4_41.1: @ImplicitGenericParam.%pattern_type.loc4_45 (%pattern_type.4f4) = return_slot_pattern %return.param_patt.loc4_45.1, %ptr.loc4_45.2 [symbolic = %return.patt.loc4_41.2 (constants.%return.patt.d67)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc4_44: type = name_ref T, %T.loc4_26.2 [symbolic = %T.loc4_26.1 (constants.%T)] // CHECK:STDOUT: %ptr.loc4_45.2: type = ptr_type %T.ref.loc4_44 [symbolic = %ptr.loc4_45.1 (constants.%ptr.e8f)] @@ -769,10 +842,10 @@ fn F() { // CHECK:STDOUT: %return: ref @ImplicitGenericParam.%ptr.loc4_45.1 (%ptr.e8f) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallImplicitGenericParam.decl: %CallImplicitGenericParam.type = fn_decl @CallImplicitGenericParam [concrete = constants.%CallImplicitGenericParam] { -// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.f00 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.f00 = return_slot_pattern %return.param_patt, %ptr [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%n.param_patt] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete = constants.%n.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.f00 = out_param_pattern [concrete = constants.%return.param_patt.7dd] +// CHECK:STDOUT: %return.patt: %pattern_type.f00 = return_slot_pattern %return.param_patt, %ptr [concrete = constants.%return.patt.dbe] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc6_40: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %ptr: type = ptr_type %i32.loc6_40 [concrete = constants.%ptr.d08] @@ -786,11 +859,16 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @ImplicitGenericParam(%T.loc4_26.2: type) { +// CHECK:STDOUT: %T.patt.loc4_26.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_26.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_26.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_26.1 (constants.%T)] // CHECK:STDOUT: %pattern_type.loc4_36: type = pattern_type %T.loc4_26.1 [symbolic = %pattern_type.loc4_36 (constants.%pattern_type.51d)] +// CHECK:STDOUT: %x.param_patt.loc4_36.2: @ImplicitGenericParam.%pattern_type.loc4_36 (%pattern_type.51d) = value_param_pattern [symbolic = %x.param_patt.loc4_36.2 (constants.%x.param_patt.91d)] +// CHECK:STDOUT: %x.patt.loc4_36.2: @ImplicitGenericParam.%pattern_type.loc4_36 (%pattern_type.51d) = at_binding_pattern x, %x.param_patt.loc4_36.2 [symbolic = %x.patt.loc4_36.2 (constants.%x.patt.800)] // CHECK:STDOUT: %ptr.loc4_45.1: type = ptr_type %T.loc4_26.1 [symbolic = %ptr.loc4_45.1 (constants.%ptr.e8f)] // CHECK:STDOUT: %.loc4_45.1: Core.Form = init_form %ptr.loc4_45.1 [symbolic = %.loc4_45.1 (constants.%.cb6)] // CHECK:STDOUT: %pattern_type.loc4_45: type = pattern_type %ptr.loc4_45.1 [symbolic = %pattern_type.loc4_45 (constants.%pattern_type.4f4)] +// CHECK:STDOUT: %return.param_patt.loc4_45.2: @ImplicitGenericParam.%pattern_type.loc4_45 (%pattern_type.4f4) = out_param_pattern [symbolic = %return.param_patt.loc4_45.2 (constants.%return.param_patt.27f)] +// CHECK:STDOUT: %return.patt.loc4_41.2: @ImplicitGenericParam.%pattern_type.loc4_45 (%pattern_type.4f4) = return_slot_pattern %return.param_patt.loc4_45.2, %ptr.loc4_45.1 [symbolic = %return.patt.loc4_41.2 (constants.%return.patt.d67)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc4_36: = require_complete_type %T.loc4_26.1 [symbolic = %require_complete.loc4_36 (constants.%require_complete.944)] @@ -817,11 +895,16 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitGenericParam(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_26.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_26.1 => constants.%T // CHECK:STDOUT: %pattern_type.loc4_36 => constants.%pattern_type.51d +// CHECK:STDOUT: %x.param_patt.loc4_36.2 => constants.%x.param_patt.91d +// CHECK:STDOUT: %x.patt.loc4_36.2 => constants.%x.patt.800 // CHECK:STDOUT: %ptr.loc4_45.1 => constants.%ptr.e8f // CHECK:STDOUT: %.loc4_45.1 => constants.%.cb6 // CHECK:STDOUT: %pattern_type.loc4_45 => constants.%pattern_type.4f4 +// CHECK:STDOUT: %return.param_patt.loc4_45.2 => constants.%return.param_patt.27f +// CHECK:STDOUT: %return.patt.loc4_41.2 => constants.%return.patt.d67 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc4_36 => constants.%require_complete.944 @@ -830,11 +913,16 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitGenericParam(constants.%i32) { +// CHECK:STDOUT: %T.patt.loc4_26.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_26.1 => constants.%i32 // CHECK:STDOUT: %pattern_type.loc4_36 => constants.%pattern_type.6b6 +// CHECK:STDOUT: %x.param_patt.loc4_36.2 => constants.%x.param_patt.cee +// CHECK:STDOUT: %x.patt.loc4_36.2 => constants.%x.patt.fbe // CHECK:STDOUT: %ptr.loc4_45.1 => constants.%ptr.d08 // CHECK:STDOUT: %.loc4_45.1 => constants.%.952 // CHECK:STDOUT: %pattern_type.loc4_45 => constants.%pattern_type.f00 +// CHECK:STDOUT: %return.param_patt.loc4_45.2 => constants.%return.param_patt.7dd +// CHECK:STDOUT: %return.patt.loc4_41.2 => constants.%return.patt.dbe // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc4_36 => constants.%complete_type.f8a @@ -848,6 +936,7 @@ fn F() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %Int.type: type = generic_class_type @Int [concrete] @@ -858,6 +947,8 @@ fn F() { // CHECK:STDOUT: %tuple.43e: %tuple.type.24b = tuple_value (%T, %i32) [symbolic] // CHECK:STDOUT: %tuple.type.2d8: type = tuple_type (%T, %i32) [symbolic] // CHECK:STDOUT: %pattern_type.1d4: type = pattern_type %tuple.type.2d8 [symbolic] +// CHECK:STDOUT: %x.param_patt.442: %pattern_type.1d4 = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.253: %pattern_type.1d4 = at_binding_pattern x, %x.param_patt.442 [symbolic] // CHECK:STDOUT: %TupleParam.type: type = fn_type @TupleParam [concrete] // CHECK:STDOUT: %TupleParam: %TupleParam.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.738: = require_complete_type %tuple.type.2d8 [symbolic] @@ -870,6 +961,8 @@ fn F() { // CHECK:STDOUT: %tuple.55f: %tuple.type.24b = tuple_value (Core.IntLiteral, %i32) [concrete] // CHECK:STDOUT: %tuple.type.94b: type = tuple_type (Core.IntLiteral, %i32) [concrete] // CHECK:STDOUT: %pattern_type.106: type = pattern_type %tuple.type.94b [concrete] +// CHECK:STDOUT: %x.param_patt.d6e: %pattern_type.106 = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.e11: %pattern_type.106 = at_binding_pattern x, %x.param_patt.d6e [concrete] // CHECK:STDOUT: %TupleParam.specific_fn: = specific_function %TupleParam, @TupleParam(Core.IntLiteral) [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -912,9 +1005,9 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %TupleParam.decl: %TupleParam.type = fn_decl @TupleParam [concrete = constants.%TupleParam] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %x.param_patt: @TupleParam.%pattern_type (%pattern_type.1d4) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @TupleParam.%pattern_type (%pattern_type.1d4) = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %T.patt.loc4_16.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_16.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.param_patt.loc4_33.1: @TupleParam.%pattern_type (%pattern_type.1d4) = value_param_pattern [symbolic = %x.param_patt.loc4_33.2 (constants.%x.param_patt.442)] +// CHECK:STDOUT: %x.patt.loc4_33.1: @TupleParam.%pattern_type (%pattern_type.1d4) = at_binding_pattern x, %x.param_patt.loc4_33.1 [symbolic = %x.patt.loc4_33.2 (constants.%x.patt.253)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_19.1: type = splice_block %.loc4_19.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -934,10 +1027,13 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @TupleParam(%T.loc4_16.2: type) { +// CHECK:STDOUT: %T.patt.loc4_16.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_16.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_16.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_16.1 (constants.%T)] // CHECK:STDOUT: %tuple: %tuple.type.24b = tuple_value (%T.loc4_16.1, constants.%i32) [symbolic = %tuple (constants.%tuple.43e)] // CHECK:STDOUT: %tuple.type: type = tuple_type (%T.loc4_16.1, constants.%i32) [symbolic = %tuple.type (constants.%tuple.type.2d8)] // CHECK:STDOUT: %pattern_type: type = pattern_type %tuple.type [symbolic = %pattern_type (constants.%pattern_type.1d4)] +// CHECK:STDOUT: %x.param_patt.loc4_33.2: @TupleParam.%pattern_type (%pattern_type.1d4) = value_param_pattern [symbolic = %x.param_patt.loc4_33.2 (constants.%x.param_patt.442)] +// CHECK:STDOUT: %x.patt.loc4_33.2: @TupleParam.%pattern_type (%pattern_type.1d4) = at_binding_pattern x, %x.param_patt.loc4_33.2 [symbolic = %x.patt.loc4_33.2 (constants.%x.patt.253)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %tuple.type [symbolic = %require_complete (constants.%require_complete.738)] @@ -969,17 +1065,23 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TupleParam(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_16.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_16.1 => constants.%T // CHECK:STDOUT: %tuple => constants.%tuple.43e // CHECK:STDOUT: %tuple.type => constants.%tuple.type.2d8 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.1d4 +// CHECK:STDOUT: %x.param_patt.loc4_33.2 => constants.%x.param_patt.442 +// CHECK:STDOUT: %x.patt.loc4_33.2 => constants.%x.patt.253 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TupleParam(Core.IntLiteral) { +// CHECK:STDOUT: %T.patt.loc4_16.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_16.1 => Core.IntLiteral // CHECK:STDOUT: %tuple => constants.%tuple.55f // CHECK:STDOUT: %tuple.type => constants.%tuple.type.94b // CHECK:STDOUT: %pattern_type => constants.%pattern_type.106 +// CHECK:STDOUT: %x.param_patt.loc4_33.2 => constants.%x.param_patt.d6e +// CHECK:STDOUT: %x.patt.loc4_33.2 => constants.%x.patt.e11 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.fc7 @@ -991,6 +1093,7 @@ fn F() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %Int.type: type = generic_class_type @Int [concrete] @@ -999,6 +1102,8 @@ fn F() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %struct_type.a.b.3aa: type = struct_type {.a: %T, .b: %i32} [symbolic] // CHECK:STDOUT: %pattern_type.538: type = pattern_type %struct_type.a.b.3aa [symbolic] +// CHECK:STDOUT: %x.param_patt.196: %pattern_type.538 = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.a9e: %pattern_type.538 = at_binding_pattern x, %x.param_patt.196 [symbolic] // CHECK:STDOUT: %StructParam.type: type = fn_type @StructParam [concrete] // CHECK:STDOUT: %StructParam: %StructParam.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.5e1: = require_complete_type %struct_type.a.b.3aa [symbolic] @@ -1010,6 +1115,8 @@ fn F() { // CHECK:STDOUT: %struct.4aa: %struct_type.a.b.cfd = struct_value (%int_1, %int_2.ecc) [concrete] // CHECK:STDOUT: %struct_type.a.b.f91: type = struct_type {.a: Core.IntLiteral, .b: %i32} [concrete] // CHECK:STDOUT: %pattern_type.8a1: type = pattern_type %struct_type.a.b.f91 [concrete] +// CHECK:STDOUT: %x.param_patt.7a8: %pattern_type.8a1 = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.a81: %pattern_type.8a1 = at_binding_pattern x, %x.param_patt.7a8 [concrete] // CHECK:STDOUT: %StructParam.specific_fn: = specific_function %StructParam, @StructParam(Core.IntLiteral) [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -1052,9 +1159,9 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %StructParam.decl: %StructParam.type = fn_decl @StructParam [concrete = constants.%StructParam] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %x.param_patt: @StructParam.%pattern_type (%pattern_type.538) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @StructParam.%pattern_type (%pattern_type.538) = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %T.patt.loc4_17.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_17.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.param_patt.loc4_34.1: @StructParam.%pattern_type (%pattern_type.538) = value_param_pattern [symbolic = %x.param_patt.loc4_34.2 (constants.%x.param_patt.196)] +// CHECK:STDOUT: %x.patt.loc4_34.1: @StructParam.%pattern_type (%pattern_type.538) = at_binding_pattern x, %x.param_patt.loc4_34.1 [symbolic = %x.patt.loc4_34.2 (constants.%x.patt.a9e)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_20.1: type = splice_block %.loc4_20.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1073,9 +1180,12 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @StructParam(%T.loc4_17.2: type) { +// CHECK:STDOUT: %T.patt.loc4_17.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_17.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_17.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_17.1 (constants.%T)] // CHECK:STDOUT: %struct_type.a.b.loc4_51.1: type = struct_type {.a: @StructParam.%T.loc4_17.1 (%T), .b: %i32} [symbolic = %struct_type.a.b.loc4_51.1 (constants.%struct_type.a.b.3aa)] // CHECK:STDOUT: %pattern_type: type = pattern_type %struct_type.a.b.loc4_51.1 [symbolic = %pattern_type (constants.%pattern_type.538)] +// CHECK:STDOUT: %x.param_patt.loc4_34.2: @StructParam.%pattern_type (%pattern_type.538) = value_param_pattern [symbolic = %x.param_patt.loc4_34.2 (constants.%x.param_patt.196)] +// CHECK:STDOUT: %x.patt.loc4_34.2: @StructParam.%pattern_type (%pattern_type.538) = at_binding_pattern x, %x.param_patt.loc4_34.2 [symbolic = %x.patt.loc4_34.2 (constants.%x.patt.a9e)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %struct_type.a.b.loc4_51.1 [symbolic = %require_complete (constants.%require_complete.5e1)] @@ -1107,15 +1217,21 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @StructParam(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_17.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_17.1 => constants.%T // CHECK:STDOUT: %struct_type.a.b.loc4_51.1 => constants.%struct_type.a.b.3aa // CHECK:STDOUT: %pattern_type => constants.%pattern_type.538 +// CHECK:STDOUT: %x.param_patt.loc4_34.2 => constants.%x.param_patt.196 +// CHECK:STDOUT: %x.patt.loc4_34.2 => constants.%x.patt.a9e // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @StructParam(Core.IntLiteral) { +// CHECK:STDOUT: %T.patt.loc4_17.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_17.1 => Core.IntLiteral // CHECK:STDOUT: %struct_type.a.b.loc4_51.1 => constants.%struct_type.a.b.f91 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.8a1 +// CHECK:STDOUT: %x.param_patt.loc4_34.2 => constants.%x.param_patt.7a8 +// CHECK:STDOUT: %x.patt.loc4_34.2 => constants.%x.patt.a81 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.aa8 @@ -1127,6 +1243,7 @@ fn F() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %Int.type: type = generic_class_type @Int [concrete] @@ -1134,6 +1251,8 @@ fn F() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %struct_type.c.d.e: type = struct_type {.c: %T, .d: %i32, .e: %i32} [symbolic] // CHECK:STDOUT: %pattern_type.3dc: type = pattern_type %struct_type.c.d.e [symbolic] +// CHECK:STDOUT: %x.param_patt: %pattern_type.3dc = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt: %pattern_type.3dc = at_binding_pattern x, %x.param_patt [symbolic] // CHECK:STDOUT: %BigStructParam.type: type = fn_type @BigStructParam [concrete] // CHECK:STDOUT: %BigStructParam: %BigStructParam.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.11c: = require_complete_type %struct_type.c.d.e [symbolic] @@ -1162,9 +1281,9 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %BigStructParam.decl: %BigStructParam.type = fn_decl @BigStructParam [concrete = constants.%BigStructParam] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %x.param_patt: @BigStructParam.%pattern_type (%pattern_type.3dc) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @BigStructParam.%pattern_type (%pattern_type.3dc) = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %T.patt.loc4_20.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_20.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.param_patt.loc4_37.1: @BigStructParam.%pattern_type (%pattern_type.3dc) = value_param_pattern [symbolic = %x.param_patt.loc4_37.2 (constants.%x.param_patt)] +// CHECK:STDOUT: %x.patt.loc4_37.1: @BigStructParam.%pattern_type (%pattern_type.3dc) = at_binding_pattern x, %x.param_patt.loc4_37.1 [symbolic = %x.patt.loc4_37.2 (constants.%x.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_23.1: type = splice_block %.loc4_23.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1184,9 +1303,12 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @BigStructParam(%T.loc4_20.2: type) { +// CHECK:STDOUT: %T.patt.loc4_20.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_20.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_20.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_20.1 (constants.%T)] // CHECK:STDOUT: %struct_type.c.d.e.loc4_63.1: type = struct_type {.c: @BigStructParam.%T.loc4_20.1 (%T), .d: %i32, .e: %i32} [symbolic = %struct_type.c.d.e.loc4_63.1 (constants.%struct_type.c.d.e)] // CHECK:STDOUT: %pattern_type: type = pattern_type %struct_type.c.d.e.loc4_63.1 [symbolic = %pattern_type (constants.%pattern_type.3dc)] +// CHECK:STDOUT: %x.param_patt.loc4_37.2: @BigStructParam.%pattern_type (%pattern_type.3dc) = value_param_pattern [symbolic = %x.param_patt.loc4_37.2 (constants.%x.param_patt)] +// CHECK:STDOUT: %x.patt.loc4_37.2: @BigStructParam.%pattern_type (%pattern_type.3dc) = at_binding_pattern x, %x.param_patt.loc4_37.2 [symbolic = %x.patt.loc4_37.2 (constants.%x.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %struct_type.c.d.e.loc4_63.1 [symbolic = %require_complete (constants.%require_complete.11c)] @@ -1207,9 +1329,12 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @BigStructParam(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_20.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_20.1 => constants.%T // CHECK:STDOUT: %struct_type.c.d.e.loc4_63.1 => constants.%struct_type.c.d.e // CHECK:STDOUT: %pattern_type => constants.%pattern_type.3dc +// CHECK:STDOUT: %x.param_patt.loc4_37.2 => constants.%x.param_patt +// CHECK:STDOUT: %x.patt.loc4_37.2 => constants.%x.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_deduce_smaller_struct.carbon @@ -1218,6 +1343,7 @@ fn F() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %Int.type: type = generic_class_type @Int [concrete] @@ -1225,6 +1351,8 @@ fn F() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %struct_type.f.g: type = struct_type {.f: %T, .g: %i32} [symbolic] // CHECK:STDOUT: %pattern_type.128: type = pattern_type %struct_type.f.g [symbolic] +// CHECK:STDOUT: %x.param_patt: %pattern_type.128 = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt: %pattern_type.128 = at_binding_pattern x, %x.param_patt [symbolic] // CHECK:STDOUT: %SmallStructParam.type: type = fn_type @SmallStructParam [concrete] // CHECK:STDOUT: %SmallStructParam: %SmallStructParam.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.e94: = require_complete_type %struct_type.f.g [symbolic] @@ -1254,9 +1382,9 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %SmallStructParam.decl: %SmallStructParam.type = fn_decl @SmallStructParam [concrete = constants.%SmallStructParam] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %x.param_patt: @SmallStructParam.%pattern_type (%pattern_type.128) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @SmallStructParam.%pattern_type (%pattern_type.128) = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %T.patt.loc4_22.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_22.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.param_patt.loc4_39.1: @SmallStructParam.%pattern_type (%pattern_type.128) = value_param_pattern [symbolic = %x.param_patt.loc4_39.2 (constants.%x.param_patt)] +// CHECK:STDOUT: %x.patt.loc4_39.1: @SmallStructParam.%pattern_type (%pattern_type.128) = at_binding_pattern x, %x.param_patt.loc4_39.1 [symbolic = %x.patt.loc4_39.2 (constants.%x.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_25.1: type = splice_block %.loc4_25.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1275,9 +1403,12 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @SmallStructParam(%T.loc4_22.2: type) { +// CHECK:STDOUT: %T.patt.loc4_22.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_22.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_22.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_22.1 (constants.%T)] // CHECK:STDOUT: %struct_type.f.g.loc4_56.1: type = struct_type {.f: @SmallStructParam.%T.loc4_22.1 (%T), .g: %i32} [symbolic = %struct_type.f.g.loc4_56.1 (constants.%struct_type.f.g)] // CHECK:STDOUT: %pattern_type: type = pattern_type %struct_type.f.g.loc4_56.1 [symbolic = %pattern_type (constants.%pattern_type.128)] +// CHECK:STDOUT: %x.param_patt.loc4_39.2: @SmallStructParam.%pattern_type (%pattern_type.128) = value_param_pattern [symbolic = %x.param_patt.loc4_39.2 (constants.%x.param_patt)] +// CHECK:STDOUT: %x.patt.loc4_39.2: @SmallStructParam.%pattern_type (%pattern_type.128) = at_binding_pattern x, %x.param_patt.loc4_39.2 [symbolic = %x.patt.loc4_39.2 (constants.%x.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %struct_type.f.g.loc4_56.1 [symbolic = %require_complete (constants.%require_complete.e94)] @@ -1299,9 +1430,12 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @SmallStructParam(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_22.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_22.1 => constants.%T // CHECK:STDOUT: %struct_type.f.g.loc4_56.1 => constants.%struct_type.f.g // CHECK:STDOUT: %pattern_type => constants.%pattern_type.128 +// CHECK:STDOUT: %x.param_patt.loc4_39.2 => constants.%x.param_patt +// CHECK:STDOUT: %x.patt.loc4_39.2 => constants.%x.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_deduce_struct_wrong_name.carbon @@ -1310,6 +1444,7 @@ fn F() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %Int.type: type = generic_class_type @Int [concrete] @@ -1317,6 +1452,8 @@ fn F() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %struct_type.i.different: type = struct_type {.i: %T, .different: %i32} [symbolic] // CHECK:STDOUT: %pattern_type.1b7: type = pattern_type %struct_type.i.different [symbolic] +// CHECK:STDOUT: %x.param_patt: %pattern_type.1b7 = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt: %pattern_type.1b7 = at_binding_pattern x, %x.param_patt [symbolic] // CHECK:STDOUT: %WrongNameStructParam.type: type = fn_type @WrongNameStructParam [concrete] // CHECK:STDOUT: %WrongNameStructParam: %WrongNameStructParam.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.59f: = require_complete_type %struct_type.i.different [symbolic] @@ -1345,9 +1482,9 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %WrongNameStructParam.decl: %WrongNameStructParam.type = fn_decl @WrongNameStructParam [concrete = constants.%WrongNameStructParam] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %x.param_patt: @WrongNameStructParam.%pattern_type (%pattern_type.1b7) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @WrongNameStructParam.%pattern_type (%pattern_type.1b7) = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %T.patt.loc4_26.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_26.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.param_patt.loc4_43.1: @WrongNameStructParam.%pattern_type (%pattern_type.1b7) = value_param_pattern [symbolic = %x.param_patt.loc4_43.2 (constants.%x.param_patt)] +// CHECK:STDOUT: %x.patt.loc4_43.1: @WrongNameStructParam.%pattern_type (%pattern_type.1b7) = at_binding_pattern x, %x.param_patt.loc4_43.1 [symbolic = %x.patt.loc4_43.2 (constants.%x.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_29.1: type = splice_block %.loc4_29.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1366,9 +1503,12 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @WrongNameStructParam(%T.loc4_26.2: type) { +// CHECK:STDOUT: %T.patt.loc4_26.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_26.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_26.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_26.1 (constants.%T)] // CHECK:STDOUT: %struct_type.i.different.loc4_68.1: type = struct_type {.i: @WrongNameStructParam.%T.loc4_26.1 (%T), .different: %i32} [symbolic = %struct_type.i.different.loc4_68.1 (constants.%struct_type.i.different)] // CHECK:STDOUT: %pattern_type: type = pattern_type %struct_type.i.different.loc4_68.1 [symbolic = %pattern_type (constants.%pattern_type.1b7)] +// CHECK:STDOUT: %x.param_patt.loc4_43.2: @WrongNameStructParam.%pattern_type (%pattern_type.1b7) = value_param_pattern [symbolic = %x.param_patt.loc4_43.2 (constants.%x.param_patt)] +// CHECK:STDOUT: %x.patt.loc4_43.2: @WrongNameStructParam.%pattern_type (%pattern_type.1b7) = at_binding_pattern x, %x.param_patt.loc4_43.2 [symbolic = %x.patt.loc4_43.2 (constants.%x.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %struct_type.i.different.loc4_68.1 [symbolic = %require_complete (constants.%require_complete.59f)] @@ -1389,9 +1529,12 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @WrongNameStructParam(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_26.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_26.1 => constants.%T // CHECK:STDOUT: %struct_type.i.different.loc4_68.1 => constants.%struct_type.i.different // CHECK:STDOUT: %pattern_type => constants.%pattern_type.1b7 +// CHECK:STDOUT: %x.param_patt.loc4_43.2 => constants.%x.param_patt +// CHECK:STDOUT: %x.patt.loc4_43.2 => constants.%x.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_todo_deduce_struct_wrong_order.carbon @@ -1400,6 +1543,7 @@ fn F() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %Int.type: type = generic_class_type @Int [concrete] @@ -1407,6 +1551,8 @@ fn F() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %struct_type.first.second: type = struct_type {.first: %T, .second: %i32} [symbolic] // CHECK:STDOUT: %pattern_type.f83: type = pattern_type %struct_type.first.second [symbolic] +// CHECK:STDOUT: %x.param_patt: %pattern_type.f83 = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt: %pattern_type.f83 = at_binding_pattern x, %x.param_patt [symbolic] // CHECK:STDOUT: %WrongOrderStructParam.type: type = fn_type @WrongOrderStructParam [concrete] // CHECK:STDOUT: %WrongOrderStructParam: %WrongOrderStructParam.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.ff4: = require_complete_type %struct_type.first.second [symbolic] @@ -1435,9 +1581,9 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %WrongOrderStructParam.decl: %WrongOrderStructParam.type = fn_decl @WrongOrderStructParam [concrete = constants.%WrongOrderStructParam] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %x.param_patt: @WrongOrderStructParam.%pattern_type (%pattern_type.f83) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @WrongOrderStructParam.%pattern_type (%pattern_type.f83) = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %T.patt.loc4_27.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_27.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.param_patt.loc4_44.1: @WrongOrderStructParam.%pattern_type (%pattern_type.f83) = value_param_pattern [symbolic = %x.param_patt.loc4_44.2 (constants.%x.param_patt)] +// CHECK:STDOUT: %x.patt.loc4_44.1: @WrongOrderStructParam.%pattern_type (%pattern_type.f83) = at_binding_pattern x, %x.param_patt.loc4_44.1 [symbolic = %x.patt.loc4_44.2 (constants.%x.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_30.1: type = splice_block %.loc4_30.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1456,9 +1602,12 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @WrongOrderStructParam(%T.loc4_27.2: type) { +// CHECK:STDOUT: %T.patt.loc4_27.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_27.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_27.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_27.1 (constants.%T)] // CHECK:STDOUT: %struct_type.first.second.loc4_70.1: type = struct_type {.first: @WrongOrderStructParam.%T.loc4_27.1 (%T), .second: %i32} [symbolic = %struct_type.first.second.loc4_70.1 (constants.%struct_type.first.second)] // CHECK:STDOUT: %pattern_type: type = pattern_type %struct_type.first.second.loc4_70.1 [symbolic = %pattern_type (constants.%pattern_type.f83)] +// CHECK:STDOUT: %x.param_patt.loc4_44.2: @WrongOrderStructParam.%pattern_type (%pattern_type.f83) = value_param_pattern [symbolic = %x.param_patt.loc4_44.2 (constants.%x.param_patt)] +// CHECK:STDOUT: %x.patt.loc4_44.2: @WrongOrderStructParam.%pattern_type (%pattern_type.f83) = at_binding_pattern x, %x.param_patt.loc4_44.2 [symbolic = %x.patt.loc4_44.2 (constants.%x.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %struct_type.first.second.loc4_70.1 [symbolic = %require_complete (constants.%require_complete.ff4)] @@ -1479,9 +1628,12 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @WrongOrderStructParam(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_27.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_27.1 => constants.%T // CHECK:STDOUT: %struct_type.first.second.loc4_70.1 => constants.%struct_type.first.second // CHECK:STDOUT: %pattern_type => constants.%pattern_type.f83 +// CHECK:STDOUT: %x.param_patt.loc4_44.2 => constants.%x.param_patt +// CHECK:STDOUT: %x.patt.loc4_44.2 => constants.%x.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_deduce_incomplete.carbon @@ -1490,11 +1642,17 @@ fn F() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %U: type = symbolic_binding U, 1 [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %x.param_patt: %pattern_type.51d = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt: %pattern_type.51d = at_binding_pattern x, %x.param_patt [symbolic] // CHECK:STDOUT: %.822: Core.Form = init_form %U [symbolic] // CHECK:STDOUT: %pattern_type.946: type = pattern_type %U [symbolic] +// CHECK:STDOUT: %return.param_patt: %pattern_type.946 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt: %pattern_type.946 = return_slot_pattern %return.param_patt, %U [symbolic] // CHECK:STDOUT: %ImplicitNotDeducible.type: type = fn_type @ImplicitNotDeducible [concrete] // CHECK:STDOUT: %ImplicitNotDeducible: %ImplicitNotDeducible.type = struct_value () [concrete] // CHECK:STDOUT: %CallImplicitNotDeducible.type: type = fn_type @CallImplicitNotDeducible [concrete] @@ -1517,12 +1675,12 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %ImplicitNotDeducible.decl: %ImplicitNotDeducible.type = fn_decl @ImplicitNotDeducible [concrete = constants.%ImplicitNotDeducible] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [concrete] -// CHECK:STDOUT: %x.param_patt: @ImplicitNotDeducible.%pattern_type.loc6_46 (%pattern_type.51d) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @ImplicitNotDeducible.%pattern_type.loc6_46 (%pattern_type.51d) = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @ImplicitNotDeducible.%pattern_type.loc6_54 (%pattern_type.946) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @ImplicitNotDeducible.%pattern_type.loc6_54 (%pattern_type.946) = return_slot_pattern %return.param_patt, %U.ref [concrete] +// CHECK:STDOUT: %T.patt.loc6_26.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_26.2 (constants.%T.patt)] +// CHECK:STDOUT: %U.patt.loc6_36.1: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc6_36.2 (constants.%U.patt)] +// CHECK:STDOUT: %x.param_patt.loc6_46.1: @ImplicitNotDeducible.%pattern_type.loc6_46 (%pattern_type.51d) = value_param_pattern [symbolic = %x.param_patt.loc6_46.2 (constants.%x.param_patt)] +// CHECK:STDOUT: %x.patt.loc6_46.1: @ImplicitNotDeducible.%pattern_type.loc6_46 (%pattern_type.51d) = at_binding_pattern x, %x.param_patt.loc6_46.1 [symbolic = %x.patt.loc6_46.2 (constants.%x.patt)] +// CHECK:STDOUT: %return.param_patt.loc6_54.1: @ImplicitNotDeducible.%pattern_type.loc6_54 (%pattern_type.946) = out_param_pattern [symbolic = %return.param_patt.loc6_54.2 (constants.%return.param_patt)] +// CHECK:STDOUT: %return.patt.loc6_51.1: @ImplicitNotDeducible.%pattern_type.loc6_54 (%pattern_type.946) = return_slot_pattern %return.param_patt.loc6_54.1, %U.ref [symbolic = %return.patt.loc6_51.2 (constants.%return.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %U.ref: type = name_ref U, %U.loc6_36.2 [symbolic = %U.loc6_36.1 (constants.%U)] // CHECK:STDOUT: %.loc6_54.2: Core.Form = init_form %U.ref [symbolic = %.loc6_54.1 (constants.%.822)] @@ -1546,11 +1704,17 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @ImplicitNotDeducible(%T.loc6_26.2: type, %U.loc6_36.2: type) { +// CHECK:STDOUT: %T.patt.loc6_26.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_26.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc6_26.1: type = symbolic_binding T, 0 [symbolic = %T.loc6_26.1 (constants.%T)] +// CHECK:STDOUT: %U.patt.loc6_36.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc6_36.2 (constants.%U.patt)] // CHECK:STDOUT: %U.loc6_36.1: type = symbolic_binding U, 1 [symbolic = %U.loc6_36.1 (constants.%U)] // CHECK:STDOUT: %pattern_type.loc6_46: type = pattern_type %T.loc6_26.1 [symbolic = %pattern_type.loc6_46 (constants.%pattern_type.51d)] +// CHECK:STDOUT: %x.param_patt.loc6_46.2: @ImplicitNotDeducible.%pattern_type.loc6_46 (%pattern_type.51d) = value_param_pattern [symbolic = %x.param_patt.loc6_46.2 (constants.%x.param_patt)] +// CHECK:STDOUT: %x.patt.loc6_46.2: @ImplicitNotDeducible.%pattern_type.loc6_46 (%pattern_type.51d) = at_binding_pattern x, %x.param_patt.loc6_46.2 [symbolic = %x.patt.loc6_46.2 (constants.%x.patt)] // CHECK:STDOUT: %.loc6_54.1: Core.Form = init_form %U.loc6_36.1 [symbolic = %.loc6_54.1 (constants.%.822)] // CHECK:STDOUT: %pattern_type.loc6_54: type = pattern_type %U.loc6_36.1 [symbolic = %pattern_type.loc6_54 (constants.%pattern_type.946)] +// CHECK:STDOUT: %return.param_patt.loc6_54.2: @ImplicitNotDeducible.%pattern_type.loc6_54 (%pattern_type.946) = out_param_pattern [symbolic = %return.param_patt.loc6_54.2 (constants.%return.param_patt)] +// CHECK:STDOUT: %return.patt.loc6_51.2: @ImplicitNotDeducible.%pattern_type.loc6_54 (%pattern_type.946) = return_slot_pattern %return.param_patt.loc6_54.2, %U.loc6_36.1 [symbolic = %return.patt.loc6_51.2 (constants.%return.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%x.param: @ImplicitNotDeducible.%T.loc6_26.1 (%T)) -> out %return.param: @ImplicitNotDeducible.%U.loc6_36.1 (%U); // CHECK:STDOUT: } @@ -1563,11 +1727,17 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitNotDeducible(constants.%T, constants.%U) { +// CHECK:STDOUT: %T.patt.loc6_26.2 => constants.%T.patt // CHECK:STDOUT: %T.loc6_26.1 => constants.%T +// CHECK:STDOUT: %U.patt.loc6_36.2 => constants.%U.patt // CHECK:STDOUT: %U.loc6_36.1 => constants.%U // CHECK:STDOUT: %pattern_type.loc6_46 => constants.%pattern_type.51d +// CHECK:STDOUT: %x.param_patt.loc6_46.2 => constants.%x.param_patt +// CHECK:STDOUT: %x.patt.loc6_46.2 => constants.%x.patt // CHECK:STDOUT: %.loc6_54.1 => constants.%.822 // CHECK:STDOUT: %pattern_type.loc6_54 => constants.%pattern_type.946 +// CHECK:STDOUT: %return.param_patt.loc6_54.2 => constants.%return.param_patt +// CHECK:STDOUT: %return.patt.loc6_51.2 => constants.%return.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_deduce_inconsistent.carbon @@ -1576,9 +1746,16 @@ fn F() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %x.param_patt: %pattern_type.51d = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt: %pattern_type.51d = at_binding_pattern x, %x.param_patt [symbolic] +// CHECK:STDOUT: %y.param_patt: %pattern_type.51d = value_param_pattern [symbolic] +// CHECK:STDOUT: %y.patt: %pattern_type.51d = at_binding_pattern y, %y.param_patt [symbolic] // CHECK:STDOUT: %.184: Core.Form = init_form %T [symbolic] +// CHECK:STDOUT: %return.param_patt: %pattern_type.51d = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt: %pattern_type.51d = return_slot_pattern %return.param_patt, %T [symbolic] // CHECK:STDOUT: %ImplicitNotDeducible.type: type = fn_type @ImplicitNotDeducible [concrete] // CHECK:STDOUT: %ImplicitNotDeducible: %ImplicitNotDeducible.type = struct_value () [concrete] // CHECK:STDOUT: %CallImplicitNotDeducible.type: type = fn_type @CallImplicitNotDeducible [concrete] @@ -1604,13 +1781,13 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %ImplicitNotDeducible.decl: %ImplicitNotDeducible.type = fn_decl @ImplicitNotDeducible [concrete = constants.%ImplicitNotDeducible] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %x.param_patt: @ImplicitNotDeducible.%pattern_type (%pattern_type.51d) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @ImplicitNotDeducible.%pattern_type (%pattern_type.51d) = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %y.param_patt: @ImplicitNotDeducible.%pattern_type (%pattern_type.51d) = value_param_pattern [concrete] -// CHECK:STDOUT: %y.patt: @ImplicitNotDeducible.%pattern_type (%pattern_type.51d) = at_binding_pattern y, %y.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @ImplicitNotDeducible.%pattern_type (%pattern_type.51d) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @ImplicitNotDeducible.%pattern_type (%pattern_type.51d) = return_slot_pattern %return.param_patt, %T.ref.loc4_50 [concrete] +// CHECK:STDOUT: %T.patt.loc4_26.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_26.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.param_patt.loc4_36.1: @ImplicitNotDeducible.%pattern_type (%pattern_type.51d) = value_param_pattern [symbolic = %x.param_patt.loc4_36.2 (constants.%x.param_patt)] +// CHECK:STDOUT: %x.patt.loc4_36.1: @ImplicitNotDeducible.%pattern_type (%pattern_type.51d) = at_binding_pattern x, %x.param_patt.loc4_36.1 [symbolic = %x.patt.loc4_36.2 (constants.%x.patt)] +// CHECK:STDOUT: %y.param_patt.loc4_42.1: @ImplicitNotDeducible.%pattern_type (%pattern_type.51d) = value_param_pattern [symbolic = %y.param_patt.loc4_42.2 (constants.%y.param_patt)] +// CHECK:STDOUT: %y.patt.loc4_42.1: @ImplicitNotDeducible.%pattern_type (%pattern_type.51d) = at_binding_pattern y, %y.param_patt.loc4_42.1 [symbolic = %y.patt.loc4_42.2 (constants.%y.patt)] +// CHECK:STDOUT: %return.param_patt.loc4_50.1: @ImplicitNotDeducible.%pattern_type (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt.loc4_50.2 (constants.%return.param_patt)] +// CHECK:STDOUT: %return.patt.loc4_47.1: @ImplicitNotDeducible.%pattern_type (%pattern_type.51d) = return_slot_pattern %return.param_patt.loc4_50.1, %T.ref.loc4_50 [symbolic = %return.patt.loc4_47.2 (constants.%return.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc4_50: type = name_ref T, %T.loc4_26.2 [symbolic = %T.loc4_26.1 (constants.%T)] // CHECK:STDOUT: %.loc4_50.2: Core.Form = init_form %T.ref.loc4_50 [symbolic = %.loc4_50.1 (constants.%.184)] @@ -1632,9 +1809,16 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @ImplicitNotDeducible(%T.loc4_26.2: type) { +// CHECK:STDOUT: %T.patt.loc4_26.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_26.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_26.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_26.1 (constants.%T)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc4_26.1 [symbolic = %pattern_type (constants.%pattern_type.51d)] +// CHECK:STDOUT: %x.param_patt.loc4_36.2: @ImplicitNotDeducible.%pattern_type (%pattern_type.51d) = value_param_pattern [symbolic = %x.param_patt.loc4_36.2 (constants.%x.param_patt)] +// CHECK:STDOUT: %x.patt.loc4_36.2: @ImplicitNotDeducible.%pattern_type (%pattern_type.51d) = at_binding_pattern x, %x.param_patt.loc4_36.2 [symbolic = %x.patt.loc4_36.2 (constants.%x.patt)] +// CHECK:STDOUT: %y.param_patt.loc4_42.2: @ImplicitNotDeducible.%pattern_type (%pattern_type.51d) = value_param_pattern [symbolic = %y.param_patt.loc4_42.2 (constants.%y.param_patt)] +// CHECK:STDOUT: %y.patt.loc4_42.2: @ImplicitNotDeducible.%pattern_type (%pattern_type.51d) = at_binding_pattern y, %y.param_patt.loc4_42.2 [symbolic = %y.patt.loc4_42.2 (constants.%y.patt)] // CHECK:STDOUT: %.loc4_50.1: Core.Form = init_form %T.loc4_26.1 [symbolic = %.loc4_50.1 (constants.%.184)] +// CHECK:STDOUT: %return.param_patt.loc4_50.2: @ImplicitNotDeducible.%pattern_type (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt.loc4_50.2 (constants.%return.param_patt)] +// CHECK:STDOUT: %return.patt.loc4_47.2: @ImplicitNotDeducible.%pattern_type (%pattern_type.51d) = return_slot_pattern %return.param_patt.loc4_50.2, %T.loc4_26.1 [symbolic = %return.patt.loc4_47.2 (constants.%return.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%x.param: @ImplicitNotDeducible.%T.loc4_26.1 (%T), %y.param: @ImplicitNotDeducible.%T.loc4_26.1 (%T)) -> out %return.param: @ImplicitNotDeducible.%T.loc4_26.1 (%T); // CHECK:STDOUT: } @@ -1649,9 +1833,16 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitNotDeducible(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_26.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_26.1 => constants.%T // CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d +// CHECK:STDOUT: %x.param_patt.loc4_36.2 => constants.%x.param_patt +// CHECK:STDOUT: %x.patt.loc4_36.2 => constants.%x.patt +// CHECK:STDOUT: %y.param_patt.loc4_42.2 => constants.%y.param_patt +// CHECK:STDOUT: %y.patt.loc4_42.2 => constants.%y.patt // CHECK:STDOUT: %.loc4_50.1 => constants.%.184 +// CHECK:STDOUT: %return.param_patt.loc4_50.2 => constants.%return.param_patt +// CHECK:STDOUT: %return.patt.loc4_47.2 => constants.%return.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- deduce_nested_generic_class.carbon @@ -1667,6 +1858,7 @@ fn F() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %E.patt: %pattern_type.98f = symbolic_binding_pattern E, 0 [symbolic] // CHECK:STDOUT: %E: type = symbolic_binding E, 0 [symbolic] // CHECK:STDOUT: %DD.type: type = generic_class_type @DD [concrete] // CHECK:STDOUT: %DD.generic: %DD.type = struct_value () [concrete] @@ -1674,6 +1866,7 @@ fn F() { // CHECK:STDOUT: %Z.impl_witness.7fb: = impl_witness @DD.as.Z.impl.%Z.impl_witness_table, @DD.as.Z.impl(%E) [symbolic] // CHECK:STDOUT: %Z.facet.419: %Z.type = facet_value %DD.699, (%Z.impl_witness.7fb) [symbolic] // CHECK:STDOUT: %pattern_type.5d7: type = pattern_type %Z.type [concrete] +// CHECK:STDOUT: %D.patt: %pattern_type.5d7 = symbolic_binding_pattern D, 0 [symbolic] // CHECK:STDOUT: %D: %Z.type = symbolic_binding D, 0 [symbolic] // CHECK:STDOUT: %CC.type: type = generic_class_type @CC [concrete] // CHECK:STDOUT: %CC.generic: %CC.type = struct_value () [concrete] @@ -1719,7 +1912,7 @@ fn F() { // CHECK:STDOUT: %Z.ref: type = name_ref Z, file.%Z.decl [concrete = constants.%Z.type] // CHECK:STDOUT: } // CHECK:STDOUT: %DD.decl: %DD.type = class_decl @DD [concrete = constants.%DD.generic] { -// CHECK:STDOUT: %E.patt: %pattern_type.98f = symbolic_binding_pattern E, 0 [concrete] +// CHECK:STDOUT: %E.patt.loc8_11.1: %pattern_type.98f = symbolic_binding_pattern E, 0 [symbolic = %E.patt.loc8_11.2 (constants.%E.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8_14.1: type = splice_block %.loc8_14.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1728,7 +1921,7 @@ fn F() { // CHECK:STDOUT: %E.loc8_11.2: type = symbolic_binding E, 0 [symbolic = %E.loc8_11.1 (constants.%E)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @DD.as.Z.impl [concrete] { -// CHECK:STDOUT: %E.patt: %pattern_type.98f = symbolic_binding_pattern E, 0 [concrete] +// CHECK:STDOUT: %E.patt.loc9_15.1: %pattern_type.98f = symbolic_binding_pattern E, 0 [symbolic = %E.patt.loc9_15.2 (constants.%E.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %DD.ref: %DD.type = name_ref DD, file.%DD.decl [concrete = constants.%DD.generic] // CHECK:STDOUT: %E.ref: type = name_ref E, %E.loc9_15.1 [symbolic = %E.loc9_15.2 (constants.%E)] @@ -1741,7 +1934,7 @@ fn F() { // CHECK:STDOUT: %E.loc9_15.1: type = symbolic_binding E, 0 [symbolic = %E.loc9_15.2 (constants.%E)] // CHECK:STDOUT: } // CHECK:STDOUT: %CC.decl: %CC.type = class_decl @CC [concrete = constants.%CC.generic] { -// CHECK:STDOUT: %D.patt: %pattern_type.5d7 = symbolic_binding_pattern D, 0 [concrete] +// CHECK:STDOUT: %D.patt.loc11_11.1: %pattern_type.5d7 = symbolic_binding_pattern D, 0 [symbolic = %D.patt.loc11_11.2 (constants.%D.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc11: type = splice_block %Z.ref [concrete = constants.%Z.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1750,7 +1943,7 @@ fn F() { // CHECK:STDOUT: %D.loc11_11.2: %Z.type = symbolic_binding D, 0 [symbolic = %D.loc11_11.1 (constants.%D)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @CC.as.Z.impl [concrete] { -// CHECK:STDOUT: %E.patt: %pattern_type.98f = symbolic_binding_pattern E, 0 [concrete] +// CHECK:STDOUT: %E.patt.loc12_15.1: %pattern_type.98f = symbolic_binding_pattern E, 0 [symbolic = %E.patt.loc12_15.2 (constants.%E.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %CC.ref: %CC.type = name_ref CC, file.%CC.decl [concrete = constants.%CC.generic] // CHECK:STDOUT: %DD.ref: %DD.type = name_ref DD, file.%DD.decl [concrete = constants.%DD.generic] @@ -1790,6 +1983,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @DD.as.Z.impl(%E.loc9_15.1: type) { +// CHECK:STDOUT: %E.patt.loc9_15.2: %pattern_type.98f = symbolic_binding_pattern E, 0 [symbolic = %E.patt.loc9_15.2 (constants.%E.patt)] // CHECK:STDOUT: %E.loc9_15.2: type = symbolic_binding E, 0 [symbolic = %E.loc9_15.2 (constants.%E)] // CHECK:STDOUT: %DD.loc9_28.2: type = class_type @DD, @DD(%E.loc9_15.2) [symbolic = %DD.loc9_28.2 (constants.%DD.699)] // CHECK:STDOUT: %Z.impl_witness.loc9_35.2: = impl_witness %Z.impl_witness_table, @DD.as.Z.impl(%E.loc9_15.2) [symbolic = %Z.impl_witness.loc9_35.2 (constants.%Z.impl_witness.7fb)] @@ -1807,6 +2001,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @CC.as.Z.impl(%E.loc12_15.1: type) { +// CHECK:STDOUT: %E.patt.loc12_15.2: %pattern_type.98f = symbolic_binding_pattern E, 0 [symbolic = %E.patt.loc12_15.2 (constants.%E.patt)] // CHECK:STDOUT: %E.loc12_15.2: type = symbolic_binding E, 0 [symbolic = %E.loc12_15.2 (constants.%E)] // CHECK:STDOUT: %DD.loc12_31.2: type = class_type @DD, @DD(%E.loc12_15.2) [symbolic = %DD.loc12_31.2 (constants.%DD.699)] // CHECK:STDOUT: %.loc12_32.2: require_specific_def_type = require_specific_def @DD.as.Z.impl(%E.loc12_15.2) [symbolic = %.loc12_32.2 (constants.%.8d3)] @@ -1836,6 +2031,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @DD(%E.loc8_11.2: type) { +// CHECK:STDOUT: %E.patt.loc8_11.2: %pattern_type.98f = symbolic_binding_pattern E, 0 [symbolic = %E.patt.loc8_11.2 (constants.%E.patt)] // CHECK:STDOUT: %E.loc8_11.1: type = symbolic_binding E, 0 [symbolic = %E.loc8_11.1 (constants.%E)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1850,6 +2046,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @CC(%D.loc11_11.2: %Z.type) { +// CHECK:STDOUT: %D.patt.loc11_11.2: %pattern_type.5d7 = symbolic_binding_pattern D, 0 [symbolic = %D.patt.loc11_11.2 (constants.%D.patt)] // CHECK:STDOUT: %D.loc11_11.1: %Z.type = symbolic_binding D, 0 [symbolic = %D.loc11_11.1 (constants.%D)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1887,10 +2084,12 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @DD(constants.%E) { +// CHECK:STDOUT: %E.patt.loc8_11.2 => constants.%E.patt // CHECK:STDOUT: %E.loc8_11.1 => constants.%E // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @DD.as.Z.impl(constants.%E) { +// CHECK:STDOUT: %E.patt.loc9_15.2 => constants.%E.patt // CHECK:STDOUT: %E.loc9_15.2 => constants.%E // CHECK:STDOUT: %DD.loc9_28.2 => constants.%DD.699 // CHECK:STDOUT: %Z.impl_witness.loc9_35.2 => constants.%Z.impl_witness.7fb @@ -1903,14 +2102,17 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @CC(constants.%D) { +// CHECK:STDOUT: %D.patt.loc11_11.2 => constants.%D.patt // CHECK:STDOUT: %D.loc11_11.1 => constants.%D // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @CC(constants.%Z.facet.0b6) { +// CHECK:STDOUT: %D.patt.loc11_11.2 => constants.%D.patt // CHECK:STDOUT: %D.loc11_11.1 => constants.%Z.facet.0b6 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @CC.as.Z.impl(constants.%E) { +// CHECK:STDOUT: %E.patt.loc12_15.2 => constants.%E.patt // CHECK:STDOUT: %E.loc12_15.2 => constants.%E // CHECK:STDOUT: %DD.loc12_31.2 => constants.%DD.699 // CHECK:STDOUT: %.loc12_32.2 => constants.%.8d3 @@ -1925,10 +2127,12 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @DD(constants.%EE) { +// CHECK:STDOUT: %E.patt.loc8_11.2 => constants.%E.patt // CHECK:STDOUT: %E.loc8_11.1 => constants.%EE // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @DD.as.Z.impl(constants.%EE) { +// CHECK:STDOUT: %E.patt.loc9_15.2 => constants.%E.patt // CHECK:STDOUT: %E.loc9_15.2 => constants.%EE // CHECK:STDOUT: %DD.loc9_28.2 => constants.%DD.cfc // CHECK:STDOUT: %Z.impl_witness.loc9_35.2 => constants.%Z.impl_witness.7dd @@ -1937,10 +2141,12 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @CC(constants.%Z.facet.da0) { +// CHECK:STDOUT: %D.patt.loc11_11.2 => constants.%D.patt // CHECK:STDOUT: %D.loc11_11.1 => constants.%Z.facet.da0 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @CC.as.Z.impl(constants.%EE) { +// CHECK:STDOUT: %E.patt.loc12_15.2 => constants.%E.patt // CHECK:STDOUT: %E.loc12_15.2 => constants.%EE // CHECK:STDOUT: %DD.loc12_31.2 => constants.%DD.cfc // CHECK:STDOUT: %.loc12_32.2 => constants.%.061 diff --git a/toolchain/check/testdata/function/generic/deduce_nested_facet_value.carbon b/toolchain/check/testdata/function/generic/deduce_nested_facet_value.carbon index 8b9f48912622..1805c4cbd49b 100644 --- a/toolchain/check/testdata/function/generic/deduce_nested_facet_value.carbon +++ b/toolchain/check/testdata/function/generic/deduce_nested_facet_value.carbon @@ -54,6 +54,7 @@ fn F() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.cfb: type = pattern_type %Y.type [concrete] +// CHECK:STDOUT: %D.patt: %pattern_type.cfb = symbolic_binding_pattern D, 0 [symbolic] // CHECK:STDOUT: %D: %Y.type = symbolic_binding D, 0 [symbolic] // CHECK:STDOUT: %CC.type: type = generic_class_type @CC [concrete] // CHECK:STDOUT: %CC.generic: %CC.type = struct_value () [concrete] @@ -72,6 +73,7 @@ fn F() { // CHECK:STDOUT: %type.as.BitAndWith.impl.Op.bound: = bound_method %Y.type, %type.as.BitAndWith.impl.Op [concrete] // CHECK:STDOUT: %facet_type: type = facet_type <@Y & @W> [concrete] // CHECK:STDOUT: %pattern_type.bd4: type = pattern_type %facet_type [concrete] +// CHECK:STDOUT: %E.patt: %pattern_type.bd4 = symbolic_binding_pattern E, 0 [symbolic] // CHECK:STDOUT: %E: %facet_type = symbolic_binding E, 0 [symbolic] // CHECK:STDOUT: %E.as_type: type = facet_access_type %E [symbolic] // CHECK:STDOUT: %Y.lookup_impl_witness: = lookup_impl_witness %E, @Y [symbolic] @@ -121,7 +123,7 @@ fn F() { // CHECK:STDOUT: %W.ref: type = name_ref W, file.%W.decl [concrete = constants.%W.type] // CHECK:STDOUT: } // CHECK:STDOUT: %CC.decl: %CC.type = class_decl @CC [concrete = constants.%CC.generic] { -// CHECK:STDOUT: %D.patt: %pattern_type.cfb = symbolic_binding_pattern D, 0 [concrete] +// CHECK:STDOUT: %D.patt.loc12_11.1: %pattern_type.cfb = symbolic_binding_pattern D, 0 [symbolic = %D.patt.loc12_11.2 (constants.%D.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc12: type = splice_block %Y.ref [concrete = constants.%Y.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -131,7 +133,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %Z.decl: type = interface_decl @Z [concrete = constants.%Z.type] {} {} // CHECK:STDOUT: impl_decl @CC.as.Z.impl [concrete] { -// CHECK:STDOUT: %E.patt: %pattern_type.bd4 = symbolic_binding_pattern E, 0 [concrete] +// CHECK:STDOUT: %E.patt.loc19_15.1: %pattern_type.bd4 = symbolic_binding_pattern E, 0 [symbolic = %E.patt.loc19_15.2 (constants.%E.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %CC.ref: %CC.type = name_ref CC, file.%CC.decl [concrete = constants.%CC.generic] // CHECK:STDOUT: %E.ref: %facet_type = name_ref E, %E.loc19_15.1 [symbolic = %E.loc19_15.2 (constants.%E)] @@ -207,6 +209,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @CC.as.Z.impl(%E.loc19_15.1: %facet_type) { +// CHECK:STDOUT: %E.patt.loc19_15.2: %pattern_type.bd4 = symbolic_binding_pattern E, 0 [symbolic = %E.patt.loc19_15.2 (constants.%E.patt)] // CHECK:STDOUT: %E.loc19_15.2: %facet_type = symbolic_binding E, 0 [symbolic = %E.loc19_15.2 (constants.%E)] // CHECK:STDOUT: %E.as_type.loc19_29.2: type = facet_access_type %E.loc19_15.2 [symbolic = %E.as_type.loc19_29.2 (constants.%E.as_type)] // CHECK:STDOUT: %Y.lookup_impl_witness: = lookup_impl_witness %E.loc19_15.2, @Y [symbolic = %Y.lookup_impl_witness (constants.%Y.lookup_impl_witness)] @@ -235,6 +238,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @CC(%D.loc12_11.2: %Y.type) { +// CHECK:STDOUT: %D.patt.loc12_11.2: %pattern_type.cfb = symbolic_binding_pattern D, 0 [symbolic = %D.patt.loc12_11.2 (constants.%D.patt)] // CHECK:STDOUT: %D.loc12_11.1: %Y.type = symbolic_binding D, 0 [symbolic = %D.loc12_11.1 (constants.%D)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -278,6 +282,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @CC(constants.%D) { +// CHECK:STDOUT: %D.patt.loc12_11.2 => constants.%D.patt // CHECK:STDOUT: %D.loc12_11.1 => constants.%D // CHECK:STDOUT: } // CHECK:STDOUT: @@ -286,10 +291,12 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @CC(constants.%Y.facet.18f) { +// CHECK:STDOUT: %D.patt.loc12_11.2 => constants.%D.patt // CHECK:STDOUT: %D.loc12_11.1 => constants.%Y.facet.18f // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @CC.as.Z.impl(constants.%E) { +// CHECK:STDOUT: %E.patt.loc19_15.2 => constants.%E.patt // CHECK:STDOUT: %E.loc19_15.2 => constants.%E // CHECK:STDOUT: %E.as_type.loc19_29.2 => constants.%E.as_type // CHECK:STDOUT: %Y.lookup_impl_witness => constants.%Y.lookup_impl_witness @@ -303,10 +310,12 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @CC(constants.%Y.facet.2a4) { +// CHECK:STDOUT: %D.patt.loc12_11.2 => constants.%D.patt // CHECK:STDOUT: %D.loc12_11.1 => constants.%Y.facet.2a4 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @CC.as.Z.impl(constants.%facet_value) { +// CHECK:STDOUT: %E.patt.loc19_15.2 => constants.%E.patt // CHECK:STDOUT: %E.loc19_15.2 => constants.%facet_value // CHECK:STDOUT: %E.as_type.loc19_29.2 => constants.%DD // CHECK:STDOUT: %Y.lookup_impl_witness => constants.%Y.impl_witness diff --git a/toolchain/check/testdata/function/generic/fail_deduce_imported_function.carbon b/toolchain/check/testdata/function/generic/fail_deduce_imported_function.carbon index 31eb935e7b63..c0dde18bd013 100644 --- a/toolchain/check/testdata/function/generic/fail_deduce_imported_function.carbon +++ b/toolchain/check/testdata/function/generic/fail_deduce_imported_function.carbon @@ -53,10 +53,13 @@ fn B() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.1d1: type = pattern_type %Z.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.1d1 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: %Z.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %T.as_type} [symbolic] // CHECK:STDOUT: %pattern_type.662: type = pattern_type %struct_type.a [symbolic] +// CHECK:STDOUT: %x.param_patt: %pattern_type.662 = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt: %pattern_type.662 = at_binding_pattern x, %x.param_patt [symbolic] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %struct_type.a [symbolic] @@ -69,9 +72,9 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: %Z.decl: type = interface_decl @Z [concrete = constants.%Z.type] {} {} // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] { -// CHECK:STDOUT: %T.patt: %pattern_type.1d1 = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %x.param_patt: @A.%pattern_type (%pattern_type.662) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @A.%pattern_type (%pattern_type.662) = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %T.patt.loc4_7.1: %pattern_type.1d1 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_7.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.param_patt.loc4_21.1: @A.%pattern_type (%pattern_type.662) = value_param_pattern [symbolic = %x.param_patt.loc4_21.2 (constants.%x.param_patt)] +// CHECK:STDOUT: %x.patt.loc4_21.1: @A.%pattern_type (%pattern_type.662) = at_binding_pattern x, %x.param_patt.loc4_21.1 [symbolic = %x.patt.loc4_21.2 (constants.%x.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_10: type = splice_block %Z.ref [concrete = constants.%Z.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -101,10 +104,13 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @A(%T.loc4_7.2: %Z.type) { +// CHECK:STDOUT: %T.patt.loc4_7.2: %pattern_type.1d1 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_7.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_7.1: %Z.type = symbolic_binding T, 0 [symbolic = %T.loc4_7.1 (constants.%T)] // CHECK:STDOUT: %T.as_type.loc4_28.1: type = facet_access_type %T.loc4_7.1 [symbolic = %T.as_type.loc4_28.1 (constants.%T.as_type)] // CHECK:STDOUT: %struct_type.a.loc4_29.1: type = struct_type {.a: @A.%T.as_type.loc4_28.1 (%T.as_type)} [symbolic = %struct_type.a.loc4_29.1 (constants.%struct_type.a)] // CHECK:STDOUT: %pattern_type: type = pattern_type %struct_type.a.loc4_29.1 [symbolic = %pattern_type (constants.%pattern_type.662)] +// CHECK:STDOUT: %x.param_patt.loc4_21.2: @A.%pattern_type (%pattern_type.662) = value_param_pattern [symbolic = %x.param_patt.loc4_21.2 (constants.%x.param_patt)] +// CHECK:STDOUT: %x.patt.loc4_21.2: @A.%pattern_type (%pattern_type.662) = at_binding_pattern x, %x.param_patt.loc4_21.2 [symbolic = %x.patt.loc4_21.2 (constants.%x.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %struct_type.a.loc4_29.1 [symbolic = %require_complete (constants.%require_complete)] @@ -120,10 +126,13 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_7.1 => constants.%T // CHECK:STDOUT: %T.as_type.loc4_28.1 => constants.%T.as_type // CHECK:STDOUT: %struct_type.a.loc4_29.1 => constants.%struct_type.a // CHECK:STDOUT: %pattern_type => constants.%pattern_type.662 +// CHECK:STDOUT: %x.param_patt.loc4_21.2 => constants.%x.param_patt +// CHECK:STDOUT: %x.patt.loc4_21.2 => constants.%x.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_deduce_imported_function.carbon @@ -134,10 +143,13 @@ fn B() { // CHECK:STDOUT: %Z.type: type = facet_type <@Z> [concrete] // CHECK:STDOUT: %Self: %Z.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %pattern_type.1d1: type = pattern_type %Z.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.1d1 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: %Z.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %T.as_type} [symbolic] // CHECK:STDOUT: %pattern_type.662: type = pattern_type %struct_type.a [symbolic] +// CHECK:STDOUT: %x.param_patt: %pattern_type.662 = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.fcf7db.1: %pattern_type.662 = at_binding_pattern x, %x.param_patt [symbolic] // CHECK:STDOUT: %A.type.9f4: type = fn_type @A.loc4 [concrete] // CHECK:STDOUT: %A.921: %A.type.9f4 = struct_value () [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %struct_type.a [symbolic] @@ -149,6 +161,7 @@ fn B() { // CHECK:STDOUT: %struct: %struct_type.b = struct_value (%empty_struct) [concrete] // CHECK:STDOUT: %A.type.42a: type = fn_type @A.1 [concrete] // CHECK:STDOUT: %A.b9a: %A.type.42a = struct_value () [concrete] +// CHECK:STDOUT: %x.patt.fcf7db.2: %pattern_type.662 = at_binding_pattern x, %x.param_patt [symbolic] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -171,9 +184,9 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: %Lib.import = import Lib // CHECK:STDOUT: %A.decl: %A.type.9f4 = fn_decl @A.loc4 [concrete = constants.%A.921] { -// CHECK:STDOUT: %T.patt: %pattern_type.1d1 = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %x.param_patt: @A.loc4.%pattern_type (%pattern_type.662) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @A.loc4.%pattern_type (%pattern_type.662) = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %T.patt.loc4_7.1: %pattern_type.1d1 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_7.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.param_patt.loc4_25.1: @A.loc4.%pattern_type (%pattern_type.662) = value_param_pattern [symbolic = %x.param_patt.loc4_25.2 (constants.%x.param_patt)] +// CHECK:STDOUT: %x.patt.loc4_25.1: @A.loc4.%pattern_type (%pattern_type.662) = at_binding_pattern x, %x.param_patt.loc4_25.1 [symbolic = %x.patt.loc4_25.2 (constants.%x.patt.fcf7db.1)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_13: type = splice_block %Z.ref [concrete = constants.%Z.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -202,10 +215,13 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @A.loc4(%T.loc4_7.2: %Z.type) { +// CHECK:STDOUT: %T.patt.loc4_7.2: %pattern_type.1d1 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_7.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_7.1: %Z.type = symbolic_binding T, 0 [symbolic = %T.loc4_7.1 (constants.%T)] // CHECK:STDOUT: %T.as_type.loc4_32.1: type = facet_access_type %T.loc4_7.1 [symbolic = %T.as_type.loc4_32.1 (constants.%T.as_type)] // CHECK:STDOUT: %struct_type.a.loc4_33.1: type = struct_type {.a: @A.loc4.%T.as_type.loc4_32.1 (%T.as_type)} [symbolic = %struct_type.a.loc4_33.1 (constants.%struct_type.a)] // CHECK:STDOUT: %pattern_type: type = pattern_type %struct_type.a.loc4_33.1 [symbolic = %pattern_type (constants.%pattern_type.662)] +// CHECK:STDOUT: %x.param_patt.loc4_25.2: @A.loc4.%pattern_type (%pattern_type.662) = value_param_pattern [symbolic = %x.param_patt.loc4_25.2 (constants.%x.param_patt)] +// CHECK:STDOUT: %x.patt.loc4_25.2: @A.loc4.%pattern_type (%pattern_type.662) = at_binding_pattern x, %x.param_patt.loc4_25.2 [symbolic = %x.patt.loc4_25.2 (constants.%x.patt.fcf7db.1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %struct_type.a.loc4_33.1 [symbolic = %require_complete (constants.%require_complete)] @@ -229,10 +245,13 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @A.1(imports.%Lib.import_ref.78f: %Z.type) [from "lib.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type.1d1 = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: %Z.type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic = %T.as_type (constants.%T.as_type)] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: @A.1.%T.as_type (%T.as_type)} [symbolic = %struct_type.a (constants.%struct_type.a)] // CHECK:STDOUT: %pattern_type: type = pattern_type %struct_type.a [symbolic = %pattern_type (constants.%pattern_type.662)] +// CHECK:STDOUT: %x.param_patt: @A.1.%pattern_type (%pattern_type.662) = value_param_pattern [symbolic = %x.param_patt (constants.%x.param_patt)] +// CHECK:STDOUT: %x.patt: @A.1.%pattern_type (%pattern_type.662) = at_binding_pattern x, %x.param_patt [symbolic = %x.patt (constants.%x.patt.fcf7db.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %struct_type.a [symbolic = %require_complete (constants.%require_complete)] @@ -245,16 +264,22 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A.loc4(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_7.1 => constants.%T // CHECK:STDOUT: %T.as_type.loc4_32.1 => constants.%T.as_type // CHECK:STDOUT: %struct_type.a.loc4_33.1 => constants.%struct_type.a // CHECK:STDOUT: %pattern_type => constants.%pattern_type.662 +// CHECK:STDOUT: %x.param_patt.loc4_25.2 => constants.%x.param_patt +// CHECK:STDOUT: %x.patt.loc4_25.2 => constants.%x.patt.fcf7db.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A.1(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %T.as_type => constants.%T.as_type // CHECK:STDOUT: %struct_type.a => constants.%struct_type.a // CHECK:STDOUT: %pattern_type => constants.%pattern_type.662 +// CHECK:STDOUT: %x.param_patt => constants.%x.param_patt +// CHECK:STDOUT: %x.patt => constants.%x.patt.fcf7db.2 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/function/generic/forward_decl.carbon b/toolchain/check/testdata/function/generic/forward_decl.carbon index 0c3b271cf17e..53e31e4232dc 100644 --- a/toolchain/check/testdata/function/generic/forward_decl.carbon +++ b/toolchain/check/testdata/function/generic/forward_decl.carbon @@ -20,6 +20,7 @@ fn F(T:! type); // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] @@ -30,7 +31,7 @@ fn F(T:! type); // CHECK:STDOUT: .F = %F.decl // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc15_7.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_7.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc15_10.1: type = splice_block %.loc15_10.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -41,12 +42,14 @@ fn F(T:! type); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc15_7.2: type) { +// CHECK:STDOUT: %T.patt.loc15_7.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_7.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc15_7.1: type = symbolic_binding T, 0 [symbolic = %T.loc15_7.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T) { +// CHECK:STDOUT: %T.patt.loc15_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc15_7.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/function/generic/import_specific.carbon b/toolchain/check/testdata/function/generic/import_specific.carbon index 5f791e0237bf..b93cb0b4ab42 100644 --- a/toolchain/check/testdata/function/generic/import_specific.carbon +++ b/toolchain/check/testdata/function/generic/import_specific.carbon @@ -44,10 +44,12 @@ fn H() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.d47011.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.67db0b.1: type = symbolic_binding T, 0 [symbolic] // 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.patt.d47011.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.67db0b.2: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] @@ -60,7 +62,7 @@ fn H() { // CHECK:STDOUT: .G = %G.decl // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc4_14.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt.d47011.1)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_17.1: type = splice_block %.loc4_17.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -69,7 +71,7 @@ fn H() { // CHECK:STDOUT: %T.loc4_14.2: type = symbolic_binding T, 0 [symbolic = %T.loc4_14.1 (constants.%T.67db0b.1)] // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc7_7.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_7.2 (constants.%T.patt.d47011.2)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc7_10.1: type = splice_block %.loc7_10.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -80,6 +82,7 @@ fn H() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc4_14.2: type) { +// CHECK:STDOUT: %T.patt.loc4_14.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt.d47011.1)] // CHECK:STDOUT: %T.loc4_14.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_14.1 (constants.%T.67db0b.1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -91,6 +94,7 @@ fn H() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @G(%T.loc7_7.2: type) { +// CHECK:STDOUT: %T.patt.loc7_7.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_7.2 (constants.%T.patt.d47011.2)] // CHECK:STDOUT: %T.loc7_7.1: type = symbolic_binding T, 0 [symbolic = %T.loc7_7.1 (constants.%T.67db0b.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -107,14 +111,17 @@ fn H() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T.67db0b.1) { +// CHECK:STDOUT: %T.patt.loc4_14.2 => constants.%T.patt.d47011.1 // CHECK:STDOUT: %T.loc4_14.1 => constants.%T.67db0b.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%T.67db0b.2) { +// CHECK:STDOUT: %T.patt.loc7_7.2 => constants.%T.patt.d47011.2 // CHECK:STDOUT: %T.loc7_7.1 => constants.%T.67db0b.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T.67db0b.2) { +// CHECK:STDOUT: %T.patt.loc4_14.2 => constants.%T.patt.d47011.1 // CHECK:STDOUT: %T.loc4_14.1 => constants.%T.67db0b.2 // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -132,6 +139,8 @@ fn H() { // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %T.67db0b.1: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %F.specific_fn.e0d: = specific_function %F, @F(%C) [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] @@ -181,6 +190,7 @@ fn H() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(imports.%Main.import_ref.b3bc94.1: type) [from "library.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T.67db0b.1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -189,6 +199,7 @@ fn H() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @G(imports.%Main.import_ref.b3bc94.2: type) [from "library.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T.67db0b.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -198,26 +209,31 @@ fn H() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T.67db0b.1) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T.67db0b.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%C) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%C // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T.67db0b.2) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T.67db0b.2 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%T.67db0b.2) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T.67db0b.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%C) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%C // CHECK:STDOUT: // CHECK:STDOUT: !definition: diff --git a/toolchain/check/testdata/function/generic/indirect_generic_type.carbon b/toolchain/check/testdata/function/generic/indirect_generic_type.carbon index ee3a88d949d4..7da5f659f185 100644 --- a/toolchain/check/testdata/function/generic/indirect_generic_type.carbon +++ b/toolchain/check/testdata/function/generic/indirect_generic_type.carbon @@ -24,12 +24,18 @@ fn F(T:! type, p: T**) -> T* { // CHECK:STDOUT: --- pointer_to_pointer.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.d47: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %ptr.e8f: type = ptr_type %T.67d [symbolic] // CHECK:STDOUT: %ptr.125: type = ptr_type %ptr.e8f [symbolic] // CHECK:STDOUT: %pattern_type.8bb: type = pattern_type %ptr.125 [symbolic] +// CHECK:STDOUT: %p.param_patt: %pattern_type.8bb = value_param_pattern [symbolic] +// CHECK:STDOUT: %p.patt: %pattern_type.8bb = at_binding_pattern p, %p.param_patt [symbolic] // CHECK:STDOUT: %.cb6: Core.Form = init_form %ptr.e8f [symbolic] // CHECK:STDOUT: %pattern_type.4f4: type = pattern_type %ptr.e8f [symbolic] +// CHECK:STDOUT: %return.param_patt.27f: %pattern_type.4f4 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.d67: %pattern_type.4f4 = return_slot_pattern %return.param_patt.27f, %ptr.e8f [symbolic] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %Copy.lookup_impl_witness.1da: = lookup_impl_witness %ptr.e8f, @Copy [symbolic] // CHECK:STDOUT: %.0e9: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.67d) [symbolic] @@ -45,23 +51,25 @@ fn F(T:! type, p: T**) -> T* { // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: -// CHECK:STDOUT: %.loc6_10.4: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.loc4_7.1) [symbolic = %.loc6_10.4 (constants.%.0e9)] +// CHECK:STDOUT: %.loc6_10.5: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.loc4_7.1) [symbolic = %.loc6_10.5 (constants.%.0e9)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %ptr.loc4_20.1, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.1da)] -// CHECK:STDOUT: %Copy.facet.loc6_10.2: %Copy.type = facet_value %ptr.loc4_20.1, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc6_10.2 (constants.%Copy.facet)] -// CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.loc6_10.2) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.884)] -// CHECK:STDOUT: %.loc6_10.5: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %Copy.facet.loc6_10.2 [symbolic = %.loc6_10.5 (constants.%.be5)] -// CHECK:STDOUT: %impl.elem0.loc6_10.2: @F.%.loc6_10.5 (%.be5) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc6_10.2 (constants.%impl.elem0.484)] -// CHECK:STDOUT: %specific_impl_fn.loc6_10.2: = specific_impl_function %impl.elem0.loc6_10.2, @Copy.WithSelf.Op(%Copy.facet.loc6_10.2) [symbolic = %specific_impl_fn.loc6_10.2 (constants.%specific_impl_fn.a76)] +// CHECK:STDOUT: %Copy.facet.loc6_10.3: %Copy.type = facet_value %ptr.loc4_20.1, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc6_10.3 (constants.%Copy.facet)] +// CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.loc6_10.3) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.884)] +// CHECK:STDOUT: %.loc6_10.6: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %Copy.facet.loc6_10.3 [symbolic = %.loc6_10.6 (constants.%.be5)] +// CHECK:STDOUT: %impl.elem0.loc6_10.2: @F.%.loc6_10.6 (%.be5) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc6_10.2 (constants.%impl.elem0.484)] +// CHECK:STDOUT: %specific_impl_fn.loc6_10.2: = specific_impl_function %impl.elem0.loc6_10.2, @Copy.WithSelf.Op(%Copy.facet.loc6_10.3) [symbolic = %specific_impl_fn.loc6_10.2 (constants.%specific_impl_fn.a76)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%p.param: @F.%ptr.loc4_21.1 (%ptr.125)) -> out %return.param: @F.%ptr.loc4_20.1 (%ptr.e8f) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %p.ref: @F.%ptr.loc4_21.1 (%ptr.125) = name_ref p, %p // CHECK:STDOUT: %.loc6_10.1: ref @F.%ptr.loc4_20.1 (%ptr.e8f) = deref %p.ref // CHECK:STDOUT: %.loc6_10.2: @F.%ptr.loc4_20.1 (%ptr.e8f) = acquire_value %.loc6_10.1 -// CHECK:STDOUT: %impl.elem0.loc6_10.1: @F.%.loc6_10.5 (%.be5) = impl_witness_access constants.%Copy.lookup_impl_witness.1da, element0 [symbolic = %impl.elem0.loc6_10.2 (constants.%impl.elem0.484)] +// CHECK:STDOUT: %impl.elem0.loc6_10.1: @F.%.loc6_10.6 (%.be5) = impl_witness_access constants.%Copy.lookup_impl_witness.1da, element0 [symbolic = %impl.elem0.loc6_10.2 (constants.%impl.elem0.484)] // CHECK:STDOUT: %bound_method.loc6_10.1: = bound_method %.loc6_10.2, %impl.elem0.loc6_10.1 -// CHECK:STDOUT: %Copy.facet.loc6_10.1: %Copy.type = facet_value constants.%ptr.e8f, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc6_10.2 (constants.%Copy.facet)] -// CHECK:STDOUT: %.loc6_10.3: %Copy.type = converted constants.%ptr.e8f, %Copy.facet.loc6_10.1 [symbolic = %Copy.facet.loc6_10.2 (constants.%Copy.facet)] +// CHECK:STDOUT: %Copy.facet.loc6_10.1: %Copy.type = facet_value constants.%ptr.e8f, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc6_10.3 (constants.%Copy.facet)] +// CHECK:STDOUT: %.loc6_10.3: %Copy.type = converted constants.%ptr.e8f, %Copy.facet.loc6_10.1 [symbolic = %Copy.facet.loc6_10.3 (constants.%Copy.facet)] +// CHECK:STDOUT: %Copy.facet.loc6_10.2: %Copy.type = facet_value constants.%ptr.e8f, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc6_10.3 (constants.%Copy.facet)] +// CHECK:STDOUT: %.loc6_10.4: %Copy.type = converted constants.%ptr.e8f, %Copy.facet.loc6_10.2 [symbolic = %Copy.facet.loc6_10.3 (constants.%Copy.facet)] // CHECK:STDOUT: %specific_impl_fn.loc6_10.1: = specific_impl_function %impl.elem0.loc6_10.1, @Copy.WithSelf.Op(constants.%Copy.facet) [symbolic = %specific_impl_fn.loc6_10.2 (constants.%specific_impl_fn.a76)] // CHECK:STDOUT: %bound_method.loc6_10.2: = bound_method %.loc6_10.2, %specific_impl_fn.loc6_10.1 // CHECK:STDOUT: %Copy.WithSelf.Op.call: init @F.%ptr.loc4_20.1 (%ptr.e8f) = call %bound_method.loc6_10.2(%.loc6_10.2) @@ -70,11 +78,16 @@ fn F(T:! type, p: T**) -> T* { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T.67d) { +// CHECK:STDOUT: %T.patt.loc4_7.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc4_7.1 => constants.%T.67d // CHECK:STDOUT: %ptr.loc4_20.1 => constants.%ptr.e8f // CHECK:STDOUT: %ptr.loc4_21.1 => constants.%ptr.125 // CHECK:STDOUT: %pattern_type.loc4_17 => constants.%pattern_type.8bb +// CHECK:STDOUT: %p.param_patt.loc4_17.2 => constants.%p.param_patt +// CHECK:STDOUT: %p.patt.loc4_17.2 => constants.%p.patt // CHECK:STDOUT: %.loc4_28.1 => constants.%.cb6 // CHECK:STDOUT: %pattern_type.loc4_28 => constants.%pattern_type.4f4 +// CHECK:STDOUT: %return.param_patt.loc4_28.2 => constants.%return.param_patt.27f +// CHECK:STDOUT: %return.patt.loc4_24.2 => constants.%return.patt.d67 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/function/generic/param_in_type.carbon b/toolchain/check/testdata/function/generic/param_in_type.carbon index b2790f805e96..c7b62da30aac 100644 --- a/toolchain/check/testdata/function/generic/param_in_type.carbon +++ b/toolchain/check/testdata/function/generic/param_in_type.carbon @@ -24,6 +24,7 @@ fn F(N:! i32, a: array(i32, N)*); // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %N.patt.38a: %pattern_type.6b6 = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %N.37f: %i32 = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -44,6 +45,8 @@ fn F(N:! i32, a: array(i32, N)*); // CHECK:STDOUT: %array_type: type = array_type %Int.as.ImplicitAs.impl.Convert.call, %i32 [symbolic] // CHECK:STDOUT: %ptr: type = ptr_type %array_type [symbolic] // CHECK:STDOUT: %pattern_type.5a4: type = pattern_type %ptr [symbolic] +// CHECK:STDOUT: %a.param_patt: %pattern_type.5a4 = value_param_pattern [symbolic] +// CHECK:STDOUT: %a.patt: %pattern_type.5a4 = at_binding_pattern a, %a.param_patt [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -68,9 +71,9 @@ fn F(N:! i32, a: array(i32, N)*); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %N.patt: %pattern_type.6b6 = symbolic_binding_pattern N, 0 [concrete] -// CHECK:STDOUT: %a.param_patt: @F.%pattern_type (%pattern_type.5a4) = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: @F.%pattern_type (%pattern_type.5a4) = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %N.patt.loc15_7.1: %pattern_type.6b6 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc15_7.2 (constants.%N.patt.38a)] +// CHECK:STDOUT: %a.param_patt.loc15_16.1: @F.%pattern_type (%pattern_type.5a4) = value_param_pattern [symbolic = %a.param_patt.loc15_16.2 (constants.%a.param_patt)] +// CHECK:STDOUT: %a.patt.loc15_16.1: @F.%pattern_type (%pattern_type.5a4) = at_binding_pattern a, %a.param_patt.loc15_16.1 [symbolic = %a.patt.loc15_16.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc15_10: type = splice_block %i32.loc15_10 [concrete = constants.%i32] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -96,6 +99,7 @@ fn F(N:! i32, a: array(i32, N)*); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%N.loc15_7.2: %i32) { +// CHECK:STDOUT: %N.patt.loc15_7.2: %pattern_type.6b6 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc15_7.2 (constants.%N.patt.38a)] // CHECK:STDOUT: %N.loc15_7.1: %i32 = symbolic_binding N, 0 [symbolic = %N.loc15_7.1 (constants.%N.37f)] // CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.bound: = bound_method %N.loc15_7.1, constants.%Int.as.ImplicitAs.impl.Convert.69e [symbolic = %Int.as.ImplicitAs.impl.Convert.bound (constants.%Int.as.ImplicitAs.impl.Convert.bound)] // CHECK:STDOUT: %bound_method.loc15_29.1: = bound_method %N.loc15_7.1, constants.%Int.as.ImplicitAs.impl.Convert.specific_fn [symbolic = %bound_method.loc15_29.1 (constants.%bound_method)] @@ -103,11 +107,14 @@ fn F(N:! i32, a: array(i32, N)*); // CHECK:STDOUT: %array_type.loc15_30.1: type = array_type %Int.as.ImplicitAs.impl.Convert.call.loc15_29.1, constants.%i32 [symbolic = %array_type.loc15_30.1 (constants.%array_type)] // CHECK:STDOUT: %ptr.loc15_31.1: type = ptr_type %array_type.loc15_30.1 [symbolic = %ptr.loc15_31.1 (constants.%ptr)] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc15_31.1 [symbolic = %pattern_type (constants.%pattern_type.5a4)] +// CHECK:STDOUT: %a.param_patt.loc15_16.2: @F.%pattern_type (%pattern_type.5a4) = value_param_pattern [symbolic = %a.param_patt.loc15_16.2 (constants.%a.param_patt)] +// CHECK:STDOUT: %a.patt.loc15_16.2: @F.%pattern_type (%pattern_type.5a4) = at_binding_pattern a, %a.param_patt.loc15_16.2 [symbolic = %a.patt.loc15_16.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%a.param: @F.%ptr.loc15_31.1 (%ptr)); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%N.37f) { +// CHECK:STDOUT: %N.patt.loc15_7.2 => constants.%N.patt.38a // CHECK:STDOUT: %N.loc15_7.1 => constants.%N.37f // CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.bound => constants.%Int.as.ImplicitAs.impl.Convert.bound // CHECK:STDOUT: %bound_method.loc15_29.1 => constants.%bound_method @@ -115,5 +122,7 @@ fn F(N:! i32, a: array(i32, N)*); // CHECK:STDOUT: %array_type.loc15_30.1 => constants.%array_type // CHECK:STDOUT: %ptr.loc15_31.1 => constants.%ptr // CHECK:STDOUT: %pattern_type => constants.%pattern_type.5a4 +// CHECK:STDOUT: %a.param_patt.loc15_16.2 => constants.%a.param_patt +// CHECK:STDOUT: %a.patt.loc15_16.2 => constants.%a.patt // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/function/generic/redeclare.carbon b/toolchain/check/testdata/function/generic/redeclare.carbon index f0fa35a43dd9..d6ebf3e3574e 100644 --- a/toolchain/check/testdata/function/generic/redeclare.carbon +++ b/toolchain/check/testdata/function/generic/redeclare.carbon @@ -100,10 +100,13 @@ fn F(U:! type, T:! type) -> U* { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %ptr: type = ptr_type %T [symbolic] // CHECK:STDOUT: %.cb6: Core.Form = init_form %ptr [symbolic] // CHECK:STDOUT: %pattern_type.4f4: type = pattern_type %ptr [symbolic] +// CHECK:STDOUT: %return.param_patt: %pattern_type.4f4 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt: %pattern_type.4f4 = return_slot_pattern %return.param_patt, %ptr [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %ptr [symbolic] @@ -124,9 +127,9 @@ fn F(U:! type, T:! type) -> U* { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl.loc4: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %return.param_patt: @F.%pattern_type (%pattern_type.4f4) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @F.%pattern_type (%pattern_type.4f4) = return_slot_pattern %return.param_patt, %ptr.loc6 [concrete] +// CHECK:STDOUT: %T.patt.loc6: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4 (constants.%T.patt)] +// CHECK:STDOUT: %return.param_patt.loc6: @F.%pattern_type (%pattern_type.4f4) = out_param_pattern [symbolic = %return.param_patt.loc4 (constants.%return.param_patt)] +// CHECK:STDOUT: %return.patt.loc6: @F.%pattern_type (%pattern_type.4f4) = return_slot_pattern %return.param_patt.loc6, %ptr.loc6 [symbolic = %return.patt.loc4 (constants.%return.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc4: type = name_ref T, %T.loc4_7.2 [symbolic = %T.loc4_7.1 (constants.%T)] // CHECK:STDOUT: %ptr.loc4_20.2: type = ptr_type %T.ref.loc4 [symbolic = %ptr.loc4_20.1 (constants.%ptr)] @@ -140,9 +143,9 @@ fn F(U:! type, T:! type) -> U* { // CHECK:STDOUT: %return.loc4: ref @F.%ptr.loc4_20.1 (%ptr) = return_slot %return.param.loc4 // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl.loc6: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %return.param_patt: @F.%pattern_type (%pattern_type.4f4) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @F.%pattern_type (%pattern_type.4f4) = return_slot_pattern %return.param_patt, %ptr.loc6 [concrete] +// CHECK:STDOUT: %T.patt.loc6: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4 (constants.%T.patt)] +// CHECK:STDOUT: %return.param_patt.loc6: @F.%pattern_type (%pattern_type.4f4) = out_param_pattern [symbolic = %return.param_patt.loc4 (constants.%return.param_patt)] +// CHECK:STDOUT: %return.patt.loc6: @F.%pattern_type (%pattern_type.4f4) = return_slot_pattern %return.param_patt.loc6, %ptr.loc6 [symbolic = %return.patt.loc4 (constants.%return.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc6: type = name_ref T, %T.loc6 [symbolic = %T.loc4_7.1 (constants.%T)] // CHECK:STDOUT: %ptr.loc6: type = ptr_type %T.ref.loc6 [symbolic = %ptr.loc4_20.1 (constants.%ptr)] @@ -158,10 +161,13 @@ fn F(U:! type, T:! type) -> U* { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc4_7.2: type) { +// CHECK:STDOUT: %T.patt.loc4: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_7.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_7.1 (constants.%T)] // CHECK:STDOUT: %ptr.loc4_20.1: type = ptr_type %T.loc4_7.1 [symbolic = %ptr.loc4_20.1 (constants.%ptr)] // CHECK:STDOUT: %.loc4_20.1: Core.Form = init_form %ptr.loc4_20.1 [symbolic = %.loc4_20.1 (constants.%.cb6)] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc4_20.1 [symbolic = %pattern_type (constants.%pattern_type.4f4)] +// CHECK:STDOUT: %return.param_patt.loc4: @F.%pattern_type (%pattern_type.4f4) = out_param_pattern [symbolic = %return.param_patt.loc4 (constants.%return.param_patt)] +// CHECK:STDOUT: %return.patt.loc4: @F.%pattern_type (%pattern_type.4f4) = return_slot_pattern %return.param_patt.loc4, %ptr.loc4_20.1 [symbolic = %return.patt.loc4 (constants.%return.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %ptr.loc4_20.1 [symbolic = %require_complete (constants.%require_complete)] @@ -178,10 +184,13 @@ fn F(U:! type, T:! type) -> U* { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4 => constants.%T.patt // CHECK:STDOUT: %T.loc4_7.1 => constants.%T // CHECK:STDOUT: %ptr.loc4_20.1 => constants.%ptr // CHECK:STDOUT: %.loc4_20.1 => constants.%.cb6 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.4f4 +// CHECK:STDOUT: %return.param_patt.loc4 => constants.%return.param_patt +// CHECK:STDOUT: %return.patt.loc4 => constants.%return.patt // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete @@ -194,16 +203,22 @@ fn F(U:! type, T:! type) -> U* { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %U: type = symbolic_binding U, 1 [symbolic] // CHECK:STDOUT: %ptr.e8f: type = ptr_type %T [symbolic] // CHECK:STDOUT: %.cb6: Core.Form = init_form %ptr.e8f [symbolic] // CHECK:STDOUT: %pattern_type.4f4: type = pattern_type %ptr.e8f [symbolic] +// CHECK:STDOUT: %return.param_patt.27f: %pattern_type.4f4 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.d67: %pattern_type.4f4 = return_slot_pattern %return.param_patt.27f, %ptr.e8f [symbolic] // CHECK:STDOUT: %F.type.eb3ec9.1: type = fn_type @F.loc4 [concrete] // CHECK:STDOUT: %F.7088cc.1: %F.type.eb3ec9.1 = struct_value () [concrete] // CHECK:STDOUT: %ptr.18e: type = ptr_type %U [symbolic] // CHECK:STDOUT: %.6d8: Core.Form = init_form %ptr.18e [symbolic] // CHECK:STDOUT: %pattern_type.423: type = pattern_type %ptr.18e [symbolic] +// CHECK:STDOUT: %return.param_patt.534: %pattern_type.423 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.669: %pattern_type.423 = return_slot_pattern %return.param_patt.534, %ptr.18e [symbolic] // CHECK:STDOUT: %F.type.eb3ec9.2: type = fn_type @F.loc13 [concrete] // CHECK:STDOUT: %F.7088cc.2: %F.type.eb3ec9.2 = struct_value () [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %ptr.18e [symbolic] @@ -223,10 +238,10 @@ fn F(U:! type, T:! type) -> U* { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl.loc4: %F.type.eb3ec9.1 = fn_decl @F.loc4 [concrete = constants.%F.7088cc.1] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [concrete] -// CHECK:STDOUT: %return.param_patt: @F.loc4.%pattern_type (%pattern_type.4f4) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @F.loc4.%pattern_type (%pattern_type.4f4) = return_slot_pattern %return.param_patt, %ptr.loc4_30.2 [concrete] +// CHECK:STDOUT: %T.patt.loc4_7.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_7.2 (constants.%T.patt)] +// CHECK:STDOUT: %U.patt.loc4_17.1: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc4_17.2 (constants.%U.patt)] +// CHECK:STDOUT: %return.param_patt.loc4_30.1: @F.loc4.%pattern_type (%pattern_type.4f4) = out_param_pattern [symbolic = %return.param_patt.loc4_30.2 (constants.%return.param_patt.27f)] +// CHECK:STDOUT: %return.patt.loc4_26.1: @F.loc4.%pattern_type (%pattern_type.4f4) = return_slot_pattern %return.param_patt.loc4_30.1, %ptr.loc4_30.2 [symbolic = %return.patt.loc4_26.2 (constants.%return.patt.d67)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc4_7.2 [symbolic = %T.loc4_7.1 (constants.%T)] // CHECK:STDOUT: %ptr.loc4_30.2: type = ptr_type %T.ref [symbolic = %ptr.loc4_30.1 (constants.%ptr.e8f)] @@ -245,10 +260,10 @@ fn F(U:! type, T:! type) -> U* { // CHECK:STDOUT: %return: ref @F.loc4.%ptr.loc4_30.1 (%ptr.e8f) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl.loc13: %F.type.eb3ec9.2 = fn_decl @F.loc13 [concrete = constants.%F.7088cc.2] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [concrete] -// CHECK:STDOUT: %return.param_patt: @F.loc13.%pattern_type (%pattern_type.423) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @F.loc13.%pattern_type (%pattern_type.423) = return_slot_pattern %return.param_patt, %ptr.loc13_30.2 [concrete] +// CHECK:STDOUT: %T.patt.loc13_7.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_7.2 (constants.%T.patt)] +// CHECK:STDOUT: %U.patt.loc13_17.1: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc13_17.2 (constants.%U.patt)] +// CHECK:STDOUT: %return.param_patt.loc13_30.1: @F.loc13.%pattern_type (%pattern_type.423) = out_param_pattern [symbolic = %return.param_patt.loc13_30.2 (constants.%return.param_patt.534)] +// CHECK:STDOUT: %return.patt.loc13_26.1: @F.loc13.%pattern_type (%pattern_type.423) = return_slot_pattern %return.param_patt.loc13_30.1, %ptr.loc13_30.2 [symbolic = %return.patt.loc13_26.2 (constants.%return.patt.669)] // CHECK:STDOUT: } { // CHECK:STDOUT: %U.ref: type = name_ref U, %U.loc13_17.2 [symbolic = %U.loc13_17.1 (constants.%U)] // CHECK:STDOUT: %ptr.loc13_30.2: type = ptr_type %U.ref [symbolic = %ptr.loc13_30.1 (constants.%ptr.18e)] @@ -269,21 +284,29 @@ fn F(U:! type, T:! type) -> U* { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F.loc4(%T.loc4_7.2: type, %U.loc4_17.2: type) { +// CHECK:STDOUT: %T.patt.loc4_7.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_7.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_7.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_7.1 (constants.%T)] +// CHECK:STDOUT: %U.patt.loc4_17.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc4_17.2 (constants.%U.patt)] // CHECK:STDOUT: %U.loc4_17.1: type = symbolic_binding U, 1 [symbolic = %U.loc4_17.1 (constants.%U)] // CHECK:STDOUT: %ptr.loc4_30.1: type = ptr_type %T.loc4_7.1 [symbolic = %ptr.loc4_30.1 (constants.%ptr.e8f)] // CHECK:STDOUT: %.loc4_30.1: Core.Form = init_form %ptr.loc4_30.1 [symbolic = %.loc4_30.1 (constants.%.cb6)] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc4_30.1 [symbolic = %pattern_type (constants.%pattern_type.4f4)] +// CHECK:STDOUT: %return.param_patt.loc4_30.2: @F.loc4.%pattern_type (%pattern_type.4f4) = out_param_pattern [symbolic = %return.param_patt.loc4_30.2 (constants.%return.param_patt.27f)] +// CHECK:STDOUT: %return.patt.loc4_26.2: @F.loc4.%pattern_type (%pattern_type.4f4) = return_slot_pattern %return.param_patt.loc4_30.2, %ptr.loc4_30.1 [symbolic = %return.patt.loc4_26.2 (constants.%return.patt.d67)] // CHECK:STDOUT: // CHECK:STDOUT: fn() -> out %return.param: @F.loc4.%ptr.loc4_30.1 (%ptr.e8f); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F.loc13(%T.loc13_7.2: type, %U.loc13_17.2: type) { +// CHECK:STDOUT: %T.patt.loc13_7.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_7.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc13_7.1: type = symbolic_binding T, 0 [symbolic = %T.loc13_7.1 (constants.%T)] +// CHECK:STDOUT: %U.patt.loc13_17.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc13_17.2 (constants.%U.patt)] // CHECK:STDOUT: %U.loc13_17.1: type = symbolic_binding U, 1 [symbolic = %U.loc13_17.1 (constants.%U)] // CHECK:STDOUT: %ptr.loc13_30.1: type = ptr_type %U.loc13_17.1 [symbolic = %ptr.loc13_30.1 (constants.%ptr.18e)] // CHECK:STDOUT: %.loc13_30.1: Core.Form = init_form %ptr.loc13_30.1 [symbolic = %.loc13_30.1 (constants.%.6d8)] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc13_30.1 [symbolic = %pattern_type (constants.%pattern_type.423)] +// CHECK:STDOUT: %return.param_patt.loc13_30.2: @F.loc13.%pattern_type (%pattern_type.423) = out_param_pattern [symbolic = %return.param_patt.loc13_30.2 (constants.%return.param_patt.534)] +// CHECK:STDOUT: %return.patt.loc13_26.2: @F.loc13.%pattern_type (%pattern_type.423) = return_slot_pattern %return.param_patt.loc13_30.2, %ptr.loc13_30.1 [symbolic = %return.patt.loc13_26.2 (constants.%return.patt.669)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %ptr.loc13_30.1 [symbolic = %require_complete (constants.%require_complete)] @@ -297,19 +320,27 @@ fn F(U:! type, T:! type) -> U* { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.loc4(constants.%T, constants.%U) { +// CHECK:STDOUT: %T.patt.loc4_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_7.1 => constants.%T +// CHECK:STDOUT: %U.patt.loc4_17.2 => constants.%U.patt // CHECK:STDOUT: %U.loc4_17.1 => constants.%U // CHECK:STDOUT: %ptr.loc4_30.1 => constants.%ptr.e8f // CHECK:STDOUT: %.loc4_30.1 => constants.%.cb6 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.4f4 +// CHECK:STDOUT: %return.param_patt.loc4_30.2 => constants.%return.param_patt.27f +// CHECK:STDOUT: %return.patt.loc4_26.2 => constants.%return.patt.d67 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.loc13(constants.%T, constants.%U) { +// CHECK:STDOUT: %T.patt.loc13_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc13_7.1 => constants.%T +// CHECK:STDOUT: %U.patt.loc13_17.2 => constants.%U.patt // CHECK:STDOUT: %U.loc13_17.1 => constants.%U // CHECK:STDOUT: %ptr.loc13_30.1 => constants.%ptr.18e // CHECK:STDOUT: %.loc13_30.1 => constants.%.6d8 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.423 +// CHECK:STDOUT: %return.param_patt.loc13_30.2 => constants.%return.param_patt.534 +// CHECK:STDOUT: %return.patt.loc13_26.2 => constants.%return.patt.669 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_reorder.carbon @@ -318,18 +349,26 @@ fn F(U:! type, T:! type) -> U* { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.d47: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %U.patt.014: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %U.091: type = symbolic_binding U, 1 [symbolic] // CHECK:STDOUT: %ptr.e8f: type = ptr_type %T.67d [symbolic] // CHECK:STDOUT: %.cb6: Core.Form = init_form %ptr.e8f [symbolic] // CHECK:STDOUT: %pattern_type.4f4: type = pattern_type %ptr.e8f [symbolic] +// CHECK:STDOUT: %return.param_patt.27f: %pattern_type.4f4 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.d67: %pattern_type.4f4 = return_slot_pattern %return.param_patt.27f, %ptr.e8f [symbolic] // CHECK:STDOUT: %F.type.eb3ec9.1: type = fn_type @F.loc4 [concrete] // CHECK:STDOUT: %F.7088cc.1: %F.type.eb3ec9.1 = struct_value () [concrete] +// CHECK:STDOUT: %U.patt.d47: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %U.67d: type = symbolic_binding U, 0 [symbolic] +// CHECK:STDOUT: %T.patt.014: %pattern_type.98f = symbolic_binding_pattern T, 1 [symbolic] // CHECK:STDOUT: %T.091: type = symbolic_binding T, 1 [symbolic] // CHECK:STDOUT: %ptr.18e: type = ptr_type %T.091 [symbolic] // CHECK:STDOUT: %.6d8: Core.Form = init_form %ptr.18e [symbolic] // CHECK:STDOUT: %pattern_type.423: type = pattern_type %ptr.18e [symbolic] +// CHECK:STDOUT: %return.param_patt.534: %pattern_type.423 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.669: %pattern_type.423 = return_slot_pattern %return.param_patt.534, %ptr.18e [symbolic] // CHECK:STDOUT: %F.type.eb3ec9.2: type = fn_type @F.loc13 [concrete] // CHECK:STDOUT: %F.7088cc.2: %F.type.eb3ec9.2 = struct_value () [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %ptr.18e [symbolic] @@ -349,10 +388,10 @@ fn F(U:! type, T:! type) -> U* { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl.loc4: %F.type.eb3ec9.1 = fn_decl @F.loc4 [concrete = constants.%F.7088cc.1] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [concrete] -// CHECK:STDOUT: %return.param_patt: @F.loc4.%pattern_type (%pattern_type.4f4) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @F.loc4.%pattern_type (%pattern_type.4f4) = return_slot_pattern %return.param_patt, %ptr.loc4_30.2 [concrete] +// CHECK:STDOUT: %T.patt.loc4_7.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_7.2 (constants.%T.patt.d47)] +// CHECK:STDOUT: %U.patt.loc4_17.1: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc4_17.2 (constants.%U.patt.014)] +// CHECK:STDOUT: %return.param_patt.loc4_30.1: @F.loc4.%pattern_type (%pattern_type.4f4) = out_param_pattern [symbolic = %return.param_patt.loc4_30.2 (constants.%return.param_patt.27f)] +// CHECK:STDOUT: %return.patt.loc4_26.1: @F.loc4.%pattern_type (%pattern_type.4f4) = return_slot_pattern %return.param_patt.loc4_30.1, %ptr.loc4_30.2 [symbolic = %return.patt.loc4_26.2 (constants.%return.patt.d67)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc4_7.2 [symbolic = %T.loc4_7.1 (constants.%T.67d)] // CHECK:STDOUT: %ptr.loc4_30.2: type = ptr_type %T.ref [symbolic = %ptr.loc4_30.1 (constants.%ptr.e8f)] @@ -371,10 +410,10 @@ fn F(U:! type, T:! type) -> U* { // CHECK:STDOUT: %return: ref @F.loc4.%ptr.loc4_30.1 (%ptr.e8f) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl.loc13: %F.type.eb3ec9.2 = fn_decl @F.loc13 [concrete = constants.%F.7088cc.2] { -// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [concrete] -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 1 [concrete] -// CHECK:STDOUT: %return.param_patt: @F.loc13.%pattern_type (%pattern_type.423) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @F.loc13.%pattern_type (%pattern_type.423) = return_slot_pattern %return.param_patt, %ptr.loc13_37.2 [concrete] +// CHECK:STDOUT: %U.patt.loc13_14.1: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc13_14.2 (constants.%U.patt.d47)] +// CHECK:STDOUT: %T.patt.loc13_24.1: %pattern_type.98f = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc13_24.2 (constants.%T.patt.014)] +// CHECK:STDOUT: %return.param_patt.loc13_37.1: @F.loc13.%pattern_type (%pattern_type.423) = out_param_pattern [symbolic = %return.param_patt.loc13_37.2 (constants.%return.param_patt.534)] +// CHECK:STDOUT: %return.patt.loc13_33.1: @F.loc13.%pattern_type (%pattern_type.423) = return_slot_pattern %return.param_patt.loc13_37.1, %ptr.loc13_37.2 [symbolic = %return.patt.loc13_33.2 (constants.%return.patt.669)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc13: type = name_ref T, %T.loc13_24.2 [symbolic = %T.loc13_24.1 (constants.%T.091)] // CHECK:STDOUT: %ptr.loc13_37.2: type = ptr_type %T.ref.loc13 [symbolic = %ptr.loc13_37.1 (constants.%ptr.18e)] @@ -395,21 +434,29 @@ fn F(U:! type, T:! type) -> U* { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F.loc4(%T.loc4_7.2: type, %U.loc4_17.2: type) { +// CHECK:STDOUT: %T.patt.loc4_7.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_7.2 (constants.%T.patt.d47)] // CHECK:STDOUT: %T.loc4_7.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_7.1 (constants.%T.67d)] +// CHECK:STDOUT: %U.patt.loc4_17.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc4_17.2 (constants.%U.patt.014)] // CHECK:STDOUT: %U.loc4_17.1: type = symbolic_binding U, 1 [symbolic = %U.loc4_17.1 (constants.%U.091)] // CHECK:STDOUT: %ptr.loc4_30.1: type = ptr_type %T.loc4_7.1 [symbolic = %ptr.loc4_30.1 (constants.%ptr.e8f)] // CHECK:STDOUT: %.loc4_30.1: Core.Form = init_form %ptr.loc4_30.1 [symbolic = %.loc4_30.1 (constants.%.cb6)] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc4_30.1 [symbolic = %pattern_type (constants.%pattern_type.4f4)] +// CHECK:STDOUT: %return.param_patt.loc4_30.2: @F.loc4.%pattern_type (%pattern_type.4f4) = out_param_pattern [symbolic = %return.param_patt.loc4_30.2 (constants.%return.param_patt.27f)] +// CHECK:STDOUT: %return.patt.loc4_26.2: @F.loc4.%pattern_type (%pattern_type.4f4) = return_slot_pattern %return.param_patt.loc4_30.2, %ptr.loc4_30.1 [symbolic = %return.patt.loc4_26.2 (constants.%return.patt.d67)] // CHECK:STDOUT: // CHECK:STDOUT: fn() -> out %return.param: @F.loc4.%ptr.loc4_30.1 (%ptr.e8f); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F.loc13(%U.loc13_14.2: type, %T.loc13_24.2: type) { +// CHECK:STDOUT: %U.patt.loc13_14.2: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc13_14.2 (constants.%U.patt.d47)] // CHECK:STDOUT: %U.loc13_14.1: type = symbolic_binding U, 0 [symbolic = %U.loc13_14.1 (constants.%U.67d)] +// CHECK:STDOUT: %T.patt.loc13_24.2: %pattern_type.98f = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc13_24.2 (constants.%T.patt.014)] // CHECK:STDOUT: %T.loc13_24.1: type = symbolic_binding T, 1 [symbolic = %T.loc13_24.1 (constants.%T.091)] // CHECK:STDOUT: %ptr.loc13_37.1: type = ptr_type %T.loc13_24.1 [symbolic = %ptr.loc13_37.1 (constants.%ptr.18e)] // CHECK:STDOUT: %.loc13_37.1: Core.Form = init_form %ptr.loc13_37.1 [symbolic = %.loc13_37.1 (constants.%.6d8)] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc13_37.1 [symbolic = %pattern_type (constants.%pattern_type.423)] +// CHECK:STDOUT: %return.param_patt.loc13_37.2: @F.loc13.%pattern_type (%pattern_type.423) = out_param_pattern [symbolic = %return.param_patt.loc13_37.2 (constants.%return.param_patt.534)] +// CHECK:STDOUT: %return.patt.loc13_33.2: @F.loc13.%pattern_type (%pattern_type.423) = return_slot_pattern %return.param_patt.loc13_37.2, %ptr.loc13_37.1 [symbolic = %return.patt.loc13_33.2 (constants.%return.patt.669)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %ptr.loc13_37.1 [symbolic = %require_complete (constants.%require_complete)] @@ -423,19 +470,27 @@ fn F(U:! type, T:! type) -> U* { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.loc4(constants.%T.67d, constants.%U.091) { +// CHECK:STDOUT: %T.patt.loc4_7.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc4_7.1 => constants.%T.67d +// CHECK:STDOUT: %U.patt.loc4_17.2 => constants.%U.patt.014 // CHECK:STDOUT: %U.loc4_17.1 => constants.%U.091 // CHECK:STDOUT: %ptr.loc4_30.1 => constants.%ptr.e8f // CHECK:STDOUT: %.loc4_30.1 => constants.%.cb6 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.4f4 +// CHECK:STDOUT: %return.param_patt.loc4_30.2 => constants.%return.param_patt.27f +// CHECK:STDOUT: %return.patt.loc4_26.2 => constants.%return.patt.d67 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.loc13(constants.%U.67d, constants.%T.091) { +// CHECK:STDOUT: %U.patt.loc13_14.2 => constants.%U.patt.d47 // CHECK:STDOUT: %U.loc13_14.1 => constants.%U.67d +// CHECK:STDOUT: %T.patt.loc13_24.2 => constants.%T.patt.014 // CHECK:STDOUT: %T.loc13_24.1 => constants.%T.091 // CHECK:STDOUT: %ptr.loc13_37.1 => constants.%ptr.18e // CHECK:STDOUT: %.loc13_37.1 => constants.%.6d8 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.423 +// CHECK:STDOUT: %return.param_patt.loc13_37.2 => constants.%return.param_patt.534 +// CHECK:STDOUT: %return.patt.loc13_33.2 => constants.%return.patt.669 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_rename.carbon @@ -444,18 +499,26 @@ fn F(U:! type, T:! type) -> U* { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.d47: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %U.patt.014: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %U.091: type = symbolic_binding U, 1 [symbolic] // CHECK:STDOUT: %ptr.e8f8f9.1: type = ptr_type %T.67d [symbolic] // CHECK:STDOUT: %.cb6cb9.1: Core.Form = init_form %ptr.e8f8f9.1 [symbolic] // CHECK:STDOUT: %pattern_type.4f4b84.1: type = pattern_type %ptr.e8f8f9.1 [symbolic] +// CHECK:STDOUT: %return.param_patt.27f587.1: %pattern_type.4f4b84.1 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.d67681.1: %pattern_type.4f4b84.1 = return_slot_pattern %return.param_patt.27f587.1, %ptr.e8f8f9.1 [symbolic] // CHECK:STDOUT: %F.type.eb3ec9.1: type = fn_type @F.loc4 [concrete] // CHECK:STDOUT: %F.7088cc.1: %F.type.eb3ec9.1 = struct_value () [concrete] +// CHECK:STDOUT: %U.patt.d47: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %U.67d: type = symbolic_binding U, 0 [symbolic] +// CHECK:STDOUT: %T.patt.014: %pattern_type.98f = symbolic_binding_pattern T, 1 [symbolic] // CHECK:STDOUT: %T.091: type = symbolic_binding T, 1 [symbolic] // CHECK:STDOUT: %ptr.e8f8f9.2: type = ptr_type %U.67d [symbolic] // CHECK:STDOUT: %.cb6cb9.2: Core.Form = init_form %ptr.e8f8f9.2 [symbolic] // CHECK:STDOUT: %pattern_type.4f4b84.2: type = pattern_type %ptr.e8f8f9.2 [symbolic] +// CHECK:STDOUT: %return.param_patt.27f587.2: %pattern_type.4f4b84.2 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.d67681.2: %pattern_type.4f4b84.2 = return_slot_pattern %return.param_patt.27f587.2, %ptr.e8f8f9.2 [symbolic] // CHECK:STDOUT: %F.type.eb3ec9.2: type = fn_type @F.loc13 [concrete] // CHECK:STDOUT: %F.7088cc.2: %F.type.eb3ec9.2 = struct_value () [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %ptr.e8f8f9.2 [symbolic] @@ -475,10 +538,10 @@ fn F(U:! type, T:! type) -> U* { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl.loc4: %F.type.eb3ec9.1 = fn_decl @F.loc4 [concrete = constants.%F.7088cc.1] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [concrete] -// CHECK:STDOUT: %return.param_patt: @F.loc4.%pattern_type (%pattern_type.4f4b84.1) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @F.loc4.%pattern_type (%pattern_type.4f4b84.1) = return_slot_pattern %return.param_patt, %ptr.loc4_30.2 [concrete] +// CHECK:STDOUT: %T.patt.loc4_7.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_7.2 (constants.%T.patt.d47)] +// CHECK:STDOUT: %U.patt.loc4_17.1: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc4_17.2 (constants.%U.patt.014)] +// CHECK:STDOUT: %return.param_patt.loc4_30.1: @F.loc4.%pattern_type (%pattern_type.4f4b84.1) = out_param_pattern [symbolic = %return.param_patt.loc4_30.2 (constants.%return.param_patt.27f587.1)] +// CHECK:STDOUT: %return.patt.loc4_26.1: @F.loc4.%pattern_type (%pattern_type.4f4b84.1) = return_slot_pattern %return.param_patt.loc4_30.1, %ptr.loc4_30.2 [symbolic = %return.patt.loc4_26.2 (constants.%return.patt.d67681.1)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc4_7.2 [symbolic = %T.loc4_7.1 (constants.%T.67d)] // CHECK:STDOUT: %ptr.loc4_30.2: type = ptr_type %T.ref [symbolic = %ptr.loc4_30.1 (constants.%ptr.e8f8f9.1)] @@ -497,10 +560,10 @@ fn F(U:! type, T:! type) -> U* { // CHECK:STDOUT: %return: ref @F.loc4.%ptr.loc4_30.1 (%ptr.e8f8f9.1) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl.loc13: %F.type.eb3ec9.2 = fn_decl @F.loc13 [concrete = constants.%F.7088cc.2] { -// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [concrete] -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 1 [concrete] -// CHECK:STDOUT: %return.param_patt: @F.loc13.%pattern_type (%pattern_type.4f4b84.2) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @F.loc13.%pattern_type (%pattern_type.4f4b84.2) = return_slot_pattern %return.param_patt, %ptr.loc13_30.2 [concrete] +// CHECK:STDOUT: %U.patt.loc13_7.1: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc13_7.2 (constants.%U.patt.d47)] +// CHECK:STDOUT: %T.patt.loc13_17.1: %pattern_type.98f = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc13_17.2 (constants.%T.patt.014)] +// CHECK:STDOUT: %return.param_patt.loc13_30.1: @F.loc13.%pattern_type (%pattern_type.4f4b84.2) = out_param_pattern [symbolic = %return.param_patt.loc13_30.2 (constants.%return.param_patt.27f587.2)] +// CHECK:STDOUT: %return.patt.loc13_26.1: @F.loc13.%pattern_type (%pattern_type.4f4b84.2) = return_slot_pattern %return.param_patt.loc13_30.1, %ptr.loc13_30.2 [symbolic = %return.patt.loc13_26.2 (constants.%return.patt.d67681.2)] // CHECK:STDOUT: } { // CHECK:STDOUT: %U.ref: type = name_ref U, %U.loc13_7.2 [symbolic = %U.loc13_7.1 (constants.%U.67d)] // CHECK:STDOUT: %ptr.loc13_30.2: type = ptr_type %U.ref [symbolic = %ptr.loc13_30.1 (constants.%ptr.e8f8f9.2)] @@ -521,21 +584,29 @@ fn F(U:! type, T:! type) -> U* { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F.loc4(%T.loc4_7.2: type, %U.loc4_17.2: type) { +// CHECK:STDOUT: %T.patt.loc4_7.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_7.2 (constants.%T.patt.d47)] // CHECK:STDOUT: %T.loc4_7.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_7.1 (constants.%T.67d)] +// CHECK:STDOUT: %U.patt.loc4_17.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc4_17.2 (constants.%U.patt.014)] // CHECK:STDOUT: %U.loc4_17.1: type = symbolic_binding U, 1 [symbolic = %U.loc4_17.1 (constants.%U.091)] // CHECK:STDOUT: %ptr.loc4_30.1: type = ptr_type %T.loc4_7.1 [symbolic = %ptr.loc4_30.1 (constants.%ptr.e8f8f9.1)] // CHECK:STDOUT: %.loc4_30.1: Core.Form = init_form %ptr.loc4_30.1 [symbolic = %.loc4_30.1 (constants.%.cb6cb9.1)] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc4_30.1 [symbolic = %pattern_type (constants.%pattern_type.4f4b84.1)] +// CHECK:STDOUT: %return.param_patt.loc4_30.2: @F.loc4.%pattern_type (%pattern_type.4f4b84.1) = out_param_pattern [symbolic = %return.param_patt.loc4_30.2 (constants.%return.param_patt.27f587.1)] +// CHECK:STDOUT: %return.patt.loc4_26.2: @F.loc4.%pattern_type (%pattern_type.4f4b84.1) = return_slot_pattern %return.param_patt.loc4_30.2, %ptr.loc4_30.1 [symbolic = %return.patt.loc4_26.2 (constants.%return.patt.d67681.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn() -> out %return.param: @F.loc4.%ptr.loc4_30.1 (%ptr.e8f8f9.1); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F.loc13(%U.loc13_7.2: type, %T.loc13_17.2: type) { +// CHECK:STDOUT: %U.patt.loc13_7.2: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc13_7.2 (constants.%U.patt.d47)] // CHECK:STDOUT: %U.loc13_7.1: type = symbolic_binding U, 0 [symbolic = %U.loc13_7.1 (constants.%U.67d)] +// CHECK:STDOUT: %T.patt.loc13_17.2: %pattern_type.98f = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc13_17.2 (constants.%T.patt.014)] // CHECK:STDOUT: %T.loc13_17.1: type = symbolic_binding T, 1 [symbolic = %T.loc13_17.1 (constants.%T.091)] // CHECK:STDOUT: %ptr.loc13_30.1: type = ptr_type %U.loc13_7.1 [symbolic = %ptr.loc13_30.1 (constants.%ptr.e8f8f9.2)] // CHECK:STDOUT: %.loc13_30.1: Core.Form = init_form %ptr.loc13_30.1 [symbolic = %.loc13_30.1 (constants.%.cb6cb9.2)] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc13_30.1 [symbolic = %pattern_type (constants.%pattern_type.4f4b84.2)] +// CHECK:STDOUT: %return.param_patt.loc13_30.2: @F.loc13.%pattern_type (%pattern_type.4f4b84.2) = out_param_pattern [symbolic = %return.param_patt.loc13_30.2 (constants.%return.param_patt.27f587.2)] +// CHECK:STDOUT: %return.patt.loc13_26.2: @F.loc13.%pattern_type (%pattern_type.4f4b84.2) = return_slot_pattern %return.param_patt.loc13_30.2, %ptr.loc13_30.1 [symbolic = %return.patt.loc13_26.2 (constants.%return.patt.d67681.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %ptr.loc13_30.1 [symbolic = %require_complete (constants.%require_complete)] @@ -549,18 +620,26 @@ fn F(U:! type, T:! type) -> U* { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.loc4(constants.%T.67d, constants.%U.091) { +// CHECK:STDOUT: %T.patt.loc4_7.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc4_7.1 => constants.%T.67d +// CHECK:STDOUT: %U.patt.loc4_17.2 => constants.%U.patt.014 // CHECK:STDOUT: %U.loc4_17.1 => constants.%U.091 // CHECK:STDOUT: %ptr.loc4_30.1 => constants.%ptr.e8f8f9.1 // CHECK:STDOUT: %.loc4_30.1 => constants.%.cb6cb9.1 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.4f4b84.1 +// CHECK:STDOUT: %return.param_patt.loc4_30.2 => constants.%return.param_patt.27f587.1 +// CHECK:STDOUT: %return.patt.loc4_26.2 => constants.%return.patt.d67681.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.loc13(constants.%U.67d, constants.%T.091) { +// CHECK:STDOUT: %U.patt.loc13_7.2 => constants.%U.patt.d47 // CHECK:STDOUT: %U.loc13_7.1 => constants.%U.67d +// CHECK:STDOUT: %T.patt.loc13_17.2 => constants.%T.patt.014 // CHECK:STDOUT: %T.loc13_17.1 => constants.%T.091 // CHECK:STDOUT: %ptr.loc13_30.1 => constants.%ptr.e8f8f9.2 // CHECK:STDOUT: %.loc13_30.1 => constants.%.cb6cb9.2 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.4f4b84.2 +// CHECK:STDOUT: %return.param_patt.loc13_30.2 => constants.%return.param_patt.27f587.2 +// CHECK:STDOUT: %return.patt.loc13_26.2 => constants.%return.patt.d67681.2 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/function/generic/resolve_used.carbon b/toolchain/check/testdata/function/generic/resolve_used.carbon index b49465b4eb59..0f577df4112c 100644 --- a/toolchain/check/testdata/function/generic/resolve_used.carbon +++ b/toolchain/check/testdata/function/generic/resolve_used.carbon @@ -45,6 +45,7 @@ fn CallNegative() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.dc0: type = pattern_type Core.IntLiteral [concrete] +// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %ErrorIfNIsZero.type: type = fn_type @ErrorIfNIsZero [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -54,6 +55,8 @@ fn CallNegative() { // CHECK:STDOUT: %Int: type = class_type @Int, @Int(%N) [symbolic] // CHECK:STDOUT: %require_complete.4df: = require_complete_type %Int [symbolic] // CHECK:STDOUT: %pattern_type.142: type = pattern_type %Int [symbolic] +// CHECK:STDOUT: %v.patt.834: %pattern_type.142 = ref_binding_pattern v [symbolic] +// CHECK:STDOUT: %v.var_patt.cd4: %pattern_type.142 = var_pattern %v.patt.834 [symbolic] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.150: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] @@ -78,6 +81,8 @@ fn CallNegative() { // CHECK:STDOUT: %ErrorIfNIsZero.specific_fn: = specific_function %ErrorIfNIsZero, @ErrorIfNIsZero(%int_0) [concrete] // CHECK:STDOUT: %i0: type = class_type @Int, @Int(%int_0) [concrete] // CHECK:STDOUT: %pattern_type.d0e: type = pattern_type %i0 [concrete] +// CHECK:STDOUT: %v.patt.53c: %pattern_type.d0e = ref_binding_pattern v [concrete] +// CHECK:STDOUT: %v.var_patt.0d0: %pattern_type.d0e = var_pattern %v.patt.53c [concrete] // CHECK:STDOUT: %DefaultOrUnformed.impl_witness.8d2: = impl_witness imports.%DefaultOrUnformed.impl_witness_table.374, @T.as.DefaultOrUnformed.impl(%i0) [concrete] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.baf: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%i0) [concrete] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.38a: %T.as.DefaultOrUnformed.impl.Op.type.baf = struct_value () [concrete] @@ -119,7 +124,7 @@ fn CallNegative() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %ErrorIfNIsZero.decl: %ErrorIfNIsZero.type = fn_decl @ErrorIfNIsZero [concrete = constants.%ErrorIfNIsZero] { -// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [concrete] +// CHECK:STDOUT: %N.patt.loc4_20.1: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_20.2 (constants.%N.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4: type = splice_block %IntLiteral.ref [concrete = Core.IntLiteral] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -132,12 +137,15 @@ fn CallNegative() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @ErrorIfNIsZero(%N.loc4_20.2: Core.IntLiteral) { +// CHECK:STDOUT: %N.patt.loc4_20.2: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_20.2 (constants.%N.patt)] // CHECK:STDOUT: %N.loc4_20.1: Core.IntLiteral = symbolic_binding N, 0 [symbolic = %N.loc4_20.1 (constants.%N)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Int.loc9_27.2: type = class_type @Int, @Int(%N.loc4_20.1) [symbolic = %Int.loc9_27.2 (constants.%Int)] // CHECK:STDOUT: %require_complete: = require_complete_type %Int.loc9_27.2 [symbolic = %require_complete (constants.%require_complete.4df)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Int.loc9_27.2 [symbolic = %pattern_type (constants.%pattern_type.142)] +// CHECK:STDOUT: %v.patt.loc9_15.2: @ErrorIfNIsZero.%pattern_type (%pattern_type.142) = ref_binding_pattern v [symbolic = %v.patt.loc9_15.2 (constants.%v.patt.834)] +// CHECK:STDOUT: %v.var_patt.loc9_3.2: @ErrorIfNIsZero.%pattern_type (%pattern_type.142) = var_pattern %v.patt.loc9_15.2 [symbolic = %v.var_patt.loc9_3.2 (constants.%v.var_patt.cd4)] // CHECK:STDOUT: %.loc9_28.3: require_specific_def_type = require_specific_def @T.as.DefaultOrUnformed.impl(%Int.loc9_27.2) [symbolic = %.loc9_28.3 (constants.%.386)] // CHECK:STDOUT: %DefaultOrUnformed.lookup_impl_witness: = lookup_impl_witness %Int.loc9_27.2, @DefaultOrUnformed [symbolic = %DefaultOrUnformed.lookup_impl_witness (constants.%DefaultOrUnformed.lookup_impl_witness)] // CHECK:STDOUT: %DefaultOrUnformed.facet.loc9_28.2: %DefaultOrUnformed.type = facet_value %Int.loc9_27.2, (%DefaultOrUnformed.lookup_impl_witness) [symbolic = %DefaultOrUnformed.facet.loc9_28.2 (constants.%DefaultOrUnformed.facet.e73)] @@ -146,19 +154,19 @@ fn CallNegative() { // CHECK:STDOUT: %impl.elem0.loc9_28.2: @ErrorIfNIsZero.%.loc9_28.4 (%.b74) = impl_witness_access %DefaultOrUnformed.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc9_28.2 (constants.%impl.elem0.b17)] // CHECK:STDOUT: %specific_impl_fn.loc9_28.2: = specific_impl_function %impl.elem0.loc9_28.2, @DefaultOrUnformed.WithSelf.Op(%DefaultOrUnformed.facet.loc9_28.2) [symbolic = %specific_impl_fn.loc9_28.2 (constants.%specific_impl_fn.cf5)] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %Int.loc9_27.2, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness.173)] -// CHECK:STDOUT: %Destroy.facet.loc9_3.2: %Destroy.type = facet_value %Int.loc9_27.2, (%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.loc9_3.2 (constants.%Destroy.facet.7bb)] -// CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.loc9_3.2) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.8f1)] -// CHECK:STDOUT: %.loc9_3.2: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Destroy.facet.loc9_3.2 [symbolic = %.loc9_3.2 (constants.%.2c6)] -// CHECK:STDOUT: %impl.elem0.loc9_3.2: @ErrorIfNIsZero.%.loc9_3.2 (%.2c6) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc9_3.2 (constants.%impl.elem0.604)] -// CHECK:STDOUT: %specific_impl_fn.loc9_3.2: = specific_impl_function %impl.elem0.loc9_3.2, @Destroy.WithSelf.Op(%Destroy.facet.loc9_3.2) [symbolic = %specific_impl_fn.loc9_3.2 (constants.%specific_impl_fn.693)] +// CHECK:STDOUT: %Destroy.facet.loc9_3.3: %Destroy.type = facet_value %Int.loc9_27.2, (%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.loc9_3.3 (constants.%Destroy.facet.7bb)] +// CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.loc9_3.3) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.8f1)] +// CHECK:STDOUT: %.loc9_3.3: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Destroy.facet.loc9_3.3 [symbolic = %.loc9_3.3 (constants.%.2c6)] +// CHECK:STDOUT: %impl.elem0.loc9_3.2: @ErrorIfNIsZero.%.loc9_3.3 (%.2c6) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc9_3.2 (constants.%impl.elem0.604)] +// CHECK:STDOUT: %specific_impl_fn.loc9_3.2: = specific_impl_function %impl.elem0.loc9_3.2, @Destroy.WithSelf.Op(%Destroy.facet.loc9_3.3) [symbolic = %specific_impl_fn.loc9_3.2 (constants.%specific_impl_fn.693)] // CHECK:STDOUT: // CHECK:STDOUT: fn() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: @ErrorIfNIsZero.%pattern_type (%pattern_type.142) = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: @ErrorIfNIsZero.%pattern_type (%pattern_type.142) = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt.loc9_15.1: @ErrorIfNIsZero.%pattern_type (%pattern_type.142) = ref_binding_pattern v [symbolic = %v.patt.loc9_15.2 (constants.%v.patt.834)] +// CHECK:STDOUT: %v.var_patt.loc9_3.1: @ErrorIfNIsZero.%pattern_type (%pattern_type.142) = var_pattern %v.patt.loc9_15.1 [symbolic = %v.var_patt.loc9_3.2 (constants.%v.var_patt.cd4)] // CHECK:STDOUT: } -// CHECK:STDOUT: %v.var: ref @ErrorIfNIsZero.%Int.loc9_27.2 (%Int) = var %v.var_patt +// CHECK:STDOUT: %v.var: ref @ErrorIfNIsZero.%Int.loc9_27.2 (%Int) = var %v.var_patt.loc9_3.1 // CHECK:STDOUT: %DefaultOrUnformed.facet.loc9_28.1: %DefaultOrUnformed.type = facet_value constants.%Int, (constants.%DefaultOrUnformed.lookup_impl_witness) [symbolic = %DefaultOrUnformed.facet.loc9_28.2 (constants.%DefaultOrUnformed.facet.e73)] // CHECK:STDOUT: %.loc9_28.1: %DefaultOrUnformed.type = converted constants.%Int, %DefaultOrUnformed.facet.loc9_28.1 [symbolic = %DefaultOrUnformed.facet.loc9_28.2 (constants.%DefaultOrUnformed.facet.e73)] // CHECK:STDOUT: %as_type: type = facet_access_type %.loc9_28.1 [symbolic = %Int.loc9_27.2 (constants.%Int)] @@ -174,10 +182,12 @@ fn CallNegative() { // CHECK:STDOUT: %Int.loc9_27.1: type = class_type @Int, @Int(constants.%N) [symbolic = %Int.loc9_27.2 (constants.%Int)] // CHECK:STDOUT: } // CHECK:STDOUT: %v: ref @ErrorIfNIsZero.%Int.loc9_27.2 (%Int) = ref_binding v, %v.var -// CHECK:STDOUT: %impl.elem0.loc9_3.1: @ErrorIfNIsZero.%.loc9_3.2 (%.2c6) = impl_witness_access constants.%Destroy.lookup_impl_witness.173, element0 [symbolic = %impl.elem0.loc9_3.2 (constants.%impl.elem0.604)] +// CHECK:STDOUT: %impl.elem0.loc9_3.1: @ErrorIfNIsZero.%.loc9_3.3 (%.2c6) = impl_witness_access constants.%Destroy.lookup_impl_witness.173, element0 [symbolic = %impl.elem0.loc9_3.2 (constants.%impl.elem0.604)] // CHECK:STDOUT: %bound_method.loc9_3.1: = bound_method %v.var, %impl.elem0.loc9_3.1 -// CHECK:STDOUT: %Destroy.facet.loc9_3.1: %Destroy.type = facet_value constants.%Int, (constants.%Destroy.lookup_impl_witness.173) [symbolic = %Destroy.facet.loc9_3.2 (constants.%Destroy.facet.7bb)] -// CHECK:STDOUT: %.loc9_3.1: %Destroy.type = converted constants.%Int, %Destroy.facet.loc9_3.1 [symbolic = %Destroy.facet.loc9_3.2 (constants.%Destroy.facet.7bb)] +// CHECK:STDOUT: %Destroy.facet.loc9_3.1: %Destroy.type = facet_value constants.%Int, (constants.%Destroy.lookup_impl_witness.173) [symbolic = %Destroy.facet.loc9_3.3 (constants.%Destroy.facet.7bb)] +// CHECK:STDOUT: %.loc9_3.1: %Destroy.type = converted constants.%Int, %Destroy.facet.loc9_3.1 [symbolic = %Destroy.facet.loc9_3.3 (constants.%Destroy.facet.7bb)] +// CHECK:STDOUT: %Destroy.facet.loc9_3.2: %Destroy.type = facet_value constants.%Int, (constants.%Destroy.lookup_impl_witness.173) [symbolic = %Destroy.facet.loc9_3.3 (constants.%Destroy.facet.7bb)] +// CHECK:STDOUT: %.loc9_3.2: %Destroy.type = converted constants.%Int, %Destroy.facet.loc9_3.2 [symbolic = %Destroy.facet.loc9_3.3 (constants.%Destroy.facet.7bb)] // CHECK:STDOUT: %specific_impl_fn.loc9_3.1: = specific_impl_function %impl.elem0.loc9_3.1, @Destroy.WithSelf.Op(constants.%Destroy.facet.7bb) [symbolic = %specific_impl_fn.loc9_3.2 (constants.%specific_impl_fn.693)] // CHECK:STDOUT: %bound_method.loc9_3.2: = bound_method %v.var, %specific_impl_fn.loc9_3.1 // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc9_3.2(%v.var) @@ -200,16 +210,20 @@ fn CallNegative() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ErrorIfNIsZero(constants.%N) { +// CHECK:STDOUT: %N.patt.loc4_20.2 => constants.%N.patt // CHECK:STDOUT: %N.loc4_20.1 => constants.%N // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ErrorIfNIsZero(constants.%int_0) { +// CHECK:STDOUT: %N.patt.loc4_20.2 => constants.%N.patt // CHECK:STDOUT: %N.loc4_20.1 => constants.%int_0 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Int.loc9_27.2 => constants.%i0 // CHECK:STDOUT: %require_complete => // CHECK:STDOUT: %pattern_type => constants.%pattern_type.d0e +// CHECK:STDOUT: %v.patt.loc9_15.2 => constants.%v.patt.53c +// CHECK:STDOUT: %v.var_patt.loc9_3.2 => constants.%v.var_patt.0d0 // CHECK:STDOUT: %.loc9_28.3 => constants.%.060 // CHECK:STDOUT: %DefaultOrUnformed.lookup_impl_witness => constants.%DefaultOrUnformed.impl_witness.8d2 // CHECK:STDOUT: %DefaultOrUnformed.facet.loc9_28.2 => constants.%DefaultOrUnformed.facet.4e3 @@ -218,9 +232,9 @@ fn CallNegative() { // CHECK:STDOUT: %impl.elem0.loc9_28.2 => constants.%T.as.DefaultOrUnformed.impl.Op.38a // CHECK:STDOUT: %specific_impl_fn.loc9_28.2 => constants.%T.as.DefaultOrUnformed.impl.Op.specific_fn // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.df9 -// CHECK:STDOUT: %Destroy.facet.loc9_3.2 => constants.%Destroy.facet.85b +// CHECK:STDOUT: %Destroy.facet.loc9_3.3 => constants.%Destroy.facet.85b // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.b7e -// CHECK:STDOUT: %.loc9_3.2 => constants.%.338 +// CHECK:STDOUT: %.loc9_3.3 => constants.%.338 // CHECK:STDOUT: %impl.elem0.loc9_3.2 => constants.%Destroy.Op // CHECK:STDOUT: %specific_impl_fn.loc9_3.2 => constants.%Destroy.Op // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/function/generic/return_slot.carbon b/toolchain/check/testdata/function/generic/return_slot.carbon index 41c3286cf3fb..229fc4bb9a0e 100644 --- a/toolchain/check/testdata/function/generic/return_slot.carbon +++ b/toolchain/check/testdata/function/generic/return_slot.carbon @@ -30,6 +30,7 @@ fn G() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Wrap.type: type = generic_class_type @Wrap [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -37,6 +38,8 @@ fn G() { // CHECK:STDOUT: %Wrap.8a2: type = class_type @Wrap, @Wrap(%T) [symbolic] // CHECK:STDOUT: %.184: Core.Form = init_form %T [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %return.param_patt.41d: %pattern_type.51d = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.b39: %pattern_type.51d = return_slot_pattern %return.param_patt.41d, %T [symbolic] // CHECK:STDOUT: %Wrap.Make.type.8e1: type = fn_type @Wrap.Make, @Wrap(%T) [symbolic] // CHECK:STDOUT: %Wrap.Make.813: %Wrap.Make.type.8e1 = struct_value () [symbolic] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] @@ -58,23 +61,35 @@ fn G() { // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.6b6 = var_pattern %a.patt [concrete] // CHECK:STDOUT: %Wrap.aab: type = class_type @Wrap, @Wrap(%i32) [concrete] // CHECK:STDOUT: %Wrap.Make.type.096: type = fn_type @Wrap.Make, @Wrap(%i32) [concrete] // CHECK:STDOUT: %Wrap.Make.4b7: %Wrap.Make.type.096 = struct_value () [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %Wrap.Make.specific_fn.cb0: = specific_function %Wrap.Make.4b7, @Wrap.Make(%i32) [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.cb1 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.cb1 = var_pattern %b.patt [concrete] // CHECK:STDOUT: %Wrap.7ad: type = class_type @Wrap, @Wrap(%empty_tuple.type) [concrete] // CHECK:STDOUT: %Wrap.Make.type.318: type = fn_type @Wrap.Make, @Wrap(%empty_tuple.type) [concrete] // CHECK:STDOUT: %Wrap.Make.26a: %Wrap.Make.type.318 = struct_value () [concrete] // CHECK:STDOUT: %.262: Core.Form = init_form %empty_tuple.type [concrete] +// CHECK:STDOUT: %return.param_patt.900: %pattern_type.cb1 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.427: %pattern_type.cb1 = return_slot_pattern %return.param_patt.900, %empty_tuple.type [concrete] // CHECK:STDOUT: %Wrap.Make.specific_fn.cc3: = specific_function %Wrap.Make.26a, @Wrap.Make(%empty_tuple.type) [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete] // CHECK:STDOUT: %Wrap.fad: type = class_type @Wrap, @Wrap(%C) [concrete] // CHECK:STDOUT: %Wrap.Make.type.bd1: type = fn_type @Wrap.Make, @Wrap(%C) [concrete] // CHECK:STDOUT: %Wrap.Make.83f: %Wrap.Make.type.bd1 = struct_value () [concrete] // CHECK:STDOUT: %.a44: Core.Form = init_form %C [concrete] +// CHECK:STDOUT: %return.param_patt.89a: %pattern_type.98b = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e4a: %pattern_type.98b = return_slot_pattern %return.param_patt.89a, %C [concrete] // CHECK:STDOUT: %Wrap.Make.specific_fn.c96: = specific_function %Wrap.Make.83f, @Wrap.Make(%C) [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.2: type = fn_type @Destroy.Op.loc24_3.2 [concrete] @@ -106,7 +121,7 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Wrap.decl: %Wrap.type = class_decl @Wrap [concrete = constants.%Wrap.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc15_13.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_13.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc15_16.1: type = splice_block %.loc15_16.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -119,6 +134,7 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Wrap(%T.loc15_13.2: type) { +// CHECK:STDOUT: %T.patt.loc15_13.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_13.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc15_13.1: type = symbolic_binding T, 0 [symbolic = %T.loc15_13.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -127,8 +143,8 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %Wrap.Make.decl: @Wrap.%Wrap.Make.type (%Wrap.Make.type.8e1) = fn_decl @Wrap.Make [symbolic = @Wrap.%Wrap.Make (constants.%Wrap.Make.813)] { -// CHECK:STDOUT: %return.param_patt: @Wrap.Make.%pattern_type (%pattern_type.51d) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @Wrap.Make.%pattern_type (%pattern_type.51d) = return_slot_pattern %return.param_patt, %T.ref [concrete] +// CHECK:STDOUT: %return.param_patt.loc16_16.1: @Wrap.Make.%pattern_type (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt.loc16_16.2 (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt.loc16_13.1: @Wrap.Make.%pattern_type (%pattern_type.51d) = return_slot_pattern %return.param_patt.loc16_16.1, %T.ref [symbolic = %return.patt.loc16_13.2 (constants.%return.patt.b39)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, @Wrap.%T.loc15_13.2 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %.loc16_16.3: Core.Form = init_form %T.ref [symbolic = %.loc16_16.2 (constants.%.184)] @@ -159,6 +175,8 @@ fn G() { // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %.loc16_16.2: Core.Form = init_form %T [symbolic = %.loc16_16.2 (constants.%.184)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.51d)] +// CHECK:STDOUT: %return.param_patt.loc16_16.2: @Wrap.Make.%pattern_type (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt.loc16_16.2 (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt.loc16_13.2: @Wrap.Make.%pattern_type (%pattern_type.51d) = return_slot_pattern %return.param_patt.loc16_16.2, %T [symbolic = %return.patt.loc16_13.2 (constants.%return.patt.b39)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic = %require_complete (constants.%require_complete.944)] @@ -180,8 +198,8 @@ fn G() { // CHECK:STDOUT: fn @G() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.6b6 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.6b6 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %i32 = var %a.var_patt // CHECK:STDOUT: %Wrap.ref.loc22: %Wrap.type = name_ref Wrap, file.%Wrap.decl [concrete = constants.%Wrap.generic] @@ -195,8 +213,8 @@ fn G() { // CHECK:STDOUT: %i32.loc22_17: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %a: ref %i32 = ref_binding a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.cb1 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.cb1 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.cb1 = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type.cb1 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %empty_tuple.type = var %b.var_patt // CHECK:STDOUT: %Wrap.ref.loc23: %Wrap.type = name_ref Wrap, file.%Wrap.decl [concrete = constants.%Wrap.generic] @@ -214,8 +232,8 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: %b: ref %empty_tuple.type = ref_binding b, %b.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt // CHECK:STDOUT: %Wrap.ref.loc24: %Wrap.type = name_ref Wrap, file.%Wrap.decl [concrete = constants.%Wrap.generic] @@ -263,6 +281,7 @@ fn G() { // CHECK:STDOUT: fn @Destroy.Op.loc23(%self.param: ref %empty_tuple.type) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: specific @Wrap(constants.%T) { +// CHECK:STDOUT: %T.patt.loc15_13.2 => constants.%T.patt // CHECK:STDOUT: %T.loc15_13.1 => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -274,6 +293,8 @@ fn G() { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %.loc16_16.2 => constants.%.184 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d +// CHECK:STDOUT: %return.param_patt.loc16_16.2 => constants.%return.param_patt.41d +// CHECK:STDOUT: %return.patt.loc16_13.2 => constants.%return.patt.b39 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.944 @@ -283,6 +304,7 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Wrap(constants.%i32) { +// CHECK:STDOUT: %T.patt.loc15_13.2 => constants.%T.patt // CHECK:STDOUT: %T.loc15_13.1 => constants.%i32 // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -294,6 +316,8 @@ fn G() { // CHECK:STDOUT: %T => constants.%i32 // CHECK:STDOUT: %.loc16_16.2 => constants.%.795 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.6b6 +// CHECK:STDOUT: %return.param_patt.loc16_16.2 => constants.%return.param_patt.a9a +// CHECK:STDOUT: %return.patt.loc16_13.2 => constants.%return.patt.e1b // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.f8a @@ -303,6 +327,7 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Wrap(constants.%empty_tuple.type) { +// CHECK:STDOUT: %T.patt.loc15_13.2 => constants.%T.patt // CHECK:STDOUT: %T.loc15_13.1 => constants.%empty_tuple.type // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -314,6 +339,8 @@ fn G() { // CHECK:STDOUT: %T => constants.%empty_tuple.type // CHECK:STDOUT: %.loc16_16.2 => constants.%.262 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.cb1 +// CHECK:STDOUT: %return.param_patt.loc16_16.2 => constants.%return.param_patt.900 +// CHECK:STDOUT: %return.patt.loc16_13.2 => constants.%return.patt.427 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.782 @@ -323,6 +350,7 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Wrap(constants.%C) { +// CHECK:STDOUT: %T.patt.loc15_13.2 => constants.%T.patt // CHECK:STDOUT: %T.loc15_13.1 => constants.%C // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -334,6 +362,8 @@ fn G() { // CHECK:STDOUT: %T => constants.%C // CHECK:STDOUT: %.loc16_16.2 => constants.%.a44 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.98b +// CHECK:STDOUT: %return.param_patt.loc16_16.2 => constants.%return.param_patt.89a +// CHECK:STDOUT: %return.patt.loc16_13.2 => constants.%return.patt.e4a // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.18e diff --git a/toolchain/check/testdata/function/generic/template_param.carbon b/toolchain/check/testdata/function/generic/template_param.carbon index 1c771ed4c859..237fa2a3b6ef 100644 --- a/toolchain/check/testdata/function/generic/template_param.carbon +++ b/toolchain/check/testdata/function/generic/template_param.carbon @@ -29,6 +29,7 @@ fn G() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0, template [template] // CHECK:STDOUT: %T: type = symbolic_binding T, 0, template [template] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -46,7 +47,7 @@ fn G() { // CHECK:STDOUT: .G = %G.decl // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0, template [concrete] +// CHECK:STDOUT: %T.patt.loc4_23.1: %pattern_type = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_23.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_26.1: type = splice_block %.loc4_26.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -58,6 +59,7 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc4_23.2: type) { +// CHECK:STDOUT: %T.patt.loc4_23.2: %pattern_type = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_23.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_23.1: type = symbolic_binding T, 0, template [template = %T.loc4_23.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -79,10 +81,12 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_23.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_23.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%empty_struct_type) { +// CHECK:STDOUT: %T.patt.loc4_23.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_23.1 => constants.%empty_struct_type // CHECK:STDOUT: // CHECK:STDOUT: !definition: diff --git a/toolchain/check/testdata/function/generic/type_param.carbon b/toolchain/check/testdata/function/generic/type_param.carbon index 431f1e5e52d9..70ca509cd0a3 100644 --- a/toolchain/check/testdata/function/generic/type_param.carbon +++ b/toolchain/check/testdata/function/generic/type_param.carbon @@ -24,6 +24,7 @@ fn F(T:! type) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.d47: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -31,6 +32,8 @@ fn F(T:! type) { // CHECK:STDOUT: %ptr: type = ptr_type %T.67d [symbolic] // CHECK:STDOUT: %require_complete.ef1: = require_complete_type %ptr [symbolic] // CHECK:STDOUT: %pattern_type.4f4: type = pattern_type %ptr [symbolic] +// CHECK:STDOUT: %p.patt: %pattern_type.4f4 = ref_binding_pattern p [symbolic] +// CHECK:STDOUT: %p.var_patt: %pattern_type.4f4 = var_pattern %p.patt [symbolic] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %require_complete.944: = require_complete_type %T.67d [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T.67d [symbolic] @@ -41,6 +44,7 @@ fn F(T:! type) { // CHECK:STDOUT: %.2e6: type = fn_type_with_self_type %DefaultOrUnformed.WithSelf.Op.type.291, %DefaultOrUnformed.facet [symbolic] // CHECK:STDOUT: %impl.elem0.66d: %.2e6 = impl_witness_access %DefaultOrUnformed.lookup_impl_witness, element0 [symbolic] // CHECK:STDOUT: %specific_impl_fn.53b: = specific_impl_function %impl.elem0.66d, @DefaultOrUnformed.WithSelf.Op(%DefaultOrUnformed.facet) [symbolic] +// CHECK:STDOUT: %n.patt: %pattern_type.51d = value_binding_pattern n [symbolic] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %ptr, @Destroy [symbolic] // CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value %ptr, (%Destroy.lookup_impl_witness) [symbolic] @@ -68,7 +72,7 @@ fn F(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc15_7.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_7.2 (constants.%T.patt.d47)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc15_10.1: type = splice_block %.loc15_10.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -79,12 +83,15 @@ fn F(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc15_7.2: type) { +// CHECK:STDOUT: %T.patt.loc15_7.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_7.2 (constants.%T.patt.d47)] // CHECK:STDOUT: %T.loc15_7.1: type = symbolic_binding T, 0 [symbolic = %T.loc15_7.1 (constants.%T.67d)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ptr.loc16_11.2: type = ptr_type %T.loc15_7.1 [symbolic = %ptr.loc16_11.2 (constants.%ptr)] // CHECK:STDOUT: %require_complete.loc16: = require_complete_type %ptr.loc16_11.2 [symbolic = %require_complete.loc16 (constants.%require_complete.ef1)] // CHECK:STDOUT: %pattern_type.loc16: type = pattern_type %ptr.loc16_11.2 [symbolic = %pattern_type.loc16 (constants.%pattern_type.4f4)] +// CHECK:STDOUT: %p.patt.loc16_8.2: @F.%pattern_type.loc16 (%pattern_type.4f4) = ref_binding_pattern p [symbolic = %p.patt.loc16_8.2 (constants.%p.patt)] +// CHECK:STDOUT: %p.var_patt.loc16_3.2: @F.%pattern_type.loc16 (%pattern_type.4f4) = var_pattern %p.patt.loc16_8.2 [symbolic = %p.var_patt.loc16_3.2 (constants.%p.var_patt)] // CHECK:STDOUT: %.loc16_12.3: require_specific_def_type = require_specific_def @T.as.DefaultOrUnformed.impl(%ptr.loc16_11.2) [symbolic = %.loc16_12.3 (constants.%.d74)] // CHECK:STDOUT: %DefaultOrUnformed.lookup_impl_witness: = lookup_impl_witness %ptr.loc16_11.2, @DefaultOrUnformed [symbolic = %DefaultOrUnformed.lookup_impl_witness (constants.%DefaultOrUnformed.lookup_impl_witness)] // CHECK:STDOUT: %DefaultOrUnformed.facet.loc16_12.2: %DefaultOrUnformed.type = facet_value %ptr.loc16_11.2, (%DefaultOrUnformed.lookup_impl_witness) [symbolic = %DefaultOrUnformed.facet.loc16_12.2 (constants.%DefaultOrUnformed.facet)] @@ -94,20 +101,21 @@ fn F(T:! type) { // CHECK:STDOUT: %specific_impl_fn.loc16_12.2: = specific_impl_function %impl.elem0.loc16_12.2, @DefaultOrUnformed.WithSelf.Op(%DefaultOrUnformed.facet.loc16_12.2) [symbolic = %specific_impl_fn.loc16_12.2 (constants.%specific_impl_fn.53b)] // CHECK:STDOUT: %require_complete.loc17: = require_complete_type %T.loc15_7.1 [symbolic = %require_complete.loc17 (constants.%require_complete.944)] // CHECK:STDOUT: %pattern_type.loc17: type = pattern_type %T.loc15_7.1 [symbolic = %pattern_type.loc17 (constants.%pattern_type.51d)] +// CHECK:STDOUT: %n.patt.loc17_15.2: @F.%pattern_type.loc17 (%pattern_type.51d) = value_binding_pattern n [symbolic = %n.patt.loc17_15.2 (constants.%n.patt)] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %ptr.loc16_11.2, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness)] -// CHECK:STDOUT: %Destroy.facet.loc16_3.2: %Destroy.type = facet_value %ptr.loc16_11.2, (%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.loc16_3.2 (constants.%Destroy.facet)] -// CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.loc16_3.2) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.8a4)] -// CHECK:STDOUT: %.loc16_3.2: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Destroy.facet.loc16_3.2 [symbolic = %.loc16_3.2 (constants.%.9f8)] -// CHECK:STDOUT: %impl.elem0.loc16_3.2: @F.%.loc16_3.2 (%.9f8) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc16_3.2 (constants.%impl.elem0.258)] -// CHECK:STDOUT: %specific_impl_fn.loc16_3.2: = specific_impl_function %impl.elem0.loc16_3.2, @Destroy.WithSelf.Op(%Destroy.facet.loc16_3.2) [symbolic = %specific_impl_fn.loc16_3.2 (constants.%specific_impl_fn.192)] +// CHECK:STDOUT: %Destroy.facet.loc16_3.3: %Destroy.type = facet_value %ptr.loc16_11.2, (%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.loc16_3.3 (constants.%Destroy.facet)] +// CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.loc16_3.3) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.8a4)] +// CHECK:STDOUT: %.loc16_3.3: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Destroy.facet.loc16_3.3 [symbolic = %.loc16_3.3 (constants.%.9f8)] +// CHECK:STDOUT: %impl.elem0.loc16_3.2: @F.%.loc16_3.3 (%.9f8) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc16_3.2 (constants.%impl.elem0.258)] +// CHECK:STDOUT: %specific_impl_fn.loc16_3.2: = specific_impl_function %impl.elem0.loc16_3.2, @Destroy.WithSelf.Op(%Destroy.facet.loc16_3.3) [symbolic = %specific_impl_fn.loc16_3.2 (constants.%specific_impl_fn.192)] // CHECK:STDOUT: // CHECK:STDOUT: fn() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: @F.%pattern_type.loc16 (%pattern_type.4f4) = ref_binding_pattern p [concrete] -// CHECK:STDOUT: %p.var_patt: @F.%pattern_type.loc16 (%pattern_type.4f4) = var_pattern %p.patt [concrete] +// CHECK:STDOUT: %p.patt.loc16_8.1: @F.%pattern_type.loc16 (%pattern_type.4f4) = ref_binding_pattern p [symbolic = %p.patt.loc16_8.2 (constants.%p.patt)] +// CHECK:STDOUT: %p.var_patt.loc16_3.1: @F.%pattern_type.loc16 (%pattern_type.4f4) = var_pattern %p.patt.loc16_8.1 [symbolic = %p.var_patt.loc16_3.2 (constants.%p.var_patt)] // CHECK:STDOUT: } -// CHECK:STDOUT: %p.var: ref @F.%ptr.loc16_11.2 (%ptr) = var %p.var_patt +// CHECK:STDOUT: %p.var: ref @F.%ptr.loc16_11.2 (%ptr) = var %p.var_patt.loc16_3.1 // CHECK:STDOUT: %DefaultOrUnformed.facet.loc16_12.1: %DefaultOrUnformed.type = facet_value constants.%ptr, (constants.%DefaultOrUnformed.lookup_impl_witness) [symbolic = %DefaultOrUnformed.facet.loc16_12.2 (constants.%DefaultOrUnformed.facet)] // CHECK:STDOUT: %.loc16_12.1: %DefaultOrUnformed.type = converted constants.%ptr, %DefaultOrUnformed.facet.loc16_12.1 [symbolic = %DefaultOrUnformed.facet.loc16_12.2 (constants.%DefaultOrUnformed.facet)] // CHECK:STDOUT: %as_type: type = facet_access_type %.loc16_12.1 [symbolic = %ptr.loc16_11.2 (constants.%ptr)] @@ -122,18 +130,20 @@ fn F(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %p: ref @F.%ptr.loc16_11.2 (%ptr) = ref_binding p, %p.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: @F.%pattern_type.loc17 (%pattern_type.51d) = value_binding_pattern n [concrete] +// CHECK:STDOUT: %n.patt.loc17_15.1: @F.%pattern_type.loc17 (%pattern_type.51d) = value_binding_pattern n [symbolic = %n.patt.loc17_15.2 (constants.%n.patt)] // CHECK:STDOUT: } // CHECK:STDOUT: %p.ref: ref @F.%ptr.loc16_11.2 (%ptr) = name_ref p, %p // CHECK:STDOUT: %.loc17_22: @F.%ptr.loc16_11.2 (%ptr) = acquire_value %p.ref // CHECK:STDOUT: %.loc17_21.1: ref @F.%T.loc15_7.1 (%T.67d) = deref %.loc17_22 -// CHECK:STDOUT: %T.ref.loc17: type = name_ref T, %T.loc15_7.2 [symbolic = %T.loc15_7.1 (constants.%T.67d)] // CHECK:STDOUT: %.loc17_21.2: @F.%T.loc15_7.1 (%T.67d) = acquire_value %.loc17_21.1 +// CHECK:STDOUT: %T.ref.loc17: type = name_ref T, %T.loc15_7.2 [symbolic = %T.loc15_7.1 (constants.%T.67d)] // CHECK:STDOUT: %n: @F.%T.loc15_7.1 (%T.67d) = value_binding n, %.loc17_21.2 -// CHECK:STDOUT: %impl.elem0.loc16_3.1: @F.%.loc16_3.2 (%.9f8) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc16_3.2 (constants.%impl.elem0.258)] +// CHECK:STDOUT: %impl.elem0.loc16_3.1: @F.%.loc16_3.3 (%.9f8) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc16_3.2 (constants.%impl.elem0.258)] // CHECK:STDOUT: %bound_method.loc16_3.1: = bound_method %p.var, %impl.elem0.loc16_3.1 -// CHECK:STDOUT: %Destroy.facet.loc16_3.1: %Destroy.type = facet_value constants.%ptr, (constants.%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.loc16_3.2 (constants.%Destroy.facet)] -// CHECK:STDOUT: %.loc16_3.1: %Destroy.type = converted constants.%ptr, %Destroy.facet.loc16_3.1 [symbolic = %Destroy.facet.loc16_3.2 (constants.%Destroy.facet)] +// CHECK:STDOUT: %Destroy.facet.loc16_3.1: %Destroy.type = facet_value constants.%ptr, (constants.%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.loc16_3.3 (constants.%Destroy.facet)] +// CHECK:STDOUT: %.loc16_3.1: %Destroy.type = converted constants.%ptr, %Destroy.facet.loc16_3.1 [symbolic = %Destroy.facet.loc16_3.3 (constants.%Destroy.facet)] +// CHECK:STDOUT: %Destroy.facet.loc16_3.2: %Destroy.type = facet_value constants.%ptr, (constants.%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.loc16_3.3 (constants.%Destroy.facet)] +// CHECK:STDOUT: %.loc16_3.2: %Destroy.type = converted constants.%ptr, %Destroy.facet.loc16_3.2 [symbolic = %Destroy.facet.loc16_3.3 (constants.%Destroy.facet)] // CHECK:STDOUT: %specific_impl_fn.loc16_3.1: = specific_impl_function %impl.elem0.loc16_3.1, @Destroy.WithSelf.Op(constants.%Destroy.facet) [symbolic = %specific_impl_fn.loc16_3.2 (constants.%specific_impl_fn.192)] // CHECK:STDOUT: %bound_method.loc16_3.2: = bound_method %p.var, %specific_impl_fn.loc16_3.1 // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc16_3.2(%p.var) @@ -142,6 +152,7 @@ fn F(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T.67d) { +// CHECK:STDOUT: %T.patt.loc15_7.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc15_7.1 => constants.%T.67d // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/function/generic/type_param_scope.carbon b/toolchain/check/testdata/function/generic/type_param_scope.carbon index f34271eb8c7f..be9cfc7f23d6 100644 --- a/toolchain/check/testdata/function/generic/type_param_scope.carbon +++ b/toolchain/check/testdata/function/generic/type_param_scope.carbon @@ -25,10 +25,17 @@ fn F(T:! type, n: T*) -> T* { // CHECK:STDOUT: --- local_let.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.d47: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %ptr: type = ptr_type %T.67d [symbolic] // CHECK:STDOUT: %pattern_type.4f4: type = pattern_type %ptr [symbolic] +// CHECK:STDOUT: %n.param_patt: %pattern_type.4f4 = value_param_pattern [symbolic] +// CHECK:STDOUT: %n.patt: %pattern_type.4f4 = at_binding_pattern n, %n.param_patt [symbolic] // CHECK:STDOUT: %.cb6: Core.Form = init_form %ptr [symbolic] +// CHECK:STDOUT: %return.param_patt.27f: %pattern_type.4f4 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.d67: %pattern_type.4f4 = return_slot_pattern %return.param_patt.27f, %ptr [symbolic] +// CHECK:STDOUT: %m.patt: %pattern_type.4f4 = value_binding_pattern m [symbolic] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %Copy.lookup_impl_witness.1da: = lookup_impl_witness %ptr, @Copy [symbolic] // CHECK:STDOUT: %.0e9: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.67d) [symbolic] @@ -44,18 +51,19 @@ fn F(T:! type, n: T*) -> T* { // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: -// CHECK:STDOUT: %.loc7_10.2: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.loc4_7.1) [symbolic = %.loc7_10.2 (constants.%.0e9)] +// CHECK:STDOUT: %m.patt.loc6_8.2: @F.%pattern_type (%pattern_type.4f4) = value_binding_pattern m [symbolic = %m.patt.loc6_8.2 (constants.%m.patt)] +// CHECK:STDOUT: %.loc7_10.3: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.loc4_7.1) [symbolic = %.loc7_10.3 (constants.%.0e9)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %ptr.loc4_20.1, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.1da)] -// CHECK:STDOUT: %Copy.facet.loc7_10.2: %Copy.type = facet_value %ptr.loc4_20.1, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc7_10.2 (constants.%Copy.facet)] -// CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.loc7_10.2) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.884)] -// CHECK:STDOUT: %.loc7_10.3: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %Copy.facet.loc7_10.2 [symbolic = %.loc7_10.3 (constants.%.be5)] -// CHECK:STDOUT: %impl.elem0.loc7_10.2: @F.%.loc7_10.3 (%.be5) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc7_10.2 (constants.%impl.elem0.484)] -// CHECK:STDOUT: %specific_impl_fn.loc7_10.2: = specific_impl_function %impl.elem0.loc7_10.2, @Copy.WithSelf.Op(%Copy.facet.loc7_10.2) [symbolic = %specific_impl_fn.loc7_10.2 (constants.%specific_impl_fn.a76)] +// CHECK:STDOUT: %Copy.facet.loc7_10.3: %Copy.type = facet_value %ptr.loc4_20.1, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc7_10.3 (constants.%Copy.facet)] +// CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.loc7_10.3) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.884)] +// CHECK:STDOUT: %.loc7_10.4: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %Copy.facet.loc7_10.3 [symbolic = %.loc7_10.4 (constants.%.be5)] +// CHECK:STDOUT: %impl.elem0.loc7_10.2: @F.%.loc7_10.4 (%.be5) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc7_10.2 (constants.%impl.elem0.484)] +// CHECK:STDOUT: %specific_impl_fn.loc7_10.2: = specific_impl_function %impl.elem0.loc7_10.2, @Copy.WithSelf.Op(%Copy.facet.loc7_10.3) [symbolic = %specific_impl_fn.loc7_10.2 (constants.%specific_impl_fn.a76)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%n.param: @F.%ptr.loc4_20.1 (%ptr)) -> out %return.param: @F.%ptr.loc4_20.1 (%ptr) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %m.patt: @F.%pattern_type (%pattern_type.4f4) = value_binding_pattern m [concrete] +// CHECK:STDOUT: %m.patt.loc6_8.1: @F.%pattern_type (%pattern_type.4f4) = value_binding_pattern m [symbolic = %m.patt.loc6_8.2 (constants.%m.patt)] // CHECK:STDOUT: } // CHECK:STDOUT: %n.ref: @F.%ptr.loc4_20.1 (%ptr) = name_ref n, %n // CHECK:STDOUT: %.loc6: type = splice_block %ptr.loc6 [symbolic = %ptr.loc4_20.1 (constants.%ptr)] { @@ -64,10 +72,12 @@ fn F(T:! type, n: T*) -> T* { // CHECK:STDOUT: } // CHECK:STDOUT: %m: @F.%ptr.loc4_20.1 (%ptr) = value_binding m, %n.ref // CHECK:STDOUT: %m.ref: @F.%ptr.loc4_20.1 (%ptr) = name_ref m, %m -// CHECK:STDOUT: %impl.elem0.loc7_10.1: @F.%.loc7_10.3 (%.be5) = impl_witness_access constants.%Copy.lookup_impl_witness.1da, element0 [symbolic = %impl.elem0.loc7_10.2 (constants.%impl.elem0.484)] +// CHECK:STDOUT: %impl.elem0.loc7_10.1: @F.%.loc7_10.4 (%.be5) = impl_witness_access constants.%Copy.lookup_impl_witness.1da, element0 [symbolic = %impl.elem0.loc7_10.2 (constants.%impl.elem0.484)] // CHECK:STDOUT: %bound_method.loc7_10.1: = bound_method %m.ref, %impl.elem0.loc7_10.1 -// CHECK:STDOUT: %Copy.facet.loc7_10.1: %Copy.type = facet_value constants.%ptr, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc7_10.2 (constants.%Copy.facet)] -// CHECK:STDOUT: %.loc7_10.1: %Copy.type = converted constants.%ptr, %Copy.facet.loc7_10.1 [symbolic = %Copy.facet.loc7_10.2 (constants.%Copy.facet)] +// CHECK:STDOUT: %Copy.facet.loc7_10.1: %Copy.type = facet_value constants.%ptr, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc7_10.3 (constants.%Copy.facet)] +// CHECK:STDOUT: %.loc7_10.1: %Copy.type = converted constants.%ptr, %Copy.facet.loc7_10.1 [symbolic = %Copy.facet.loc7_10.3 (constants.%Copy.facet)] +// CHECK:STDOUT: %Copy.facet.loc7_10.2: %Copy.type = facet_value constants.%ptr, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc7_10.3 (constants.%Copy.facet)] +// CHECK:STDOUT: %.loc7_10.2: %Copy.type = converted constants.%ptr, %Copy.facet.loc7_10.2 [symbolic = %Copy.facet.loc7_10.3 (constants.%Copy.facet)] // CHECK:STDOUT: %specific_impl_fn.loc7_10.1: = specific_impl_function %impl.elem0.loc7_10.1, @Copy.WithSelf.Op(constants.%Copy.facet) [symbolic = %specific_impl_fn.loc7_10.2 (constants.%specific_impl_fn.a76)] // CHECK:STDOUT: %bound_method.loc7_10.2: = bound_method %m.ref, %specific_impl_fn.loc7_10.1 // CHECK:STDOUT: %Copy.WithSelf.Op.call: init @F.%ptr.loc4_20.1 (%ptr) = call %bound_method.loc7_10.2(%m.ref) @@ -76,9 +86,14 @@ fn F(T:! type, n: T*) -> T* { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T.67d) { +// CHECK:STDOUT: %T.patt.loc4_7.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc4_7.1 => constants.%T.67d // CHECK:STDOUT: %ptr.loc4_20.1 => constants.%ptr // CHECK:STDOUT: %pattern_type => constants.%pattern_type.4f4 +// CHECK:STDOUT: %n.param_patt.loc4_17.2 => constants.%n.param_patt +// CHECK:STDOUT: %n.patt.loc4_17.2 => constants.%n.patt // CHECK:STDOUT: %.loc4_27.1 => constants.%.cb6 +// CHECK:STDOUT: %return.param_patt.loc4_27.2 => constants.%return.param_patt.27f +// CHECK:STDOUT: %return.patt.loc4_23.2 => constants.%return.patt.d67 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/generic/call_basic_depth.carbon b/toolchain/check/testdata/generic/call_basic_depth.carbon index facb84070cc5..724d3adb62c4 100644 --- a/toolchain/check/testdata/generic/call_basic_depth.carbon +++ b/toolchain/check/testdata/generic/call_basic_depth.carbon @@ -53,24 +53,32 @@ fn M() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %x.param_patt.91d: %pattern_type.51d = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.800c32.1: %pattern_type.51d = at_binding_pattern x, %x.param_patt.91d [symbolic] // CHECK:STDOUT: %C.Cfn.type: type = fn_type @C.Cfn [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %C.Cfn: %C.Cfn.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic] +// CHECK:STDOUT: %x.patt.800c32.2: %pattern_type.51d = at_binding_pattern x, %x.param_patt.91d [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] +// CHECK:STDOUT: %x.patt.800c32.3: %pattern_type.51d = at_binding_pattern x, %x.param_patt.91d [symbolic] // CHECK:STDOUT: %H.type: type = fn_type @H [concrete] // CHECK:STDOUT: %H: %H.type = struct_value () [concrete] // CHECK:STDOUT: %F.specific_fn.eab: = specific_function %F, @F(%T) [symbolic] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %H.specific_fn.e9c: = specific_function %H, @H(%T) [symbolic] +// CHECK:STDOUT: %x.param_patt.0f9: %pattern_type.98b = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.2ccf4d.1: %pattern_type.98b = at_binding_pattern x, %x.param_patt.0f9 [concrete] // CHECK:STDOUT: %F.specific_fn.e0d: = specific_function %F, @F(%C) [concrete] +// CHECK:STDOUT: %x.patt.2ccf4d.2: %pattern_type.98b = at_binding_pattern x, %x.param_patt.0f9 [concrete] // CHECK:STDOUT: %G.specific_fn: = specific_function %G, @G(%C) [concrete] // CHECK:STDOUT: %H.specific_fn.ca8: = specific_function %H, @H(%C) [concrete] // CHECK:STDOUT: %C.Cfn.specific_fn.380: = specific_function %C.Cfn, @C.Cfn(%C) [concrete] @@ -78,9 +86,9 @@ fn M() { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %x.param_patt: @F.%pattern_type (%pattern_type.51d) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @F.%pattern_type (%pattern_type.51d) = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %T.patt.loc19_7.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc19_7.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.param_patt.loc19_24.1: @F.%pattern_type (%pattern_type.51d) = value_param_pattern [symbolic = %x.param_patt.loc19_24.2 (constants.%x.param_patt.91d)] +// CHECK:STDOUT: %x.patt.loc19_24.1: @F.%pattern_type (%pattern_type.51d) = at_binding_pattern x, %x.param_patt.loc19_24.1 [symbolic = %x.patt.loc19_24.2 (constants.%x.patt.800c32.2)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc19_10.1: type = splice_block %.loc19_10.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -94,8 +102,11 @@ fn M() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc19_7.2: type) { +// CHECK:STDOUT: %T.patt.loc19_7.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc19_7.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc19_7.1: type = symbolic_binding T, 0 [symbolic = %T.loc19_7.1 (constants.%T)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc19_7.1 [symbolic = %pattern_type (constants.%pattern_type.51d)] +// CHECK:STDOUT: %x.param_patt.loc19_24.2: @F.%pattern_type (%pattern_type.51d) = value_param_pattern [symbolic = %x.param_patt.loc19_24.2 (constants.%x.param_patt.91d)] +// CHECK:STDOUT: %x.patt.loc19_24.2: @F.%pattern_type (%pattern_type.51d) = at_binding_pattern x, %x.param_patt.loc19_24.2 [symbolic = %x.patt.loc19_24.2 (constants.%x.patt.800c32.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc19_7.1 [symbolic = %require_complete (constants.%require_complete)] @@ -163,16 +174,22 @@ fn M() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T) { +// CHECK:STDOUT: %T.patt.loc19_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc19_7.1 => constants.%T // CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d +// CHECK:STDOUT: %x.param_patt.loc19_24.2 => constants.%x.param_patt.91d +// CHECK:STDOUT: %x.patt.loc19_24.2 => constants.%x.patt.800c32.1 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @H(constants.%T) { +// CHECK:STDOUT: %T.patt.loc23_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc23_7.1 => constants.%T // CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d +// CHECK:STDOUT: %x.param_patt.loc23_17.2 => constants.%x.param_patt.91d +// CHECK:STDOUT: %x.patt.loc23_17.2 => constants.%x.patt.800c32.3 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete @@ -180,21 +197,30 @@ fn M() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%T) { +// CHECK:STDOUT: %T.patt.loc29_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc29_7.1 => constants.%T // CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d +// CHECK:STDOUT: %x.param_patt.loc29_17.2 => constants.%x.param_patt.91d +// CHECK:STDOUT: %x.patt.loc29_17.2 => constants.%x.patt.800c32.3 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%C) { +// CHECK:STDOUT: %T.patt.loc19_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc19_7.1 => constants.%C // CHECK:STDOUT: %pattern_type => constants.%pattern_type.98b +// CHECK:STDOUT: %x.param_patt.loc19_24.2 => constants.%x.param_patt.0f9 +// CHECK:STDOUT: %x.patt.loc19_24.2 => constants.%x.patt.2ccf4d.1 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%C) { +// CHECK:STDOUT: %T.patt.loc29_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc29_7.1 => constants.%C // CHECK:STDOUT: %pattern_type => constants.%pattern_type.98b +// CHECK:STDOUT: %x.param_patt.loc29_17.2 => constants.%x.param_patt.0f9 +// CHECK:STDOUT: %x.patt.loc29_17.2 => constants.%x.patt.2ccf4d.2 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type @@ -204,8 +230,11 @@ fn M() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @H(constants.%C) { +// CHECK:STDOUT: %T.patt.loc23_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc23_7.1 => constants.%C // CHECK:STDOUT: %pattern_type => constants.%pattern_type.98b +// CHECK:STDOUT: %x.param_patt.loc23_17.2 => constants.%x.param_patt.0f9 +// CHECK:STDOUT: %x.patt.loc23_17.2 => constants.%x.patt.2ccf4d.2 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type diff --git a/toolchain/check/testdata/generic/complete_type.carbon b/toolchain/check/testdata/generic/complete_type.carbon index 62fad13ea69b..1d2e54b50df4 100644 --- a/toolchain/check/testdata/generic/complete_type.carbon +++ b/toolchain/check/testdata/generic/complete_type.carbon @@ -87,18 +87,25 @@ fn G(p: B*) { F(B, p); } // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %A.type: type = generic_class_type @A [concrete] // CHECK:STDOUT: %A.generic: %A.type = struct_value () [concrete] // CHECK:STDOUT: %A.47a: type = class_type @A, @A(%T) [symbolic] // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic] +// CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %v.patt.a77: %pattern_type.51d = ref_binding_pattern v [symbolic] // CHECK:STDOUT: %A.elem.d41: type = unbound_element_type %A.47a, %T [symbolic] // CHECK:STDOUT: %struct_type.v.a4d: type = struct_type {.v: %T} [symbolic] // CHECK:STDOUT: %complete_type.136: = complete_type_witness %struct_type.v.a4d [symbolic] // CHECK:STDOUT: %A.d32: type = class_type @A, @A(%B) [concrete] // CHECK:STDOUT: %pattern_type.b3e: type = pattern_type %A.d32 [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.b3e = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.b3e = at_binding_pattern x, %x.param_patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.e39: type = pattern_type %B [concrete] +// CHECK:STDOUT: %v.patt.f3a: %pattern_type.e39 = ref_binding_pattern v [concrete] // CHECK:STDOUT: %A.elem.483: type = unbound_element_type %A.d32, %B [concrete] // CHECK:STDOUT: %struct_type.v.410: type = struct_type {.v: %B} [concrete] // CHECK:STDOUT: %complete_type.a68: = complete_type_witness %struct_type.v.410 [concrete] @@ -123,7 +130,7 @@ fn G(p: B*) { F(B, p); } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %B.decl.loc4: type = class_decl @B [concrete = constants.%B] {} {} // CHECK:STDOUT: %A.decl: %A.type = class_decl @A [concrete = constants.%A.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc6_10.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_10.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6_13.1: type = splice_block %.loc6_13.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -132,8 +139,8 @@ fn G(p: B*) { F(B, p); } // CHECK:STDOUT: %T.loc6_10.2: type = symbolic_binding T, 0 [symbolic = %T.loc6_10.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %x.param_patt: %pattern_type.b3e = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.b3e = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.b3e = value_param_pattern [concrete = constants.%x.param_patt] +// CHECK:STDOUT: %x.patt: %pattern_type.b3e = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %A.d32 = value_param call_param0 // CHECK:STDOUT: %.loc27: type = splice_block %A [concrete = constants.%A.d32] { @@ -155,10 +162,13 @@ fn G(p: B*) { F(B, p); } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @A(%T.loc6_10.2: type) { +// CHECK:STDOUT: %T.patt.loc6_10.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_10.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc6_10.1: type = symbolic_binding T, 0 [symbolic = %T.loc6_10.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc6_10.1 [symbolic = %require_complete (constants.%require_complete)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc6_10.1 [symbolic = %pattern_type (constants.%pattern_type.51d)] +// CHECK:STDOUT: %v.patt: @A.%pattern_type (%pattern_type.51d) = ref_binding_pattern v [symbolic = %v.patt (constants.%v.patt.a77)] // CHECK:STDOUT: %A: type = class_type @A, @A(%T.loc6_10.1) [symbolic = %A (constants.%A.47a)] // CHECK:STDOUT: %A.elem: type = unbound_element_type %A, %T.loc6_10.1 [symbolic = %A.elem (constants.%A.elem.d41)] // CHECK:STDOUT: %struct_type.v: type = struct_type {.v: @A.%T.loc6_10.1 (%T)} [symbolic = %struct_type.v (constants.%struct_type.v.a4d)] @@ -182,14 +192,18 @@ fn G(p: B*) { F(B, p); } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A(constants.%T) { +// CHECK:STDOUT: %T.patt.loc6_10.2 => constants.%T.patt // CHECK:STDOUT: %T.loc6_10.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A(constants.%B) { +// CHECK:STDOUT: %T.patt.loc6_10.2 => constants.%T.patt // CHECK:STDOUT: %T.loc6_10.1 => constants.%B // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.e39 +// CHECK:STDOUT: %v.patt => constants.%v.patt.f3a // CHECK:STDOUT: %A => constants.%A.d32 // CHECK:STDOUT: %A.elem => constants.%A.elem.483 // CHECK:STDOUT: %struct_type.v => constants.%struct_type.v.410 @@ -203,17 +217,24 @@ fn G(p: B*) { F(B, p); } // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %ptr.e8f: type = ptr_type %T [symbolic] // CHECK:STDOUT: %pattern_type.4f4: type = pattern_type %ptr.e8f [symbolic] +// CHECK:STDOUT: %v.param_patt.88d: %pattern_type.4f4 = value_param_pattern [symbolic] +// CHECK:STDOUT: %v.patt.ddf: %pattern_type.4f4 = at_binding_pattern v, %v.param_patt.88d [symbolic] // 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: %require_complete: = require_complete_type %ptr.e8f [symbolic] // CHECK:STDOUT: %ptr.432: type = ptr_type %B [concrete] // CHECK:STDOUT: %pattern_type.3c8: type = pattern_type %ptr.432 [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.3c8 = value_param_pattern [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.3c8 = at_binding_pattern p, %p.param_patt [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] +// CHECK:STDOUT: %v.param_patt.8ec: %pattern_type.3c8 = value_param_pattern [concrete] +// CHECK:STDOUT: %v.patt.24a: %pattern_type.3c8 = at_binding_pattern v, %v.param_patt.8ec [concrete] // CHECK:STDOUT: %F.specific_fn: = specific_function %F, @F(%B) [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] @@ -237,9 +258,9 @@ fn G(p: B*) { F(B, p); } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %B.decl.loc4: 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.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %v.param_patt: @F.%pattern_type (%pattern_type.4f4) = value_param_pattern [concrete] -// CHECK:STDOUT: %v.patt: @F.%pattern_type (%pattern_type.4f4) = at_binding_pattern v, %v.param_patt [concrete] +// CHECK:STDOUT: %T.patt.loc6_7.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_7.2 (constants.%T.patt)] +// CHECK:STDOUT: %v.param_patt.loc6_17.1: @F.%pattern_type (%pattern_type.4f4) = value_param_pattern [symbolic = %v.param_patt.loc6_17.2 (constants.%v.param_patt.88d)] +// CHECK:STDOUT: %v.patt.loc6_17.1: @F.%pattern_type (%pattern_type.4f4) = at_binding_pattern v, %v.param_patt.loc6_17.1 [symbolic = %v.patt.loc6_17.2 (constants.%v.patt.ddf)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6_10.1: type = splice_block %.loc6_10.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -254,8 +275,8 @@ fn G(p: B*) { F(B, p); } // CHECK:STDOUT: %v: @F.%ptr.loc6_20.1 (%ptr.e8f) = value_binding v, %v.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %p.param_patt: %pattern_type.3c8 = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.3c8 = at_binding_pattern p, %p.param_patt [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.3c8 = value_param_pattern [concrete = constants.%p.param_patt] +// CHECK:STDOUT: %p.patt: %pattern_type.3c8 = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %p.param: %ptr.432 = value_param call_param0 // CHECK:STDOUT: %.loc11: type = splice_block %ptr [concrete = constants.%ptr.432] { @@ -276,9 +297,12 @@ fn G(p: B*) { F(B, p); } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc6_7.2: type) { +// CHECK:STDOUT: %T.patt.loc6_7.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_7.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc6_7.1: type = symbolic_binding T, 0 [symbolic = %T.loc6_7.1 (constants.%T)] // CHECK:STDOUT: %ptr.loc6_20.1: type = ptr_type %T.loc6_7.1 [symbolic = %ptr.loc6_20.1 (constants.%ptr.e8f)] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc6_20.1 [symbolic = %pattern_type (constants.%pattern_type.4f4)] +// CHECK:STDOUT: %v.param_patt.loc6_17.2: @F.%pattern_type (%pattern_type.4f4) = value_param_pattern [symbolic = %v.param_patt.loc6_17.2 (constants.%v.param_patt.88d)] +// CHECK:STDOUT: %v.patt.loc6_17.2: @F.%pattern_type (%pattern_type.4f4) = at_binding_pattern v, %v.param_patt.loc6_17.2 [symbolic = %v.patt.loc6_17.2 (constants.%v.patt.ddf)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %ptr.loc6_20.1 [symbolic = %require_complete (constants.%require_complete)] @@ -302,15 +326,21 @@ fn G(p: B*) { F(B, p); } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T) { +// CHECK:STDOUT: %T.patt.loc6_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc6_7.1 => constants.%T // CHECK:STDOUT: %ptr.loc6_20.1 => constants.%ptr.e8f // CHECK:STDOUT: %pattern_type => constants.%pattern_type.4f4 +// CHECK:STDOUT: %v.param_patt.loc6_17.2 => constants.%v.param_patt.88d +// CHECK:STDOUT: %v.patt.loc6_17.2 => constants.%v.patt.ddf // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%B) { +// CHECK:STDOUT: %T.patt.loc6_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc6_7.1 => constants.%B // CHECK:STDOUT: %ptr.loc6_20.1 => constants.%ptr.432 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.3c8 +// CHECK:STDOUT: %v.param_patt.loc6_17.2 => constants.%v.param_patt.8ec +// CHECK:STDOUT: %v.patt.loc6_17.2 => constants.%v.patt.24a // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.85b @@ -323,22 +353,29 @@ fn G(p: B*) { F(B, p); } // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %ptr.e8f: type = ptr_type %T [symbolic] // CHECK:STDOUT: %pattern_type.4f4: type = pattern_type %ptr.e8f [symbolic] +// CHECK:STDOUT: %p.param_patt.a12: %pattern_type.4f4 = value_param_pattern [symbolic] +// CHECK:STDOUT: %p.patt.14c: %pattern_type.4f4 = at_binding_pattern p, %p.param_patt.a12 [symbolic] // 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: %require_complete.ef1: = require_complete_type %ptr.e8f [symbolic] // CHECK:STDOUT: %require_complete.944: = require_complete_type %T [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %_.patt.ee9: %pattern_type.51d = value_binding_pattern _ [symbolic] // CHECK:STDOUT: %ptr.432: type = ptr_type %B [concrete] // CHECK:STDOUT: %pattern_type.3c8: type = pattern_type %ptr.432 [concrete] +// CHECK:STDOUT: %p.param_patt.436: %pattern_type.3c8 = value_param_pattern [concrete] +// CHECK:STDOUT: %p.patt.c38: %pattern_type.3c8 = at_binding_pattern p, %p.param_patt.436 [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %F.specific_fn: = specific_function %F, @F(%B) [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %ptr.432 [concrete] // CHECK:STDOUT: %pattern_type.e39: type = pattern_type %B [concrete] +// CHECK:STDOUT: %_.patt.fb1: %pattern_type.e39 = value_binding_pattern _ [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -358,9 +395,9 @@ fn G(p: B*) { F(B, p); } // CHECK:STDOUT: %Core.import = import Core // 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.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %p.param_patt: @F.%pattern_type.loc6 (%pattern_type.4f4) = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: @F.%pattern_type.loc6 (%pattern_type.4f4) = at_binding_pattern p, %p.param_patt [concrete] +// CHECK:STDOUT: %T.patt.loc6_7.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_7.2 (constants.%T.patt)] +// CHECK:STDOUT: %p.param_patt.loc6_17.1: @F.%pattern_type.loc6 (%pattern_type.4f4) = value_param_pattern [symbolic = %p.param_patt.loc6_17.2 (constants.%p.param_patt.a12)] +// CHECK:STDOUT: %p.patt.loc6_17.1: @F.%pattern_type.loc6 (%pattern_type.4f4) = at_binding_pattern p, %p.param_patt.loc6_17.1 [symbolic = %p.patt.loc6_17.2 (constants.%p.patt.14c)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6_10.1: type = splice_block %.loc6_10.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -375,8 +412,8 @@ fn G(p: B*) { F(B, p); } // CHECK:STDOUT: %p: @F.%ptr.loc6_20.1 (%ptr.e8f) = value_binding p, %p.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %p.param_patt: %pattern_type.3c8 = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.3c8 = at_binding_pattern p, %p.param_patt [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.3c8 = value_param_pattern [concrete = constants.%p.param_patt.436] +// CHECK:STDOUT: %p.patt: %pattern_type.3c8 = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt.c38] // CHECK:STDOUT: } { // CHECK:STDOUT: %p.param: %ptr.432 = value_param call_param0 // CHECK:STDOUT: %.loc20: type = splice_block %ptr [concrete = constants.%ptr.432] { @@ -390,24 +427,28 @@ fn G(p: B*) { F(B, p); } // CHECK:STDOUT: class @B; // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc6_7.2: type) { +// CHECK:STDOUT: %T.patt.loc6_7.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_7.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc6_7.1: type = symbolic_binding T, 0 [symbolic = %T.loc6_7.1 (constants.%T)] // CHECK:STDOUT: %ptr.loc6_20.1: type = ptr_type %T.loc6_7.1 [symbolic = %ptr.loc6_20.1 (constants.%ptr.e8f)] // CHECK:STDOUT: %pattern_type.loc6: type = pattern_type %ptr.loc6_20.1 [symbolic = %pattern_type.loc6 (constants.%pattern_type.4f4)] +// CHECK:STDOUT: %p.param_patt.loc6_17.2: @F.%pattern_type.loc6 (%pattern_type.4f4) = value_param_pattern [symbolic = %p.param_patt.loc6_17.2 (constants.%p.param_patt.a12)] +// CHECK:STDOUT: %p.patt.loc6_17.2: @F.%pattern_type.loc6 (%pattern_type.4f4) = at_binding_pattern p, %p.param_patt.loc6_17.2 [symbolic = %p.patt.loc6_17.2 (constants.%p.patt.14c)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc6: = require_complete_type %ptr.loc6_20.1 [symbolic = %require_complete.loc6 (constants.%require_complete.ef1)] // CHECK:STDOUT: %require_complete.loc7: = require_complete_type %T.loc6_7.1 [symbolic = %require_complete.loc7 (constants.%require_complete.944)] // CHECK:STDOUT: %pattern_type.loc7: type = pattern_type %T.loc6_7.1 [symbolic = %pattern_type.loc7 (constants.%pattern_type.51d)] +// CHECK:STDOUT: %_.patt.loc7_8.2: @F.%pattern_type.loc7 (%pattern_type.51d) = value_binding_pattern _ [symbolic = %_.patt.loc7_8.2 (constants.%_.patt.ee9)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%p.param: @F.%ptr.loc6_20.1 (%ptr.e8f)) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt: @F.%pattern_type.loc7 (%pattern_type.51d) = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt.loc7_8.1: @F.%pattern_type.loc7 (%pattern_type.51d) = value_binding_pattern _ [symbolic = %_.patt.loc7_8.2 (constants.%_.patt.ee9)] // CHECK:STDOUT: } // CHECK:STDOUT: %p.ref: @F.%ptr.loc6_20.1 (%ptr.e8f) = name_ref p, %p // CHECK:STDOUT: %.loc7_14.1: ref @F.%T.loc6_7.1 (%T) = deref %p.ref -// CHECK:STDOUT: %T.ref.loc7: type = name_ref T, %T.loc6_7.2 [symbolic = %T.loc6_7.1 (constants.%T)] // CHECK:STDOUT: %.loc7_14.2: @F.%T.loc6_7.1 (%T) = acquire_value %.loc7_14.1 +// CHECK:STDOUT: %T.ref.loc7: type = name_ref T, %T.loc6_7.2 [symbolic = %T.loc6_7.1 (constants.%T)] // CHECK:STDOUT: %_: @F.%T.loc6_7.1 (%T) = value_binding _, %.loc7_14.2 // CHECK:STDOUT: return // CHECK:STDOUT: } @@ -424,19 +465,26 @@ fn G(p: B*) { F(B, p); } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T) { +// CHECK:STDOUT: %T.patt.loc6_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc6_7.1 => constants.%T // CHECK:STDOUT: %ptr.loc6_20.1 => constants.%ptr.e8f // CHECK:STDOUT: %pattern_type.loc6 => constants.%pattern_type.4f4 +// CHECK:STDOUT: %p.param_patt.loc6_17.2 => constants.%p.param_patt.a12 +// CHECK:STDOUT: %p.patt.loc6_17.2 => constants.%p.patt.14c // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%B) { +// CHECK:STDOUT: %T.patt.loc6_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc6_7.1 => constants.%B // CHECK:STDOUT: %ptr.loc6_20.1 => constants.%ptr.432 // CHECK:STDOUT: %pattern_type.loc6 => constants.%pattern_type.3c8 +// CHECK:STDOUT: %p.param_patt.loc6_17.2 => constants.%p.param_patt.436 +// CHECK:STDOUT: %p.patt.loc6_17.2 => constants.%p.patt.c38 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc6 => constants.%complete_type // CHECK:STDOUT: %require_complete.loc7 => // CHECK:STDOUT: %pattern_type.loc7 => constants.%pattern_type.e39 +// CHECK:STDOUT: %_.patt.loc7_8.2 => constants.%_.patt.fb1 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/generic/dependent_param.carbon b/toolchain/check/testdata/generic/dependent_param.carbon index 76f8677b9f5d..62275f888f81 100644 --- a/toolchain/check/testdata/generic/dependent_param.carbon +++ b/toolchain/check/testdata/generic/dependent_param.carbon @@ -31,17 +31,22 @@ var n: i32 = Outer(i32).Inner(42).Get(); // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] +// CHECK:STDOUT: %pattern_type.e81: type = pattern_type %Copy.type [concrete] +// CHECK:STDOUT: %T.patt.fe6: %pattern_type.e81 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.f84: %Copy.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Outer.type: type = generic_class_type @Outer [concrete] // CHECK:STDOUT: %Outer.generic: %Outer.type = struct_value () [concrete] // CHECK:STDOUT: %Outer.409: type = class_type @Outer, @Outer(%T.f84) [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T.f84 [symbolic] // CHECK:STDOUT: %pattern_type.2c66b4.2: type = pattern_type %T.as_type [symbolic] +// CHECK:STDOUT: %U.patt.ed4: %pattern_type.2c66b4.2 = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %U.7e5: %T.as_type = symbolic_binding U, 1 [symbolic] // CHECK:STDOUT: %Inner.type.272: type = generic_class_type @Inner, @Outer(%T.f84) [symbolic] // CHECK:STDOUT: %Inner.generic.e21: %Inner.type.272 = struct_value () [symbolic] // CHECK:STDOUT: %Inner.698: type = class_type @Inner, @Inner(%T.f84, %U.7e5) [symbolic] // CHECK:STDOUT: %.1ce700.2: Core.Form = init_form %T.as_type [symbolic] +// CHECK:STDOUT: %return.param_patt.bf4475.2: %pattern_type.2c66b4.2 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.f44: %pattern_type.2c66b4.2 = return_slot_pattern %return.param_patt.bf4475.2, %T.as_type [symbolic] // CHECK:STDOUT: %Inner.Get.type.8de: type = fn_type @Inner.Get, @Inner(%T.f84, %U.7e5) [symbolic] // CHECK:STDOUT: %Inner.Get.e2c: %Inner.Get.type.8de = struct_value () [symbolic] // CHECK:STDOUT: %require_complete.d83: = require_complete_type %T.as_type [symbolic] @@ -58,6 +63,8 @@ var n: i32 = Outer(i32).Inner(42).Get(); // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %complete_type.f8a: = complete_type_witness %i32.builtin [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = ref_binding_pattern n [concrete] +// CHECK:STDOUT: %n.var_patt: %pattern_type.6b6 = var_pattern %n.patt [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.ac8: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N) [symbolic] // CHECK:STDOUT: %Int.as.Copy.impl.Op.5e0: %Int.as.Copy.impl.Op.type.ac8 = struct_value () [symbolic] // CHECK:STDOUT: %Copy.impl_witness.0e0: = impl_witness imports.%Copy.impl_witness_table.367, @Int.as.Copy.impl(%int_32) [concrete] @@ -82,12 +89,15 @@ var n: i32 = Outer(i32).Inner(42).Get(); // CHECK:STDOUT: %.1c5: type = fn_type_with_self_type %ImplicitAs.WithSelf.Convert.type.740, %ImplicitAs.facet [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound: = bound_method %int_42.20e, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39, @Core.IntLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete] // CHECK:STDOUT: %bound_method.098: = bound_method %int_42.20e, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_42.ac4: %i32 = int_value 42 [concrete] +// CHECK:STDOUT: %U.patt.a76: %pattern_type.6b6 = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %Inner.aad: type = class_type @Inner, @Inner(%Copy.facet.987, %int_42.ac4) [concrete] // CHECK:STDOUT: %Inner.Get.type.6e9: type = fn_type @Inner.Get, @Inner(%Copy.facet.987, %int_42.ac4) [concrete] // CHECK:STDOUT: %Inner.Get.bb6: %Inner.Get.type.6e9 = struct_value () [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %Inner.Get.specific_fn: = specific_function %Inner.Get.bb6, @Inner.Get(%Copy.facet.987, %int_42.ac4) [concrete] // CHECK:STDOUT: %Copy.WithSelf.Op.type.d09: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.987) [concrete] // CHECK:STDOUT: %.7a6: type = fn_type_with_self_type %Copy.WithSelf.Op.type.d09, %Copy.facet.987 [concrete] @@ -107,8 +117,8 @@ var n: i32 = Outer(i32).Inner(42).Get(); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = ref_binding_pattern n [concrete] -// CHECK:STDOUT: %n.var_patt: %pattern_type.6b6 = var_pattern %n.patt [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = ref_binding_pattern n [concrete = constants.%n.patt] +// CHECK:STDOUT: %n.var_patt: %pattern_type.6b6 = var_pattern %n.patt [concrete = constants.%n.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %n.var: ref %i32 = var %n.var_patt [concrete] // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] @@ -141,8 +151,8 @@ var n: i32 = Outer(i32).Inner(42).Get(); // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %Inner.Get.decl: @Inner.%Inner.Get.type (%Inner.Get.type.8de) = fn_decl @Inner.Get [symbolic = @Inner.%Inner.Get (constants.%Inner.Get.e2c)] { -// CHECK:STDOUT: %return.param_patt: @Inner.Get.%pattern_type (%pattern_type.2c66b4.2) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @Inner.Get.%pattern_type (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt, %.loc7_17.3 [concrete] +// CHECK:STDOUT: %return.param_patt.loc7_17.1: @Inner.Get.%pattern_type (%pattern_type.2c66b4.2) = out_param_pattern [symbolic = %return.param_patt.loc7_17.2 (constants.%return.param_patt.bf4475.2)] +// CHECK:STDOUT: %return.patt.loc7_14.1: @Inner.Get.%pattern_type (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt.loc7_17.1, %.loc7_17.3 [symbolic = %return.patt.loc7_14.2 (constants.%return.patt.f44)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: %Copy.type = name_ref T, @Outer.%T.loc4_14.2 [symbolic = %T (constants.%T.f84)] // CHECK:STDOUT: %T.as_type.loc7_17.2: type = facet_access_type %T.ref [symbolic = %T.as_type.loc7_17.1 (constants.%T.as_type)] @@ -167,14 +177,16 @@ var n: i32 = Outer(i32).Inner(42).Get(); // CHECK:STDOUT: %T.as_type.loc7_17.1: type = facet_access_type %T [symbolic = %T.as_type.loc7_17.1 (constants.%T.as_type)] // CHECK:STDOUT: %.loc7_17.2: Core.Form = init_form %T.as_type.loc7_17.1 [symbolic = %.loc7_17.2 (constants.%.1ce700.2)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc7_17.1 [symbolic = %pattern_type (constants.%pattern_type.2c66b4.2)] +// CHECK:STDOUT: %return.param_patt.loc7_17.2: @Inner.Get.%pattern_type (%pattern_type.2c66b4.2) = out_param_pattern [symbolic = %return.param_patt.loc7_17.2 (constants.%return.param_patt.bf4475.2)] +// CHECK:STDOUT: %return.patt.loc7_14.2: @Inner.Get.%pattern_type (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt.loc7_17.2, %T.as_type.loc7_17.1 [symbolic = %return.patt.loc7_14.2 (constants.%return.patt.f44)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc7_17.1 [symbolic = %require_complete (constants.%require_complete.d83)] // CHECK:STDOUT: %U: @Inner.Get.%T.as_type.loc7_17.1 (%T.as_type) = symbolic_binding U, 1 [symbolic = %U (constants.%U.7e5)] // CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%T) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.c85f21.2)] -// CHECK:STDOUT: %.loc7_28.2: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %T [symbolic = %.loc7_28.2 (constants.%.c29)] +// CHECK:STDOUT: %.loc7_28.3: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %T [symbolic = %.loc7_28.3 (constants.%.c29)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %T, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.d9c)] -// CHECK:STDOUT: %impl.elem0.loc7_28.2: @Inner.Get.%.loc7_28.2 (%.c29) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc7_28.2 (constants.%impl.elem0.bd2)] +// CHECK:STDOUT: %impl.elem0.loc7_28.2: @Inner.Get.%.loc7_28.3 (%.c29) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc7_28.2 (constants.%impl.elem0.bd2)] // CHECK:STDOUT: %bound_method.loc7_28.3: = bound_method %U, %impl.elem0.loc7_28.2 [symbolic = %bound_method.loc7_28.3 (constants.%bound_method.023)] // CHECK:STDOUT: %specific_impl_fn.loc7_28.2: = specific_impl_function %impl.elem0.loc7_28.2, @Copy.WithSelf.Op(%T) [symbolic = %specific_impl_fn.loc7_28.2 (constants.%specific_impl_fn.e2a)] // CHECK:STDOUT: %bound_method.loc7_28.4: = bound_method %U, %specific_impl_fn.loc7_28.2 [symbolic = %bound_method.loc7_28.4 (constants.%bound_method.0b2)] @@ -182,9 +194,10 @@ var n: i32 = Outer(i32).Inner(42).Get(); // CHECK:STDOUT: fn() -> out %return.param: @Inner.Get.%T.as_type.loc7_17.1 (%T.as_type) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %U.ref: @Inner.Get.%T.as_type.loc7_17.1 (%T.as_type) = name_ref U, @Inner.%U.loc5_16.2 [symbolic = %U (constants.%U.7e5)] -// CHECK:STDOUT: %impl.elem0.loc7_28.1: @Inner.Get.%.loc7_28.2 (%.c29) = impl_witness_access constants.%Copy.lookup_impl_witness.d9c, element0 [symbolic = %impl.elem0.loc7_28.2 (constants.%impl.elem0.bd2)] +// CHECK:STDOUT: %impl.elem0.loc7_28.1: @Inner.Get.%.loc7_28.3 (%.c29) = impl_witness_access constants.%Copy.lookup_impl_witness.d9c, element0 [symbolic = %impl.elem0.loc7_28.2 (constants.%impl.elem0.bd2)] // CHECK:STDOUT: %bound_method.loc7_28.1: = bound_method %U.ref, %impl.elem0.loc7_28.1 [symbolic = %bound_method.loc7_28.3 (constants.%bound_method.023)] // CHECK:STDOUT: %.loc7_28.1: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T (constants.%T.f84)] +// CHECK:STDOUT: %.loc7_28.2: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T (constants.%T.f84)] // CHECK:STDOUT: %specific_impl_fn.loc7_28.1: = specific_impl_function %impl.elem0.loc7_28.1, @Copy.WithSelf.Op(constants.%T.f84) [symbolic = %specific_impl_fn.loc7_28.2 (constants.%specific_impl_fn.e2a)] // CHECK:STDOUT: %bound_method.loc7_28.2: = bound_method %U.ref, %specific_impl_fn.loc7_28.1 [symbolic = %bound_method.loc7_28.4 (constants.%bound_method.0b2)] // CHECK:STDOUT: %.loc7_17.1: ref @Inner.Get.%T.as_type.loc7_17.1 (%T.as_type) = splice_block %return.param {} @@ -222,6 +235,7 @@ var n: i32 = Outer(i32).Inner(42).Get(); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Outer(constants.%T.f84) { +// CHECK:STDOUT: %T.patt.loc4_14.2 => constants.%T.patt.fe6 // CHECK:STDOUT: %T.loc4_14.1 => constants.%T.f84 // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -232,8 +246,9 @@ var n: i32 = Outer(i32).Inner(42).Get(); // CHECK:STDOUT: specific @Inner(constants.%T.f84, constants.%U.7e5) { // CHECK:STDOUT: %T => constants.%T.f84 // CHECK:STDOUT: %T.as_type.loc5_19.1 => constants.%T.as_type -// CHECK:STDOUT: %U.loc5_16.1 => constants.%U.7e5 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.2c66b4.2 +// CHECK:STDOUT: %U.patt.loc5_16.2 => constants.%U.patt.ed4 +// CHECK:STDOUT: %U.loc5_16.1 => constants.%U.7e5 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Inner.Get.type => constants.%Inner.Get.type.8de @@ -245,9 +260,12 @@ var n: i32 = Outer(i32).Inner(42).Get(); // CHECK:STDOUT: %T.as_type.loc7_17.1 => constants.%T.as_type // CHECK:STDOUT: %.loc7_17.2 => constants.%.1ce700.2 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.2c66b4.2 +// CHECK:STDOUT: %return.param_patt.loc7_17.2 => constants.%return.param_patt.bf4475.2 +// CHECK:STDOUT: %return.patt.loc7_14.2 => constants.%return.patt.f44 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Outer(constants.%Copy.facet.987) { +// CHECK:STDOUT: %T.patt.loc4_14.2 => constants.%T.patt.fe6 // CHECK:STDOUT: %T.loc4_14.1 => constants.%Copy.facet.987 // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -258,8 +276,9 @@ var n: i32 = Outer(i32).Inner(42).Get(); // CHECK:STDOUT: specific @Inner(constants.%Copy.facet.987, constants.%int_42.ac4) { // CHECK:STDOUT: %T => constants.%Copy.facet.987 // CHECK:STDOUT: %T.as_type.loc5_19.1 => constants.%i32 -// CHECK:STDOUT: %U.loc5_16.1 => constants.%int_42.ac4 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.6b6 +// CHECK:STDOUT: %U.patt.loc5_16.2 => constants.%U.patt.a76 +// CHECK:STDOUT: %U.loc5_16.1 => constants.%int_42.ac4 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Inner.Get.type => constants.%Inner.Get.type.6e9 @@ -271,12 +290,14 @@ var n: i32 = Outer(i32).Inner(42).Get(); // CHECK:STDOUT: %T.as_type.loc7_17.1 => constants.%i32 // CHECK:STDOUT: %.loc7_17.2 => constants.%.795 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.6b6 +// CHECK:STDOUT: %return.param_patt.loc7_17.2 => constants.%return.param_patt.a9a +// CHECK:STDOUT: %return.patt.loc7_14.2 => constants.%return.patt.e1b // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.f8a // CHECK:STDOUT: %U => constants.%int_42.ac4 // CHECK:STDOUT: %Copy.WithSelf.Op.type => constants.%Copy.WithSelf.Op.type.d09 -// CHECK:STDOUT: %.loc7_28.2 => constants.%.7a6 +// CHECK:STDOUT: %.loc7_28.3 => constants.%.7a6 // CHECK:STDOUT: %Copy.lookup_impl_witness => constants.%Copy.impl_witness.0e0 // CHECK:STDOUT: %impl.elem0.loc7_28.2 => constants.%Int.as.Copy.impl.Op.4f6 // CHECK:STDOUT: %bound_method.loc7_28.3 => constants.%Int.as.Copy.impl.Op.bound diff --git a/toolchain/check/testdata/generic/dot_self_symbolic_type.carbon b/toolchain/check/testdata/generic/dot_self_symbolic_type.carbon index 61cb3cc6237e..df49db4dc218 100644 --- a/toolchain/check/testdata/generic/dot_self_symbolic_type.carbon +++ b/toolchain/check/testdata/generic/dot_self_symbolic_type.carbon @@ -79,8 +79,10 @@ fn H(T:! type) { // CHECK:STDOUT: constants { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self.c39: %type = symbolic_binding .Self [symbolic_self] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %A.type.55a: type = generic_interface_type @A [concrete] // CHECK:STDOUT: %A.generic: %A.type.55a = struct_value () [concrete] +// CHECK:STDOUT: %CC.patt: %pattern_type.98f = symbolic_binding_pattern CC, 0 [symbolic] // CHECK:STDOUT: %CC: type = symbolic_binding CC, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] @@ -95,13 +97,16 @@ fn H(T:! type) { // CHECK:STDOUT: %impl.elem0.bf516c.1: type = impl_witness_access %A.lookup_impl_witness.7746a3.1, element0 [symbolic] // CHECK:STDOUT: %A_where.type.df6ef4.1: type = facet_type <@A, @A(%CC) where %impl.elem0.bf516c.1 = %CC> [symbolic] // CHECK:STDOUT: %pattern_type.4e9: type = pattern_type %A_where.type.df6ef4.1 [symbolic] +// CHECK:STDOUT: %T.patt.17c: %pattern_type.4e9 = symbolic_binding_pattern T, 1 [symbolic] // CHECK:STDOUT: %T.9e3: %A_where.type.df6ef4.1 = symbolic_binding T, 1 [symbolic] // CHECK:STDOUT: %C.F.type.55fb78.1: type = fn_type @C.F, @C(%CC) [symbolic] // CHECK:STDOUT: %C.F.6da92d.1: %C.F.type.55fb78.1 = struct_value () [symbolic] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %DD.patt: %pattern_type.98f = symbolic_binding_pattern DD, 0 [symbolic] // CHECK:STDOUT: %DD: type = symbolic_binding DD, 0 [symbolic] // CHECK:STDOUT: %D.784: type = class_type @D, @D(%DD) [symbolic] +// CHECK:STDOUT: %T.patt.014: %pattern_type.98f = symbolic_binding_pattern T, 1 [symbolic] // CHECK:STDOUT: %T.091: type = symbolic_binding T, 1 [symbolic] // CHECK:STDOUT: %D.G.type.f2c: type = fn_type @D.G, @D(%DD) [symbolic] // CHECK:STDOUT: %D.G.463: %D.G.type.f2c = struct_value () [symbolic] @@ -126,7 +131,7 @@ fn H(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %C.F.decl: @C.%C.F.type (%C.F.type.55fb78.1) = fn_decl @C.F [symbolic = @C.%C.F (constants.%C.F.6da92d.1)] { -// CHECK:STDOUT: %T.patt: @C.F.%pattern_type (%pattern_type.4e9) = symbolic_binding_pattern T, 1 [concrete] +// CHECK:STDOUT: %T.patt.loc11_16.1: @C.F.%pattern_type (%pattern_type.4e9) = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc11_16.2 (constants.%T.patt.17c)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc11_25.1: type = splice_block %.loc11_25.2 [symbolic = %A_where.type (constants.%A_where.type.df6ef4.1)] { // CHECK:STDOUT: %.Self.loc11_16: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.c39] @@ -188,8 +193,9 @@ fn H(T:! type) { // CHECK:STDOUT: %A.lookup_impl_witness: = lookup_impl_witness %.Self.loc11_25.1, @A, @A(%CC) [symbolic = %A.lookup_impl_witness (constants.%A.lookup_impl_witness.7746a3.1)] // CHECK:STDOUT: %impl.elem0.loc11_31.1: type = impl_witness_access %A.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc11_31.1 (constants.%impl.elem0.bf516c.1)] // CHECK:STDOUT: %A_where.type: type = facet_type <@A, @A(%CC) where %impl.elem0.loc11_31.1 = %CC> [symbolic = %A_where.type (constants.%A_where.type.df6ef4.1)] -// CHECK:STDOUT: %T.loc11_16.1: @C.F.%A_where.type (%A_where.type.df6ef4.1) = symbolic_binding T, 1 [symbolic = %T.loc11_16.1 (constants.%T.9e3)] // CHECK:STDOUT: %pattern_type: type = pattern_type %A_where.type [symbolic = %pattern_type (constants.%pattern_type.4e9)] +// CHECK:STDOUT: %T.patt.loc11_16.2: @C.F.%pattern_type (%pattern_type.4e9) = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc11_16.2 (constants.%T.patt.17c)] +// CHECK:STDOUT: %T.loc11_16.1: @C.F.%A_where.type (%A_where.type.df6ef4.1) = symbolic_binding T, 1 [symbolic = %T.loc11_16.1 (constants.%T.9e3)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -222,6 +228,7 @@ fn H(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%CC) { +// CHECK:STDOUT: %CC.patt.loc6_11.2 => constants.%CC.patt // CHECK:STDOUT: %CC.loc6_11.1 => constants.%CC // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -240,11 +247,13 @@ fn H(T:! type) { // CHECK:STDOUT: %A.lookup_impl_witness => constants.%A.lookup_impl_witness.7746a3.1 // CHECK:STDOUT: %impl.elem0.loc11_31.1 => constants.%impl.elem0.bf516c.1 // CHECK:STDOUT: %A_where.type => constants.%A_where.type.df6ef4.1 -// CHECK:STDOUT: %T.loc11_16.1 => constants.%T.9e3 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.4e9 +// CHECK:STDOUT: %T.patt.loc11_16.2 => constants.%T.patt.17c +// CHECK:STDOUT: %T.loc11_16.1 => constants.%T.9e3 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @D(constants.%DD) { +// CHECK:STDOUT: %DD.patt.loc15_11.2 => constants.%DD.patt // CHECK:STDOUT: %DD.loc15_11.1 => constants.%DD // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -253,10 +262,12 @@ fn H(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @D.G(constants.%DD, constants.%T.091) { +// CHECK:STDOUT: %T.patt.loc16_9.2 => constants.%T.patt.014 // CHECK:STDOUT: %T.loc16_9.1 => constants.%T.091 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%DD) { +// CHECK:STDOUT: %CC.patt.loc6_11.2 => constants.%CC.patt // CHECK:STDOUT: %CC.loc6_11.1 => constants.%DD // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -265,6 +276,7 @@ fn H(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @D(constants.%empty_struct_type) { +// CHECK:STDOUT: %DD.patt.loc15_11.2 => constants.%DD.patt // CHECK:STDOUT: %DD.loc15_11.1 => constants.%empty_struct_type // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -273,6 +285,7 @@ fn H(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @D.G(constants.%empty_struct_type, constants.%T.67d) { +// CHECK:STDOUT: %T.patt.loc16_9.2 => constants.%T.patt.014 // CHECK:STDOUT: %T.loc16_9.1 => constants.%T.67d // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -284,6 +297,7 @@ fn H(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%empty_struct_type) { +// CHECK:STDOUT: %CC.patt.loc6_11.2 => constants.%CC.patt // CHECK:STDOUT: %CC.loc6_11.1 => constants.%empty_struct_type // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -297,6 +311,7 @@ fn H(T:! type) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self.c39: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %AA.patt: %pattern_type.98f = symbolic_binding_pattern AA, 0 [symbolic] // CHECK:STDOUT: %AA: type = symbolic_binding AA, 0 [symbolic] // CHECK:STDOUT: %A.type.55a: type = generic_interface_type @A [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -314,14 +329,17 @@ fn H(T:! type) { // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %A_where.type.32f51e.1: type = facet_type <@A, @A(%AA) where %impl.elem0.bf516c.1 = %empty_tuple.type> [symbolic] // CHECK:STDOUT: %pattern_type.82b: type = pattern_type %A_where.type.32f51e.1 [symbolic] +// CHECK:STDOUT: %BB.patt.487: %pattern_type.82b = symbolic_binding_pattern BB, 1 [symbolic] // CHECK:STDOUT: %BB.2f1: %A_where.type.32f51e.1 = symbolic_binding BB, 1 [symbolic] // CHECK:STDOUT: %BB.as_type: type = facet_access_type %BB.2f1 [symbolic] // CHECK:STDOUT: %ptr.e8f8f9.1: type = ptr_type %AA [symbolic] // CHECK:STDOUT: %B.type.4a0be4.1: type = facet_type <@B, @B(%ptr.e8f8f9.1)> [symbolic] // CHECK:STDOUT: %B.impl_witness.f14: = impl_witness @BB.as_type.as.B.impl.%B.impl_witness_table, @BB.as_type.as.B.impl(%AA, %BB.2f1) [symbolic] // CHECK:STDOUT: %require_complete.a5dc9d.1: = require_complete_type %B.type.4a0be4.1 [symbolic] +// CHECK:STDOUT: %DD.patt: %pattern_type.98f = symbolic_binding_pattern DD, 0 [symbolic] // CHECK:STDOUT: %DD: type = symbolic_binding DD, 0 [symbolic] // CHECK:STDOUT: %D.784: type = class_type @D, @D(%DD) [symbolic] +// CHECK:STDOUT: %T.patt.014: %pattern_type.98f = symbolic_binding_pattern T, 1 [symbolic] // CHECK:STDOUT: %T.091: type = symbolic_binding T, 1 [symbolic] // CHECK:STDOUT: %D.G.type.f2c: type = fn_type @D.G, @D(%DD) [symbolic] // CHECK:STDOUT: %D.G.463: %D.G.type.f2c = struct_value () [symbolic] @@ -343,8 +361,8 @@ fn H(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: impl_decl @BB.as_type.as.B.impl [concrete] { -// CHECK:STDOUT: %AA.patt: %pattern_type.98f = symbolic_binding_pattern AA, 0 [concrete] -// CHECK:STDOUT: %BB.patt: @BB.as_type.as.B.impl.%pattern_type (%pattern_type.82b) = symbolic_binding_pattern BB, 1 [concrete] +// CHECK:STDOUT: %AA.patt.loc9_16.1: %pattern_type.98f = symbolic_binding_pattern AA, 0 [symbolic = %AA.patt.loc9_16.2 (constants.%AA.patt)] +// CHECK:STDOUT: %BB.patt.loc9_27.1: @BB.as_type.as.B.impl.%pattern_type (%pattern_type.82b) = symbolic_binding_pattern BB, 1 [symbolic = %BB.patt.loc9_27.2 (constants.%BB.patt.487)] // CHECK:STDOUT: } { // CHECK:STDOUT: %BB.ref: @BB.as_type.as.B.impl.%A_where.type (%A_where.type.32f51e.1) = name_ref BB, %BB.loc9_27.1 [symbolic = %BB.loc9_27.2 (constants.%BB.2f1)] // CHECK:STDOUT: %BB.as_type.loc9_51.1: type = facet_access_type %BB.ref [symbolic = %BB.as_type.loc9_51.2 (constants.%BB.as_type)] @@ -382,6 +400,7 @@ fn H(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @BB.as_type.as.B.impl(%AA.loc9_16.1: type, %BB.loc9_27.1: @BB.as_type.as.B.impl.%A_where.type (%A_where.type.32f51e.1)) { +// CHECK:STDOUT: %AA.patt.loc9_16.2: %pattern_type.98f = symbolic_binding_pattern AA, 0 [symbolic = %AA.patt.loc9_16.2 (constants.%AA.patt)] // CHECK:STDOUT: %AA.loc9_16.2: type = symbolic_binding AA, 0 [symbolic = %AA.loc9_16.2 (constants.%AA)] // CHECK:STDOUT: %A.type.loc9_34.2: type = facet_type <@A, @A(%AA.loc9_16.2)> [symbolic = %A.type.loc9_34.2 (constants.%A.type.acd3aa.1)] // CHECK:STDOUT: %.Self.loc9_36.2: @BB.as_type.as.B.impl.%A.type.loc9_34.2 (%A.type.acd3aa.1) = symbolic_binding .Self [symbolic = %.Self.loc9_36.2 (constants.%.Self.049e23.1)] @@ -392,8 +411,9 @@ fn H(T:! type) { // CHECK:STDOUT: %A.lookup_impl_witness: = lookup_impl_witness %.Self.loc9_36.2, @A, @A(%AA.loc9_16.2) [symbolic = %A.lookup_impl_witness (constants.%A.lookup_impl_witness.7746a3.1)] // CHECK:STDOUT: %impl.elem0.loc9_42.2: type = impl_witness_access %A.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc9_42.2 (constants.%impl.elem0.bf516c.1)] // CHECK:STDOUT: %A_where.type: type = facet_type <@A, @A(%AA.loc9_16.2) where %impl.elem0.loc9_42.2 = constants.%empty_tuple.type> [symbolic = %A_where.type (constants.%A_where.type.32f51e.1)] -// CHECK:STDOUT: %BB.loc9_27.2: @BB.as_type.as.B.impl.%A_where.type (%A_where.type.32f51e.1) = symbolic_binding BB, 1 [symbolic = %BB.loc9_27.2 (constants.%BB.2f1)] // CHECK:STDOUT: %pattern_type: type = pattern_type %A_where.type [symbolic = %pattern_type (constants.%pattern_type.82b)] +// CHECK:STDOUT: %BB.patt.loc9_27.2: @BB.as_type.as.B.impl.%pattern_type (%pattern_type.82b) = symbolic_binding_pattern BB, 1 [symbolic = %BB.patt.loc9_27.2 (constants.%BB.patt.487)] +// CHECK:STDOUT: %BB.loc9_27.2: @BB.as_type.as.B.impl.%A_where.type (%A_where.type.32f51e.1) = symbolic_binding BB, 1 [symbolic = %BB.loc9_27.2 (constants.%BB.2f1)] // CHECK:STDOUT: %BB.as_type.loc9_51.2: type = facet_access_type %BB.loc9_27.2 [symbolic = %BB.as_type.loc9_51.2 (constants.%BB.as_type)] // CHECK:STDOUT: %ptr.loc9_61.2: type = ptr_type %AA.loc9_16.2 [symbolic = %ptr.loc9_61.2 (constants.%ptr.e8f8f9.1)] // CHECK:STDOUT: %B.type.loc9_62.2: type = facet_type <@B, @B(%ptr.loc9_61.2)> [symbolic = %B.type.loc9_62.2 (constants.%B.type.4a0be4.1)] @@ -455,6 +475,7 @@ fn H(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @BB.as_type.as.B.impl(constants.%AA, constants.%BB.2f1) { +// CHECK:STDOUT: %AA.patt.loc9_16.2 => constants.%AA.patt // CHECK:STDOUT: %AA.loc9_16.2 => constants.%AA // CHECK:STDOUT: %A.type.loc9_34.2 => constants.%A.type.acd3aa.1 // CHECK:STDOUT: %.Self.loc9_36.2 => constants.%.Self.049e23.1 @@ -465,8 +486,9 @@ fn H(T:! type) { // CHECK:STDOUT: %A.lookup_impl_witness => constants.%A.lookup_impl_witness.7746a3.1 // CHECK:STDOUT: %impl.elem0.loc9_42.2 => constants.%impl.elem0.bf516c.1 // CHECK:STDOUT: %A_where.type => constants.%A_where.type.32f51e.1 -// CHECK:STDOUT: %BB.loc9_27.2 => constants.%BB.2f1 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.82b +// CHECK:STDOUT: %BB.patt.loc9_27.2 => constants.%BB.patt.487 +// CHECK:STDOUT: %BB.loc9_27.2 => constants.%BB.2f1 // CHECK:STDOUT: %BB.as_type.loc9_51.2 => constants.%BB.as_type // CHECK:STDOUT: %ptr.loc9_61.2 => constants.%ptr.e8f8f9.1 // CHECK:STDOUT: %B.type.loc9_62.2 => constants.%B.type.4a0be4.1 @@ -474,6 +496,7 @@ fn H(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @D(constants.%DD) { +// CHECK:STDOUT: %DD.patt.loc14_11.2 => constants.%DD.patt // CHECK:STDOUT: %DD.loc14_11.1 => constants.%DD // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -482,10 +505,12 @@ fn H(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @D.G(constants.%DD, constants.%T.091) { +// CHECK:STDOUT: %T.patt.loc15_9.2 => constants.%T.patt.014 // CHECK:STDOUT: %T.loc15_9.1 => constants.%T.091 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @D(constants.%empty_struct_type) { +// CHECK:STDOUT: %DD.patt.loc14_11.2 => constants.%DD.patt // CHECK:STDOUT: %DD.loc14_11.1 => constants.%empty_struct_type // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -494,6 +519,7 @@ fn H(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @D.G(constants.%empty_struct_type, constants.%T.67d) { +// CHECK:STDOUT: %T.patt.loc15_9.2 => constants.%T.patt.014 // CHECK:STDOUT: %T.loc15_9.1 => constants.%T.67d // CHECK:STDOUT: // CHECK:STDOUT: !definition: diff --git a/toolchain/check/testdata/generic/local.carbon b/toolchain/check/testdata/generic/local.carbon index 6ee8b129c65f..1e922ba8e3aa 100644 --- a/toolchain/check/testdata/generic/local.carbon +++ b/toolchain/check/testdata/generic/local.carbon @@ -56,11 +56,14 @@ class C(C:! type) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.c79: type = class_type @C, @C(%T) [symbolic] // CHECK:STDOUT: %require_complete.944: = require_complete_type %T [symbolic] +// CHECK:STDOUT: %pattern_type.51d1c4.1: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %x.patt.45e: %pattern_type.51d1c4.1 = ref_binding_pattern x [symbolic] // CHECK:STDOUT: %C.elem.7e2: type = unbound_element_type %C.c79, %T [symbolic] // CHECK:STDOUT: %struct_type.x.0c5: type = struct_type {.x: %T} [symbolic] // CHECK:STDOUT: %complete_type.735: = complete_type_witness %struct_type.x.0c5 [symbolic] @@ -71,10 +74,14 @@ class C(C:! type) { // CHECK:STDOUT: %C.8eb: type = class_type @C, @C(%i32) [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %complete_type.f8a: = complete_type_witness %i32.builtin [concrete] +// CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %x.patt.211: %pattern_type.6b6 = ref_binding_pattern x [concrete] // CHECK:STDOUT: %C.elem.14f: type = unbound_element_type %C.8eb, %i32 [concrete] // CHECK:STDOUT: %struct_type.x.a15: type = struct_type {.x: %i32} [concrete] // CHECK:STDOUT: %complete_type.0c6: = complete_type_witness %struct_type.x.a15 [concrete] // CHECK:STDOUT: %pattern_type.1f3: type = pattern_type %C.8eb [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.1f3 = ref_binding_pattern v [concrete] +// CHECK:STDOUT: %v.var_patt: %pattern_type.1f3 = var_pattern %v.patt [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %struct_type.x.c96: type = struct_type {.x: Core.IntLiteral} [concrete] // CHECK:STDOUT: %struct: %struct_type.x.c96 = struct_value (%int_1.5b8) [concrete] @@ -125,10 +132,13 @@ class C(C:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc5_12.2: type) { +// CHECK:STDOUT: %T.patt.loc5_12.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_12.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc5_12.1: type = symbolic_binding T, 0 [symbolic = %T.loc5_12.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc5_12.1 [symbolic = %require_complete (constants.%require_complete.944)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc5_12.1 [symbolic = %pattern_type (constants.%pattern_type.51d1c4.1)] +// CHECK:STDOUT: %x.patt: @C.%pattern_type (%pattern_type.51d1c4.1) = ref_binding_pattern x [symbolic = %x.patt (constants.%x.patt.45e)] // CHECK:STDOUT: %C: type = class_type @C, @C(%T.loc5_12.1) [symbolic = %C (constants.%C.c79)] // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %T.loc5_12.1 [symbolic = %C.elem (constants.%C.elem.7e2)] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: @C.%T.loc5_12.1 (%T)} [symbolic = %struct_type.x (constants.%struct_type.x.0c5)] @@ -149,7 +159,7 @@ class C(C:! type) { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc5_12.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_12.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc5_15.1: type = splice_block %.loc5_15.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -158,8 +168,8 @@ class C(C:! type) { // CHECK:STDOUT: %T.loc5_12.2: type = symbolic_binding T, 0 [symbolic = %T.loc5_12.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %pattern_type.1f3 = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: %pattern_type.1f3 = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.1f3 = ref_binding_pattern v [concrete = constants.%v.patt] +// CHECK:STDOUT: %v.var_patt: %pattern_type.1f3 = var_pattern %v.patt [concrete = constants.%v.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %C.8eb = var %v.var_patt // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -204,14 +214,18 @@ class C(C:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%T) { +// CHECK:STDOUT: %T.patt.loc5_12.2 => constants.%T.patt // CHECK:STDOUT: %T.loc5_12.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%i32) { +// CHECK:STDOUT: %T.patt.loc5_12.2 => constants.%T.patt // CHECK:STDOUT: %T.loc5_12.1 => constants.%i32 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.f8a +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.6b6 +// CHECK:STDOUT: %x.patt => constants.%x.patt.211 // CHECK:STDOUT: %C => constants.%C.8eb // CHECK:STDOUT: %C.elem => constants.%C.elem.14f // CHECK:STDOUT: %struct_type.x => constants.%struct_type.x.a15 @@ -226,6 +240,7 @@ class C(C:! type) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %C.patt: %pattern_type = symbolic_binding_pattern C, 0 [symbolic] // CHECK:STDOUT: %C.67d: type = symbolic_binding C, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] @@ -251,6 +266,7 @@ class C(C:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%C.loc13_12.2: type) { +// CHECK:STDOUT: %C.patt.loc13_12.2: %pattern_type = symbolic_binding_pattern C, 0 [symbolic = %C.patt.loc13_12.2 (constants.%C.patt)] // CHECK:STDOUT: %C.loc13_12.1: type = symbolic_binding C, 0 [symbolic = %C.loc13_12.1 (constants.%C.67d)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -267,7 +283,7 @@ class C(C:! type) { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %C.patt: %pattern_type = symbolic_binding_pattern C, 0 [concrete] +// CHECK:STDOUT: %C.patt.loc13_12.1: %pattern_type = symbolic_binding_pattern C, 0 [symbolic = %C.patt.loc13_12.2 (constants.%C.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc13_15.1: type = splice_block %.loc13_15.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -279,6 +295,7 @@ class C(C:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%C.67d) { +// CHECK:STDOUT: %C.patt.loc13_12.2 => constants.%C.patt // CHECK:STDOUT: %C.loc13_12.1 => constants.%C.67d // CHECK:STDOUT: } // CHECK:STDOUT: @@ -288,6 +305,7 @@ class C(C:! type) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %C.patt: %pattern_type = symbolic_binding_pattern C, 0 [symbolic] // CHECK:STDOUT: %C.67d: type = symbolic_binding C, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] @@ -310,7 +328,7 @@ class C(C:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %C.patt: %pattern_type = symbolic_binding_pattern C, 0 [concrete] +// CHECK:STDOUT: %C.patt.loc4_10.1: %pattern_type = symbolic_binding_pattern C, 0 [symbolic = %C.patt.loc4_10.2 (constants.%C.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_13.1: type = splice_block %.loc4_13.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -321,6 +339,7 @@ class C(C:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%C.loc4_10.2: type) { +// CHECK:STDOUT: %C.patt.loc4_10.2: %pattern_type = symbolic_binding_pattern C, 0 [symbolic = %C.patt.loc4_10.2 (constants.%C.patt)] // CHECK:STDOUT: %C.loc4_10.1: type = symbolic_binding C, 0 [symbolic = %C.loc4_10.1 (constants.%C.67d)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -335,6 +354,7 @@ class C(C:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%C.67d) { +// CHECK:STDOUT: %C.patt.loc4_10.2 => constants.%C.patt // CHECK:STDOUT: %C.loc4_10.1 => constants.%C.67d // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/generic/local_function.carbon b/toolchain/check/testdata/generic/local_function.carbon index 0560496b08d2..a292f2830a93 100644 --- a/toolchain/check/testdata/generic/local_function.carbon +++ b/toolchain/check/testdata/generic/local_function.carbon @@ -24,6 +24,7 @@ fn Test[unused T:! type]() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Test.type: type = fn_type @Test [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -47,7 +48,7 @@ fn Test[unused T:! type]() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Test.decl: %Test.type = fn_decl @Test [concrete = constants.%Test] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc15_17.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_17.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc15_20.1: type = splice_block %.loc15_20.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -58,6 +59,7 @@ fn Test[unused T:! type]() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Test(%T.loc15_17.2: type) { +// CHECK:STDOUT: %T.patt.loc15_17.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_17.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc15_17.1: type = symbolic_binding T, 0 [symbolic = %T.loc15_17.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -85,6 +87,7 @@ fn Test[unused T:! type]() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Test(constants.%T) { +// CHECK:STDOUT: %T.patt.loc15_17.2 => constants.%T.patt // CHECK:STDOUT: %T.loc15_17.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/generic/template/convert.carbon b/toolchain/check/testdata/generic/template/convert.carbon index ca8057118cab..5ea1ca305a2c 100644 --- a/toolchain/check/testdata/generic/template/convert.carbon +++ b/toolchain/check/testdata/generic/template/convert.carbon @@ -68,8 +68,11 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.d47011.1: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template] // CHECK:STDOUT: %T.67db0b.1: type = symbolic_binding T, 0, template [template] // CHECK:STDOUT: %pattern_type.51d1c4.1: type = pattern_type %T.67db0b.1 [template] +// CHECK:STDOUT: %x.param_patt.91d: %pattern_type.51d1c4.1 = value_param_pattern [template] +// CHECK:STDOUT: %x.patt.800: %pattern_type.51d1c4.1 = at_binding_pattern x, %x.param_patt.91d [template] // 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] @@ -77,11 +80,14 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.944: = require_complete_type %T.67db0b.1 [template] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %complete_type.f8a: = complete_type_witness %i32.builtin [concrete] +// CHECK:STDOUT: %n.patt.c48: %pattern_type.6b6 = value_binding_pattern n [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.ac8: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N) [symbolic] // CHECK:STDOUT: %Int.as.Copy.impl.Op.5e0: %Int.as.Copy.impl.Op.type.ac8 = struct_value () [symbolic] @@ -92,8 +98,12 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: %Copy.WithSelf.Op.type.d09: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet) [concrete] // CHECK:STDOUT: %.7a6: type = fn_type_with_self_type %Copy.WithSelf.Op.type.d09, %Copy.facet [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.4f6, @Int.as.Copy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %n.patt.f0b: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete] // CHECK:STDOUT: %Test1.type: type = fn_type @Test1 [concrete] // CHECK:STDOUT: %Test1: %Test1.type = struct_value () [concrete] +// CHECK:STDOUT: %x.param_patt.cee: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.fbe: %pattern_type.6b6 = at_binding_pattern x, %x.param_patt.cee [concrete] // CHECK:STDOUT: %F.specific_fn.6c3: = specific_function %F, @F(%i32) [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %i32 [concrete] @@ -102,14 +112,20 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: %ImplicitAs.type.914: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.496: = impl_witness @C.as.ImplicitAs.impl.%ImplicitAs.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %self.param_patt.303: %pattern_type.98b = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.49a: %pattern_type.98b = at_binding_pattern self, %self.param_patt.303 [concrete] // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.type: type = fn_type @C.as.ImplicitAs.impl.Convert [concrete] // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert: %C.as.ImplicitAs.impl.Convert.type = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.914 = facet_value %C, (%ImplicitAs.impl_witness.496) [concrete] // CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.type.034: type = fn_type @ImplicitAs.WithSelf.Convert, @ImplicitAs.WithSelf(%i32, %ImplicitAs.facet) [concrete] // CHECK:STDOUT: %struct_type.n: type = struct_type {.n: %i32} [concrete] // CHECK:STDOUT: %complete_type.cdf: = complete_type_witness %struct_type.n [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.98b = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = at_binding_pattern c, %c.param_patt [concrete] // CHECK:STDOUT: %Test2.type: type = fn_type @Test2 [concrete] // CHECK:STDOUT: %Test2: %Test2.type = struct_value () [concrete] +// CHECK:STDOUT: %x.param_patt.0f9: %pattern_type.98b = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.2cc: %pattern_type.98b = at_binding_pattern x, %x.param_patt.0f9 [concrete] // CHECK:STDOUT: %F.specific_fn.e0d: = specific_function %F, @F(%C) [concrete] // CHECK:STDOUT: %inst.as_compatible.7c9: = inst_value [concrete] { // CHECK:STDOUT: %.aac: %i32 = as_compatible @F.%x.ref @@ -157,11 +173,11 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0, template [concrete] -// CHECK:STDOUT: %x.param_patt: @F.%pattern_type (%pattern_type.51d1c4.1) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @F.%pattern_type (%pattern_type.51d1c4.1) = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc4 [concrete] +// CHECK:STDOUT: %T.patt.loc4_16.1: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_16.2 (constants.%T.patt.d47011.1)] +// CHECK:STDOUT: %x.param_patt.loc4_26.1: @F.%pattern_type (%pattern_type.51d1c4.1) = value_param_pattern [template = %x.param_patt.loc4_26.2 (constants.%x.param_patt.91d)] +// CHECK:STDOUT: %x.patt.loc4_26.1: @F.%pattern_type (%pattern_type.51d1c4.1) = at_binding_pattern x, %x.param_patt.loc4_26.1 [template = %x.patt.loc4_26.2 (constants.%x.patt.800)] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc4 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc4: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc4_34: Core.Form = init_form %i32.loc4 [concrete = constants.%.795] @@ -177,10 +193,10 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Test1.decl: %Test1.type = fn_decl @Test1 [concrete = constants.%Test1] { -// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc9_21 [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%n.param_patt] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete = constants.%n.patt.f0b] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc9_21 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc9_21: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc9: Core.Form = init_form %i32.loc9_21 [concrete = constants.%.795] @@ -192,10 +208,10 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %Test2.decl: %Test2.type = fn_decl @Test2 [concrete = constants.%Test2] { -// CHECK:STDOUT: %c.param_patt: %pattern_type.98b = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.98b = at_binding_pattern c, %c.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.98b = value_param_pattern [concrete = constants.%c.param_patt] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc20: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -209,10 +225,10 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.ImplicitAs.impl: %Self.ref as %ImplicitAs.type { // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.decl: %C.as.ImplicitAs.impl.Convert.type = fn_decl @C.as.ImplicitAs.impl.Convert [concrete = constants.%C.as.ImplicitAs.impl.Convert] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.98b = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.98b = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.98b = value_param_pattern [concrete = constants.%self.param_patt.303] +// CHECK:STDOUT: %self.patt: %pattern_type.98b = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.49a] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc16_25: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -249,8 +265,11 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc4_16.2: type) { +// CHECK:STDOUT: %T.patt.loc4_16.2: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_16.2 (constants.%T.patt.d47011.1)] // CHECK:STDOUT: %T.loc4_16.1: type = symbolic_binding T, 0, template [template = %T.loc4_16.1 (constants.%T.67db0b.1)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc4_16.1 [template = %pattern_type (constants.%pattern_type.51d1c4.1)] +// CHECK:STDOUT: %x.param_patt.loc4_26.2: @F.%pattern_type (%pattern_type.51d1c4.1) = value_param_pattern [template = %x.param_patt.loc4_26.2 (constants.%x.param_patt.91d)] +// CHECK:STDOUT: %x.patt.loc4_26.2: @F.%pattern_type (%pattern_type.51d1c4.1) = at_binding_pattern x, %x.param_patt.loc4_26.2 [template = %x.patt.loc4_26.2 (constants.%x.patt.800)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc4_16.1 [template = %require_complete (constants.%require_complete.944)] @@ -260,12 +279,12 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: fn(%x.param: @F.%T.loc4_16.1 (%T.67db0b.1)) -> out %return.param: %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = value_binding_pattern n [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = value_binding_pattern n [concrete = constants.%n.patt.c48] // CHECK:STDOUT: } // CHECK:STDOUT: %x.ref: @F.%T.loc4_16.1 (%T.67db0b.1) = name_ref x, %x -// CHECK:STDOUT: %i32.loc5: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc5_16.1: @F.%T.loc4_16.1 (%T.67db0b.1) = splice_inst %.loc5_16.3 // CHECK:STDOUT: %.loc5_16.2: %i32 = splice_inst %.loc5_16.4 +// CHECK:STDOUT: %i32.loc5: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %n: %i32 = value_binding n, %.loc5_16.2 // CHECK:STDOUT: %n.ref: %i32 = name_ref n, %n // CHECK:STDOUT: %impl.elem0: %.7a6 = impl_witness_access constants.%Copy.impl_witness.0e0, element0 [concrete = constants.%Int.as.Copy.impl.Op.4f6] @@ -310,13 +329,19 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T.67db0b.1) { +// CHECK:STDOUT: %T.patt.loc4_16.2 => constants.%T.patt.d47011.1 // CHECK:STDOUT: %T.loc4_16.1 => constants.%T.67db0b.1 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d1c4.1 +// CHECK:STDOUT: %x.param_patt.loc4_26.2 => constants.%x.param_patt.91d +// CHECK:STDOUT: %x.patt.loc4_26.2 => constants.%x.patt.800 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%i32) { +// CHECK:STDOUT: %T.patt.loc4_16.2 => constants.%T.patt.d47011.1 // CHECK:STDOUT: %T.loc4_16.1 => constants.%i32 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.6b6 +// CHECK:STDOUT: %x.param_patt.loc4_26.2 => constants.%x.param_patt.cee +// CHECK:STDOUT: %x.patt.loc4_26.2 => constants.%x.patt.fbe // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.f8a @@ -325,8 +350,11 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%C) { +// CHECK:STDOUT: %T.patt.loc4_16.2 => constants.%T.patt.d47011.1 // CHECK:STDOUT: %T.loc4_16.1 => constants.%C // CHECK:STDOUT: %pattern_type => constants.%pattern_type.98b +// CHECK:STDOUT: %x.param_patt.loc4_26.2 => constants.%x.param_patt.0f9 +// CHECK:STDOUT: %x.patt.loc4_26.2 => constants.%x.patt.2cc // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.cdf @@ -340,8 +368,11 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.d47011.1: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template] // CHECK:STDOUT: %T.67db0b.1: type = symbolic_binding T, 0, template [template] // CHECK:STDOUT: %pattern_type.51d1c4.1: type = pattern_type %T.67db0b.1 [template] +// CHECK:STDOUT: %x.param_patt.91d: %pattern_type.51d1c4.1 = value_param_pattern [template] +// CHECK:STDOUT: %x.patt.800: %pattern_type.51d1c4.1 = at_binding_pattern x, %x.param_patt.91d [template] // 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] @@ -349,9 +380,12 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.944: = require_complete_type %T.67db0b.1 [template] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = value_binding_pattern n [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.ac8: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N) [symbolic] // CHECK:STDOUT: %Int.as.Copy.impl.Op.5e0: %Int.as.Copy.impl.Op.type.ac8 = struct_value () [symbolic] @@ -366,8 +400,12 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.d8d: type = pattern_type %D [concrete] +// CHECK:STDOUT: %d.param_patt: %pattern_type.d8d = value_param_pattern [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.d8d = at_binding_pattern d, %d.param_patt [concrete] // CHECK:STDOUT: %Test.type: type = fn_type @Test [concrete] // CHECK:STDOUT: %Test: %Test.type = struct_value () [concrete] +// CHECK:STDOUT: %x.param_patt.23b: %pattern_type.d8d = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.75f: %pattern_type.d8d = at_binding_pattern x, %x.param_patt.23b [concrete] // CHECK:STDOUT: %F.specific_fn: = specific_function %F, @F(%D) [concrete] // CHECK:STDOUT: %inst.as_compatible: = inst_value [concrete] { // CHECK:STDOUT: %.af0: %D = as_compatible @F.%x.ref @@ -405,11 +443,11 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0, template [concrete] -// CHECK:STDOUT: %x.param_patt: @F.%pattern_type (%pattern_type.51d1c4.1) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @F.%pattern_type (%pattern_type.51d1c4.1) = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc4 [concrete] +// CHECK:STDOUT: %T.patt.loc4_16.1: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_16.2 (constants.%T.patt.d47011.1)] +// CHECK:STDOUT: %x.param_patt.loc4_26.1: @F.%pattern_type (%pattern_type.51d1c4.1) = value_param_pattern [template = %x.param_patt.loc4_26.2 (constants.%x.param_patt.91d)] +// CHECK:STDOUT: %x.patt.loc4_26.1: @F.%pattern_type (%pattern_type.51d1c4.1) = at_binding_pattern x, %x.param_patt.loc4_26.1 [template = %x.patt.loc4_26.2 (constants.%x.patt.800)] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc4 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc4: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc4_34: Core.Form = init_form %i32.loc4 [concrete = constants.%.795] @@ -426,10 +464,10 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %D.decl: type = class_decl @D [concrete = constants.%D] {} {} // CHECK:STDOUT: %Test.decl: %Test.type = fn_decl @Test [concrete = constants.%Test] { -// CHECK:STDOUT: %d.param_patt: %pattern_type.d8d = value_param_pattern [concrete] -// CHECK:STDOUT: %d.patt: %pattern_type.d8d = at_binding_pattern d, %d.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %d.param_patt: %pattern_type.d8d = value_param_pattern [concrete = constants.%d.param_patt] +// CHECK:STDOUT: %d.patt: %pattern_type.d8d = at_binding_pattern d, %d.param_patt [concrete = constants.%d.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc11: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -450,8 +488,11 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc4_16.2: type) { +// CHECK:STDOUT: %T.patt.loc4_16.2: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_16.2 (constants.%T.patt.d47011.1)] // CHECK:STDOUT: %T.loc4_16.1: type = symbolic_binding T, 0, template [template = %T.loc4_16.1 (constants.%T.67db0b.1)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc4_16.1 [template = %pattern_type (constants.%pattern_type.51d1c4.1)] +// CHECK:STDOUT: %x.param_patt.loc4_26.2: @F.%pattern_type (%pattern_type.51d1c4.1) = value_param_pattern [template = %x.param_patt.loc4_26.2 (constants.%x.param_patt.91d)] +// CHECK:STDOUT: %x.patt.loc4_26.2: @F.%pattern_type (%pattern_type.51d1c4.1) = at_binding_pattern x, %x.param_patt.loc4_26.2 [template = %x.patt.loc4_26.2 (constants.%x.patt.800)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc4_16.1 [template = %require_complete (constants.%require_complete.944)] @@ -461,12 +502,12 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: fn(%x.param: @F.%T.loc4_16.1 (%T.67db0b.1)) -> out %return.param: %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = value_binding_pattern n [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = value_binding_pattern n [concrete = constants.%n.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.ref: @F.%T.loc4_16.1 (%T.67db0b.1) = name_ref x, %x -// CHECK:STDOUT: %i32.loc5: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc5_16.1: @F.%T.loc4_16.1 (%T.67db0b.1) = splice_inst %.loc5_16.3 // CHECK:STDOUT: %.loc5_16.2: %i32 = splice_inst %.loc5_16.4 +// CHECK:STDOUT: %i32.loc5: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %n: %i32 = value_binding n, %.loc5_16.2 // CHECK:STDOUT: %n.ref: %i32 = name_ref n, %n // CHECK:STDOUT: %impl.elem0: %.7a6 = impl_witness_access constants.%Copy.impl_witness.0e0, element0 [concrete = constants.%Int.as.Copy.impl.Op.4f6] @@ -488,13 +529,19 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T.67db0b.1) { +// CHECK:STDOUT: %T.patt.loc4_16.2 => constants.%T.patt.d47011.1 // CHECK:STDOUT: %T.loc4_16.1 => constants.%T.67db0b.1 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d1c4.1 +// CHECK:STDOUT: %x.param_patt.loc4_26.2 => constants.%x.param_patt.91d +// CHECK:STDOUT: %x.patt.loc4_26.2 => constants.%x.patt.800 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%D) { +// CHECK:STDOUT: %T.patt.loc4_16.2 => constants.%T.patt.d47011.1 // CHECK:STDOUT: %T.loc4_16.1 => constants.%D // CHECK:STDOUT: %pattern_type => constants.%pattern_type.d8d +// CHECK:STDOUT: %x.param_patt.loc4_26.2 => constants.%x.param_patt.23b +// CHECK:STDOUT: %x.patt.loc4_26.2 => constants.%x.patt.75f // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.357 diff --git a/toolchain/check/testdata/generic/template/member_access.carbon b/toolchain/check/testdata/generic/template/member_access.carbon index b8c96d848f2b..9e5d4399dc5f 100644 --- a/toolchain/check/testdata/generic/template/member_access.carbon +++ b/toolchain/check/testdata/generic/template/member_access.carbon @@ -91,8 +91,11 @@ fn Test(e: E) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.d47011.1: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template] // CHECK:STDOUT: %T.67db0b.1: type = symbolic_binding T, 0, template [template] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T.67db0b.1 [template] +// CHECK:STDOUT: %x.param_patt.91d: %pattern_type.51d = value_param_pattern [template] +// CHECK:STDOUT: %x.patt.800: %pattern_type.51d = at_binding_pattern x, %x.param_patt.91d [template] // 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] @@ -100,9 +103,12 @@ fn Test(e: E) { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.944: = require_complete_type %T.67db0b.1 [template] +// CHECK:STDOUT: %n.patt.c48: %pattern_type.6b6 = value_binding_pattern n [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.ac8: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N) [symbolic] // CHECK:STDOUT: %Int.as.Copy.impl.Op.5e0: %Int.as.Copy.impl.Op.type.ac8 = struct_value () [symbolic] @@ -118,11 +124,17 @@ fn Test(e: E) { // CHECK:STDOUT: %struct_type.n: type = struct_type {.n: %i32} [concrete] // CHECK:STDOUT: %complete_type.cdf: = complete_type_witness %struct_type.n [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.98b = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = at_binding_pattern c, %c.param_patt [concrete] // CHECK:STDOUT: %Test1.type: type = fn_type @Test1 [concrete] // CHECK:STDOUT: %Test1: %Test1.type = struct_value () [concrete] +// CHECK:STDOUT: %x.param_patt.0f9: %pattern_type.98b = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.2cc: %pattern_type.98b = at_binding_pattern x, %x.param_patt.0f9 [concrete] // CHECK:STDOUT: %F.specific_fn.e0d: = specific_function %F, @F(%C) [concrete] // CHECK:STDOUT: %struct_type.m.n: type = struct_type {.m: %i32, .n: %i32} [concrete] // CHECK:STDOUT: %pattern_type.860: type = pattern_type %struct_type.m.n [concrete] +// CHECK:STDOUT: %x.param_patt.c8a: %pattern_type.860 = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.14d: %pattern_type.860 = at_binding_pattern x, %x.param_patt.c8a [concrete] // CHECK:STDOUT: %Test2.type: type = fn_type @Test2 [concrete] // CHECK:STDOUT: %Test2: %Test2.type = struct_value () [concrete] // CHECK:STDOUT: %F.specific_fn.4da: = specific_function %F, @F(%struct_type.m.n) [concrete] @@ -174,11 +186,11 @@ fn Test(e: E) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0, template [concrete] -// CHECK:STDOUT: %x.param_patt: @F.%pattern_type (%pattern_type.51d) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @F.%pattern_type (%pattern_type.51d) = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc4 [concrete] +// CHECK:STDOUT: %T.patt.loc4_16.1: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_16.2 (constants.%T.patt.d47011.1)] +// CHECK:STDOUT: %x.param_patt.loc4_26.1: @F.%pattern_type (%pattern_type.51d) = value_param_pattern [template = %x.param_patt.loc4_26.2 (constants.%x.param_patt.91d)] +// CHECK:STDOUT: %x.patt.loc4_26.1: @F.%pattern_type (%pattern_type.51d) = at_binding_pattern x, %x.param_patt.loc4_26.1 [template = %x.patt.loc4_26.2 (constants.%x.patt.800)] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc4 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc4: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc4_34: Core.Form = init_form %i32.loc4 [concrete = constants.%.795] @@ -195,16 +207,16 @@ fn Test(e: E) { // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %Test1.decl: %Test1.type = fn_decl @Test1 [concrete = constants.%Test1] { -// CHECK:STDOUT: %c.param_patt: %pattern_type.98b = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.98b = at_binding_pattern c, %c.param_patt [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.98b = value_param_pattern [concrete = constants.%c.param_patt] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %c: %C = value_binding c, %c.param // CHECK:STDOUT: } // CHECK:STDOUT: %Test2.decl: %Test2.type = fn_decl @Test2 [concrete = constants.%Test2] { -// CHECK:STDOUT: %x.param_patt: %pattern_type.860 = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.860 = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.860 = value_param_pattern [concrete = constants.%x.param_patt.c8a] +// CHECK:STDOUT: %x.patt: %pattern_type.860 = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt.14d] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %struct_type.m.n = value_param call_param0 // CHECK:STDOUT: %.loc17: type = splice_block %struct_type.m.n [concrete = constants.%struct_type.m.n] { @@ -227,8 +239,11 @@ fn Test(e: E) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc4_16.2: type) { +// CHECK:STDOUT: %T.patt.loc4_16.2: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_16.2 (constants.%T.patt.d47011.1)] // CHECK:STDOUT: %T.loc4_16.1: type = symbolic_binding T, 0, template [template = %T.loc4_16.1 (constants.%T.67db0b.1)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc4_16.1 [template = %pattern_type (constants.%pattern_type.51d)] +// CHECK:STDOUT: %x.param_patt.loc4_26.2: @F.%pattern_type (%pattern_type.51d) = value_param_pattern [template = %x.param_patt.loc4_26.2 (constants.%x.param_patt.91d)] +// CHECK:STDOUT: %x.patt.loc4_26.2: @F.%pattern_type (%pattern_type.51d) = at_binding_pattern x, %x.param_patt.loc4_26.2 [template = %x.patt.loc4_26.2 (constants.%x.patt.800)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc4_16.1 [template = %require_complete (constants.%require_complete.944)] @@ -240,13 +255,13 @@ fn Test(e: E) { // CHECK:STDOUT: fn(%x.param: @F.%T.loc4_16.1 (%T.67db0b.1)) -> out %return.param: %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = value_binding_pattern n [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = value_binding_pattern n [concrete = constants.%n.patt.c48] // CHECK:STDOUT: } // CHECK:STDOUT: %x.ref: @F.%T.loc4_16.1 (%T.67db0b.1) = name_ref x, %x // CHECK:STDOUT: %.loc5_17.1: @F.%T.loc4_16.1 (%T.67db0b.1) = splice_inst %.loc5_17.4 // CHECK:STDOUT: %.loc5_17.2: @F.%.loc5_17.6 (@F.%.loc5_17.6) = splice_inst %.loc5_17.5 -// CHECK:STDOUT: %i32.loc5: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc5_17.3: %i32 = splice_inst %.loc5_17.7 +// CHECK:STDOUT: %i32.loc5: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %n: %i32 = value_binding n, %.loc5_17.3 // CHECK:STDOUT: %n.ref: %i32 = name_ref n, %n // CHECK:STDOUT: %impl.elem0: %.7a6 = impl_witness_access constants.%Copy.impl_witness.0e0, element0 [concrete = constants.%Int.as.Copy.impl.Op.4f6] @@ -277,13 +292,19 @@ fn Test(e: E) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T.67db0b.1) { +// CHECK:STDOUT: %T.patt.loc4_16.2 => constants.%T.patt.d47011.1 // CHECK:STDOUT: %T.loc4_16.1 => constants.%T.67db0b.1 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d +// CHECK:STDOUT: %x.param_patt.loc4_26.2 => constants.%x.param_patt.91d +// CHECK:STDOUT: %x.patt.loc4_26.2 => constants.%x.patt.800 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%C) { +// CHECK:STDOUT: %T.patt.loc4_16.2 => constants.%T.patt.d47011.1 // CHECK:STDOUT: %T.loc4_16.1 => constants.%C // CHECK:STDOUT: %pattern_type => constants.%pattern_type.98b +// CHECK:STDOUT: %x.param_patt.loc4_26.2 => constants.%x.param_patt.0f9 +// CHECK:STDOUT: %x.patt.loc4_26.2 => constants.%x.patt.2cc // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.cdf @@ -294,8 +315,11 @@ fn Test(e: E) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%struct_type.m.n) { +// CHECK:STDOUT: %T.patt.loc4_16.2 => constants.%T.patt.d47011.1 // CHECK:STDOUT: %T.loc4_16.1 => constants.%struct_type.m.n // CHECK:STDOUT: %pattern_type => constants.%pattern_type.860 +// CHECK:STDOUT: %x.param_patt.loc4_26.2 => constants.%x.param_patt.c8a +// CHECK:STDOUT: %x.patt.loc4_26.2 => constants.%x.patt.14d // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.08f @@ -311,8 +335,11 @@ fn Test(e: E) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.d47011.1: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template] // CHECK:STDOUT: %T.67db0b.1: type = symbolic_binding T, 0, template [template] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T.67db0b.1 [template] +// CHECK:STDOUT: %x.param_patt.91d: %pattern_type.51d = value_param_pattern [template] +// CHECK:STDOUT: %x.patt.800: %pattern_type.51d = at_binding_pattern x, %x.param_patt.91d [template] // 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] @@ -320,9 +347,12 @@ fn Test(e: E) { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.944: = require_complete_type %T.67db0b.1 [template] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = value_binding_pattern n [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.ac8: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N) [symbolic] // CHECK:STDOUT: %Int.as.Copy.impl.Op.5e0: %Int.as.Copy.impl.Op.type.ac8 = struct_value () [symbolic] @@ -338,8 +368,12 @@ fn Test(e: E) { // CHECK:STDOUT: %struct_type.m: type = struct_type {.m: %i32} [concrete] // CHECK:STDOUT: %complete_type.37d: = complete_type_witness %struct_type.m [concrete] // CHECK:STDOUT: %pattern_type.d8d: type = pattern_type %D [concrete] +// CHECK:STDOUT: %d.param_patt: %pattern_type.d8d = value_param_pattern [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.d8d = at_binding_pattern d, %d.param_patt [concrete] // CHECK:STDOUT: %Test.type: type = fn_type @Test [concrete] // CHECK:STDOUT: %Test: %Test.type = struct_value () [concrete] +// CHECK:STDOUT: %x.param_patt.23b: %pattern_type.d8d = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.75f: %pattern_type.d8d = at_binding_pattern x, %x.param_patt.23b [concrete] // CHECK:STDOUT: %F.specific_fn: = specific_function %F, @F(%D) [concrete] // CHECK:STDOUT: %inst.as_compatible: = inst_value [concrete] { // CHECK:STDOUT: %.af0: %D = as_compatible @F.%x.ref @@ -374,11 +408,11 @@ fn Test(e: E) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0, template [concrete] -// CHECK:STDOUT: %x.param_patt: @F.%pattern_type (%pattern_type.51d) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @F.%pattern_type (%pattern_type.51d) = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc4 [concrete] +// CHECK:STDOUT: %T.patt.loc4_16.1: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_16.2 (constants.%T.patt.d47011.1)] +// CHECK:STDOUT: %x.param_patt.loc4_26.1: @F.%pattern_type (%pattern_type.51d) = value_param_pattern [template = %x.param_patt.loc4_26.2 (constants.%x.param_patt.91d)] +// CHECK:STDOUT: %x.patt.loc4_26.1: @F.%pattern_type (%pattern_type.51d) = at_binding_pattern x, %x.param_patt.loc4_26.1 [template = %x.patt.loc4_26.2 (constants.%x.patt.800)] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc4 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc4: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc4_34: Core.Form = init_form %i32.loc4 [concrete = constants.%.795] @@ -395,8 +429,8 @@ fn Test(e: E) { // CHECK:STDOUT: } // CHECK:STDOUT: %D.decl: type = class_decl @D [concrete = constants.%D] {} {} // CHECK:STDOUT: %Test.decl: %Test.type = fn_decl @Test [concrete = constants.%Test] { -// CHECK:STDOUT: %d.param_patt: %pattern_type.d8d = value_param_pattern [concrete] -// CHECK:STDOUT: %d.patt: %pattern_type.d8d = at_binding_pattern d, %d.param_patt [concrete] +// CHECK:STDOUT: %d.param_patt: %pattern_type.d8d = value_param_pattern [concrete = constants.%d.param_patt] +// CHECK:STDOUT: %d.patt: %pattern_type.d8d = at_binding_pattern d, %d.param_patt [concrete = constants.%d.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %d.param: %D = value_param call_param0 // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl [concrete = constants.%D] @@ -416,8 +450,11 @@ fn Test(e: E) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc4_16.2: type) { +// CHECK:STDOUT: %T.patt.loc4_16.2: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_16.2 (constants.%T.patt.d47011.1)] // CHECK:STDOUT: %T.loc4_16.1: type = symbolic_binding T, 0, template [template = %T.loc4_16.1 (constants.%T.67db0b.1)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc4_16.1 [template = %pattern_type (constants.%pattern_type.51d)] +// CHECK:STDOUT: %x.param_patt.loc4_26.2: @F.%pattern_type (%pattern_type.51d) = value_param_pattern [template = %x.param_patt.loc4_26.2 (constants.%x.param_patt.91d)] +// CHECK:STDOUT: %x.patt.loc4_26.2: @F.%pattern_type (%pattern_type.51d) = at_binding_pattern x, %x.param_patt.loc4_26.2 [template = %x.patt.loc4_26.2 (constants.%x.patt.800)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc4_16.1 [template = %require_complete (constants.%require_complete.944)] @@ -429,13 +466,13 @@ fn Test(e: E) { // CHECK:STDOUT: fn(%x.param: @F.%T.loc4_16.1 (%T.67db0b.1)) -> out %return.param: %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = value_binding_pattern n [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = value_binding_pattern n [concrete = constants.%n.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.ref: @F.%T.loc4_16.1 (%T.67db0b.1) = name_ref x, %x // CHECK:STDOUT: %.loc5_17.1: @F.%T.loc4_16.1 (%T.67db0b.1) = splice_inst %.loc5_17.4 // CHECK:STDOUT: %.loc5_17.2: @F.%.loc5_17.6 (@F.%.loc5_17.6) = splice_inst %.loc5_17.5 -// CHECK:STDOUT: %i32.loc5: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc5_17.3: %i32 = splice_inst %.loc5_17.7 +// CHECK:STDOUT: %i32.loc5: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %n: %i32 = value_binding n, %.loc5_17.3 // CHECK:STDOUT: %n.ref: %i32 = name_ref n, %n // CHECK:STDOUT: %impl.elem0: %.7a6 = impl_witness_access constants.%Copy.impl_witness.0e0, element0 [concrete = constants.%Int.as.Copy.impl.Op.4f6] @@ -457,13 +494,19 @@ fn Test(e: E) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T.67db0b.1) { +// CHECK:STDOUT: %T.patt.loc4_16.2 => constants.%T.patt.d47011.1 // CHECK:STDOUT: %T.loc4_16.1 => constants.%T.67db0b.1 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d +// CHECK:STDOUT: %x.param_patt.loc4_26.2 => constants.%x.param_patt.91d +// CHECK:STDOUT: %x.patt.loc4_26.2 => constants.%x.patt.800 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%D) { +// CHECK:STDOUT: %T.patt.loc4_16.2 => constants.%T.patt.d47011.1 // CHECK:STDOUT: %T.loc4_16.1 => constants.%D // CHECK:STDOUT: %pattern_type => constants.%pattern_type.d8d +// CHECK:STDOUT: %x.param_patt.loc4_26.2 => constants.%x.param_patt.23b +// CHECK:STDOUT: %x.patt.loc4_26.2 => constants.%x.patt.75f // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.37d @@ -479,8 +522,11 @@ fn Test(e: E) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.d47011.1: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template] // CHECK:STDOUT: %T.67db0b.1: type = symbolic_binding T, 0, template [template] // CHECK:STDOUT: %pattern_type.51d1c4.1: type = pattern_type %T.67db0b.1 [template] +// CHECK:STDOUT: %x.param_patt.91d: %pattern_type.51d1c4.1 = value_param_pattern [template] +// CHECK:STDOUT: %x.patt.800: %pattern_type.51d1c4.1 = at_binding_pattern x, %x.param_patt.91d [template] // 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] @@ -488,9 +534,12 @@ fn Test(e: E) { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F.loc4 [concrete] // CHECK:STDOUT: %F.708: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.944: = require_complete_type %T.67db0b.1 [template] +// CHECK:STDOUT: %n.patt.c48: %pattern_type.6b6 = value_binding_pattern n [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.ac8: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N) [symbolic] // CHECK:STDOUT: %Int.as.Copy.impl.Op.5e0: %Int.as.Copy.impl.Op.type.ac8 = struct_value () [symbolic] @@ -509,8 +558,12 @@ fn Test(e: E) { // CHECK:STDOUT: %struct_type.n.88b: type = struct_type {.n: %F.76a} [concrete] // CHECK:STDOUT: %complete_type.15a: = complete_type_witness %struct_type.n.88b [concrete] // CHECK:STDOUT: %pattern_type.849: type = pattern_type %E [concrete] +// CHECK:STDOUT: %e.param_patt: %pattern_type.849 = value_param_pattern [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type.849 = at_binding_pattern e, %e.param_patt [concrete] // CHECK:STDOUT: %Test.type: type = fn_type @Test [concrete] // CHECK:STDOUT: %Test: %Test.type = struct_value () [concrete] +// CHECK:STDOUT: %x.param_patt.209: %pattern_type.849 = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.b95: %pattern_type.849 = at_binding_pattern x, %x.param_patt.209 [concrete] // CHECK:STDOUT: %F.specific_fn: = specific_function %F.708, @F.loc4(%E) [concrete] // CHECK:STDOUT: %inst.as_compatible: = inst_value [concrete] { // CHECK:STDOUT: %.660: %E = as_compatible @F.loc4.%x.ref @@ -555,11 +608,11 @@ fn Test(e: E) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F.loc4 [concrete = constants.%F.708] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0, template [concrete] -// CHECK:STDOUT: %x.param_patt: @F.loc4.%pattern_type (%pattern_type.51d1c4.1) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @F.loc4.%pattern_type (%pattern_type.51d1c4.1) = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc4 [concrete] +// CHECK:STDOUT: %T.patt.loc4_16.1: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_16.2 (constants.%T.patt.d47011.1)] +// CHECK:STDOUT: %x.param_patt.loc4_26.1: @F.loc4.%pattern_type (%pattern_type.51d1c4.1) = value_param_pattern [template = %x.param_patt.loc4_26.2 (constants.%x.param_patt.91d)] +// CHECK:STDOUT: %x.patt.loc4_26.1: @F.loc4.%pattern_type (%pattern_type.51d1c4.1) = at_binding_pattern x, %x.param_patt.loc4_26.1 [template = %x.patt.loc4_26.2 (constants.%x.patt.800)] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc4 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc4: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc4_34: Core.Form = init_form %i32.loc4 [concrete = constants.%.795] @@ -576,8 +629,8 @@ fn Test(e: E) { // CHECK:STDOUT: } // CHECK:STDOUT: %E.decl: type = class_decl @E [concrete = constants.%E] {} {} // CHECK:STDOUT: %Test.decl: %Test.type = fn_decl @Test [concrete = constants.%Test] { -// CHECK:STDOUT: %e.param_patt: %pattern_type.849 = value_param_pattern [concrete] -// CHECK:STDOUT: %e.patt: %pattern_type.849 = at_binding_pattern e, %e.param_patt [concrete] +// CHECK:STDOUT: %e.param_patt: %pattern_type.849 = value_param_pattern [concrete = constants.%e.param_patt] +// CHECK:STDOUT: %e.patt: %pattern_type.849 = at_binding_pattern e, %e.param_patt [concrete = constants.%e.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %e.param: %E = value_param call_param0 // CHECK:STDOUT: %E.ref: type = name_ref E, file.%E.decl [concrete = constants.%E] @@ -606,8 +659,11 @@ fn Test(e: E) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F.loc4(%T.loc4_16.2: type) { +// CHECK:STDOUT: %T.patt.loc4_16.2: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_16.2 (constants.%T.patt.d47011.1)] // CHECK:STDOUT: %T.loc4_16.1: type = symbolic_binding T, 0, template [template = %T.loc4_16.1 (constants.%T.67db0b.1)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc4_16.1 [template = %pattern_type (constants.%pattern_type.51d1c4.1)] +// CHECK:STDOUT: %x.param_patt.loc4_26.2: @F.loc4.%pattern_type (%pattern_type.51d1c4.1) = value_param_pattern [template = %x.param_patt.loc4_26.2 (constants.%x.param_patt.91d)] +// CHECK:STDOUT: %x.patt.loc4_26.2: @F.loc4.%pattern_type (%pattern_type.51d1c4.1) = at_binding_pattern x, %x.param_patt.loc4_26.2 [template = %x.patt.loc4_26.2 (constants.%x.patt.800)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc4_16.1 [template = %require_complete (constants.%require_complete.944)] @@ -619,13 +675,13 @@ fn Test(e: E) { // CHECK:STDOUT: fn(%x.param: @F.loc4.%T.loc4_16.1 (%T.67db0b.1)) -> out %return.param: %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = value_binding_pattern n [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = value_binding_pattern n [concrete = constants.%n.patt.c48] // CHECK:STDOUT: } // CHECK:STDOUT: %x.ref: @F.loc4.%T.loc4_16.1 (%T.67db0b.1) = name_ref x, %x // CHECK:STDOUT: %.loc5_17.1: @F.loc4.%T.loc4_16.1 (%T.67db0b.1) = splice_inst %.loc5_17.4 // CHECK:STDOUT: %.loc5_17.2: @F.loc4.%.loc5_17.6 (@F.loc4.%.loc5_17.6) = splice_inst %.loc5_17.5 -// CHECK:STDOUT: %i32.loc5: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc5_17.3: %i32 = splice_inst %.loc5_17.7 +// CHECK:STDOUT: %i32.loc5: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %n: %i32 = value_binding n, %.loc5_17.3 // CHECK:STDOUT: %n.ref: %i32 = name_ref n, %n // CHECK:STDOUT: %impl.elem0: %.7a6 = impl_witness_access constants.%Copy.impl_witness.0e0, element0 [concrete = constants.%Int.as.Copy.impl.Op.4f6] @@ -647,13 +703,19 @@ fn Test(e: E) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.loc4(constants.%T.67db0b.1) { +// CHECK:STDOUT: %T.patt.loc4_16.2 => constants.%T.patt.d47011.1 // CHECK:STDOUT: %T.loc4_16.1 => constants.%T.67db0b.1 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d1c4.1 +// CHECK:STDOUT: %x.param_patt.loc4_26.2 => constants.%x.param_patt.91d +// CHECK:STDOUT: %x.patt.loc4_26.2 => constants.%x.patt.800 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.loc4(constants.%E) { +// CHECK:STDOUT: %T.patt.loc4_16.2 => constants.%T.patt.d47011.1 // CHECK:STDOUT: %T.loc4_16.1 => constants.%E // CHECK:STDOUT: %pattern_type => constants.%pattern_type.849 +// CHECK:STDOUT: %x.param_patt.loc4_26.2 => constants.%x.param_patt.209 +// CHECK:STDOUT: %x.patt.loc4_26.2 => constants.%x.patt.b95 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.15a diff --git a/toolchain/check/testdata/generic/template/unimplemented.carbon b/toolchain/check/testdata/generic/template/unimplemented.carbon index aeb6d5df3378..bbe6f6b134c4 100644 --- a/toolchain/check/testdata/generic/template/unimplemented.carbon +++ b/toolchain/check/testdata/generic/template/unimplemented.carbon @@ -77,14 +77,19 @@ fn F[template T:! Core.Destroy](x: T) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self.c39: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template] // CHECK:STDOUT: %T: type = symbolic_binding T, 0, template [template] // CHECK:STDOUT: %pattern_type.51d1c4.1: type = pattern_type %T [template] +// CHECK:STDOUT: %x.param_patt: %pattern_type.51d1c4.1 = value_param_pattern [template] +// CHECK:STDOUT: %x.patt: %pattern_type.51d1c4.1 = at_binding_pattern x, %x.param_patt [template] // 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: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.944: = require_complete_type %T [template] @@ -111,11 +116,11 @@ fn F[template T:! Core.Destroy](x: T) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0, template [concrete] -// CHECK:STDOUT: %x.param_patt: @F.%pattern_type (%pattern_type.51d1c4.1) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @F.%pattern_type (%pattern_type.51d1c4.1) = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %T.patt.loc6_16.1: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc6_16.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.param_patt.loc6_26.1: @F.%pattern_type (%pattern_type.51d1c4.1) = value_param_pattern [template = %x.param_patt.loc6_26.2 (constants.%x.param_patt)] +// CHECK:STDOUT: %x.patt.loc6_26.1: @F.%pattern_type (%pattern_type.51d1c4.1) = at_binding_pattern x, %x.param_patt.loc6_26.1 [template = %x.patt.loc6_26.2 (constants.%x.patt)] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc6_34: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -133,8 +138,11 @@ fn F[template T:! Core.Destroy](x: T) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc6_16.2: type) { +// CHECK:STDOUT: %T.patt.loc6_16.2: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc6_16.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc6_16.1: type = symbolic_binding T, 0, template [template = %T.loc6_16.1 (constants.%T)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc6_16.1 [template = %pattern_type (constants.%pattern_type.51d1c4.1)] +// CHECK:STDOUT: %x.param_patt.loc6_26.2: @F.%pattern_type (%pattern_type.51d1c4.1) = value_param_pattern [template = %x.param_patt.loc6_26.2 (constants.%x.param_patt)] +// CHECK:STDOUT: %x.patt.loc6_26.2: @F.%pattern_type (%pattern_type.51d1c4.1) = at_binding_pattern x, %x.param_patt.loc6_26.2 [template = %x.patt.loc6_26.2 (constants.%x.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc6_16.1 [template = %require_complete (constants.%require_complete.944)] @@ -153,8 +161,11 @@ fn F[template T:! Core.Destroy](x: T) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T) { +// CHECK:STDOUT: %T.patt.loc6_16.2 => constants.%T.patt // CHECK:STDOUT: %T.loc6_16.1 => constants.%T // CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d1c4.1 +// CHECK:STDOUT: %x.param_patt.loc6_26.2 => constants.%x.param_patt +// CHECK:STDOUT: %x.patt.loc6_26.2 => constants.%x.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_todo_unimplemented_value.carbon @@ -172,8 +183,11 @@ fn F[template T:! Core.Destroy](x: T) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self.c39: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = symbolic_binding_pattern c, 0, template [template] // CHECK:STDOUT: %c: %C = symbolic_binding c, 0, template [template] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete] @@ -201,9 +215,9 @@ fn F[template T:! Core.Destroy](x: T) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %c.patt: %pattern_type.98b = symbolic_binding_pattern c, 0, template [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %c.patt.loc11_16.1: %pattern_type.98b = symbolic_binding_pattern c, 0, template [template = %c.patt.loc11_16.2 (constants.%c.patt)] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc11_25: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -228,6 +242,7 @@ fn F[template T:! Core.Destroy](x: T) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%c.loc11_16.2: %C) { +// CHECK:STDOUT: %c.patt.loc11_16.2: %pattern_type.98b = symbolic_binding_pattern c, 0, template [template = %c.patt.loc11_16.2 (constants.%c.patt)] // CHECK:STDOUT: %c.loc11_16.1: %C = symbolic_binding c, 0, template [template = %c.loc11_16.1 (constants.%c)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -244,6 +259,7 @@ fn F[template T:! Core.Destroy](x: T) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%c) { +// CHECK:STDOUT: %c.patt.loc11_16.2 => constants.%c.patt // CHECK:STDOUT: %c.loc11_16.1 => constants.%c // CHECK:STDOUT: } // CHECK:STDOUT: @@ -254,13 +270,18 @@ fn F[template T:! Core.Destroy](x: T) { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %pattern_type.429: type = pattern_type %Destroy.type [concrete] +// CHECK:STDOUT: %T.patt.351: %pattern_type.429 = symbolic_binding_pattern T, 0, template [template] // CHECK:STDOUT: %T.0e7: %Destroy.type = symbolic_binding T, 0, template [template] // CHECK:STDOUT: %T.as_type.700: type = facet_access_type %T.0e7 [template] // CHECK:STDOUT: %pattern_type.f4e485.2: type = pattern_type %T.as_type.700 [template] +// CHECK:STDOUT: %x.param_patt: %pattern_type.f4e485.2 = value_param_pattern [template] +// CHECK:STDOUT: %x.patt: %pattern_type.f4e485.2 = at_binding_pattern x, %x.param_patt [template] // 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: %require_complete.14c: = require_complete_type %T.as_type.700 [template] +// CHECK:STDOUT: %v.patt: %pattern_type.f4e485.2 = ref_binding_pattern v [template] +// CHECK:STDOUT: %v.var_patt: %pattern_type.f4e485.2 = var_pattern %v.patt [template] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -271,6 +292,8 @@ fn F[template T:! Core.Destroy](x: T) { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %w.patt: %pattern_type.6b6 = ref_binding_pattern w [concrete] +// CHECK:STDOUT: %w.var_patt: %pattern_type.6b6 = var_pattern %w.patt [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.2: type = fn_type @Destroy.Op.loc22_3.2 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.2: %Destroy.Op.type.1d8f74.2 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %T.0e7, @Destroy [template] @@ -300,9 +323,9 @@ fn F[template T:! Core.Destroy](x: T) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type.429 = symbolic_binding_pattern T, 0, template [concrete] -// CHECK:STDOUT: %x.param_patt: @F.%pattern_type (%pattern_type.f4e485.2) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @F.%pattern_type (%pattern_type.f4e485.2) = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %T.patt.loc4_16.1: %pattern_type.429 = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_16.2 (constants.%T.patt.351)] +// CHECK:STDOUT: %x.param_patt.loc4_34.1: @F.%pattern_type (%pattern_type.f4e485.2) = value_param_pattern [template = %x.param_patt.loc4_34.2 (constants.%x.param_patt)] +// CHECK:STDOUT: %x.patt.loc4_34.1: @F.%pattern_type (%pattern_type.f4e485.2) = at_binding_pattern x, %x.param_patt.loc4_34.1 [template = %x.patt.loc4_34.2 (constants.%x.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_23: type = splice_block %Destroy.ref [concrete = constants.%Destroy.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -321,31 +344,36 @@ fn F[template T:! Core.Destroy](x: T) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc4_16.2: %Destroy.type) { +// CHECK:STDOUT: %T.patt.loc4_16.2: %pattern_type.429 = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_16.2 (constants.%T.patt.351)] // CHECK:STDOUT: %T.loc4_16.1: %Destroy.type = symbolic_binding T, 0, template [template = %T.loc4_16.1 (constants.%T.0e7)] // CHECK:STDOUT: %T.as_type.loc4_36.1: type = facet_access_type %T.loc4_16.1 [template = %T.as_type.loc4_36.1 (constants.%T.as_type.700)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc4_36.1 [template = %pattern_type (constants.%pattern_type.f4e485.2)] +// CHECK:STDOUT: %x.param_patt.loc4_34.2: @F.%pattern_type (%pattern_type.f4e485.2) = value_param_pattern [template = %x.param_patt.loc4_34.2 (constants.%x.param_patt)] +// CHECK:STDOUT: %x.patt.loc4_34.2: @F.%pattern_type (%pattern_type.f4e485.2) = at_binding_pattern x, %x.param_patt.loc4_34.2 [template = %x.patt.loc4_34.2 (constants.%x.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc4_36.1 [template = %require_complete (constants.%require_complete.14c)] +// CHECK:STDOUT: %v.patt.loc14_15.2: @F.%pattern_type (%pattern_type.f4e485.2) = ref_binding_pattern v [template = %v.patt.loc14_15.2 (constants.%v.patt)] +// CHECK:STDOUT: %v.var_patt.loc14_3.2: @F.%pattern_type (%pattern_type.f4e485.2) = var_pattern %v.patt.loc14_15.2 [template = %v.var_patt.loc14_3.2 (constants.%v.var_patt)] // CHECK:STDOUT: %ImplicitAs.type.loc14_3.2: type = facet_type <@ImplicitAs, @ImplicitAs(%T.as_type.loc4_36.1)> [template = %ImplicitAs.type.loc14_3.2 (constants.%ImplicitAs.type.f42)] -// CHECK:STDOUT: %.loc14_3.4: = access_member_action %ImplicitAs.type.loc14_3.1, Convert [template] -// CHECK:STDOUT: %.loc14_3.5: type = type_of_inst %.loc14_3.4 [template] +// CHECK:STDOUT: %.loc14_3.5: = access_member_action %ImplicitAs.type.loc14_3.1, Convert [template] +// CHECK:STDOUT: %.loc14_3.6: type = type_of_inst %.loc14_3.5 [template] // CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%T.loc4_16.1) [template = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.d3ece9.2)] -// CHECK:STDOUT: %.loc14_3.6: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %T.loc4_16.1 [template = %.loc14_3.6 (constants.%.53a)] +// CHECK:STDOUT: %.loc14_3.7: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %T.loc4_16.1 [template = %.loc14_3.7 (constants.%.53a)] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %T.loc4_16.1, @Destroy [template = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness)] -// CHECK:STDOUT: %impl.elem0.loc14_3.2: @F.%.loc14_3.6 (%.53a) = impl_witness_access %Destroy.lookup_impl_witness, element0 [template = %impl.elem0.loc14_3.2 (constants.%impl.elem0.0f9)] +// CHECK:STDOUT: %impl.elem0.loc14_3.2: @F.%.loc14_3.7 (%.53a) = impl_witness_access %Destroy.lookup_impl_witness, element0 [template = %impl.elem0.loc14_3.2 (constants.%impl.elem0.0f9)] // CHECK:STDOUT: %specific_impl_fn.loc14_3.2: = specific_impl_function %impl.elem0.loc14_3.2, @Destroy.WithSelf.Op(%T.loc4_16.1) [template = %specific_impl_fn.loc14_3.2 (constants.%specific_impl_fn.afc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%x.param: @F.%T.as_type.loc4_36.1 (%T.as_type.700)) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: @F.%pattern_type (%pattern_type.f4e485.2) = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: @F.%pattern_type (%pattern_type.f4e485.2) = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt.loc14_15.1: @F.%pattern_type (%pattern_type.f4e485.2) = ref_binding_pattern v [template = %v.patt.loc14_15.2 (constants.%v.patt)] +// CHECK:STDOUT: %v.var_patt.loc14_3.1: @F.%pattern_type (%pattern_type.f4e485.2) = var_pattern %v.patt.loc14_15.1 [template = %v.var_patt.loc14_3.2 (constants.%v.var_patt)] // CHECK:STDOUT: } -// CHECK:STDOUT: %v.var: ref @F.%T.as_type.loc4_36.1 (%T.as_type.700) = var %v.var_patt +// CHECK:STDOUT: %v.var: ref @F.%T.as_type.loc4_36.1 (%T.as_type.700) = var %v.var_patt.loc14_3.1 // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0] // CHECK:STDOUT: %ImplicitAs.type.loc14_3.1: type = facet_type <@ImplicitAs, @ImplicitAs(constants.%T.as_type.700)> [template = %ImplicitAs.type.loc14_3.2 (constants.%ImplicitAs.type.f42)] -// CHECK:STDOUT: %.loc14_3.1: @F.%.loc14_3.5 (@F.%.loc14_3.5) = splice_inst %.loc14_3.4 +// CHECK:STDOUT: %.loc14_3.1: @F.%.loc14_3.6 (@F.%.loc14_3.6) = splice_inst %.loc14_3.5 // CHECK:STDOUT: %.loc14_3.2: @F.%T.as_type.loc4_36.1 (%T.as_type.700) = converted %int_0, [concrete = ] // CHECK:STDOUT: assign %v.var, // CHECK:STDOUT: %.loc14_17.1: type = splice_block %.loc14_17.2 [template = %T.as_type.loc4_36.1 (constants.%T.as_type.700)] { @@ -355,8 +383,8 @@ fn F[template T:! Core.Destroy](x: T) { // CHECK:STDOUT: } // CHECK:STDOUT: %v: ref @F.%T.as_type.loc4_36.1 (%T.as_type.700) = ref_binding v, %v.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %w.patt: %pattern_type.6b6 = ref_binding_pattern w [concrete] -// CHECK:STDOUT: %w.var_patt: %pattern_type.6b6 = var_pattern %w.patt [concrete] +// CHECK:STDOUT: %w.patt: %pattern_type.6b6 = ref_binding_pattern w [concrete = constants.%w.patt] +// CHECK:STDOUT: %w.var_patt: %pattern_type.6b6 = var_pattern %w.patt [concrete = constants.%w.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %w.var: ref %i32 = var %w.var_patt // CHECK:STDOUT: %x.ref: @F.%T.as_type.loc4_36.1 (%T.as_type.700) = name_ref x, %x @@ -366,9 +394,10 @@ fn F[template T:! Core.Destroy](x: T) { // CHECK:STDOUT: %w: ref %i32 = ref_binding w, %w.var // CHECK:STDOUT: %Destroy.Op.bound: = bound_method %w.var, constants.%Destroy.Op.1a2547.2 // CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%w.var) -// CHECK:STDOUT: %impl.elem0.loc14_3.1: @F.%.loc14_3.6 (%.53a) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [template = %impl.elem0.loc14_3.2 (constants.%impl.elem0.0f9)] +// CHECK:STDOUT: %impl.elem0.loc14_3.1: @F.%.loc14_3.7 (%.53a) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [template = %impl.elem0.loc14_3.2 (constants.%impl.elem0.0f9)] // CHECK:STDOUT: %bound_method.loc14_3.1: = bound_method %v.var, %impl.elem0.loc14_3.1 // CHECK:STDOUT: %.loc14_3.3: %Destroy.type = converted constants.%T.as_type.700, constants.%T.0e7 [template = %T.loc4_16.1 (constants.%T.0e7)] +// CHECK:STDOUT: %.loc14_3.4: %Destroy.type = converted constants.%T.as_type.700, constants.%T.0e7 [template = %T.loc4_16.1 (constants.%T.0e7)] // CHECK:STDOUT: %specific_impl_fn.loc14_3.1: = specific_impl_function %impl.elem0.loc14_3.1, @Destroy.WithSelf.Op(constants.%T.0e7) [template = %specific_impl_fn.loc14_3.2 (constants.%specific_impl_fn.afc)] // CHECK:STDOUT: %bound_method.loc14_3.2: = bound_method %v.var, %specific_impl_fn.loc14_3.1 // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc14_3.2(%v.var) @@ -384,8 +413,11 @@ fn F[template T:! Core.Destroy](x: T) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T.0e7) { +// CHECK:STDOUT: %T.patt.loc4_16.2 => constants.%T.patt.351 // CHECK:STDOUT: %T.loc4_16.1 => constants.%T.0e7 // CHECK:STDOUT: %T.as_type.loc4_36.1 => constants.%T.as_type.700 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.f4e485.2 +// CHECK:STDOUT: %x.param_patt.loc4_34.2 => constants.%x.param_patt +// CHECK:STDOUT: %x.patt.loc4_34.2 => constants.%x.patt // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/generic/template_dependence.carbon b/toolchain/check/testdata/generic/template_dependence.carbon index f6c0ece53d78..0c6721dbab82 100644 --- a/toolchain/check/testdata/generic/template_dependence.carbon +++ b/toolchain/check/testdata/generic/template_dependence.carbon @@ -37,12 +37,17 @@ fn F(template T:! type, U:! type) -> (T, U) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.d47011.1: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template] // CHECK:STDOUT: %T.67db0b.1: type = symbolic_binding T, 0, template [template] // CHECK:STDOUT: %ptr.e8f8f9.1: type = ptr_type %T.67db0b.1 [template] // CHECK:STDOUT: %ptr.125: type = ptr_type %ptr.e8f8f9.1 [template] // CHECK:STDOUT: %pattern_type.8bb: type = pattern_type %ptr.125 [template] +// CHECK:STDOUT: %x.param_patt: %pattern_type.8bb = value_param_pattern [template] +// CHECK:STDOUT: %x.patt: %pattern_type.8bb = at_binding_pattern x, %x.param_patt [template] // CHECK:STDOUT: %.cb6cb9.1: Core.Form = init_form %ptr.e8f8f9.1 [template] // CHECK:STDOUT: %pattern_type.4f4b84.1: type = pattern_type %ptr.e8f8f9.1 [template] +// CHECK:STDOUT: %return.param_patt.27f587.1: %pattern_type.4f4b84.1 = out_param_pattern [template] +// CHECK:STDOUT: %return.patt.d67: %pattern_type.4f4b84.1 = return_slot_pattern %return.param_patt.27f587.1, %ptr.e8f8f9.1 [template] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.fbe: = require_complete_type %ptr.125 [template] @@ -59,11 +64,11 @@ fn F(template T:! type, U:! type) -> (T, U) { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0, template [concrete] -// CHECK:STDOUT: %x.param_patt: @F.%pattern_type.loc5_26 (%pattern_type.8bb) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @F.%pattern_type.loc5_26 (%pattern_type.8bb) = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @F.%pattern_type.loc5_37 (%pattern_type.4f4b84.1) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @F.%pattern_type.loc5_37 (%pattern_type.4f4b84.1) = return_slot_pattern %return.param_patt, %ptr.loc5_37 [concrete] +// CHECK:STDOUT: %T.patt.loc5_16.1: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc5_16.2 (constants.%T.patt.d47011.1)] +// CHECK:STDOUT: %x.param_patt.loc5_26.1: @F.%pattern_type.loc5_26 (%pattern_type.8bb) = value_param_pattern [template = %x.param_patt.loc5_26.2 (constants.%x.param_patt)] +// CHECK:STDOUT: %x.patt.loc5_26.1: @F.%pattern_type.loc5_26 (%pattern_type.8bb) = at_binding_pattern x, %x.param_patt.loc5_26.1 [template = %x.patt.loc5_26.2 (constants.%x.patt)] +// CHECK:STDOUT: %return.param_patt.loc5_37.1: @F.%pattern_type.loc5_37 (%pattern_type.4f4b84.1) = out_param_pattern [template = %return.param_patt.loc5_37.2 (constants.%return.param_patt.27f587.1)] +// CHECK:STDOUT: %return.patt.loc5_33.1: @F.%pattern_type.loc5_37 (%pattern_type.4f4b84.1) = return_slot_pattern %return.param_patt.loc5_37.1, %ptr.loc5_37 [template = %return.patt.loc5_33.2 (constants.%return.patt.d67)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc5_36: type = name_ref T, %T.loc5_16.2 [template = %T.loc5_16.1 (constants.%T.67db0b.1)] // CHECK:STDOUT: %ptr.loc5_37: type = ptr_type %T.ref.loc5_36 [template = %ptr.loc5_29.1 (constants.%ptr.e8f8f9.1)] @@ -86,33 +91,40 @@ fn F(template T:! type, U:! type) -> (T, U) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc5_16.2: type) { +// CHECK:STDOUT: %T.patt.loc5_16.2: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc5_16.2 (constants.%T.patt.d47011.1)] // CHECK:STDOUT: %T.loc5_16.1: type = symbolic_binding T, 0, template [template = %T.loc5_16.1 (constants.%T.67db0b.1)] // CHECK:STDOUT: %ptr.loc5_29.1: type = ptr_type %T.loc5_16.1 [template = %ptr.loc5_29.1 (constants.%ptr.e8f8f9.1)] // CHECK:STDOUT: %ptr.loc5_30.1: type = ptr_type %ptr.loc5_29.1 [template = %ptr.loc5_30.1 (constants.%ptr.125)] // CHECK:STDOUT: %pattern_type.loc5_26: type = pattern_type %ptr.loc5_30.1 [template = %pattern_type.loc5_26 (constants.%pattern_type.8bb)] +// CHECK:STDOUT: %x.param_patt.loc5_26.2: @F.%pattern_type.loc5_26 (%pattern_type.8bb) = value_param_pattern [template = %x.param_patt.loc5_26.2 (constants.%x.param_patt)] +// CHECK:STDOUT: %x.patt.loc5_26.2: @F.%pattern_type.loc5_26 (%pattern_type.8bb) = at_binding_pattern x, %x.param_patt.loc5_26.2 [template = %x.patt.loc5_26.2 (constants.%x.patt)] // CHECK:STDOUT: %.loc5_37.1: Core.Form = init_form %ptr.loc5_29.1 [template = %.loc5_37.1 (constants.%.cb6cb9.1)] // CHECK:STDOUT: %pattern_type.loc5_37: type = pattern_type %ptr.loc5_29.1 [template = %pattern_type.loc5_37 (constants.%pattern_type.4f4b84.1)] +// CHECK:STDOUT: %return.param_patt.loc5_37.2: @F.%pattern_type.loc5_37 (%pattern_type.4f4b84.1) = out_param_pattern [template = %return.param_patt.loc5_37.2 (constants.%return.param_patt.27f587.1)] +// CHECK:STDOUT: %return.patt.loc5_33.2: @F.%pattern_type.loc5_37 (%pattern_type.4f4b84.1) = return_slot_pattern %return.param_patt.loc5_37.2, %ptr.loc5_29.1 [template = %return.patt.loc5_33.2 (constants.%return.patt.d67)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc5_26: = require_complete_type %ptr.loc5_30.1 [template = %require_complete.loc5_26 (constants.%require_complete.fbe)] // CHECK:STDOUT: %require_complete.loc5_33: = require_complete_type %ptr.loc5_29.1 [template = %require_complete.loc5_33 (constants.%require_complete.ef162c.1)] -// CHECK:STDOUT: %.loc6_10.4: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.loc5_16.1) [template = %.loc6_10.4 (constants.%.0e9)] +// CHECK:STDOUT: %.loc6_10.5: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.loc5_16.1) [template = %.loc6_10.5 (constants.%.0e9)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %ptr.loc5_29.1, @Copy [template = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.1da)] -// CHECK:STDOUT: %Copy.facet.loc6_10.2: %Copy.type = facet_value %ptr.loc5_29.1, (%Copy.lookup_impl_witness) [template = %Copy.facet.loc6_10.2 (constants.%Copy.facet)] -// CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.loc6_10.2) [template = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.884)] -// CHECK:STDOUT: %.loc6_10.5: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %Copy.facet.loc6_10.2 [template = %.loc6_10.5 (constants.%.be5)] -// CHECK:STDOUT: %impl.elem0.loc6_10.2: @F.%.loc6_10.5 (%.be5) = impl_witness_access %Copy.lookup_impl_witness, element0 [template = %impl.elem0.loc6_10.2 (constants.%impl.elem0.484)] -// CHECK:STDOUT: %specific_impl_fn.loc6_10.2: = specific_impl_function %impl.elem0.loc6_10.2, @Copy.WithSelf.Op(%Copy.facet.loc6_10.2) [template = %specific_impl_fn.loc6_10.2 (constants.%specific_impl_fn.a76)] +// CHECK:STDOUT: %Copy.facet.loc6_10.3: %Copy.type = facet_value %ptr.loc5_29.1, (%Copy.lookup_impl_witness) [template = %Copy.facet.loc6_10.3 (constants.%Copy.facet)] +// CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.loc6_10.3) [template = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.884)] +// CHECK:STDOUT: %.loc6_10.6: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %Copy.facet.loc6_10.3 [template = %.loc6_10.6 (constants.%.be5)] +// CHECK:STDOUT: %impl.elem0.loc6_10.2: @F.%.loc6_10.6 (%.be5) = impl_witness_access %Copy.lookup_impl_witness, element0 [template = %impl.elem0.loc6_10.2 (constants.%impl.elem0.484)] +// CHECK:STDOUT: %specific_impl_fn.loc6_10.2: = specific_impl_function %impl.elem0.loc6_10.2, @Copy.WithSelf.Op(%Copy.facet.loc6_10.3) [template = %specific_impl_fn.loc6_10.2 (constants.%specific_impl_fn.a76)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%x.param: @F.%ptr.loc5_30.1 (%ptr.125)) -> out %return.param: @F.%ptr.loc5_29.1 (%ptr.e8f8f9.1) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %x.ref: @F.%ptr.loc5_30.1 (%ptr.125) = name_ref x, %x // CHECK:STDOUT: %.loc6_10.1: ref @F.%ptr.loc5_29.1 (%ptr.e8f8f9.1) = deref %x.ref // CHECK:STDOUT: %.loc6_10.2: @F.%ptr.loc5_29.1 (%ptr.e8f8f9.1) = acquire_value %.loc6_10.1 -// CHECK:STDOUT: %impl.elem0.loc6_10.1: @F.%.loc6_10.5 (%.be5) = impl_witness_access constants.%Copy.lookup_impl_witness.1da, element0 [template = %impl.elem0.loc6_10.2 (constants.%impl.elem0.484)] +// CHECK:STDOUT: %impl.elem0.loc6_10.1: @F.%.loc6_10.6 (%.be5) = impl_witness_access constants.%Copy.lookup_impl_witness.1da, element0 [template = %impl.elem0.loc6_10.2 (constants.%impl.elem0.484)] // CHECK:STDOUT: %bound_method.loc6_10.1: = bound_method %.loc6_10.2, %impl.elem0.loc6_10.1 -// CHECK:STDOUT: %Copy.facet.loc6_10.1: %Copy.type = facet_value constants.%ptr.e8f8f9.1, (constants.%Copy.lookup_impl_witness.1da) [template = %Copy.facet.loc6_10.2 (constants.%Copy.facet)] -// CHECK:STDOUT: %.loc6_10.3: %Copy.type = converted constants.%ptr.e8f8f9.1, %Copy.facet.loc6_10.1 [template = %Copy.facet.loc6_10.2 (constants.%Copy.facet)] +// CHECK:STDOUT: %Copy.facet.loc6_10.1: %Copy.type = facet_value constants.%ptr.e8f8f9.1, (constants.%Copy.lookup_impl_witness.1da) [template = %Copy.facet.loc6_10.3 (constants.%Copy.facet)] +// CHECK:STDOUT: %.loc6_10.3: %Copy.type = converted constants.%ptr.e8f8f9.1, %Copy.facet.loc6_10.1 [template = %Copy.facet.loc6_10.3 (constants.%Copy.facet)] +// CHECK:STDOUT: %Copy.facet.loc6_10.2: %Copy.type = facet_value constants.%ptr.e8f8f9.1, (constants.%Copy.lookup_impl_witness.1da) [template = %Copy.facet.loc6_10.3 (constants.%Copy.facet)] +// CHECK:STDOUT: %.loc6_10.4: %Copy.type = converted constants.%ptr.e8f8f9.1, %Copy.facet.loc6_10.2 [template = %Copy.facet.loc6_10.3 (constants.%Copy.facet)] // CHECK:STDOUT: %specific_impl_fn.loc6_10.1: = specific_impl_function %impl.elem0.loc6_10.1, @Copy.WithSelf.Op(constants.%Copy.facet) [template = %specific_impl_fn.loc6_10.2 (constants.%specific_impl_fn.a76)] // CHECK:STDOUT: %bound_method.loc6_10.2: = bound_method %.loc6_10.2, %specific_impl_fn.loc6_10.1 // CHECK:STDOUT: %Copy.WithSelf.Op.call: init @F.%ptr.loc5_29.1 (%ptr.e8f8f9.1) = call %bound_method.loc6_10.2(%.loc6_10.2) @@ -121,12 +133,17 @@ fn F(template T:! type, U:! type) -> (T, U) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T.67db0b.1) { +// CHECK:STDOUT: %T.patt.loc5_16.2 => constants.%T.patt.d47011.1 // CHECK:STDOUT: %T.loc5_16.1 => constants.%T.67db0b.1 // CHECK:STDOUT: %ptr.loc5_29.1 => constants.%ptr.e8f8f9.1 // CHECK:STDOUT: %ptr.loc5_30.1 => constants.%ptr.125 // CHECK:STDOUT: %pattern_type.loc5_26 => constants.%pattern_type.8bb +// CHECK:STDOUT: %x.param_patt.loc5_26.2 => constants.%x.param_patt +// CHECK:STDOUT: %x.patt.loc5_26.2 => constants.%x.patt // CHECK:STDOUT: %.loc5_37.1 => constants.%.cb6cb9.1 // CHECK:STDOUT: %pattern_type.loc5_37 => constants.%pattern_type.4f4b84.1 +// CHECK:STDOUT: %return.param_patt.loc5_37.2 => constants.%return.param_patt.27f587.1 +// CHECK:STDOUT: %return.patt.loc5_33.2 => constants.%return.patt.d67 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- mixed.carbon @@ -135,13 +152,17 @@ fn F(template T:! type, U:! type) -> (T, U) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template] // CHECK:STDOUT: %T: type = symbolic_binding T, 0, template [template] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %U: type = symbolic_binding U, 1 [symbolic] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple: %tuple.type.24b = tuple_value (%T, %U) [template] // CHECK:STDOUT: %tuple.type.a5e: type = tuple_type (%T, %U) [template] // CHECK:STDOUT: %.f18: Core.Form = init_form %tuple.type.a5e [template] // CHECK:STDOUT: %pattern_type.eee: type = pattern_type %tuple.type.a5e [template] +// CHECK:STDOUT: %return.param_patt: %pattern_type.eee = out_param_pattern [template] +// CHECK:STDOUT: %return.patt: %pattern_type.eee = return_slot_pattern %return.param_patt, %tuple.type.a5e [template] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %tuple.type.a5e [template] @@ -150,10 +171,10 @@ fn F(template T:! type, U:! type) -> (T, U) { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0, template [concrete] -// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [concrete] -// CHECK:STDOUT: %return.param_patt: @F.%pattern_type (%pattern_type.eee) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @F.%pattern_type (%pattern_type.eee) = return_slot_pattern %return.param_patt, %.loc5_43.4 [concrete] +// CHECK:STDOUT: %T.patt.loc5_16.1: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc5_16.2 (constants.%T.patt)] +// CHECK:STDOUT: %U.patt.loc5_26.1: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc5_26.2 (constants.%U.patt)] +// CHECK:STDOUT: %return.param_patt.loc5_43.1: @F.%pattern_type (%pattern_type.eee) = out_param_pattern [template = %return.param_patt.loc5_43.2 (constants.%return.param_patt)] +// CHECK:STDOUT: %return.patt.loc5_35.1: @F.%pattern_type (%pattern_type.eee) = return_slot_pattern %return.param_patt.loc5_43.1, %.loc5_43.4 [template = %return.patt.loc5_35.2 (constants.%return.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc5: type = name_ref T, %T.loc5_16.2 [template = %T.loc5_16.1 (constants.%T)] // CHECK:STDOUT: %U.ref.loc5: type = name_ref U, %U.loc5_26.2 [symbolic = %U.loc5_26.1 (constants.%U)] @@ -176,12 +197,16 @@ fn F(template T:! type, U:! type) -> (T, U) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc5_16.2: type, %U.loc5_26.2: type) { +// CHECK:STDOUT: %T.patt.loc5_16.2: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc5_16.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc5_16.1: type = symbolic_binding T, 0, template [template = %T.loc5_16.1 (constants.%T)] +// CHECK:STDOUT: %U.patt.loc5_26.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc5_26.2 (constants.%U.patt)] // CHECK:STDOUT: %U.loc5_26.1: type = symbolic_binding U, 1 [symbolic = %U.loc5_26.1 (constants.%U)] // CHECK:STDOUT: %tuple: %tuple.type.24b = tuple_value (%T.loc5_16.1, %U.loc5_26.1) [template = %tuple (constants.%tuple)] // CHECK:STDOUT: %tuple.type: type = tuple_type (%T.loc5_16.1, %U.loc5_26.1) [template = %tuple.type (constants.%tuple.type.a5e)] // CHECK:STDOUT: %.loc5_43.2: Core.Form = init_form %tuple.type [template = %.loc5_43.2 (constants.%.f18)] // CHECK:STDOUT: %pattern_type: type = pattern_type %tuple.type [template = %pattern_type (constants.%pattern_type.eee)] +// CHECK:STDOUT: %return.param_patt.loc5_43.2: @F.%pattern_type (%pattern_type.eee) = out_param_pattern [template = %return.param_patt.loc5_43.2 (constants.%return.param_patt)] +// CHECK:STDOUT: %return.patt.loc5_35.2: @F.%pattern_type (%pattern_type.eee) = return_slot_pattern %return.param_patt.loc5_43.2, %tuple.type [template = %return.patt.loc5_35.2 (constants.%return.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %tuple.type [template = %require_complete (constants.%require_complete)] @@ -200,12 +225,16 @@ fn F(template T:! type, U:! type) -> (T, U) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T, constants.%U) { +// CHECK:STDOUT: %T.patt.loc5_16.2 => constants.%T.patt // CHECK:STDOUT: %T.loc5_16.1 => constants.%T +// CHECK:STDOUT: %U.patt.loc5_26.2 => constants.%U.patt // CHECK:STDOUT: %U.loc5_26.1 => constants.%U // CHECK:STDOUT: %tuple => constants.%tuple // CHECK:STDOUT: %tuple.type => constants.%tuple.type.a5e // CHECK:STDOUT: %.loc5_43.2 => constants.%.f18 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.eee +// CHECK:STDOUT: %return.param_patt.loc5_43.2 => constants.%return.param_patt +// CHECK:STDOUT: %return.patt.loc5_35.2 => constants.%return.patt // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete diff --git a/toolchain/check/testdata/generic/var_param.carbon b/toolchain/check/testdata/generic/var_param.carbon index c1e0298c291c..358ee1e31d7d 100644 --- a/toolchain/check/testdata/generic/var_param.carbon +++ b/toolchain/check/testdata/generic/var_param.carbon @@ -44,12 +44,17 @@ fn Test(x: i32) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.6cb: type = pattern_type %I.type [concrete] +// CHECK:STDOUT: %T.patt.1df: %pattern_type.6cb = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.dda: %I.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.b38: type = facet_access_type %T.dda [symbolic] // CHECK:STDOUT: %pattern_type.b3a: type = pattern_type %T.as_type.b38 [symbolic] +// CHECK:STDOUT: %x.patt.414: %pattern_type.b3a = ref_binding_pattern x [symbolic] +// CHECK:STDOUT: %x.param_patt.1e1: %pattern_type.b3a = var_param_pattern %x.patt.414 [symbolic] // CHECK:STDOUT: %TestOp.type: type = fn_type @TestOp [concrete] // CHECK:STDOUT: %TestOp: %TestOp.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.27c: = require_complete_type %T.as_type.b38 [symbolic] +// CHECK:STDOUT: %x.patt.aaf: %pattern_type.6b6 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.param_patt.8f9: %pattern_type.6b6 = var_param_pattern %x.patt.aaf [concrete] // CHECK:STDOUT: %TestOp.specific_fn: = specific_function %TestOp, @TestOp(%I.facet) [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.ac8: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N) [symbolic] @@ -72,9 +77,9 @@ fn Test(x: i32) { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %TestOp.decl: %TestOp.type = fn_decl @TestOp [concrete = constants.%TestOp] { -// CHECK:STDOUT: %T.patt: %pattern_type.6cb = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %x.patt: @TestOp.%pattern_type (%pattern_type.b3a) = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.param_patt: @TestOp.%pattern_type (%pattern_type.b3a) = var_param_pattern %x.patt [concrete] +// CHECK:STDOUT: %T.patt.loc22_12.1: %pattern_type.6cb = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc22_12.2 (constants.%T.patt.1df)] +// CHECK:STDOUT: %x.patt.loc22_30.1: @TestOp.%pattern_type (%pattern_type.b3a) = ref_binding_pattern x [symbolic = %x.patt.loc22_30.2 (constants.%x.patt.414)] +// CHECK:STDOUT: %x.param_patt.loc22_25.1: @TestOp.%pattern_type (%pattern_type.b3a) = var_param_pattern %x.patt.loc22_30.1 [symbolic = %x.param_patt.loc22_25.2 (constants.%x.param_patt.1e1)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc22_15: type = splice_block %I.ref [concrete = constants.%I.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -92,9 +97,12 @@ fn Test(x: i32) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @TestOp(%T.loc22_12.2: %I.type) { +// CHECK:STDOUT: %T.patt.loc22_12.2: %pattern_type.6cb = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc22_12.2 (constants.%T.patt.1df)] // CHECK:STDOUT: %T.loc22_12.1: %I.type = symbolic_binding T, 0 [symbolic = %T.loc22_12.1 (constants.%T.dda)] // CHECK:STDOUT: %T.as_type.loc22_32.1: type = facet_access_type %T.loc22_12.1 [symbolic = %T.as_type.loc22_32.1 (constants.%T.as_type.b38)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc22_32.1 [symbolic = %pattern_type (constants.%pattern_type.b3a)] +// CHECK:STDOUT: %x.patt.loc22_30.2: @TestOp.%pattern_type (%pattern_type.b3a) = ref_binding_pattern x [symbolic = %x.patt.loc22_30.2 (constants.%x.patt.414)] +// CHECK:STDOUT: %x.param_patt.loc22_25.2: @TestOp.%pattern_type (%pattern_type.b3a) = var_param_pattern %x.patt.loc22_30.2 [symbolic = %x.param_patt.loc22_25.2 (constants.%x.param_patt.1e1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc22_32.1 [symbolic = %require_complete (constants.%require_complete.27c)] @@ -109,15 +117,17 @@ fn Test(x: i32) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %TestOp.ref: %TestOp.type = name_ref TestOp, file.%TestOp.decl [concrete = constants.%TestOp] // CHECK:STDOUT: %x.ref: %i32 = name_ref x, %x -// CHECK:STDOUT: %I.facet: %I.type = facet_value constants.%i32, (constants.%I.impl_witness) [concrete = constants.%I.facet] -// CHECK:STDOUT: %.loc27: %I.type = converted constants.%i32, %I.facet [concrete = constants.%I.facet] +// CHECK:STDOUT: %I.facet.loc27_11.1: %I.type = facet_value constants.%i32, (constants.%I.impl_witness) [concrete = constants.%I.facet] +// CHECK:STDOUT: %.loc27_11.1: %I.type = converted constants.%i32, %I.facet.loc27_11.1 [concrete = constants.%I.facet] +// CHECK:STDOUT: %I.facet.loc27_11.2: %I.type = facet_value constants.%i32, (constants.%I.impl_witness) [concrete = constants.%I.facet] +// CHECK:STDOUT: %.loc27_11.2: %I.type = converted constants.%i32, %I.facet.loc27_11.2 [concrete = constants.%I.facet] // CHECK:STDOUT: %TestOp.specific_fn: = specific_function %TestOp.ref, @TestOp(constants.%I.facet) [concrete = constants.%TestOp.specific_fn] // CHECK:STDOUT: %impl.elem0: %.7a6 = impl_witness_access constants.%Copy.impl_witness.0e0, element0 [concrete = constants.%Int.as.Copy.impl.Op.4f6] // CHECK:STDOUT: %bound_method.loc27_10.1: = bound_method %x.ref, %impl.elem0 // CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0, @Int.as.Copy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Copy.impl.Op.specific_fn] // CHECK:STDOUT: %bound_method.loc27_10.2: = bound_method %x.ref, %specific_fn // CHECK:STDOUT: %Int.as.Copy.impl.Op.call: init %i32 = call %bound_method.loc27_10.2(%x.ref) -// CHECK:STDOUT: %x.var: ref %i32 = var @TestOp.%x.param_patt +// CHECK:STDOUT: %x.var: ref %i32 = var @TestOp.%x.param_patt.loc22_25.1 // CHECK:STDOUT: assign %x.var, %Int.as.Copy.impl.Op.call // CHECK:STDOUT: %TestOp.call: init %empty_tuple.type = call %TestOp.specific_fn(%x.var) // CHECK:STDOUT: %Destroy.Op.bound: = bound_method %x.var, constants.%Destroy.Op.1a2547.2 @@ -133,15 +143,21 @@ fn Test(x: i32) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TestOp(constants.%T.dda) { +// CHECK:STDOUT: %T.patt.loc22_12.2 => constants.%T.patt.1df // CHECK:STDOUT: %T.loc22_12.1 => constants.%T.dda // CHECK:STDOUT: %T.as_type.loc22_32.1 => constants.%T.as_type.b38 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.b3a +// CHECK:STDOUT: %x.patt.loc22_30.2 => constants.%x.patt.414 +// CHECK:STDOUT: %x.param_patt.loc22_25.2 => constants.%x.param_patt.1e1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TestOp(constants.%I.facet) { +// CHECK:STDOUT: %T.patt.loc22_12.2 => constants.%T.patt.1df // CHECK:STDOUT: %T.loc22_12.1 => constants.%I.facet // CHECK:STDOUT: %T.as_type.loc22_32.1 => constants.%i32 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.6b6 +// CHECK:STDOUT: %x.patt.loc22_30.2 => constants.%x.patt.aaf +// CHECK:STDOUT: %x.param_patt.loc22_25.2 => constants.%x.param_patt.8f9 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.f8a diff --git a/toolchain/check/testdata/global/basics.carbon b/toolchain/check/testdata/global/basics.carbon index 99f51f0413f7..a7e1105e5e9a 100644 --- a/toolchain/check/testdata/global/basics.carbon +++ b/toolchain/check/testdata/global/basics.carbon @@ -59,6 +59,8 @@ var a: A = Make(); // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.a96: type = pattern_type %empty_struct_type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.a96 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.a96 = var_pattern %a.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.150: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] @@ -74,8 +76,8 @@ var a: A = Make(); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.a96 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.a96 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.a96 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.a96 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %empty_struct_type = var %a.var_patt [concrete] // CHECK:STDOUT: %.loc4_9.1: type = splice_block %.loc4_9.3 [concrete = constants.%empty_struct_type] { @@ -103,12 +105,14 @@ var a: A = Make(); // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_struct_type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type = var_pattern %a.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %empty_struct_type = var %a.var_patt [concrete] // CHECK:STDOUT: %.loc4_9.1: type = splice_block %.loc4_9.3 [concrete = constants.%empty_struct_type] { @@ -135,12 +139,14 @@ var a: A = Make(); // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_struct_type [concrete] // CHECK:STDOUT: %Make.type: type = fn_type @Make [concrete] // CHECK:STDOUT: %Make: %Make.type = struct_value () [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type = var_pattern %a.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %empty_struct_type = var %a.var_patt [concrete] // CHECK:STDOUT: %.loc6_9.1: type = splice_block %.loc6_9.3 [concrete = constants.%empty_struct_type] { @@ -164,14 +170,16 @@ var a: A = Make(); // CHECK:STDOUT: %A: type = class_type @A [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %A [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type = var_pattern %a.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %A.val: %A = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %A = var %a.var_patt [concrete] // CHECK:STDOUT: %A.ref: type = name_ref A, %A.decl [concrete = constants.%A] @@ -194,12 +202,14 @@ var a: A = Make(); // CHECK:STDOUT: %pattern_type: type = pattern_type %A [concrete] // CHECK:STDOUT: %Make.type: type = fn_type @Make [concrete] // CHECK:STDOUT: %Make: %Make.type = struct_value () [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type = var_pattern %a.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %A = var %a.var_patt [concrete] // CHECK:STDOUT: %A.ref: type = name_ref A, %A.decl [concrete = constants.%A] diff --git a/toolchain/check/testdata/if/basics.carbon b/toolchain/check/testdata/if/basics.carbon index 93e3dbdc44e4..1e5368ab8527 100644 --- a/toolchain/check/testdata/if/basics.carbon +++ b/toolchain/check/testdata/if/basics.carbon @@ -118,14 +118,16 @@ fn VarScope(b: bool) -> bool { // CHECK:STDOUT: %H.type: type = fn_type @H [concrete] // CHECK:STDOUT: %H: %H.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type bool [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type = at_binding_pattern b, %b.param_patt [concrete] // CHECK:STDOUT: %If.type: type = fn_type @If [concrete] // CHECK:STDOUT: %If: %If.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %If.decl: %If.type = fn_decl @If [concrete = constants.%If] { -// CHECK:STDOUT: %b.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type = at_binding_pattern b, %b.param_patt [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %b.param: bool = value_param call_param0 // CHECK:STDOUT: %.loc8: type = type_literal bool [concrete = bool] @@ -163,14 +165,16 @@ fn VarScope(b: bool) -> bool { // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type bool [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type = at_binding_pattern b, %b.param_patt [concrete] // CHECK:STDOUT: %If.type: type = fn_type @If [concrete] // CHECK:STDOUT: %If: %If.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %If.decl: %If.type = fn_decl @If [concrete = constants.%If] { -// CHECK:STDOUT: %b.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type = at_binding_pattern b, %b.param_patt [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %b.param: bool = value_param call_param0 // CHECK:STDOUT: %.loc7: type = type_literal bool [concrete = bool] @@ -198,7 +202,11 @@ fn VarScope(b: bool) -> bool { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete] // CHECK:STDOUT: %.f34: Core.Form = init_form bool [concrete] +// CHECK:STDOUT: %return.param_patt.5a1: %pattern_type.831 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.c0c: %pattern_type.831 = return_slot_pattern %return.param_patt.5a1, bool [concrete] // CHECK:STDOUT: %If.type: type = fn_type @If [concrete] // CHECK:STDOUT: %If: %If.type = struct_value () [concrete] // CHECK:STDOUT: %false: bool = bool_literal false [concrete] @@ -221,10 +229,10 @@ fn VarScope(b: bool) -> bool { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %If.decl: %If.type = fn_decl @If [concrete = constants.%If] { -// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc4_19.1 [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete = constants.%return.param_patt.5a1] +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc4_19.1 [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_19.1: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc4_19.2: Core.Form = init_form %.loc4_19.1 [concrete = constants.%.f34] diff --git a/toolchain/check/testdata/if_expr/basic.carbon b/toolchain/check/testdata/if_expr/basic.carbon index c515b8c1c7f7..ac4d788ecf04 100644 --- a/toolchain/check/testdata/if_expr/basic.carbon +++ b/toolchain/check/testdata/if_expr/basic.carbon @@ -21,6 +21,8 @@ fn F(b: bool, n: i32, m: i32) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %Int.type: type = generic_class_type @Int [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -28,13 +30,21 @@ fn F(b: bool, n: i32, m: i32) -> i32 { // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete] +// CHECK:STDOUT: %m.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %m.patt: %pattern_type.6b6 = at_binding_pattern m, %m.param_patt [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_1, %i32 [concrete] // CHECK:STDOUT: %pattern_type.97e: type = pattern_type %array_type [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.97e = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.97e = var_pattern %x.patt [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %tuple.type.985: type = tuple_type (Core.IntLiteral) [concrete] // CHECK:STDOUT: %tuple.4f2: %tuple.type.985 = tuple_value (%int_0.5c6) [concrete] @@ -98,14 +108,14 @@ fn F(b: bool, n: i32, m: i32) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete] -// CHECK:STDOUT: %m.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %m.patt: %pattern_type.6b6 = at_binding_pattern m, %m.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc15_34 [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] +// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%n.param_patt] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete = constants.%n.patt] +// CHECK:STDOUT: %m.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%m.param_patt] +// CHECK:STDOUT: %m.patt: %pattern_type.6b6 = at_binding_pattern m, %m.param_patt [concrete = constants.%m.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc15_34 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc15_34: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc15_34: Core.Form = init_form %i32.loc15_34 [concrete = constants.%.795] @@ -126,8 +136,8 @@ fn F(b: bool, n: i32, m: i32) -> i32 { // CHECK:STDOUT: fn @F(%b.param: bool, %n.param: %i32, %m.param: %i32) -> out %return.param: %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.97e = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.97e = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.97e = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.97e = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %array_type = var %x.var_patt // CHECK:STDOUT: %int_0.loc16_27: Core.IntLiteral = int_value 0 [concrete = constants.%int_0.5c6] diff --git a/toolchain/check/testdata/if_expr/constant_condition.carbon b/toolchain/check/testdata/if_expr/constant_condition.carbon index a874fa996ad6..238779948f40 100644 --- a/toolchain/check/testdata/if_expr/constant_condition.carbon +++ b/toolchain/check/testdata/if_expr/constant_condition.carbon @@ -46,6 +46,8 @@ fn PartiallyConstant(t: type) -> i32 { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] @@ -95,7 +97,11 @@ fn PartiallyConstant(t: type) -> i32 { // CHECK:STDOUT: %Constant.type: type = fn_type @Constant [concrete] // CHECK:STDOUT: %Constant: %Constant.type = struct_value () [concrete] // CHECK:STDOUT: %ptr.d08: type = ptr_type %i32 [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.6b6 = ref_binding_pattern v [concrete] +// CHECK:STDOUT: %v.var_patt: %pattern_type.6b6 = var_pattern %v.patt [concrete] // CHECK:STDOUT: %pattern_type.f00: type = pattern_type %ptr.d08 [concrete] +// CHECK:STDOUT: %w.patt: %pattern_type.f00 = ref_binding_pattern w [concrete] +// CHECK:STDOUT: %w.var_patt: %pattern_type.f00 = var_pattern %w.patt [concrete] // CHECK:STDOUT: %Copy.impl_witness.ce1: = impl_witness imports.%Copy.impl_witness_table.4f1, @ptr.as.Copy.impl(%i32) [concrete] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.type.c1c: type = fn_type @ptr.as.Copy.impl.Op, @ptr.as.Copy.impl(%i32) [concrete] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.d1c: %ptr.as.Copy.impl.Op.type.c1c = struct_value () [concrete] @@ -108,6 +114,8 @@ fn PartiallyConstant(t: type) -> i32 { // CHECK:STDOUT: %Destroy.Op.1a2547.1: %Destroy.Op.type.1d8f74.1 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.3: type = fn_type @Destroy.Op.loc27_3.2 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.3: %Destroy.Op.type.1d8f74.3 = struct_value () [concrete] +// CHECK:STDOUT: %t.param_patt: %pattern_type.98f = value_param_pattern [concrete] +// CHECK:STDOUT: %t.patt: %pattern_type.98f = at_binding_pattern t, %t.param_patt [concrete] // CHECK:STDOUT: %PartiallyConstant.type: type = fn_type @PartiallyConstant [concrete] // CHECK:STDOUT: %PartiallyConstant: %PartiallyConstant.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -145,8 +153,8 @@ fn PartiallyConstant(t: type) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc15_11: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -154,8 +162,8 @@ fn PartiallyConstant(t: type) -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %B.decl: %B.type = fn_decl @B [concrete = constants.%B] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc16_11: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -163,8 +171,8 @@ fn PartiallyConstant(t: type) -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc18: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -172,8 +180,8 @@ fn PartiallyConstant(t: type) -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc22: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -181,8 +189,8 @@ fn PartiallyConstant(t: type) -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Constant.decl: %Constant.type = fn_decl @Constant [concrete = constants.%Constant] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc26 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc26 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc26: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc26: Core.Form = init_form %i32.loc26 [concrete = constants.%.795] @@ -190,10 +198,10 @@ fn PartiallyConstant(t: type) -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %PartiallyConstant.decl: %PartiallyConstant.type = fn_decl @PartiallyConstant [concrete = constants.%PartiallyConstant] { -// CHECK:STDOUT: %t.param_patt: %pattern_type.98f = value_param_pattern [concrete] -// CHECK:STDOUT: %t.patt: %pattern_type.98f = at_binding_pattern t, %t.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc32 [concrete] +// CHECK:STDOUT: %t.param_patt: %pattern_type.98f = value_param_pattern [concrete = constants.%t.param_patt] +// CHECK:STDOUT: %t.patt: %pattern_type.98f = at_binding_pattern t, %t.param_patt [concrete = constants.%t.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc32_34: Core.Form = init_form %i32.loc32 [concrete = constants.%.795] @@ -290,8 +298,8 @@ fn PartiallyConstant(t: type) -> i32 { // CHECK:STDOUT: fn @Constant() -> out %return.param: %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %pattern_type.6b6 = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: %pattern_type.6b6 = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.6b6 = ref_binding_pattern v [concrete = constants.%v.patt] +// CHECK:STDOUT: %v.var_patt: %pattern_type.6b6 = var_pattern %v.patt [concrete = constants.%v.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %i32 = var %v.var_patt // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -324,8 +332,8 @@ fn PartiallyConstant(t: type) -> i32 { // CHECK:STDOUT: !.loc27_8: // CHECK:STDOUT: %v: ref %i32 = ref_binding v, %v.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %w.patt: %pattern_type.f00 = ref_binding_pattern w [concrete] -// CHECK:STDOUT: %w.var_patt: %pattern_type.f00 = var_pattern %w.patt [concrete] +// CHECK:STDOUT: %w.patt: %pattern_type.f00 = ref_binding_pattern w [concrete = constants.%w.patt] +// CHECK:STDOUT: %w.var_patt: %pattern_type.f00 = var_pattern %w.patt [concrete = constants.%w.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %w.var: ref %ptr.d08 = var %w.var_patt // CHECK:STDOUT: %v.ref: ref %i32 = name_ref v, %v @@ -385,8 +393,8 @@ fn PartiallyConstant(t: type) -> i32 { // CHECK:STDOUT: fn @PartiallyConstant(%t.param: type) -> out %return.param: %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %pattern_type.6b6 = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: %pattern_type.6b6 = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.6b6 = ref_binding_pattern v [concrete = constants.%v.patt] +// CHECK:STDOUT: %v.var_patt: %pattern_type.6b6 = var_pattern %v.patt [concrete = constants.%v.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %i32 = var %v.var_patt // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -418,8 +426,8 @@ fn PartiallyConstant(t: type) -> i32 { // CHECK:STDOUT: !.loc33_8: // CHECK:STDOUT: %v: ref %i32 = ref_binding v, %v.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %w.patt: %pattern_type.f00 = ref_binding_pattern w [concrete] -// CHECK:STDOUT: %w.var_patt: %pattern_type.f00 = var_pattern %w.patt [concrete] +// CHECK:STDOUT: %w.patt: %pattern_type.f00 = ref_binding_pattern w [concrete = constants.%w.patt] +// CHECK:STDOUT: %w.var_patt: %pattern_type.f00 = var_pattern %w.patt [concrete = constants.%w.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %w.var: ref %ptr.d08 = var %w.var_patt // CHECK:STDOUT: %v.ref: ref %i32 = name_ref v, %v diff --git a/toolchain/check/testdata/if_expr/control_flow.carbon b/toolchain/check/testdata/if_expr/control_flow.carbon index a8e0d8330d21..7c44620bebad 100644 --- a/toolchain/check/testdata/if_expr/control_flow.carbon +++ b/toolchain/check/testdata/if_expr/control_flow.carbon @@ -29,6 +29,8 @@ fn F(b: bool) -> i32 { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] @@ -55,6 +57,8 @@ fn F(b: bool) -> i32 { // CHECK:STDOUT: %bound_method.3cb: = bound_method %int_2.ecc, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_2.295: %i32 = int_value 2 [concrete] // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -97,8 +101,8 @@ fn F(b: bool) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc15_11: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -106,8 +110,8 @@ fn F(b: bool) -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %B.decl: %B.type = fn_decl @B [concrete = constants.%B] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc16_11: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -115,10 +119,10 @@ fn F(b: bool) -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc18_18: Core.Form = init_form %i32 [concrete = constants.%.795] diff --git a/toolchain/check/testdata/if_expr/fail_not_in_function.carbon b/toolchain/check/testdata/if_expr/fail_not_in_function.carbon index b26b671c3b64..1c4ec2cd98e2 100644 --- a/toolchain/check/testdata/if_expr/fail_not_in_function.carbon +++ b/toolchain/check/testdata/if_expr/fail_not_in_function.carbon @@ -100,6 +100,8 @@ fn F() { // CHECK:STDOUT: --- fail_nested_class.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] @@ -111,6 +113,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(.inst{{[0-9A-F]+}}.loc4_15: type) { +// CHECK:STDOUT: %T.patt.loc4_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -138,6 +141,7 @@ fn F() { // CHECK:STDOUT: fn @F(); // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_15.2 => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/if_expr/fail_partial_constant.carbon b/toolchain/check/testdata/if_expr/fail_partial_constant.carbon index b0da4e7dda22..827acad48315 100644 --- a/toolchain/check/testdata/if_expr/fail_partial_constant.carbon +++ b/toolchain/check/testdata/if_expr/fail_partial_constant.carbon @@ -48,6 +48,8 @@ fn ChosenBranchIsNonConstant(t: type) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete] // CHECK:STDOUT: %ConditionIsNonConstant.type: type = fn_type @ConditionIsNonConstant [concrete] // CHECK:STDOUT: %ConditionIsNonConstant: %ConditionIsNonConstant.type = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] @@ -78,8 +80,8 @@ fn ChosenBranchIsNonConstant(t: type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %ConditionIsNonConstant.decl: %ConditionIsNonConstant.type = fn_decl @ConditionIsNonConstant [concrete = constants.%ConditionIsNonConstant] { -// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %b.param: bool = value_param call_param0 // CHECK:STDOUT: %.loc4: type = type_literal bool [concrete = bool] @@ -90,8 +92,8 @@ fn ChosenBranchIsNonConstant(t: type) { // CHECK:STDOUT: fn @ConditionIsNonConstant(%b.param: bool) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt: = ref_binding_pattern v [concrete = ] +// CHECK:STDOUT: %v.var_patt: = var_pattern %v.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref = var %v.var_patt [concrete = ] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1] @@ -123,6 +125,8 @@ fn ChosenBranchIsNonConstant(t: type) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %t.param_patt: %pattern_type.98f = value_param_pattern [concrete] +// CHECK:STDOUT: %t.patt: %pattern_type.98f = at_binding_pattern t, %t.param_patt [concrete] // CHECK:STDOUT: %ChosenBranchIsNonConstant.type: type = fn_type @ChosenBranchIsNonConstant [concrete] // CHECK:STDOUT: %ChosenBranchIsNonConstant: %ChosenBranchIsNonConstant.type = struct_value () [concrete] // CHECK:STDOUT: %true: bool = bool_literal true [concrete] @@ -153,8 +157,8 @@ fn ChosenBranchIsNonConstant(t: type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %ChosenBranchIsNonConstant.decl: %ChosenBranchIsNonConstant.type = fn_decl @ChosenBranchIsNonConstant [concrete = constants.%ChosenBranchIsNonConstant] { -// CHECK:STDOUT: %t.param_patt: %pattern_type.98f = value_param_pattern [concrete] -// CHECK:STDOUT: %t.patt: %pattern_type.98f = at_binding_pattern t, %t.param_patt [concrete] +// CHECK:STDOUT: %t.param_patt: %pattern_type.98f = value_param_pattern [concrete = constants.%t.param_patt] +// CHECK:STDOUT: %t.patt: %pattern_type.98f = at_binding_pattern t, %t.param_patt [concrete = constants.%t.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %t.param: type = value_param call_param0 // CHECK:STDOUT: %.loc4: type = type_literal type [concrete = type] @@ -165,8 +169,8 @@ fn ChosenBranchIsNonConstant(t: type) { // CHECK:STDOUT: fn @ChosenBranchIsNonConstant(%t.param: type) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt: = ref_binding_pattern v [concrete = ] +// CHECK:STDOUT: %v.var_patt: = var_pattern %v.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref = var %v.var_patt [concrete = ] // CHECK:STDOUT: %int_1.loc9: Core.IntLiteral = int_value 1 [concrete = constants.%int_1] @@ -192,8 +196,8 @@ fn ChosenBranchIsNonConstant(t: type) { // CHECK:STDOUT: !.loc9_15: // CHECK:STDOUT: %v: ref = ref_binding v, [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %w.patt: = ref_binding_pattern w [concrete] -// CHECK:STDOUT: %w.var_patt: = var_pattern %w.patt [concrete] +// CHECK:STDOUT: %w.patt: = ref_binding_pattern w [concrete = ] +// CHECK:STDOUT: %w.var_patt: = var_pattern %w.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %w.var: ref = var %w.var_patt [concrete = ] // CHECK:STDOUT: %int_1.loc14: Core.IntLiteral = int_value 1 [concrete = constants.%int_1] diff --git a/toolchain/check/testdata/if_expr/nested.carbon b/toolchain/check/testdata/if_expr/nested.carbon index a980f788a193..72a0c69130a1 100644 --- a/toolchain/check/testdata/if_expr/nested.carbon +++ b/toolchain/check/testdata/if_expr/nested.carbon @@ -20,6 +20,12 @@ fn F(a: bool, b: bool, c: bool) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.831 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.831 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.831 = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.831 = at_binding_pattern c, %c.param_patt [concrete] // 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] @@ -27,6 +33,8 @@ fn F(a: bool, b: bool, c: bool) -> i32 { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] @@ -96,14 +104,14 @@ fn F(a: bool, b: bool, c: bool) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.831 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.831 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %c.param_patt: %pattern_type.831 = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.831 = at_binding_pattern c, %c.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.831 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.831 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] +// CHECK:STDOUT: %c.param_patt: %pattern_type.831 = value_param_pattern [concrete = constants.%c.param_patt] +// CHECK:STDOUT: %c.patt: %pattern_type.831 = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc15_36: Core.Form = init_form %i32 [concrete = constants.%.795] diff --git a/toolchain/check/testdata/if_expr/struct.carbon b/toolchain/check/testdata/if_expr/struct.carbon index 1fef57465a9e..0b189cf00c52 100644 --- a/toolchain/check/testdata/if_expr/struct.carbon +++ b/toolchain/check/testdata/if_expr/struct.carbon @@ -29,12 +29,18 @@ fn F(cond: bool) { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %struct_type.a.b.b4c: type = struct_type {.a: %i32, .b: %i32} [concrete] // CHECK:STDOUT: %pattern_type.20e3: type = pattern_type %struct_type.a.b.b4c [concrete] +// CHECK:STDOUT: %s.param_patt: %pattern_type.20e3 = value_param_pattern [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.20e3 = at_binding_pattern s, %s.param_patt [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] +// CHECK:STDOUT: %cond.param_patt: %pattern_type.831 = value_param_pattern [concrete] +// CHECK:STDOUT: %cond.patt: %pattern_type.831 = at_binding_pattern cond, %cond.param_patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.20e3 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.20e3 = var_pattern %a.patt [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %struct_type.a.b.cfd: type = struct_type {.a: Core.IntLiteral, .b: Core.IntLiteral} [concrete] @@ -89,8 +95,8 @@ fn F(cond: bool) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %s.param_patt: %pattern_type.20e3 = value_param_pattern [concrete] -// CHECK:STDOUT: %s.patt: %pattern_type.20e3 = at_binding_pattern s, %s.param_patt [concrete] +// CHECK:STDOUT: %s.param_patt: %pattern_type.20e3 = value_param_pattern [concrete = constants.%s.param_patt] +// CHECK:STDOUT: %s.patt: %pattern_type.20e3 = at_binding_pattern s, %s.param_patt [concrete = constants.%s.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %s.param: %struct_type.a.b.b4c = value_param call_param0 // CHECK:STDOUT: %.loc15: type = splice_block %struct_type.a.b [concrete = constants.%struct_type.a.b.b4c] { @@ -101,8 +107,8 @@ fn F(cond: bool) { // CHECK:STDOUT: %s: %struct_type.a.b.b4c = value_binding s, %s.param // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %cond.param_patt: %pattern_type.831 = value_param_pattern [concrete] -// CHECK:STDOUT: %cond.patt: %pattern_type.831 = at_binding_pattern cond, %cond.param_patt [concrete] +// CHECK:STDOUT: %cond.param_patt: %pattern_type.831 = value_param_pattern [concrete = constants.%cond.param_patt] +// CHECK:STDOUT: %cond.patt: %pattern_type.831 = at_binding_pattern cond, %cond.param_patt [concrete = constants.%cond.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %cond.param: bool = value_param call_param0 // CHECK:STDOUT: %.loc17: type = type_literal bool [concrete = bool] @@ -115,8 +121,8 @@ fn F(cond: bool) { // CHECK:STDOUT: fn @F(%cond.param: bool) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.20e3 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.20e3 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.20e3 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.20e3 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %struct_type.a.b.b4c = var %a.var_patt // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] diff --git a/toolchain/check/testdata/impl/assoc_const_self.carbon b/toolchain/check/testdata/impl/assoc_const_self.carbon index ed4aadcbe1df..4bd6cf34a6c8 100644 --- a/toolchain/check/testdata/impl/assoc_const_self.carbon +++ b/toolchain/check/testdata/impl/assoc_const_self.carbon @@ -410,8 +410,12 @@ fn CallF() { // CHECK:STDOUT: %ImplicitAs.type.dee: type = facet_type <@ImplicitAs, @ImplicitAs(%C)> [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness: = impl_witness @empty_tuple.type.as.ImplicitAs.impl.%ImplicitAs.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %self.param_patt.154: %pattern_type.cb1 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.8c1: %pattern_type.cb1 = at_binding_pattern self, %self.param_patt.154 [concrete] // CHECK:STDOUT: %.a44: Core.Form = init_form %C [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %return.param_patt.89a: %pattern_type.98b = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e4a: %pattern_type.98b = return_slot_pattern %return.param_patt.89a, %C [concrete] // CHECK:STDOUT: %empty_tuple.type.as.ImplicitAs.impl.Convert.type: type = fn_type @empty_tuple.type.as.ImplicitAs.impl.Convert [concrete] // CHECK:STDOUT: %empty_tuple.type.as.ImplicitAs.impl.Convert: %empty_tuple.type.as.ImplicitAs.impl.Convert.type = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.dee = facet_value %empty_tuple.type, (%ImplicitAs.impl_witness) [concrete] @@ -495,10 +499,10 @@ fn CallF() { // CHECK:STDOUT: // CHECK:STDOUT: impl @empty_tuple.type.as.ImplicitAs.impl: %.loc10_7.2 as %ImplicitAs.type { // CHECK:STDOUT: %empty_tuple.type.as.ImplicitAs.impl.Convert.decl: %empty_tuple.type.as.ImplicitAs.impl.Convert.type = fn_decl @empty_tuple.type.as.ImplicitAs.impl.Convert [concrete = constants.%empty_tuple.type.as.ImplicitAs.impl.Convert] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.cb1 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.cb1 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C.ref [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.cb1 = value_param_pattern [concrete = constants.%self.param_patt.154] +// CHECK:STDOUT: %self.patt: %pattern_type.cb1 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.8c1] +// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete = constants.%return.param_patt.89a] +// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C.ref [concrete = constants.%return.patt.e4a] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %.loc11_34: Core.Form = init_form %C.ref [concrete = constants.%.a44] @@ -584,6 +588,7 @@ fn CallF() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self.c39: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.dc0: type = pattern_type Core.IntLiteral [concrete] +// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %I.type.335: type = generic_interface_type @I [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -636,7 +641,7 @@ fn CallF() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %I.decl: %I.type.335 = interface_decl @I [concrete = constants.%I.generic] { -// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [concrete] +// CHECK:STDOUT: %N.patt.loc4_14.1: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_14.2 (constants.%N.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4: type = splice_block %IntLiteral.ref [concrete = Core.IntLiteral] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.c39] @@ -670,6 +675,7 @@ fn CallF() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @I(%N.loc4_14.2: Core.IntLiteral) { +// CHECK:STDOUT: %N.patt.loc4_14.2: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_14.2 (constants.%N.patt)] // CHECK:STDOUT: %N.loc4_14.1: Core.IntLiteral = symbolic_binding N, 0 [symbolic = %N.loc4_14.1 (constants.%N)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -703,12 +709,14 @@ fn CallF() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%N) { +// CHECK:STDOUT: %N.patt.loc4_14.2 => constants.%N.patt // CHECK:STDOUT: %N.loc4_14.1 => constants.%N // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I.WithSelf(constants.%N, constants.%Self.4d2) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%int_-1) { +// CHECK:STDOUT: %N.patt.loc4_14.2 => constants.%N.patt // CHECK:STDOUT: %N.loc4_14.1 => constants.%int_-1 // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -748,6 +756,7 @@ fn CallF() { // CHECK:STDOUT: %impl.elem0: %.Self.as_type = impl_witness_access %I.lookup_impl_witness.a48, element0 [symbolic_self] // CHECK:STDOUT: %I_where.type: type = facet_type <@I where %empty_struct_type impls @ImplicitAs, @ImplicitAs(%.Self.as_type) and %impl.elem0 = %empty_struct> [concrete] // CHECK:STDOUT: %pattern_type.be2: type = pattern_type %I_where.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.be2 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: %I_where.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] @@ -774,7 +783,7 @@ fn CallF() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %I.decl: type = interface_decl @I [concrete = constants.%I.type] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type.be2 = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc8_7.1: %pattern_type.be2 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_7.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8_12.1: type = splice_block %.loc8_12.2 [concrete = constants.%I_where.type] { // CHECK:STDOUT: %.Self.loc8_7: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.c39] @@ -825,6 +834,7 @@ fn CallF() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc8_7.2: %I_where.type) { +// CHECK:STDOUT: %T.patt.loc8_7.2: %pattern_type.be2 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_7.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc8_7.1: %I_where.type = symbolic_binding T, 0 [symbolic = %T.loc8_7.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); @@ -850,6 +860,7 @@ fn CallF() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T) { +// CHECK:STDOUT: %T.patt.loc8_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_7.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/compound.carbon b/toolchain/check/testdata/impl/compound.carbon index eaa9c98d242b..539e701d4bdf 100644 --- a/toolchain/check/testdata/impl/compound.carbon +++ b/toolchain/check/testdata/impl/compound.carbon @@ -127,6 +127,7 @@ fn InstanceCallFail() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %Dest: type = symbolic_binding Dest, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -134,8 +135,12 @@ fn InstanceCallFail() { // CHECK:STDOUT: %Self: %ImplicitAs.type.3aa = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] // CHECK:STDOUT: %pattern_type.701: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt: %pattern_type.701 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt: %pattern_type.701 = at_binding_pattern self, %self.param_patt [symbolic] // CHECK:STDOUT: %.184: Core.Form = init_form %Dest [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %Dest [symbolic] +// CHECK:STDOUT: %return.param_patt: %pattern_type.51d = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt: %pattern_type.51d = return_slot_pattern %return.param_patt, %Dest [symbolic] // CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.type: type = fn_type @ImplicitAs.WithSelf.Convert, @ImplicitAs.WithSelf(%Dest, %Self) [symbolic] // CHECK:STDOUT: %ImplicitAs.WithSelf.Convert: %ImplicitAs.WithSelf.Convert.type = struct_value () [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] @@ -147,7 +152,7 @@ fn InstanceCallFail() { // CHECK:STDOUT: .ImplicitAs = %ImplicitAs.decl // CHECK:STDOUT: } // CHECK:STDOUT: %ImplicitAs.decl: %ImplicitAs.type.0ff = interface_decl @ImplicitAs [concrete = constants.%ImplicitAs.generic] { -// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [concrete] +// CHECK:STDOUT: %Dest.patt.loc3_26.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc3_26.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc3_29.1: type = splice_block %.loc3_29.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -158,6 +163,7 @@ fn InstanceCallFail() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(%Dest.loc3_26.2: type) { +// CHECK:STDOUT: %Dest.patt.loc3_26.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc3_26.2 (constants.%Dest.patt)] // CHECK:STDOUT: %Dest.loc3_26.1: type = symbolic_binding Dest, 0 [symbolic = %Dest.loc3_26.1 (constants.%Dest)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -170,10 +176,10 @@ fn InstanceCallFail() { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.decl: @ImplicitAs.WithSelf.%ImplicitAs.WithSelf.Convert.type (%ImplicitAs.WithSelf.Convert.type) = fn_decl @ImplicitAs.WithSelf.Convert [symbolic = @ImplicitAs.WithSelf.%ImplicitAs.WithSelf.Convert (constants.%ImplicitAs.WithSelf.Convert)] { -// CHECK:STDOUT: %self.param_patt: @ImplicitAs.WithSelf.Convert.%pattern_type.loc4_14 (%pattern_type.701) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @ImplicitAs.WithSelf.Convert.%pattern_type.loc4_14 (%pattern_type.701) = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @ImplicitAs.WithSelf.Convert.%pattern_type.loc4_23 (%pattern_type.51d) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @ImplicitAs.WithSelf.Convert.%pattern_type.loc4_23 (%pattern_type.51d) = return_slot_pattern %return.param_patt, %Dest.ref [concrete] +// CHECK:STDOUT: %self.param_patt.loc4_14.1: @ImplicitAs.WithSelf.Convert.%pattern_type.loc4_14 (%pattern_type.701) = value_param_pattern [symbolic = %self.param_patt.loc4_14.2 (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt.loc4_14.1: @ImplicitAs.WithSelf.Convert.%pattern_type.loc4_14 (%pattern_type.701) = at_binding_pattern self, %self.param_patt.loc4_14.1 [symbolic = %self.patt.loc4_14.2 (constants.%self.patt)] +// CHECK:STDOUT: %return.param_patt.loc4_23.1: @ImplicitAs.WithSelf.Convert.%pattern_type.loc4_23 (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt.loc4_23.2 (constants.%return.param_patt)] +// CHECK:STDOUT: %return.patt.loc4_20.1: @ImplicitAs.WithSelf.Convert.%pattern_type.loc4_23 (%pattern_type.51d) = return_slot_pattern %return.param_patt.loc4_23.1, %Dest.ref [symbolic = %return.patt.loc4_20.2 (constants.%return.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @ImplicitAs.%Dest.loc3_26.2 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %.loc4_23.2: Core.Form = init_form %Dest.ref [symbolic = %.loc4_23.1 (constants.%.184)] @@ -207,13 +213,18 @@ fn InstanceCallFail() { // CHECK:STDOUT: %Self: @ImplicitAs.WithSelf.Convert.%ImplicitAs.type (%ImplicitAs.type.3aa) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc4_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc4_14.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type.loc4_14: type = pattern_type %Self.as_type.loc4_14.1 [symbolic = %pattern_type.loc4_14 (constants.%pattern_type.701)] +// CHECK:STDOUT: %self.param_patt.loc4_14.2: @ImplicitAs.WithSelf.Convert.%pattern_type.loc4_14 (%pattern_type.701) = value_param_pattern [symbolic = %self.param_patt.loc4_14.2 (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt.loc4_14.2: @ImplicitAs.WithSelf.Convert.%pattern_type.loc4_14 (%pattern_type.701) = at_binding_pattern self, %self.param_patt.loc4_14.2 [symbolic = %self.patt.loc4_14.2 (constants.%self.patt)] // CHECK:STDOUT: %.loc4_23.1: Core.Form = init_form %Dest [symbolic = %.loc4_23.1 (constants.%.184)] // CHECK:STDOUT: %pattern_type.loc4_23: type = pattern_type %Dest [symbolic = %pattern_type.loc4_23 (constants.%pattern_type.51d)] +// CHECK:STDOUT: %return.param_patt.loc4_23.2: @ImplicitAs.WithSelf.Convert.%pattern_type.loc4_23 (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt.loc4_23.2 (constants.%return.param_patt)] +// CHECK:STDOUT: %return.patt.loc4_20.2: @ImplicitAs.WithSelf.Convert.%pattern_type.loc4_23 (%pattern_type.51d) = return_slot_pattern %return.param_patt.loc4_23.2, %Dest [symbolic = %return.patt.loc4_20.2 (constants.%return.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @ImplicitAs.WithSelf.Convert.%Self.as_type.loc4_14.1 (%Self.as_type)) -> out %return.param: @ImplicitAs.WithSelf.Convert.%Dest (%Dest); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(constants.%Dest) { +// CHECK:STDOUT: %Dest.patt.loc3_26.2 => constants.%Dest.patt // CHECK:STDOUT: %Dest.loc3_26.1 => constants.%Dest // CHECK:STDOUT: } // CHECK:STDOUT: @@ -225,8 +236,12 @@ fn InstanceCallFail() { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc4_14.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type.loc4_14 => constants.%pattern_type.701 +// CHECK:STDOUT: %self.param_patt.loc4_14.2 => constants.%self.param_patt +// CHECK:STDOUT: %self.patt.loc4_14.2 => constants.%self.patt // CHECK:STDOUT: %.loc4_23.1 => constants.%.184 // CHECK:STDOUT: %pattern_type.loc4_23 => constants.%pattern_type.51d +// CHECK:STDOUT: %return.param_patt.loc4_23.2 => constants.%return.param_patt +// CHECK:STDOUT: %return.patt.loc4_20.2 => constants.%return.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- non-instance_success.carbon @@ -354,19 +369,27 @@ fn InstanceCallFail() { // CHECK:STDOUT: %NonInstance2.WithSelf.F2.type.748: type = fn_type @NonInstance2.WithSelf.F2, @NonInstance2.WithSelf(%NonInstance2.facet) [concrete] // CHECK:STDOUT: %NonInstance2.WithSelf.F2.286: %NonInstance2.WithSelf.F2.type.748 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.d5c: type = pattern_type %struct_type.b [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.d5c = value_param_pattern [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.d5c = at_binding_pattern n, %n.param_patt [concrete] // CHECK:STDOUT: %NonInstanceCall2.type: type = fn_type @NonInstanceCall2 [concrete] // CHECK:STDOUT: %NonInstanceCall2: %NonInstanceCall2.type = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] // CHECK:STDOUT: %Dest: type = symbolic_binding Dest, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.3aa: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %Self.294: %ImplicitAs.type.3aa = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type.fcc: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.type.97e: type = fn_type @ImplicitAs.WithSelf.Convert, @ImplicitAs.WithSelf(%Dest, %Self.294) [symbolic] // CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.945: %ImplicitAs.WithSelf.Convert.type.97e = struct_value () [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %Dest [symbolic] +// CHECK:STDOUT: %return.param_patt: %pattern_type.51d = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt: %pattern_type.51d = return_slot_pattern %return.param_patt, invalid [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.294 [symbolic] // CHECK:STDOUT: %pattern_type.20e: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt: %pattern_type.20e = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt: %pattern_type.20e = at_binding_pattern self, %self.param_patt [symbolic] // CHECK:STDOUT: %.184: Core.Form = init_form %Dest [symbolic] // CHECK:STDOUT: %ImplicitAs.type.4d6: type = facet_type <@ImplicitAs, @ImplicitAs(%NonInstance2.type)> [concrete] // CHECK:STDOUT: %Self.2c5: %ImplicitAs.type.4d6 = symbolic_binding Self, 1 [symbolic] @@ -408,8 +431,8 @@ fn InstanceCallFail() { // CHECK:STDOUT: %NonInstance2.ref: type = name_ref NonInstance2, file.%NonInstance2.decl [concrete = constants.%NonInstance2.type] // CHECK:STDOUT: } // CHECK:STDOUT: %NonInstanceCall2.decl: %NonInstanceCall2.type = fn_decl @NonInstanceCall2 [concrete = constants.%NonInstanceCall2] { -// CHECK:STDOUT: %n.param_patt: %pattern_type.d5c = value_param_pattern [concrete] -// CHECK:STDOUT: %n.patt: %pattern_type.d5c = at_binding_pattern n, %n.param_patt [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.d5c = value_param_pattern [concrete = constants.%n.param_patt] +// CHECK:STDOUT: %n.patt: %pattern_type.d5c = at_binding_pattern n, %n.param_patt [concrete = constants.%n.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %n.param: %struct_type.b = value_param call_param0 // CHECK:STDOUT: %.loc13_31: type = splice_block %struct_type.b [concrete = constants.%struct_type.b] { @@ -438,6 +461,7 @@ fn InstanceCallFail() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(imports.%Core.import_ref.b3bc94.3: type) [from "core.carbon"] { +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt (constants.%Dest.patt)] // CHECK:STDOUT: %Dest: type = symbolic_binding Dest, 0 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -489,8 +513,12 @@ fn InstanceCallFail() { // CHECK:STDOUT: %Self: @ImplicitAs.WithSelf.Convert.%ImplicitAs.type (%ImplicitAs.type.3aa) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self.294)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type.1: type = pattern_type %Self.as_type [symbolic = %pattern_type.1 (constants.%pattern_type.20e)] +// CHECK:STDOUT: %self.param_patt: @ImplicitAs.WithSelf.Convert.%pattern_type.1 (%pattern_type.20e) = value_param_pattern [symbolic = %self.param_patt (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt: @ImplicitAs.WithSelf.Convert.%pattern_type.1 (%pattern_type.20e) = at_binding_pattern self, %self.param_patt [symbolic = %self.patt (constants.%self.patt)] // CHECK:STDOUT: %.1: Core.Form = init_form %Dest [symbolic = %.1 (constants.%.184)] // CHECK:STDOUT: %pattern_type.2: type = pattern_type %Dest [symbolic = %pattern_type.2 (constants.%pattern_type.51d)] +// CHECK:STDOUT: %return.param_patt: @ImplicitAs.WithSelf.Convert.%pattern_type.2 (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt (constants.%return.param_patt)] +// CHECK:STDOUT: %return.patt: @ImplicitAs.WithSelf.Convert.%pattern_type.2 (%pattern_type.51d) = return_slot_pattern %return.param_patt, invalid [symbolic = %return.patt (constants.%return.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -514,6 +542,7 @@ fn InstanceCallFail() { // CHECK:STDOUT: specific @NonInstance2.WithSelf.F2(constants.%NonInstance2.facet) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(constants.%Dest) { +// CHECK:STDOUT: %Dest.patt => constants.%Dest.patt // CHECK:STDOUT: %Dest => constants.%Dest // CHECK:STDOUT: } // CHECK:STDOUT: @@ -525,11 +554,16 @@ fn InstanceCallFail() { // CHECK:STDOUT: %Self => constants.%Self.294 // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type // CHECK:STDOUT: %pattern_type.1 => constants.%pattern_type.20e +// CHECK:STDOUT: %self.param_patt => constants.%self.param_patt +// CHECK:STDOUT: %self.patt => constants.%self.patt // CHECK:STDOUT: %.1 => constants.%.184 // CHECK:STDOUT: %pattern_type.2 => constants.%pattern_type.51d +// CHECK:STDOUT: %return.param_patt => constants.%return.param_patt +// CHECK:STDOUT: %return.patt => constants.%return.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(constants.%NonInstance2.type) { +// CHECK:STDOUT: %Dest.patt => constants.%Dest.patt // CHECK:STDOUT: %Dest => constants.%NonInstance2.type // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -568,19 +602,27 @@ fn InstanceCallFail() { // CHECK:STDOUT: %NonInstance3.WithSelf.F3.a3c: %NonInstance3.WithSelf.F3.type.0a9 = struct_value () [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %struct_type.c [concrete] // CHECK:STDOUT: %pattern_type.5f5: type = pattern_type %ptr [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.5f5 = value_param_pattern [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.5f5 = at_binding_pattern p, %p.param_patt [concrete] // CHECK:STDOUT: %NonInstanceCallIndirect.type: type = fn_type @NonInstanceCallIndirect [concrete] // CHECK:STDOUT: %NonInstanceCallIndirect: %NonInstanceCallIndirect.type = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] // CHECK:STDOUT: %Dest: type = symbolic_binding Dest, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.3aa: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %Self.294: %ImplicitAs.type.3aa = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type.fcc: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.type.97e: type = fn_type @ImplicitAs.WithSelf.Convert, @ImplicitAs.WithSelf(%Dest, %Self.294) [symbolic] // CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.945: %ImplicitAs.WithSelf.Convert.type.97e = struct_value () [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %Dest [symbolic] +// CHECK:STDOUT: %return.param_patt: %pattern_type.51d = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt: %pattern_type.51d = return_slot_pattern %return.param_patt, invalid [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.294 [symbolic] // CHECK:STDOUT: %pattern_type.20e: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt: %pattern_type.20e = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt: %pattern_type.20e = at_binding_pattern self, %self.param_patt [symbolic] // CHECK:STDOUT: %.184: Core.Form = init_form %Dest [symbolic] // CHECK:STDOUT: %ImplicitAs.type.04b: type = facet_type <@ImplicitAs, @ImplicitAs(%NonInstance3.type)> [concrete] // CHECK:STDOUT: %Self.522: %ImplicitAs.type.04b = symbolic_binding Self, 1 [symbolic] @@ -622,8 +664,8 @@ fn InstanceCallFail() { // CHECK:STDOUT: %NonInstance3.ref: type = name_ref NonInstance3, file.%NonInstance3.decl [concrete = constants.%NonInstance3.type] // CHECK:STDOUT: } // CHECK:STDOUT: %NonInstanceCallIndirect.decl: %NonInstanceCallIndirect.type = fn_decl @NonInstanceCallIndirect [concrete = constants.%NonInstanceCallIndirect] { -// CHECK:STDOUT: %p.param_patt: %pattern_type.5f5 = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.5f5 = at_binding_pattern p, %p.param_patt [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.5f5 = value_param_pattern [concrete = constants.%p.param_patt] +// CHECK:STDOUT: %p.patt: %pattern_type.5f5 = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %p.param: %ptr = value_param call_param0 // CHECK:STDOUT: %.loc13_39: type = splice_block %ptr [concrete = constants.%ptr] { @@ -653,6 +695,7 @@ fn InstanceCallFail() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(imports.%Core.import_ref.b3bc94.3: type) [from "core.carbon"] { +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt (constants.%Dest.patt)] // CHECK:STDOUT: %Dest: type = symbolic_binding Dest, 0 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -705,8 +748,12 @@ fn InstanceCallFail() { // CHECK:STDOUT: %Self: @ImplicitAs.WithSelf.Convert.%ImplicitAs.type (%ImplicitAs.type.3aa) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self.294)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type.1: type = pattern_type %Self.as_type [symbolic = %pattern_type.1 (constants.%pattern_type.20e)] +// CHECK:STDOUT: %self.param_patt: @ImplicitAs.WithSelf.Convert.%pattern_type.1 (%pattern_type.20e) = value_param_pattern [symbolic = %self.param_patt (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt: @ImplicitAs.WithSelf.Convert.%pattern_type.1 (%pattern_type.20e) = at_binding_pattern self, %self.param_patt [symbolic = %self.patt (constants.%self.patt)] // CHECK:STDOUT: %.1: Core.Form = init_form %Dest [symbolic = %.1 (constants.%.184)] // CHECK:STDOUT: %pattern_type.2: type = pattern_type %Dest [symbolic = %pattern_type.2 (constants.%pattern_type.51d)] +// CHECK:STDOUT: %return.param_patt: @ImplicitAs.WithSelf.Convert.%pattern_type.2 (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt (constants.%return.param_patt)] +// CHECK:STDOUT: %return.patt: @ImplicitAs.WithSelf.Convert.%pattern_type.2 (%pattern_type.51d) = return_slot_pattern %return.param_patt, invalid [symbolic = %return.patt (constants.%return.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -730,6 +777,7 @@ fn InstanceCallFail() { // CHECK:STDOUT: specific @NonInstance3.WithSelf.F3(constants.%NonInstance3.facet) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(constants.%Dest) { +// CHECK:STDOUT: %Dest.patt => constants.%Dest.patt // CHECK:STDOUT: %Dest => constants.%Dest // CHECK:STDOUT: } // CHECK:STDOUT: @@ -741,11 +789,16 @@ fn InstanceCallFail() { // CHECK:STDOUT: %Self => constants.%Self.294 // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type // CHECK:STDOUT: %pattern_type.1 => constants.%pattern_type.20e +// CHECK:STDOUT: %self.param_patt => constants.%self.param_patt +// CHECK:STDOUT: %self.patt => constants.%self.patt // CHECK:STDOUT: %.1 => constants.%.184 // CHECK:STDOUT: %pattern_type.2 => constants.%pattern_type.51d +// CHECK:STDOUT: %return.param_patt => constants.%return.param_patt +// CHECK:STDOUT: %return.patt => constants.%return.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(constants.%NonInstance3.type) { +// CHECK:STDOUT: %Dest.patt => constants.%Dest.patt // CHECK:STDOUT: %Dest => constants.%NonInstance3.type // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -771,6 +824,8 @@ fn InstanceCallFail() { // CHECK:STDOUT: %Self: %Instance1.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] // CHECK:STDOUT: %pattern_type.f46: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt.281: %pattern_type.f46 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.1a0: %pattern_type.f46 = at_binding_pattern self, %self.param_patt.281 [symbolic] // CHECK:STDOUT: %Instance1.WithSelf.G1.type.284: type = fn_type @Instance1.WithSelf.G1, @Instance1.WithSelf(%Self) [symbolic] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Instance1.WithSelf.G1.7cb: %Instance1.WithSelf.G1.type.284 = struct_value () [symbolic] @@ -780,16 +835,22 @@ fn InstanceCallFail() { // CHECK:STDOUT: %struct_type.d: type = struct_type {.d: %empty_tuple.type} [concrete] // CHECK:STDOUT: %Instance1.impl_witness: = impl_witness @struct_type.d.as.Instance1.impl.%Instance1.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.515: type = pattern_type %struct_type.d [concrete] +// CHECK:STDOUT: %self.param_patt.3aa: %pattern_type.515 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.bed: %pattern_type.515 = at_binding_pattern self, %self.param_patt.3aa [concrete] // CHECK:STDOUT: %struct_type.d.as.Instance1.impl.G1.type: type = fn_type @struct_type.d.as.Instance1.impl.G1 [concrete] // CHECK:STDOUT: %struct_type.d.as.Instance1.impl.G1: %struct_type.d.as.Instance1.impl.G1.type = struct_value () [concrete] // CHECK:STDOUT: %Instance1.facet: %Instance1.type = facet_value %struct_type.d, (%Instance1.impl_witness) [concrete] // CHECK:STDOUT: %Instance1.WithSelf.G1.type.8c3: type = fn_type @Instance1.WithSelf.G1, @Instance1.WithSelf(%Instance1.facet) [concrete] // CHECK:STDOUT: %Instance1.WithSelf.G1.50a: %Instance1.WithSelf.G1.type.8c3 = struct_value () [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.515 = value_param_pattern [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.515 = at_binding_pattern n, %n.param_patt [concrete] // CHECK:STDOUT: %InstanceCall.type: type = fn_type @InstanceCall [concrete] // CHECK:STDOUT: %InstanceCall: %InstanceCall.type = struct_value () [concrete] // CHECK:STDOUT: %.5fa: type = fn_type_with_self_type %Instance1.WithSelf.G1.type.8c3, %Instance1.facet [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %struct_type.d [concrete] // CHECK:STDOUT: %pattern_type.8d6: type = pattern_type %ptr [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.8d6 = value_param_pattern [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.8d6 = at_binding_pattern p, %p.param_patt [concrete] // CHECK:STDOUT: %InstanceCallIndirect.type: type = fn_type @InstanceCallIndirect [concrete] // CHECK:STDOUT: %InstanceCallIndirect: %InstanceCallIndirect.type = struct_value () [concrete] // CHECK:STDOUT: %struct: %struct_type.d = struct_value (%empty_tuple) [concrete] @@ -809,8 +870,8 @@ fn InstanceCallFail() { // CHECK:STDOUT: %Instance1.ref: type = name_ref Instance1, file.%Instance1.decl [concrete = constants.%Instance1.type] // CHECK:STDOUT: } // CHECK:STDOUT: %InstanceCall.decl: %InstanceCall.type = fn_decl @InstanceCall [concrete = constants.%InstanceCall] { -// CHECK:STDOUT: %n.param_patt: %pattern_type.515 = value_param_pattern [concrete] -// CHECK:STDOUT: %n.patt: %pattern_type.515 = at_binding_pattern n, %n.param_patt [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.515 = value_param_pattern [concrete = constants.%n.param_patt] +// CHECK:STDOUT: %n.patt: %pattern_type.515 = at_binding_pattern n, %n.param_patt [concrete = constants.%n.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %n.param: %struct_type.d = value_param call_param0 // CHECK:STDOUT: %.loc11_27: type = splice_block %struct_type.d [concrete = constants.%struct_type.d] { @@ -821,8 +882,8 @@ fn InstanceCallFail() { // CHECK:STDOUT: %n: %struct_type.d = value_binding n, %n.param // CHECK:STDOUT: } // CHECK:STDOUT: %InstanceCallIndirect.decl: %InstanceCallIndirect.type = fn_decl @InstanceCallIndirect [concrete = constants.%InstanceCallIndirect] { -// CHECK:STDOUT: %p.param_patt: %pattern_type.8d6 = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.8d6 = at_binding_pattern p, %p.param_patt [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.8d6 = value_param_pattern [concrete = constants.%p.param_patt] +// CHECK:STDOUT: %p.patt: %pattern_type.8d6 = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %p.param: %ptr = value_param call_param0 // CHECK:STDOUT: %.loc15_36: type = splice_block %ptr [concrete = constants.%ptr] { @@ -841,8 +902,8 @@ fn InstanceCallFail() { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %Instance1.WithSelf.G1.decl: @Instance1.WithSelf.%Instance1.WithSelf.G1.type (%Instance1.WithSelf.G1.type.284) = fn_decl @Instance1.WithSelf.G1 [symbolic = @Instance1.WithSelf.%Instance1.WithSelf.G1 (constants.%Instance1.WithSelf.G1.7cb)] { -// CHECK:STDOUT: %self.param_patt: @Instance1.WithSelf.G1.%pattern_type (%pattern_type.f46) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @Instance1.WithSelf.G1.%pattern_type (%pattern_type.f46) = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc4_9.1: @Instance1.WithSelf.G1.%pattern_type (%pattern_type.f46) = value_param_pattern [symbolic = %self.param_patt.loc4_9.2 (constants.%self.param_patt.281)] +// CHECK:STDOUT: %self.patt.loc4_9.1: @Instance1.WithSelf.G1.%pattern_type (%pattern_type.f46) = at_binding_pattern self, %self.param_patt.loc4_9.1 [symbolic = %self.patt.loc4_9.2 (constants.%self.patt.1a0)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @Instance1.WithSelf.G1.%Self.as_type.loc4_9.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc4_9.1: type = splice_block %.loc4_9.2 [symbolic = %Self.as_type.loc4_9.1 (constants.%Self.as_type)] { @@ -864,8 +925,8 @@ fn InstanceCallFail() { // CHECK:STDOUT: // CHECK:STDOUT: impl @struct_type.d.as.Instance1.impl: %struct_type.d as %Instance1.ref { // CHECK:STDOUT: %struct_type.d.as.Instance1.impl.G1.decl: %struct_type.d.as.Instance1.impl.G1.type = fn_decl @struct_type.d.as.Instance1.impl.G1 [concrete = constants.%struct_type.d.as.Instance1.impl.G1] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.515 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.515 = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.515 = value_param_pattern [concrete = constants.%self.param_patt.3aa] +// CHECK:STDOUT: %self.patt: %pattern_type.515 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.bed] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %struct_type.d = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @struct_type.d.as.Instance1.impl.%struct_type.d [concrete = constants.%struct_type.d] @@ -884,6 +945,8 @@ fn InstanceCallFail() { // CHECK:STDOUT: %Self: %Instance1.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc4_9.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc4_9.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc4_9.1 [symbolic = %pattern_type (constants.%pattern_type.f46)] +// CHECK:STDOUT: %self.param_patt.loc4_9.2: @Instance1.WithSelf.G1.%pattern_type (%pattern_type.f46) = value_param_pattern [symbolic = %self.param_patt.loc4_9.2 (constants.%self.param_patt.281)] +// CHECK:STDOUT: %self.patt.loc4_9.2: @Instance1.WithSelf.G1.%pattern_type (%pattern_type.f46) = at_binding_pattern self, %self.param_patt.loc4_9.2 [symbolic = %self.patt.loc4_9.2 (constants.%self.patt.1a0)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Instance1.WithSelf.G1.%Self.as_type.loc4_9.1 (%Self.as_type)); // CHECK:STDOUT: } @@ -932,6 +995,8 @@ fn InstanceCallFail() { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc4_9.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.f46 +// CHECK:STDOUT: %self.param_patt.loc4_9.2 => constants.%self.param_patt.281 +// CHECK:STDOUT: %self.patt.loc4_9.2 => constants.%self.patt.1a0 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Instance1.WithSelf(constants.%Instance1.facet) { @@ -945,6 +1010,8 @@ fn InstanceCallFail() { // CHECK:STDOUT: %Self => constants.%Instance1.facet // CHECK:STDOUT: %Self.as_type.loc4_9.1 => constants.%struct_type.d // CHECK:STDOUT: %pattern_type => constants.%pattern_type.515 +// CHECK:STDOUT: %self.param_patt.loc4_9.2 => constants.%self.param_patt.3aa +// CHECK:STDOUT: %self.patt.loc4_9.2 => constants.%self.patt.bed // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_instance.carbon @@ -954,6 +1021,8 @@ fn InstanceCallFail() { // CHECK:STDOUT: %Self: %Instance2.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] // CHECK:STDOUT: %pattern_type.8a4: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt.fe5: %pattern_type.8a4 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.fd0: %pattern_type.8a4 = at_binding_pattern self, %self.param_patt.fe5 [symbolic] // CHECK:STDOUT: %Instance2.WithSelf.G2.type.512: type = fn_type @Instance2.WithSelf.G2, @Instance2.WithSelf(%Self) [symbolic] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Instance2.WithSelf.G2.09b: %Instance2.WithSelf.G2.type.512 = struct_value () [symbolic] @@ -963,6 +1032,8 @@ fn InstanceCallFail() { // CHECK:STDOUT: %struct_type.e: type = struct_type {.e: %empty_tuple.type} [concrete] // CHECK:STDOUT: %Instance2.impl_witness: = impl_witness @struct_type.e.as.Instance2.impl.%Instance2.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.efd: type = pattern_type %struct_type.e [concrete] +// CHECK:STDOUT: %self.param_patt.5cd: %pattern_type.efd = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.91e: %pattern_type.efd = at_binding_pattern self, %self.param_patt.5cd [concrete] // CHECK:STDOUT: %struct_type.e.as.Instance2.impl.G2.type: type = fn_type @struct_type.e.as.Instance2.impl.G2 [concrete] // CHECK:STDOUT: %struct_type.e.as.Instance2.impl.G2: %struct_type.e.as.Instance2.impl.G2.type = struct_value () [concrete] // CHECK:STDOUT: %Instance2.facet: %Instance2.type = facet_value %struct_type.e, (%Instance2.impl_witness) [concrete] @@ -993,8 +1064,8 @@ fn InstanceCallFail() { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %Instance2.WithSelf.G2.decl: @Instance2.WithSelf.%Instance2.WithSelf.G2.type (%Instance2.WithSelf.G2.type.512) = fn_decl @Instance2.WithSelf.G2 [symbolic = @Instance2.WithSelf.%Instance2.WithSelf.G2 (constants.%Instance2.WithSelf.G2.09b)] { -// CHECK:STDOUT: %self.param_patt: @Instance2.WithSelf.G2.%pattern_type (%pattern_type.8a4) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @Instance2.WithSelf.G2.%pattern_type (%pattern_type.8a4) = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc4_9.1: @Instance2.WithSelf.G2.%pattern_type (%pattern_type.8a4) = value_param_pattern [symbolic = %self.param_patt.loc4_9.2 (constants.%self.param_patt.fe5)] +// CHECK:STDOUT: %self.patt.loc4_9.1: @Instance2.WithSelf.G2.%pattern_type (%pattern_type.8a4) = at_binding_pattern self, %self.param_patt.loc4_9.1 [symbolic = %self.patt.loc4_9.2 (constants.%self.patt.fd0)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @Instance2.WithSelf.G2.%Self.as_type.loc4_9.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc4_9.1: type = splice_block %.loc4_9.2 [symbolic = %Self.as_type.loc4_9.1 (constants.%Self.as_type)] { @@ -1016,8 +1087,8 @@ fn InstanceCallFail() { // CHECK:STDOUT: // CHECK:STDOUT: impl @struct_type.e.as.Instance2.impl: %struct_type.e as %Instance2.ref { // CHECK:STDOUT: %struct_type.e.as.Instance2.impl.G2.decl: %struct_type.e.as.Instance2.impl.G2.type = fn_decl @struct_type.e.as.Instance2.impl.G2 [concrete = constants.%struct_type.e.as.Instance2.impl.G2] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.efd = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.efd = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.efd = value_param_pattern [concrete = constants.%self.param_patt.5cd] +// CHECK:STDOUT: %self.patt: %pattern_type.efd = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.91e] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %struct_type.e = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @struct_type.e.as.Instance2.impl.%struct_type.e [concrete = constants.%struct_type.e] @@ -1036,6 +1107,8 @@ fn InstanceCallFail() { // CHECK:STDOUT: %Self: %Instance2.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc4_9.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc4_9.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc4_9.1 [symbolic = %pattern_type (constants.%pattern_type.8a4)] +// CHECK:STDOUT: %self.param_patt.loc4_9.2: @Instance2.WithSelf.G2.%pattern_type (%pattern_type.8a4) = value_param_pattern [symbolic = %self.param_patt.loc4_9.2 (constants.%self.param_patt.fe5)] +// CHECK:STDOUT: %self.patt.loc4_9.2: @Instance2.WithSelf.G2.%pattern_type (%pattern_type.8a4) = at_binding_pattern self, %self.param_patt.loc4_9.2 [symbolic = %self.patt.loc4_9.2 (constants.%self.patt.fd0)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Instance2.WithSelf.G2.%Self.as_type.loc4_9.1 (%Self.as_type)); // CHECK:STDOUT: } @@ -1066,6 +1139,8 @@ fn InstanceCallFail() { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc4_9.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.8a4 +// CHECK:STDOUT: %self.param_patt.loc4_9.2 => constants.%self.param_patt.fe5 +// CHECK:STDOUT: %self.patt.loc4_9.2 => constants.%self.patt.fd0 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Instance2.WithSelf(constants.%Instance2.facet) { @@ -1079,5 +1154,7 @@ fn InstanceCallFail() { // CHECK:STDOUT: %Self => constants.%Instance2.facet // CHECK:STDOUT: %Self.as_type.loc4_9.1 => constants.%struct_type.e // CHECK:STDOUT: %pattern_type => constants.%pattern_type.efd +// CHECK:STDOUT: %self.param_patt.loc4_9.2 => constants.%self.param_patt.5cd +// CHECK:STDOUT: %self.patt.loc4_9.2 => constants.%self.patt.91e // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/error_recovery.carbon b/toolchain/check/testdata/impl/error_recovery.carbon index 60d00d5a1d04..11ccee9e45fb 100644 --- a/toolchain/check/testdata/impl/error_recovery.carbon +++ b/toolchain/check/testdata/impl/error_recovery.carbon @@ -165,6 +165,7 @@ impl C as I { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -179,7 +180,7 @@ impl C as I { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc13_7.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_7.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc13_10.1: type = splice_block %.loc13_10.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -190,6 +191,7 @@ impl C as I { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @G(%T.loc13_7.2: type) { +// CHECK:STDOUT: %T.patt.loc13_7.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_7.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc13_7.1: type = symbolic_binding T, 0 [symbolic = %T.loc13_7.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -211,6 +213,7 @@ impl C as I { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%T) { +// CHECK:STDOUT: %T.patt.loc13_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc13_7.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -221,6 +224,7 @@ impl C as I { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -236,7 +240,7 @@ impl C as I { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc13_7.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_7.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc13_10.1: type = splice_block %.loc13_10.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -247,6 +251,7 @@ impl C as I { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @G(%T.loc13_7.2: type) { +// CHECK:STDOUT: %T.patt.loc13_7.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_7.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc13_7.1: type = symbolic_binding T, 0 [symbolic = %T.loc13_7.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -268,10 +273,12 @@ impl C as I { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%T) { +// CHECK:STDOUT: %T.patt.loc13_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc13_7.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%empty_tuple.type) { +// CHECK:STDOUT: %T.patt.loc13_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc13_7.1 => constants.%empty_tuple.type // CHECK:STDOUT: // CHECK:STDOUT: !definition: diff --git a/toolchain/check/testdata/impl/extend_impl_generic.carbon b/toolchain/check/testdata/impl/extend_impl_generic.carbon index d84771d39544..f57d48488388 100644 --- a/toolchain/check/testdata/impl/extend_impl_generic.carbon +++ b/toolchain/check/testdata/impl/extend_impl_generic.carbon @@ -58,6 +58,7 @@ class X(U:! type) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.d47: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %HasF.type.c96: type = generic_interface_type @HasF [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -66,6 +67,8 @@ class X(U:! type) { // CHECK:STDOUT: %Self.822: %HasF.type.daf = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %.184347.1: Core.Form = init_form %T.67d [symbolic] // CHECK:STDOUT: %pattern_type.51d1c4.1: type = pattern_type %T.67d [symbolic] +// CHECK:STDOUT: %return.param_patt.41d2d9.1: %pattern_type.51d1c4.1 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.b39: %pattern_type.51d1c4.1 = return_slot_pattern %return.param_patt.41d2d9.1, %T.67d [symbolic] // CHECK:STDOUT: %HasF.WithSelf.F.type.41d: type = fn_type @HasF.WithSelf.F, @HasF.WithSelf(%T.67d, %Self.822) [symbolic] // CHECK:STDOUT: %HasF.WithSelf.F.ff7: %HasF.WithSelf.F.type.41d = struct_value () [symbolic] // CHECK:STDOUT: %HasF.assoc_type.ddf: type = assoc_entity_type @HasF, @HasF(%T.67d) [symbolic] @@ -91,6 +94,8 @@ class X(U:! type) { // CHECK:STDOUT: %assoc0.be0: %HasF.assoc_type.aee = assoc_entity element0, @HasF.WithSelf.%HasF.WithSelf.F.decl [concrete] // CHECK:STDOUT: %.226: Core.Form = init_form %Param [concrete] // CHECK:STDOUT: %pattern_type.116: type = pattern_type %Param [concrete] +// CHECK:STDOUT: %return.param_patt.63a: %pattern_type.116 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.fb6: %pattern_type.116 = return_slot_pattern %return.param_patt.63a, %Param [concrete] // CHECK:STDOUT: %C.as.HasF.impl.F.type: type = fn_type @C.as.HasF.impl.F [concrete] // CHECK:STDOUT: %C.as.HasF.impl.F: %C.as.HasF.impl.F.type = struct_value () [concrete] // CHECK:STDOUT: %HasF.facet: %HasF.type.9e1 = facet_value %C, (%HasF.impl_witness) [concrete] @@ -119,12 +124,17 @@ class X(U:! type) { // CHECK:STDOUT: %int_2.295: %i32 = int_value 2 [concrete] // CHECK:STDOUT: %Param.val: %Param = struct_value (%int_2.295) [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.98b = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = at_binding_pattern c, %c.param_patt [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = value_binding_pattern a [concrete] // CHECK:STDOUT: %C.type.facet: %type = facet_value %C, () [concrete] // CHECK:STDOUT: %HasF.WithSelf.F.type.eae: type = fn_type @HasF.WithSelf.F, @HasF.WithSelf(%Param, %C.type.facet) [concrete] // CHECK:STDOUT: %HasF.WithSelf.F.eba: %HasF.WithSelf.F.type.eae = struct_value () [concrete] // CHECK:STDOUT: %.aa9: type = fn_type_with_self_type %HasF.WithSelf.F.type.5b8, %HasF.facet [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.ac8: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N) [symbolic] // CHECK:STDOUT: %Int.as.Copy.impl.Op.5e0: %Int.as.Copy.impl.Op.type.ac8 = struct_value () [symbolic] @@ -171,7 +181,7 @@ class X(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %HasF.decl: %HasF.type.c96 = interface_decl @HasF [concrete = constants.%HasF.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc4_17.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_17.2 (constants.%T.patt.d47)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_20.1: type = splice_block %.loc4_20.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -182,8 +192,8 @@ class X(U:! type) { // CHECK:STDOUT: %Param.decl: type = class_decl @Param [concrete = constants.%Param] {} {} // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %c.param_patt: %pattern_type.98b = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.98b = at_binding_pattern c, %c.param_patt [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.98b = value_param_pattern [concrete = constants.%c.param_patt] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref.loc20: type = name_ref C, file.%C.decl [concrete = constants.%C] @@ -192,6 +202,7 @@ class X(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @HasF(%T.loc4_17.2: type) { +// CHECK:STDOUT: %T.patt.loc4_17.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_17.2 (constants.%T.patt.d47)] // CHECK:STDOUT: %T.loc4_17.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_17.1 (constants.%T.67d)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -204,8 +215,8 @@ class X(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %HasF.WithSelf.F.decl: @HasF.WithSelf.%HasF.WithSelf.F.type (%HasF.WithSelf.F.type.41d) = fn_decl @HasF.WithSelf.F [symbolic = @HasF.WithSelf.%HasF.WithSelf.F (constants.%HasF.WithSelf.F.ff7)] { -// CHECK:STDOUT: %return.param_patt: @HasF.WithSelf.F.%pattern_type (%pattern_type.51d1c4.1) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @HasF.WithSelf.F.%pattern_type (%pattern_type.51d1c4.1) = return_slot_pattern %return.param_patt, %T.ref [concrete] +// CHECK:STDOUT: %return.param_patt.loc5_13.1: @HasF.WithSelf.F.%pattern_type (%pattern_type.51d1c4.1) = out_param_pattern [symbolic = %return.param_patt.loc5_13.2 (constants.%return.param_patt.41d2d9.1)] +// CHECK:STDOUT: %return.patt.loc5_10.1: @HasF.WithSelf.F.%pattern_type (%pattern_type.51d1c4.1) = return_slot_pattern %return.param_patt.loc5_13.1, %T.ref [symbolic = %return.patt.loc5_10.2 (constants.%return.patt.b39)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, @HasF.%T.loc4_17.2 [symbolic = %T (constants.%T.67d)] // CHECK:STDOUT: %.loc5_13.2: Core.Form = init_form %T.ref [symbolic = %.loc5_13.1 (constants.%.184347.1)] @@ -228,8 +239,8 @@ class X(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.HasF.impl: %Self.ref as %HasF.type { // CHECK:STDOUT: %C.as.HasF.impl.F.decl: %C.as.HasF.impl.F.type = fn_decl @C.as.HasF.impl.F [concrete = constants.%C.as.HasF.impl.F] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.116 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.116 = return_slot_pattern %return.param_patt, %Param.ref [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.116 = out_param_pattern [concrete = constants.%return.param_patt.63a] +// CHECK:STDOUT: %return.patt: %pattern_type.116 = return_slot_pattern %return.param_patt, %Param.ref [concrete = constants.%return.patt.fb6] // CHECK:STDOUT: } { // CHECK:STDOUT: %Param.ref: type = name_ref Param, file.%Param.decl [concrete = constants.%Param] // CHECK:STDOUT: %.loc14: Core.Form = init_form %Param.ref [concrete = constants.%.226] @@ -278,6 +289,8 @@ class X(U:! type) { // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T.67d)] // CHECK:STDOUT: %.loc5_13.1: Core.Form = init_form %T [symbolic = %.loc5_13.1 (constants.%.184347.1)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.51d1c4.1)] +// CHECK:STDOUT: %return.param_patt.loc5_13.2: @HasF.WithSelf.F.%pattern_type (%pattern_type.51d1c4.1) = out_param_pattern [symbolic = %return.param_patt.loc5_13.2 (constants.%return.param_patt.41d2d9.1)] +// CHECK:STDOUT: %return.patt.loc5_10.2: @HasF.WithSelf.F.%pattern_type (%pattern_type.51d1c4.1) = return_slot_pattern %return.param_patt.loc5_13.2, %T [symbolic = %return.patt.loc5_10.2 (constants.%return.patt.b39)] // CHECK:STDOUT: // CHECK:STDOUT: fn() -> out %return.param: @HasF.WithSelf.F.%T (%T.67d); // CHECK:STDOUT: } @@ -302,7 +315,7 @@ class X(U:! type) { // CHECK:STDOUT: fn @G(%c.param: %C) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %C.ref.loc21: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %.loc21_24: %HasF.assoc_type.aee = specific_constant @HasF.WithSelf.%assoc0.loc5_14.1, @HasF.WithSelf(constants.%Param, constants.%C.type.facet) [concrete = constants.%assoc0.be0] @@ -313,12 +326,12 @@ class X(U:! type) { // CHECK:STDOUT: %.loc21_27.2: ref %Param = temporary %.loc21_27.1, %C.as.HasF.impl.F.call.loc21 // CHECK:STDOUT: %x.ref.loc21: %Param.elem = name_ref x, @Param.%.loc9 [concrete = @Param.%.loc9] // CHECK:STDOUT: %.loc21_28.1: ref %i32 = class_element_access %.loc21_27.2, element0 -// CHECK:STDOUT: %i32.loc21: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc21_28.2: %i32 = acquire_value %.loc21_28.1 +// CHECK:STDOUT: %i32.loc21: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %a: %i32 = value_binding a, %.loc21_28.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var %b.var_patt // CHECK:STDOUT: %c.ref: %C = name_ref c, %c @@ -366,6 +379,7 @@ class X(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HasF(constants.%T.67d) { +// CHECK:STDOUT: %T.patt.loc4_17.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc4_17.1 => constants.%T.67d // CHECK:STDOUT: } // CHECK:STDOUT: @@ -375,9 +389,12 @@ class X(U:! type) { // CHECK:STDOUT: %T => constants.%T.67d // CHECK:STDOUT: %.loc5_13.1 => constants.%.184347.1 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d1c4.1 +// CHECK:STDOUT: %return.param_patt.loc5_13.2 => constants.%return.param_patt.41d2d9.1 +// CHECK:STDOUT: %return.patt.loc5_10.2 => constants.%return.patt.b39 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HasF(constants.%Param) { +// CHECK:STDOUT: %T.patt.loc4_17.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc4_17.1 => constants.%Param // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -411,6 +428,8 @@ class X(U:! type) { // CHECK:STDOUT: %T => constants.%Param // CHECK:STDOUT: %.loc5_13.1 => constants.%.226 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.116 +// CHECK:STDOUT: %return.param_patt.loc5_13.2 => constants.%return.param_patt.63a +// CHECK:STDOUT: %return.patt.loc5_10.2 => constants.%return.patt.fb6 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HasF.WithSelf(constants.%Param, constants.%C.type.facet) { @@ -430,6 +449,7 @@ class X(U:! type) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %I.type.335: type = generic_interface_type @I [concrete] // CHECK:STDOUT: %I.generic: %I.type.335 = struct_value () [concrete] @@ -437,11 +457,16 @@ class X(U:! type) { // CHECK:STDOUT: %Self.1916c4.1: %I.type.3fe556.1 = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.1916c4.1 [symbolic] // CHECK:STDOUT: %pattern_type.b82: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt.ce9: %pattern_type.b82 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.ec9: %pattern_type.b82 = at_binding_pattern self, %self.param_patt.ce9 [symbolic] // CHECK:STDOUT: %pattern_type.51d1c4.1: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %t.param_patt.5130c0.1: %pattern_type.51d1c4.1 = value_param_pattern [symbolic] +// CHECK:STDOUT: %t.patt.dcb1d7.1: %pattern_type.51d1c4.1 = at_binding_pattern t, %t.param_patt.5130c0.1 [symbolic] // CHECK:STDOUT: %I.WithSelf.F.type.09f79b.1: type = fn_type @I.WithSelf.F, @I.WithSelf(%T, %Self.1916c4.1) [symbolic] // CHECK:STDOUT: %I.WithSelf.F.5f2714.1: %I.WithSelf.F.type.09f79b.1 = struct_value () [symbolic] // CHECK:STDOUT: %I.assoc_type.b71f2b.1: type = assoc_entity_type @I, @I(%T) [symbolic] // CHECK:STDOUT: %assoc0.13b5f8.1: %I.assoc_type.b71f2b.1 = assoc_entity element0, @I.WithSelf.%I.WithSelf.F.decl [symbolic] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %U: type = symbolic_binding U, 0 [symbolic] // CHECK:STDOUT: %X.type: type = generic_class_type @X [concrete] // CHECK:STDOUT: %X.generic: %X.type = struct_value () [concrete] @@ -455,7 +480,11 @@ class X(U:! type) { // CHECK:STDOUT: %assoc0.13b5f8.2: %I.assoc_type.b71f2b.2 = assoc_entity element0, @I.WithSelf.%I.WithSelf.F.decl [symbolic] // CHECK:STDOUT: %require_complete.45e: = require_complete_type %I.type.3fe556.2 [symbolic] // CHECK:STDOUT: %pattern_type.056: type = pattern_type %X [symbolic] +// CHECK:STDOUT: %self.param_patt.f0f: %pattern_type.056 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.1a7: %pattern_type.056 = at_binding_pattern self, %self.param_patt.f0f [symbolic] // CHECK:STDOUT: %pattern_type.51d1c4.2: type = pattern_type %U [symbolic] +// CHECK:STDOUT: %t.param_patt.5130c0.2: %pattern_type.51d1c4.2 = value_param_pattern [symbolic] +// CHECK:STDOUT: %t.patt.dcb1d7.2: %pattern_type.51d1c4.2 = at_binding_pattern t, %t.param_patt.5130c0.2 [symbolic] // CHECK:STDOUT: %X.as.I.impl.F.type: type = fn_type @X.as.I.impl.F, @X.as.I.impl(%U) [symbolic] // CHECK:STDOUT: %X.as.I.impl.F: %X.as.I.impl.F.type = struct_value () [symbolic] // CHECK:STDOUT: %I.facet: %I.type.3fe556.2 = facet_value %X, (%I.impl_witness) [symbolic] @@ -482,7 +511,7 @@ class X(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %I.decl: %I.type.335 = interface_decl @I [concrete = constants.%I.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc4_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_17.1: type = splice_block %.loc4_17.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -491,7 +520,7 @@ class X(U:! type) { // CHECK:STDOUT: %T.loc4_14.2: type = symbolic_binding T, 0 [symbolic = %T.loc4_14.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %X.decl: %X.type = class_decl @X [concrete = constants.%X.generic] { -// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [concrete] +// CHECK:STDOUT: %U.patt.loc8_10.1: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc8_10.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8_13.1: type = splice_block %.loc8_13.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -502,6 +531,7 @@ class X(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @I(%T.loc4_14.2: type) { +// CHECK:STDOUT: %T.patt.loc4_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_14.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_14.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -514,10 +544,10 @@ class X(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %I.WithSelf.F.decl: @I.WithSelf.%I.WithSelf.F.type (%I.WithSelf.F.type.09f79b.1) = fn_decl @I.WithSelf.F [symbolic = @I.WithSelf.%I.WithSelf.F (constants.%I.WithSelf.F.5f2714.1)] { -// CHECK:STDOUT: %self.param_patt: @I.WithSelf.F.%pattern_type.loc5_8 (%pattern_type.b82) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @I.WithSelf.F.%pattern_type.loc5_8 (%pattern_type.b82) = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %t.param_patt: @I.WithSelf.F.%pattern_type.loc5_15 (%pattern_type.51d1c4.1) = value_param_pattern [concrete] -// CHECK:STDOUT: %t.patt: @I.WithSelf.F.%pattern_type.loc5_15 (%pattern_type.51d1c4.1) = at_binding_pattern t, %t.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc5_8.1: @I.WithSelf.F.%pattern_type.loc5_8 (%pattern_type.b82) = value_param_pattern [symbolic = %self.param_patt.loc5_8.2 (constants.%self.param_patt.ce9)] +// CHECK:STDOUT: %self.patt.loc5_8.1: @I.WithSelf.F.%pattern_type.loc5_8 (%pattern_type.b82) = at_binding_pattern self, %self.param_patt.loc5_8.1 [symbolic = %self.patt.loc5_8.2 (constants.%self.patt.ec9)] +// CHECK:STDOUT: %t.param_patt.loc5_15.1: @I.WithSelf.F.%pattern_type.loc5_15 (%pattern_type.51d1c4.1) = value_param_pattern [symbolic = %t.param_patt.loc5_15.2 (constants.%t.param_patt.5130c0.1)] +// CHECK:STDOUT: %t.patt.loc5_15.1: @I.WithSelf.F.%pattern_type.loc5_15 (%pattern_type.51d1c4.1) = at_binding_pattern t, %t.param_patt.loc5_15.1 [symbolic = %t.patt.loc5_15.2 (constants.%t.patt.dcb1d7.1)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @I.WithSelf.F.%Self.as_type.loc5_8.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc5_8.1: type = splice_block %.loc5_8.3 [symbolic = %Self.as_type.loc5_8.1 (constants.%Self.as_type)] { @@ -558,10 +588,10 @@ class X(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: impl: %Self.ref as %I.type.loc9_21.2 { // CHECK:STDOUT: %X.as.I.impl.F.decl: @X.as.I.impl.%X.as.I.impl.F.type (%X.as.I.impl.F.type) = fn_decl @X.as.I.impl.F [symbolic = @X.as.I.impl.%X.as.I.impl.F (constants.%X.as.I.impl.F)] { -// CHECK:STDOUT: %self.param_patt: @X.as.I.impl.F.%pattern_type.loc10_17 (%pattern_type.056) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @X.as.I.impl.F.%pattern_type.loc10_17 (%pattern_type.056) = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %t.param_patt: @X.as.I.impl.F.%pattern_type.loc10_31 (%pattern_type.51d1c4.2) = value_param_pattern [concrete] -// CHECK:STDOUT: %t.patt: @X.as.I.impl.F.%pattern_type.loc10_31 (%pattern_type.51d1c4.2) = at_binding_pattern t, %t.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc10_17.1: @X.as.I.impl.F.%pattern_type.loc10_17 (%pattern_type.056) = value_param_pattern [symbolic = %self.param_patt.loc10_17.2 (constants.%self.param_patt.f0f)] +// CHECK:STDOUT: %self.patt.loc10_17.1: @X.as.I.impl.F.%pattern_type.loc10_17 (%pattern_type.056) = at_binding_pattern self, %self.param_patt.loc10_17.1 [symbolic = %self.patt.loc10_17.2 (constants.%self.patt.1a7)] +// CHECK:STDOUT: %t.param_patt.loc10_31.1: @X.as.I.impl.F.%pattern_type.loc10_31 (%pattern_type.51d1c4.2) = value_param_pattern [symbolic = %t.param_patt.loc10_31.2 (constants.%t.param_patt.5130c0.2)] +// CHECK:STDOUT: %t.patt.loc10_31.1: @X.as.I.impl.F.%pattern_type.loc10_31 (%pattern_type.51d1c4.2) = at_binding_pattern t, %t.param_patt.loc10_31.1 [symbolic = %t.patt.loc10_31.2 (constants.%t.patt.dcb1d7.2)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @X.as.I.impl.F.%X (%X) = value_param call_param0 // CHECK:STDOUT: %.loc10_17.1: type = splice_block %Self.ref [symbolic = %X (constants.%X)] { @@ -585,6 +615,7 @@ class X(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @X(%U.loc8_10.2: type) { +// CHECK:STDOUT: %U.patt.loc8_10.2: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc8_10.2 (constants.%U.patt)] // CHECK:STDOUT: %U.loc8_10.1: type = symbolic_binding U, 0 [symbolic = %U.loc8_10.1 (constants.%U)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -616,7 +647,11 @@ class X(U:! type) { // CHECK:STDOUT: %Self: @I.WithSelf.F.%I.type (%I.type.3fe556.1) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self.1916c4.1)] // CHECK:STDOUT: %Self.as_type.loc5_8.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_8.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type.loc5_8: type = pattern_type %Self.as_type.loc5_8.1 [symbolic = %pattern_type.loc5_8 (constants.%pattern_type.b82)] +// CHECK:STDOUT: %self.param_patt.loc5_8.2: @I.WithSelf.F.%pattern_type.loc5_8 (%pattern_type.b82) = value_param_pattern [symbolic = %self.param_patt.loc5_8.2 (constants.%self.param_patt.ce9)] +// CHECK:STDOUT: %self.patt.loc5_8.2: @I.WithSelf.F.%pattern_type.loc5_8 (%pattern_type.b82) = at_binding_pattern self, %self.param_patt.loc5_8.2 [symbolic = %self.patt.loc5_8.2 (constants.%self.patt.ec9)] // CHECK:STDOUT: %pattern_type.loc5_15: type = pattern_type %T [symbolic = %pattern_type.loc5_15 (constants.%pattern_type.51d1c4.1)] +// CHECK:STDOUT: %t.param_patt.loc5_15.2: @I.WithSelf.F.%pattern_type.loc5_15 (%pattern_type.51d1c4.1) = value_param_pattern [symbolic = %t.param_patt.loc5_15.2 (constants.%t.param_patt.5130c0.1)] +// CHECK:STDOUT: %t.patt.loc5_15.2: @I.WithSelf.F.%pattern_type.loc5_15 (%pattern_type.51d1c4.1) = at_binding_pattern t, %t.param_patt.loc5_15.2 [symbolic = %t.patt.loc5_15.2 (constants.%t.patt.dcb1d7.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @I.WithSelf.F.%Self.as_type.loc5_8.1 (%Self.as_type), %t.param: @I.WithSelf.F.%T (%T)); // CHECK:STDOUT: } @@ -625,7 +660,11 @@ class X(U:! type) { // CHECK:STDOUT: %U: type = symbolic_binding U, 0 [symbolic = %U (constants.%U)] // CHECK:STDOUT: %X: type = class_type @X, @X(%U) [symbolic = %X (constants.%X)] // CHECK:STDOUT: %pattern_type.loc10_17: type = pattern_type %X [symbolic = %pattern_type.loc10_17 (constants.%pattern_type.056)] +// CHECK:STDOUT: %self.param_patt.loc10_17.2: @X.as.I.impl.F.%pattern_type.loc10_17 (%pattern_type.056) = value_param_pattern [symbolic = %self.param_patt.loc10_17.2 (constants.%self.param_patt.f0f)] +// CHECK:STDOUT: %self.patt.loc10_17.2: @X.as.I.impl.F.%pattern_type.loc10_17 (%pattern_type.056) = at_binding_pattern self, %self.param_patt.loc10_17.2 [symbolic = %self.patt.loc10_17.2 (constants.%self.patt.1a7)] // CHECK:STDOUT: %pattern_type.loc10_31: type = pattern_type %U [symbolic = %pattern_type.loc10_31 (constants.%pattern_type.51d1c4.2)] +// CHECK:STDOUT: %t.param_patt.loc10_31.2: @X.as.I.impl.F.%pattern_type.loc10_31 (%pattern_type.51d1c4.2) = value_param_pattern [symbolic = %t.param_patt.loc10_31.2 (constants.%t.param_patt.5130c0.2)] +// CHECK:STDOUT: %t.patt.loc10_31.2: @X.as.I.impl.F.%pattern_type.loc10_31 (%pattern_type.51d1c4.2) = at_binding_pattern t, %t.param_patt.loc10_31.2 [symbolic = %t.patt.loc10_31.2 (constants.%t.patt.dcb1d7.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc10_17: = require_complete_type %X [symbolic = %require_complete.loc10_17 (constants.%require_complete.ec9)] @@ -638,6 +677,7 @@ class X(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_14.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_14.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -649,10 +689,15 @@ class X(U:! type) { // CHECK:STDOUT: %Self => constants.%Self.1916c4.1 // CHECK:STDOUT: %Self.as_type.loc5_8.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type.loc5_8 => constants.%pattern_type.b82 +// CHECK:STDOUT: %self.param_patt.loc5_8.2 => constants.%self.param_patt.ce9 +// CHECK:STDOUT: %self.patt.loc5_8.2 => constants.%self.patt.ec9 // CHECK:STDOUT: %pattern_type.loc5_15 => constants.%pattern_type.51d1c4.1 +// CHECK:STDOUT: %t.param_patt.loc5_15.2 => constants.%t.param_patt.5130c0.1 +// CHECK:STDOUT: %t.patt.loc5_15.2 => constants.%t.patt.dcb1d7.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @X(constants.%U) { +// CHECK:STDOUT: %U.patt.loc8_10.2 => constants.%U.patt // CHECK:STDOUT: %U.loc8_10.1 => constants.%U // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -661,6 +706,7 @@ class X(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%U) { +// CHECK:STDOUT: %T.patt.loc4_14.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_14.1 => constants.%U // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -695,7 +741,11 @@ class X(U:! type) { // CHECK:STDOUT: %U => constants.%U // CHECK:STDOUT: %X => constants.%X // CHECK:STDOUT: %pattern_type.loc10_17 => constants.%pattern_type.056 +// CHECK:STDOUT: %self.param_patt.loc10_17.2 => constants.%self.param_patt.f0f +// CHECK:STDOUT: %self.patt.loc10_17.2 => constants.%self.patt.1a7 // CHECK:STDOUT: %pattern_type.loc10_31 => constants.%pattern_type.51d1c4.2 +// CHECK:STDOUT: %t.param_patt.loc10_31.2 => constants.%t.param_patt.5130c0.2 +// CHECK:STDOUT: %t.patt.loc10_31.2 => constants.%t.patt.dcb1d7.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I.WithSelf(constants.%U, constants.%I.facet) { @@ -715,6 +765,10 @@ class X(U:! type) { // CHECK:STDOUT: %Self => constants.%I.facet // CHECK:STDOUT: %Self.as_type.loc5_8.1 => constants.%X // CHECK:STDOUT: %pattern_type.loc5_8 => constants.%pattern_type.056 +// CHECK:STDOUT: %self.param_patt.loc5_8.2 => constants.%self.param_patt.f0f +// CHECK:STDOUT: %self.patt.loc5_8.2 => constants.%self.patt.1a7 // CHECK:STDOUT: %pattern_type.loc5_15 => constants.%pattern_type.51d1c4.2 +// CHECK:STDOUT: %t.param_patt.loc5_15.2 => constants.%t.param_patt.5130c0.2 +// CHECK:STDOUT: %t.patt.loc5_15.2 => constants.%t.patt.dcb1d7.2 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/fail_call_invalid.carbon b/toolchain/check/testdata/impl/fail_call_invalid.carbon index c0a4c76b467a..b43abd343976 100644 --- a/toolchain/check/testdata/impl/fail_call_invalid.carbon +++ b/toolchain/check/testdata/impl/fail_call_invalid.carbon @@ -36,6 +36,8 @@ fn InstanceCall(n: i32) { // CHECK:STDOUT: %Self: %Simple.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] // CHECK:STDOUT: %pattern_type.c62: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt.b93: %pattern_type.c62 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.b30: %pattern_type.c62 = at_binding_pattern self, %self.param_patt.b93 [symbolic] // CHECK:STDOUT: %Simple.WithSelf.G.type.682: type = fn_type @Simple.WithSelf.G, @Simple.WithSelf(%Self) [symbolic] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Simple.WithSelf.G.d0a: %Simple.WithSelf.G.type.682 = struct_value () [symbolic] @@ -52,8 +54,12 @@ fn InstanceCall(n: i32) { // CHECK:STDOUT: %Simple.WithSelf.G.type.780: type = fn_type @Simple.WithSelf.G, @Simple.WithSelf(%Simple.facet) [concrete] // CHECK:STDOUT: %Simple.WithSelf.G.dbb: %Simple.WithSelf.G.type.780 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %self.param_patt.049: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.f6c: %pattern_type.6b6 = at_binding_pattern self, %self.param_patt.049 [concrete] // CHECK:STDOUT: %i32.as.Simple.impl.G.type.321a2c.2: type = fn_type @i32.as.Simple.impl.G.loc24_25.2 [concrete] // CHECK:STDOUT: %i32.as.Simple.impl.G.d407b2.2: %i32.as.Simple.impl.G.type.321a2c.2 = struct_value () [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete] // CHECK:STDOUT: %InstanceCall.type: type = fn_type @InstanceCall [concrete] // CHECK:STDOUT: %InstanceCall: %InstanceCall.type = struct_value () [concrete] // CHECK:STDOUT: %.785: type = fn_type_with_self_type %Simple.WithSelf.G.type.780, %Simple.facet [concrete] @@ -82,8 +88,8 @@ fn InstanceCall(n: i32) { // CHECK:STDOUT: %Simple.ref: type = name_ref Simple, file.%Simple.decl [concrete = constants.%Simple.type] // CHECK:STDOUT: } // CHECK:STDOUT: %InstanceCall.decl: %InstanceCall.type = fn_decl @InstanceCall [concrete = constants.%InstanceCall] { -// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%n.param_patt] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete = constants.%n.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %n.param: %i32 = value_param call_param0 // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] @@ -97,8 +103,8 @@ fn InstanceCall(n: i32) { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %Simple.WithSelf.G.decl: @Simple.WithSelf.%Simple.WithSelf.G.type (%Simple.WithSelf.G.type.682) = fn_decl @Simple.WithSelf.G [symbolic = @Simple.WithSelf.%Simple.WithSelf.G (constants.%Simple.WithSelf.G.d0a)] { -// CHECK:STDOUT: %self.param_patt: @Simple.WithSelf.G.%pattern_type (%pattern_type.c62) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @Simple.WithSelf.G.%pattern_type (%pattern_type.c62) = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc16_8.1: @Simple.WithSelf.G.%pattern_type (%pattern_type.c62) = value_param_pattern [symbolic = %self.param_patt.loc16_8.2 (constants.%self.param_patt.b93)] +// CHECK:STDOUT: %self.patt.loc16_8.1: @Simple.WithSelf.G.%pattern_type (%pattern_type.c62) = at_binding_pattern self, %self.param_patt.loc16_8.1 [symbolic = %self.patt.loc16_8.2 (constants.%self.patt.b30)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @Simple.WithSelf.G.%Self.as_type.loc16_8.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc16_8.1: type = splice_block %.loc16_8.2 [symbolic = %Self.as_type.loc16_8.1 (constants.%Self.as_type)] { @@ -121,16 +127,16 @@ fn InstanceCall(n: i32) { // CHECK:STDOUT: // CHECK:STDOUT: impl @i32.as.Simple.impl: %i32 as %Simple.ref { // CHECK:STDOUT: %i32.as.Simple.impl.G.decl.loc24_25.1: %i32.as.Simple.impl.G.type.321a2c.1 = fn_decl @i32.as.Simple.impl.G.loc24_25.1 [concrete = constants.%i32.as.Simple.impl.G.d407b2.1] { -// CHECK:STDOUT: %self.param_patt: = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: = value_param_pattern [concrete = ] +// CHECK:STDOUT: %self.patt: = at_binding_pattern self, %self.param_patt [concrete = ] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: = value_param call_param0 // CHECK:STDOUT: %Undeclared.ref: = name_ref Undeclared, [concrete = ] // CHECK:STDOUT: %self: = value_binding self, [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %i32.as.Simple.impl.G.decl.loc24_25.2: %i32.as.Simple.impl.G.type.321a2c.2 = fn_decl @i32.as.Simple.impl.G.loc24_25.2 [concrete = constants.%i32.as.Simple.impl.G.d407b2.2] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.6b6 = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %.1: %pattern_type.6b6 = specific_constant constants.%self.param_patt.049, @Simple.WithSelf.G(constants.%Simple.facet) [concrete = constants.%self.param_patt.049] +// CHECK:STDOUT: %self.patt: %pattern_type.6b6 = at_binding_pattern self, %.1 [concrete = constants.%self.patt.f6c] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %i32 = value_param call_param0 // CHECK:STDOUT: %self: %i32 = value_binding self, %self.param @@ -149,6 +155,8 @@ fn InstanceCall(n: i32) { // CHECK:STDOUT: %Self: %Simple.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc16_8.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc16_8.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc16_8.1 [symbolic = %pattern_type (constants.%pattern_type.c62)] +// CHECK:STDOUT: %self.param_patt.loc16_8.2: @Simple.WithSelf.G.%pattern_type (%pattern_type.c62) = value_param_pattern [symbolic = %self.param_patt.loc16_8.2 (constants.%self.param_patt.b93)] +// CHECK:STDOUT: %self.patt.loc16_8.2: @Simple.WithSelf.G.%pattern_type (%pattern_type.c62) = at_binding_pattern self, %self.param_patt.loc16_8.2 [symbolic = %self.patt.loc16_8.2 (constants.%self.patt.b30)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Simple.WithSelf.G.%Self.as_type.loc16_8.1 (%Self.as_type)); // CHECK:STDOUT: } @@ -187,6 +195,8 @@ fn InstanceCall(n: i32) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc16_8.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.c62 +// CHECK:STDOUT: %self.param_patt.loc16_8.2 => constants.%self.param_patt.b93 +// CHECK:STDOUT: %self.patt.loc16_8.2 => constants.%self.patt.b30 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Simple.WithSelf(constants.%Simple.facet) { @@ -200,5 +210,7 @@ fn InstanceCall(n: i32) { // CHECK:STDOUT: %Self => constants.%Simple.facet // CHECK:STDOUT: %Self.as_type.loc16_8.1 => constants.%i32 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.6b6 +// CHECK:STDOUT: %self.param_patt.loc16_8.2 => constants.%self.param_patt.049 +// CHECK:STDOUT: %self.patt.loc16_8.2 => constants.%self.patt.f6c // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/fail_extend_impl_forall.carbon b/toolchain/check/testdata/impl/fail_extend_impl_forall.carbon index 1f721177cc0e..a48f6d118796 100644 --- a/toolchain/check/testdata/impl/fail_extend_impl_forall.carbon +++ b/toolchain/check/testdata/impl/fail_extend_impl_forall.carbon @@ -32,12 +32,15 @@ class C { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %GenericInterface.type.26e: type = generic_interface_type @GenericInterface [concrete] // CHECK:STDOUT: %GenericInterface.generic: %GenericInterface.type.26e = struct_value () [concrete] // CHECK:STDOUT: %GenericInterface.type.4e1: type = facet_type <@GenericInterface, @GenericInterface(%T)> [symbolic] // CHECK:STDOUT: %Self: %GenericInterface.type.4e1 = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %x.param_patt: %pattern_type.51d = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt: %pattern_type.51d = at_binding_pattern x, %x.param_patt [symbolic] // CHECK:STDOUT: %GenericInterface.WithSelf.F.type: type = fn_type @GenericInterface.WithSelf.F, @GenericInterface.WithSelf(%T, %Self) [symbolic] // CHECK:STDOUT: %GenericInterface.WithSelf.F: %GenericInterface.WithSelf.F.type = struct_value () [symbolic] // CHECK:STDOUT: %GenericInterface.assoc_type: type = assoc_entity_type @GenericInterface, @GenericInterface(%T) [symbolic] @@ -57,7 +60,7 @@ class C { // CHECK:STDOUT: .C = %C.decl // CHECK:STDOUT: } // CHECK:STDOUT: %GenericInterface.decl: %GenericInterface.type.26e = interface_decl @GenericInterface [concrete = constants.%GenericInterface.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc15_29.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_29.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc15_32.1: type = splice_block %.loc15_32.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -69,6 +72,7 @@ class C { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @GenericInterface(%T.loc15_29.2: type) { +// CHECK:STDOUT: %T.patt.loc15_29.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_29.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc15_29.1: type = symbolic_binding T, 0 [symbolic = %T.loc15_29.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -81,8 +85,8 @@ class C { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %GenericInterface.WithSelf.F.decl: @GenericInterface.WithSelf.%GenericInterface.WithSelf.F.type (%GenericInterface.WithSelf.F.type) = fn_decl @GenericInterface.WithSelf.F [symbolic = @GenericInterface.WithSelf.%GenericInterface.WithSelf.F (constants.%GenericInterface.WithSelf.F)] { -// CHECK:STDOUT: %x.param_patt: @GenericInterface.WithSelf.F.%pattern_type (%pattern_type.51d) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @GenericInterface.WithSelf.F.%pattern_type (%pattern_type.51d) = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %x.param_patt.loc16_9.1: @GenericInterface.WithSelf.F.%pattern_type (%pattern_type.51d) = value_param_pattern [symbolic = %x.param_patt.loc16_9.2 (constants.%x.param_patt)] +// CHECK:STDOUT: %x.patt.loc16_9.1: @GenericInterface.WithSelf.F.%pattern_type (%pattern_type.51d) = at_binding_pattern x, %x.param_patt.loc16_9.1 [symbolic = %x.patt.loc16_9.2 (constants.%x.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: @GenericInterface.WithSelf.F.%T (%T) = value_param call_param0 // CHECK:STDOUT: %T.ref: type = name_ref T, @GenericInterface.%T.loc15_29.2 [symbolic = %T (constants.%T)] @@ -102,6 +106,7 @@ class C { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @C.as.GenericInterface.impl(%T.loc24_24.2: type) { +// CHECK:STDOUT: %T.patt.loc24_24.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc24_24.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc24_24.1: type = symbolic_binding T, 0 [symbolic = %T.loc24_24.1 (constants.%T)] // CHECK:STDOUT: %GenericInterface.type.loc24_54.1: type = facet_type <@GenericInterface, @GenericInterface(%T.loc24_24.1)> [symbolic = %GenericInterface.type.loc24_54.1 (constants.%GenericInterface.type.4e1)] // CHECK:STDOUT: %GenericInterface.impl_witness.loc24_56.2: = impl_witness %GenericInterface.impl_witness_table, @C.as.GenericInterface.impl(%T.loc24_24.1) [symbolic = %GenericInterface.impl_witness.loc24_56.2 (constants.%GenericInterface.impl_witness)] @@ -112,8 +117,8 @@ class C { // CHECK:STDOUT: // CHECK:STDOUT: impl: %Self.ref as %GenericInterface.type.loc24_54.2 { // CHECK:STDOUT: %C.as.GenericInterface.impl.F.decl: @C.as.GenericInterface.impl.%C.as.GenericInterface.impl.F.type (%C.as.GenericInterface.impl.F.type) = fn_decl @C.as.GenericInterface.impl.F [symbolic = @C.as.GenericInterface.impl.%C.as.GenericInterface.impl.F (constants.%C.as.GenericInterface.impl.F)] { -// CHECK:STDOUT: %x.param_patt: @C.as.GenericInterface.impl.F.%pattern_type (%pattern_type.51d) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @C.as.GenericInterface.impl.F.%pattern_type (%pattern_type.51d) = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %x.param_patt.loc25_18.1: @C.as.GenericInterface.impl.F.%pattern_type (%pattern_type.51d) = value_param_pattern [symbolic = %x.param_patt.loc25_18.2 (constants.%x.param_patt)] +// CHECK:STDOUT: %x.patt.loc25_18.1: @C.as.GenericInterface.impl.F.%pattern_type (%pattern_type.51d) = at_binding_pattern x, %x.param_patt.loc25_18.1 [symbolic = %x.patt.loc25_18.2 (constants.%x.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: @C.as.GenericInterface.impl.F.%T (%T) = value_param call_param0 // CHECK:STDOUT: %T.ref: type = name_ref T, @C.as.GenericInterface.impl.%T.loc24_24.2 [symbolic = %T (constants.%T)] @@ -132,7 +137,7 @@ class C { // CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: impl_decl @C.as.GenericInterface.impl [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc24_24.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc24_24.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] // CHECK:STDOUT: %GenericInterface.ref: %GenericInterface.type.26e = name_ref GenericInterface, file.%GenericInterface.decl [concrete = constants.%GenericInterface.generic] @@ -156,6 +161,8 @@ class C { // CHECK:STDOUT: generic fn @GenericInterface.WithSelf.F(@GenericInterface.%T.loc15_29.2: type, @GenericInterface.%Self.loc15_38.1: @GenericInterface.%GenericInterface.type (%GenericInterface.type.4e1)) { // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.51d)] +// CHECK:STDOUT: %x.param_patt.loc16_9.2: @GenericInterface.WithSelf.F.%pattern_type (%pattern_type.51d) = value_param_pattern [symbolic = %x.param_patt.loc16_9.2 (constants.%x.param_patt)] +// CHECK:STDOUT: %x.patt.loc16_9.2: @GenericInterface.WithSelf.F.%pattern_type (%pattern_type.51d) = at_binding_pattern x, %x.param_patt.loc16_9.2 [symbolic = %x.patt.loc16_9.2 (constants.%x.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%x.param: @GenericInterface.WithSelf.F.%T (%T)); // CHECK:STDOUT: } @@ -163,6 +170,8 @@ class C { // CHECK:STDOUT: generic fn @C.as.GenericInterface.impl.F(@C.as.GenericInterface.impl.%T.loc24_24.2: type) { // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.51d)] +// CHECK:STDOUT: %x.param_patt.loc25_18.2: @C.as.GenericInterface.impl.F.%pattern_type (%pattern_type.51d) = value_param_pattern [symbolic = %x.param_patt.loc25_18.2 (constants.%x.param_patt)] +// CHECK:STDOUT: %x.patt.loc25_18.2: @C.as.GenericInterface.impl.F.%pattern_type (%pattern_type.51d) = at_binding_pattern x, %x.param_patt.loc25_18.2 [symbolic = %x.patt.loc25_18.2 (constants.%x.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic = %require_complete (constants.%require_complete)] @@ -174,6 +183,7 @@ class C { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @GenericInterface(constants.%T) { +// CHECK:STDOUT: %T.patt.loc15_29.2 => constants.%T.patt // CHECK:STDOUT: %T.loc15_29.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -191,9 +201,12 @@ class C { // CHECK:STDOUT: specific @GenericInterface.WithSelf.F(constants.%T, constants.%Self) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d +// CHECK:STDOUT: %x.param_patt.loc16_9.2 => constants.%x.param_patt +// CHECK:STDOUT: %x.patt.loc16_9.2 => constants.%x.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C.as.GenericInterface.impl(constants.%T) { +// CHECK:STDOUT: %T.patt.loc24_24.2 => constants.%T.patt // CHECK:STDOUT: %T.loc24_24.1 => constants.%T // CHECK:STDOUT: %GenericInterface.type.loc24_54.1 => constants.%GenericInterface.type.4e1 // CHECK:STDOUT: %GenericInterface.impl_witness.loc24_56.2 => constants.%GenericInterface.impl_witness @@ -206,5 +219,7 @@ class C { // CHECK:STDOUT: specific @C.as.GenericInterface.impl.F(constants.%T) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d +// CHECK:STDOUT: %x.param_patt.loc25_18.2 => constants.%x.param_patt +// CHECK:STDOUT: %x.patt.loc25_18.2 => constants.%x.patt // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/fail_extend_undefined_interface.carbon b/toolchain/check/testdata/impl/fail_extend_undefined_interface.carbon index 64bd74778dcc..ba366df2f481 100644 --- a/toolchain/check/testdata/impl/fail_extend_undefined_interface.carbon +++ b/toolchain/check/testdata/impl/fail_extend_undefined_interface.carbon @@ -38,6 +38,8 @@ fn F(c: C) { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = at_binding_pattern c, %c.param_patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -51,8 +53,8 @@ fn F(c: C) { // CHECK:STDOUT: %I.decl: type = interface_decl @I [concrete = constants.%I.type] {} {} // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %c.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type = at_binding_pattern c, %c.param_patt [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type = value_param_pattern [concrete = constants.%c.param_patt] +// CHECK:STDOUT: %c.patt: %pattern_type = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref.loc28: type = name_ref C, file.%C.decl [concrete = constants.%C] diff --git a/toolchain/check/testdata/impl/fail_impl_as_scope.carbon b/toolchain/check/testdata/impl/fail_impl_as_scope.carbon index e46273a512e9..696248e635d2 100644 --- a/toolchain/check/testdata/impl/fail_impl_as_scope.carbon +++ b/toolchain/check/testdata/impl/fail_impl_as_scope.carbon @@ -244,6 +244,8 @@ class X { // CHECK:STDOUT: %assoc0.627: %Z.assoc_type = assoc_entity element0, @Z.WithSelf.%Z.WithSelf.Zero.decl [concrete] // CHECK:STDOUT: %Self.as_type.0cf: type = facet_access_type %Self.cb6 [symbolic] // CHECK:STDOUT: %pattern_type.52a: type = pattern_type %Self.as_type.0cf [symbolic] +// CHECK:STDOUT: %self.param_patt.241: %pattern_type.52a = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.104: %pattern_type.52a = at_binding_pattern self, %self.param_patt.241 [symbolic] // CHECK:STDOUT: %Z.WithSelf.Method.type.d41: type = fn_type @Z.WithSelf.Method, @Z.WithSelf(%Self.cb6) [symbolic] // CHECK:STDOUT: %Z.WithSelf.Method.ead: %Z.WithSelf.Method.type.d41 = struct_value () [symbolic] // CHECK:STDOUT: %assoc1: %Z.assoc_type = assoc_entity element1, @Z.WithSelf.%Z.WithSelf.Method.decl [concrete] @@ -257,6 +259,8 @@ class X { // CHECK:STDOUT: %Point.as.Z.impl.Zero.type: type = fn_type @Point.as.Z.impl.Zero [concrete] // CHECK:STDOUT: %Point.as.Z.impl.Zero: %Point.as.Z.impl.Zero.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.9d8: type = pattern_type %Point [concrete] +// CHECK:STDOUT: %self.param_patt.b38: %pattern_type.9d8 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.60a: %pattern_type.9d8 = at_binding_pattern self, %self.param_patt.b38 [concrete] // CHECK:STDOUT: %Point.as.Z.impl.Method.type: type = fn_type @Point.as.Z.impl.Method [concrete] // CHECK:STDOUT: %Point.as.Z.impl.Method: %Point.as.Z.impl.Method.type = struct_value () [concrete] // CHECK:STDOUT: %Z.facet: %Z.type = facet_value %Point, (%Z.impl_witness) [concrete] @@ -310,8 +314,8 @@ class X { // CHECK:STDOUT: %Z.WithSelf.Zero.decl: @Z.WithSelf.%Z.WithSelf.Zero.type (%Z.WithSelf.Zero.type.68b) = fn_decl @Z.WithSelf.Zero [symbolic = @Z.WithSelf.%Z.WithSelf.Zero (constants.%Z.WithSelf.Zero.087)] {} {} // CHECK:STDOUT: %assoc0: %Z.assoc_type = assoc_entity element0, %Z.WithSelf.Zero.decl [concrete = constants.%assoc0.627] // CHECK:STDOUT: %Z.WithSelf.Method.decl: @Z.WithSelf.%Z.WithSelf.Method.type (%Z.WithSelf.Method.type.d41) = fn_decl @Z.WithSelf.Method [symbolic = @Z.WithSelf.%Z.WithSelf.Method (constants.%Z.WithSelf.Method.ead)] { -// CHECK:STDOUT: %self.param_patt: @Z.WithSelf.Method.%pattern_type (%pattern_type.52a) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @Z.WithSelf.Method.%pattern_type (%pattern_type.52a) = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc5_13.1: @Z.WithSelf.Method.%pattern_type (%pattern_type.52a) = value_param_pattern [symbolic = %self.param_patt.loc5_13.2 (constants.%self.param_patt.241)] +// CHECK:STDOUT: %self.patt.loc5_13.1: @Z.WithSelf.Method.%pattern_type (%pattern_type.52a) = at_binding_pattern self, %self.param_patt.loc5_13.1 [symbolic = %self.patt.loc5_13.2 (constants.%self.patt.104)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @Z.WithSelf.Method.%Self.as_type.loc5_13.1 (%Self.as_type.0cf) = value_param call_param0 // CHECK:STDOUT: %.loc5_13.1: type = splice_block %.loc5_13.2 [symbolic = %Self.as_type.loc5_13.1 (constants.%Self.as_type.0cf)] { @@ -348,8 +352,8 @@ class X { // CHECK:STDOUT: impl: as %Z.ref { // CHECK:STDOUT: %.as.Z.impl.Zero.decl: @.as.Z.impl.%.as.Z.impl.Zero.type (%.as.Z.impl.Zero.type) = fn_decl @.as.Z.impl.Zero [symbolic = @.as.Z.impl.%.as.Z.impl.Zero (constants.%.as.Z.impl.Zero)] {} {} // CHECK:STDOUT: %.as.Z.impl.Method.decl: @.as.Z.impl.%.as.Z.impl.Method.type (%.as.Z.impl.Method.type) = fn_decl @.as.Z.impl.Method [symbolic = @.as.Z.impl.%.as.Z.impl.Method (constants.%.as.Z.impl.Method)] { -// CHECK:STDOUT: %self.param_patt: @.as.Z.impl.Method.%pattern_type (%pattern_type.52a) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @.as.Z.impl.Method.%pattern_type (%pattern_type.52a) = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc13_22.1: @.as.Z.impl.Method.%pattern_type (%pattern_type.52a) = value_param_pattern [symbolic = %self.param_patt.loc13_22.2 (constants.%self.param_patt.241)] +// CHECK:STDOUT: %self.patt.loc13_22.1: @.as.Z.impl.Method.%pattern_type (%pattern_type.52a) = at_binding_pattern self, %self.param_patt.loc13_22.1 [symbolic = %self.patt.loc13_22.2 (constants.%self.patt.104)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @.as.Z.impl.Method.%Self.as_type.loc13_22.1 (%Self.as_type.0cf) = value_param call_param0 // CHECK:STDOUT: %.loc13_22.1: type = splice_block %.loc13_22.2 [symbolic = %Self.as_type.loc13_22.1 (constants.%Self.as_type.0cf)] { @@ -371,8 +375,8 @@ class X { // CHECK:STDOUT: impl @Point.as.Z.impl: %Self.ref as %Z.ref { // CHECK:STDOUT: %Point.as.Z.impl.Zero.decl: %Point.as.Z.impl.Zero.type = fn_decl @Point.as.Z.impl.Zero [concrete = constants.%Point.as.Z.impl.Zero] {} {} // CHECK:STDOUT: %Point.as.Z.impl.Method.decl: %Point.as.Z.impl.Method.type = fn_decl @Point.as.Z.impl.Method [concrete = constants.%Point.as.Z.impl.Method] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.9d8 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.9d8 = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.9d8 = value_param_pattern [concrete = constants.%self.param_patt.b38] +// CHECK:STDOUT: %self.patt: %pattern_type.9d8 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.60a] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %Point = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Point [concrete = constants.%Point] @@ -409,6 +413,8 @@ class X { // CHECK:STDOUT: %Self: %Z.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.cb6)] // CHECK:STDOUT: %Self.as_type.loc5_13.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_13.1 (constants.%Self.as_type.0cf)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc5_13.1 [symbolic = %pattern_type (constants.%pattern_type.52a)] +// CHECK:STDOUT: %self.param_patt.loc5_13.2: @Z.WithSelf.Method.%pattern_type (%pattern_type.52a) = value_param_pattern [symbolic = %self.param_patt.loc5_13.2 (constants.%self.param_patt.241)] +// CHECK:STDOUT: %self.patt.loc5_13.2: @Z.WithSelf.Method.%pattern_type (%pattern_type.52a) = at_binding_pattern self, %self.param_patt.loc5_13.2 [symbolic = %self.patt.loc5_13.2 (constants.%self.patt.104)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Z.WithSelf.Method.%Self.as_type.loc5_13.1 (%Self.as_type.0cf)); // CHECK:STDOUT: } @@ -426,6 +432,8 @@ class X { // CHECK:STDOUT: %Self: %Z.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.cb6)] // CHECK:STDOUT: %Self.as_type.loc13_22.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc13_22.1 (constants.%Self.as_type.0cf)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc13_22.1 [symbolic = %pattern_type (constants.%pattern_type.52a)] +// CHECK:STDOUT: %self.param_patt.loc13_22.2: @.as.Z.impl.Method.%pattern_type (%pattern_type.52a) = value_param_pattern [symbolic = %self.param_patt.loc13_22.2 (constants.%self.param_patt.241)] +// CHECK:STDOUT: %self.patt.loc13_22.2: @.as.Z.impl.Method.%pattern_type (%pattern_type.52a) = at_binding_pattern self, %self.param_patt.loc13_22.2 [symbolic = %self.patt.loc13_22.2 (constants.%self.patt.104)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %Self.as_type.loc13_22.1 [symbolic = %require_complete (constants.%require_complete)] @@ -493,6 +501,8 @@ class X { // CHECK:STDOUT: %Self => constants.%Self.cb6 // CHECK:STDOUT: %Self.as_type.loc5_13.1 => constants.%Self.as_type.0cf // CHECK:STDOUT: %pattern_type => constants.%pattern_type.52a +// CHECK:STDOUT: %self.param_patt.loc5_13.2 => constants.%self.param_patt.241 +// CHECK:STDOUT: %self.patt.loc5_13.2 => constants.%self.patt.104 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @.as.Z.impl(constants.%Self.cb6) { @@ -510,6 +520,8 @@ class X { // CHECK:STDOUT: %Self => constants.%Self.cb6 // CHECK:STDOUT: %Self.as_type.loc13_22.1 => constants.%Self.as_type.0cf // CHECK:STDOUT: %pattern_type => constants.%pattern_type.52a +// CHECK:STDOUT: %self.param_patt.loc13_22.2 => constants.%self.param_patt.241 +// CHECK:STDOUT: %self.patt.loc13_22.2 => constants.%self.patt.104 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Z.WithSelf(constants.%Z.facet) { @@ -527,6 +539,8 @@ class X { // CHECK:STDOUT: %Self => constants.%Z.facet // CHECK:STDOUT: %Self.as_type.loc5_13.1 => constants.%Point // CHECK:STDOUT: %pattern_type => constants.%pattern_type.9d8 +// CHECK:STDOUT: %self.param_patt.loc5_13.2 => constants.%self.param_patt.b38 +// CHECK:STDOUT: %self.patt.loc5_13.2 => constants.%self.patt.60a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_impl_as_other_interface.carbon diff --git a/toolchain/check/testdata/impl/fail_impl_bad_assoc_fn.carbon b/toolchain/check/testdata/impl/fail_impl_bad_assoc_fn.carbon index 8a1831f07e0b..006f1e41e64b 100644 --- a/toolchain/check/testdata/impl/fail_impl_bad_assoc_fn.carbon +++ b/toolchain/check/testdata/impl/fail_impl_bad_assoc_fn.carbon @@ -133,41 +133,33 @@ class FMissingImplicitParam { class FMissingReturnType { impl as J { - // CHECK:STDERR: fail_impl_bad_assoc_fn.carbon:[[@LINE+16]]:5: error: cannot implicitly convert expression of type `()` to `bool` [ConversionFailure] + // CHECK:STDERR: fail_impl_bad_assoc_fn.carbon:[[@LINE+12]]:5: error: cannot implicitly convert expression of type `()` to `bool` [ConversionFailure] // CHECK:STDERR: fn F(self: bool, b: bool); // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~ - // CHECK:STDERR: fail_impl_bad_assoc_fn.carbon:[[@LINE+13]]:5: note: type `()` does not implement interface `Core.ImplicitAs(bool)` [MissingImplInMemberAccessInContext] + // CHECK:STDERR: fail_impl_bad_assoc_fn.carbon:[[@LINE+9]]:5: note: type `()` does not implement interface `Core.ImplicitAs(bool)` [MissingImplInMemberAccessInContext] // CHECK:STDERR: fn F(self: bool, b: bool); // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_impl_bad_assoc_fn.carbon:[[@LINE-39]]:15: note: while building thunk to match the signature of this function [ThunkSignature] // CHECK:STDERR: interface J { fn F(self: bool, b: bool) -> bool; } // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: - // CHECK:STDERR: fail_impl_bad_assoc_fn.carbon:[[@LINE-43]]:32: error: cannot implicitly convert expression of type `bool` to `FDifferentParamType` [ConversionFailure] - // CHECK:STDERR: interface J { fn F(self: bool, b: bool) -> bool; } - // CHECK:STDERR: ^~~~~~~ - // CHECK:STDERR: fail_impl_bad_assoc_fn.carbon:[[@LINE-46]]:32: note: type `bool` does not implement interface `Core.ImplicitAs(FDifferentParamType)` [MissingImplInMemberAccessInContext] - // CHECK:STDERR: interface J { fn F(self: bool, b: bool) -> bool; } - // CHECK:STDERR: ^~~~~~~ + // CHECK:STDERR: fail_impl_bad_assoc_fn.carbon: error: cannot implicitly convert expression of type `bool` to `FDifferentParamType` [ConversionFailure] + // CHECK:STDERR: fail_impl_bad_assoc_fn.carbon: note: type `bool` does not implement interface `Core.ImplicitAs(FDifferentParamType)` [MissingImplInMemberAccessInContext] fn F(self: bool, b: bool); } } class FDifferentParamType { impl as J { - // CHECK:STDERR: fail_impl_bad_assoc_fn.carbon:[[@LINE+13]]:22: note: initializing function parameter [InCallToFunctionParam] + // CHECK:STDERR: fail_impl_bad_assoc_fn.carbon:[[@LINE+9]]:22: note: initializing function parameter [InCallToFunctionParam] // CHECK:STDERR: fn F(self: bool, b: Self) -> bool; // CHECK:STDERR: ^~~~~~~ - // CHECK:STDERR: fail_impl_bad_assoc_fn.carbon:[[@LINE-58]]:15: note: while building thunk to match the signature of this function [ThunkSignature] + // CHECK:STDERR: fail_impl_bad_assoc_fn.carbon:[[@LINE-54]]:15: note: while building thunk to match the signature of this function [ThunkSignature] // CHECK:STDERR: interface J { fn F(self: bool, b: bool) -> bool; } // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: - // CHECK:STDERR: fail_impl_bad_assoc_fn.carbon:[[@LINE-62]]:20: error: cannot implicitly convert expression of type `bool` to `FDifferentImplicitParamType` [ConversionFailure] - // CHECK:STDERR: interface J { fn F(self: bool, b: bool) -> bool; } - // CHECK:STDERR: ^~~~~~~~~~ - // CHECK:STDERR: fail_impl_bad_assoc_fn.carbon:[[@LINE-65]]:20: note: type `bool` does not implement interface `Core.ImplicitAs(FDifferentImplicitParamType)` [MissingImplInMemberAccessInContext] - // CHECK:STDERR: interface J { fn F(self: bool, b: bool) -> bool; } - // CHECK:STDERR: ^~~~~~~~~~ + // CHECK:STDERR: fail_impl_bad_assoc_fn.carbon: error: cannot implicitly convert expression of type `bool` to `FDifferentImplicitParamType` [ConversionFailure] + // CHECK:STDERR: fail_impl_bad_assoc_fn.carbon: note: type `bool` does not implement interface `Core.ImplicitAs(FDifferentImplicitParamType)` [MissingImplInMemberAccessInContext] fn F(self: bool, b: Self) -> bool; } } @@ -177,7 +169,7 @@ class FDifferentImplicitParamType { // CHECK:STDERR: fail_impl_bad_assoc_fn.carbon:[[@LINE+7]]:10: note: initializing function parameter [InCallToFunctionParam] // CHECK:STDERR: fn F(self, b: bool) -> bool; // CHECK:STDERR: ^~~~ - // CHECK:STDERR: fail_impl_bad_assoc_fn.carbon:[[@LINE-77]]:15: note: while building thunk to match the signature of this function [ThunkSignature] + // CHECK:STDERR: fail_impl_bad_assoc_fn.carbon:[[@LINE-69]]:15: note: while building thunk to match the signature of this function [ThunkSignature] // CHECK:STDERR: interface J { fn F(self: bool, b: bool) -> bool; } // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: @@ -187,27 +179,23 @@ class FDifferentImplicitParamType { class FDifferentReturnType { impl as J { - // CHECK:STDERR: fail_impl_bad_assoc_fn.carbon:[[@LINE+10]]:5: error: cannot implicitly convert expression of type `FDifferentReturnType` to `bool` [ConversionFailure] + // CHECK:STDERR: fail_impl_bad_assoc_fn.carbon:[[@LINE+12]]:5: error: cannot implicitly convert expression of type `FDifferentReturnType` to `bool` [ConversionFailure] // CHECK:STDERR: fn F(self: bool, b: bool) -> Self; // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // CHECK:STDERR: fail_impl_bad_assoc_fn.carbon:[[@LINE+7]]:5: note: type `FDifferentReturnType` does not implement interface `Core.ImplicitAs(bool)` [MissingImplInMemberAccessInContext] + // CHECK:STDERR: fail_impl_bad_assoc_fn.carbon:[[@LINE+9]]:5: note: type `FDifferentReturnType` does not implement interface `Core.ImplicitAs(bool)` [MissingImplInMemberAccessInContext] // CHECK:STDERR: fn F(self: bool, b: bool) -> Self; // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // CHECK:STDERR: fail_impl_bad_assoc_fn.carbon:[[@LINE-93]]:15: note: while building thunk to match the signature of this function [ThunkSignature] + // CHECK:STDERR: fail_impl_bad_assoc_fn.carbon:[[@LINE-85]]:15: note: while building thunk to match the signature of this function [ThunkSignature] // CHECK:STDERR: interface J { fn F(self: bool, b: bool) -> bool; } // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: + // CHECK:STDERR: fail_impl_bad_assoc_fn.carbon: error: cannot implicitly convert expression of type `SelfNestedBadParam` to `i32` [ConversionFailure] + // CHECK:STDERR: fail_impl_bad_assoc_fn.carbon: note: type `SelfNestedBadParam` does not implement interface `Core.ImplicitAs(i32)` [MissingImplInMemberAccessInContext] fn F(self: bool, b: bool) -> Self; } } interface SelfNested { - // CHECK:STDERR: fail_impl_bad_assoc_fn.carbon:[[@LINE+6]]:8: error: cannot implicitly convert expression of type `SelfNestedBadParam` to `i32` [ConversionFailure] - // CHECK:STDERR: fn F(x: (Self*, {.x: Self, .y: i32})) -> array(Self, 4); - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // CHECK:STDERR: fail_impl_bad_assoc_fn.carbon:[[@LINE+3]]:8: note: type `SelfNestedBadParam` does not implement interface `Core.ImplicitAs(i32)` [MissingImplInMemberAccessInContext] - // CHECK:STDERR: fn F(x: (Self*, {.x: Self, .y: i32})) -> array(Self, 4); - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fn F(x: (Self*, {.x: Self, .y: i32})) -> array(Self, 4); } @@ -274,6 +262,8 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: %FExtraParam: type = class_type @FExtraParam [concrete] // CHECK:STDOUT: %I.impl_witness.99e: = impl_witness @FExtraParam.as.I.impl.%I.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] +// CHECK:STDOUT: %b.param_patt.792: %pattern_type.831 = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt.4e2: %pattern_type.831 = at_binding_pattern b, %b.param_patt.792 [concrete] // CHECK:STDOUT: %FExtraParam.as.I.impl.F.type.ec7b0b.1: type = fn_type @FExtraParam.as.I.impl.F.loc69_18.1 [concrete] // CHECK:STDOUT: %FExtraParam.as.I.impl.F.ef9801.1: %FExtraParam.as.I.impl.F.type.ec7b0b.1 = struct_value () [concrete] // CHECK:STDOUT: %I.facet.657: %I.type = facet_value %FExtraParam, (%I.impl_witness.99e) [concrete] @@ -284,6 +274,8 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: %FExtraImplicitParam: type = class_type @FExtraImplicitParam [concrete] // CHECK:STDOUT: %I.impl_witness.2da: = impl_witness @FExtraImplicitParam.as.I.impl.%I.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.54d: type = pattern_type %FExtraImplicitParam [concrete] +// CHECK:STDOUT: %self.param_patt.f41: %pattern_type.54d = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.3d5: %pattern_type.54d = at_binding_pattern self, %self.param_patt.f41 [concrete] // CHECK:STDOUT: %FExtraImplicitParam.as.I.impl.F.type.54cac2.1: type = fn_type @FExtraImplicitParam.as.I.impl.F.loc85_15.1 [concrete] // CHECK:STDOUT: %FExtraImplicitParam.as.I.impl.F.a42f35.1: %FExtraImplicitParam.as.I.impl.F.type.54cac2.1 = struct_value () [concrete] // CHECK:STDOUT: %I.facet.334: %I.type = facet_value %FExtraImplicitParam, (%I.impl_witness.2da) [concrete] @@ -294,6 +286,8 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: %FExtraReturnType: type = class_type @FExtraReturnType [concrete] // CHECK:STDOUT: %I.impl_witness.b63: = impl_witness @FExtraReturnType.as.I.impl.%I.impl_witness_table [concrete] // CHECK:STDOUT: %.f34: Core.Form = init_form bool [concrete] +// CHECK:STDOUT: %return.param_patt.5a1: %pattern_type.831 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.c0c: %pattern_type.831 = return_slot_pattern %return.param_patt.5a1, bool [concrete] // CHECK:STDOUT: %FExtraReturnType.as.I.impl.F.type: type = fn_type @FExtraReturnType.as.I.impl.F [concrete] // CHECK:STDOUT: %FExtraReturnType.as.I.impl.F: %FExtraReturnType.as.I.impl.F.type = struct_value () [concrete] // CHECK:STDOUT: %I.facet.dde: %I.type = facet_value %FExtraReturnType, (%I.impl_witness.b63) [concrete] @@ -301,6 +295,8 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: %I.WithSelf.F.338: %I.WithSelf.F.type.fea = struct_value () [concrete] // CHECK:STDOUT: %J.type: type = facet_type <@J> [concrete] // CHECK:STDOUT: %Self.653: %J.type = symbolic_binding Self, 0 [symbolic] +// CHECK:STDOUT: %self.param_patt.210: %pattern_type.831 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.f7d: %pattern_type.831 = at_binding_pattern self, %self.param_patt.210 [concrete] // CHECK:STDOUT: %J.WithSelf.F.type.a0a: type = fn_type @J.WithSelf.F, @J.WithSelf(%Self.653) [symbolic] // CHECK:STDOUT: %J.WithSelf.F.f69: %J.WithSelf.F.type.a0a = struct_value () [symbolic] // CHECK:STDOUT: %J.assoc_type: type = assoc_entity_type @J [concrete] @@ -325,45 +321,64 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: %FMissingImplicitParam.as.J.impl.F.620ed1.2: %FMissingImplicitParam.as.J.impl.F.type.f666a8.2 = struct_value () [concrete] // CHECK:STDOUT: %FMissingReturnType: type = class_type @FMissingReturnType [concrete] // CHECK:STDOUT: %J.impl_witness.05c: = impl_witness @FMissingReturnType.as.J.impl.%J.impl_witness_table [concrete] -// CHECK:STDOUT: %FMissingReturnType.as.J.impl.F.type.9cd56a.1: type = fn_type @FMissingReturnType.as.J.impl.F.loc152_30.1 [concrete] +// CHECK:STDOUT: %FMissingReturnType.as.J.impl.F.type.9cd56a.1: type = fn_type @FMissingReturnType.as.J.impl.F.loc148_30.1 [concrete] // CHECK:STDOUT: %FMissingReturnType.as.J.impl.F.6975be.1: %FMissingReturnType.as.J.impl.F.type.9cd56a.1 = struct_value () [concrete] // CHECK:STDOUT: %J.facet.c42: %J.type = facet_value %FMissingReturnType, (%J.impl_witness.05c) [concrete] // CHECK:STDOUT: %J.WithSelf.F.type.f86: type = fn_type @J.WithSelf.F, @J.WithSelf(%J.facet.c42) [concrete] // CHECK:STDOUT: %J.WithSelf.F.d52: %J.WithSelf.F.type.f86 = struct_value () [concrete] -// CHECK:STDOUT: %FMissingReturnType.as.J.impl.F.type.9cd56a.2: type = fn_type @FMissingReturnType.as.J.impl.F.loc152_30.2 [concrete] +// CHECK:STDOUT: %FMissingReturnType.as.J.impl.F.type.9cd56a.2: type = fn_type @FMissingReturnType.as.J.impl.F.loc148_30.2 [concrete] // CHECK:STDOUT: %FMissingReturnType.as.J.impl.F.6975be.2: %FMissingReturnType.as.J.impl.F.type.9cd56a.2 = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] +// CHECK:STDOUT: %Dest: type = symbolic_binding Dest, 0 [symbolic] +// CHECK:STDOUT: %ImplicitAs.type.3aa: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] +// CHECK:STDOUT: %Self.294: %ImplicitAs.type.3aa = symbolic_binding Self, 1 [symbolic] +// CHECK:STDOUT: %ImplicitAs.assoc_type.fcc: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] +// CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.type.97e: type = fn_type @ImplicitAs.WithSelf.Convert, @ImplicitAs.WithSelf(%Dest, %Self.294) [symbolic] +// CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.945: %ImplicitAs.WithSelf.Convert.type.97e = struct_value () [symbolic] +// CHECK:STDOUT: %assoc0.0ac: %ImplicitAs.assoc_type.fcc = assoc_entity element0, imports.%Core.import_ref.f9d [symbolic] // CHECK:STDOUT: %FDifferentParamType: type = class_type @FDifferentParamType [concrete] // CHECK:STDOUT: %J.impl_witness.553: = impl_witness @FDifferentParamType.as.J.impl.%J.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.5d3: type = pattern_type %FDifferentParamType [concrete] -// CHECK:STDOUT: %FDifferentParamType.as.J.impl.F.type.4a2e9b.1: type = fn_type @FDifferentParamType.as.J.impl.F.loc171_38.1 [concrete] +// CHECK:STDOUT: %b.param_patt.0a8: %pattern_type.5d3 = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt.05d: %pattern_type.5d3 = at_binding_pattern b, %b.param_patt.0a8 [concrete] +// CHECK:STDOUT: %FDifferentParamType.as.J.impl.F.type.4a2e9b.1: type = fn_type @FDifferentParamType.as.J.impl.F.loc163_38.1 [concrete] // CHECK:STDOUT: %FDifferentParamType.as.J.impl.F.28602a.1: %FDifferentParamType.as.J.impl.F.type.4a2e9b.1 = struct_value () [concrete] // CHECK:STDOUT: %J.facet.47a: %J.type = facet_value %FDifferentParamType, (%J.impl_witness.553) [concrete] // CHECK:STDOUT: %J.WithSelf.F.type.9c3: type = fn_type @J.WithSelf.F, @J.WithSelf(%J.facet.47a) [concrete] // CHECK:STDOUT: %J.WithSelf.F.4cd: %J.WithSelf.F.type.9c3 = struct_value () [concrete] -// CHECK:STDOUT: %FDifferentParamType.as.J.impl.F.type.4a2e9b.2: type = fn_type @FDifferentParamType.as.J.impl.F.loc171_38.2 [concrete] +// CHECK:STDOUT: %FDifferentParamType.as.J.impl.F.type.4a2e9b.2: type = fn_type @FDifferentParamType.as.J.impl.F.loc163_38.2 [concrete] // CHECK:STDOUT: %FDifferentParamType.as.J.impl.F.28602a.2: %FDifferentParamType.as.J.impl.F.type.4a2e9b.2 = struct_value () [concrete] +// CHECK:STDOUT: %ImplicitAs.type.4ba: type = facet_type <@ImplicitAs, @ImplicitAs(%FDifferentParamType)> [concrete] +// CHECK:STDOUT: %ImplicitAs.assoc_type.503: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%FDifferentParamType) [concrete] +// CHECK:STDOUT: %assoc0.603: %ImplicitAs.assoc_type.503 = assoc_entity element0, imports.%Core.import_ref.cb2 [concrete] // CHECK:STDOUT: %FDifferentImplicitParamType: type = class_type @FDifferentImplicitParamType [concrete] // CHECK:STDOUT: %J.impl_witness.cc3: = impl_witness @FDifferentImplicitParamType.as.J.impl.%J.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.1bc: type = pattern_type %FDifferentImplicitParamType [concrete] -// CHECK:STDOUT: %FDifferentImplicitParamType.as.J.impl.F.type.6ef8a6.1: type = fn_type @FDifferentImplicitParamType.as.J.impl.F.loc184_32.1 [concrete] +// CHECK:STDOUT: %self.param_patt.ea6: %pattern_type.1bc = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.a07: %pattern_type.1bc = at_binding_pattern self, %self.param_patt.ea6 [concrete] +// CHECK:STDOUT: %FDifferentImplicitParamType.as.J.impl.F.type.6ef8a6.1: type = fn_type @FDifferentImplicitParamType.as.J.impl.F.loc176_32.1 [concrete] // CHECK:STDOUT: %FDifferentImplicitParamType.as.J.impl.F.792c78.1: %FDifferentImplicitParamType.as.J.impl.F.type.6ef8a6.1 = struct_value () [concrete] // CHECK:STDOUT: %J.facet.929: %J.type = facet_value %FDifferentImplicitParamType, (%J.impl_witness.cc3) [concrete] // CHECK:STDOUT: %J.WithSelf.F.type.97c: type = fn_type @J.WithSelf.F, @J.WithSelf(%J.facet.929) [concrete] // CHECK:STDOUT: %J.WithSelf.F.94b: %J.WithSelf.F.type.97c = struct_value () [concrete] -// CHECK:STDOUT: %FDifferentImplicitParamType.as.J.impl.F.type.6ef8a6.2: type = fn_type @FDifferentImplicitParamType.as.J.impl.F.loc184_32.2 [concrete] +// CHECK:STDOUT: %FDifferentImplicitParamType.as.J.impl.F.type.6ef8a6.2: type = fn_type @FDifferentImplicitParamType.as.J.impl.F.loc176_32.2 [concrete] // CHECK:STDOUT: %FDifferentImplicitParamType.as.J.impl.F.792c78.2: %FDifferentImplicitParamType.as.J.impl.F.type.6ef8a6.2 = struct_value () [concrete] +// CHECK:STDOUT: %ImplicitAs.type.de7: type = facet_type <@ImplicitAs, @ImplicitAs(%FDifferentImplicitParamType)> [concrete] +// CHECK:STDOUT: %ImplicitAs.assoc_type.36e: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%FDifferentImplicitParamType) [concrete] +// CHECK:STDOUT: %assoc0.769: %ImplicitAs.assoc_type.36e = assoc_entity element0, imports.%Core.import_ref.cb2 [concrete] // CHECK:STDOUT: %FDifferentReturnType: type = class_type @FDifferentReturnType [concrete] // CHECK:STDOUT: %J.impl_witness.6ab: = impl_witness @FDifferentReturnType.as.J.impl.%J.impl_witness_table [concrete] // CHECK:STDOUT: %.1f5: Core.Form = init_form %FDifferentReturnType [concrete] // CHECK:STDOUT: %pattern_type.b9f: type = pattern_type %FDifferentReturnType [concrete] -// CHECK:STDOUT: %FDifferentReturnType.as.J.impl.F.type.ff55f4.1: type = fn_type @FDifferentReturnType.as.J.impl.F.loc200_38.1 [concrete] +// CHECK:STDOUT: %return.param_patt.f37: %pattern_type.b9f = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e4f: %pattern_type.b9f = return_slot_pattern %return.param_patt.f37, %FDifferentReturnType [concrete] +// CHECK:STDOUT: %FDifferentReturnType.as.J.impl.F.type.ff55f4.1: type = fn_type @FDifferentReturnType.as.J.impl.F.loc194_38.1 [concrete] // CHECK:STDOUT: %FDifferentReturnType.as.J.impl.F.9725a5.1: %FDifferentReturnType.as.J.impl.F.type.ff55f4.1 = struct_value () [concrete] // CHECK:STDOUT: %J.facet.b85: %J.type = facet_value %FDifferentReturnType, (%J.impl_witness.6ab) [concrete] // CHECK:STDOUT: %J.WithSelf.F.type.a9c: type = fn_type @J.WithSelf.F, @J.WithSelf(%J.facet.b85) [concrete] // CHECK:STDOUT: %J.WithSelf.F.6ec: %J.WithSelf.F.type.a9c = struct_value () [concrete] -// CHECK:STDOUT: %FDifferentReturnType.as.J.impl.F.type.ff55f4.2: type = fn_type @FDifferentReturnType.as.J.impl.F.loc200_38.2 [concrete] +// CHECK:STDOUT: %FDifferentReturnType.as.J.impl.F.type.ff55f4.2: type = fn_type @FDifferentReturnType.as.J.impl.F.loc194_38.2 [concrete] // CHECK:STDOUT: %FDifferentReturnType.as.J.impl.F.9725a5.2: %FDifferentReturnType.as.J.impl.F.type.ff55f4.2 = struct_value () [concrete] // CHECK:STDOUT: %SelfNested.type: type = facet_type <@SelfNested> [concrete] // CHECK:STDOUT: %Self.e81: %SelfNested.type = symbolic_binding Self, 0 [symbolic] @@ -378,10 +393,14 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: %tuple.b6a: %tuple.type.24b = tuple_value (%ptr.a16, %struct_type.x.y.4c5) [symbolic] // CHECK:STDOUT: %tuple.type.c49: type = tuple_type (%ptr.a16, %struct_type.x.y.4c5) [symbolic] // CHECK:STDOUT: %pattern_type.60a: type = pattern_type %tuple.type.c49 [symbolic] +// CHECK:STDOUT: %x.param_patt.e85: %pattern_type.60a = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.ad4: %pattern_type.60a = at_binding_pattern x, %x.param_patt.e85 [symbolic] // CHECK:STDOUT: %int_4: Core.IntLiteral = int_value 4 [concrete] // CHECK:STDOUT: %array_type.4e4: type = array_type %int_4, %Self.as_type.8ab [symbolic] // CHECK:STDOUT: %.f45: Core.Form = init_form %array_type.4e4 [symbolic] // CHECK:STDOUT: %pattern_type.2ab: type = pattern_type %array_type.4e4 [symbolic] +// CHECK:STDOUT: %return.param_patt.439: %pattern_type.2ab = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.869: %pattern_type.2ab = return_slot_pattern %return.param_patt.439, %array_type.4e4 [symbolic] // CHECK:STDOUT: %SelfNested.WithSelf.F.type.702: type = fn_type @SelfNested.WithSelf.F, @SelfNested.WithSelf(%Self.e81) [symbolic] // CHECK:STDOUT: %SelfNested.WithSelf.F.eec: %SelfNested.WithSelf.F.type.702 = struct_value () [symbolic] // CHECK:STDOUT: %SelfNested.assoc_type: type = assoc_entity_type @SelfNested [concrete] @@ -393,10 +412,14 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: %tuple.991: %tuple.type.24b = tuple_value (%ptr.52e, %struct_type.x.y.fb8) [concrete] // CHECK:STDOUT: %tuple.type.e57: type = tuple_type (%ptr.52e, %struct_type.x.y.fb8) [concrete] // CHECK:STDOUT: %pattern_type.a68: type = pattern_type %tuple.type.e57 [concrete] +// CHECK:STDOUT: %x.param_patt.140: %pattern_type.a68 = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.19e: %pattern_type.a68 = at_binding_pattern x, %x.param_patt.140 [concrete] // CHECK:STDOUT: %array_type.291: type = array_type %int_4, %SelfNestedBadParam [concrete] // CHECK:STDOUT: %.cc2: Core.Form = init_form %array_type.291 [concrete] // CHECK:STDOUT: %pattern_type.3a0: type = pattern_type %array_type.291 [concrete] -// CHECK:STDOUT: %SelfNestedBadParam.as.SelfNested.impl.F.type.4325e7.1: type = fn_type @SelfNestedBadParam.as.SelfNested.impl.F.loc223_87.1 [concrete] +// CHECK:STDOUT: %return.param_patt.489: %pattern_type.3a0 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.98a: %pattern_type.3a0 = return_slot_pattern %return.param_patt.489, %array_type.291 [concrete] +// CHECK:STDOUT: %SelfNestedBadParam.as.SelfNested.impl.F.type.4325e7.1: type = fn_type @SelfNestedBadParam.as.SelfNested.impl.F.loc211_87.1 [concrete] // CHECK:STDOUT: %SelfNestedBadParam.as.SelfNested.impl.F.5fd896.1: %SelfNestedBadParam.as.SelfNested.impl.F.type.4325e7.1 = struct_value () [concrete] // CHECK:STDOUT: %SelfNested.facet.fc6: %SelfNested.type = facet_value %SelfNestedBadParam, (%SelfNested.impl_witness.d7c) [concrete] // CHECK:STDOUT: %SelfNested.WithSelf.F.type.75d: type = fn_type @SelfNested.WithSelf.F, @SelfNested.WithSelf(%SelfNested.facet.fc6) [concrete] @@ -405,8 +428,13 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: %tuple.09d: %tuple.type.24b = tuple_value (%ptr.52e, %struct_type.x.y.da2) [concrete] // CHECK:STDOUT: %tuple.type.9ab: type = tuple_type (%ptr.52e, %struct_type.x.y.da2) [concrete] // CHECK:STDOUT: %pattern_type.94f: type = pattern_type %tuple.type.9ab [concrete] -// CHECK:STDOUT: %SelfNestedBadParam.as.SelfNested.impl.F.type.4325e7.2: type = fn_type @SelfNestedBadParam.as.SelfNested.impl.F.loc223_87.2 [concrete] +// CHECK:STDOUT: %x.param_patt.7b9: %pattern_type.94f = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.4b4: %pattern_type.94f = at_binding_pattern x, %x.param_patt.7b9 [concrete] +// CHECK:STDOUT: %SelfNestedBadParam.as.SelfNested.impl.F.type.4325e7.2: type = fn_type @SelfNestedBadParam.as.SelfNested.impl.F.loc211_87.2 [concrete] // CHECK:STDOUT: %SelfNestedBadParam.as.SelfNested.impl.F.5fd896.2: %SelfNestedBadParam.as.SelfNested.impl.F.type.4325e7.2 = struct_value () [concrete] +// CHECK:STDOUT: %ImplicitAs.type.914: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] +// CHECK:STDOUT: %ImplicitAs.assoc_type.e23: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%i32) [concrete] +// CHECK:STDOUT: %assoc0.368: %ImplicitAs.assoc_type.e23 = assoc_entity element0, imports.%Core.import_ref.cb2 [concrete] // CHECK:STDOUT: %SelfNestedBadReturnType: type = class_type @SelfNestedBadReturnType [concrete] // CHECK:STDOUT: %SelfNested.impl_witness.abd: = impl_witness @SelfNestedBadReturnType.as.SelfNested.impl.%SelfNested.impl_witness_table [concrete] // CHECK:STDOUT: %ptr.f55: type = ptr_type %SelfNestedBadReturnType [concrete] @@ -414,7 +442,9 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: %tuple.96d: %tuple.type.24b = tuple_value (%ptr.f55, %struct_type.x.y.f6a) [concrete] // CHECK:STDOUT: %tuple.type.829: type = tuple_type (%ptr.f55, %struct_type.x.y.f6a) [concrete] // CHECK:STDOUT: %pattern_type.5c2: type = pattern_type %tuple.type.829 [concrete] -// CHECK:STDOUT: %SelfNestedBadReturnType.as.SelfNested.impl.F.type.1cbabe.1: type = fn_type @SelfNestedBadReturnType.as.SelfNested.impl.F.loc239_112.1 [concrete] +// CHECK:STDOUT: %x.param_patt.7be: %pattern_type.5c2 = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.ef5: %pattern_type.5c2 = at_binding_pattern x, %x.param_patt.7be [concrete] +// CHECK:STDOUT: %SelfNestedBadReturnType.as.SelfNested.impl.F.type.1cbabe.1: type = fn_type @SelfNestedBadReturnType.as.SelfNested.impl.F.loc227_112.1 [concrete] // CHECK:STDOUT: %SelfNestedBadReturnType.as.SelfNested.impl.F.5a7d54.1: %SelfNestedBadReturnType.as.SelfNested.impl.F.type.1cbabe.1 = struct_value () [concrete] // CHECK:STDOUT: %SelfNested.facet.68c: %SelfNested.type = facet_value %SelfNestedBadReturnType, (%SelfNested.impl_witness.abd) [concrete] // CHECK:STDOUT: %SelfNested.WithSelf.F.type.53d: type = fn_type @SelfNested.WithSelf.F, @SelfNested.WithSelf(%SelfNested.facet.68c) [concrete] @@ -422,7 +452,9 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: %array_type.a08: type = array_type %int_4, %SelfNestedBadReturnType [concrete] // CHECK:STDOUT: %.442: Core.Form = init_form %array_type.a08 [concrete] // CHECK:STDOUT: %pattern_type.f0d: type = pattern_type %array_type.a08 [concrete] -// CHECK:STDOUT: %SelfNestedBadReturnType.as.SelfNested.impl.F.type.1cbabe.2: type = fn_type @SelfNestedBadReturnType.as.SelfNested.impl.F.loc239_112.2 [concrete] +// CHECK:STDOUT: %return.param_patt.039: %pattern_type.f0d = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.3c4: %pattern_type.f0d = return_slot_pattern %return.param_patt.039, %array_type.a08 [concrete] +// CHECK:STDOUT: %SelfNestedBadReturnType.as.SelfNested.impl.F.type.1cbabe.2: type = fn_type @SelfNestedBadReturnType.as.SelfNested.impl.F.loc227_112.2 [concrete] // CHECK:STDOUT: %SelfNestedBadReturnType.as.SelfNested.impl.F.5a7d54.2: %SelfNestedBadReturnType.as.SelfNested.impl.F.type.1cbabe.2 = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -436,6 +468,9 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.Bool: type = import_ref Core//prelude/parts/bool, Bool, loaded [concrete = bool] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.0ff = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] +// CHECK:STDOUT: %Core.import_ref.484: @ImplicitAs.WithSelf.%ImplicitAs.assoc_type (%ImplicitAs.assoc_type.fcc) = import_ref Core//prelude/parts/as, loc{{\d+_\d+}}, loaded [symbolic = @ImplicitAs.WithSelf.%assoc0 (constants.%assoc0.0ac)] +// CHECK:STDOUT: %Core.import_ref.cb2: @ImplicitAs.WithSelf.%ImplicitAs.WithSelf.Convert.type (%ImplicitAs.WithSelf.Convert.type.97e) = import_ref Core//prelude/parts/as, loc{{\d+_\d+}}, loaded [symbolic = @ImplicitAs.WithSelf.%ImplicitAs.WithSelf.Convert (constants.%ImplicitAs.WithSelf.Convert.945)] +// CHECK:STDOUT: %Core.import_ref.f9d = import_ref Core//prelude/parts/as, loc{{\d+_\d+}}, unloaded // CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -505,12 +540,12 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %J.WithSelf.F.decl: @J.WithSelf.%J.WithSelf.F.type (%J.WithSelf.F.type.a0a) = fn_decl @J.WithSelf.F [symbolic = @J.WithSelf.%J.WithSelf.F (constants.%J.WithSelf.F.f69)] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.831 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.831 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc103_44.1 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.831 = value_param_pattern [concrete = constants.%self.param_patt.210] +// CHECK:STDOUT: %self.patt: %pattern_type.831 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.f7d] +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete = constants.%b.param_patt.792] +// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt.4e2] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete = constants.%return.param_patt.5a1] +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc103_44.1 [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc103_44.1: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc103_44.2: Core.Form = init_form %.loc103_44.1 [concrete = constants.%.f34] @@ -539,34 +574,34 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %SelfNested.WithSelf.F.decl: @SelfNested.WithSelf.%SelfNested.WithSelf.F.type (%SelfNested.WithSelf.F.type.702) = fn_decl @SelfNested.WithSelf.F [symbolic = @SelfNested.WithSelf.%SelfNested.WithSelf.F (constants.%SelfNested.WithSelf.F.eec)] { -// CHECK:STDOUT: %x.param_patt: @SelfNested.WithSelf.F.%pattern_type.loc211_9 (%pattern_type.60a) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @SelfNested.WithSelf.F.%pattern_type.loc211_9 (%pattern_type.60a) = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @SelfNested.WithSelf.F.%pattern_type.loc211_57 (%pattern_type.2ab) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @SelfNested.WithSelf.F.%pattern_type.loc211_57 (%pattern_type.2ab) = return_slot_pattern %return.param_patt, %array_type.loc211_57.2 [concrete] +// CHECK:STDOUT: %x.param_patt.loc199_9.1: @SelfNested.WithSelf.F.%pattern_type.loc199_9 (%pattern_type.60a) = value_param_pattern [symbolic = %x.param_patt.loc199_9.2 (constants.%x.param_patt.e85)] +// CHECK:STDOUT: %x.patt.loc199_9.1: @SelfNested.WithSelf.F.%pattern_type.loc199_9 (%pattern_type.60a) = at_binding_pattern x, %x.param_patt.loc199_9.1 [symbolic = %x.patt.loc199_9.2 (constants.%x.patt.ad4)] +// CHECK:STDOUT: %return.param_patt.loc199_57.1: @SelfNested.WithSelf.F.%pattern_type.loc199_57 (%pattern_type.2ab) = out_param_pattern [symbolic = %return.param_patt.loc199_57.2 (constants.%return.param_patt.439)] +// CHECK:STDOUT: %return.patt.loc199_41.1: @SelfNested.WithSelf.F.%pattern_type.loc199_57 (%pattern_type.2ab) = return_slot_pattern %return.param_patt.loc199_57.1, %array_type.loc199_57.2 [symbolic = %return.patt.loc199_41.2 (constants.%return.patt.869)] // CHECK:STDOUT: } { -// CHECK:STDOUT: %Self.ref.loc211_50: %SelfNested.type = name_ref Self, @SelfNested.%Self [symbolic = %Self (constants.%Self.e81)] +// CHECK:STDOUT: %Self.ref.loc199_50: %SelfNested.type = name_ref Self, @SelfNested.%Self [symbolic = %Self (constants.%Self.e81)] // CHECK:STDOUT: %int_4: Core.IntLiteral = int_value 4 [concrete = constants.%int_4] -// CHECK:STDOUT: %Self.as_type.loc211_50: type = facet_access_type %Self.ref.loc211_50 [symbolic = %Self.as_type.loc211_16.1 (constants.%Self.as_type.8ab)] -// CHECK:STDOUT: %.loc211_50: type = converted %Self.ref.loc211_50, %Self.as_type.loc211_50 [symbolic = %Self.as_type.loc211_16.1 (constants.%Self.as_type.8ab)] -// CHECK:STDOUT: %array_type.loc211_57.2: type = array_type %int_4, %.loc211_50 [symbolic = %array_type.loc211_57.1 (constants.%array_type.4e4)] -// CHECK:STDOUT: %.loc211_57.2: Core.Form = init_form %array_type.loc211_57.2 [symbolic = %.loc211_57.1 (constants.%.f45)] +// CHECK:STDOUT: %Self.as_type.loc199_50: type = facet_access_type %Self.ref.loc199_50 [symbolic = %Self.as_type.loc199_16.1 (constants.%Self.as_type.8ab)] +// CHECK:STDOUT: %.loc199_50: type = converted %Self.ref.loc199_50, %Self.as_type.loc199_50 [symbolic = %Self.as_type.loc199_16.1 (constants.%Self.as_type.8ab)] +// CHECK:STDOUT: %array_type.loc199_57.2: type = array_type %int_4, %.loc199_50 [symbolic = %array_type.loc199_57.1 (constants.%array_type.4e4)] +// CHECK:STDOUT: %.loc199_57.2: Core.Form = init_form %array_type.loc199_57.2 [symbolic = %.loc199_57.1 (constants.%.f45)] // CHECK:STDOUT: %x.param: @SelfNested.WithSelf.F.%tuple.type (%tuple.type.c49) = value_param call_param0 -// CHECK:STDOUT: %.loc211_38.1: type = splice_block %.loc211_38.3 [symbolic = %tuple.type (constants.%tuple.type.c49)] { -// CHECK:STDOUT: %Self.ref.loc211_12: %SelfNested.type = name_ref Self, @SelfNested.%Self [symbolic = %Self (constants.%Self.e81)] -// CHECK:STDOUT: %Self.as_type.loc211_16.2: type = facet_access_type %Self.ref.loc211_12 [symbolic = %Self.as_type.loc211_16.1 (constants.%Self.as_type.8ab)] -// CHECK:STDOUT: %.loc211_16: type = converted %Self.ref.loc211_12, %Self.as_type.loc211_16.2 [symbolic = %Self.as_type.loc211_16.1 (constants.%Self.as_type.8ab)] -// CHECK:STDOUT: %ptr.loc211_16.2: type = ptr_type %.loc211_16 [symbolic = %ptr.loc211_16.1 (constants.%ptr.a16)] -// CHECK:STDOUT: %Self.ref.loc211_24: %SelfNested.type = name_ref Self, @SelfNested.%Self [symbolic = %Self (constants.%Self.e81)] -// CHECK:STDOUT: %Self.as_type.loc211_24: type = facet_access_type %Self.ref.loc211_24 [symbolic = %Self.as_type.loc211_16.1 (constants.%Self.as_type.8ab)] -// CHECK:STDOUT: %.loc211_24: type = converted %Self.ref.loc211_24, %Self.as_type.loc211_24 [symbolic = %Self.as_type.loc211_16.1 (constants.%Self.as_type.8ab)] +// CHECK:STDOUT: %.loc199_38.1: type = splice_block %.loc199_38.3 [symbolic = %tuple.type (constants.%tuple.type.c49)] { +// CHECK:STDOUT: %Self.ref.loc199_12: %SelfNested.type = name_ref Self, @SelfNested.%Self [symbolic = %Self (constants.%Self.e81)] +// CHECK:STDOUT: %Self.as_type.loc199_16.2: type = facet_access_type %Self.ref.loc199_12 [symbolic = %Self.as_type.loc199_16.1 (constants.%Self.as_type.8ab)] +// CHECK:STDOUT: %.loc199_16: type = converted %Self.ref.loc199_12, %Self.as_type.loc199_16.2 [symbolic = %Self.as_type.loc199_16.1 (constants.%Self.as_type.8ab)] +// CHECK:STDOUT: %ptr.loc199_16.2: type = ptr_type %.loc199_16 [symbolic = %ptr.loc199_16.1 (constants.%ptr.a16)] +// CHECK:STDOUT: %Self.ref.loc199_24: %SelfNested.type = name_ref Self, @SelfNested.%Self [symbolic = %Self (constants.%Self.e81)] +// CHECK:STDOUT: %Self.as_type.loc199_24: type = facet_access_type %Self.ref.loc199_24 [symbolic = %Self.as_type.loc199_16.1 (constants.%Self.as_type.8ab)] +// CHECK:STDOUT: %.loc199_24: type = converted %Self.ref.loc199_24, %Self.as_type.loc199_24 [symbolic = %Self.as_type.loc199_16.1 (constants.%Self.as_type.8ab)] // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] -// CHECK:STDOUT: %struct_type.x.y.loc211_37.2: type = struct_type {.x: @SelfNested.WithSelf.F.%Self.as_type.loc211_16.1 (%Self.as_type.8ab), .y: %i32} [symbolic = %struct_type.x.y.loc211_37.1 (constants.%struct_type.x.y.4c5)] -// CHECK:STDOUT: %.loc211_38.2: %tuple.type.24b = tuple_literal (%ptr.loc211_16.2, %struct_type.x.y.loc211_37.2) [symbolic = %tuple (constants.%tuple.b6a)] -// CHECK:STDOUT: %.loc211_38.3: type = converted %.loc211_38.2, constants.%tuple.type.c49 [symbolic = %tuple.type (constants.%tuple.type.c49)] +// CHECK:STDOUT: %struct_type.x.y.loc199_37.2: type = struct_type {.x: @SelfNested.WithSelf.F.%Self.as_type.loc199_16.1 (%Self.as_type.8ab), .y: %i32} [symbolic = %struct_type.x.y.loc199_37.1 (constants.%struct_type.x.y.4c5)] +// CHECK:STDOUT: %.loc199_38.2: %tuple.type.24b = tuple_literal (%ptr.loc199_16.2, %struct_type.x.y.loc199_37.2) [symbolic = %tuple (constants.%tuple.b6a)] +// CHECK:STDOUT: %.loc199_38.3: type = converted %.loc199_38.2, constants.%tuple.type.c49 [symbolic = %tuple.type (constants.%tuple.type.c49)] // CHECK:STDOUT: } // CHECK:STDOUT: %x: @SelfNested.WithSelf.F.%tuple.type (%tuple.type.c49) = value_binding x, %x.param -// CHECK:STDOUT: %return.param: ref @SelfNested.WithSelf.F.%array_type.loc211_57.1 (%array_type.4e4) = out_param call_param1 -// CHECK:STDOUT: %return: ref @SelfNested.WithSelf.F.%array_type.loc211_57.1 (%array_type.4e4) = return_slot %return.param +// CHECK:STDOUT: %return.param: ref @SelfNested.WithSelf.F.%array_type.loc199_57.1 (%array_type.4e4) = out_param call_param1 +// CHECK:STDOUT: %return: ref @SelfNested.WithSelf.F.%array_type.loc199_57.1 (%array_type.4e4) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %assoc0: %SelfNested.assoc_type = assoc_entity element0, %SelfNested.WithSelf.F.decl [concrete = constants.%assoc0.219] // CHECK:STDOUT: @@ -616,8 +651,8 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: // CHECK:STDOUT: impl @FExtraParam.as.I.impl: %Self.ref as %I.ref { // CHECK:STDOUT: %FExtraParam.as.I.impl.F.decl.loc69_18.1: %FExtraParam.as.I.impl.F.type.ec7b0b.1 = fn_decl @FExtraParam.as.I.impl.F.loc69_18.1 [concrete = constants.%FExtraParam.as.I.impl.F.ef9801.1] { -// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete = constants.%b.param_patt.792] +// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt.4e2] // CHECK:STDOUT: } { // CHECK:STDOUT: %b.param: bool = value_param call_param0 // CHECK:STDOUT: %.loc69: type = type_literal bool [concrete = bool] @@ -635,8 +670,8 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: // CHECK:STDOUT: impl @FExtraImplicitParam.as.I.impl: %Self.ref as %I.ref { // CHECK:STDOUT: %FExtraImplicitParam.as.I.impl.F.decl.loc85_15.1: %FExtraImplicitParam.as.I.impl.F.type.54cac2.1 = fn_decl @FExtraImplicitParam.as.I.impl.F.loc85_15.1 [concrete = constants.%FExtraImplicitParam.as.I.impl.F.a42f35.1] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.54d = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.54d = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.54d = value_param_pattern [concrete = constants.%self.param_patt.f41] +// CHECK:STDOUT: %self.patt: %pattern_type.54d = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.3d5] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %FExtraImplicitParam = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FExtraImplicitParam [concrete = constants.%FExtraImplicitParam] @@ -654,8 +689,8 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: // CHECK:STDOUT: impl @FExtraReturnType.as.I.impl: %Self.ref as %I.ref { // CHECK:STDOUT: %FExtraReturnType.as.I.impl.F.decl: %FExtraReturnType.as.I.impl.F.type = fn_decl @FExtraReturnType.as.I.impl.F [concrete = constants.%FExtraReturnType.as.I.impl.F] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc99_15.1 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete = constants.%return.param_patt.5a1] +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc99_15.1 [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc99_15.1: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc99_15.2: Core.Form = init_form %.loc99_15.1 [concrete = constants.%.f34] @@ -673,10 +708,10 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: // CHECK:STDOUT: impl @FMissingParam.as.J.impl: %Self.ref as %J.ref { // CHECK:STDOUT: %FMissingParam.as.J.impl.F.decl.loc117_29.1: %FMissingParam.as.J.impl.F.type.aad6ec.1 = fn_decl @FMissingParam.as.J.impl.F.loc117_29.1 [concrete = constants.%FMissingParam.as.J.impl.F.dd09dc.1] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.831 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.831 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc117_25.1 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.831 = value_param_pattern [concrete = constants.%self.param_patt.210] +// CHECK:STDOUT: %self.patt: %pattern_type.831 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.f7d] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete = constants.%return.param_patt.5a1] +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc117_25.1 [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc117_25.1: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc117_25.2: Core.Form = init_form %.loc117_25.1 [concrete = constants.%.f34] @@ -687,14 +722,13 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %.loc103_44.1: type = specific_constant @J.WithSelf.F.%.loc103_44.1, @J.WithSelf.F(constants.%J.facet.d77) [concrete = bool] -// CHECK:STDOUT: %.loc103_44.2: type = specific_constant @J.WithSelf.F.%.loc103_44.2, @J.WithSelf.F(constants.%J.facet.d77) [concrete = constants.%.f34] +// CHECK:STDOUT: %.loc103_44.2: Core.Form = specific_constant @J.WithSelf.F.%.loc103_44.2, @J.WithSelf.F(constants.%J.facet.d77) [concrete = constants.%.f34] // CHECK:STDOUT: %FMissingParam.as.J.impl.F.decl.loc117_29.2: %FMissingParam.as.J.impl.F.type.aad6ec.2 = fn_decl @FMissingParam.as.J.impl.F.loc117_29.2 [concrete = constants.%FMissingParam.as.J.impl.F.dd09dc.2] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.831 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.831 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, invalid [concrete] +// CHECK:STDOUT: %.1: %pattern_type.831 = specific_constant constants.%self.param_patt.210, @J.WithSelf.F(constants.%J.facet.d77) [concrete = constants.%self.param_patt.210] +// CHECK:STDOUT: %self.patt: %pattern_type.831 = at_binding_pattern self, %.1 [concrete = constants.%self.patt.f7d] +// CHECK:STDOUT: %.2: %pattern_type.831 = specific_constant constants.%b.param_patt.792, @J.WithSelf.F(constants.%J.facet.d77) [concrete = constants.%b.param_patt.792] +// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %.2 [concrete = constants.%b.patt.4e2] +// CHECK:STDOUT: %.3: %pattern_type.831 = specific_constant constants.%return.patt.c0c, @J.WithSelf.F(constants.%J.facet.d77) [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: bool = value_param call_param0 // CHECK:STDOUT: %self: bool = value_binding self, %self.param @@ -714,10 +748,10 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: // CHECK:STDOUT: impl @FMissingImplicitParam.as.J.impl: %Self.ref as %J.ref { // CHECK:STDOUT: %FMissingImplicitParam.as.J.impl.F.decl.loc130_26.1: %FMissingImplicitParam.as.J.impl.F.type.f666a8.1 = fn_decl @FMissingImplicitParam.as.J.impl.F.loc130_26.1 [concrete = constants.%FMissingImplicitParam.as.J.impl.F.620ed1.1] { -// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc130_22.1 [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete = constants.%b.param_patt.792] +// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt.4e2] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete = constants.%return.param_patt.5a1] +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc130_22.1 [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc130_22.1: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc130_22.2: Core.Form = init_form %.loc130_22.1 [concrete = constants.%.f34] @@ -728,14 +762,13 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %.loc103_44.1: type = specific_constant @J.WithSelf.F.%.loc103_44.1, @J.WithSelf.F(constants.%J.facet.3f0) [concrete = bool] -// CHECK:STDOUT: %.loc103_44.2: type = specific_constant @J.WithSelf.F.%.loc103_44.2, @J.WithSelf.F(constants.%J.facet.3f0) [concrete = constants.%.f34] +// CHECK:STDOUT: %.loc103_44.2: Core.Form = specific_constant @J.WithSelf.F.%.loc103_44.2, @J.WithSelf.F(constants.%J.facet.3f0) [concrete = constants.%.f34] // CHECK:STDOUT: %FMissingImplicitParam.as.J.impl.F.decl.loc130_26.2: %FMissingImplicitParam.as.J.impl.F.type.f666a8.2 = fn_decl @FMissingImplicitParam.as.J.impl.F.loc130_26.2 [concrete = constants.%FMissingImplicitParam.as.J.impl.F.620ed1.2] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.831 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.831 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, invalid [concrete] +// CHECK:STDOUT: %.1: %pattern_type.831 = specific_constant constants.%self.param_patt.210, @J.WithSelf.F(constants.%J.facet.3f0) [concrete = constants.%self.param_patt.210] +// CHECK:STDOUT: %self.patt: %pattern_type.831 = at_binding_pattern self, %.1 [concrete = constants.%self.patt.f7d] +// CHECK:STDOUT: %.2: %pattern_type.831 = specific_constant constants.%b.param_patt.792, @J.WithSelf.F(constants.%J.facet.3f0) [concrete = constants.%b.param_patt.792] +// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %.2 [concrete = constants.%b.patt.4e2] +// CHECK:STDOUT: %.3: %pattern_type.831 = specific_constant constants.%return.patt.c0c, @J.WithSelf.F(constants.%J.facet.3f0) [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: bool = value_param call_param0 // CHECK:STDOUT: %self: bool = value_binding self, %self.param @@ -754,28 +787,27 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @FMissingReturnType.as.J.impl: %Self.ref as %J.ref { -// CHECK:STDOUT: %FMissingReturnType.as.J.impl.F.decl.loc152_30.1: %FMissingReturnType.as.J.impl.F.type.9cd56a.1 = fn_decl @FMissingReturnType.as.J.impl.F.loc152_30.1 [concrete = constants.%FMissingReturnType.as.J.impl.F.6975be.1] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.831 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.831 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete] +// CHECK:STDOUT: %FMissingReturnType.as.J.impl.F.decl.loc148_30.1: %FMissingReturnType.as.J.impl.F.type.9cd56a.1 = fn_decl @FMissingReturnType.as.J.impl.F.loc148_30.1 [concrete = constants.%FMissingReturnType.as.J.impl.F.6975be.1] { +// CHECK:STDOUT: %self.param_patt: %pattern_type.831 = value_param_pattern [concrete = constants.%self.param_patt.210] +// CHECK:STDOUT: %self.patt: %pattern_type.831 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.f7d] +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete = constants.%b.param_patt.792] +// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt.4e2] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: bool = value_param call_param0 -// CHECK:STDOUT: %.loc152_16: type = type_literal bool [concrete = bool] +// CHECK:STDOUT: %.loc148_16: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %self: bool = value_binding self, %self.param // CHECK:STDOUT: %b.param: bool = value_param call_param1 -// CHECK:STDOUT: %.loc152_25: type = type_literal bool [concrete = bool] +// CHECK:STDOUT: %.loc148_25: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %b: bool = value_binding b, %b.param // CHECK:STDOUT: } // CHECK:STDOUT: %.loc103_44.1: type = specific_constant @J.WithSelf.F.%.loc103_44.1, @J.WithSelf.F(constants.%J.facet.c42) [concrete = bool] -// CHECK:STDOUT: %.loc103_44.2: type = specific_constant @J.WithSelf.F.%.loc103_44.2, @J.WithSelf.F(constants.%J.facet.c42) [concrete = constants.%.f34] -// CHECK:STDOUT: %FMissingReturnType.as.J.impl.F.decl.loc152_30.2: %FMissingReturnType.as.J.impl.F.type.9cd56a.2 = fn_decl @FMissingReturnType.as.J.impl.F.loc152_30.2 [concrete = constants.%FMissingReturnType.as.J.impl.F.6975be.2] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.831 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.831 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, invalid [concrete] +// CHECK:STDOUT: %.loc103_44.2: Core.Form = specific_constant @J.WithSelf.F.%.loc103_44.2, @J.WithSelf.F(constants.%J.facet.c42) [concrete = constants.%.f34] +// CHECK:STDOUT: %FMissingReturnType.as.J.impl.F.decl.loc148_30.2: %FMissingReturnType.as.J.impl.F.type.9cd56a.2 = fn_decl @FMissingReturnType.as.J.impl.F.loc148_30.2 [concrete = constants.%FMissingReturnType.as.J.impl.F.6975be.2] { +// CHECK:STDOUT: %.1: %pattern_type.831 = specific_constant constants.%self.param_patt.210, @J.WithSelf.F(constants.%J.facet.c42) [concrete = constants.%self.param_patt.210] +// CHECK:STDOUT: %self.patt: %pattern_type.831 = at_binding_pattern self, %.1 [concrete = constants.%self.patt.f7d] +// CHECK:STDOUT: %.2: %pattern_type.831 = specific_constant constants.%b.param_patt.792, @J.WithSelf.F(constants.%J.facet.c42) [concrete = constants.%b.param_patt.792] +// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %.2 [concrete = constants.%b.patt.4e2] +// CHECK:STDOUT: %.3: %pattern_type.831 = specific_constant constants.%return.patt.c0c, @J.WithSelf.F(constants.%J.facet.c42) [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: bool = value_param call_param0 // CHECK:STDOUT: %self: bool = value_binding self, %self.param @@ -784,28 +816,28 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: %return.param: ref bool = out_param call_param2 // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } -// CHECK:STDOUT: %J.impl_witness_table = impl_witness_table (%FMissingReturnType.as.J.impl.F.decl.loc152_30.2), @FMissingReturnType.as.J.impl [concrete] +// CHECK:STDOUT: %J.impl_witness_table = impl_witness_table (%FMissingReturnType.as.J.impl.F.decl.loc148_30.2), @FMissingReturnType.as.J.impl [concrete] // CHECK:STDOUT: %J.impl_witness: = impl_witness %J.impl_witness_table [concrete = constants.%J.impl_witness.05c] // CHECK:STDOUT: // CHECK:STDOUT: !members: -// CHECK:STDOUT: .F = %FMissingReturnType.as.J.impl.F.decl.loc152_30.1 +// CHECK:STDOUT: .F = %FMissingReturnType.as.J.impl.F.decl.loc148_30.1 // CHECK:STDOUT: extend %J.ref // CHECK:STDOUT: witness = %J.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @FDifferentParamType.as.J.impl: %Self.ref as %J.ref { -// CHECK:STDOUT: %FDifferentParamType.as.J.impl.F.decl.loc171_38.1: %FDifferentParamType.as.J.impl.F.type.4a2e9b.1 = fn_decl @FDifferentParamType.as.J.impl.F.loc171_38.1 [concrete = constants.%FDifferentParamType.as.J.impl.F.28602a.1] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.831 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.831 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.5d3 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.5d3 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc171_34.1 [concrete] +// CHECK:STDOUT: %FDifferentParamType.as.J.impl.F.decl.loc163_38.1: %FDifferentParamType.as.J.impl.F.type.4a2e9b.1 = fn_decl @FDifferentParamType.as.J.impl.F.loc163_38.1 [concrete = constants.%FDifferentParamType.as.J.impl.F.28602a.1] { +// CHECK:STDOUT: %self.param_patt: %pattern_type.831 = value_param_pattern [concrete = constants.%self.param_patt.210] +// CHECK:STDOUT: %self.patt: %pattern_type.831 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.f7d] +// CHECK:STDOUT: %b.param_patt: %pattern_type.5d3 = value_param_pattern [concrete = constants.%b.param_patt.0a8] +// CHECK:STDOUT: %b.patt: %pattern_type.5d3 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt.05d] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete = constants.%return.param_patt.5a1] +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc163_34.1 [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { -// CHECK:STDOUT: %.loc171_34.1: type = type_literal bool [concrete = bool] -// CHECK:STDOUT: %.loc171_34.2: Core.Form = init_form %.loc171_34.1 [concrete = constants.%.f34] +// CHECK:STDOUT: %.loc163_34.1: type = type_literal bool [concrete = bool] +// CHECK:STDOUT: %.loc163_34.2: Core.Form = init_form %.loc163_34.1 [concrete = constants.%.f34] // CHECK:STDOUT: %self.param: bool = value_param call_param0 -// CHECK:STDOUT: %.loc171_16: type = type_literal bool [concrete = bool] +// CHECK:STDOUT: %.loc163_16: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %self: bool = value_binding self, %self.param // CHECK:STDOUT: %b.param: %FDifferentParamType = value_param call_param1 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FDifferentParamType [concrete = constants.%FDifferentParamType] @@ -814,14 +846,13 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %.loc103_44.1: type = specific_constant @J.WithSelf.F.%.loc103_44.1, @J.WithSelf.F(constants.%J.facet.47a) [concrete = bool] -// CHECK:STDOUT: %.loc103_44.2: type = specific_constant @J.WithSelf.F.%.loc103_44.2, @J.WithSelf.F(constants.%J.facet.47a) [concrete = constants.%.f34] -// CHECK:STDOUT: %FDifferentParamType.as.J.impl.F.decl.loc171_38.2: %FDifferentParamType.as.J.impl.F.type.4a2e9b.2 = fn_decl @FDifferentParamType.as.J.impl.F.loc171_38.2 [concrete = constants.%FDifferentParamType.as.J.impl.F.28602a.2] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.831 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.831 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, invalid [concrete] +// CHECK:STDOUT: %.loc103_44.2: Core.Form = specific_constant @J.WithSelf.F.%.loc103_44.2, @J.WithSelf.F(constants.%J.facet.47a) [concrete = constants.%.f34] +// CHECK:STDOUT: %FDifferentParamType.as.J.impl.F.decl.loc163_38.2: %FDifferentParamType.as.J.impl.F.type.4a2e9b.2 = fn_decl @FDifferentParamType.as.J.impl.F.loc163_38.2 [concrete = constants.%FDifferentParamType.as.J.impl.F.28602a.2] { +// CHECK:STDOUT: %.1: %pattern_type.831 = specific_constant constants.%self.param_patt.210, @J.WithSelf.F(constants.%J.facet.47a) [concrete = constants.%self.param_patt.210] +// CHECK:STDOUT: %self.patt: %pattern_type.831 = at_binding_pattern self, %.1 [concrete = constants.%self.patt.f7d] +// CHECK:STDOUT: %.2: %pattern_type.831 = specific_constant constants.%b.param_patt.792, @J.WithSelf.F(constants.%J.facet.47a) [concrete = constants.%b.param_patt.792] +// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %.2 [concrete = constants.%b.patt.4e2] +// CHECK:STDOUT: %.3: %pattern_type.831 = specific_constant constants.%return.patt.c0c, @J.WithSelf.F(constants.%J.facet.47a) [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: bool = value_param call_param0 // CHECK:STDOUT: %self: bool = value_binding self, %self.param @@ -830,44 +861,43 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: %return.param: ref bool = out_param call_param2 // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } -// CHECK:STDOUT: %J.impl_witness_table = impl_witness_table (%FDifferentParamType.as.J.impl.F.decl.loc171_38.2), @FDifferentParamType.as.J.impl [concrete] +// CHECK:STDOUT: %J.impl_witness_table = impl_witness_table (%FDifferentParamType.as.J.impl.F.decl.loc163_38.2), @FDifferentParamType.as.J.impl [concrete] // CHECK:STDOUT: %J.impl_witness: = impl_witness %J.impl_witness_table [concrete = constants.%J.impl_witness.553] // CHECK:STDOUT: // CHECK:STDOUT: !members: -// CHECK:STDOUT: .F = %FDifferentParamType.as.J.impl.F.decl.loc171_38.1 +// CHECK:STDOUT: .F = %FDifferentParamType.as.J.impl.F.decl.loc163_38.1 // CHECK:STDOUT: extend %J.ref // CHECK:STDOUT: witness = %J.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @FDifferentImplicitParamType.as.J.impl: %Self.ref as %J.ref { -// CHECK:STDOUT: %FDifferentImplicitParamType.as.J.impl.F.decl.loc184_32.1: %FDifferentImplicitParamType.as.J.impl.F.type.6ef8a6.1 = fn_decl @FDifferentImplicitParamType.as.J.impl.F.loc184_32.1 [concrete = constants.%FDifferentImplicitParamType.as.J.impl.F.792c78.1] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.1bc = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.1bc = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc184_28.1 [concrete] +// CHECK:STDOUT: %FDifferentImplicitParamType.as.J.impl.F.decl.loc176_32.1: %FDifferentImplicitParamType.as.J.impl.F.type.6ef8a6.1 = fn_decl @FDifferentImplicitParamType.as.J.impl.F.loc176_32.1 [concrete = constants.%FDifferentImplicitParamType.as.J.impl.F.792c78.1] { +// CHECK:STDOUT: %self.param_patt: %pattern_type.1bc = value_param_pattern [concrete = constants.%self.param_patt.ea6] +// CHECK:STDOUT: %self.patt: %pattern_type.1bc = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.a07] +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete = constants.%b.param_patt.792] +// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt.4e2] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete = constants.%return.param_patt.5a1] +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc176_28.1 [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { -// CHECK:STDOUT: %.loc184_28.1: type = type_literal bool [concrete = bool] -// CHECK:STDOUT: %.loc184_28.2: Core.Form = init_form %.loc184_28.1 [concrete = constants.%.f34] +// CHECK:STDOUT: %.loc176_28.1: type = type_literal bool [concrete = bool] +// CHECK:STDOUT: %.loc176_28.2: Core.Form = init_form %.loc176_28.1 [concrete = constants.%.f34] // CHECK:STDOUT: %self.param: %FDifferentImplicitParamType = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FDifferentImplicitParamType [concrete = constants.%FDifferentImplicitParamType] // CHECK:STDOUT: %self: %FDifferentImplicitParamType = value_binding self, %self.param // CHECK:STDOUT: %b.param: bool = value_param call_param1 -// CHECK:STDOUT: %.loc184_19: type = type_literal bool [concrete = bool] +// CHECK:STDOUT: %.loc176_19: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %b: bool = value_binding b, %b.param // CHECK:STDOUT: %return.param: ref bool = out_param call_param2 // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %.loc103_44.1: type = specific_constant @J.WithSelf.F.%.loc103_44.1, @J.WithSelf.F(constants.%J.facet.929) [concrete = bool] -// CHECK:STDOUT: %.loc103_44.2: type = specific_constant @J.WithSelf.F.%.loc103_44.2, @J.WithSelf.F(constants.%J.facet.929) [concrete = constants.%.f34] -// CHECK:STDOUT: %FDifferentImplicitParamType.as.J.impl.F.decl.loc184_32.2: %FDifferentImplicitParamType.as.J.impl.F.type.6ef8a6.2 = fn_decl @FDifferentImplicitParamType.as.J.impl.F.loc184_32.2 [concrete = constants.%FDifferentImplicitParamType.as.J.impl.F.792c78.2] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.831 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.831 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, invalid [concrete] +// CHECK:STDOUT: %.loc103_44.2: Core.Form = specific_constant @J.WithSelf.F.%.loc103_44.2, @J.WithSelf.F(constants.%J.facet.929) [concrete = constants.%.f34] +// CHECK:STDOUT: %FDifferentImplicitParamType.as.J.impl.F.decl.loc176_32.2: %FDifferentImplicitParamType.as.J.impl.F.type.6ef8a6.2 = fn_decl @FDifferentImplicitParamType.as.J.impl.F.loc176_32.2 [concrete = constants.%FDifferentImplicitParamType.as.J.impl.F.792c78.2] { +// CHECK:STDOUT: %.1: %pattern_type.831 = specific_constant constants.%self.param_patt.210, @J.WithSelf.F(constants.%J.facet.929) [concrete = constants.%self.param_patt.210] +// CHECK:STDOUT: %self.patt: %pattern_type.831 = at_binding_pattern self, %.1 [concrete = constants.%self.patt.f7d] +// CHECK:STDOUT: %.2: %pattern_type.831 = specific_constant constants.%b.param_patt.792, @J.WithSelf.F(constants.%J.facet.929) [concrete = constants.%b.param_patt.792] +// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %.2 [concrete = constants.%b.patt.4e2] +// CHECK:STDOUT: %.3: %pattern_type.831 = specific_constant constants.%return.patt.c0c, @J.WithSelf.F(constants.%J.facet.929) [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: bool = value_param call_param0 // CHECK:STDOUT: %self: bool = value_binding self, %self.param @@ -876,44 +906,43 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: %return.param: ref bool = out_param call_param2 // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } -// CHECK:STDOUT: %J.impl_witness_table = impl_witness_table (%FDifferentImplicitParamType.as.J.impl.F.decl.loc184_32.2), @FDifferentImplicitParamType.as.J.impl [concrete] +// CHECK:STDOUT: %J.impl_witness_table = impl_witness_table (%FDifferentImplicitParamType.as.J.impl.F.decl.loc176_32.2), @FDifferentImplicitParamType.as.J.impl [concrete] // CHECK:STDOUT: %J.impl_witness: = impl_witness %J.impl_witness_table [concrete = constants.%J.impl_witness.cc3] // CHECK:STDOUT: // CHECK:STDOUT: !members: -// CHECK:STDOUT: .F = %FDifferentImplicitParamType.as.J.impl.F.decl.loc184_32.1 +// CHECK:STDOUT: .F = %FDifferentImplicitParamType.as.J.impl.F.decl.loc176_32.1 // CHECK:STDOUT: extend %J.ref // CHECK:STDOUT: witness = %J.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @FDifferentReturnType.as.J.impl: %Self.ref as %J.ref { -// CHECK:STDOUT: %FDifferentReturnType.as.J.impl.F.decl.loc200_38.1: %FDifferentReturnType.as.J.impl.F.type.ff55f4.1 = fn_decl @FDifferentReturnType.as.J.impl.F.loc200_38.1 [concrete = constants.%FDifferentReturnType.as.J.impl.F.9725a5.1] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.831 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.831 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.b9f = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.b9f = return_slot_pattern %return.param_patt, %Self.ref [concrete] +// CHECK:STDOUT: %FDifferentReturnType.as.J.impl.F.decl.loc194_38.1: %FDifferentReturnType.as.J.impl.F.type.ff55f4.1 = fn_decl @FDifferentReturnType.as.J.impl.F.loc194_38.1 [concrete = constants.%FDifferentReturnType.as.J.impl.F.9725a5.1] { +// CHECK:STDOUT: %self.param_patt: %pattern_type.831 = value_param_pattern [concrete = constants.%self.param_patt.210] +// CHECK:STDOUT: %self.patt: %pattern_type.831 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.f7d] +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete = constants.%b.param_patt.792] +// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt.4e2] +// CHECK:STDOUT: %return.param_patt: %pattern_type.b9f = out_param_pattern [concrete = constants.%return.param_patt.f37] +// CHECK:STDOUT: %return.patt: %pattern_type.b9f = return_slot_pattern %return.param_patt, %Self.ref [concrete = constants.%return.patt.e4f] // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FDifferentReturnType [concrete = constants.%FDifferentReturnType] -// CHECK:STDOUT: %.loc200_34: Core.Form = init_form %Self.ref [concrete = constants.%.1f5] +// CHECK:STDOUT: %.loc194_34: Core.Form = init_form %Self.ref [concrete = constants.%.1f5] // CHECK:STDOUT: %self.param: bool = value_param call_param0 -// CHECK:STDOUT: %.loc200_16: type = type_literal bool [concrete = bool] +// CHECK:STDOUT: %.loc194_16: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %self: bool = value_binding self, %self.param // CHECK:STDOUT: %b.param: bool = value_param call_param1 -// CHECK:STDOUT: %.loc200_25: type = type_literal bool [concrete = bool] +// CHECK:STDOUT: %.loc194_25: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %b: bool = value_binding b, %b.param // CHECK:STDOUT: %return.param: ref %FDifferentReturnType = out_param call_param2 // CHECK:STDOUT: %return: ref %FDifferentReturnType = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %.loc103_44.1: type = specific_constant @J.WithSelf.F.%.loc103_44.1, @J.WithSelf.F(constants.%J.facet.b85) [concrete = bool] -// CHECK:STDOUT: %.loc103_44.2: type = specific_constant @J.WithSelf.F.%.loc103_44.2, @J.WithSelf.F(constants.%J.facet.b85) [concrete = constants.%.f34] -// CHECK:STDOUT: %FDifferentReturnType.as.J.impl.F.decl.loc200_38.2: %FDifferentReturnType.as.J.impl.F.type.ff55f4.2 = fn_decl @FDifferentReturnType.as.J.impl.F.loc200_38.2 [concrete = constants.%FDifferentReturnType.as.J.impl.F.9725a5.2] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.831 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.831 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, invalid [concrete] +// CHECK:STDOUT: %.loc103_44.2: Core.Form = specific_constant @J.WithSelf.F.%.loc103_44.2, @J.WithSelf.F(constants.%J.facet.b85) [concrete = constants.%.f34] +// CHECK:STDOUT: %FDifferentReturnType.as.J.impl.F.decl.loc194_38.2: %FDifferentReturnType.as.J.impl.F.type.ff55f4.2 = fn_decl @FDifferentReturnType.as.J.impl.F.loc194_38.2 [concrete = constants.%FDifferentReturnType.as.J.impl.F.9725a5.2] { +// CHECK:STDOUT: %.1: %pattern_type.831 = specific_constant constants.%self.param_patt.210, @J.WithSelf.F(constants.%J.facet.b85) [concrete = constants.%self.param_patt.210] +// CHECK:STDOUT: %self.patt: %pattern_type.831 = at_binding_pattern self, %.1 [concrete = constants.%self.patt.f7d] +// CHECK:STDOUT: %.2: %pattern_type.831 = specific_constant constants.%b.param_patt.792, @J.WithSelf.F(constants.%J.facet.b85) [concrete = constants.%b.param_patt.792] +// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %.2 [concrete = constants.%b.patt.4e2] +// CHECK:STDOUT: %.3: %pattern_type.831 = specific_constant constants.%return.patt.c0c, @J.WithSelf.F(constants.%J.facet.b85) [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: bool = value_param call_param0 // CHECK:STDOUT: %self: bool = value_binding self, %self.param @@ -922,108 +951,106 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: %return.param: ref bool = out_param call_param2 // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } -// CHECK:STDOUT: %J.impl_witness_table = impl_witness_table (%FDifferentReturnType.as.J.impl.F.decl.loc200_38.2), @FDifferentReturnType.as.J.impl [concrete] +// CHECK:STDOUT: %J.impl_witness_table = impl_witness_table (%FDifferentReturnType.as.J.impl.F.decl.loc194_38.2), @FDifferentReturnType.as.J.impl [concrete] // CHECK:STDOUT: %J.impl_witness: = impl_witness %J.impl_witness_table [concrete = constants.%J.impl_witness.6ab] // CHECK:STDOUT: // CHECK:STDOUT: !members: -// CHECK:STDOUT: .F = %FDifferentReturnType.as.J.impl.F.decl.loc200_38.1 +// CHECK:STDOUT: .F = %FDifferentReturnType.as.J.impl.F.decl.loc194_38.1 // CHECK:STDOUT: extend %J.ref // CHECK:STDOUT: witness = %J.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @SelfNestedBadParam.as.SelfNested.impl: %Self.ref as %SelfNested.ref { -// CHECK:STDOUT: %SelfNestedBadParam.as.SelfNested.impl.F.decl.loc223_87.1: %SelfNestedBadParam.as.SelfNested.impl.F.type.4325e7.1 = fn_decl @SelfNestedBadParam.as.SelfNested.impl.F.loc223_87.1 [concrete = constants.%SelfNestedBadParam.as.SelfNested.impl.F.5fd896.1] { -// CHECK:STDOUT: %x.param_patt: %pattern_type.a68 = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.a68 = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.3a0 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.3a0 = return_slot_pattern %return.param_patt, %array_type [concrete] +// CHECK:STDOUT: %SelfNestedBadParam.as.SelfNested.impl.F.decl.loc211_87.1: %SelfNestedBadParam.as.SelfNested.impl.F.type.4325e7.1 = fn_decl @SelfNestedBadParam.as.SelfNested.impl.F.loc211_87.1 [concrete = constants.%SelfNestedBadParam.as.SelfNested.impl.F.5fd896.1] { +// CHECK:STDOUT: %x.param_patt: %pattern_type.a68 = value_param_pattern [concrete = constants.%x.param_patt.140] +// CHECK:STDOUT: %x.patt: %pattern_type.a68 = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt.19e] +// CHECK:STDOUT: %return.param_patt: %pattern_type.3a0 = out_param_pattern [concrete = constants.%return.param_patt.489] +// CHECK:STDOUT: %return.patt: %pattern_type.3a0 = return_slot_pattern %return.param_patt, %array_type [concrete = constants.%return.patt.98a] // CHECK:STDOUT: } { -// CHECK:STDOUT: %SelfNestedBadParam.ref.loc223_65: type = name_ref SelfNestedBadParam, file.%SelfNestedBadParam.decl [concrete = constants.%SelfNestedBadParam] +// CHECK:STDOUT: %SelfNestedBadParam.ref.loc211_65: type = name_ref SelfNestedBadParam, file.%SelfNestedBadParam.decl [concrete = constants.%SelfNestedBadParam] // CHECK:STDOUT: %int_4: Core.IntLiteral = int_value 4 [concrete = constants.%int_4] -// CHECK:STDOUT: %array_type: type = array_type %int_4, %SelfNestedBadParam.ref.loc223_65 [concrete = constants.%array_type.291] -// CHECK:STDOUT: %.loc223_86: Core.Form = init_form %array_type [concrete = constants.%.cc2] +// CHECK:STDOUT: %array_type: type = array_type %int_4, %SelfNestedBadParam.ref.loc211_65 [concrete = constants.%array_type.291] +// CHECK:STDOUT: %.loc211_86: Core.Form = init_form %array_type [concrete = constants.%.cc2] // CHECK:STDOUT: %x.param: %tuple.type.e57 = value_param call_param0 -// CHECK:STDOUT: %.loc223_53.1: type = splice_block %.loc223_53.3 [concrete = constants.%tuple.type.e57] { -// CHECK:STDOUT: %SelfNestedBadParam.ref.loc223_14: type = name_ref SelfNestedBadParam, file.%SelfNestedBadParam.decl [concrete = constants.%SelfNestedBadParam] -// CHECK:STDOUT: %ptr: type = ptr_type %SelfNestedBadParam.ref.loc223_14 [concrete = constants.%ptr.52e] -// CHECK:STDOUT: %i32.loc223_40: type = type_literal constants.%i32 [concrete = constants.%i32] -// CHECK:STDOUT: %i32.loc223_49: type = type_literal constants.%i32 [concrete = constants.%i32] +// CHECK:STDOUT: %.loc211_53.1: type = splice_block %.loc211_53.3 [concrete = constants.%tuple.type.e57] { +// CHECK:STDOUT: %SelfNestedBadParam.ref.loc211_14: type = name_ref SelfNestedBadParam, file.%SelfNestedBadParam.decl [concrete = constants.%SelfNestedBadParam] +// CHECK:STDOUT: %ptr: type = ptr_type %SelfNestedBadParam.ref.loc211_14 [concrete = constants.%ptr.52e] +// CHECK:STDOUT: %i32.loc211_40: type = type_literal constants.%i32 [concrete = constants.%i32] +// CHECK:STDOUT: %i32.loc211_49: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %struct_type.x.y: type = struct_type {.x: %i32, .y: %i32} [concrete = constants.%struct_type.x.y.fb8] -// CHECK:STDOUT: %.loc223_53.2: %tuple.type.24b = tuple_literal (%ptr, %struct_type.x.y) [concrete = constants.%tuple.991] -// CHECK:STDOUT: %.loc223_53.3: type = converted %.loc223_53.2, constants.%tuple.type.e57 [concrete = constants.%tuple.type.e57] +// CHECK:STDOUT: %.loc211_53.2: %tuple.type.24b = tuple_literal (%ptr, %struct_type.x.y) [concrete = constants.%tuple.991] +// CHECK:STDOUT: %.loc211_53.3: type = converted %.loc211_53.2, constants.%tuple.type.e57 [concrete = constants.%tuple.type.e57] // CHECK:STDOUT: } // CHECK:STDOUT: %x: %tuple.type.e57 = value_binding x, %x.param // CHECK:STDOUT: %return.param: ref %array_type.291 = out_param call_param1 // CHECK:STDOUT: %return: ref %array_type.291 = return_slot %return.param // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc211_57.1: type = specific_constant @SelfNested.WithSelf.F.%array_type.loc211_57.2, @SelfNested.WithSelf.F(constants.%SelfNested.facet.fc6) [concrete = constants.%array_type.291] -// CHECK:STDOUT: %.loc211_57.2: type = specific_constant @SelfNested.WithSelf.F.%.loc211_57.2, @SelfNested.WithSelf.F(constants.%SelfNested.facet.fc6) [concrete = constants.%.cc2] -// CHECK:STDOUT: %SelfNestedBadParam.as.SelfNested.impl.F.decl.loc223_87.2: %SelfNestedBadParam.as.SelfNested.impl.F.type.4325e7.2 = fn_decl @SelfNestedBadParam.as.SelfNested.impl.F.loc223_87.2 [concrete = constants.%SelfNestedBadParam.as.SelfNested.impl.F.5fd896.2] { -// CHECK:STDOUT: %x.param_patt: %pattern_type.94f = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.94f = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.3a0 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.3a0 = return_slot_pattern %return.param_patt, invalid [concrete] +// CHECK:STDOUT: %.loc199_57.1: type = specific_constant @SelfNested.WithSelf.F.%array_type.loc199_57.2, @SelfNested.WithSelf.F(constants.%SelfNested.facet.fc6) [concrete = constants.%array_type.291] +// CHECK:STDOUT: %.loc199_57.2: Core.Form = specific_constant @SelfNested.WithSelf.F.%.loc199_57.2, @SelfNested.WithSelf.F(constants.%SelfNested.facet.fc6) [concrete = constants.%.cc2] +// CHECK:STDOUT: %SelfNestedBadParam.as.SelfNested.impl.F.decl.loc211_87.2: %SelfNestedBadParam.as.SelfNested.impl.F.type.4325e7.2 = fn_decl @SelfNestedBadParam.as.SelfNested.impl.F.loc211_87.2 [concrete = constants.%SelfNestedBadParam.as.SelfNested.impl.F.5fd896.2] { +// CHECK:STDOUT: %.1: %pattern_type.94f = specific_constant constants.%x.param_patt.7b9, @SelfNested.WithSelf.F(constants.%SelfNested.facet.fc6) [concrete = constants.%x.param_patt.7b9] +// CHECK:STDOUT: %x.patt: %pattern_type.94f = at_binding_pattern x, %.1 [concrete = constants.%x.patt.4b4] +// CHECK:STDOUT: %.2: %pattern_type.3a0 = specific_constant constants.%return.patt.98a, @SelfNested.WithSelf.F(constants.%SelfNested.facet.fc6) [concrete = constants.%return.patt.98a] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %tuple.type.9ab = value_param call_param0 // CHECK:STDOUT: %x: %tuple.type.9ab = value_binding x, %x.param // CHECK:STDOUT: %return.param: ref %array_type.291 = out_param call_param1 // CHECK:STDOUT: %return: ref %array_type.291 = return_slot %return.param // CHECK:STDOUT: } -// CHECK:STDOUT: %SelfNested.impl_witness_table = impl_witness_table (%SelfNestedBadParam.as.SelfNested.impl.F.decl.loc223_87.2), @SelfNestedBadParam.as.SelfNested.impl [concrete] +// CHECK:STDOUT: %SelfNested.impl_witness_table = impl_witness_table (%SelfNestedBadParam.as.SelfNested.impl.F.decl.loc211_87.2), @SelfNestedBadParam.as.SelfNested.impl [concrete] // CHECK:STDOUT: %SelfNested.impl_witness: = impl_witness %SelfNested.impl_witness_table [concrete = constants.%SelfNested.impl_witness.d7c] // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .SelfNestedBadParam = -// CHECK:STDOUT: .F = %SelfNestedBadParam.as.SelfNested.impl.F.decl.loc223_87.1 +// CHECK:STDOUT: .F = %SelfNestedBadParam.as.SelfNested.impl.F.decl.loc211_87.1 // CHECK:STDOUT: extend %SelfNested.ref // CHECK:STDOUT: witness = %SelfNested.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @SelfNestedBadReturnType.as.SelfNested.impl: %Self.ref as %SelfNested.ref { -// CHECK:STDOUT: %SelfNestedBadReturnType.as.SelfNested.impl.F.decl.loc239_112.1: %SelfNestedBadReturnType.as.SelfNested.impl.F.type.1cbabe.1 = fn_decl @SelfNestedBadReturnType.as.SelfNested.impl.F.loc239_112.1 [concrete = constants.%SelfNestedBadReturnType.as.SelfNested.impl.F.5a7d54.1] { -// CHECK:STDOUT: %x.param_patt: %pattern_type.5c2 = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.5c2 = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.3a0 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.3a0 = return_slot_pattern %return.param_patt, %array_type [concrete] +// CHECK:STDOUT: %SelfNestedBadReturnType.as.SelfNested.impl.F.decl.loc227_112.1: %SelfNestedBadReturnType.as.SelfNested.impl.F.type.1cbabe.1 = fn_decl @SelfNestedBadReturnType.as.SelfNested.impl.F.loc227_112.1 [concrete = constants.%SelfNestedBadReturnType.as.SelfNested.impl.F.5a7d54.1] { +// CHECK:STDOUT: %x.param_patt: %pattern_type.5c2 = value_param_pattern [concrete = constants.%x.param_patt.7be] +// CHECK:STDOUT: %x.patt: %pattern_type.5c2 = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt.ef5] +// CHECK:STDOUT: %return.param_patt: %pattern_type.3a0 = out_param_pattern [concrete = constants.%return.param_patt.489] +// CHECK:STDOUT: %return.patt: %pattern_type.3a0 = return_slot_pattern %return.param_patt, %array_type [concrete = constants.%return.patt.98a] // CHECK:STDOUT: } { // CHECK:STDOUT: %SelfNestedBadParam.ref: type = name_ref SelfNestedBadParam, file.%SelfNestedBadParam.decl [concrete = constants.%SelfNestedBadParam] // CHECK:STDOUT: %int_4: Core.IntLiteral = int_value 4 [concrete = constants.%int_4] // CHECK:STDOUT: %array_type: type = array_type %int_4, %SelfNestedBadParam.ref [concrete = constants.%array_type.291] -// CHECK:STDOUT: %.loc239_111: Core.Form = init_form %array_type [concrete = constants.%.cc2] +// CHECK:STDOUT: %.loc227_111: Core.Form = init_form %array_type [concrete = constants.%.cc2] // CHECK:STDOUT: %x.param: %tuple.type.829 = value_param call_param0 -// CHECK:STDOUT: %.loc239_78.1: type = splice_block %.loc239_78.3 [concrete = constants.%tuple.type.829] { -// CHECK:STDOUT: %SelfNestedBadReturnType.ref.loc239_14: type = name_ref SelfNestedBadReturnType, file.%SelfNestedBadReturnType.decl [concrete = constants.%SelfNestedBadReturnType] -// CHECK:STDOUT: %ptr: type = ptr_type %SelfNestedBadReturnType.ref.loc239_14 [concrete = constants.%ptr.f55] -// CHECK:STDOUT: %SelfNestedBadReturnType.ref.loc239_45: type = name_ref SelfNestedBadReturnType, file.%SelfNestedBadReturnType.decl [concrete = constants.%SelfNestedBadReturnType] +// CHECK:STDOUT: %.loc227_78.1: type = splice_block %.loc227_78.3 [concrete = constants.%tuple.type.829] { +// CHECK:STDOUT: %SelfNestedBadReturnType.ref.loc227_14: type = name_ref SelfNestedBadReturnType, file.%SelfNestedBadReturnType.decl [concrete = constants.%SelfNestedBadReturnType] +// CHECK:STDOUT: %ptr: type = ptr_type %SelfNestedBadReturnType.ref.loc227_14 [concrete = constants.%ptr.f55] +// CHECK:STDOUT: %SelfNestedBadReturnType.ref.loc227_45: type = name_ref SelfNestedBadReturnType, file.%SelfNestedBadReturnType.decl [concrete = constants.%SelfNestedBadReturnType] // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %struct_type.x.y: type = struct_type {.x: %SelfNestedBadReturnType, .y: %i32} [concrete = constants.%struct_type.x.y.f6a] -// CHECK:STDOUT: %.loc239_78.2: %tuple.type.24b = tuple_literal (%ptr, %struct_type.x.y) [concrete = constants.%tuple.96d] -// CHECK:STDOUT: %.loc239_78.3: type = converted %.loc239_78.2, constants.%tuple.type.829 [concrete = constants.%tuple.type.829] +// CHECK:STDOUT: %.loc227_78.2: %tuple.type.24b = tuple_literal (%ptr, %struct_type.x.y) [concrete = constants.%tuple.96d] +// CHECK:STDOUT: %.loc227_78.3: type = converted %.loc227_78.2, constants.%tuple.type.829 [concrete = constants.%tuple.type.829] // CHECK:STDOUT: } // CHECK:STDOUT: %x: %tuple.type.829 = value_binding x, %x.param // CHECK:STDOUT: %return.param: ref %array_type.291 = out_param call_param1 // CHECK:STDOUT: %return: ref %array_type.291 = return_slot %return.param // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc211_57.1: type = specific_constant @SelfNested.WithSelf.F.%array_type.loc211_57.2, @SelfNested.WithSelf.F(constants.%SelfNested.facet.68c) [concrete = constants.%array_type.a08] -// CHECK:STDOUT: %.loc211_57.2: type = specific_constant @SelfNested.WithSelf.F.%.loc211_57.2, @SelfNested.WithSelf.F(constants.%SelfNested.facet.68c) [concrete = constants.%.442] -// CHECK:STDOUT: %SelfNestedBadReturnType.as.SelfNested.impl.F.decl.loc239_112.2: %SelfNestedBadReturnType.as.SelfNested.impl.F.type.1cbabe.2 = fn_decl @SelfNestedBadReturnType.as.SelfNested.impl.F.loc239_112.2 [concrete = constants.%SelfNestedBadReturnType.as.SelfNested.impl.F.5a7d54.2] { -// CHECK:STDOUT: %x.param_patt: %pattern_type.5c2 = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.5c2 = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.f0d = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.f0d = return_slot_pattern %return.param_patt, invalid [concrete] +// CHECK:STDOUT: %.loc199_57.1: type = specific_constant @SelfNested.WithSelf.F.%array_type.loc199_57.2, @SelfNested.WithSelf.F(constants.%SelfNested.facet.68c) [concrete = constants.%array_type.a08] +// CHECK:STDOUT: %.loc199_57.2: Core.Form = specific_constant @SelfNested.WithSelf.F.%.loc199_57.2, @SelfNested.WithSelf.F(constants.%SelfNested.facet.68c) [concrete = constants.%.442] +// CHECK:STDOUT: %SelfNestedBadReturnType.as.SelfNested.impl.F.decl.loc227_112.2: %SelfNestedBadReturnType.as.SelfNested.impl.F.type.1cbabe.2 = fn_decl @SelfNestedBadReturnType.as.SelfNested.impl.F.loc227_112.2 [concrete = constants.%SelfNestedBadReturnType.as.SelfNested.impl.F.5a7d54.2] { +// CHECK:STDOUT: %.1: %pattern_type.5c2 = specific_constant constants.%x.param_patt.7be, @SelfNested.WithSelf.F(constants.%SelfNested.facet.68c) [concrete = constants.%x.param_patt.7be] +// CHECK:STDOUT: %x.patt: %pattern_type.5c2 = at_binding_pattern x, %.1 [concrete = constants.%x.patt.ef5] +// CHECK:STDOUT: %.2: %pattern_type.f0d = specific_constant constants.%return.patt.3c4, @SelfNested.WithSelf.F(constants.%SelfNested.facet.68c) [concrete = constants.%return.patt.3c4] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %tuple.type.829 = value_param call_param0 // CHECK:STDOUT: %x: %tuple.type.829 = value_binding x, %x.param // CHECK:STDOUT: %return.param: ref %array_type.a08 = out_param call_param1 // CHECK:STDOUT: %return: ref %array_type.a08 = return_slot %return.param // CHECK:STDOUT: } -// CHECK:STDOUT: %SelfNested.impl_witness_table = impl_witness_table (%SelfNestedBadReturnType.as.SelfNested.impl.F.decl.loc239_112.2), @SelfNestedBadReturnType.as.SelfNested.impl [concrete] +// CHECK:STDOUT: %SelfNested.impl_witness_table = impl_witness_table (%SelfNestedBadReturnType.as.SelfNested.impl.F.decl.loc227_112.2), @SelfNestedBadReturnType.as.SelfNested.impl [concrete] // CHECK:STDOUT: %SelfNested.impl_witness: = impl_witness %SelfNested.impl_witness_table [concrete = constants.%SelfNested.impl_witness.abd] // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .SelfNestedBadReturnType = // CHECK:STDOUT: .SelfNestedBadParam = -// CHECK:STDOUT: .F = %SelfNestedBadReturnType.as.SelfNested.impl.F.decl.loc239_112.1 +// CHECK:STDOUT: .F = %SelfNestedBadReturnType.as.SelfNested.impl.F.decl.loc227_112.1 // CHECK:STDOUT: extend %SelfNested.ref // CHECK:STDOUT: witness = %SelfNested.impl_witness // CHECK:STDOUT: } @@ -1262,88 +1289,101 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: return %FMissingImplicitParam.as.J.impl.F.call // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @FMissingReturnType.as.J.impl.F.loc152_30.1(%self.param: bool, %b.param: bool); +// CHECK:STDOUT: fn @FMissingReturnType.as.J.impl.F.loc148_30.1(%self.param: bool, %b.param: bool); // CHECK:STDOUT: -// CHECK:STDOUT: fn @FMissingReturnType.as.J.impl.F.loc152_30.2(%self.param: bool, %b.param: bool) -> out %return.param: bool [thunk @FMissingReturnType.as.J.impl.%FMissingReturnType.as.J.impl.F.decl.loc152_30.1 for @J.WithSelf.%J.WithSelf.F.decl, @J.WithSelf.F(constants.%J.facet.c42)] { +// CHECK:STDOUT: fn @FMissingReturnType.as.J.impl.F.loc148_30.2(%self.param: bool, %b.param: bool) -> out %return.param: bool [thunk @FMissingReturnType.as.J.impl.%FMissingReturnType.as.J.impl.F.decl.loc148_30.1 for @J.WithSelf.%J.WithSelf.F.decl, @J.WithSelf.F(constants.%J.facet.c42)] { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %F.ref: %FMissingReturnType.as.J.impl.F.type.9cd56a.1 = name_ref F, @FMissingReturnType.as.J.impl.%FMissingReturnType.as.J.impl.F.decl.loc152_30.1 [concrete = constants.%FMissingReturnType.as.J.impl.F.6975be.1] +// CHECK:STDOUT: %F.ref: %FMissingReturnType.as.J.impl.F.type.9cd56a.1 = name_ref F, @FMissingReturnType.as.J.impl.%FMissingReturnType.as.J.impl.F.decl.loc148_30.1 [concrete = constants.%FMissingReturnType.as.J.impl.F.6975be.1] // CHECK:STDOUT: %FMissingReturnType.as.J.impl.F.bound: = bound_method %self.param, %F.ref // CHECK:STDOUT: %FMissingReturnType.as.J.impl.F.call: init %empty_tuple.type = call %FMissingReturnType.as.J.impl.F.bound(%self.param, %b.param) -// CHECK:STDOUT: %.loc152: bool = converted %FMissingReturnType.as.J.impl.F.call, [concrete = ] +// CHECK:STDOUT: %.loc148: bool = converted %FMissingReturnType.as.J.impl.F.call, [concrete = ] // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @FDifferentParamType.as.J.impl.F.loc171_38.1(%self.param: bool, %b.param: %FDifferentParamType) -> out %return.param: bool; +// CHECK:STDOUT: fn @FDifferentParamType.as.J.impl.F.loc163_38.1(%self.param: bool, %b.param: %FDifferentParamType) -> out %return.param: bool; // CHECK:STDOUT: -// CHECK:STDOUT: fn @FDifferentParamType.as.J.impl.F.loc171_38.2(%self.param: bool, %b.param: bool) -> out %return.param: bool [thunk @FDifferentParamType.as.J.impl.%FDifferentParamType.as.J.impl.F.decl.loc171_38.1 for @J.WithSelf.%J.WithSelf.F.decl, @J.WithSelf.F(constants.%J.facet.47a)] { +// CHECK:STDOUT: fn @FDifferentParamType.as.J.impl.F.loc163_38.2(%self.param: bool, %b.param: bool) -> out %return.param: bool [thunk @FDifferentParamType.as.J.impl.%FDifferentParamType.as.J.impl.F.decl.loc163_38.1 for @J.WithSelf.%J.WithSelf.F.decl, @J.WithSelf.F(constants.%J.facet.47a)] { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %F.ref: %FDifferentParamType.as.J.impl.F.type.4a2e9b.1 = name_ref F, @FDifferentParamType.as.J.impl.%FDifferentParamType.as.J.impl.F.decl.loc171_38.1 [concrete = constants.%FDifferentParamType.as.J.impl.F.28602a.1] +// CHECK:STDOUT: %F.ref: %FDifferentParamType.as.J.impl.F.type.4a2e9b.1 = name_ref F, @FDifferentParamType.as.J.impl.%FDifferentParamType.as.J.impl.F.decl.loc163_38.1 [concrete = constants.%FDifferentParamType.as.J.impl.F.28602a.1] // CHECK:STDOUT: %FDifferentParamType.as.J.impl.F.bound: = bound_method %self.param, %F.ref -// CHECK:STDOUT: %.loc103: %FDifferentParamType = converted %b.param, [concrete = ] +// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(constants.%FDifferentParamType)> [concrete = constants.%ImplicitAs.type.4ba] +// CHECK:STDOUT: %.4: %ImplicitAs.assoc_type.503 = specific_constant imports.%Core.import_ref.484, @ImplicitAs.WithSelf(constants.%FDifferentParamType, constants.%Self.294) [concrete = constants.%assoc0.603] +// CHECK:STDOUT: %Convert.ref: %ImplicitAs.assoc_type.503 = name_ref Convert, %.4 [concrete = constants.%assoc0.603] +// CHECK:STDOUT: %.5: %FDifferentParamType = converted %b.param, [concrete = ] // CHECK:STDOUT: %FDifferentParamType.as.J.impl.F.call: init bool = call %FDifferentParamType.as.J.impl.F.bound(%self.param, ) // CHECK:STDOUT: return %FDifferentParamType.as.J.impl.F.call // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @FDifferentImplicitParamType.as.J.impl.F.loc184_32.1(%self.param: %FDifferentImplicitParamType, %b.param: bool) -> out %return.param: bool; +// CHECK:STDOUT: fn @FDifferentImplicitParamType.as.J.impl.F.loc176_32.1(%self.param: %FDifferentImplicitParamType, %b.param: bool) -> out %return.param: bool; // CHECK:STDOUT: -// CHECK:STDOUT: fn @FDifferentImplicitParamType.as.J.impl.F.loc184_32.2(%self.param: bool, %b.param: bool) -> out %return.param: bool [thunk @FDifferentImplicitParamType.as.J.impl.%FDifferentImplicitParamType.as.J.impl.F.decl.loc184_32.1 for @J.WithSelf.%J.WithSelf.F.decl, @J.WithSelf.F(constants.%J.facet.929)] { +// CHECK:STDOUT: fn @FDifferentImplicitParamType.as.J.impl.F.loc176_32.2(%self.param: bool, %b.param: bool) -> out %return.param: bool [thunk @FDifferentImplicitParamType.as.J.impl.%FDifferentImplicitParamType.as.J.impl.F.decl.loc176_32.1 for @J.WithSelf.%J.WithSelf.F.decl, @J.WithSelf.F(constants.%J.facet.929)] { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %F.ref: %FDifferentImplicitParamType.as.J.impl.F.type.6ef8a6.1 = name_ref F, @FDifferentImplicitParamType.as.J.impl.%FDifferentImplicitParamType.as.J.impl.F.decl.loc184_32.1 [concrete = constants.%FDifferentImplicitParamType.as.J.impl.F.792c78.1] +// CHECK:STDOUT: %F.ref: %FDifferentImplicitParamType.as.J.impl.F.type.6ef8a6.1 = name_ref F, @FDifferentImplicitParamType.as.J.impl.%FDifferentImplicitParamType.as.J.impl.F.decl.loc176_32.1 [concrete = constants.%FDifferentImplicitParamType.as.J.impl.F.792c78.1] // CHECK:STDOUT: %FDifferentImplicitParamType.as.J.impl.F.bound: = bound_method %self.param, %F.ref -// CHECK:STDOUT: %.loc103: %FDifferentImplicitParamType = converted %self.param, [concrete = ] +// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(constants.%FDifferentImplicitParamType)> [concrete = constants.%ImplicitAs.type.de7] +// CHECK:STDOUT: %.4: %ImplicitAs.assoc_type.36e = specific_constant imports.%Core.import_ref.484, @ImplicitAs.WithSelf(constants.%FDifferentImplicitParamType, constants.%Self.294) [concrete = constants.%assoc0.769] +// CHECK:STDOUT: %Convert.ref: %ImplicitAs.assoc_type.36e = name_ref Convert, %.4 [concrete = constants.%assoc0.769] +// CHECK:STDOUT: %.5: %FDifferentImplicitParamType = converted %self.param, [concrete = ] // CHECK:STDOUT: %FDifferentImplicitParamType.as.J.impl.F.call: init bool = call %FDifferentImplicitParamType.as.J.impl.F.bound(, %b.param) // CHECK:STDOUT: return %FDifferentImplicitParamType.as.J.impl.F.call // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @FDifferentReturnType.as.J.impl.F.loc200_38.1(%self.param: bool, %b.param: bool) -> out %return.param: %FDifferentReturnType; +// CHECK:STDOUT: fn @FDifferentReturnType.as.J.impl.F.loc194_38.1(%self.param: bool, %b.param: bool) -> out %return.param: %FDifferentReturnType; // CHECK:STDOUT: -// CHECK:STDOUT: fn @FDifferentReturnType.as.J.impl.F.loc200_38.2(%self.param: bool, %b.param: bool) -> out %return.param: bool [thunk @FDifferentReturnType.as.J.impl.%FDifferentReturnType.as.J.impl.F.decl.loc200_38.1 for @J.WithSelf.%J.WithSelf.F.decl, @J.WithSelf.F(constants.%J.facet.b85)] { +// CHECK:STDOUT: fn @FDifferentReturnType.as.J.impl.F.loc194_38.2(%self.param: bool, %b.param: bool) -> out %return.param: bool [thunk @FDifferentReturnType.as.J.impl.%FDifferentReturnType.as.J.impl.F.decl.loc194_38.1 for @J.WithSelf.%J.WithSelf.F.decl, @J.WithSelf.F(constants.%J.facet.b85)] { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %F.ref: %FDifferentReturnType.as.J.impl.F.type.ff55f4.1 = name_ref F, @FDifferentReturnType.as.J.impl.%FDifferentReturnType.as.J.impl.F.decl.loc200_38.1 [concrete = constants.%FDifferentReturnType.as.J.impl.F.9725a5.1] +// CHECK:STDOUT: %F.ref: %FDifferentReturnType.as.J.impl.F.type.ff55f4.1 = name_ref F, @FDifferentReturnType.as.J.impl.%FDifferentReturnType.as.J.impl.F.decl.loc194_38.1 [concrete = constants.%FDifferentReturnType.as.J.impl.F.9725a5.1] // CHECK:STDOUT: %FDifferentReturnType.as.J.impl.F.bound: = bound_method %self.param, %F.ref -// CHECK:STDOUT: %.loc200_38.1: ref %FDifferentReturnType = temporary_storage -// CHECK:STDOUT: %FDifferentReturnType.as.J.impl.F.call: init %FDifferentReturnType to %.loc200_38.1 = call %FDifferentReturnType.as.J.impl.F.bound(%self.param, %b.param) -// CHECK:STDOUT: %.loc200_38.2: bool = converted %FDifferentReturnType.as.J.impl.F.call, [concrete = ] +// CHECK:STDOUT: %.loc194_38.1: ref %FDifferentReturnType = temporary_storage +// CHECK:STDOUT: %FDifferentReturnType.as.J.impl.F.call: init %FDifferentReturnType to %.loc194_38.1 = call %FDifferentReturnType.as.J.impl.F.bound(%self.param, %b.param) +// CHECK:STDOUT: %.loc194_38.2: bool = converted %FDifferentReturnType.as.J.impl.F.call, [concrete = ] // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @SelfNested.WithSelf.F(@SelfNested.%Self: %SelfNested.type) { // CHECK:STDOUT: %Self: %SelfNested.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.e81)] -// CHECK:STDOUT: %Self.as_type.loc211_16.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc211_16.1 (constants.%Self.as_type.8ab)] -// CHECK:STDOUT: %ptr.loc211_16.1: type = ptr_type %Self.as_type.loc211_16.1 [symbolic = %ptr.loc211_16.1 (constants.%ptr.a16)] -// CHECK:STDOUT: %struct_type.x.y.loc211_37.1: type = struct_type {.x: @SelfNested.WithSelf.F.%Self.as_type.loc211_16.1 (%Self.as_type.8ab), .y: %i32} [symbolic = %struct_type.x.y.loc211_37.1 (constants.%struct_type.x.y.4c5)] -// CHECK:STDOUT: %tuple: %tuple.type.24b = tuple_value (%ptr.loc211_16.1, %struct_type.x.y.loc211_37.1) [symbolic = %tuple (constants.%tuple.b6a)] -// CHECK:STDOUT: %tuple.type: type = tuple_type (%ptr.loc211_16.1, %struct_type.x.y.loc211_37.1) [symbolic = %tuple.type (constants.%tuple.type.c49)] -// CHECK:STDOUT: %pattern_type.loc211_9: type = pattern_type %tuple.type [symbolic = %pattern_type.loc211_9 (constants.%pattern_type.60a)] -// CHECK:STDOUT: %array_type.loc211_57.1: type = array_type constants.%int_4, %Self.as_type.loc211_16.1 [symbolic = %array_type.loc211_57.1 (constants.%array_type.4e4)] -// CHECK:STDOUT: %.loc211_57.1: Core.Form = init_form %array_type.loc211_57.1 [symbolic = %.loc211_57.1 (constants.%.f45)] -// CHECK:STDOUT: %pattern_type.loc211_57: type = pattern_type %array_type.loc211_57.1 [symbolic = %pattern_type.loc211_57 (constants.%pattern_type.2ab)] +// CHECK:STDOUT: %Self.as_type.loc199_16.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc199_16.1 (constants.%Self.as_type.8ab)] +// CHECK:STDOUT: %ptr.loc199_16.1: type = ptr_type %Self.as_type.loc199_16.1 [symbolic = %ptr.loc199_16.1 (constants.%ptr.a16)] +// CHECK:STDOUT: %struct_type.x.y.loc199_37.1: type = struct_type {.x: @SelfNested.WithSelf.F.%Self.as_type.loc199_16.1 (%Self.as_type.8ab), .y: %i32} [symbolic = %struct_type.x.y.loc199_37.1 (constants.%struct_type.x.y.4c5)] +// CHECK:STDOUT: %tuple: %tuple.type.24b = tuple_value (%ptr.loc199_16.1, %struct_type.x.y.loc199_37.1) [symbolic = %tuple (constants.%tuple.b6a)] +// CHECK:STDOUT: %tuple.type: type = tuple_type (%ptr.loc199_16.1, %struct_type.x.y.loc199_37.1) [symbolic = %tuple.type (constants.%tuple.type.c49)] +// CHECK:STDOUT: %pattern_type.loc199_9: type = pattern_type %tuple.type [symbolic = %pattern_type.loc199_9 (constants.%pattern_type.60a)] +// CHECK:STDOUT: %x.param_patt.loc199_9.2: @SelfNested.WithSelf.F.%pattern_type.loc199_9 (%pattern_type.60a) = value_param_pattern [symbolic = %x.param_patt.loc199_9.2 (constants.%x.param_patt.e85)] +// CHECK:STDOUT: %x.patt.loc199_9.2: @SelfNested.WithSelf.F.%pattern_type.loc199_9 (%pattern_type.60a) = at_binding_pattern x, %x.param_patt.loc199_9.2 [symbolic = %x.patt.loc199_9.2 (constants.%x.patt.ad4)] +// CHECK:STDOUT: %array_type.loc199_57.1: type = array_type constants.%int_4, %Self.as_type.loc199_16.1 [symbolic = %array_type.loc199_57.1 (constants.%array_type.4e4)] +// CHECK:STDOUT: %.loc199_57.1: Core.Form = init_form %array_type.loc199_57.1 [symbolic = %.loc199_57.1 (constants.%.f45)] +// CHECK:STDOUT: %pattern_type.loc199_57: type = pattern_type %array_type.loc199_57.1 [symbolic = %pattern_type.loc199_57 (constants.%pattern_type.2ab)] +// CHECK:STDOUT: %return.param_patt.loc199_57.2: @SelfNested.WithSelf.F.%pattern_type.loc199_57 (%pattern_type.2ab) = out_param_pattern [symbolic = %return.param_patt.loc199_57.2 (constants.%return.param_patt.439)] +// CHECK:STDOUT: %return.patt.loc199_41.2: @SelfNested.WithSelf.F.%pattern_type.loc199_57 (%pattern_type.2ab) = return_slot_pattern %return.param_patt.loc199_57.2, %array_type.loc199_57.1 [symbolic = %return.patt.loc199_41.2 (constants.%return.patt.869)] // CHECK:STDOUT: -// CHECK:STDOUT: fn(%x.param: @SelfNested.WithSelf.F.%tuple.type (%tuple.type.c49)) -> out %return.param: @SelfNested.WithSelf.F.%array_type.loc211_57.1 (%array_type.4e4); +// CHECK:STDOUT: fn(%x.param: @SelfNested.WithSelf.F.%tuple.type (%tuple.type.c49)) -> out %return.param: @SelfNested.WithSelf.F.%array_type.loc199_57.1 (%array_type.4e4); // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @SelfNestedBadParam.as.SelfNested.impl.F.loc223_87.1(%x.param: %tuple.type.e57) -> out %return.param: %array_type.291; +// CHECK:STDOUT: fn @SelfNestedBadParam.as.SelfNested.impl.F.loc211_87.1(%x.param: %tuple.type.e57) -> out %return.param: %array_type.291; // CHECK:STDOUT: -// CHECK:STDOUT: fn @SelfNestedBadParam.as.SelfNested.impl.F.loc223_87.2(%x.param: %tuple.type.9ab) -> out %return.param: %array_type.291 [thunk @SelfNestedBadParam.as.SelfNested.impl.%SelfNestedBadParam.as.SelfNested.impl.F.decl.loc223_87.1 for @SelfNested.WithSelf.%SelfNested.WithSelf.F.decl, @SelfNested.WithSelf.F(constants.%SelfNested.facet.fc6)] { +// CHECK:STDOUT: fn @SelfNestedBadParam.as.SelfNested.impl.F.loc211_87.2(%x.param: %tuple.type.9ab) -> out %return.param: %array_type.291 [thunk @SelfNestedBadParam.as.SelfNested.impl.%SelfNestedBadParam.as.SelfNested.impl.F.decl.loc211_87.1 for @SelfNested.WithSelf.%SelfNested.WithSelf.F.decl, @SelfNested.WithSelf.F(constants.%SelfNested.facet.fc6)] { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %F.ref: %SelfNestedBadParam.as.SelfNested.impl.F.type.4325e7.1 = name_ref F, @SelfNestedBadParam.as.SelfNested.impl.%SelfNestedBadParam.as.SelfNested.impl.F.decl.loc223_87.1 [concrete = constants.%SelfNestedBadParam.as.SelfNested.impl.F.5fd896.1] -// CHECK:STDOUT: %.loc211_57: ref %array_type.291 = splice_block %return.param {} +// CHECK:STDOUT: %F.ref: %SelfNestedBadParam.as.SelfNested.impl.F.type.4325e7.1 = name_ref F, @SelfNestedBadParam.as.SelfNested.impl.%SelfNestedBadParam.as.SelfNested.impl.F.decl.loc211_87.1 [concrete = constants.%SelfNestedBadParam.as.SelfNested.impl.F.5fd896.1] +// CHECK:STDOUT: %.3: ref %array_type.291 = splice_block %return.param {} // CHECK:STDOUT: %tuple.elem0: %ptr.52e = tuple_access %x.param, element0 // CHECK:STDOUT: %tuple.elem1: %struct_type.x.y.da2 = tuple_access %x.param, element1 -// CHECK:STDOUT: %.loc211_9.1: %SelfNestedBadParam = struct_access %tuple.elem1, element0 -// CHECK:STDOUT: %.loc211_9.2: %i32 = converted %.loc211_9.1, [concrete = ] -// CHECK:STDOUT: %SelfNestedBadParam.as.SelfNested.impl.F.call: init %array_type.291 to %.loc211_57 = call %F.ref() +// CHECK:STDOUT: %.4: %SelfNestedBadParam = struct_access %tuple.elem1, element0 +// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(constants.%i32)> [concrete = constants.%ImplicitAs.type.914] +// CHECK:STDOUT: %.5: %ImplicitAs.assoc_type.e23 = specific_constant imports.%Core.import_ref.484, @ImplicitAs.WithSelf(constants.%i32, constants.%Self.294) [concrete = constants.%assoc0.368] +// CHECK:STDOUT: %Convert.ref: %ImplicitAs.assoc_type.e23 = name_ref Convert, %.5 [concrete = constants.%assoc0.368] +// CHECK:STDOUT: %.6: %i32 = converted %.4, [concrete = ] +// CHECK:STDOUT: %SelfNestedBadParam.as.SelfNested.impl.F.call: init %array_type.291 to %.3 = call %F.ref() // CHECK:STDOUT: return %SelfNestedBadParam.as.SelfNested.impl.F.call to %return.param // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @SelfNestedBadReturnType.as.SelfNested.impl.F.loc239_112.1(%x.param: %tuple.type.829) -> out %return.param: %array_type.291; +// CHECK:STDOUT: fn @SelfNestedBadReturnType.as.SelfNested.impl.F.loc227_112.1(%x.param: %tuple.type.829) -> out %return.param: %array_type.291; // CHECK:STDOUT: -// CHECK:STDOUT: fn @SelfNestedBadReturnType.as.SelfNested.impl.F.loc239_112.2(%x.param: %tuple.type.829) -> out %return.param: %array_type.a08 [thunk @SelfNestedBadReturnType.as.SelfNested.impl.%SelfNestedBadReturnType.as.SelfNested.impl.F.decl.loc239_112.1 for @SelfNested.WithSelf.%SelfNested.WithSelf.F.decl, @SelfNested.WithSelf.F(constants.%SelfNested.facet.68c)] { +// CHECK:STDOUT: fn @SelfNestedBadReturnType.as.SelfNested.impl.F.loc227_112.2(%x.param: %tuple.type.829) -> out %return.param: %array_type.a08 [thunk @SelfNestedBadReturnType.as.SelfNested.impl.%SelfNestedBadReturnType.as.SelfNested.impl.F.decl.loc227_112.1 for @SelfNested.WithSelf.%SelfNested.WithSelf.F.decl, @SelfNested.WithSelf.F(constants.%SelfNested.facet.68c)] { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %F.ref: %SelfNestedBadReturnType.as.SelfNested.impl.F.type.1cbabe.1 = name_ref F, @SelfNestedBadReturnType.as.SelfNested.impl.%SelfNestedBadReturnType.as.SelfNested.impl.F.decl.loc239_112.1 [concrete = constants.%SelfNestedBadReturnType.as.SelfNested.impl.F.5a7d54.1] -// CHECK:STDOUT: %.loc239_112.1: ref %array_type.291 = temporary_storage -// CHECK:STDOUT: %SelfNestedBadReturnType.as.SelfNested.impl.F.call: init %array_type.291 to %.loc239_112.1 = call %F.ref(%x.param) -// CHECK:STDOUT: %.loc239_112.2: %array_type.a08 = converted %SelfNestedBadReturnType.as.SelfNested.impl.F.call, [concrete = ] +// CHECK:STDOUT: %F.ref: %SelfNestedBadReturnType.as.SelfNested.impl.F.type.1cbabe.1 = name_ref F, @SelfNestedBadReturnType.as.SelfNested.impl.%SelfNestedBadReturnType.as.SelfNested.impl.F.decl.loc227_112.1 [concrete = constants.%SelfNestedBadReturnType.as.SelfNested.impl.F.5a7d54.1] +// CHECK:STDOUT: %.loc227_112.1: ref %array_type.291 = temporary_storage +// CHECK:STDOUT: %SelfNestedBadReturnType.as.SelfNested.impl.F.call: init %array_type.291 to %.loc227_112.1 = call %F.ref(%x.param) +// CHECK:STDOUT: %.loc227_112.2: %array_type.a08 = converted %SelfNestedBadReturnType.as.SelfNested.impl.F.call, [concrete = ] // CHECK:STDOUT: return to %return.param // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1476,15 +1516,19 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: // CHECK:STDOUT: specific @SelfNested.WithSelf.F(constants.%Self.e81) { // CHECK:STDOUT: %Self => constants.%Self.e81 -// CHECK:STDOUT: %Self.as_type.loc211_16.1 => constants.%Self.as_type.8ab -// CHECK:STDOUT: %ptr.loc211_16.1 => constants.%ptr.a16 -// CHECK:STDOUT: %struct_type.x.y.loc211_37.1 => constants.%struct_type.x.y.4c5 +// CHECK:STDOUT: %Self.as_type.loc199_16.1 => constants.%Self.as_type.8ab +// CHECK:STDOUT: %ptr.loc199_16.1 => constants.%ptr.a16 +// CHECK:STDOUT: %struct_type.x.y.loc199_37.1 => constants.%struct_type.x.y.4c5 // CHECK:STDOUT: %tuple => constants.%tuple.b6a // CHECK:STDOUT: %tuple.type => constants.%tuple.type.c49 -// CHECK:STDOUT: %pattern_type.loc211_9 => constants.%pattern_type.60a -// CHECK:STDOUT: %array_type.loc211_57.1 => constants.%array_type.4e4 -// CHECK:STDOUT: %.loc211_57.1 => constants.%.f45 -// CHECK:STDOUT: %pattern_type.loc211_57 => constants.%pattern_type.2ab +// CHECK:STDOUT: %pattern_type.loc199_9 => constants.%pattern_type.60a +// CHECK:STDOUT: %x.param_patt.loc199_9.2 => constants.%x.param_patt.e85 +// CHECK:STDOUT: %x.patt.loc199_9.2 => constants.%x.patt.ad4 +// CHECK:STDOUT: %array_type.loc199_57.1 => constants.%array_type.4e4 +// CHECK:STDOUT: %.loc199_57.1 => constants.%.f45 +// CHECK:STDOUT: %pattern_type.loc199_57 => constants.%pattern_type.2ab +// CHECK:STDOUT: %return.param_patt.loc199_57.2 => constants.%return.param_patt.439 +// CHECK:STDOUT: %return.patt.loc199_41.2 => constants.%return.patt.869 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @SelfNested.WithSelf(constants.%SelfNested.facet.fc6) { @@ -1496,15 +1540,19 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: // CHECK:STDOUT: specific @SelfNested.WithSelf.F(constants.%SelfNested.facet.fc6) { // CHECK:STDOUT: %Self => constants.%SelfNested.facet.fc6 -// CHECK:STDOUT: %Self.as_type.loc211_16.1 => constants.%SelfNestedBadParam -// CHECK:STDOUT: %ptr.loc211_16.1 => constants.%ptr.52e -// CHECK:STDOUT: %struct_type.x.y.loc211_37.1 => constants.%struct_type.x.y.da2 +// CHECK:STDOUT: %Self.as_type.loc199_16.1 => constants.%SelfNestedBadParam +// CHECK:STDOUT: %ptr.loc199_16.1 => constants.%ptr.52e +// CHECK:STDOUT: %struct_type.x.y.loc199_37.1 => constants.%struct_type.x.y.da2 // CHECK:STDOUT: %tuple => constants.%tuple.09d // CHECK:STDOUT: %tuple.type => constants.%tuple.type.9ab -// CHECK:STDOUT: %pattern_type.loc211_9 => constants.%pattern_type.94f -// CHECK:STDOUT: %array_type.loc211_57.1 => constants.%array_type.291 -// CHECK:STDOUT: %.loc211_57.1 => constants.%.cc2 -// CHECK:STDOUT: %pattern_type.loc211_57 => constants.%pattern_type.3a0 +// CHECK:STDOUT: %pattern_type.loc199_9 => constants.%pattern_type.94f +// CHECK:STDOUT: %x.param_patt.loc199_9.2 => constants.%x.param_patt.7b9 +// CHECK:STDOUT: %x.patt.loc199_9.2 => constants.%x.patt.4b4 +// CHECK:STDOUT: %array_type.loc199_57.1 => constants.%array_type.291 +// CHECK:STDOUT: %.loc199_57.1 => constants.%.cc2 +// CHECK:STDOUT: %pattern_type.loc199_57 => constants.%pattern_type.3a0 +// CHECK:STDOUT: %return.param_patt.loc199_57.2 => constants.%return.param_patt.489 +// CHECK:STDOUT: %return.patt.loc199_41.2 => constants.%return.patt.98a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @SelfNested.WithSelf(constants.%SelfNested.facet.68c) { @@ -1516,14 +1564,18 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: // CHECK:STDOUT: specific @SelfNested.WithSelf.F(constants.%SelfNested.facet.68c) { // CHECK:STDOUT: %Self => constants.%SelfNested.facet.68c -// CHECK:STDOUT: %Self.as_type.loc211_16.1 => constants.%SelfNestedBadReturnType -// CHECK:STDOUT: %ptr.loc211_16.1 => constants.%ptr.f55 -// CHECK:STDOUT: %struct_type.x.y.loc211_37.1 => constants.%struct_type.x.y.f6a +// CHECK:STDOUT: %Self.as_type.loc199_16.1 => constants.%SelfNestedBadReturnType +// CHECK:STDOUT: %ptr.loc199_16.1 => constants.%ptr.f55 +// CHECK:STDOUT: %struct_type.x.y.loc199_37.1 => constants.%struct_type.x.y.f6a // CHECK:STDOUT: %tuple => constants.%tuple.96d // CHECK:STDOUT: %tuple.type => constants.%tuple.type.829 -// CHECK:STDOUT: %pattern_type.loc211_9 => constants.%pattern_type.5c2 -// CHECK:STDOUT: %array_type.loc211_57.1 => constants.%array_type.a08 -// CHECK:STDOUT: %.loc211_57.1 => constants.%.442 -// CHECK:STDOUT: %pattern_type.loc211_57 => constants.%pattern_type.f0d +// CHECK:STDOUT: %pattern_type.loc199_9 => constants.%pattern_type.5c2 +// CHECK:STDOUT: %x.param_patt.loc199_9.2 => constants.%x.param_patt.7be +// CHECK:STDOUT: %x.patt.loc199_9.2 => constants.%x.patt.ef5 +// CHECK:STDOUT: %array_type.loc199_57.1 => constants.%array_type.a08 +// CHECK:STDOUT: %.loc199_57.1 => constants.%.442 +// CHECK:STDOUT: %pattern_type.loc199_57 => constants.%pattern_type.f0d +// CHECK:STDOUT: %return.param_patt.loc199_57.2 => constants.%return.param_patt.039 +// CHECK:STDOUT: %return.patt.loc199_41.2 => constants.%return.patt.3c4 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/fail_self_type_mismatch.carbon b/toolchain/check/testdata/impl/fail_self_type_mismatch.carbon index 6ae7cb8e617b..d9a039a282e6 100644 --- a/toolchain/check/testdata/impl/fail_self_type_mismatch.carbon +++ b/toolchain/check/testdata/impl/fail_self_type_mismatch.carbon @@ -11,17 +11,13 @@ // TIP: bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/check/testdata/impl/fail_self_type_mismatch.carbon // TIP: To dump output, run: // TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/check/testdata/impl/fail_self_type_mismatch.carbon +// CHECK:STDERR: fail_self_type_mismatch.carbon: error: cannot implicitly convert expression of type `C(i32 as I)` to `C(i32)` [ConversionFailure] +// CHECK:STDERR: fail_self_type_mismatch.carbon: note: type `C(i32 as I)` does not implement interface `Core.ImplicitAs(C(i32))` [MissingImplInMemberAccessInContext] class C[T:! type](X:! T) {} interface I { // Uses of `Self` inside the definition of `I` have type `I`. - // CHECK:STDERR: fail_self_type_mismatch.carbon:[[@LINE+6]]:8: error: cannot implicitly convert expression of type `C(i32 as I)` to `C(i32)` [ConversionFailure] - // CHECK:STDERR: fn F(c: C(Self)); - // CHECK:STDERR: ^~~~~~~~~~ - // CHECK:STDERR: fail_self_type_mismatch.carbon:[[@LINE+3]]:8: note: type `C(i32 as I)` does not implement interface `Core.ImplicitAs(C(i32))` [MissingImplInMemberAccessInContext] - // CHECK:STDERR: fn F(c: C(Self)); - // CHECK:STDERR: ^~~~~~~~~~ fn F(c: C(Self)); } @@ -49,8 +45,10 @@ impl i32 as I { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %pattern_type.51d1c4.1: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %X.patt.9f0: %pattern_type.51d1c4.1 = symbolic_binding_pattern X, 1 [symbolic] // CHECK:STDOUT: %X: %T = symbolic_binding X, 1 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -61,8 +59,11 @@ impl i32 as I { // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] // CHECK:STDOUT: %Self.37e: %I.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %pattern_type.6cb: type = pattern_type %I.type [concrete] +// CHECK:STDOUT: %X.patt.3b7: %pattern_type.6cb = symbolic_binding_pattern X, 1 [symbolic] // CHECK:STDOUT: %C.a21: type = class_type @C, @C(%I.type, %Self.37e) [symbolic] // CHECK:STDOUT: %pattern_type.59c: type = pattern_type %C.a21 [symbolic] +// CHECK:STDOUT: %c.param_patt.397: %pattern_type.59c = value_param_pattern [symbolic] +// CHECK:STDOUT: %c.patt.dac: %pattern_type.59c = at_binding_pattern c, %c.param_patt.397 [symbolic] // CHECK:STDOUT: %I.WithSelf.F.type.dcc: type = fn_type @I.WithSelf.F, @I.WithSelf(%Self.37e) [symbolic] // CHECK:STDOUT: %I.WithSelf.F.ec6: %I.WithSelf.F.type.dcc = struct_value () [symbolic] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] @@ -71,6 +72,8 @@ impl i32 as I { // CHECK:STDOUT: %I.facet.11c: %I.type = facet_value bool, (%I.impl_witness.020) [concrete] // CHECK:STDOUT: %C.071: type = class_type @C, @C(%I.type, %I.facet.11c) [concrete] // CHECK:STDOUT: %pattern_type.85b: type = pattern_type %C.071 [concrete] +// CHECK:STDOUT: %c.param_patt.ff4: %pattern_type.85b = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt.e1c: %pattern_type.85b = at_binding_pattern c, %c.param_patt.ff4 [concrete] // CHECK:STDOUT: %bool.as.I.impl.F.type: type = fn_type @bool.as.I.impl.F [concrete] // CHECK:STDOUT: %bool.as.I.impl.F: %bool.as.I.impl.F.type = struct_value () [concrete] // CHECK:STDOUT: %I.WithSelf.F.type.4fb: type = fn_type @I.WithSelf.F, @I.WithSelf(%I.facet.11c) [concrete] @@ -80,19 +83,34 @@ impl i32 as I { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %I.impl_witness.903: = impl_witness @i32.as.I.impl.%I.impl_witness_table [concrete] +// CHECK:STDOUT: %X.patt.014: %pattern_type.98f = symbolic_binding_pattern X, 1 [symbolic] // CHECK:STDOUT: %C.8dc: type = class_type @C, @C(type, %i32) [concrete] // CHECK:STDOUT: %pattern_type.900: type = pattern_type %C.8dc [concrete] -// CHECK:STDOUT: %i32.as.I.impl.F.type.48cdab.1: type = fn_type @i32.as.I.impl.F.loc43_18.1 [concrete] +// CHECK:STDOUT: %c.param_patt.e0e: %pattern_type.900 = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt.c85: %pattern_type.900 = at_binding_pattern c, %c.param_patt.e0e [concrete] +// CHECK:STDOUT: %i32.as.I.impl.F.type.48cdab.1: type = fn_type @i32.as.I.impl.F.loc39_18.1 [concrete] // CHECK:STDOUT: %i32.as.I.impl.F.bd5be1.1: %i32.as.I.impl.F.type.48cdab.1 = struct_value () [concrete] // CHECK:STDOUT: %I.facet.858: %I.type = facet_value %i32, (%I.impl_witness.903) [concrete] // CHECK:STDOUT: %I.WithSelf.F.type.b7c: type = fn_type @I.WithSelf.F, @I.WithSelf(%I.facet.858) [concrete] // CHECK:STDOUT: %I.WithSelf.F.ae9: %I.WithSelf.F.type.b7c = struct_value () [concrete] // CHECK:STDOUT: %C.efa: type = class_type @C, @C(%I.type, %I.facet.858) [concrete] // CHECK:STDOUT: %pattern_type.b7c: type = pattern_type %C.efa [concrete] -// CHECK:STDOUT: %i32.as.I.impl.F.type.48cdab.2: type = fn_type @i32.as.I.impl.F.loc43_18.2 [concrete] +// CHECK:STDOUT: %c.param_patt.fb1: %pattern_type.b7c = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt.d03: %pattern_type.b7c = at_binding_pattern c, %c.param_patt.fb1 [concrete] +// CHECK:STDOUT: %i32.as.I.impl.F.type.48cdab.2: type = fn_type @i32.as.I.impl.F.loc39_18.2 [concrete] // CHECK:STDOUT: %i32.as.I.impl.F.bd5be1.2: %i32.as.I.impl.F.type.48cdab.2 = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] +// CHECK:STDOUT: %Dest: type = symbolic_binding Dest, 0 [symbolic] +// CHECK:STDOUT: %ImplicitAs.type.3aa: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] +// CHECK:STDOUT: %Self.294: %ImplicitAs.type.3aa = symbolic_binding Self, 1 [symbolic] +// CHECK:STDOUT: %ImplicitAs.assoc_type.fcc: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] +// CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.type.97e: type = fn_type @ImplicitAs.WithSelf.Convert, @ImplicitAs.WithSelf(%Dest, %Self.294) [symbolic] +// CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.945: %ImplicitAs.WithSelf.Convert.type.97e = struct_value () [symbolic] +// CHECK:STDOUT: %ImplicitAs.type.803: type = facet_type <@ImplicitAs, @ImplicitAs(%C.8dc)> [concrete] +// CHECK:STDOUT: %ImplicitAs.assoc_type.385: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%C.8dc) [concrete] +// CHECK:STDOUT: %assoc0.82f: %ImplicitAs.assoc_type.385 = assoc_entity element0, imports.%Core.import_ref.cb2 [concrete] +// CHECK:STDOUT: %assoc0.0ac: %ImplicitAs.assoc_type.fcc = assoc_entity element0, imports.%Core.import_ref.f9d [symbolic] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -106,6 +124,9 @@ impl i32 as I { // CHECK:STDOUT: %Core.Bool: type = import_ref Core//prelude/parts/bool, Bool, loaded [concrete = bool] // CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.0ff = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] +// CHECK:STDOUT: %Core.import_ref.484: @ImplicitAs.WithSelf.%ImplicitAs.assoc_type (%ImplicitAs.assoc_type.fcc) = import_ref Core//prelude/parts/as, loc{{\d+_\d+}}, loaded [symbolic = @ImplicitAs.WithSelf.%assoc0 (constants.%assoc0.0ac)] +// CHECK:STDOUT: %Core.import_ref.cb2: @ImplicitAs.WithSelf.%ImplicitAs.WithSelf.Convert.type (%ImplicitAs.WithSelf.Convert.type.97e) = import_ref Core//prelude/parts/as, loc{{\d+_\d+}}, loaded [symbolic = @ImplicitAs.WithSelf.%ImplicitAs.WithSelf.Convert (constants.%ImplicitAs.WithSelf.Convert.945)] +// CHECK:STDOUT: %Core.import_ref.f9d = import_ref Core//prelude/parts/as, loc{{\d+_\d+}}, unloaded // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -116,23 +137,23 @@ impl i32 as I { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %X.patt: @C.%pattern_type (%pattern_type.51d1c4.1) = symbolic_binding_pattern X, 1 [concrete] +// CHECK:STDOUT: %T.patt.loc17_10.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc17_10.2 (constants.%T.patt)] +// CHECK:STDOUT: %X.patt.loc17_20.1: @C.%pattern_type (%pattern_type.51d1c4.1) = symbolic_binding_pattern X, 1 [symbolic = %X.patt.loc17_20.2 (constants.%X.patt.9f0)] // CHECK:STDOUT: } { -// CHECK:STDOUT: %.loc15_13.1: type = splice_block %.loc15_13.2 [concrete = type] { -// CHECK:STDOUT: %.Self.loc15_10: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] -// CHECK:STDOUT: %.loc15_13.2: type = type_literal type [concrete = type] +// CHECK:STDOUT: %.loc17_13.1: type = splice_block %.loc17_13.2 [concrete = type] { +// CHECK:STDOUT: %.Self.loc17_10: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] +// CHECK:STDOUT: %.loc17_13.2: type = type_literal type [concrete = type] // CHECK:STDOUT: } -// CHECK:STDOUT: %T.loc15_10.2: type = symbolic_binding T, 0 [symbolic = %T.loc15_10.1 (constants.%T)] -// CHECK:STDOUT: %.loc15_23: type = splice_block %T.ref [symbolic = %T.loc15_10.1 (constants.%T)] { -// CHECK:STDOUT: %.Self.loc15_20: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] -// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc15_10.2 [symbolic = %T.loc15_10.1 (constants.%T)] +// CHECK:STDOUT: %T.loc17_10.2: type = symbolic_binding T, 0 [symbolic = %T.loc17_10.1 (constants.%T)] +// CHECK:STDOUT: %.loc17_23: type = splice_block %T.ref [symbolic = %T.loc17_10.1 (constants.%T)] { +// CHECK:STDOUT: %.Self.loc17_20: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] +// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc17_10.2 [symbolic = %T.loc17_10.1 (constants.%T)] // CHECK:STDOUT: } -// CHECK:STDOUT: %X.loc15_20.2: @C.%T.loc15_10.1 (%T) = symbolic_binding X, 1 [symbolic = %X.loc15_20.1 (constants.%X)] +// CHECK:STDOUT: %X.loc17_20.2: @C.%T.loc17_10.1 (%T) = symbolic_binding X, 1 [symbolic = %X.loc17_20.1 (constants.%X)] // CHECK:STDOUT: } // CHECK:STDOUT: %I.decl: type = interface_decl @I [concrete = constants.%I.type] {} {} // CHECK:STDOUT: impl_decl @bool.as.I.impl [concrete] {} { -// CHECK:STDOUT: %.loc28: type = type_literal bool [concrete = bool] +// CHECK:STDOUT: %.loc24: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @i32.as.I.impl [concrete] {} { @@ -147,16 +168,16 @@ impl i32 as I { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %I.WithSelf.F.decl: @I.WithSelf.%I.WithSelf.F.type (%I.WithSelf.F.type.dcc) = fn_decl @I.WithSelf.F [symbolic = @I.WithSelf.%I.WithSelf.F (constants.%I.WithSelf.F.ec6)] { -// CHECK:STDOUT: %c.param_patt: @I.WithSelf.F.%pattern_type (%pattern_type.59c) = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: @I.WithSelf.F.%pattern_type (%pattern_type.59c) = at_binding_pattern c, %c.param_patt [concrete] +// CHECK:STDOUT: %c.param_patt.loc21_9.1: @I.WithSelf.F.%pattern_type (%pattern_type.59c) = value_param_pattern [symbolic = %c.param_patt.loc21_9.2 (constants.%c.param_patt.397)] +// CHECK:STDOUT: %c.patt.loc21_9.1: @I.WithSelf.F.%pattern_type (%pattern_type.59c) = at_binding_pattern c, %c.param_patt.loc21_9.1 [symbolic = %c.patt.loc21_9.2 (constants.%c.patt.dac)] // CHECK:STDOUT: } { -// CHECK:STDOUT: %c.param: @I.WithSelf.F.%C.loc25_17.1 (%C.a21) = value_param call_param0 -// CHECK:STDOUT: %.loc25: type = splice_block %C.loc25_17.2 [symbolic = %C.loc25_17.1 (constants.%C.a21)] { +// CHECK:STDOUT: %c.param: @I.WithSelf.F.%C.loc21_17.1 (%C.a21) = value_param call_param0 +// CHECK:STDOUT: %.loc21: type = splice_block %C.loc21_17.2 [symbolic = %C.loc21_17.1 (constants.%C.a21)] { // CHECK:STDOUT: %C.ref: %C.type = name_ref C, file.%C.decl [concrete = constants.%C.generic] // CHECK:STDOUT: %Self.ref: %I.type = name_ref Self, @I.%Self [symbolic = %Self (constants.%Self.37e)] -// CHECK:STDOUT: %C.loc25_17.2: type = class_type @C, @C(constants.%I.type, constants.%Self.37e) [symbolic = %C.loc25_17.1 (constants.%C.a21)] +// CHECK:STDOUT: %C.loc21_17.2: type = class_type @C, @C(constants.%I.type, constants.%Self.37e) [symbolic = %C.loc21_17.1 (constants.%C.a21)] // CHECK:STDOUT: } -// CHECK:STDOUT: %c: @I.WithSelf.F.%C.loc25_17.1 (%C.a21) = value_binding c, %c.param +// CHECK:STDOUT: %c: @I.WithSelf.F.%C.loc21_17.1 (%C.a21) = value_binding c, %c.param // CHECK:STDOUT: } // CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, %I.WithSelf.F.decl [concrete = constants.%assoc0.6c9] // CHECK:STDOUT: @@ -171,18 +192,18 @@ impl i32 as I { // CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @bool.as.I.impl: %.loc28 as %I.ref { +// CHECK:STDOUT: impl @bool.as.I.impl: %.loc24 as %I.ref { // CHECK:STDOUT: %bool.as.I.impl.F.decl: %bool.as.I.impl.F.type = fn_decl @bool.as.I.impl.F [concrete = constants.%bool.as.I.impl.F] { -// CHECK:STDOUT: %c.param_patt: %pattern_type.85b = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.85b = at_binding_pattern c, %c.param_patt [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.85b = value_param_pattern [concrete = constants.%c.param_patt.ff4] +// CHECK:STDOUT: %c.patt: %pattern_type.85b = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt.e1c] // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %C.071 = value_param call_param0 -// CHECK:STDOUT: %.loc32_22: type = splice_block %C [concrete = constants.%C.071] { +// CHECK:STDOUT: %.loc28_22: type = splice_block %C [concrete = constants.%C.071] { // CHECK:STDOUT: %C.ref: %C.type = name_ref C, file.%C.decl [concrete = constants.%C.generic] -// CHECK:STDOUT: %.loc32_13: type = type_literal bool [concrete = bool] +// CHECK:STDOUT: %.loc28_13: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type] -// CHECK:STDOUT: %I.facet: %I.type = facet_value %.loc32_13, (constants.%I.impl_witness.020) [concrete = constants.%I.facet.11c] -// CHECK:STDOUT: %.loc32_18: %I.type = converted %.loc32_13, %I.facet [concrete = constants.%I.facet.11c] +// CHECK:STDOUT: %I.facet: %I.type = facet_value %.loc28_13, (constants.%I.impl_witness.020) [concrete = constants.%I.facet.11c] +// CHECK:STDOUT: %.loc28_18: %I.type = converted %.loc28_13, %I.facet [concrete = constants.%I.facet.11c] // CHECK:STDOUT: %C: type = class_type @C, @C(constants.%I.type, constants.%I.facet.11c) [concrete = constants.%C.071] // CHECK:STDOUT: } // CHECK:STDOUT: %c: %C.071 = value_binding c, %c.param @@ -199,39 +220,41 @@ impl i32 as I { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @i32.as.I.impl: %i32 as %I.ref { -// CHECK:STDOUT: %i32.as.I.impl.F.decl.loc43_18.1: %i32.as.I.impl.F.type.48cdab.1 = fn_decl @i32.as.I.impl.F.loc43_18.1 [concrete = constants.%i32.as.I.impl.F.bd5be1.1] { -// CHECK:STDOUT: %c.param_patt: %pattern_type.900 = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.900 = at_binding_pattern c, %c.param_patt [concrete] +// CHECK:STDOUT: %i32.as.I.impl.F.decl.loc39_18.1: %i32.as.I.impl.F.type.48cdab.1 = fn_decl @i32.as.I.impl.F.loc39_18.1 [concrete = constants.%i32.as.I.impl.F.bd5be1.1] { +// CHECK:STDOUT: %c.param_patt: %pattern_type.900 = value_param_pattern [concrete = constants.%c.param_patt.e0e] +// CHECK:STDOUT: %c.patt: %pattern_type.900 = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt.c85] // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %C.8dc = value_param call_param0 -// CHECK:STDOUT: %.loc43: type = splice_block %C [concrete = constants.%C.8dc] { +// CHECK:STDOUT: %.loc39: type = splice_block %C [concrete = constants.%C.8dc] { // CHECK:STDOUT: %C.ref: %C.type = name_ref C, file.%C.decl [concrete = constants.%C.generic] // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %C: type = class_type @C, @C(type, constants.%i32) [concrete = constants.%C.8dc] // CHECK:STDOUT: } // CHECK:STDOUT: %c: %C.8dc = value_binding c, %c.param // CHECK:STDOUT: } -// CHECK:STDOUT: %i32.as.I.impl.F.decl.loc43_18.2: %i32.as.I.impl.F.type.48cdab.2 = fn_decl @i32.as.I.impl.F.loc43_18.2 [concrete = constants.%i32.as.I.impl.F.bd5be1.2] { -// CHECK:STDOUT: %c.param_patt: %pattern_type.b7c = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.b7c = at_binding_pattern c, %c.param_patt [concrete] +// CHECK:STDOUT: %i32.as.I.impl.F.decl.loc39_18.2: %i32.as.I.impl.F.type.48cdab.2 = fn_decl @i32.as.I.impl.F.loc39_18.2 [concrete = constants.%i32.as.I.impl.F.bd5be1.2] { +// CHECK:STDOUT: %.1: %pattern_type.b7c = specific_constant constants.%c.param_patt.fb1, @I.WithSelf.F(constants.%I.facet.858) [concrete = constants.%c.param_patt.fb1] +// CHECK:STDOUT: %c.patt: %pattern_type.b7c = at_binding_pattern c, %.1 [concrete = constants.%c.patt.d03] // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %C.efa = value_param call_param0 // CHECK:STDOUT: %c: %C.efa = value_binding c, %c.param // CHECK:STDOUT: } -// CHECK:STDOUT: %I.impl_witness_table = impl_witness_table (%i32.as.I.impl.F.decl.loc43_18.2), @i32.as.I.impl [concrete] +// CHECK:STDOUT: %I.impl_witness_table = impl_witness_table (%i32.as.I.impl.F.decl.loc39_18.2), @i32.as.I.impl [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness %I.impl_witness_table [concrete = constants.%I.impl_witness.903] // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .C = -// CHECK:STDOUT: .F = %i32.as.I.impl.F.decl.loc43_18.1 +// CHECK:STDOUT: .F = %i32.as.I.impl.F.decl.loc39_18.1 // CHECK:STDOUT: extend %I.ref // CHECK:STDOUT: witness = %I.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic class @C(%T.loc15_10.2: type, %X.loc15_20.2: @C.%T.loc15_10.1 (%T)) { -// CHECK:STDOUT: %T.loc15_10.1: type = symbolic_binding T, 0 [symbolic = %T.loc15_10.1 (constants.%T)] -// CHECK:STDOUT: %X.loc15_20.1: @C.%T.loc15_10.1 (%T) = symbolic_binding X, 1 [symbolic = %X.loc15_20.1 (constants.%X)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc15_10.1 [symbolic = %pattern_type (constants.%pattern_type.51d1c4.1)] +// CHECK:STDOUT: generic class @C(%T.loc17_10.2: type, %X.loc17_20.2: @C.%T.loc17_10.1 (%T)) { +// CHECK:STDOUT: %T.patt.loc17_10.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc17_10.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.loc17_10.1: type = symbolic_binding T, 0 [symbolic = %T.loc17_10.1 (constants.%T)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc17_10.1 [symbolic = %pattern_type (constants.%pattern_type.51d1c4.1)] +// CHECK:STDOUT: %X.patt.loc17_20.2: @C.%pattern_type (%pattern_type.51d1c4.1) = symbolic_binding_pattern X, 1 [symbolic = %X.patt.loc17_20.2 (constants.%X.patt.9f0)] +// CHECK:STDOUT: %X.loc17_20.1: @C.%T.loc17_10.1 (%T) = symbolic_binding X, 1 [symbolic = %X.loc17_20.1 (constants.%X)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -246,28 +269,35 @@ impl i32 as I { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @I.WithSelf.F(@I.%Self: %I.type) { // CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.37e)] -// CHECK:STDOUT: %C.loc25_17.1: type = class_type @C, @C(constants.%I.type, %Self) [symbolic = %C.loc25_17.1 (constants.%C.a21)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %C.loc25_17.1 [symbolic = %pattern_type (constants.%pattern_type.59c)] +// CHECK:STDOUT: %C.loc21_17.1: type = class_type @C, @C(constants.%I.type, %Self) [symbolic = %C.loc21_17.1 (constants.%C.a21)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C.loc21_17.1 [symbolic = %pattern_type (constants.%pattern_type.59c)] +// CHECK:STDOUT: %c.param_patt.loc21_9.2: @I.WithSelf.F.%pattern_type (%pattern_type.59c) = value_param_pattern [symbolic = %c.param_patt.loc21_9.2 (constants.%c.param_patt.397)] +// CHECK:STDOUT: %c.patt.loc21_9.2: @I.WithSelf.F.%pattern_type (%pattern_type.59c) = at_binding_pattern c, %c.param_patt.loc21_9.2 [symbolic = %c.patt.loc21_9.2 (constants.%c.patt.dac)] // CHECK:STDOUT: -// CHECK:STDOUT: fn(%c.param: @I.WithSelf.F.%C.loc25_17.1 (%C.a21)); +// CHECK:STDOUT: fn(%c.param: @I.WithSelf.F.%C.loc21_17.1 (%C.a21)); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @bool.as.I.impl.F(%c.param: %C.071); // CHECK:STDOUT: -// CHECK:STDOUT: fn @i32.as.I.impl.F.loc43_18.1(%c.param: %C.8dc); +// CHECK:STDOUT: fn @i32.as.I.impl.F.loc39_18.1(%c.param: %C.8dc); // CHECK:STDOUT: -// CHECK:STDOUT: fn @i32.as.I.impl.F.loc43_18.2(%c.param: %C.efa) [thunk @i32.as.I.impl.%i32.as.I.impl.F.decl.loc43_18.1 for @I.WithSelf.%I.WithSelf.F.decl, @I.WithSelf.F(constants.%I.facet.858)] { +// CHECK:STDOUT: fn @i32.as.I.impl.F.loc39_18.2(%c.param: %C.efa) [thunk @i32.as.I.impl.%i32.as.I.impl.F.decl.loc39_18.1 for @I.WithSelf.%I.WithSelf.F.decl, @I.WithSelf.F(constants.%I.facet.858)] { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %F.ref: %i32.as.I.impl.F.type.48cdab.1 = name_ref F, @i32.as.I.impl.%i32.as.I.impl.F.decl.loc43_18.1 [concrete = constants.%i32.as.I.impl.F.bd5be1.1] -// CHECK:STDOUT: %.loc25: %C.8dc = converted %c.param, [concrete = ] +// CHECK:STDOUT: %F.ref: %i32.as.I.impl.F.type.48cdab.1 = name_ref F, @i32.as.I.impl.%i32.as.I.impl.F.decl.loc39_18.1 [concrete = constants.%i32.as.I.impl.F.bd5be1.1] +// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(constants.%C.8dc)> [concrete = constants.%ImplicitAs.type.803] +// CHECK:STDOUT: %.2: %ImplicitAs.assoc_type.385 = specific_constant imports.%Core.import_ref.484, @ImplicitAs.WithSelf(constants.%C.8dc, constants.%Self.294) [concrete = constants.%assoc0.82f] +// CHECK:STDOUT: %Convert.ref: %ImplicitAs.assoc_type.385 = name_ref Convert, %.2 [concrete = constants.%assoc0.82f] +// CHECK:STDOUT: %.3: %C.8dc = converted %c.param, [concrete = ] // CHECK:STDOUT: %i32.as.I.impl.F.call: init %empty_tuple.type = call %F.ref() // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%T, constants.%X) { -// CHECK:STDOUT: %T.loc15_10.1 => constants.%T -// CHECK:STDOUT: %X.loc15_20.1 => constants.%X +// CHECK:STDOUT: %T.patt.loc17_10.2 => constants.%T.patt +// CHECK:STDOUT: %T.loc17_10.1 => constants.%T // CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d1c4.1 +// CHECK:STDOUT: %X.patt.loc17_20.2 => constants.%X.patt.9f0 +// CHECK:STDOUT: %X.loc17_20.1 => constants.%X // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I.WithSelf(constants.%Self.37e) { @@ -278,21 +308,27 @@ impl i32 as I { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%I.type, constants.%Self.37e) { -// CHECK:STDOUT: %T.loc15_10.1 => constants.%I.type -// CHECK:STDOUT: %X.loc15_20.1 => constants.%Self.37e +// CHECK:STDOUT: %T.patt.loc17_10.2 => constants.%T.patt +// CHECK:STDOUT: %T.loc17_10.1 => constants.%I.type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.6cb +// CHECK:STDOUT: %X.patt.loc17_20.2 => constants.%X.patt.3b7 +// CHECK:STDOUT: %X.loc17_20.1 => constants.%Self.37e // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I.WithSelf.F(constants.%Self.37e) { // CHECK:STDOUT: %Self => constants.%Self.37e -// CHECK:STDOUT: %C.loc25_17.1 => constants.%C.a21 +// CHECK:STDOUT: %C.loc21_17.1 => constants.%C.a21 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.59c +// CHECK:STDOUT: %c.param_patt.loc21_9.2 => constants.%c.param_patt.397 +// CHECK:STDOUT: %c.patt.loc21_9.2 => constants.%c.patt.dac // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%I.type, constants.%I.facet.11c) { -// CHECK:STDOUT: %T.loc15_10.1 => constants.%I.type -// CHECK:STDOUT: %X.loc15_20.1 => constants.%I.facet.11c +// CHECK:STDOUT: %T.patt.loc17_10.2 => constants.%T.patt +// CHECK:STDOUT: %T.loc17_10.1 => constants.%I.type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.6cb +// CHECK:STDOUT: %X.patt.loc17_20.2 => constants.%X.patt.3b7 +// CHECK:STDOUT: %X.loc17_20.1 => constants.%I.facet.11c // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I.WithSelf(constants.%I.facet.11c) { @@ -304,14 +340,18 @@ impl i32 as I { // CHECK:STDOUT: // CHECK:STDOUT: specific @I.WithSelf.F(constants.%I.facet.11c) { // CHECK:STDOUT: %Self => constants.%I.facet.11c -// CHECK:STDOUT: %C.loc25_17.1 => constants.%C.071 +// CHECK:STDOUT: %C.loc21_17.1 => constants.%C.071 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.85b +// CHECK:STDOUT: %c.param_patt.loc21_9.2 => constants.%c.param_patt.ff4 +// CHECK:STDOUT: %c.patt.loc21_9.2 => constants.%c.patt.e1c // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(type, constants.%i32) { -// CHECK:STDOUT: %T.loc15_10.1 => type -// CHECK:STDOUT: %X.loc15_20.1 => constants.%i32 +// CHECK:STDOUT: %T.patt.loc17_10.2 => constants.%T.patt +// CHECK:STDOUT: %T.loc17_10.1 => type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.98f +// CHECK:STDOUT: %X.patt.loc17_20.2 => constants.%X.patt.014 +// CHECK:STDOUT: %X.loc17_20.1 => constants.%i32 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } @@ -325,14 +365,18 @@ impl i32 as I { // CHECK:STDOUT: // CHECK:STDOUT: specific @I.WithSelf.F(constants.%I.facet.858) { // CHECK:STDOUT: %Self => constants.%I.facet.858 -// CHECK:STDOUT: %C.loc25_17.1 => constants.%C.efa +// CHECK:STDOUT: %C.loc21_17.1 => constants.%C.efa // CHECK:STDOUT: %pattern_type => constants.%pattern_type.b7c +// CHECK:STDOUT: %c.param_patt.loc21_9.2 => constants.%c.param_patt.fb1 +// CHECK:STDOUT: %c.patt.loc21_9.2 => constants.%c.patt.d03 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%I.type, constants.%I.facet.858) { -// CHECK:STDOUT: %T.loc15_10.1 => constants.%I.type -// CHECK:STDOUT: %X.loc15_20.1 => constants.%I.facet.858 +// CHECK:STDOUT: %T.patt.loc17_10.2 => constants.%T.patt +// CHECK:STDOUT: %T.loc17_10.1 => constants.%I.type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.6cb +// CHECK:STDOUT: %X.patt.loc17_20.2 => constants.%X.patt.3b7 +// CHECK:STDOUT: %X.loc17_20.1 => constants.%I.facet.858 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/impl/forward_decls.carbon b/toolchain/check/testdata/impl/forward_decls.carbon index 2458451ef3b9..eddb3c688c31 100644 --- a/toolchain/check/testdata/impl/forward_decls.carbon +++ b/toolchain/check/testdata/impl/forward_decls.carbon @@ -617,6 +617,7 @@ impl C as Y {} // CHECK:STDOUT: %I.impl_witness: = impl_witness @C.as.I.impl.%I.impl_witness_table [concrete] // CHECK:STDOUT: %I.facet: %I.type = facet_value %C, (%I.impl_witness) [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = value_binding_pattern x [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -653,8 +654,10 @@ impl C as Y {} // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type = value_binding_pattern x [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = value_binding_pattern x [concrete = constants.%x.patt] // CHECK:STDOUT: } +// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc9_19: %empty_tuple.type = converted @__global_init.%.loc9, %empty_tuple [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc9_9.1: type = splice_block %impl.elem0 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %I.ref: type = name_ref I, %I.decl [concrete = constants.%I.type] @@ -663,8 +666,6 @@ impl C as Y {} // CHECK:STDOUT: %.loc9_9.2: %I.type = converted %C.ref, %I.facet [concrete = constants.%I.facet] // CHECK:STDOUT: %impl.elem0: type = impl_witness_access constants.%I.impl_witness, element0 [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: } -// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc9_19: %empty_tuple.type = converted @__global_init.%.loc9, %empty_tuple [concrete = constants.%empty_tuple] // CHECK:STDOUT: %x: %empty_tuple.type = value_binding x, %.loc9_19 // CHECK:STDOUT: impl_decl @C.as.I.impl [concrete] {} { // CHECK:STDOUT: %C.ref.loc11: type = name_ref C, file.%C.decl [concrete = constants.%C] @@ -757,6 +758,7 @@ impl C as Y {} // CHECK:STDOUT: %I.impl_witness: = impl_witness @C.as.I.impl.%I.impl_witness_table [concrete] // CHECK:STDOUT: %I.facet: %I.type = facet_value %C, (%I.impl_witness) [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = value_binding_pattern x [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -793,8 +795,10 @@ impl C as Y {} // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type = value_binding_pattern x [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = value_binding_pattern x [concrete = constants.%x.patt] // CHECK:STDOUT: } +// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc9_22: %empty_tuple.type = converted @__global_init.%.loc9, %empty_tuple [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc9_16.1: type = splice_block %impl.elem0 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %I.ref: type = name_ref I, %I.decl [concrete = constants.%I.type] @@ -805,8 +809,6 @@ impl C as Y {} // CHECK:STDOUT: %T.ref: %I.assoc_type = name_ref T, @T.%assoc0 [concrete = constants.%assoc0] // CHECK:STDOUT: %impl.elem0: type = impl_witness_access constants.%I.impl_witness, element0 [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: } -// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc9_22: %empty_tuple.type = converted @__global_init.%.loc9, %empty_tuple [concrete = constants.%empty_tuple] // CHECK:STDOUT: %x: %empty_tuple.type = value_binding x, %.loc9_22 // CHECK:STDOUT: impl_decl @C.as.I.impl [concrete] {} { // CHECK:STDOUT: %C.ref.loc11: type = name_ref C, file.%C.decl [concrete = constants.%C] @@ -917,7 +919,7 @@ impl C as Y {} // CHECK:STDOUT: %I.ref.loc7: type = name_ref I, file.%I.decl [concrete = constants.%I.type] // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: = value_binding_pattern x [concrete] +// CHECK:STDOUT: %x.patt: = value_binding_pattern x [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc13_16.1: type = splice_block %impl.elem0 [concrete = ] { // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] @@ -1095,6 +1097,7 @@ impl C as Y {} // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self.c39: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %U: type = symbolic_binding U, 0 [symbolic] // CHECK:STDOUT: %I.type.335: type = generic_interface_type @I [concrete] // CHECK:STDOUT: %I.generic: %I.type.335 = struct_value () [concrete] @@ -1135,7 +1138,7 @@ impl C as Y {} // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %I.decl: %I.type.335 = interface_decl @I [concrete = constants.%I.generic] { -// CHECK:STDOUT: %U.patt: %pattern_type = symbolic_binding_pattern U, 0 [concrete] +// CHECK:STDOUT: %U.patt.loc3_14.1: %pattern_type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc3_14.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc3_17.1: type = splice_block %.loc3_17.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.c39] @@ -1185,6 +1188,7 @@ impl C as Y {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @I(%U.loc3_14.2: type) { +// CHECK:STDOUT: %U.patt.loc3_14.2: %pattern_type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc3_14.2 (constants.%U.patt)] // CHECK:STDOUT: %U.loc3_14.1: type = symbolic_binding U, 0 [symbolic = %U.loc3_14.1 (constants.%U)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1236,12 +1240,14 @@ impl C as Y {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%U) { +// CHECK:STDOUT: %U.patt.loc3_14.2 => constants.%U.patt // CHECK:STDOUT: %U.loc3_14.1 => constants.%U // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I.WithSelf(constants.%U, constants.%Self.191) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%C) { +// CHECK:STDOUT: %U.patt.loc3_14.2 => constants.%U.patt // CHECK:STDOUT: %U.loc3_14.1 => constants.%C // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1281,6 +1287,7 @@ impl C as Y {} // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.6cb: type = pattern_type %I.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.6cb = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: %I.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] @@ -1288,6 +1295,8 @@ impl C as Y {} // CHECK:STDOUT: %I.facet: %I.type = facet_value %D, (%I.impl_witness) [concrete] // CHECK:STDOUT: %C.fd5: type = class_type @C, @C(%I.facet) [concrete] // CHECK:STDOUT: %pattern_type.0a8: type = pattern_type %C.fd5 [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.0a8 = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.0a8 = at_binding_pattern x, %x.param_patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic] @@ -1316,7 +1325,7 @@ impl C as Y {} // CHECK:STDOUT: %I.ref.loc5: type = name_ref I, file.%I.decl.loc3 [concrete = constants.%I.type] // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl.loc6: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.6cb = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc12: %pattern_type.6cb = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6: type = splice_block %I.ref.loc6 [concrete = constants.%I.type] { // CHECK:STDOUT: %.Self.loc6: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1325,8 +1334,8 @@ impl C as Y {} // CHECK:STDOUT: %T.loc6_10.2: %I.type = symbolic_binding T, 0 [symbolic = %T.loc6_10.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl.loc8: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %x.param_patt: %pattern_type.0a8 = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.0a8 = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.0a8 = value_param_pattern [concrete = constants.%x.param_patt] +// CHECK:STDOUT: %x.patt: %pattern_type.0a8 = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param.loc8: %C.fd5 = value_param call_param0 // CHECK:STDOUT: %.loc8_12.1: type = splice_block %C.loc8 [concrete = constants.%C.fd5] { @@ -1344,7 +1353,7 @@ impl C as Y {} // CHECK:STDOUT: %I.ref.loc11: type = name_ref I, file.%I.decl.loc3 [concrete = constants.%I.type] // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl.loc12: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.6cb = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc12: %pattern_type.6cb = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc12: type = splice_block %I.ref.loc12 [concrete = constants.%I.type] { // CHECK:STDOUT: %.Self.loc12: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1353,8 +1362,8 @@ impl C as Y {} // CHECK:STDOUT: %T.loc12: %I.type = symbolic_binding T, 0 [symbolic = %T.loc6_10.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl.loc14: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %x.param_patt: %pattern_type.0a8 = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.0a8 = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.0a8 = value_param_pattern [concrete = constants.%x.param_patt] +// CHECK:STDOUT: %x.patt: %pattern_type.0a8 = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param.loc14: %C.fd5 = value_param call_param0 // CHECK:STDOUT: %.loc14_19.1: type = splice_block %C.loc14 [concrete = constants.%C.fd5] { @@ -1397,6 +1406,7 @@ impl C as Y {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc6_10.2: %I.type) { +// CHECK:STDOUT: %T.patt.loc6: %pattern_type.6cb = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6 (constants.%T.patt)] // CHECK:STDOUT: %T.loc6_10.1: %I.type = symbolic_binding T, 0 [symbolic = %T.loc6_10.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1416,10 +1426,12 @@ impl C as Y {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%T) { +// CHECK:STDOUT: %T.patt.loc6 => constants.%T.patt // CHECK:STDOUT: %T.loc6_10.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%I.facet) { +// CHECK:STDOUT: %T.patt.loc6 => constants.%T.patt // CHECK:STDOUT: %T.loc6_10.1 => constants.%I.facet // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1648,13 +1660,17 @@ impl C as Y {} // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.ffc: type = pattern_type %X.type [concrete] +// CHECK:STDOUT: %_.patt: %pattern_type.ffc = symbolic_binding_pattern _, 0 [symbolic] // CHECK:STDOUT: %_: %X.type = symbolic_binding _, 0 [symbolic] // 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: %U.patt: %pattern_type.ffc = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %U: %X.type = symbolic_binding U, 0 [symbolic] // CHECK:STDOUT: %U.as_type: type = facet_access_type %U [symbolic] // CHECK:STDOUT: %pattern_type.fa2: type = pattern_type %U.as_type [symbolic] +// CHECK:STDOUT: %u.param_patt.796: %pattern_type.fa2 = value_param_pattern [symbolic] +// CHECK:STDOUT: %u.patt.dae: %pattern_type.fa2 = at_binding_pattern u, %u.param_patt.796 [symbolic] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] @@ -1664,10 +1680,14 @@ impl C as Y {} // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.98b = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = at_binding_pattern c, %c.param_patt [concrete] // CHECK:STDOUT: %H.type: type = fn_type @H [concrete] // CHECK:STDOUT: %H: %H.type = struct_value () [concrete] // CHECK:STDOUT: %X.facet: %X.type = facet_value %C, (%X.impl_witness) [concrete] // CHECK:STDOUT: %F.specific_fn: = specific_function %F, @F(%X.facet) [concrete] +// CHECK:STDOUT: %u.param_patt.162: %pattern_type.98b = value_param_pattern [concrete] +// CHECK:STDOUT: %u.patt.0e4: %pattern_type.98b = at_binding_pattern u, %u.param_patt.162 [concrete] // CHECK:STDOUT: %G.specific_fn: = specific_function %G, @G(%X.facet) [concrete] // CHECK:STDOUT: %Self.765: %Y.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %require_complete: = require_complete_type %U.as_type [symbolic] @@ -1695,7 +1715,7 @@ impl C as Y {} // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %X.decl.loc3: type = interface_decl @X [concrete = constants.%X.type] {} {} // CHECK:STDOUT: %F.decl.loc6: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %_.patt: %pattern_type.ffc = symbolic_binding_pattern _, 0 [concrete] +// CHECK:STDOUT: %_.patt.loc34: %pattern_type.ffc = symbolic_binding_pattern _, 0 [symbolic = %_.patt.loc6 (constants.%_.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6: type = splice_block %X.ref.loc6 [concrete = constants.%X.type] { // CHECK:STDOUT: %.Self.loc6: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1704,9 +1724,9 @@ impl C as Y {} // CHECK:STDOUT: %_.loc6_7.2: %X.type = symbolic_binding _, 0 [symbolic = %_.loc6_7.1 (constants.%_)] // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl.loc7: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %U.patt: %pattern_type.ffc = symbolic_binding_pattern U, 0 [concrete] -// CHECK:STDOUT: %u.param_patt: @G.%pattern_type (%pattern_type.fa2) = value_param_pattern [concrete] -// CHECK:STDOUT: %u.patt: @G.%pattern_type (%pattern_type.fa2) = at_binding_pattern u, %u.param_patt [concrete] +// CHECK:STDOUT: %U.patt.loc35: %pattern_type.ffc = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc7 (constants.%U.patt)] +// CHECK:STDOUT: %u.param_patt.loc35: @G.%pattern_type (%pattern_type.fa2) = value_param_pattern [symbolic = %u.param_patt.loc7 (constants.%u.param_patt.796)] +// CHECK:STDOUT: %u.patt.loc35: @G.%pattern_type (%pattern_type.fa2) = at_binding_pattern u, %u.param_patt.loc35 [symbolic = %u.patt.loc7 (constants.%u.patt.dae)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc7_10: type = splice_block %X.ref.loc7 [concrete = constants.%X.type] { // CHECK:STDOUT: %.Self.loc7: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1730,8 +1750,8 @@ impl C as Y {} // CHECK:STDOUT: %X.decl.loc16: type = interface_decl @X [concrete = constants.%X.type] {} {} // CHECK:STDOUT: %C.decl.loc23: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %H.decl: %H.type = fn_decl @H [concrete = constants.%H] { -// CHECK:STDOUT: %c.param_patt: %pattern_type.98b = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.98b = at_binding_pattern c, %c.param_patt [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.98b = value_param_pattern [concrete = constants.%c.param_patt] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref.loc25: type = name_ref C, file.%C.decl.loc9 [concrete = constants.%C] @@ -1739,7 +1759,7 @@ impl C as Y {} // CHECK:STDOUT: } // CHECK:STDOUT: %Y.decl.loc33: type = interface_decl @Y [concrete = constants.%Y.type] {} {} // CHECK:STDOUT: %F.decl.loc34: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %_.patt: %pattern_type.ffc = symbolic_binding_pattern _, 0 [concrete] +// CHECK:STDOUT: %_.patt.loc34: %pattern_type.ffc = symbolic_binding_pattern _, 0 [symbolic = %_.patt.loc6 (constants.%_.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc34: type = splice_block %X.ref.loc34 [concrete = constants.%X.type] { // CHECK:STDOUT: %.Self.loc34: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1748,9 +1768,9 @@ impl C as Y {} // CHECK:STDOUT: %_.loc34: %X.type = symbolic_binding _, 0 [symbolic = %_.loc6_7.1 (constants.%_)] // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl.loc35: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %U.patt: %pattern_type.ffc = symbolic_binding_pattern U, 0 [concrete] -// CHECK:STDOUT: %u.param_patt: @G.%pattern_type (%pattern_type.fa2) = value_param_pattern [concrete] -// CHECK:STDOUT: %u.patt: @G.%pattern_type (%pattern_type.fa2) = at_binding_pattern u, %u.param_patt [concrete] +// CHECK:STDOUT: %U.patt.loc35: %pattern_type.ffc = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc7 (constants.%U.patt)] +// CHECK:STDOUT: %u.param_patt.loc35: @G.%pattern_type (%pattern_type.fa2) = value_param_pattern [symbolic = %u.param_patt.loc7 (constants.%u.param_patt.796)] +// CHECK:STDOUT: %u.patt.loc35: @G.%pattern_type (%pattern_type.fa2) = at_binding_pattern u, %u.param_patt.loc35 [symbolic = %u.patt.loc7 (constants.%u.patt.dae)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc35_10: type = splice_block %X.ref.loc35 [concrete = constants.%X.type] { // CHECK:STDOUT: %.Self.loc35: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1828,6 +1848,7 @@ impl C as Y {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%_.loc6_7.2: %X.type) { +// CHECK:STDOUT: %_.patt.loc6: %pattern_type.ffc = symbolic_binding_pattern _, 0 [symbolic = %_.patt.loc6 (constants.%_.patt)] // CHECK:STDOUT: %_.loc6_7.1: %X.type = symbolic_binding _, 0 [symbolic = %_.loc6_7.1 (constants.%_)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1839,9 +1860,12 @@ impl C as Y {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @G(%U.loc7_7.2: %X.type) { +// CHECK:STDOUT: %U.patt.loc7: %pattern_type.ffc = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc7 (constants.%U.patt)] // CHECK:STDOUT: %U.loc7_7.1: %X.type = symbolic_binding U, 0 [symbolic = %U.loc7_7.1 (constants.%U)] // CHECK:STDOUT: %U.as_type.loc7_16.1: type = facet_access_type %U.loc7_7.1 [symbolic = %U.as_type.loc7_16.1 (constants.%U.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %U.as_type.loc7_16.1 [symbolic = %pattern_type (constants.%pattern_type.fa2)] +// CHECK:STDOUT: %u.param_patt.loc7: @G.%pattern_type (%pattern_type.fa2) = value_param_pattern [symbolic = %u.param_patt.loc7 (constants.%u.param_patt.796)] +// CHECK:STDOUT: %u.patt.loc7: @G.%pattern_type (%pattern_type.fa2) = at_binding_pattern u, %u.param_patt.loc7 [symbolic = %u.patt.loc7 (constants.%u.patt.dae)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %U.as_type.loc7_16.1 [symbolic = %require_complete (constants.%require_complete)] @@ -1862,21 +1886,27 @@ impl C as Y {} // CHECK:STDOUT: %F.call: init %empty_tuple.type = call %F.specific_fn() // CHECK:STDOUT: %G.ref: %G.type = name_ref G, file.%G.decl.loc7 [concrete = constants.%G] // CHECK:STDOUT: %c.ref: %C = name_ref c, %c -// CHECK:STDOUT: %X.facet.loc28: %X.type = facet_value constants.%C, (constants.%X.impl_witness) [concrete = constants.%X.facet] -// CHECK:STDOUT: %.loc28: %X.type = converted constants.%C, %X.facet.loc28 [concrete = constants.%X.facet] +// CHECK:STDOUT: %X.facet.loc28_6.1: %X.type = facet_value constants.%C, (constants.%X.impl_witness) [concrete = constants.%X.facet] +// CHECK:STDOUT: %.loc28_6.1: %X.type = converted constants.%C, %X.facet.loc28_6.1 [concrete = constants.%X.facet] +// CHECK:STDOUT: %X.facet.loc28_6.2: %X.type = facet_value constants.%C, (constants.%X.impl_witness) [concrete = constants.%X.facet] +// CHECK:STDOUT: %.loc28_6.2: %X.type = converted constants.%C, %X.facet.loc28_6.2 [concrete = constants.%X.facet] // CHECK:STDOUT: %G.specific_fn: = specific_function %G.ref, @G(constants.%X.facet) [concrete = constants.%G.specific_fn] // CHECK:STDOUT: %G.call: init %empty_tuple.type = call %G.specific_fn(%c.ref) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%_) { +// CHECK:STDOUT: %_.patt.loc6 => constants.%_.patt // CHECK:STDOUT: %_.loc6_7.1 => constants.%_ // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%U) { +// CHECK:STDOUT: %U.patt.loc7 => constants.%U.patt // CHECK:STDOUT: %U.loc7_7.1 => constants.%U // CHECK:STDOUT: %U.as_type.loc7_16.1 => constants.%U.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.fa2 +// CHECK:STDOUT: %u.param_patt.loc7 => constants.%u.param_patt.796 +// CHECK:STDOUT: %u.patt.loc7 => constants.%u.patt.dae // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @X.WithSelf(constants.%Self.b43) { @@ -1884,15 +1914,19 @@ impl C as Y {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%X.facet) { +// CHECK:STDOUT: %_.patt.loc6 => constants.%_.patt // CHECK:STDOUT: %_.loc6_7.1 => constants.%X.facet // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%X.facet) { +// CHECK:STDOUT: %U.patt.loc7 => constants.%U.patt // CHECK:STDOUT: %U.loc7_7.1 => constants.%X.facet // CHECK:STDOUT: %U.as_type.loc7_16.1 => constants.%C // CHECK:STDOUT: %pattern_type => constants.%pattern_type.98b +// CHECK:STDOUT: %u.param_patt.loc7 => constants.%u.param_patt.162 +// CHECK:STDOUT: %u.patt.loc7 => constants.%u.patt.0e4 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type diff --git a/toolchain/check/testdata/impl/generic_redeclaration.carbon b/toolchain/check/testdata/impl/generic_redeclaration.carbon index fefbfae81b67..da3d9b947151 100644 --- a/toolchain/check/testdata/impl/generic_redeclaration.carbon +++ b/toolchain/check/testdata/impl/generic_redeclaration.carbon @@ -134,18 +134,22 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.6cb: type = pattern_type %I.type [concrete] +// CHECK:STDOUT: %T.patt.1df: %pattern_type.6cb = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.dda: %I.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.b38: type = facet_access_type %T.dda [symbolic] // CHECK:STDOUT: %Interface.impl_witness.5b0: = impl_witness @T.as_type.as.Interface.impl.72f.%Interface.impl_witness_table, @T.as_type.as.Interface.impl.72f(%T.dda) [symbolic] // CHECK:STDOUT: %pattern_type.2c5: type = pattern_type %J.type [concrete] +// CHECK:STDOUT: %T.patt.ac1: %pattern_type.2c5 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.e40: %J.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.d90: type = facet_access_type %T.e40 [symbolic] // CHECK:STDOUT: %Interface.impl_witness.614: = impl_witness @T.as_type.as.Interface.impl.24e.%Interface.impl_witness_table, @T.as_type.as.Interface.impl.24e(%T.e40) [symbolic] // CHECK:STDOUT: %pattern_type.b64: type = pattern_type %K.type [concrete] +// CHECK:STDOUT: %T.patt.0ef: %pattern_type.b64 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.062: %K.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.1ea: type = facet_access_type %T.062 [symbolic] // CHECK:STDOUT: %Interface.impl_witness.bda: = impl_witness @T.as_type.as.Interface.impl.b21.%Interface.impl_witness_table, @T.as_type.as.Interface.impl.b21(%T.062) [symbolic] // CHECK:STDOUT: %pattern_type.25e: type = pattern_type %L.type [concrete] +// CHECK:STDOUT: %T.patt.b11: %pattern_type.25e = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.709: %L.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.56f: type = facet_access_type %T.709 [symbolic] // CHECK:STDOUT: %Interface.impl_witness.9d3: = impl_witness @T.as_type.as.Interface.impl.2b4.%Interface.impl_witness_table, @T.as_type.as.Interface.impl.2b4(%T.709) [symbolic] @@ -178,7 +182,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: %K.decl: type = interface_decl @K [concrete = constants.%K.type] {} {} // CHECK:STDOUT: %L.decl: type = interface_decl @L [concrete = constants.%L.type] {} {} // CHECK:STDOUT: impl_decl @T.as_type.as.Interface.impl.72f [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type.6cb = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc12_15.1: %pattern_type.6cb = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_15.2 (constants.%T.patt.1df)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc12: %I.type = name_ref T, %T.loc12_15.1 [symbolic = %T.loc12_15.2 (constants.%T.dda)] // CHECK:STDOUT: %T.as_type.loc12_21.1: type = facet_access_type %T.ref.loc12 [symbolic = %T.as_type.loc12_21.2 (constants.%T.as_type.b38)] @@ -191,7 +195,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: %T.loc12_15.1: %I.type = symbolic_binding T, 0 [symbolic = %T.loc12_15.2 (constants.%T.dda)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @T.as_type.as.Interface.impl.24e [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type.2c5 = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc13_15.1: %pattern_type.2c5 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_15.2 (constants.%T.patt.ac1)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc13: %J.type = name_ref T, %T.loc13_15.1 [symbolic = %T.loc13_15.2 (constants.%T.e40)] // CHECK:STDOUT: %T.as_type.loc13_21.1: type = facet_access_type %T.ref.loc13 [symbolic = %T.as_type.loc13_21.2 (constants.%T.as_type.d90)] @@ -204,7 +208,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: %T.loc13_15.1: %J.type = symbolic_binding T, 0 [symbolic = %T.loc13_15.2 (constants.%T.e40)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @T.as_type.as.Interface.impl.b21 [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type.b64 = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc14_15.1: %pattern_type.b64 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_15.2 (constants.%T.patt.0ef)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc14: %K.type = name_ref T, %T.loc14_15.1 [symbolic = %T.loc14_15.2 (constants.%T.062)] // CHECK:STDOUT: %T.as_type.loc14_21.1: type = facet_access_type %T.ref.loc14 [symbolic = %T.as_type.loc14_21.2 (constants.%T.as_type.1ea)] @@ -217,7 +221,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: %T.loc14_15.1: %K.type = symbolic_binding T, 0 [symbolic = %T.loc14_15.2 (constants.%T.062)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @T.as_type.as.Interface.impl.2b4 [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type.25e = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc15_15.1: %pattern_type.25e = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_15.2 (constants.%T.patt.b11)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc15: %L.type = name_ref T, %T.loc15_15.1 [symbolic = %T.loc15_15.2 (constants.%T.709)] // CHECK:STDOUT: %T.as_type.loc15_21.1: type = facet_access_type %T.ref.loc15 [symbolic = %T.as_type.loc15_21.2 (constants.%T.as_type.56f)] @@ -230,7 +234,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: %T.loc15_15.1: %L.type = symbolic_binding T, 0 [symbolic = %T.loc15_15.2 (constants.%T.709)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @T.as_type.as.Interface.impl.72f [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type.6cb = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc12_15.1: %pattern_type.6cb = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_15.2 (constants.%T.patt.1df)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc19: %I.type = name_ref T, %T.loc19 [symbolic = %T.loc12_15.2 (constants.%T.dda)] // CHECK:STDOUT: %T.as_type.loc19: type = facet_access_type %T.ref.loc19 [symbolic = %T.as_type.loc12_21.2 (constants.%T.as_type.b38)] @@ -243,7 +247,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: %T.loc19: %I.type = symbolic_binding T, 0 [symbolic = %T.loc12_15.2 (constants.%T.dda)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @T.as_type.as.Interface.impl.24e [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type.2c5 = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc13_15.1: %pattern_type.2c5 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_15.2 (constants.%T.patt.ac1)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc27: %J.type = name_ref T, %T.loc27 [symbolic = %T.loc13_15.2 (constants.%T.e40)] // CHECK:STDOUT: %T.as_type.loc27: type = facet_access_type %T.ref.loc27 [symbolic = %T.as_type.loc13_21.2 (constants.%T.as_type.d90)] @@ -256,7 +260,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: %T.loc27: %J.type = symbolic_binding T, 0 [symbolic = %T.loc13_15.2 (constants.%T.e40)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @T.as_type.as.Interface.impl.b21 [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type.b64 = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc14_15.1: %pattern_type.b64 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_15.2 (constants.%T.patt.0ef)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc35: %K.type = name_ref T, %T.loc35 [symbolic = %T.loc14_15.2 (constants.%T.062)] // CHECK:STDOUT: %T.as_type.loc35: type = facet_access_type %T.ref.loc35 [symbolic = %T.as_type.loc14_21.2 (constants.%T.as_type.1ea)] @@ -269,7 +273,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: %T.loc35: %K.type = symbolic_binding T, 0 [symbolic = %T.loc14_15.2 (constants.%T.062)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @T.as_type.as.Interface.impl.2b4 [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type.25e = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc15_15.1: %pattern_type.25e = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_15.2 (constants.%T.patt.b11)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc43: %L.type = name_ref T, %T.loc43 [symbolic = %T.loc15_15.2 (constants.%T.709)] // CHECK:STDOUT: %T.as_type.loc43: type = facet_access_type %T.ref.loc43 [symbolic = %T.as_type.loc15_21.2 (constants.%T.as_type.56f)] @@ -339,6 +343,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @T.as_type.as.Interface.impl.72f(%T.loc12_15.1: %I.type) { +// CHECK:STDOUT: %T.patt.loc12_15.2: %pattern_type.6cb = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_15.2 (constants.%T.patt.1df)] // CHECK:STDOUT: %T.loc12_15.2: %I.type = symbolic_binding T, 0 [symbolic = %T.loc12_15.2 (constants.%T.dda)] // CHECK:STDOUT: %T.as_type.loc12_21.2: type = facet_access_type %T.loc12_15.2 [symbolic = %T.as_type.loc12_21.2 (constants.%T.as_type.b38)] // CHECK:STDOUT: %Interface.impl_witness.loc12_35.2: = impl_witness %Interface.impl_witness_table, @T.as_type.as.Interface.impl.72f(%T.loc12_15.2) [symbolic = %Interface.impl_witness.loc12_35.2 (constants.%Interface.impl_witness.5b0)] @@ -356,6 +361,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @T.as_type.as.Interface.impl.24e(%T.loc13_15.1: %J.type) { +// CHECK:STDOUT: %T.patt.loc13_15.2: %pattern_type.2c5 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_15.2 (constants.%T.patt.ac1)] // CHECK:STDOUT: %T.loc13_15.2: %J.type = symbolic_binding T, 0 [symbolic = %T.loc13_15.2 (constants.%T.e40)] // CHECK:STDOUT: %T.as_type.loc13_21.2: type = facet_access_type %T.loc13_15.2 [symbolic = %T.as_type.loc13_21.2 (constants.%T.as_type.d90)] // CHECK:STDOUT: %Interface.impl_witness.loc13_35.2: = impl_witness %Interface.impl_witness_table, @T.as_type.as.Interface.impl.24e(%T.loc13_15.2) [symbolic = %Interface.impl_witness.loc13_35.2 (constants.%Interface.impl_witness.614)] @@ -373,6 +379,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @T.as_type.as.Interface.impl.b21(%T.loc14_15.1: %K.type) { +// CHECK:STDOUT: %T.patt.loc14_15.2: %pattern_type.b64 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_15.2 (constants.%T.patt.0ef)] // CHECK:STDOUT: %T.loc14_15.2: %K.type = symbolic_binding T, 0 [symbolic = %T.loc14_15.2 (constants.%T.062)] // CHECK:STDOUT: %T.as_type.loc14_21.2: type = facet_access_type %T.loc14_15.2 [symbolic = %T.as_type.loc14_21.2 (constants.%T.as_type.1ea)] // CHECK:STDOUT: %Interface.impl_witness.loc14_35.2: = impl_witness %Interface.impl_witness_table, @T.as_type.as.Interface.impl.b21(%T.loc14_15.2) [symbolic = %Interface.impl_witness.loc14_35.2 (constants.%Interface.impl_witness.bda)] @@ -390,6 +397,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @T.as_type.as.Interface.impl.2b4(%T.loc15_15.1: %L.type) { +// CHECK:STDOUT: %T.patt.loc15_15.2: %pattern_type.25e = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_15.2 (constants.%T.patt.b11)] // CHECK:STDOUT: %T.loc15_15.2: %L.type = symbolic_binding T, 0 [symbolic = %T.loc15_15.2 (constants.%T.709)] // CHECK:STDOUT: %T.as_type.loc15_21.2: type = facet_access_type %T.loc15_15.2 [symbolic = %T.as_type.loc15_21.2 (constants.%T.as_type.56f)] // CHECK:STDOUT: %Interface.impl_witness.loc15_35.2: = impl_witness %Interface.impl_witness_table, @T.as_type.as.Interface.impl.2b4(%T.loc15_15.2) [symbolic = %Interface.impl_witness.loc15_35.2 (constants.%Interface.impl_witness.9d3)] @@ -427,24 +435,28 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @T.as_type.as.Interface.impl.72f(constants.%T.dda) { +// CHECK:STDOUT: %T.patt.loc12_15.2 => constants.%T.patt.1df // CHECK:STDOUT: %T.loc12_15.2 => constants.%T.dda // CHECK:STDOUT: %T.as_type.loc12_21.2 => constants.%T.as_type.b38 // CHECK:STDOUT: %Interface.impl_witness.loc12_35.2 => constants.%Interface.impl_witness.5b0 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @T.as_type.as.Interface.impl.24e(constants.%T.e40) { +// CHECK:STDOUT: %T.patt.loc13_15.2 => constants.%T.patt.ac1 // CHECK:STDOUT: %T.loc13_15.2 => constants.%T.e40 // CHECK:STDOUT: %T.as_type.loc13_21.2 => constants.%T.as_type.d90 // CHECK:STDOUT: %Interface.impl_witness.loc13_35.2 => constants.%Interface.impl_witness.614 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @T.as_type.as.Interface.impl.b21(constants.%T.062) { +// CHECK:STDOUT: %T.patt.loc14_15.2 => constants.%T.patt.0ef // CHECK:STDOUT: %T.loc14_15.2 => constants.%T.062 // CHECK:STDOUT: %T.as_type.loc14_21.2 => constants.%T.as_type.1ea // CHECK:STDOUT: %Interface.impl_witness.loc14_35.2 => constants.%Interface.impl_witness.bda // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @T.as_type.as.Interface.impl.2b4(constants.%T.709) { +// CHECK:STDOUT: %T.patt.loc15_15.2 => constants.%T.patt.b11 // CHECK:STDOUT: %T.loc15_15.2 => constants.%T.709 // CHECK:STDOUT: %T.as_type.loc15_21.2 => constants.%T.as_type.56f // CHECK:STDOUT: %Interface.impl_witness.loc15_35.2 => constants.%Interface.impl_witness.9d3 @@ -476,6 +488,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type %I.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: %I.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] // CHECK:STDOUT: %J.impl_witness: = impl_witness @T.as_type.as.J.impl.377648.1.%J.impl_witness_table, @T.as_type.as.J.impl.377648.1(%T) [symbolic] @@ -499,7 +512,7 @@ impl forall [T:! type] T as I { // 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.as_type.as.J.impl.377648.1 [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc7_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: %I.type = name_ref T, %T.loc7_15.1 [symbolic = %T.loc7_15.2 (constants.%T)] // CHECK:STDOUT: %T.as_type.loc7_21.1: type = facet_access_type %T.ref [symbolic = %T.as_type.loc7_21.2 (constants.%T.as_type)] @@ -512,7 +525,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: %T.loc7_15.1: %I.type = symbolic_binding T, 0 [symbolic = %T.loc7_15.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @T.as_type.as.J.impl.377648.2 [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc15_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: %I.type = name_ref T, %T.loc15_15.1 [symbolic = %T.loc15_15.2 (constants.%T)] // CHECK:STDOUT: %T.as_type.loc15_21.1: type = facet_access_type %T.ref [symbolic = %T.as_type.loc15_21.2 (constants.%T.as_type)] @@ -549,6 +562,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @T.as_type.as.J.impl.377648.1(%T.loc7_15.1: %I.type) { +// CHECK:STDOUT: %T.patt.loc7_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_15.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc7_15.2: %I.type = symbolic_binding T, 0 [symbolic = %T.loc7_15.2 (constants.%T)] // CHECK:STDOUT: %T.as_type.loc7_21.2: type = facet_access_type %T.loc7_15.2 [symbolic = %T.as_type.loc7_21.2 (constants.%T.as_type)] // CHECK:STDOUT: %J.impl_witness.loc7_28.2: = impl_witness %J.impl_witness_table, @T.as_type.as.J.impl.377648.1(%T.loc7_15.2) [symbolic = %J.impl_witness.loc7_28.2 (constants.%J.impl_witness)] @@ -566,6 +580,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @T.as_type.as.J.impl.377648.2(%T.loc15_15.1: %I.type) { +// CHECK:STDOUT: %T.patt.loc15_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_15.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc15_15.2: %I.type = symbolic_binding T, 0 [symbolic = %T.loc15_15.2 (constants.%T)] // CHECK:STDOUT: %T.as_type.loc15_21.2: type = facet_access_type %T.loc15_15.2 [symbolic = %T.as_type.loc15_21.2 (constants.%T.as_type)] // CHECK:STDOUT: @@ -587,6 +602,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @T.as_type.as.J.impl.377648.1(constants.%T) { +// CHECK:STDOUT: %T.patt.loc7_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc7_15.2 => constants.%T // CHECK:STDOUT: %T.as_type.loc7_21.2 => constants.%T.as_type // CHECK:STDOUT: %J.impl_witness.loc7_28.2 => constants.%J.impl_witness @@ -597,6 +613,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @T.as_type.as.J.impl.377648.2(constants.%T) { +// CHECK:STDOUT: %T.patt.loc15_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc15_15.2 => constants.%T // CHECK:STDOUT: %T.as_type.loc15_21.2 => constants.%T.as_type // CHECK:STDOUT: } @@ -699,6 +716,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %I.impl_witness: = impl_witness @T.as.I.impl.812d8b.1.%I.impl_witness_table, @T.as.I.impl.812d8b.1(%T) [symbolic] // CHECK:STDOUT: %T.as.I.impl.A.type: type = fn_type @T.as.I.impl.A, @T.as.I.impl.812d8b.1(%T) [symbolic] @@ -710,6 +728,8 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %.262: Core.Form = init_form %empty_tuple.type [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern %return.param_patt, %empty_tuple.type [concrete] // CHECK:STDOUT: %T.as.I.impl.C.type: type = fn_type @T.as.I.impl.C, @T.as.I.impl.812d8b.2(%T) [symbolic] // CHECK:STDOUT: %T.as.I.impl.C: %T.as.I.impl.C.type = struct_value () [symbolic] // CHECK:STDOUT: %T.as.I.impl.D.type: type = fn_type @T.as.I.impl.D, @T.as.I.impl.812d8b.2(%T) [symbolic] @@ -732,7 +752,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %I.decl: type = interface_decl @I [concrete = constants.%I.type] {} {} // CHECK:STDOUT: impl_decl @T.as.I.impl.812d8b.1 [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc4_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc4_15.2 [symbolic = %T.loc4_15.1 (constants.%T)] // CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type] @@ -743,7 +763,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: %T.loc4_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc4_15.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @T.as.I.impl.812d8b.2 [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc15_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc15_15.2 [symbolic = %T.loc15_15.1 (constants.%T)] // CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type] @@ -767,6 +787,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @T.as.I.impl.812d8b.1(%T.loc4_15.2: type) { +// CHECK:STDOUT: %T.patt.loc4_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_15.1 (constants.%T)] // CHECK:STDOUT: %I.impl_witness.loc4_31.2: = impl_witness %I.impl_witness_table, @T.as.I.impl.812d8b.1(%T.loc4_15.1) [symbolic = %I.impl_witness.loc4_31.2 (constants.%I.impl_witness)] // CHECK:STDOUT: @@ -787,6 +808,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @T.as.I.impl.812d8b.2(%T.loc15_15.2: type) { +// CHECK:STDOUT: %T.patt.loc15_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_15.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc15_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc15_15.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -800,8 +822,8 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: impl: %T.ref as %I.ref { // CHECK:STDOUT: %T.as.I.impl.B.decl: @T.as.I.impl.812d8b.2.%T.as.I.impl.B.type (%T.as.I.impl.B.type) = fn_decl @T.as.I.impl.B [symbolic = @T.as.I.impl.812d8b.2.%T.as.I.impl.B (constants.%T.as.I.impl.B)] {} {} // CHECK:STDOUT: %T.as.I.impl.C.decl: @T.as.I.impl.812d8b.2.%T.as.I.impl.C.type (%T.as.I.impl.C.type) = fn_decl @T.as.I.impl.C [symbolic = @T.as.I.impl.812d8b.2.%T.as.I.impl.C (constants.%T.as.I.impl.C)] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern %return.param_patt, %.loc19_14.2 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern %return.param_patt, %.loc19_14.2 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc19_14.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc19_14.2: type = converted %.loc19_14.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -810,8 +832,8 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: %return: ref %empty_tuple.type = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %T.as.I.impl.D.decl: @T.as.I.impl.812d8b.2.%T.as.I.impl.D.type (%T.as.I.impl.D.type) = fn_decl @T.as.I.impl.D [symbolic = @T.as.I.impl.812d8b.2.%T.as.I.impl.D (constants.%T.as.I.impl.D)] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern %return.param_patt, %.loc20_14.2 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern %return.param_patt, %.loc20_14.2 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc20_14.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc20_14.2: type = converted %.loc20_14.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -881,6 +903,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @T.as.I.impl.812d8b.1(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_15.1 => constants.%T // CHECK:STDOUT: %I.impl_witness.loc4_31.2 => constants.%I.impl_witness // CHECK:STDOUT: @@ -896,6 +919,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @T.as.I.impl.812d8b.2(constants.%T) { +// CHECK:STDOUT: %T.patt.loc15_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc15_15.1 => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: diff --git a/toolchain/check/testdata/impl/impl_as.carbon b/toolchain/check/testdata/impl/impl_as.carbon index 9bffef42deb5..3c31f2383dfd 100644 --- a/toolchain/check/testdata/impl/impl_as.carbon +++ b/toolchain/check/testdata/impl/impl_as.carbon @@ -45,6 +45,8 @@ class C { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] @@ -122,8 +124,8 @@ class C { // CHECK:STDOUT: fn @C.as.Simple.impl.F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt // CHECK:STDOUT: %.loc23_26.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] diff --git a/toolchain/check/testdata/impl/impl_as_named_constraint.carbon b/toolchain/check/testdata/impl/impl_as_named_constraint.carbon index bad8b03c66ca..94ac51ef0203 100644 --- a/toolchain/check/testdata/impl/impl_as_named_constraint.carbon +++ b/toolchain/check/testdata/impl/impl_as_named_constraint.carbon @@ -313,7 +313,7 @@ impl () as Y {} // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %B.decl: %B.type = constraint_decl @B [concrete = constants.%empty_struct] { -// CHECK:STDOUT: %X.patt: = symbolic_binding_pattern X, 0 [concrete] +// CHECK:STDOUT: %X.patt: = symbolic_binding_pattern X, 0 [concrete = ] // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: %X: = symbolic_binding X, 0 [concrete = ] diff --git a/toolchain/check/testdata/impl/impl_forall.carbon b/toolchain/check/testdata/impl/impl_forall.carbon index 0739df920010..92aa08e43084 100644 --- a/toolchain/check/testdata/impl/impl_forall.carbon +++ b/toolchain/check/testdata/impl/impl_forall.carbon @@ -32,6 +32,7 @@ impl forall [T:! type] T as Simple { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Simple.impl_witness: = impl_witness @T.as.Simple.impl.%Simple.impl_witness_table, @T.as.Simple.impl(%T) [symbolic] // CHECK:STDOUT: %T.as.Simple.impl.F.type: type = fn_type @T.as.Simple.impl.F, @T.as.Simple.impl(%T) [symbolic] @@ -47,7 +48,7 @@ impl forall [T:! type] T as Simple { // CHECK:STDOUT: } // CHECK:STDOUT: %Simple.decl: type = interface_decl @Simple [concrete = constants.%Simple.type] {} {} // CHECK:STDOUT: impl_decl @T.as.Simple.impl [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc19_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc19_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc19_15.2 [symbolic = %T.loc19_15.1 (constants.%T)] // CHECK:STDOUT: %Simple.ref: type = name_ref Simple, file.%Simple.decl [concrete = constants.%Simple.type] @@ -76,6 +77,7 @@ impl forall [T:! type] T as Simple { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @T.as.Simple.impl(%T.loc19_15.2: type) { +// CHECK:STDOUT: %T.patt.loc19_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc19_15.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc19_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc19_15.1 (constants.%T)] // CHECK:STDOUT: %Simple.impl_witness.loc19_36.2: = impl_witness %Simple.impl_witness_table, @T.as.Simple.impl(%T.loc19_15.1) [symbolic = %Simple.impl_witness.loc19_36.2 (constants.%Simple.impl_witness)] // CHECK:STDOUT: @@ -118,6 +120,7 @@ impl forall [T:! type] T as Simple { // CHECK:STDOUT: specific @Simple.WithSelf.F(constants.%Self) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @T.as.Simple.impl(constants.%T) { +// CHECK:STDOUT: %T.patt.loc19_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc19_15.1 => constants.%T // CHECK:STDOUT: %Simple.impl_witness.loc19_36.2 => constants.%Simple.impl_witness // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/impl_thunk.carbon b/toolchain/check/testdata/impl/impl_thunk.carbon index fe768b7c2956..135a4b4f1f1f 100644 --- a/toolchain/check/testdata/impl/impl_thunk.carbon +++ b/toolchain/check/testdata/impl/impl_thunk.carbon @@ -153,16 +153,12 @@ impl A as X { } // --- fail_param_type_mismatch.carbon +// CHECK:STDERR: fail_param_type_mismatch.carbon: error: cannot implicitly convert expression of type `A` to `B` [ConversionFailure] +// CHECK:STDERR: fail_param_type_mismatch.carbon: note: type `A` does not implement interface `Core.ImplicitAs(B)` [MissingImplInMemberAccessInContext] library "[[@TEST_NAME]]"; interface I { - // CHECK:STDERR: fail_param_type_mismatch.carbon:[[@LINE+6]]:8: error: cannot implicitly convert expression of type `A` to `B` [ConversionFailure] - // CHECK:STDERR: fn F(a: Self); - // CHECK:STDERR: ^~~~~~~ - // CHECK:STDERR: fail_param_type_mismatch.carbon:[[@LINE+3]]:8: note: type `A` does not implement interface `Core.ImplicitAs(B)` [MissingImplInMemberAccessInContext] - // CHECK:STDERR: fn F(a: Self); - // CHECK:STDERR: ^~~~~~~ fn F(a: Self); } @@ -260,13 +256,11 @@ impl C as I { } // --- fail_param_type_incomplete.carbon +// CHECK:STDERR: fail_param_type_incomplete.carbon: error: parameter has incomplete type `B` in function definition [IncompleteTypeInFunctionParam] library "[[@TEST_NAME]]"; interface I(T:! type) { - // CHECK:STDERR: fail_param_type_incomplete.carbon:[[@LINE+3]]:8: error: parameter has incomplete type `B` in function definition [IncompleteTypeInFunctionParam] - // CHECK:STDERR: fn F(a: T); - // CHECK:STDERR: ^~~~ fn F(a: T); } @@ -277,20 +271,16 @@ class B; class C { impl as I(B) { - // CHECK:STDERR: fail_param_type_incomplete.carbon:[[@LINE+17]]:5: note: while building thunk calling this function [ThunkCallee] + // CHECK:STDERR: fail_param_type_incomplete.carbon:[[@LINE+13]]:5: note: while building thunk calling this function [ThunkCallee] // CHECK:STDERR: fn F(c: C); // CHECK:STDERR: ^~~~~~~~~~~ // CHECK:STDERR: - // CHECK:STDERR: fail_param_type_incomplete.carbon:[[@LINE-14]]:8: error: cannot implicitly convert expression of type `B` to `C` [ConversionFailure] - // CHECK:STDERR: fn F(a: T); - // CHECK:STDERR: ^~~~ - // CHECK:STDERR: fail_param_type_incomplete.carbon:[[@LINE-17]]:8: note: type `B` does not implement interface `Core.ImplicitAs(C)` [MissingImplInMemberAccessInContext] - // CHECK:STDERR: fn F(a: T); - // CHECK:STDERR: ^~~~ + // CHECK:STDERR: fail_param_type_incomplete.carbon: error: cannot implicitly convert expression of type `B` to `C` [ConversionFailure] + // CHECK:STDERR: fail_param_type_incomplete.carbon: note: type `B` does not implement interface `Core.ImplicitAs(C)` [MissingImplInMemberAccessInContext] // CHECK:STDERR: fail_param_type_incomplete.carbon:[[@LINE+7]]:10: note: initializing function parameter [InCallToFunctionParam] // CHECK:STDERR: fn F(c: C); // CHECK:STDERR: ^~~~ - // CHECK:STDERR: fail_param_type_incomplete.carbon:[[@LINE-23]]:3: note: while building thunk to match the signature of this function [ThunkSignature] + // CHECK:STDERR: fail_param_type_incomplete.carbon:[[@LINE-19]]:3: note: while building thunk to match the signature of this function [ThunkSignature] // CHECK:STDERR: fn F(a: T); // CHECK:STDERR: ^~~~~~~~~~~ // CHECK:STDERR: @@ -354,9 +344,13 @@ impl () as I({}) { // CHECK:STDOUT: %I.impl_witness: = impl_witness @empty_tuple.type.as.I.impl.%I.impl_witness_table [concrete] // CHECK:STDOUT: %struct_type.b.a.40c: type = struct_type {.b: %empty_struct_type, .a: %empty_tuple.type} [concrete] // CHECK:STDOUT: %pattern_type.231: type = pattern_type %struct_type.b.a.40c [concrete] +// CHECK:STDOUT: %y.param_patt: %pattern_type.231 = value_param_pattern [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.231 = at_binding_pattern y, %y.param_patt [concrete] // CHECK:STDOUT: %struct_type.d.c.b36: type = struct_type {.d: %empty_struct_type, .c: %empty_tuple.type} [concrete] // CHECK:STDOUT: %.4b1: Core.Form = init_form %struct_type.d.c.b36 [concrete] // CHECK:STDOUT: %pattern_type.844: type = pattern_type %struct_type.d.c.b36 [concrete] +// CHECK:STDOUT: %return.param_patt.4a9: %pattern_type.844 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.706: %pattern_type.844 = return_slot_pattern %return.param_patt.4a9, %struct_type.d.c.b36 [concrete] // CHECK:STDOUT: %empty_tuple.type.as.I.impl.F.type.48cdab.1: type = fn_type @empty_tuple.type.as.I.impl.F.loc10_48.1 [concrete] // CHECK:STDOUT: %empty_tuple.type.as.I.impl.F.bd5be1.1: %empty_tuple.type.as.I.impl.F.type.48cdab.1 = struct_value () [concrete] // CHECK:STDOUT: %I.facet: %I.type = facet_value %empty_tuple.type, (%I.impl_witness) [concrete] @@ -369,10 +363,10 @@ impl () as I({}) { // CHECK:STDOUT: // CHECK:STDOUT: impl @empty_tuple.type.as.I.impl: %.loc8_7.2 as %I.ref { // CHECK:STDOUT: %empty_tuple.type.as.I.impl.F.decl.loc10_48.1: %empty_tuple.type.as.I.impl.F.type.48cdab.1 = fn_decl @empty_tuple.type.as.I.impl.F.loc10_48.1 [concrete = constants.%empty_tuple.type.as.I.impl.F.bd5be1.1] { -// CHECK:STDOUT: %y.param_patt: %pattern_type.231 = value_param_pattern [concrete] -// CHECK:STDOUT: %y.patt: %pattern_type.231 = at_binding_pattern y, %y.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.844 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.844 = return_slot_pattern %return.param_patt, %struct_type.d.c [concrete] +// CHECK:STDOUT: %y.param_patt: %pattern_type.231 = value_param_pattern [concrete = constants.%y.param_patt] +// CHECK:STDOUT: %y.patt: %pattern_type.231 = at_binding_pattern y, %y.param_patt [concrete = constants.%y.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.844 = out_param_pattern [concrete = constants.%return.param_patt.4a9] +// CHECK:STDOUT: %return.patt: %pattern_type.844 = return_slot_pattern %return.param_patt, %struct_type.d.c [concrete = constants.%return.patt.706] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc10_38.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] // CHECK:STDOUT: %.loc10_38.2: type = converted %.loc10_38.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type] @@ -413,7 +407,7 @@ impl () as I({}) { // CHECK:STDOUT: %F.ref: %empty_tuple.type.as.I.impl.F.type.48cdab.1 = name_ref F, @empty_tuple.type.as.I.impl.%empty_tuple.type.as.I.impl.F.decl.loc10_48.1 [concrete = constants.%empty_tuple.type.as.I.impl.F.bd5be1.1] // CHECK:STDOUT: %.loc10_48.1: ref %struct_type.d.c.b36 = temporary_storage // CHECK:STDOUT: -// CHECK:STDOUT: %empty_tuple.type.as.I.impl.F.call: init %struct_type.d.c.b36 to %.loc10_48.1 = call %F.ref(%.loc5_9.3) +// CHECK:STDOUT: %empty_tuple.type.as.I.impl.F.call: init %struct_type.d.c.b36 to %.loc10_48.1 = call %F.ref(%.5) // CHECK:STDOUT: %.loc10_48.2: ref %struct_type.d.c.b36 = temporary %.loc10_48.1, %empty_tuple.type.as.I.impl.F.call // CHECK:STDOUT: %.loc10_48.3: ref %empty_tuple.type = struct_access %.loc10_48.2, element1 // CHECK:STDOUT: %.loc10_48.4: ref %empty_tuple.type = struct_access %return.param, element1 @@ -450,11 +444,17 @@ impl () as I({}) { // CHECK:STDOUT: %X.type: type = facet_type <@X> [concrete] // CHECK:STDOUT: %X.impl_witness: = impl_witness @B.as.X.impl.%X.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.9ef: type = pattern_type %A [concrete] +// CHECK:STDOUT: %self.param_patt.8fb: %pattern_type.9ef = ref_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.680: %pattern_type.9ef = at_binding_pattern self, %self.param_patt.8fb [concrete] // CHECK:STDOUT: %ptr.d43: type = ptr_type %A [concrete] // CHECK:STDOUT: %pattern_type.8a5: type = pattern_type %ptr.d43 [concrete] +// CHECK:STDOUT: %other.param_patt.7dd: %pattern_type.8a5 = value_param_pattern [concrete] +// CHECK:STDOUT: %other.patt.95f: %pattern_type.8a5 = at_binding_pattern other, %other.param_patt.7dd [concrete] // CHECK:STDOUT: %ptr.6b6: type = ptr_type %C [concrete] // CHECK:STDOUT: %.8fa: Core.Form = init_form %ptr.6b6 [concrete] // CHECK:STDOUT: %pattern_type.fcb: type = pattern_type %ptr.6b6 [concrete] +// CHECK:STDOUT: %return.param_patt.ada: %pattern_type.fcb = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.783: %pattern_type.fcb = return_slot_pattern %return.param_patt.ada, %ptr.6b6 [concrete] // CHECK:STDOUT: %B.as.X.impl.F.type.48cdab.1: type = fn_type @B.as.X.impl.F.loc14_37.1 [concrete] // CHECK:STDOUT: %B.as.X.impl.F.bd5be1.1: %B.as.X.impl.F.type.48cdab.1 = struct_value () [concrete] // CHECK:STDOUT: %X.facet: %X.type = facet_value %B, (%X.impl_witness) [concrete] @@ -481,12 +481,12 @@ impl () as I({}) { // CHECK:STDOUT: // CHECK:STDOUT: impl @B.as.X.impl: %B.ref as %X.ref { // CHECK:STDOUT: %B.as.X.impl.F.decl.loc14_37.1: %B.as.X.impl.F.type.48cdab.1 = fn_decl @B.as.X.impl.F.loc14_37.1 [concrete = constants.%B.as.X.impl.F.bd5be1.1] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.9ef = ref_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.9ef = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %other.param_patt: %pattern_type.8a5 = value_param_pattern [concrete] -// CHECK:STDOUT: %other.patt: %pattern_type.8a5 = at_binding_pattern other, %other.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.fcb = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.fcb = return_slot_pattern %return.param_patt, %ptr.loc14_36 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.9ef = ref_param_pattern [concrete = constants.%self.param_patt.8fb] +// CHECK:STDOUT: %self.patt: %pattern_type.9ef = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.680] +// CHECK:STDOUT: %other.param_patt: %pattern_type.8a5 = value_param_pattern [concrete = constants.%other.param_patt.7dd] +// CHECK:STDOUT: %other.patt: %pattern_type.8a5 = at_binding_pattern other, %other.param_patt [concrete = constants.%other.patt.95f] +// CHECK:STDOUT: %return.param_patt: %pattern_type.fcb = out_param_pattern [concrete = constants.%return.param_patt.ada] +// CHECK:STDOUT: %return.patt: %pattern_type.fcb = return_slot_pattern %return.param_patt, %ptr.loc14_36 [concrete = constants.%return.patt.783] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %ptr.loc14_36: type = ptr_type %C.ref [concrete = constants.%ptr.6b6] @@ -526,7 +526,7 @@ impl () as I({}) { // CHECK:STDOUT: %F.ref: %B.as.X.impl.F.type.48cdab.1 = name_ref F, @B.as.X.impl.%B.as.X.impl.F.decl.loc14_37.1 [concrete = constants.%B.as.X.impl.F.bd5be1.1] // CHECK:STDOUT: %B.as.X.impl.F.bound: = bound_method %self.param, %F.ref // CHECK:STDOUT: -// CHECK:STDOUT: %B.as.X.impl.F.call: init %ptr.6b6 = call %B.as.X.impl.F.bound(%.loc9_12.2, %.loc9_23.3) +// CHECK:STDOUT: %B.as.X.impl.F.call: init %ptr.6b6 = call %B.as.X.impl.F.bound(%.5, %.8) // CHECK:STDOUT: %.loc14_37.1: %ptr.6b6 = value_of_initializer %B.as.X.impl.F.call // CHECK:STDOUT: %.loc14_37.2: %ptr.6b6 = converted %B.as.X.impl.F.call, %.loc14_37.1 // CHECK:STDOUT: %.loc14_37.3: ref %C = deref %.loc14_37.2 @@ -550,6 +550,10 @@ impl () as I({}) { // CHECK:STDOUT: %X.type: type = facet_type <@X> [concrete] // CHECK:STDOUT: %X.impl_witness: = impl_witness @B.as.X.impl.%X.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.9ef: type = pattern_type %A [concrete] +// CHECK:STDOUT: %self.param_patt.04e: %pattern_type.9ef = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.312: %pattern_type.9ef = at_binding_pattern self, %self.param_patt.04e [concrete] +// CHECK:STDOUT: %other.param_patt.484: %pattern_type.9ef = value_param_pattern [concrete] +// CHECK:STDOUT: %other.patt.9f6: %pattern_type.9ef = at_binding_pattern other, %other.param_patt.484 [concrete] // CHECK:STDOUT: %B.as.X.impl.F.type.48cdab.1: type = fn_type @B.as.X.impl.F.loc13_26.1 [concrete] // CHECK:STDOUT: %B.as.X.impl.F.bd5be1.1: %B.as.X.impl.F.type.48cdab.1 = struct_value () [concrete] // CHECK:STDOUT: %X.facet: %X.type = facet_value %B, (%X.impl_witness) [concrete] @@ -559,10 +563,10 @@ impl () as I({}) { // CHECK:STDOUT: // CHECK:STDOUT: impl @B.as.X.impl: %B.ref as %X.ref { // CHECK:STDOUT: %B.as.X.impl.F.decl.loc13_26.1: %B.as.X.impl.F.type.48cdab.1 = fn_decl @B.as.X.impl.F.loc13_26.1 [concrete = constants.%B.as.X.impl.F.bd5be1.1] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.9ef = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.9ef = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %other.param_patt: %pattern_type.9ef = value_param_pattern [concrete] -// CHECK:STDOUT: %other.patt: %pattern_type.9ef = at_binding_pattern other, %other.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.9ef = value_param_pattern [concrete = constants.%self.param_patt.04e] +// CHECK:STDOUT: %self.patt: %pattern_type.9ef = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.312] +// CHECK:STDOUT: %other.param_patt: %pattern_type.9ef = value_param_pattern [concrete = constants.%other.param_patt.484] +// CHECK:STDOUT: %other.patt: %pattern_type.9ef = at_binding_pattern other, %other.param_patt [concrete = constants.%other.patt.9f6] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %A = value_param call_param0 // CHECK:STDOUT: %A.ref.loc13_14: type = name_ref A, file.%A.decl [concrete = constants.%A] @@ -592,7 +596,7 @@ impl () as I({}) { // CHECK:STDOUT: %F.ref: %B.as.X.impl.F.type.48cdab.1 = name_ref F, @B.as.X.impl.%B.as.X.impl.F.decl.loc13_26.1 [concrete = constants.%B.as.X.impl.F.bd5be1.1] // CHECK:STDOUT: %B.as.X.impl.F.bound: = bound_method %self.param, %F.ref // CHECK:STDOUT: -// CHECK:STDOUT: %B.as.X.impl.F.call: init %empty_tuple.type = call %B.as.X.impl.F.bound(%.loc8_8.3, %.loc8_19.3) +// CHECK:STDOUT: %B.as.X.impl.F.call: init %empty_tuple.type = call %B.as.X.impl.F.bound(%.5, %.8) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -605,11 +609,17 @@ impl () as I({}) { // CHECK:STDOUT: %X.type: type = facet_type <@X> [concrete] // CHECK:STDOUT: %X.impl_witness: = impl_witness @B.as.X.impl.%X.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.9ef: type = pattern_type %A [concrete] +// CHECK:STDOUT: %self.param_patt.8fb: %pattern_type.9ef = ref_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.680: %pattern_type.9ef = at_binding_pattern self, %self.param_patt.8fb [concrete] // CHECK:STDOUT: %ptr.d43: type = ptr_type %A [concrete] // CHECK:STDOUT: %pattern_type.8a5: type = pattern_type %ptr.d43 [concrete] +// CHECK:STDOUT: %other.param_patt.7dd: %pattern_type.8a5 = value_param_pattern [concrete] +// CHECK:STDOUT: %other.patt.95f: %pattern_type.8a5 = at_binding_pattern other, %other.param_patt.7dd [concrete] // CHECK:STDOUT: %ptr.6b6: type = ptr_type %C [concrete] // CHECK:STDOUT: %.8fa: Core.Form = init_form %ptr.6b6 [concrete] // CHECK:STDOUT: %pattern_type.fcb: type = pattern_type %ptr.6b6 [concrete] +// CHECK:STDOUT: %return.param_patt.ada: %pattern_type.fcb = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.783: %pattern_type.fcb = return_slot_pattern %return.param_patt.ada, %ptr.6b6 [concrete] // CHECK:STDOUT: %B.as.X.impl.F.type.48cdab.1: type = fn_type @B.as.X.impl.F.loc14_37.1 [concrete] // CHECK:STDOUT: %B.as.X.impl.F.bd5be1.1: %B.as.X.impl.F.type.48cdab.1 = struct_value () [concrete] // CHECK:STDOUT: %X.facet: %X.type = facet_value %B, (%X.impl_witness) [concrete] @@ -636,12 +646,12 @@ impl () as I({}) { // CHECK:STDOUT: // CHECK:STDOUT: impl @B.as.X.impl: %B.ref as %X.ref { // CHECK:STDOUT: %B.as.X.impl.F.decl.loc14_37.1: %B.as.X.impl.F.type.48cdab.1 = fn_decl @B.as.X.impl.F.loc14_37.1 [concrete = constants.%B.as.X.impl.F.bd5be1.1] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.9ef = ref_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.9ef = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %other.param_patt: %pattern_type.8a5 = value_param_pattern [concrete] -// CHECK:STDOUT: %other.patt: %pattern_type.8a5 = at_binding_pattern other, %other.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.fcb = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.fcb = return_slot_pattern %return.param_patt, %ptr.loc14_36 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.9ef = ref_param_pattern [concrete = constants.%self.param_patt.8fb] +// CHECK:STDOUT: %self.patt: %pattern_type.9ef = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.680] +// CHECK:STDOUT: %other.param_patt: %pattern_type.8a5 = value_param_pattern [concrete = constants.%other.param_patt.7dd] +// CHECK:STDOUT: %other.patt: %pattern_type.8a5 = at_binding_pattern other, %other.param_patt [concrete = constants.%other.patt.95f] +// CHECK:STDOUT: %return.param_patt: %pattern_type.fcb = out_param_pattern [concrete = constants.%return.param_patt.ada] +// CHECK:STDOUT: %return.patt: %pattern_type.fcb = return_slot_pattern %return.param_patt, %ptr.loc14_36 [concrete = constants.%return.patt.783] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %ptr.loc14_36: type = ptr_type %C.ref [concrete = constants.%ptr.6b6] @@ -681,7 +691,7 @@ impl () as I({}) { // CHECK:STDOUT: %F.ref: %B.as.X.impl.F.type.48cdab.1 = name_ref F, @B.as.X.impl.%B.as.X.impl.F.decl.loc14_37.1 [concrete = constants.%B.as.X.impl.F.bd5be1.1] // CHECK:STDOUT: %B.as.X.impl.F.bound: = bound_method %self.param, %F.ref // CHECK:STDOUT: -// CHECK:STDOUT: %B.as.X.impl.F.call: init %ptr.6b6 = call %B.as.X.impl.F.bound(%.loc9_12.2, %.loc9_23.3) +// CHECK:STDOUT: %B.as.X.impl.F.call: init %ptr.6b6 = call %B.as.X.impl.F.bound(%.5, %.8) // CHECK:STDOUT: %.loc14_37.1: %ptr.6b6 = value_of_initializer %B.as.X.impl.F.call // CHECK:STDOUT: %.loc14_37.2: %ptr.6b6 = converted %B.as.X.impl.F.call, %.loc14_37.1 // CHECK:STDOUT: %.loc14_37.3: ref %C = deref %.loc14_37.2 @@ -705,11 +715,17 @@ impl () as I({}) { // CHECK:STDOUT: %X.type: type = facet_type <@X> [concrete] // CHECK:STDOUT: %X.impl_witness: = impl_witness @B.as.X.impl.%X.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.9ef: type = pattern_type %A [concrete] +// CHECK:STDOUT: %self.param_patt.8fb: %pattern_type.9ef = ref_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.680: %pattern_type.9ef = at_binding_pattern self, %self.param_patt.8fb [concrete] // CHECK:STDOUT: %ptr.d43: type = ptr_type %A [concrete] // CHECK:STDOUT: %pattern_type.8a5: type = pattern_type %ptr.d43 [concrete] +// CHECK:STDOUT: %other.param_patt.7dd: %pattern_type.8a5 = value_param_pattern [concrete] +// CHECK:STDOUT: %other.patt.95f: %pattern_type.8a5 = at_binding_pattern other, %other.param_patt.7dd [concrete] // CHECK:STDOUT: %ptr.6b6: type = ptr_type %C [concrete] // CHECK:STDOUT: %.8fa: Core.Form = init_form %ptr.6b6 [concrete] // CHECK:STDOUT: %pattern_type.fcb: type = pattern_type %ptr.6b6 [concrete] +// CHECK:STDOUT: %return.param_patt.ada: %pattern_type.fcb = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.783: %pattern_type.fcb = return_slot_pattern %return.param_patt.ada, %ptr.6b6 [concrete] // CHECK:STDOUT: %B.as.X.impl.F.type.48cdab.1: type = fn_type @B.as.X.impl.F.loc14_37.1 [concrete] // CHECK:STDOUT: %B.as.X.impl.F.bd5be1.1: %B.as.X.impl.F.type.48cdab.1 = struct_value () [concrete] // CHECK:STDOUT: %X.facet: %X.type = facet_value %B, (%X.impl_witness) [concrete] @@ -736,12 +752,12 @@ impl () as I({}) { // CHECK:STDOUT: // CHECK:STDOUT: impl @B.as.X.impl: %B.ref as %X.ref { // CHECK:STDOUT: %B.as.X.impl.F.decl.loc14_37.1: %B.as.X.impl.F.type.48cdab.1 = fn_decl @B.as.X.impl.F.loc14_37.1 [concrete = constants.%B.as.X.impl.F.bd5be1.1] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.9ef = ref_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.9ef = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %other.param_patt: %pattern_type.8a5 = value_param_pattern [concrete] -// CHECK:STDOUT: %other.patt: %pattern_type.8a5 = at_binding_pattern other, %other.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.fcb = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.fcb = return_slot_pattern %return.param_patt, %ptr.loc14_36 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.9ef = ref_param_pattern [concrete = constants.%self.param_patt.8fb] +// CHECK:STDOUT: %self.patt: %pattern_type.9ef = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.680] +// CHECK:STDOUT: %other.param_patt: %pattern_type.8a5 = value_param_pattern [concrete = constants.%other.param_patt.7dd] +// CHECK:STDOUT: %other.patt: %pattern_type.8a5 = at_binding_pattern other, %other.param_patt [concrete = constants.%other.patt.95f] +// CHECK:STDOUT: %return.param_patt: %pattern_type.fcb = out_param_pattern [concrete = constants.%return.param_patt.ada] +// CHECK:STDOUT: %return.patt: %pattern_type.fcb = return_slot_pattern %return.param_patt, %ptr.loc14_36 [concrete = constants.%return.patt.783] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %ptr.loc14_36: type = ptr_type %C.ref [concrete = constants.%ptr.6b6] @@ -781,7 +797,7 @@ impl () as I({}) { // CHECK:STDOUT: %F.ref: %B.as.X.impl.F.type.48cdab.1 = name_ref F, @B.as.X.impl.%B.as.X.impl.F.decl.loc14_37.1 [concrete = constants.%B.as.X.impl.F.bd5be1.1] // CHECK:STDOUT: %B.as.X.impl.F.bound: = bound_method %self.param, %F.ref // CHECK:STDOUT: -// CHECK:STDOUT: %B.as.X.impl.F.call: init %ptr.6b6 = call %B.as.X.impl.F.bound(%.loc9_12.2, %.loc9_23.3) +// CHECK:STDOUT: %B.as.X.impl.F.call: init %ptr.6b6 = call %B.as.X.impl.F.bound(%.5, %.8) // CHECK:STDOUT: %.loc14_37.1: %ptr.6b6 = value_of_initializer %B.as.X.impl.F.call // CHECK:STDOUT: %.loc14_37.2: %ptr.6b6 = converted %B.as.X.impl.F.call, %.loc14_37.1 // CHECK:STDOUT: %.loc14_37.3: ref %C = deref %.loc14_37.2 @@ -805,6 +821,10 @@ impl () as I({}) { // CHECK:STDOUT: %X.type: type = facet_type <@X> [concrete] // CHECK:STDOUT: %X.impl_witness: = impl_witness @B.as.X.impl.%X.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.9ef: type = pattern_type %A [concrete] +// CHECK:STDOUT: %self.param_patt.04e: %pattern_type.9ef = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.312: %pattern_type.9ef = at_binding_pattern self, %self.param_patt.04e [concrete] +// CHECK:STDOUT: %other.param_patt.c59: %pattern_type.9ef = ref_param_pattern [concrete] +// CHECK:STDOUT: %other.patt.c26: %pattern_type.9ef = at_binding_pattern other, %other.param_patt.c59 [concrete] // CHECK:STDOUT: %B.as.X.impl.F.type.48cdab.1: type = fn_type @B.as.X.impl.F.loc13_30.1 [concrete] // CHECK:STDOUT: %B.as.X.impl.F.bd5be1.1: %B.as.X.impl.F.type.48cdab.1 = struct_value () [concrete] // CHECK:STDOUT: %X.facet: %X.type = facet_value %B, (%X.impl_witness) [concrete] @@ -814,10 +834,10 @@ impl () as I({}) { // CHECK:STDOUT: // CHECK:STDOUT: impl @B.as.X.impl: %B.ref as %X.ref { // CHECK:STDOUT: %B.as.X.impl.F.decl.loc13_30.1: %B.as.X.impl.F.type.48cdab.1 = fn_decl @B.as.X.impl.F.loc13_30.1 [concrete = constants.%B.as.X.impl.F.bd5be1.1] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.9ef = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.9ef = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %other.param_patt: %pattern_type.9ef = ref_param_pattern [concrete] -// CHECK:STDOUT: %other.patt: %pattern_type.9ef = at_binding_pattern other, %other.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.9ef = value_param_pattern [concrete = constants.%self.param_patt.04e] +// CHECK:STDOUT: %self.patt: %pattern_type.9ef = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.312] +// CHECK:STDOUT: %other.param_patt: %pattern_type.9ef = ref_param_pattern [concrete = constants.%other.param_patt.c59] +// CHECK:STDOUT: %other.patt: %pattern_type.9ef = at_binding_pattern other, %other.param_patt [concrete = constants.%other.patt.c26] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %A = value_param call_param0 // CHECK:STDOUT: %A.ref.loc13_14: type = name_ref A, file.%A.decl [concrete = constants.%A] @@ -847,7 +867,7 @@ impl () as I({}) { // CHECK:STDOUT: %F.ref: %B.as.X.impl.F.type.48cdab.1 = name_ref F, @B.as.X.impl.%B.as.X.impl.F.decl.loc13_30.1 [concrete = constants.%B.as.X.impl.F.bd5be1.1] // CHECK:STDOUT: %B.as.X.impl.F.bound: = bound_method %self.param, %F.ref // CHECK:STDOUT: -// CHECK:STDOUT: %B.as.X.impl.F.call: init %empty_tuple.type = call %B.as.X.impl.F.bound(%.loc8_8.3, %.loc8_23.2) +// CHECK:STDOUT: %B.as.X.impl.F.call: init %empty_tuple.type = call %B.as.X.impl.F.bound(%.5, %.7) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -863,6 +883,8 @@ impl () as I({}) { // CHECK:STDOUT: %X.impl_witness: = impl_witness @A.as.X.impl.%X.impl_witness_table [concrete] // CHECK:STDOUT: %.d83: Core.Form = init_form %B [concrete] // CHECK:STDOUT: %pattern_type.e39: type = pattern_type %B [concrete] +// CHECK:STDOUT: %return.param_patt.934: %pattern_type.e39 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.911: %pattern_type.e39 = return_slot_pattern %return.param_patt.934, %B [concrete] // CHECK:STDOUT: %A.as.X.impl.F.type.48cdab.1: type = fn_type @A.as.X.impl.F.loc23_14.1 [concrete] // CHECK:STDOUT: %A.as.X.impl.F.bd5be1.1: %A.as.X.impl.F.type.48cdab.1 = struct_value () [concrete] // CHECK:STDOUT: %X.facet: %X.type = facet_value %A, (%X.impl_witness) [concrete] @@ -874,8 +896,8 @@ impl () as I({}) { // CHECK:STDOUT: // CHECK:STDOUT: impl @A.as.X.impl: %A.ref as %X.ref { // CHECK:STDOUT: %A.as.X.impl.F.decl.loc23_14.1: %A.as.X.impl.F.type.48cdab.1 = fn_decl @A.as.X.impl.F.loc23_14.1 [concrete = constants.%A.as.X.impl.F.bd5be1.1] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.e39 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.e39 = return_slot_pattern %return.param_patt, %B.ref [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.e39 = out_param_pattern [concrete = constants.%return.param_patt.934] +// CHECK:STDOUT: %return.patt: %pattern_type.e39 = return_slot_pattern %return.param_patt, %B.ref [concrete = constants.%return.patt.911] // CHECK:STDOUT: } { // CHECK:STDOUT: %B.ref: type = name_ref B, file.%B.decl [concrete = constants.%B] // CHECK:STDOUT: %.loc23: Core.Form = init_form %B.ref [concrete = constants.%.d83] @@ -936,21 +958,32 @@ impl () as I({}) { // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness @empty_tuple.type.as.I.impl.%I.impl_witness_table [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %pattern_type.e81: type = pattern_type %Copy.type [concrete] +// CHECK:STDOUT: %U.patt.fe6: %pattern_type.e81 = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %U.f84: %Copy.type = symbolic_binding U, 0 [symbolic] // CHECK:STDOUT: %U.as_type.c1c: type = facet_access_type %U.f84 [symbolic] // CHECK:STDOUT: %pattern_type.2c66b4.2: type = pattern_type %U.as_type.c1c [symbolic] +// CHECK:STDOUT: %x.param_patt.1f4: %pattern_type.2c66b4.2 = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.f93: %pattern_type.2c66b4.2 = at_binding_pattern x, %x.param_patt.1f4 [symbolic] // CHECK:STDOUT: %.1ce700.2: Core.Form = init_form %U.as_type.c1c [symbolic] +// CHECK:STDOUT: %return.param_patt.bf4475.2: %pattern_type.2c66b4.2 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.f44: %pattern_type.2c66b4.2 = return_slot_pattern %return.param_patt.bf4475.2, %U.as_type.c1c [symbolic] // CHECK:STDOUT: %empty_tuple.type.as.I.impl.F.type.48cdab.1: type = fn_type @empty_tuple.type.as.I.impl.F.loc10_34.1 [concrete] // CHECK:STDOUT: %empty_tuple.type.as.I.impl.F.bd5be1.1: %empty_tuple.type.as.I.impl.F.type.48cdab.1 = struct_value () [concrete] // CHECK:STDOUT: %I.facet: %I.type = facet_value %empty_tuple.type, (%I.impl_witness) [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %ptr.e8f: type = ptr_type %T.67d [symbolic] // CHECK:STDOUT: %pattern_type.4f4: type = pattern_type %ptr.e8f [symbolic] +// CHECK:STDOUT: %x.param_patt.b5c: %pattern_type.4f4 = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.b28: %pattern_type.4f4 = at_binding_pattern x, %x.param_patt.b5c [symbolic] // CHECK:STDOUT: %.cb6: Core.Form = init_form %ptr.e8f [symbolic] +// CHECK:STDOUT: %return.param_patt.27f: %pattern_type.4f4 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.d67: %pattern_type.4f4 = return_slot_pattern %return.param_patt.27f, %ptr.e8f [symbolic] +// CHECK:STDOUT: %T.patt.d47: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %empty_tuple.type.as.I.impl.F.type.48cdab.2: type = fn_type @empty_tuple.type.as.I.impl.F.loc10_34.2 [concrete] // CHECK:STDOUT: %empty_tuple.type.as.I.impl.F.bd5be1.2: %empty_tuple.type.as.I.impl.F.type.48cdab.2 = struct_value () [concrete] // CHECK:STDOUT: %require_complete.d83f06.1: = require_complete_type %U.as_type.c1c [symbolic] @@ -981,11 +1014,11 @@ impl () as I({}) { // CHECK:STDOUT: // CHECK:STDOUT: impl @empty_tuple.type.as.I.impl: %.loc8_7.2 as %I.ref { // CHECK:STDOUT: %empty_tuple.type.as.I.impl.F.decl.loc10_34.1: %empty_tuple.type.as.I.impl.F.type.48cdab.1 = fn_decl @empty_tuple.type.as.I.impl.F.loc10_34.1 [concrete = constants.%empty_tuple.type.as.I.impl.F.bd5be1.1] { -// CHECK:STDOUT: %U.patt: %pattern_type.e81 = symbolic_binding_pattern U, 0 [concrete] -// CHECK:STDOUT: %x.param_patt: @empty_tuple.type.as.I.impl.F.loc10_34.1.%pattern_type (%pattern_type.2c66b4.2) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @empty_tuple.type.as.I.impl.F.loc10_34.1.%pattern_type (%pattern_type.2c66b4.2) = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @empty_tuple.type.as.I.impl.F.loc10_34.1.%pattern_type (%pattern_type.2c66b4.2) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @empty_tuple.type.as.I.impl.F.loc10_34.1.%pattern_type (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt, %.loc10_32.3 [concrete] +// CHECK:STDOUT: %U.patt.loc10_9.1: %pattern_type.e81 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc10_9.2 (constants.%U.patt.fe6)] +// CHECK:STDOUT: %x.param_patt.loc10_24.1: @empty_tuple.type.as.I.impl.F.loc10_34.1.%pattern_type (%pattern_type.2c66b4.2) = value_param_pattern [symbolic = %x.param_patt.loc10_24.2 (constants.%x.param_patt.1f4)] +// CHECK:STDOUT: %x.patt.loc10_24.1: @empty_tuple.type.as.I.impl.F.loc10_34.1.%pattern_type (%pattern_type.2c66b4.2) = at_binding_pattern x, %x.param_patt.loc10_24.1 [symbolic = %x.patt.loc10_24.2 (constants.%x.patt.f93)] +// CHECK:STDOUT: %return.param_patt.loc10_32.1: @empty_tuple.type.as.I.impl.F.loc10_34.1.%pattern_type (%pattern_type.2c66b4.2) = out_param_pattern [symbolic = %return.param_patt.loc10_32.2 (constants.%return.param_patt.bf4475.2)] +// CHECK:STDOUT: %return.patt.loc10_29.1: @empty_tuple.type.as.I.impl.F.loc10_34.1.%pattern_type (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt.loc10_32.1, %.loc10_32.3 [symbolic = %return.patt.loc10_29.2 (constants.%return.patt.f44)] // CHECK:STDOUT: } { // CHECK:STDOUT: %U.ref.loc10_32: %Copy.type = name_ref U, %U.loc10_9.2 [symbolic = %U.loc10_9.1 (constants.%U.f84)] // CHECK:STDOUT: %U.as_type.loc10_32: type = facet_access_type %U.ref.loc10_32 [symbolic = %U.as_type.loc10_26.1 (constants.%U.as_type.c1c)] @@ -1022,25 +1055,31 @@ impl () as I({}) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @empty_tuple.type.as.I.impl.F.loc10_34.1(%U.loc10_9.2: %Copy.type) { +// CHECK:STDOUT: %U.patt.loc10_9.2: %pattern_type.e81 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc10_9.2 (constants.%U.patt.fe6)] // CHECK:STDOUT: %U.loc10_9.1: %Copy.type = symbolic_binding U, 0 [symbolic = %U.loc10_9.1 (constants.%U.f84)] // CHECK:STDOUT: %U.as_type.loc10_26.1: type = facet_access_type %U.loc10_9.1 [symbolic = %U.as_type.loc10_26.1 (constants.%U.as_type.c1c)] // CHECK:STDOUT: %pattern_type: type = pattern_type %U.as_type.loc10_26.1 [symbolic = %pattern_type (constants.%pattern_type.2c66b4.2)] +// CHECK:STDOUT: %x.param_patt.loc10_24.2: @empty_tuple.type.as.I.impl.F.loc10_34.1.%pattern_type (%pattern_type.2c66b4.2) = value_param_pattern [symbolic = %x.param_patt.loc10_24.2 (constants.%x.param_patt.1f4)] +// CHECK:STDOUT: %x.patt.loc10_24.2: @empty_tuple.type.as.I.impl.F.loc10_34.1.%pattern_type (%pattern_type.2c66b4.2) = at_binding_pattern x, %x.param_patt.loc10_24.2 [symbolic = %x.patt.loc10_24.2 (constants.%x.patt.f93)] // CHECK:STDOUT: %.loc10_32.2: Core.Form = init_form %U.as_type.loc10_26.1 [symbolic = %.loc10_32.2 (constants.%.1ce700.2)] +// CHECK:STDOUT: %return.param_patt.loc10_32.2: @empty_tuple.type.as.I.impl.F.loc10_34.1.%pattern_type (%pattern_type.2c66b4.2) = out_param_pattern [symbolic = %return.param_patt.loc10_32.2 (constants.%return.param_patt.bf4475.2)] +// CHECK:STDOUT: %return.patt.loc10_29.2: @empty_tuple.type.as.I.impl.F.loc10_34.1.%pattern_type (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt.loc10_32.2, %U.as_type.loc10_26.1 [symbolic = %return.patt.loc10_29.2 (constants.%return.patt.f44)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %U.as_type.loc10_26.1 [symbolic = %require_complete (constants.%require_complete.d83f06.1)] // CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%U.loc10_9.1) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.c85f21.3)] -// CHECK:STDOUT: %.loc10_43.2: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %U.loc10_9.1 [symbolic = %.loc10_43.2 (constants.%.c29330.2)] +// CHECK:STDOUT: %.loc10_43.3: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %U.loc10_9.1 [symbolic = %.loc10_43.3 (constants.%.c29330.2)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %U.loc10_9.1, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.d9c332.2)] -// CHECK:STDOUT: %impl.elem0.loc10_43.2: @empty_tuple.type.as.I.impl.F.loc10_34.1.%.loc10_43.2 (%.c29330.2) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc10_43.2 (constants.%impl.elem0.bd2456.2)] +// CHECK:STDOUT: %impl.elem0.loc10_43.2: @empty_tuple.type.as.I.impl.F.loc10_34.1.%.loc10_43.3 (%.c29330.2) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc10_43.2 (constants.%impl.elem0.bd2456.2)] // CHECK:STDOUT: %specific_impl_fn.loc10_43.2: = specific_impl_function %impl.elem0.loc10_43.2, @Copy.WithSelf.Op(%U.loc10_9.1) [symbolic = %specific_impl_fn.loc10_43.2 (constants.%specific_impl_fn.e2af7e.2)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%x.param: @empty_tuple.type.as.I.impl.F.loc10_34.1.%U.as_type.loc10_26.1 (%U.as_type.c1c)) -> out %return.param: @empty_tuple.type.as.I.impl.F.loc10_34.1.%U.as_type.loc10_26.1 (%U.as_type.c1c) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %x.ref: @empty_tuple.type.as.I.impl.F.loc10_34.1.%U.as_type.loc10_26.1 (%U.as_type.c1c) = name_ref x, %x -// CHECK:STDOUT: %impl.elem0.loc10_43.1: @empty_tuple.type.as.I.impl.F.loc10_34.1.%.loc10_43.2 (%.c29330.2) = impl_witness_access constants.%Copy.lookup_impl_witness.d9c332.2, element0 [symbolic = %impl.elem0.loc10_43.2 (constants.%impl.elem0.bd2456.2)] +// CHECK:STDOUT: %impl.elem0.loc10_43.1: @empty_tuple.type.as.I.impl.F.loc10_34.1.%.loc10_43.3 (%.c29330.2) = impl_witness_access constants.%Copy.lookup_impl_witness.d9c332.2, element0 [symbolic = %impl.elem0.loc10_43.2 (constants.%impl.elem0.bd2456.2)] // CHECK:STDOUT: %bound_method.loc10_43.1: = bound_method %x.ref, %impl.elem0.loc10_43.1 // CHECK:STDOUT: %.loc10_43.1: %Copy.type = converted constants.%U.as_type.c1c, constants.%U.f84 [symbolic = %U.loc10_9.1 (constants.%U.f84)] +// CHECK:STDOUT: %.loc10_43.2: %Copy.type = converted constants.%U.as_type.c1c, constants.%U.f84 [symbolic = %U.loc10_9.1 (constants.%U.f84)] // CHECK:STDOUT: %specific_impl_fn.loc10_43.1: = specific_impl_function %impl.elem0.loc10_43.1, @Copy.WithSelf.Op(constants.%U.f84) [symbolic = %specific_impl_fn.loc10_43.2 (constants.%specific_impl_fn.e2af7e.2)] // CHECK:STDOUT: %bound_method.loc10_43.2: = bound_method %x.ref, %specific_impl_fn.loc10_43.1 // CHECK:STDOUT: %.loc10_32.1: ref @empty_tuple.type.as.I.impl.F.loc10_34.1.%U.as_type.loc10_26.1 (%U.as_type.c1c) = splice_block %return.param {} @@ -1049,21 +1088,23 @@ impl () as I({}) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @empty_tuple.type.as.I.impl.F.loc10_34.2(%T.loc5_9.2: type) { +// CHECK:STDOUT: generic fn @empty_tuple.type.as.I.impl.F.loc10_34.2(%T.2: type) { // CHECK:STDOUT: // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: -// CHECK:STDOUT: %.loc10_34.2: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.loc5_9.1) [symbolic = %.loc10_34.2 (constants.%.0e9)] +// CHECK:STDOUT: %.loc10_34.3: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.1) [symbolic = %.loc10_34.3 (constants.%.0e9)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %ptr, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.1da)] -// CHECK:STDOUT: %Copy.facet.loc10_34.2: %Copy.type = facet_value %ptr, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc10_34.2 (constants.%Copy.facet)] -// CHECK:STDOUT: %empty_tuple.type.as.I.impl.F.specific_fn.loc10_34.2: = specific_function constants.%empty_tuple.type.as.I.impl.F.bd5be1.1, @empty_tuple.type.as.I.impl.F.loc10_34.1(%Copy.facet.loc10_34.2) [symbolic = %empty_tuple.type.as.I.impl.F.specific_fn.loc10_34.2 (constants.%empty_tuple.type.as.I.impl.F.specific_fn)] +// CHECK:STDOUT: %Copy.facet.loc10_34.3: %Copy.type = facet_value %ptr, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc10_34.3 (constants.%Copy.facet)] +// CHECK:STDOUT: %empty_tuple.type.as.I.impl.F.specific_fn.loc10_34.2: = specific_function constants.%empty_tuple.type.as.I.impl.F.bd5be1.1, @empty_tuple.type.as.I.impl.F.loc10_34.1(%Copy.facet.loc10_34.3) [symbolic = %empty_tuple.type.as.I.impl.F.specific_fn.loc10_34.2 (constants.%empty_tuple.type.as.I.impl.F.specific_fn)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%x.param: @empty_tuple.type.as.I.impl.F.loc10_34.2.%ptr (%ptr.e8f)) -> out %return.param: @empty_tuple.type.as.I.impl.F.loc10_34.2.%ptr (%ptr.e8f) [thunk @empty_tuple.type.as.I.impl.%empty_tuple.type.as.I.impl.F.decl.loc10_34.1 for @I.WithSelf.%I.WithSelf.F.decl, @I.WithSelf.F(constants.%I.facet, constants.%T.67d)] { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %F.ref: %empty_tuple.type.as.I.impl.F.type.48cdab.1 = name_ref F, @empty_tuple.type.as.I.impl.%empty_tuple.type.as.I.impl.F.decl.loc10_34.1 [concrete = constants.%empty_tuple.type.as.I.impl.F.bd5be1.1] -// CHECK:STDOUT: %Copy.facet.loc10_34.1: %Copy.type = facet_value constants.%ptr.e8f, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc10_34.2 (constants.%Copy.facet)] -// CHECK:STDOUT: %.loc10_34.1: %Copy.type = converted constants.%ptr.e8f, %Copy.facet.loc10_34.1 [symbolic = %Copy.facet.loc10_34.2 (constants.%Copy.facet)] +// CHECK:STDOUT: %Copy.facet.loc10_34.1: %Copy.type = facet_value constants.%ptr.e8f, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc10_34.3 (constants.%Copy.facet)] +// CHECK:STDOUT: %.loc10_34.1: %Copy.type = converted constants.%ptr.e8f, %Copy.facet.loc10_34.1 [symbolic = %Copy.facet.loc10_34.3 (constants.%Copy.facet)] +// CHECK:STDOUT: %Copy.facet.loc10_34.2: %Copy.type = facet_value constants.%ptr.e8f, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc10_34.3 (constants.%Copy.facet)] +// CHECK:STDOUT: %.loc10_34.2: %Copy.type = converted constants.%ptr.e8f, %Copy.facet.loc10_34.2 [symbolic = %Copy.facet.loc10_34.3 (constants.%Copy.facet)] // CHECK:STDOUT: %empty_tuple.type.as.I.impl.F.specific_fn.loc10_34.1: = specific_function %F.ref, @empty_tuple.type.as.I.impl.F.loc10_34.1(constants.%Copy.facet) [symbolic = %empty_tuple.type.as.I.impl.F.specific_fn.loc10_34.2 (constants.%empty_tuple.type.as.I.impl.F.specific_fn)] // CHECK:STDOUT: %empty_tuple.type.as.I.impl.F.call: init @empty_tuple.type.as.I.impl.F.loc10_34.2.%ptr (%ptr.e8f) = call %empty_tuple.type.as.I.impl.F.specific_fn.loc10_34.1(%x.param) // CHECK:STDOUT: return %empty_tuple.type.as.I.impl.F.call @@ -1071,29 +1112,44 @@ impl () as I({}) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @empty_tuple.type.as.I.impl.F.loc10_34.1(constants.%U.f84) { +// CHECK:STDOUT: %U.patt.loc10_9.2 => constants.%U.patt.fe6 // CHECK:STDOUT: %U.loc10_9.1 => constants.%U.f84 // CHECK:STDOUT: %U.as_type.loc10_26.1 => constants.%U.as_type.c1c // CHECK:STDOUT: %pattern_type => constants.%pattern_type.2c66b4.2 +// CHECK:STDOUT: %x.param_patt.loc10_24.2 => constants.%x.param_patt.1f4 +// CHECK:STDOUT: %x.patt.loc10_24.2 => constants.%x.patt.f93 // CHECK:STDOUT: %.loc10_32.2 => constants.%.1ce700.2 +// CHECK:STDOUT: %return.param_patt.loc10_32.2 => constants.%return.param_patt.bf4475.2 +// CHECK:STDOUT: %return.patt.loc10_29.2 => constants.%return.patt.f44 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @empty_tuple.type.as.I.impl.F.loc10_34.2(constants.%T.67d) { -// CHECK:STDOUT: %T.loc5_9.1 => constants.%T.67d +// CHECK:STDOUT: %T.patt.2 => constants.%T.patt.d47 +// CHECK:STDOUT: %T.1 => constants.%T.67d // CHECK:STDOUT: %ptr => constants.%ptr.e8f // CHECK:STDOUT: %pattern_type => constants.%pattern_type.4f4 +// CHECK:STDOUT: %x.param_patt => constants.%x.param_patt.b5c +// CHECK:STDOUT: %x.patt.2 => constants.%x.patt.b28 +// CHECK:STDOUT: %return.param_patt => constants.%return.param_patt.27f +// CHECK:STDOUT: %return.patt => constants.%return.patt.d67 // CHECK:STDOUT: %.loc5 => constants.%.cb6 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @empty_tuple.type.as.I.impl.F.loc10_34.1(constants.%Copy.facet) { +// CHECK:STDOUT: %U.patt.loc10_9.2 => constants.%U.patt.fe6 // CHECK:STDOUT: %U.loc10_9.1 => constants.%Copy.facet // CHECK:STDOUT: %U.as_type.loc10_26.1 => constants.%ptr.e8f // CHECK:STDOUT: %pattern_type => constants.%pattern_type.4f4 +// CHECK:STDOUT: %x.param_patt.loc10_24.2 => constants.%x.param_patt.b5c +// CHECK:STDOUT: %x.patt.loc10_24.2 => constants.%x.patt.b28 // CHECK:STDOUT: %.loc10_32.2 => constants.%.cb6 +// CHECK:STDOUT: %return.param_patt.loc10_32.2 => constants.%return.param_patt.27f +// CHECK:STDOUT: %return.patt.loc10_29.2 => constants.%return.patt.d67 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.ef1 // CHECK:STDOUT: %Copy.WithSelf.Op.type => constants.%Copy.WithSelf.Op.type.884 -// CHECK:STDOUT: %.loc10_43.2 => constants.%.be5 +// CHECK:STDOUT: %.loc10_43.3 => constants.%.be5 // CHECK:STDOUT: %Copy.lookup_impl_witness => constants.%Copy.lookup_impl_witness.1da // CHECK:STDOUT: %impl.elem0.loc10_43.2 => constants.%impl.elem0.484 // CHECK:STDOUT: %specific_impl_fn.loc10_43.2 => constants.%specific_impl_fn.a76 @@ -1105,23 +1161,36 @@ impl () as I({}) { // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness @empty_tuple.type.as.I.impl.%I.impl_witness_table [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %pattern_type.e81: type = pattern_type %Copy.type [concrete] +// CHECK:STDOUT: %U.patt.fe6: %pattern_type.e81 = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %U.f84: %Copy.type = symbolic_binding U, 0 [symbolic] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %self.param_patt.154: %pattern_type.cb1 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.8c1: %pattern_type.cb1 = at_binding_pattern self, %self.param_patt.154 [concrete] // CHECK:STDOUT: %U.as_type.c1c: type = facet_access_type %U.f84 [symbolic] // CHECK:STDOUT: %pattern_type.2c66b4.2: type = pattern_type %U.as_type.c1c [symbolic] +// CHECK:STDOUT: %x.param_patt.1f4: %pattern_type.2c66b4.2 = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.f93: %pattern_type.2c66b4.2 = at_binding_pattern x, %x.param_patt.1f4 [symbolic] // CHECK:STDOUT: %.1ce700.2: Core.Form = init_form %U.as_type.c1c [symbolic] +// CHECK:STDOUT: %return.param_patt.bf4475.2: %pattern_type.2c66b4.2 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.f44: %pattern_type.2c66b4.2 = return_slot_pattern %return.param_patt.bf4475.2, %U.as_type.c1c [symbolic] // CHECK:STDOUT: %empty_tuple.type.as.I.impl.F.type.48cdab.1: type = fn_type @empty_tuple.type.as.I.impl.F.loc10_51.1 [concrete] // CHECK:STDOUT: %empty_tuple.type.as.I.impl.F.bd5be1.1: %empty_tuple.type.as.I.impl.F.type.48cdab.1 = struct_value () [concrete] // CHECK:STDOUT: %I.facet: %I.type = facet_value %empty_tuple.type, (%I.impl_witness) [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %ptr.e8f: type = ptr_type %T.67d [symbolic] // CHECK:STDOUT: %pattern_type.4f4: type = pattern_type %ptr.e8f [symbolic] +// CHECK:STDOUT: %x.param_patt.b5c: %pattern_type.4f4 = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.b28: %pattern_type.4f4 = at_binding_pattern x, %x.param_patt.b5c [symbolic] // CHECK:STDOUT: %.cb6: Core.Form = init_form %ptr.e8f [symbolic] +// CHECK:STDOUT: %return.param_patt.27f: %pattern_type.4f4 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.d67: %pattern_type.4f4 = return_slot_pattern %return.param_patt.27f, %ptr.e8f [symbolic] +// CHECK:STDOUT: %T.patt.d47: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %empty_tuple.type.as.I.impl.F.type.48cdab.2: type = fn_type @empty_tuple.type.as.I.impl.F.loc10_51.2 [concrete] // CHECK:STDOUT: %empty_tuple.type.as.I.impl.F.bd5be1.2: %empty_tuple.type.as.I.impl.F.type.48cdab.2 = struct_value () [concrete] // CHECK:STDOUT: %require_complete.d83f06.1: = require_complete_type %U.as_type.c1c [symbolic] @@ -1152,13 +1221,13 @@ impl () as I({}) { // CHECK:STDOUT: // CHECK:STDOUT: impl @empty_tuple.type.as.I.impl: %.loc8_7.2 as %I.ref { // CHECK:STDOUT: %empty_tuple.type.as.I.impl.F.decl.loc10_51.1: %empty_tuple.type.as.I.impl.F.type.48cdab.1 = fn_decl @empty_tuple.type.as.I.impl.F.loc10_51.1 [concrete = constants.%empty_tuple.type.as.I.impl.F.bd5be1.1] { -// CHECK:STDOUT: %U.patt: %pattern_type.e81 = symbolic_binding_pattern U, 0 [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.cb1 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.cb1 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %x.param_patt: @empty_tuple.type.as.I.impl.F.loc10_51.1.%pattern_type (%pattern_type.2c66b4.2) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @empty_tuple.type.as.I.impl.F.loc10_51.1.%pattern_type (%pattern_type.2c66b4.2) = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @empty_tuple.type.as.I.impl.F.loc10_51.1.%pattern_type (%pattern_type.2c66b4.2) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @empty_tuple.type.as.I.impl.F.loc10_51.1.%pattern_type (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt, %.loc10_49.3 [concrete] +// CHECK:STDOUT: %U.patt.loc10_9.1: %pattern_type.e81 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc10_9.2 (constants.%U.patt.fe6)] +// CHECK:STDOUT: %self.param_patt: %pattern_type.cb1 = value_param_pattern [concrete = constants.%self.param_patt.154] +// CHECK:STDOUT: %self.patt: %pattern_type.cb1 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.8c1] +// CHECK:STDOUT: %x.param_patt.loc10_41.1: @empty_tuple.type.as.I.impl.F.loc10_51.1.%pattern_type (%pattern_type.2c66b4.2) = value_param_pattern [symbolic = %x.param_patt.loc10_41.2 (constants.%x.param_patt.1f4)] +// CHECK:STDOUT: %x.patt.loc10_41.1: @empty_tuple.type.as.I.impl.F.loc10_51.1.%pattern_type (%pattern_type.2c66b4.2) = at_binding_pattern x, %x.param_patt.loc10_41.1 [symbolic = %x.patt.loc10_41.2 (constants.%x.patt.f93)] +// CHECK:STDOUT: %return.param_patt.loc10_49.1: @empty_tuple.type.as.I.impl.F.loc10_51.1.%pattern_type (%pattern_type.2c66b4.2) = out_param_pattern [symbolic = %return.param_patt.loc10_49.2 (constants.%return.param_patt.bf4475.2)] +// CHECK:STDOUT: %return.patt.loc10_46.1: @empty_tuple.type.as.I.impl.F.loc10_51.1.%pattern_type (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt.loc10_49.1, %.loc10_49.3 [symbolic = %return.patt.loc10_46.2 (constants.%return.patt.f44)] // CHECK:STDOUT: } { // CHECK:STDOUT: %U.ref.loc10_49: %Copy.type = name_ref U, %U.loc10_9.2 [symbolic = %U.loc10_9.1 (constants.%U.f84)] // CHECK:STDOUT: %U.as_type.loc10_49: type = facet_access_type %U.ref.loc10_49 [symbolic = %U.as_type.loc10_43.1 (constants.%U.as_type.c1c)] @@ -1201,25 +1270,31 @@ impl () as I({}) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @empty_tuple.type.as.I.impl.F.loc10_51.1(%U.loc10_9.2: %Copy.type) { +// CHECK:STDOUT: %U.patt.loc10_9.2: %pattern_type.e81 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc10_9.2 (constants.%U.patt.fe6)] // CHECK:STDOUT: %U.loc10_9.1: %Copy.type = symbolic_binding U, 0 [symbolic = %U.loc10_9.1 (constants.%U.f84)] // CHECK:STDOUT: %U.as_type.loc10_43.1: type = facet_access_type %U.loc10_9.1 [symbolic = %U.as_type.loc10_43.1 (constants.%U.as_type.c1c)] // CHECK:STDOUT: %pattern_type: type = pattern_type %U.as_type.loc10_43.1 [symbolic = %pattern_type (constants.%pattern_type.2c66b4.2)] +// CHECK:STDOUT: %x.param_patt.loc10_41.2: @empty_tuple.type.as.I.impl.F.loc10_51.1.%pattern_type (%pattern_type.2c66b4.2) = value_param_pattern [symbolic = %x.param_patt.loc10_41.2 (constants.%x.param_patt.1f4)] +// CHECK:STDOUT: %x.patt.loc10_41.2: @empty_tuple.type.as.I.impl.F.loc10_51.1.%pattern_type (%pattern_type.2c66b4.2) = at_binding_pattern x, %x.param_patt.loc10_41.2 [symbolic = %x.patt.loc10_41.2 (constants.%x.patt.f93)] // CHECK:STDOUT: %.loc10_49.2: Core.Form = init_form %U.as_type.loc10_43.1 [symbolic = %.loc10_49.2 (constants.%.1ce700.2)] +// CHECK:STDOUT: %return.param_patt.loc10_49.2: @empty_tuple.type.as.I.impl.F.loc10_51.1.%pattern_type (%pattern_type.2c66b4.2) = out_param_pattern [symbolic = %return.param_patt.loc10_49.2 (constants.%return.param_patt.bf4475.2)] +// CHECK:STDOUT: %return.patt.loc10_46.2: @empty_tuple.type.as.I.impl.F.loc10_51.1.%pattern_type (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt.loc10_49.2, %U.as_type.loc10_43.1 [symbolic = %return.patt.loc10_46.2 (constants.%return.patt.f44)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %U.as_type.loc10_43.1 [symbolic = %require_complete (constants.%require_complete.d83f06.1)] // CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%U.loc10_9.1) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.c85f21.3)] -// CHECK:STDOUT: %.loc10_60.2: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %U.loc10_9.1 [symbolic = %.loc10_60.2 (constants.%.c29330.2)] +// CHECK:STDOUT: %.loc10_60.3: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %U.loc10_9.1 [symbolic = %.loc10_60.3 (constants.%.c29330.2)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %U.loc10_9.1, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.d9c332.2)] -// CHECK:STDOUT: %impl.elem0.loc10_60.2: @empty_tuple.type.as.I.impl.F.loc10_51.1.%.loc10_60.2 (%.c29330.2) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc10_60.2 (constants.%impl.elem0.bd2456.2)] +// CHECK:STDOUT: %impl.elem0.loc10_60.2: @empty_tuple.type.as.I.impl.F.loc10_51.1.%.loc10_60.3 (%.c29330.2) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc10_60.2 (constants.%impl.elem0.bd2456.2)] // CHECK:STDOUT: %specific_impl_fn.loc10_60.2: = specific_impl_function %impl.elem0.loc10_60.2, @Copy.WithSelf.Op(%U.loc10_9.1) [symbolic = %specific_impl_fn.loc10_60.2 (constants.%specific_impl_fn.e2af7e.2)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: %empty_tuple.type, %x.param: @empty_tuple.type.as.I.impl.F.loc10_51.1.%U.as_type.loc10_43.1 (%U.as_type.c1c)) -> out %return.param: @empty_tuple.type.as.I.impl.F.loc10_51.1.%U.as_type.loc10_43.1 (%U.as_type.c1c) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %x.ref: @empty_tuple.type.as.I.impl.F.loc10_51.1.%U.as_type.loc10_43.1 (%U.as_type.c1c) = name_ref x, %x -// CHECK:STDOUT: %impl.elem0.loc10_60.1: @empty_tuple.type.as.I.impl.F.loc10_51.1.%.loc10_60.2 (%.c29330.2) = impl_witness_access constants.%Copy.lookup_impl_witness.d9c332.2, element0 [symbolic = %impl.elem0.loc10_60.2 (constants.%impl.elem0.bd2456.2)] +// CHECK:STDOUT: %impl.elem0.loc10_60.1: @empty_tuple.type.as.I.impl.F.loc10_51.1.%.loc10_60.3 (%.c29330.2) = impl_witness_access constants.%Copy.lookup_impl_witness.d9c332.2, element0 [symbolic = %impl.elem0.loc10_60.2 (constants.%impl.elem0.bd2456.2)] // CHECK:STDOUT: %bound_method.loc10_60.1: = bound_method %x.ref, %impl.elem0.loc10_60.1 // CHECK:STDOUT: %.loc10_60.1: %Copy.type = converted constants.%U.as_type.c1c, constants.%U.f84 [symbolic = %U.loc10_9.1 (constants.%U.f84)] +// CHECK:STDOUT: %.loc10_60.2: %Copy.type = converted constants.%U.as_type.c1c, constants.%U.f84 [symbolic = %U.loc10_9.1 (constants.%U.f84)] // CHECK:STDOUT: %specific_impl_fn.loc10_60.1: = specific_impl_function %impl.elem0.loc10_60.1, @Copy.WithSelf.Op(constants.%U.f84) [symbolic = %specific_impl_fn.loc10_60.2 (constants.%specific_impl_fn.e2af7e.2)] // CHECK:STDOUT: %bound_method.loc10_60.2: = bound_method %x.ref, %specific_impl_fn.loc10_60.1 // CHECK:STDOUT: %.loc10_49.1: ref @empty_tuple.type.as.I.impl.F.loc10_51.1.%U.as_type.loc10_43.1 (%U.as_type.c1c) = splice_block %return.param {} @@ -1228,22 +1303,24 @@ impl () as I({}) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @empty_tuple.type.as.I.impl.F.loc10_51.2(%T.loc5_9.2: type) { +// CHECK:STDOUT: generic fn @empty_tuple.type.as.I.impl.F.loc10_51.2(%T.2: type) { // CHECK:STDOUT: // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: -// CHECK:STDOUT: %.loc10_51.2: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.loc5_9.1) [symbolic = %.loc10_51.2 (constants.%.0e9)] +// CHECK:STDOUT: %.loc10_51.3: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.1) [symbolic = %.loc10_51.3 (constants.%.0e9)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %ptr, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.1da)] -// CHECK:STDOUT: %Copy.facet.loc10_51.2: %Copy.type = facet_value %ptr, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc10_51.2 (constants.%Copy.facet)] -// CHECK:STDOUT: %empty_tuple.type.as.I.impl.F.specific_fn.loc10_51.2: = specific_function constants.%empty_tuple.type.as.I.impl.F.bd5be1.1, @empty_tuple.type.as.I.impl.F.loc10_51.1(%Copy.facet.loc10_51.2) [symbolic = %empty_tuple.type.as.I.impl.F.specific_fn.loc10_51.2 (constants.%empty_tuple.type.as.I.impl.F.specific_fn)] +// CHECK:STDOUT: %Copy.facet.loc10_51.3: %Copy.type = facet_value %ptr, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc10_51.3 (constants.%Copy.facet)] +// CHECK:STDOUT: %empty_tuple.type.as.I.impl.F.specific_fn.loc10_51.2: = specific_function constants.%empty_tuple.type.as.I.impl.F.bd5be1.1, @empty_tuple.type.as.I.impl.F.loc10_51.1(%Copy.facet.loc10_51.3) [symbolic = %empty_tuple.type.as.I.impl.F.specific_fn.loc10_51.2 (constants.%empty_tuple.type.as.I.impl.F.specific_fn)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: %empty_tuple.type, %x.param: @empty_tuple.type.as.I.impl.F.loc10_51.2.%ptr (%ptr.e8f)) -> out %return.param: @empty_tuple.type.as.I.impl.F.loc10_51.2.%ptr (%ptr.e8f) [thunk @empty_tuple.type.as.I.impl.%empty_tuple.type.as.I.impl.F.decl.loc10_51.1 for @I.WithSelf.%I.WithSelf.F.decl, @I.WithSelf.F(constants.%I.facet, constants.%T.67d)] { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %F.ref: %empty_tuple.type.as.I.impl.F.type.48cdab.1 = name_ref F, @empty_tuple.type.as.I.impl.%empty_tuple.type.as.I.impl.F.decl.loc10_51.1 [concrete = constants.%empty_tuple.type.as.I.impl.F.bd5be1.1] // CHECK:STDOUT: %empty_tuple.type.as.I.impl.F.bound: = bound_method %self.param, %F.ref -// CHECK:STDOUT: %Copy.facet.loc10_51.1: %Copy.type = facet_value constants.%ptr.e8f, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc10_51.2 (constants.%Copy.facet)] -// CHECK:STDOUT: %.loc10_51.1: %Copy.type = converted constants.%ptr.e8f, %Copy.facet.loc10_51.1 [symbolic = %Copy.facet.loc10_51.2 (constants.%Copy.facet)] +// CHECK:STDOUT: %Copy.facet.loc10_51.1: %Copy.type = facet_value constants.%ptr.e8f, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc10_51.3 (constants.%Copy.facet)] +// CHECK:STDOUT: %.loc10_51.1: %Copy.type = converted constants.%ptr.e8f, %Copy.facet.loc10_51.1 [symbolic = %Copy.facet.loc10_51.3 (constants.%Copy.facet)] +// CHECK:STDOUT: %Copy.facet.loc10_51.2: %Copy.type = facet_value constants.%ptr.e8f, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc10_51.3 (constants.%Copy.facet)] +// CHECK:STDOUT: %.loc10_51.2: %Copy.type = converted constants.%ptr.e8f, %Copy.facet.loc10_51.2 [symbolic = %Copy.facet.loc10_51.3 (constants.%Copy.facet)] // CHECK:STDOUT: %empty_tuple.type.as.I.impl.F.specific_fn.loc10_51.1: = specific_function %F.ref, @empty_tuple.type.as.I.impl.F.loc10_51.1(constants.%Copy.facet) [symbolic = %empty_tuple.type.as.I.impl.F.specific_fn.loc10_51.2 (constants.%empty_tuple.type.as.I.impl.F.specific_fn)] // CHECK:STDOUT: %bound_method: = bound_method %self.param, %empty_tuple.type.as.I.impl.F.specific_fn.loc10_51.1 // CHECK:STDOUT: %empty_tuple.type.as.I.impl.F.call: init @empty_tuple.type.as.I.impl.F.loc10_51.2.%ptr (%ptr.e8f) = call %bound_method(%self.param, %x.param) @@ -1252,29 +1329,44 @@ impl () as I({}) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @empty_tuple.type.as.I.impl.F.loc10_51.1(constants.%U.f84) { +// CHECK:STDOUT: %U.patt.loc10_9.2 => constants.%U.patt.fe6 // CHECK:STDOUT: %U.loc10_9.1 => constants.%U.f84 // CHECK:STDOUT: %U.as_type.loc10_43.1 => constants.%U.as_type.c1c // CHECK:STDOUT: %pattern_type => constants.%pattern_type.2c66b4.2 +// CHECK:STDOUT: %x.param_patt.loc10_41.2 => constants.%x.param_patt.1f4 +// CHECK:STDOUT: %x.patt.loc10_41.2 => constants.%x.patt.f93 // CHECK:STDOUT: %.loc10_49.2 => constants.%.1ce700.2 +// CHECK:STDOUT: %return.param_patt.loc10_49.2 => constants.%return.param_patt.bf4475.2 +// CHECK:STDOUT: %return.patt.loc10_46.2 => constants.%return.patt.f44 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @empty_tuple.type.as.I.impl.F.loc10_51.2(constants.%T.67d) { -// CHECK:STDOUT: %T.loc5_9.1 => constants.%T.67d +// CHECK:STDOUT: %T.patt.2 => constants.%T.patt.d47 +// CHECK:STDOUT: %T.1 => constants.%T.67d // CHECK:STDOUT: %ptr => constants.%ptr.e8f // CHECK:STDOUT: %pattern_type => constants.%pattern_type.4f4 +// CHECK:STDOUT: %x.param_patt => constants.%x.param_patt.b5c +// CHECK:STDOUT: %x.patt.2 => constants.%x.patt.b28 +// CHECK:STDOUT: %return.param_patt => constants.%return.param_patt.27f +// CHECK:STDOUT: %return.patt => constants.%return.patt.d67 // CHECK:STDOUT: %.loc5 => constants.%.cb6 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @empty_tuple.type.as.I.impl.F.loc10_51.1(constants.%Copy.facet) { +// CHECK:STDOUT: %U.patt.loc10_9.2 => constants.%U.patt.fe6 // CHECK:STDOUT: %U.loc10_9.1 => constants.%Copy.facet // CHECK:STDOUT: %U.as_type.loc10_43.1 => constants.%ptr.e8f // CHECK:STDOUT: %pattern_type => constants.%pattern_type.4f4 +// CHECK:STDOUT: %x.param_patt.loc10_41.2 => constants.%x.param_patt.b5c +// CHECK:STDOUT: %x.patt.loc10_41.2 => constants.%x.patt.b28 // CHECK:STDOUT: %.loc10_49.2 => constants.%.cb6 +// CHECK:STDOUT: %return.param_patt.loc10_49.2 => constants.%return.param_patt.27f +// CHECK:STDOUT: %return.patt.loc10_46.2 => constants.%return.patt.d67 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.ef1 // CHECK:STDOUT: %Copy.WithSelf.Op.type => constants.%Copy.WithSelf.Op.type.884 -// CHECK:STDOUT: %.loc10_60.2 => constants.%.be5 +// CHECK:STDOUT: %.loc10_60.3 => constants.%.be5 // CHECK:STDOUT: %Copy.lookup_impl_witness => constants.%Copy.lookup_impl_witness.1da // CHECK:STDOUT: %impl.elem0.loc10_60.2 => constants.%impl.elem0.484 // CHECK:STDOUT: %specific_impl_fn.loc10_60.2 => constants.%specific_impl_fn.a76 @@ -1291,6 +1383,8 @@ impl () as I({}) { // CHECK:STDOUT: %struct_type.b.a.1b0: type = struct_type {.b: %empty_struct_type, .a: %empty_struct_type} [concrete] // CHECK:STDOUT: %.3fc: Core.Form = init_form %struct_type.b.a.1b0 [concrete] // CHECK:STDOUT: %pattern_type.914: type = pattern_type %struct_type.b.a.1b0 [concrete] +// CHECK:STDOUT: %return.param_patt.2c3: %pattern_type.914 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.5c9: %pattern_type.914 = return_slot_pattern %return.param_patt.2c3, %struct_type.b.a.1b0 [concrete] // CHECK:STDOUT: %empty_tuple.type.as.I.impl.F.type.48cdab.1: type = fn_type @empty_tuple.type.as.I.impl.F.loc10_29.1 [concrete] // CHECK:STDOUT: %empty_tuple.type.as.I.impl.F.bd5be1.1: %empty_tuple.type.as.I.impl.F.type.48cdab.1 = struct_value () [concrete] // CHECK:STDOUT: %I.facet: %I.type.81d = facet_value %empty_tuple.type, (%I.impl_witness) [concrete] @@ -1304,8 +1398,8 @@ impl () as I({}) { // CHECK:STDOUT: // CHECK:STDOUT: impl @empty_tuple.type.as.I.impl: %.loc8_7.2 as %I.type { // CHECK:STDOUT: %empty_tuple.type.as.I.impl.F.decl.loc10_29.1: %empty_tuple.type.as.I.impl.F.type.48cdab.1 = fn_decl @empty_tuple.type.as.I.impl.F.loc10_29.1 [concrete = constants.%empty_tuple.type.as.I.impl.F.bd5be1.1] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.914 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.914 = return_slot_pattern %return.param_patt, %struct_type.b.a [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.914 = out_param_pattern [concrete = constants.%return.param_patt.2c3] +// CHECK:STDOUT: %return.patt: %pattern_type.914 = return_slot_pattern %return.param_patt, %struct_type.b.a [concrete = constants.%return.patt.5c9] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc10_19.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] // CHECK:STDOUT: %.loc10_19.2: type = converted %.loc10_19.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type] diff --git a/toolchain/check/testdata/impl/impl_thunk_min_prelude.carbon b/toolchain/check/testdata/impl/impl_thunk_min_prelude.carbon index 0cf73a5d17b7..307187a8a51c 100644 --- a/toolchain/check/testdata/impl/impl_thunk_min_prelude.carbon +++ b/toolchain/check/testdata/impl/impl_thunk_min_prelude.carbon @@ -137,11 +137,13 @@ fn Call() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: %a.ref: %i32 = name_ref a, %a // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2.ecc] -// CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.914 = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.a23) [concrete = constants.%ImplicitAs.facet] -// CHECK:STDOUT: %.loc18_14.1: %ImplicitAs.type.914 = converted Core.IntLiteral, %ImplicitAs.facet [concrete = constants.%ImplicitAs.facet] +// CHECK:STDOUT: %ImplicitAs.facet.loc18_14.1: %ImplicitAs.type.914 = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.a23) [concrete = constants.%ImplicitAs.facet] +// CHECK:STDOUT: %.loc18_14.1: %ImplicitAs.type.914 = converted Core.IntLiteral, %ImplicitAs.facet.loc18_14.1 [concrete = constants.%ImplicitAs.facet] +// CHECK:STDOUT: %ImplicitAs.facet.loc18_14.2: %ImplicitAs.type.914 = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.a23) [concrete = constants.%ImplicitAs.facet] +// CHECK:STDOUT: %.loc18_14.2: %ImplicitAs.type.914 = converted Core.IntLiteral, %ImplicitAs.facet.loc18_14.2 [concrete = constants.%ImplicitAs.facet] // CHECK:STDOUT: -// CHECK:STDOUT: %.loc18_14.2: %i32.as.Add.impl.Op.type.79f953.1 = specific_constant @i32.as.Add.impl.%i32.as.Add.impl.Op.decl.loc8_35.1, @i32.as.Add.impl(constants.%ImplicitAs.facet) [concrete = constants.%i32.as.Add.impl.Op.0c3802.1] -// CHECK:STDOUT: %Op.ref.loc18: %i32.as.Add.impl.Op.type.79f953.1 = name_ref Op, %.loc18_14.2 [concrete = constants.%i32.as.Add.impl.Op.0c3802.1] +// CHECK:STDOUT: %.loc18_14.3: %i32.as.Add.impl.Op.type.79f953.1 = specific_constant @i32.as.Add.impl.%i32.as.Add.impl.Op.decl.loc8_35.1, @i32.as.Add.impl(constants.%ImplicitAs.facet) [concrete = constants.%i32.as.Add.impl.Op.0c3802.1] +// CHECK:STDOUT: %Op.ref.loc18: %i32.as.Add.impl.Op.type.79f953.1 = name_ref Op, %.loc18_14.3 [concrete = constants.%i32.as.Add.impl.Op.0c3802.1] // CHECK:STDOUT: %i32.as.Add.impl.Op.specific_fn: = specific_function %Op.ref.loc18, @i32.as.Add.impl.Op.loc8_35.1(constants.%ImplicitAs.facet) [concrete = constants.%i32.as.Add.impl.Op.specific_fn.f5e09b.2] // CHECK:STDOUT: %impl.elem0.loc18: %.1c5 = impl_witness_access constants.%ImplicitAs.impl_witness.a23, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] // CHECK:STDOUT: %bound_method.loc18_13.1: = bound_method %int_2, %impl.elem0.loc18 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.9f3] diff --git a/toolchain/check/testdata/impl/import_builtin_call.carbon b/toolchain/check/testdata/impl/import_builtin_call.carbon index 2649891cf0b8..c91fcffd27d4 100644 --- a/toolchain/check/testdata/impl/import_builtin_call.carbon +++ b/toolchain/check/testdata/impl/import_builtin_call.carbon @@ -117,6 +117,8 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: %int_64.fab: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %i64.builtin: type = int_type signed, %int_64.fab [concrete] // CHECK:STDOUT: %pattern_type.e13: type = pattern_type %i64.builtin [concrete] +// CHECK:STDOUT: %m.patt: %pattern_type.e13 = ref_binding_pattern m [concrete] +// CHECK:STDOUT: %m.var_patt: %pattern_type.e13 = var_pattern %m.patt [concrete] // CHECK:STDOUT: %Make.type: type = fn_type @Make [concrete] // CHECK:STDOUT: %Make: %Make.type = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] @@ -125,6 +127,8 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: %FromLiteral: %FromLiteral.type = struct_value () [concrete] // CHECK:STDOUT: %int_64.f82: %i32.builtin = int_value 64 [concrete] // CHECK:STDOUT: %Make.specific_fn.bb3: = specific_function %Make, @Make(%int_64.f82) [concrete] +// CHECK:STDOUT: %n.patt.914: %pattern_type.e13 = ref_binding_pattern n [concrete] +// CHECK:STDOUT: %n.var_patt: %pattern_type.e13 = var_pattern %n.patt.914 [concrete] // CHECK:STDOUT: %MakeFromClass.type: type = fn_type @MakeFromClass [concrete] // CHECK:STDOUT: %MakeFromClass: %MakeFromClass.type = struct_value () [concrete] // CHECK:STDOUT: %OtherInt: type = class_type @OtherInt [concrete] @@ -142,8 +146,8 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %m.patt: %pattern_type.e13 = ref_binding_pattern m [concrete] -// CHECK:STDOUT: %m.var_patt: %pattern_type.e13 = var_pattern %m.patt [concrete] +// CHECK:STDOUT: %m.patt: %pattern_type.e13 = ref_binding_pattern m [concrete = constants.%m.patt] +// CHECK:STDOUT: %m.var_patt: %pattern_type.e13 = var_pattern %m.patt [concrete = constants.%m.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %m.var: ref %i64.builtin = var %m.var_patt [concrete] // CHECK:STDOUT: %.loc7_14.1: type = splice_block %.loc7_14.3 [concrete = constants.%i64.builtin] { @@ -155,8 +159,8 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: } // CHECK:STDOUT: %m: ref %i64.builtin = ref_binding m, %m.var [concrete = %m.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: %pattern_type.e13 = ref_binding_pattern n [concrete] -// CHECK:STDOUT: %n.var_patt: %pattern_type.e13 = var_pattern %n.patt [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.e13 = ref_binding_pattern n [concrete = constants.%n.patt.914] +// CHECK:STDOUT: %n.var_patt: %pattern_type.e13 = var_pattern %n.patt [concrete = constants.%n.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %n.var: ref %i64.builtin = var %n.var_patt [concrete] // CHECK:STDOUT: %.loc8_14.1: type = splice_block %.loc8_14.3 [concrete = constants.%i64.builtin] { diff --git a/toolchain/check/testdata/impl/import_compound.carbon b/toolchain/check/testdata/impl/import_compound.carbon index 8dc7090715c0..0777c685dbf3 100644 --- a/toolchain/check/testdata/impl/import_compound.carbon +++ b/toolchain/check/testdata/impl/import_compound.carbon @@ -121,12 +121,16 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: %Self.bb5: %Instance.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.bb5 [symbolic] // CHECK:STDOUT: %pattern_type.362: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt.1c8: %pattern_type.362 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.34c: %pattern_type.362 = at_binding_pattern self, %self.param_patt.1c8 [symbolic] // CHECK:STDOUT: %Instance.WithSelf.G.type.f64: type = fn_type @Instance.WithSelf.G, @Instance.WithSelf(%Self.bb5) [symbolic] // CHECK:STDOUT: %Instance.WithSelf.G.395: %Instance.WithSelf.G.type.f64 = struct_value () [symbolic] // CHECK:STDOUT: %Instance.assoc_type: type = assoc_entity_type @Instance [concrete] // CHECK:STDOUT: %assoc0.94f: %Instance.assoc_type = assoc_entity element0, @Instance.WithSelf.%Instance.WithSelf.G.decl [concrete] // CHECK:STDOUT: %Instance.impl_witness: = impl_witness @struct_type.i.as.Instance.impl.%Instance.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.9b2: type = pattern_type %struct_type.i [concrete] +// CHECK:STDOUT: %self.param_patt.862: %pattern_type.9b2 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.ebb: %pattern_type.9b2 = at_binding_pattern self, %self.param_patt.862 [concrete] // CHECK:STDOUT: %struct_type.i.as.Instance.impl.G.type: type = fn_type @struct_type.i.as.Instance.impl.G [concrete] // CHECK:STDOUT: %struct_type.i.as.Instance.impl.G: %struct_type.i.as.Instance.impl.G.type = struct_value () [concrete] // CHECK:STDOUT: %Instance.facet: %Instance.type = facet_value %struct_type.i, (%Instance.impl_witness) [concrete] @@ -186,8 +190,8 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %Instance.WithSelf.G.decl: @Instance.WithSelf.%Instance.WithSelf.G.type (%Instance.WithSelf.G.type.f64) = fn_decl @Instance.WithSelf.G [symbolic = @Instance.WithSelf.%Instance.WithSelf.G (constants.%Instance.WithSelf.G.395)] { -// CHECK:STDOUT: %self.param_patt: @Instance.WithSelf.G.%pattern_type (%pattern_type.362) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @Instance.WithSelf.G.%pattern_type (%pattern_type.362) = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc12_8.1: @Instance.WithSelf.G.%pattern_type (%pattern_type.362) = value_param_pattern [symbolic = %self.param_patt.loc12_8.2 (constants.%self.param_patt.1c8)] +// CHECK:STDOUT: %self.patt.loc12_8.1: @Instance.WithSelf.G.%pattern_type (%pattern_type.362) = at_binding_pattern self, %self.param_patt.loc12_8.1 [symbolic = %self.patt.loc12_8.2 (constants.%self.patt.34c)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @Instance.WithSelf.G.%Self.as_type.loc12_8.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc12_8.1: type = splice_block %.loc12_8.2 [symbolic = %Self.as_type.loc12_8.1 (constants.%Self.as_type)] { @@ -220,8 +224,8 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: // CHECK:STDOUT: impl @struct_type.i.as.Instance.impl: %struct_type.i as %Instance.ref { // CHECK:STDOUT: %struct_type.i.as.Instance.impl.G.decl: %struct_type.i.as.Instance.impl.G.type = fn_decl @struct_type.i.as.Instance.impl.G [concrete = constants.%struct_type.i.as.Instance.impl.G] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.9b2 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.9b2 = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.9b2 = value_param_pattern [concrete = constants.%self.param_patt.862] +// CHECK:STDOUT: %self.patt: %pattern_type.9b2 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.ebb] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %struct_type.i = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @struct_type.i.as.Instance.impl.%struct_type.i [concrete = constants.%struct_type.i] @@ -249,6 +253,8 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: %Self: %Instance.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.bb5)] // CHECK:STDOUT: %Self.as_type.loc12_8.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc12_8.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc12_8.1 [symbolic = %pattern_type (constants.%pattern_type.362)] +// CHECK:STDOUT: %self.param_patt.loc12_8.2: @Instance.WithSelf.G.%pattern_type (%pattern_type.362) = value_param_pattern [symbolic = %self.param_patt.loc12_8.2 (constants.%self.param_patt.1c8)] +// CHECK:STDOUT: %self.patt.loc12_8.2: @Instance.WithSelf.G.%pattern_type (%pattern_type.362) = at_binding_pattern self, %self.param_patt.loc12_8.2 [symbolic = %self.patt.loc12_8.2 (constants.%self.patt.34c)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Instance.WithSelf.G.%Self.as_type.loc12_8.1 (%Self.as_type)); // CHECK:STDOUT: } @@ -287,6 +293,8 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: %Self => constants.%Self.bb5 // CHECK:STDOUT: %Self.as_type.loc12_8.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.362 +// CHECK:STDOUT: %self.param_patt.loc12_8.2 => constants.%self.param_patt.1c8 +// CHECK:STDOUT: %self.patt.loc12_8.2 => constants.%self.patt.34c // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Instance.WithSelf(constants.%Instance.facet) { @@ -300,6 +308,8 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: %Self => constants.%Instance.facet // CHECK:STDOUT: %Self.as_type.loc12_8.1 => constants.%struct_type.i // CHECK:STDOUT: %pattern_type => constants.%pattern_type.9b2 +// CHECK:STDOUT: %self.param_patt.loc12_8.2 => constants.%self.param_patt.862 +// CHECK:STDOUT: %self.patt.loc12_8.2 => constants.%self.patt.ebb // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_non-instance_success.carbon @@ -413,6 +423,8 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %struct_type.i: type = struct_type {.i: %empty_tuple.type} [concrete] // CHECK:STDOUT: %pattern_type.9b2: type = pattern_type %struct_type.i [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.9b2 = value_param_pattern [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.9b2 = at_binding_pattern n, %n.param_patt [concrete] // CHECK:STDOUT: %NonInstanceCallImportFail.type: type = fn_type @NonInstanceCallImportFail [concrete] // CHECK:STDOUT: %NonInstanceCallImportFail: %NonInstanceCallImportFail.type = struct_value () [concrete] // CHECK:STDOUT: %NonInstance.type: type = facet_type <@NonInstance> [concrete] @@ -451,8 +463,8 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %NonInstanceCallImportFail.decl: %NonInstanceCallImportFail.type = fn_decl @NonInstanceCallImportFail [concrete = constants.%NonInstanceCallImportFail] { -// CHECK:STDOUT: %n.param_patt: %pattern_type.9b2 = value_param_pattern [concrete] -// CHECK:STDOUT: %n.patt: %pattern_type.9b2 = at_binding_pattern n, %n.param_patt [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.9b2 = value_param_pattern [concrete = constants.%n.param_patt] +// CHECK:STDOUT: %n.patt: %pattern_type.9b2 = at_binding_pattern n, %n.param_patt [concrete = constants.%n.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %n.param: %struct_type.i = value_param call_param0 // CHECK:STDOUT: %.loc5_40: type = splice_block %struct_type.i [concrete = constants.%struct_type.i] { @@ -503,6 +515,8 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: %struct_type.i: type = struct_type {.i: %empty_tuple.type} [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %struct_type.i [concrete] // CHECK:STDOUT: %pattern_type.72c: type = pattern_type %ptr [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.72c = value_param_pattern [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.72c = at_binding_pattern p, %p.param_patt [concrete] // CHECK:STDOUT: %NonInstanceCallIndirectImport.type: type = fn_type @NonInstanceCallIndirectImport [concrete] // CHECK:STDOUT: %NonInstanceCallIndirectImport: %NonInstanceCallIndirectImport.type = struct_value () [concrete] // CHECK:STDOUT: %NonInstance.type: type = facet_type <@NonInstance> [concrete] @@ -541,8 +555,8 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %NonInstanceCallIndirectImport.decl: %NonInstanceCallIndirectImport.type = fn_decl @NonInstanceCallIndirectImport [concrete = constants.%NonInstanceCallIndirectImport] { -// CHECK:STDOUT: %p.param_patt: %pattern_type.72c = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.72c = at_binding_pattern p, %p.param_patt [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.72c = value_param_pattern [concrete = constants.%p.param_patt] +// CHECK:STDOUT: %p.patt: %pattern_type.72c = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %p.param: %ptr = value_param call_param0 // CHECK:STDOUT: %.loc5_45: type = splice_block %ptr [concrete = constants.%ptr] { @@ -594,6 +608,8 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %struct_type.i: type = struct_type {.i: %empty_tuple.type} [concrete] // CHECK:STDOUT: %pattern_type.9b2: type = pattern_type %struct_type.i [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.9b2 = value_param_pattern [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.9b2 = at_binding_pattern n, %n.param_patt [concrete] // CHECK:STDOUT: %InstanceCallImport.type: type = fn_type @InstanceCallImport [concrete] // CHECK:STDOUT: %InstanceCallImport: %InstanceCallImport.type = struct_value () [concrete] // CHECK:STDOUT: %Instance.type: type = facet_type <@Instance> [concrete] @@ -602,6 +618,8 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: %Instance.WithSelf.G.114: %Instance.WithSelf.G.type.8ba = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] // CHECK:STDOUT: %pattern_type.77c: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt.1d5: %pattern_type.77c = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.849: %pattern_type.77c = at_binding_pattern self, %self.param_patt.1d5 [symbolic] // CHECK:STDOUT: %Instance.assoc_type: type = assoc_entity_type @Instance [concrete] // CHECK:STDOUT: %assoc0: %Instance.assoc_type = assoc_entity element0, imports.%Main.import_ref.b3c [concrete] // CHECK:STDOUT: %Instance.impl_witness: = impl_witness imports.%Instance.impl_witness_table [concrete] @@ -613,6 +631,8 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: %struct_type.i.as.Instance.impl.G: %struct_type.i.as.Instance.impl.G.type = struct_value () [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %struct_type.i [concrete] // CHECK:STDOUT: %pattern_type.72c: type = pattern_type %ptr [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.72c = value_param_pattern [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.72c = at_binding_pattern p, %p.param_patt [concrete] // CHECK:STDOUT: %InstanceCallIndirectImport.type: type = fn_type @InstanceCallIndirectImport [concrete] // CHECK:STDOUT: %InstanceCallIndirectImport: %InstanceCallIndirectImport.type = struct_value () [concrete] // CHECK:STDOUT: %struct: %struct_type.i = struct_value (%empty_tuple) [concrete] @@ -648,8 +668,8 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %InstanceCallImport.decl: %InstanceCallImport.type = fn_decl @InstanceCallImport [concrete = constants.%InstanceCallImport] { -// CHECK:STDOUT: %n.param_patt: %pattern_type.9b2 = value_param_pattern [concrete] -// CHECK:STDOUT: %n.patt: %pattern_type.9b2 = at_binding_pattern n, %n.param_patt [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.9b2 = value_param_pattern [concrete = constants.%n.param_patt] +// CHECK:STDOUT: %n.patt: %pattern_type.9b2 = at_binding_pattern n, %n.param_patt [concrete = constants.%n.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %n.param: %struct_type.i = value_param call_param0 // CHECK:STDOUT: %.loc5_33: type = splice_block %struct_type.i [concrete = constants.%struct_type.i] { @@ -660,8 +680,8 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: %n: %struct_type.i = value_binding n, %n.param // CHECK:STDOUT: } // CHECK:STDOUT: %InstanceCallIndirectImport.decl: %InstanceCallIndirectImport.type = fn_decl @InstanceCallIndirectImport [concrete = constants.%InstanceCallIndirectImport] { -// CHECK:STDOUT: %p.param_patt: %pattern_type.72c = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.72c = at_binding_pattern p, %p.param_patt [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.72c = value_param_pattern [concrete = constants.%p.param_patt] +// CHECK:STDOUT: %p.patt: %pattern_type.72c = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %p.param: %ptr = value_param call_param0 // CHECK:STDOUT: %.loc9_42: type = splice_block %ptr [concrete = constants.%ptr] { @@ -703,6 +723,8 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: %Self: %Instance.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.77c)] +// CHECK:STDOUT: %self.param_patt: @Instance.WithSelf.G.%pattern_type (%pattern_type.77c) = value_param_pattern [symbolic = %self.param_patt (constants.%self.param_patt.1d5)] +// CHECK:STDOUT: %self.patt: @Instance.WithSelf.G.%pattern_type (%pattern_type.77c) = at_binding_pattern self, %self.param_patt [symbolic = %self.patt (constants.%self.patt.849)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -737,6 +759,8 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.77c +// CHECK:STDOUT: %self.param_patt => constants.%self.param_patt.1d5 +// CHECK:STDOUT: %self.patt => constants.%self.patt.849 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Instance.WithSelf(constants.%Instance.facet) { @@ -760,6 +784,8 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: %Instance.WithSelf.G: %Instance.WithSelf.G.type = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt: %pattern_type = at_binding_pattern self, %self.param_patt [symbolic] // CHECK:STDOUT: %Instance.assoc_type: type = assoc_entity_type @Instance [concrete] // CHECK:STDOUT: %assoc0: %Instance.assoc_type = assoc_entity element0, imports.%Main.import_ref.b3c [concrete] // CHECK:STDOUT: } @@ -821,6 +847,8 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: %Self: %Instance.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type)] +// CHECK:STDOUT: %self.param_patt: @Instance.WithSelf.G.%pattern_type (%pattern_type) = value_param_pattern [symbolic = %self.param_patt (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt: @Instance.WithSelf.G.%pattern_type (%pattern_type) = at_binding_pattern self, %self.param_patt [symbolic = %self.patt (constants.%self.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -836,5 +864,7 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type +// CHECK:STDOUT: %self.param_patt => constants.%self.param_patt +// CHECK:STDOUT: %self.patt => constants.%self.patt // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/import_extend_impl.carbon b/toolchain/check/testdata/impl/import_extend_impl.carbon index 6c95ffa7b423..aa1cab36e9e1 100644 --- a/toolchain/check/testdata/impl/import_extend_impl.carbon +++ b/toolchain/check/testdata/impl/import_extend_impl.carbon @@ -141,6 +141,8 @@ fn G(c: C) { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = at_binding_pattern c, %c.param_patt [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] @@ -189,8 +191,8 @@ fn G(c: C) { // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %c.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type = at_binding_pattern c, %c.param_patt [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type = value_param_pattern [concrete = constants.%c.param_patt] +// CHECK:STDOUT: %c.patt: %pattern_type = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref.loc6: type = name_ref C, imports.%Main.C [concrete = constants.%C] diff --git a/toolchain/check/testdata/impl/import_generic.carbon b/toolchain/check/testdata/impl/import_generic.carbon index 917b668e9d70..42525f6f205a 100644 --- a/toolchain/check/testdata/impl/import_generic.carbon +++ b/toolchain/check/testdata/impl/import_generic.carbon @@ -191,6 +191,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %I.type.335: type = generic_interface_type @I [concrete] // CHECK:STDOUT: %I.generic: %I.type.335 = struct_value () [concrete] @@ -209,7 +210,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: .J = %J.decl // CHECK:STDOUT: } // CHECK:STDOUT: %I.decl: %I.type.335 = interface_decl @I [concrete = constants.%I.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc3_14.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc3_17.1: type = splice_block %.loc3_17.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -218,7 +219,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: %T.loc3_14.2: type = symbolic_binding T, 0 [symbolic = %T.loc3_14.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %J.decl: %J.type.23c = interface_decl @J [concrete = constants.%J.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc4_14.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_17.1: type = splice_block %.loc4_17.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -229,6 +230,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @I(%T.loc3_14.2: type) { +// CHECK:STDOUT: %T.patt.loc3_14.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_14.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc3_14.1: type = symbolic_binding T, 0 [symbolic = %T.loc3_14.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -248,6 +250,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @J(%T.loc4_14.2: type) { +// CHECK:STDOUT: %T.patt.loc4_14.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_14.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_14.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -294,6 +297,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%T) { +// CHECK:STDOUT: %T.patt.loc3_14.2 => constants.%T.patt // CHECK:STDOUT: %T.loc3_14.1 => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -306,6 +310,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @J(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_14.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_14.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -330,6 +335,8 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %I.type.3fe: type = facet_type <@I, @I(%T)> [symbolic] // CHECK:STDOUT: %Self.a67: %I.type.3fe = symbolic_binding Self, 1 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %I.type.81d: type = facet_type <@I, @I(%empty_struct_type)> [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness @C.as.I.impl.%I.impl_witness_table [concrete] @@ -389,6 +396,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @I(imports.%Main.import_ref.b3bc94.2: type) [from "basic_import_generic_interface.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -405,6 +413,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @J(imports.%Main.import_ref.b3bc94.5: type) [from "basic_import_generic_interface.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -459,6 +468,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -471,6 +481,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%empty_struct_type) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%empty_struct_type // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -487,6 +498,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @J(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -501,6 +513,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @J(constants.%empty_struct_type) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%empty_struct_type // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -543,6 +556,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %I.type.335: type = generic_interface_type @I [concrete] // CHECK:STDOUT: %I.generic: %I.type.335 = struct_value () [concrete] @@ -561,7 +575,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: .J = %J.decl // CHECK:STDOUT: } // CHECK:STDOUT: %I.decl: %I.type.335 = interface_decl @I [concrete = constants.%I.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc3_14.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc3_17.1: type = splice_block %.loc3_17.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -570,7 +584,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: %T.loc3_14.2: type = symbolic_binding T, 0 [symbolic = %T.loc3_14.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %J.decl: %J.type.28e = constraint_decl @J [concrete = constants.%empty_struct] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc4_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_18.1: type = splice_block %.loc4_18.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -581,6 +595,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @I(%T.loc3_14.2: type) { +// CHECK:STDOUT: %T.patt.loc3_14.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_14.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc3_14.1: type = symbolic_binding T, 0 [symbolic = %T.loc3_14.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -600,6 +615,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic constraint @J(%T.loc4_15.2: type) { +// CHECK:STDOUT: %T.patt.loc4_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_15.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -645,6 +661,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%T) { +// CHECK:STDOUT: %T.patt.loc3_14.2 => constants.%T.patt // CHECK:STDOUT: %T.loc3_14.1 => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -657,6 +674,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @J(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_15.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -680,6 +698,8 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: %empty_struct.f37: %J.type.28e = struct_value () [concrete] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %J.type.d682d6.1: type = facet_type <@J, @J(%T)> [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Self.e1f642.1: %J.type.d682d6.1 = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %I.type.3fe: type = facet_type <@I, @I(%T)> [symbolic] // CHECK:STDOUT: %Self.a67: %I.type.3fe = symbolic_binding Self, 1 [symbolic] @@ -729,6 +749,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @I(imports.%Main.import_ref.b3bc94.3: type) [from "basic_import_generic_constraint.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -745,6 +766,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic constraint @J(imports.%Main.import_ref.b3bc94.5: type) [from "basic_import_generic_constraint.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -789,10 +811,12 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @J(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -815,6 +839,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @J(constants.%empty_struct_type) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%empty_struct_type // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -830,6 +855,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%empty_struct_type) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%empty_struct_type // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -869,6 +895,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %I.type.335: type = generic_interface_type @I [concrete] // CHECK:STDOUT: %I.generic: %I.type.335 = struct_value () [concrete] @@ -898,7 +925,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %I.decl: %I.type.335 = interface_decl @I [concrete = constants.%I.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc5_14.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc5_17.1: type = splice_block %.loc5_17.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -907,7 +934,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: %T.loc5_14.2: type = symbolic_binding T, 0 [symbolic = %T.loc5_14.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @C.as.I.impl.da9 [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc8_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc8: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %I.ref.loc8: %I.type.335 = name_ref I, file.%I.decl [concrete = constants.%I.generic] @@ -920,7 +947,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: %T.loc8_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc8_15.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @C.as.I.impl.da9 [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc8_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc9: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %I.ref.loc9: %I.type.335 = name_ref I, file.%I.decl [concrete = constants.%I.generic] @@ -933,7 +960,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: %T.loc9: type = symbolic_binding T, 0 [symbolic = %T.loc8_15.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @C.as.I.impl.982 [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc12_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %I.ref: %I.type.335 = name_ref I, file.%I.decl [concrete = constants.%I.generic] @@ -947,7 +974,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: %T.loc12_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc12_15.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %N.decl: %N.type.b76 = constraint_decl @N [concrete = constants.%empty_struct] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc14_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc14_18.1: type = splice_block %.loc14_18.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -958,6 +985,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @I(%T.loc5_14.2: type) { +// CHECK:STDOUT: %T.patt.loc5_14.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_14.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc5_14.1: type = symbolic_binding T, 0 [symbolic = %T.loc5_14.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -977,6 +1005,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic constraint @N(%T.loc14_15.2: type) { +// CHECK:STDOUT: %T.patt.loc14_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_15.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc14_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc14_15.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1022,6 +1051,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @C.as.I.impl.da9(%T.loc8_15.1: type) { +// CHECK:STDOUT: %T.patt.loc8_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc8_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc8_15.2 (constants.%T)] // CHECK:STDOUT: %I.type.loc8_32.2: type = facet_type <@I, @I(%T.loc8_15.2)> [symbolic = %I.type.loc8_32.2 (constants.%I.type.3fe)] // CHECK:STDOUT: %I.impl_witness.loc8_33.2: = impl_witness %I.impl_witness_table, @C.as.I.impl.da9(%T.loc8_15.2) [symbolic = %I.impl_witness.loc8_33.2 (constants.%I.impl_witness.fb7)] @@ -1040,6 +1070,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @C.as.I.impl.982(%T.loc12_15.1: type) { +// CHECK:STDOUT: %T.patt.loc12_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_15.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc12_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc12_15.2 (constants.%T)] // CHECK:STDOUT: %ptr.loc12_32.2: type = ptr_type %T.loc12_15.2 [symbolic = %ptr.loc12_32.2 (constants.%ptr)] // CHECK:STDOUT: %I.type.loc12_33.2: type = facet_type <@I, @I(%ptr.loc12_32.2)> [symbolic = %I.type.loc12_33.2 (constants.%I.type.a76)] @@ -1067,6 +1098,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%T) { +// CHECK:STDOUT: %T.patt.loc5_14.2 => constants.%T.patt // CHECK:STDOUT: %T.loc5_14.1 => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1079,6 +1111,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C.as.I.impl.da9(constants.%T) { +// CHECK:STDOUT: %T.patt.loc8_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_15.2 => constants.%T // CHECK:STDOUT: %I.type.loc8_32.2 => constants.%I.type.3fe // CHECK:STDOUT: %I.impl_witness.loc8_33.2 => constants.%I.impl_witness.fb7 @@ -1089,6 +1122,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%ptr) { +// CHECK:STDOUT: %T.patt.loc5_14.2 => constants.%T.patt // CHECK:STDOUT: %T.loc5_14.1 => constants.%ptr // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1097,6 +1131,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C.as.I.impl.982(constants.%T) { +// CHECK:STDOUT: %T.patt.loc12_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc12_15.2 => constants.%T // CHECK:STDOUT: %ptr.loc12_32.2 => constants.%ptr // CHECK:STDOUT: %I.type.loc12_33.2 => constants.%I.type.a76 @@ -1112,6 +1147,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @N(constants.%T) { +// CHECK:STDOUT: %T.patt.loc14_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc14_15.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1134,6 +1170,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: %I.type.3fe: type = facet_type <@I, @I(%T)> [symbolic] // CHECK:STDOUT: %Self.a67: %I.type.3fe = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] @@ -1193,7 +1230,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: %default.import.loc2_30.1 = import // CHECK:STDOUT: %default.import.loc2_30.2 = import // CHECK:STDOUT: impl_decl @C.as.I.impl.da9cee.1 [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc8_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %I.ref: %I.type.335 = name_ref I, imports.%Main.I [concrete = constants.%I.generic] @@ -1206,7 +1243,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: %T.loc8_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc8_15.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @C.as.I.impl.da9cee.2 [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc14_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %I.ref: %I.type.335 = name_ref I, imports.%Main.I [concrete = constants.%I.generic] @@ -1219,7 +1256,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: %T.loc14_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc14_15.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @C.as.I.impl.982b7a.1 [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc20_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc20_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %I.ref: %I.type.335 = name_ref I, imports.%Main.I [concrete = constants.%I.generic] @@ -1233,7 +1270,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: %T.loc20_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc20_15.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @C.as.I.impl.982b7a.2 [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc26_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc26_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %I.ref: %I.type.335 = name_ref I, imports.%Main.I [concrete = constants.%I.generic] @@ -1247,7 +1284,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: %T.loc26_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc26_15.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @C.as.I.impl.042f52.1 [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc32_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc32_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %N.ref: %N.type.b76 = name_ref N, imports.%Main.N [concrete = constants.%empty_struct] @@ -1260,7 +1297,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: %T.loc32_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc32_15.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @C.as.I.impl.042f52.2 [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc37_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc37_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %N.ref: %N.type.b76 = name_ref N, imports.%Main.N [concrete = constants.%empty_struct] @@ -1276,6 +1313,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @I(imports.%Main.import_ref.b3bc94.2: type) [from "import_generic.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1292,6 +1330,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic constraint @N(imports.%Main.import_ref.b3bc94.7: type) [from "import_generic.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1319,6 +1358,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @C.as.I.impl.119(imports.%Main.import_ref.b3bc94.3: type) [from "import_generic.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T)> [symbolic = %I.type (constants.%I.type.3fe)] // CHECK:STDOUT: %I.impl_witness: = impl_witness imports.%I.impl_witness_table.c49, @C.as.I.impl.119(%T) [symbolic = %I.impl_witness (constants.%I.impl_witness.17f)] @@ -1334,6 +1374,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @C.as.I.impl.238(imports.%Main.import_ref.b3bc94.4: type) [from "import_generic.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // 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: %I.type: type = facet_type <@I, @I(%ptr)> [symbolic = %I.type (constants.%I.type.a76)] @@ -1350,6 +1391,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @C.as.I.impl.da9cee.1(%T.loc8_15.1: type) { +// CHECK:STDOUT: %T.patt.loc8_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc8_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc8_15.2 (constants.%T)] // CHECK:STDOUT: %I.type.loc8_32.2: type = facet_type <@I, @I(%T.loc8_15.2)> [symbolic = %I.type.loc8_32.2 (constants.%I.type.3fe)] // CHECK:STDOUT: @@ -1357,6 +1399,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @C.as.I.impl.da9cee.2(%T.loc14_15.1: type) { +// CHECK:STDOUT: %T.patt.loc14_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_15.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc14_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc14_15.2 (constants.%T)] // CHECK:STDOUT: %I.type.loc14_32.2: type = facet_type <@I, @I(%T.loc14_15.2)> [symbolic = %I.type.loc14_32.2 (constants.%I.type.3fe)] // CHECK:STDOUT: @@ -1370,6 +1413,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @C.as.I.impl.982b7a.1(%T.loc20_15.1: type) { +// CHECK:STDOUT: %T.patt.loc20_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc20_15.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc20_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc20_15.2 (constants.%T)] // CHECK:STDOUT: %ptr.loc20_32.2: type = ptr_type %T.loc20_15.2 [symbolic = %ptr.loc20_32.2 (constants.%ptr)] // CHECK:STDOUT: %I.type.loc20_33.2: type = facet_type <@I, @I(%ptr.loc20_32.2)> [symbolic = %I.type.loc20_33.2 (constants.%I.type.a76)] @@ -1378,6 +1422,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @C.as.I.impl.982b7a.2(%T.loc26_15.1: type) { +// CHECK:STDOUT: %T.patt.loc26_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc26_15.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc26_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc26_15.2 (constants.%T)] // CHECK:STDOUT: %ptr.loc26_32.2: type = ptr_type %T.loc26_15.2 [symbolic = %ptr.loc26_32.2 (constants.%ptr)] // CHECK:STDOUT: %I.type.loc26_33.2: type = facet_type <@I, @I(%ptr.loc26_32.2)> [symbolic = %I.type.loc26_33.2 (constants.%I.type.a76)] @@ -1392,6 +1437,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @C.as.I.impl.042f52.1(%T.loc32_15.1: type) { +// CHECK:STDOUT: %T.patt.loc32_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc32_15.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc32_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc32_15.2 (constants.%T)] // CHECK:STDOUT: %N.type.loc32_32.2: type = facet_type <@N, @N(%T.loc32_15.2)> [symbolic = %N.type.loc32_32.2 (constants.%N.type.d682d6.1)] // CHECK:STDOUT: @@ -1399,6 +1445,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @C.as.I.impl.042f52.2(%T.loc37_15.1: type) { +// CHECK:STDOUT: %T.patt.loc37_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc37_15.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc37_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc37_15.2 (constants.%T)] // CHECK:STDOUT: %ptr.loc37_32.2: type = ptr_type %T.loc37_15.2 [symbolic = %ptr.loc37_32.2 (constants.%ptr)] // CHECK:STDOUT: %N.type.loc37_33.2: type = facet_type <@N, @N(%ptr.loc37_32.2)> [symbolic = %N.type.loc37_33.2 (constants.%N.type.d682d6.2)] @@ -1414,6 +1461,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1426,12 +1474,14 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C.as.I.impl.119(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %I.type => constants.%I.type.3fe // CHECK:STDOUT: %I.impl_witness => constants.%I.impl_witness.17f // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%ptr) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%ptr // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1440,6 +1490,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C.as.I.impl.238(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %ptr => constants.%ptr // CHECK:STDOUT: %I.type => constants.%I.type.a76 @@ -1447,28 +1498,33 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C.as.I.impl.da9cee.1(constants.%T) { +// CHECK:STDOUT: %T.patt.loc8_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_15.2 => constants.%T // CHECK:STDOUT: %I.type.loc8_32.2 => constants.%I.type.3fe // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C.as.I.impl.da9cee.2(constants.%T) { +// CHECK:STDOUT: %T.patt.loc14_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc14_15.2 => constants.%T // CHECK:STDOUT: %I.type.loc14_32.2 => constants.%I.type.3fe // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C.as.I.impl.982b7a.1(constants.%T) { +// CHECK:STDOUT: %T.patt.loc20_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc20_15.2 => constants.%T // CHECK:STDOUT: %ptr.loc20_32.2 => constants.%ptr // CHECK:STDOUT: %I.type.loc20_33.2 => constants.%I.type.a76 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C.as.I.impl.982b7a.2(constants.%T) { +// CHECK:STDOUT: %T.patt.loc26_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc26_15.2 => constants.%T // CHECK:STDOUT: %ptr.loc26_32.2 => constants.%ptr // CHECK:STDOUT: %I.type.loc26_33.2 => constants.%I.type.a76 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @N(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1498,11 +1554,13 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C.as.I.impl.042f52.1(constants.%T) { +// CHECK:STDOUT: %T.patt.loc32_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc32_15.2 => constants.%T // CHECK:STDOUT: %N.type.loc32_32.2 => constants.%N.type.d682d6.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @N(constants.%ptr) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%ptr // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1522,6 +1580,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C.as.I.impl.042f52.2(constants.%T) { +// CHECK:STDOUT: %T.patt.loc37_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc37_15.2 => constants.%T // CHECK:STDOUT: %ptr.loc37_32.2 => constants.%ptr // CHECK:STDOUT: %N.type.loc37_33.2 => constants.%N.type.d682d6.2 @@ -1536,6 +1595,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %I.type.335: type = generic_interface_type @I [concrete] // CHECK:STDOUT: %I.generic: %I.type.335 = struct_value () [concrete] @@ -1559,7 +1619,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %I.decl: %I.type.335 = interface_decl @I [concrete = constants.%I.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc5_14.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc5_17.1: type = splice_block %.loc5_17.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1568,7 +1628,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: %T.loc5_14.2: type = symbolic_binding T, 0 [symbolic = %T.loc5_14.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @C.as.I.impl [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc7_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %I.ref: %I.type.335 = name_ref I, file.%I.decl [concrete = constants.%I.generic] @@ -1581,7 +1641,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: %T.loc7_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc7_15.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %N.decl: %N.type.b76 = constraint_decl @N [concrete = constants.%empty_struct] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc9_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc9_18.1: type = splice_block %.loc9_18.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1592,6 +1652,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @I(%T.loc5_14.2: type) { +// CHECK:STDOUT: %T.patt.loc5_14.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_14.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc5_14.1: type = symbolic_binding T, 0 [symbolic = %T.loc5_14.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1611,6 +1672,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic constraint @N(%T.loc9_15.2: type) { +// CHECK:STDOUT: %T.patt.loc9_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_15.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc9_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc9_15.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1656,6 +1718,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @C.as.I.impl(%T.loc7_15.1: type) { +// CHECK:STDOUT: %T.patt.loc7_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_15.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc7_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc7_15.2 (constants.%T)] // CHECK:STDOUT: %I.type.loc7_32.2: type = facet_type <@I, @I(%T.loc7_15.2)> [symbolic = %I.type.loc7_32.2 (constants.%I.type.3fe)] // CHECK:STDOUT: %I.impl_witness.loc7_34.2: = impl_witness %I.impl_witness_table, @C.as.I.impl(%T.loc7_15.2) [symbolic = %I.impl_witness.loc7_34.2 (constants.%I.impl_witness)] @@ -1682,6 +1745,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%T) { +// CHECK:STDOUT: %T.patt.loc5_14.2 => constants.%T.patt // CHECK:STDOUT: %T.loc5_14.1 => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1694,6 +1758,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C.as.I.impl(constants.%T) { +// CHECK:STDOUT: %T.patt.loc7_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc7_15.2 => constants.%T // CHECK:STDOUT: %I.type.loc7_32.2 => constants.%I.type.3fe // CHECK:STDOUT: %I.impl_witness.loc7_34.2 => constants.%I.impl_witness @@ -1704,6 +1769,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @N(constants.%T) { +// CHECK:STDOUT: %T.patt.loc9_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc9_15.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1726,6 +1792,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: %I.type.3fe: type = facet_type <@I, @I(%T)> [symbolic] // CHECK:STDOUT: %Self.a67: %I.type.3fe = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] @@ -1787,7 +1854,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: %default.import.loc1_54.1 = import // CHECK:STDOUT: %default.import.loc1_54.2 = import // CHECK:STDOUT: impl_decl @C.as.I.impl.982 [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc5_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %I.ref: %I.type.335 = name_ref I, imports.%Main.I [concrete = constants.%I.generic] @@ -1801,7 +1868,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: %T.loc5_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc5_15.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @C.as.I.impl.042 [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc6_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %N.ref: %N.type.b76 = name_ref N, imports.%Main.N [concrete = constants.%empty_struct] @@ -1818,6 +1885,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @I(imports.%Main.import_ref.b3bc94.2: type) [from "import_generic_with_different_specific.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1834,6 +1902,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic constraint @N(imports.%Main.import_ref.b3bc94.6: type) [from "import_generic_with_different_specific.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1861,6 +1930,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @C.as.I.impl.119(imports.%Main.import_ref.b3bc94.3: type) [from "import_generic_with_different_specific.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T)> [symbolic = %I.type (constants.%I.type.3fe)] // CHECK:STDOUT: %I.impl_witness: = impl_witness imports.%I.impl_witness_table, @C.as.I.impl.119(%T) [symbolic = %I.impl_witness (constants.%I.impl_witness.17f)] @@ -1876,6 +1946,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @C.as.I.impl.982(%T.loc5_15.1: type) { +// CHECK:STDOUT: %T.patt.loc5_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_15.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc5_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc5_15.2 (constants.%T)] // CHECK:STDOUT: %ptr.loc5_32.2: type = ptr_type %T.loc5_15.2 [symbolic = %ptr.loc5_32.2 (constants.%ptr.e8f)] // CHECK:STDOUT: %I.type.loc5_33.2: type = facet_type <@I, @I(%ptr.loc5_32.2)> [symbolic = %I.type.loc5_33.2 (constants.%I.type.a76)] @@ -1895,6 +1966,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @C.as.I.impl.042(%T.loc6_15.1: type) { +// CHECK:STDOUT: %T.patt.loc6_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_15.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc6_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc6_15.2 (constants.%T)] // CHECK:STDOUT: %ptr.loc6_32.2: type = ptr_type %T.loc6_15.2 [symbolic = %ptr.loc6_32.2 (constants.%ptr.e8f)] // CHECK:STDOUT: %ptr.loc6_33.2: type = ptr_type %ptr.loc6_32.2 [symbolic = %ptr.loc6_33.2 (constants.%ptr.125)] @@ -1922,6 +1994,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1934,12 +2007,14 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C.as.I.impl.119(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %I.type => constants.%I.type.3fe // CHECK:STDOUT: %I.impl_witness => constants.%I.impl_witness.17f // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%ptr.e8f) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%ptr.e8f // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1948,6 +2023,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C.as.I.impl.982(constants.%T) { +// CHECK:STDOUT: %T.patt.loc5_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc5_15.2 => constants.%T // CHECK:STDOUT: %ptr.loc5_32.2 => constants.%ptr.e8f // CHECK:STDOUT: %I.type.loc5_33.2 => constants.%I.type.a76 @@ -1963,6 +2039,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @N(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1977,6 +2054,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @N(constants.%ptr.125) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%ptr.125 // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1992,6 +2070,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%ptr.125) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%ptr.125 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -2004,6 +2083,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C.as.I.impl.042(constants.%T) { +// CHECK:STDOUT: %T.patt.loc6_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc6_15.2 => constants.%T // CHECK:STDOUT: %ptr.loc6_32.2 => constants.%ptr.e8f // CHECK:STDOUT: %ptr.loc6_33.2 => constants.%ptr.125 @@ -2031,6 +2111,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %J.type.23c: type = generic_interface_type @J [concrete] // CHECK:STDOUT: %J.generic: %J.type.23c = struct_value () [concrete] @@ -2055,7 +2136,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: %D.decl: type = class_decl @D [concrete = constants.%D] {} {} // CHECK:STDOUT: %J.decl: %J.type.23c = interface_decl @J [concrete = constants.%J.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc5_14.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc5_17.1: type = splice_block %.loc5_17.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -2064,7 +2145,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: %T.loc5_14.2: type = symbolic_binding T, 0 [symbolic = %T.loc5_14.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %N.decl: %N.type.b76 = constraint_decl @N [concrete = constants.%empty_struct] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc7_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc7_18.1: type = splice_block %.loc7_18.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -2073,7 +2154,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: %T.loc7_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc7_15.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @D.as.J.impl.5a5 [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc15_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl [concrete = constants.%D] // CHECK:STDOUT: %J.ref: %J.type.23c = name_ref J, file.%J.decl [concrete = constants.%J.generic] @@ -2086,7 +2167,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: %T.loc15_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc15_15.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @D.as.J.impl.101 [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc21_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl [concrete = constants.%D] // CHECK:STDOUT: %J.ref: %J.type.23c = name_ref J, file.%J.decl [concrete = constants.%J.generic] @@ -2102,6 +2183,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @J(%T.loc5_14.2: type) { +// CHECK:STDOUT: %T.patt.loc5_14.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_14.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc5_14.1: type = symbolic_binding T, 0 [symbolic = %T.loc5_14.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -2121,6 +2203,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic constraint @N(%T.loc7_15.2: type) { +// CHECK:STDOUT: %T.patt.loc7_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_15.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc7_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc7_15.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -2166,6 +2249,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @D.as.J.impl.5a5(%T.loc15_15.1: type) { +// CHECK:STDOUT: %T.patt.loc15_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_15.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc15_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc15_15.2 (constants.%T)] // CHECK:STDOUT: %J.type.loc15_32.2: type = facet_type <@J, @J(%T.loc15_15.2)> [symbolic = %J.type.loc15_32.2 (constants.%J.type.5c8)] // CHECK:STDOUT: %J.impl_witness.loc15_33.2: = impl_witness %J.impl_witness_table, @D.as.J.impl.5a5(%T.loc15_15.2) [symbolic = %J.impl_witness.loc15_33.2 (constants.%J.impl_witness.7d7)] @@ -2174,6 +2258,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @D.as.J.impl.101(%T.loc21_15.1: type) { +// CHECK:STDOUT: %T.patt.loc21_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_15.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc21_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc21_15.2 (constants.%T)] // CHECK:STDOUT: %ptr.loc21_32.2: type = ptr_type %T.loc21_15.2 [symbolic = %ptr.loc21_32.2 (constants.%ptr)] // CHECK:STDOUT: %J.type.loc21_33.2: type = facet_type <@J, @J(%ptr.loc21_32.2)> [symbolic = %J.type.loc21_33.2 (constants.%J.type.c71)] @@ -2191,6 +2276,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @J(constants.%T) { +// CHECK:STDOUT: %T.patt.loc5_14.2 => constants.%T.patt // CHECK:STDOUT: %T.loc5_14.1 => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -2203,6 +2289,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @N(constants.%T) { +// CHECK:STDOUT: %T.patt.loc7_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc7_15.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -2217,16 +2304,19 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @D.as.J.impl.5a5(constants.%T) { +// CHECK:STDOUT: %T.patt.loc15_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc15_15.2 => constants.%T // CHECK:STDOUT: %J.type.loc15_32.2 => constants.%J.type.5c8 // CHECK:STDOUT: %J.impl_witness.loc15_33.2 => constants.%J.impl_witness.7d7 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @J(constants.%ptr) { +// CHECK:STDOUT: %T.patt.loc5_14.2 => constants.%T.patt // CHECK:STDOUT: %T.loc5_14.1 => constants.%ptr // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @D.as.J.impl.101(constants.%T) { +// CHECK:STDOUT: %T.patt.loc21_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc21_15.2 => constants.%T // CHECK:STDOUT: %ptr.loc21_32.2 => constants.%ptr // CHECK:STDOUT: %J.type.loc21_33.2 => constants.%J.type.c71 @@ -2242,6 +2332,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: %J.type.5c8: type = facet_type <@J, @J(%T)> [symbolic] // CHECK:STDOUT: %Self.9f1: %J.type.5c8 = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %D: type = class_type @D [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] @@ -2296,7 +2387,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: %default.import.loc2_35.1 = import // CHECK:STDOUT: %default.import.loc2_35.2 = import // CHECK:STDOUT: impl_decl @D.as.J.impl.5a5643.1 [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc8_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, imports.%Main.D [concrete = constants.%D] // CHECK:STDOUT: %J.ref: %J.type.23c = name_ref J, imports.%Main.J [concrete = constants.%J.generic] @@ -2309,7 +2400,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: %T.loc8_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc8_15.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @D.as.J.impl.5a5643.2 [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc14_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, imports.%Main.D [concrete = constants.%D] // CHECK:STDOUT: %J.ref: %J.type.23c = name_ref J, imports.%Main.J [concrete = constants.%J.generic] @@ -2322,7 +2413,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: %T.loc14_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc14_15.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @D.as.J.impl.1010f3.1 [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc20_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc20_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, imports.%Main.D [concrete = constants.%D] // CHECK:STDOUT: %J.ref: %J.type.23c = name_ref J, imports.%Main.J [concrete = constants.%J.generic] @@ -2336,7 +2427,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: %T.loc20_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc20_15.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @D.as.J.impl.1010f3.2 [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc26_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc26_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, imports.%Main.D [concrete = constants.%D] // CHECK:STDOUT: %J.ref: %J.type.23c = name_ref J, imports.%Main.J [concrete = constants.%J.generic] @@ -2350,7 +2441,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: %T.loc26_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc26_15.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @D.as.J.impl.d69d6f.1 [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc32_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc32_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, imports.%Main.D [concrete = constants.%D] // CHECK:STDOUT: %N.ref: %N.type.b76 = name_ref N, imports.%Main.N [concrete = constants.%empty_struct] @@ -2363,7 +2454,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: %T.loc32_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc32_15.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @D.as.J.impl.d69d6f.2 [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc38_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc38_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, imports.%Main.D [concrete = constants.%D] // CHECK:STDOUT: %N.ref: %N.type.b76 = name_ref N, imports.%Main.N [concrete = constants.%empty_struct] @@ -2379,6 +2470,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @J(imports.%Main.import_ref.b3bc94.2: type) [from "fail_import_generic_decl.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -2395,6 +2487,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic constraint @N(imports.%Main.import_ref.b3bc94.7: type) [from "fail_import_generic_decl.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -2422,6 +2515,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @D.as.J.impl.bdb(imports.%Main.import_ref.b3bc94.3: type) [from "fail_import_generic_decl.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %J.type: type = facet_type <@J, @J(%T)> [symbolic = %J.type (constants.%J.type.5c8)] // CHECK:STDOUT: %J.impl_witness: = impl_witness imports.%J.impl_witness_table.a64, @D.as.J.impl.bdb(%T) [symbolic = %J.impl_witness (constants.%J.impl_witness.699)] @@ -2430,6 +2524,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @D.as.J.impl.fa6(imports.%Main.import_ref.b3bc94.4: type) [from "fail_import_generic_decl.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // 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: %J.type: type = facet_type <@J, @J(%ptr)> [symbolic = %J.type (constants.%J.type.c71)] @@ -2439,6 +2534,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @D.as.J.impl.5a5643.1(%T.loc8_15.1: type) { +// CHECK:STDOUT: %T.patt.loc8_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc8_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc8_15.2 (constants.%T)] // CHECK:STDOUT: %J.type.loc8_32.2: type = facet_type <@J, @J(%T.loc8_15.2)> [symbolic = %J.type.loc8_32.2 (constants.%J.type.5c8)] // CHECK:STDOUT: @@ -2446,6 +2542,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @D.as.J.impl.5a5643.2(%T.loc14_15.1: type) { +// CHECK:STDOUT: %T.patt.loc14_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_15.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc14_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc14_15.2 (constants.%T)] // CHECK:STDOUT: %J.type.loc14_32.2: type = facet_type <@J, @J(%T.loc14_15.2)> [symbolic = %J.type.loc14_32.2 (constants.%J.type.5c8)] // CHECK:STDOUT: @@ -2459,6 +2556,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @D.as.J.impl.1010f3.1(%T.loc20_15.1: type) { +// CHECK:STDOUT: %T.patt.loc20_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc20_15.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc20_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc20_15.2 (constants.%T)] // CHECK:STDOUT: %ptr.loc20_32.2: type = ptr_type %T.loc20_15.2 [symbolic = %ptr.loc20_32.2 (constants.%ptr)] // CHECK:STDOUT: %J.type.loc20_33.2: type = facet_type <@J, @J(%ptr.loc20_32.2)> [symbolic = %J.type.loc20_33.2 (constants.%J.type.c71)] @@ -2467,6 +2565,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @D.as.J.impl.1010f3.2(%T.loc26_15.1: type) { +// CHECK:STDOUT: %T.patt.loc26_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc26_15.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc26_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc26_15.2 (constants.%T)] // CHECK:STDOUT: %ptr.loc26_32.2: type = ptr_type %T.loc26_15.2 [symbolic = %ptr.loc26_32.2 (constants.%ptr)] // CHECK:STDOUT: %J.type.loc26_33.2: type = facet_type <@J, @J(%ptr.loc26_32.2)> [symbolic = %J.type.loc26_33.2 (constants.%J.type.c71)] @@ -2481,6 +2580,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @D.as.J.impl.d69d6f.1(%T.loc32_15.1: type) { +// CHECK:STDOUT: %T.patt.loc32_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc32_15.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc32_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc32_15.2 (constants.%T)] // CHECK:STDOUT: %N.type.loc32_32.2: type = facet_type <@N, @N(%T.loc32_15.2)> [symbolic = %N.type.loc32_32.2 (constants.%N.type.d682d6.1)] // CHECK:STDOUT: @@ -2494,6 +2594,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @D.as.J.impl.d69d6f.2(%T.loc38_15.1: type) { +// CHECK:STDOUT: %T.patt.loc38_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc38_15.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc38_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc38_15.2 (constants.%T)] // CHECK:STDOUT: %ptr.loc38_32.2: type = ptr_type %T.loc38_15.2 [symbolic = %ptr.loc38_32.2 (constants.%ptr)] // CHECK:STDOUT: %N.type.loc38_33.2: type = facet_type <@N, @N(%ptr.loc38_32.2)> [symbolic = %N.type.loc38_33.2 (constants.%N.type.d682d6.2)] @@ -2515,6 +2616,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @J(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -2527,16 +2629,19 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @D.as.J.impl.bdb(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %J.type => constants.%J.type.5c8 // CHECK:STDOUT: %J.impl_witness => constants.%J.impl_witness.699 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @J(constants.%ptr) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%ptr // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @D.as.J.impl.fa6(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %ptr => constants.%ptr // CHECK:STDOUT: %J.type => constants.%J.type.c71 @@ -2544,28 +2649,33 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @D.as.J.impl.5a5643.1(constants.%T) { +// CHECK:STDOUT: %T.patt.loc8_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_15.2 => constants.%T // CHECK:STDOUT: %J.type.loc8_32.2 => constants.%J.type.5c8 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @D.as.J.impl.5a5643.2(constants.%T) { +// CHECK:STDOUT: %T.patt.loc14_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc14_15.2 => constants.%T // CHECK:STDOUT: %J.type.loc14_32.2 => constants.%J.type.5c8 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @D.as.J.impl.1010f3.1(constants.%T) { +// CHECK:STDOUT: %T.patt.loc20_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc20_15.2 => constants.%T // CHECK:STDOUT: %ptr.loc20_32.2 => constants.%ptr // CHECK:STDOUT: %J.type.loc20_33.2 => constants.%J.type.c71 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @D.as.J.impl.1010f3.2(constants.%T) { +// CHECK:STDOUT: %T.patt.loc26_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc26_15.2 => constants.%T // CHECK:STDOUT: %ptr.loc26_32.2 => constants.%ptr // CHECK:STDOUT: %J.type.loc26_33.2 => constants.%J.type.c71 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @N(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -2595,11 +2705,13 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @D.as.J.impl.d69d6f.1(constants.%T) { +// CHECK:STDOUT: %T.patt.loc32_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc32_15.2 => constants.%T // CHECK:STDOUT: %N.type.loc32_32.2 => constants.%N.type.d682d6.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @N(constants.%ptr) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%ptr // CHECK:STDOUT: } // CHECK:STDOUT: @@ -2619,6 +2731,7 @@ impl forall [T:! type] D as N(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @D.as.J.impl.d69d6f.2(constants.%T) { +// CHECK:STDOUT: %T.patt.loc38_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc38_15.2 => constants.%T // CHECK:STDOUT: %ptr.loc38_32.2 => constants.%ptr // CHECK:STDOUT: %N.type.loc38_33.2 => constants.%N.type.d682d6.2 diff --git a/toolchain/check/testdata/impl/import_self.carbon b/toolchain/check/testdata/impl/import_self.carbon index 5b7ad6895f49..ffa6445efe76 100644 --- a/toolchain/check/testdata/impl/import_self.carbon +++ b/toolchain/check/testdata/impl/import_self.carbon @@ -44,7 +44,13 @@ fn F(x: C, y: C) -> C { // CHECK:STDOUT: %Self: %Add.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt: %pattern_type = at_binding_pattern self, %self.param_patt [symbolic] +// CHECK:STDOUT: %other.param_patt: %pattern_type = value_param_pattern [symbolic] +// CHECK:STDOUT: %other.patt: %pattern_type = at_binding_pattern other, %other.param_patt [symbolic] // CHECK:STDOUT: %.3bf: Core.Form = init_form %Self.as_type [symbolic] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %Self.as_type [symbolic] // CHECK:STDOUT: %Add.WithSelf.Op.type: type = fn_type @Add.WithSelf.Op, @Add.WithSelf(%Self) [symbolic] // CHECK:STDOUT: %Add.WithSelf.Op: %Add.WithSelf.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %Add.assoc_type: type = assoc_entity_type @Add [concrete] @@ -73,12 +79,12 @@ fn F(x: C, y: C) -> C { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %Add.WithSelf.Op.decl: @Add.WithSelf.%Add.WithSelf.Op.type (%Add.WithSelf.Op.type) = fn_decl @Add.WithSelf.Op [symbolic = @Add.WithSelf.%Add.WithSelf.Op (constants.%Add.WithSelf.Op)] { -// CHECK:STDOUT: %self.param_patt: @Add.WithSelf.Op.%pattern_type (%pattern_type) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @Add.WithSelf.Op.%pattern_type (%pattern_type) = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %other.param_patt: @Add.WithSelf.Op.%pattern_type (%pattern_type) = value_param_pattern [concrete] -// CHECK:STDOUT: %other.patt: @Add.WithSelf.Op.%pattern_type (%pattern_type) = at_binding_pattern other, %other.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @Add.WithSelf.Op.%pattern_type (%pattern_type) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @Add.WithSelf.Op.%pattern_type (%pattern_type) = return_slot_pattern %return.param_patt, %.loc5_31.2 [concrete] +// CHECK:STDOUT: %self.param_patt.loc5_9.1: @Add.WithSelf.Op.%pattern_type (%pattern_type) = value_param_pattern [symbolic = %self.param_patt.loc5_9.2 (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt.loc5_9.1: @Add.WithSelf.Op.%pattern_type (%pattern_type) = at_binding_pattern self, %self.param_patt.loc5_9.1 [symbolic = %self.patt.loc5_9.2 (constants.%self.patt)] +// CHECK:STDOUT: %other.param_patt.loc5_20.1: @Add.WithSelf.Op.%pattern_type (%pattern_type) = value_param_pattern [symbolic = %other.param_patt.loc5_20.2 (constants.%other.param_patt)] +// CHECK:STDOUT: %other.patt.loc5_20.1: @Add.WithSelf.Op.%pattern_type (%pattern_type) = at_binding_pattern other, %other.param_patt.loc5_20.1 [symbolic = %other.patt.loc5_20.2 (constants.%other.patt)] +// CHECK:STDOUT: %return.param_patt.loc5_31.1: @Add.WithSelf.Op.%pattern_type (%pattern_type) = out_param_pattern [symbolic = %return.param_patt.loc5_31.2 (constants.%return.param_patt)] +// CHECK:STDOUT: %return.patt.loc5_28.1: @Add.WithSelf.Op.%pattern_type (%pattern_type) = return_slot_pattern %return.param_patt.loc5_31.1, %.loc5_31.2 [symbolic = %return.patt.loc5_28.2 (constants.%return.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc5_31: %Add.type = name_ref Self, @Add.%Self [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc5_31: type = facet_access_type %Self.ref.loc5_31 [symbolic = %Self.as_type.loc5_9.1 (constants.%Self.as_type)] @@ -115,7 +121,13 @@ fn F(x: C, y: C) -> C { // CHECK:STDOUT: %Self: %Add.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc5_9.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_9.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc5_9.1 [symbolic = %pattern_type (constants.%pattern_type)] +// CHECK:STDOUT: %self.param_patt.loc5_9.2: @Add.WithSelf.Op.%pattern_type (%pattern_type) = value_param_pattern [symbolic = %self.param_patt.loc5_9.2 (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt.loc5_9.2: @Add.WithSelf.Op.%pattern_type (%pattern_type) = at_binding_pattern self, %self.param_patt.loc5_9.2 [symbolic = %self.patt.loc5_9.2 (constants.%self.patt)] +// CHECK:STDOUT: %other.param_patt.loc5_20.2: @Add.WithSelf.Op.%pattern_type (%pattern_type) = value_param_pattern [symbolic = %other.param_patt.loc5_20.2 (constants.%other.param_patt)] +// CHECK:STDOUT: %other.patt.loc5_20.2: @Add.WithSelf.Op.%pattern_type (%pattern_type) = at_binding_pattern other, %other.param_patt.loc5_20.2 [symbolic = %other.patt.loc5_20.2 (constants.%other.patt)] // CHECK:STDOUT: %.loc5_31.1: Core.Form = init_form %Self.as_type.loc5_9.1 [symbolic = %.loc5_31.1 (constants.%.3bf)] +// CHECK:STDOUT: %return.param_patt.loc5_31.2: @Add.WithSelf.Op.%pattern_type (%pattern_type) = out_param_pattern [symbolic = %return.param_patt.loc5_31.2 (constants.%return.param_patt)] +// CHECK:STDOUT: %return.patt.loc5_28.2: @Add.WithSelf.Op.%pattern_type (%pattern_type) = return_slot_pattern %return.param_patt.loc5_31.2, %Self.as_type.loc5_9.1 [symbolic = %return.patt.loc5_28.2 (constants.%return.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Add.WithSelf.Op.%Self.as_type.loc5_9.1 (%Self.as_type), %other.param: @Add.WithSelf.Op.%Self.as_type.loc5_9.1 (%Self.as_type)) -> out %return.param: @Add.WithSelf.Op.%Self.as_type.loc5_9.1 (%Self.as_type); // CHECK:STDOUT: } @@ -126,7 +138,13 @@ fn F(x: C, y: C) -> C { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc5_9.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type +// CHECK:STDOUT: %self.param_patt.loc5_9.2 => constants.%self.param_patt +// CHECK:STDOUT: %self.patt.loc5_9.2 => constants.%self.patt +// CHECK:STDOUT: %other.param_patt.loc5_20.2 => constants.%other.param_patt +// CHECK:STDOUT: %other.patt.loc5_20.2 => constants.%other.patt // CHECK:STDOUT: %.loc5_31.1 => constants.%.3bf +// CHECK:STDOUT: %return.param_patt.loc5_31.2 => constants.%return.param_patt +// CHECK:STDOUT: %return.patt.loc5_28.2 => constants.%return.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- b.carbon @@ -142,16 +160,33 @@ fn F(x: C, y: C) -> C { // CHECK:STDOUT: %Add.WithSelf.Op.39f: %Add.WithSelf.Op.type.ee5 = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] // CHECK:STDOUT: %pattern_type.78d: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %return.param_patt.c69: %pattern_type.78d = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.279: %pattern_type.78d = return_slot_pattern %return.param_patt.c69, invalid [symbolic] +// CHECK:STDOUT: %self.param_patt.d5a: %pattern_type.78d = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.26c: %pattern_type.78d = at_binding_pattern self, %self.param_patt.d5a [symbolic] // CHECK:STDOUT: %.719: Core.Form = init_form %Self.as_type [symbolic] +// CHECK:STDOUT: %other.param_patt.03b: %pattern_type.78d = value_param_pattern [symbolic] +// CHECK:STDOUT: %other.patt.bca: %pattern_type.78d = at_binding_pattern other, %other.param_patt.03b [symbolic] // CHECK:STDOUT: %Add.impl_witness: = impl_witness @C.as.Add.impl.%Add.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %self.param_patt.303: %pattern_type.98b = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.49a: %pattern_type.98b = at_binding_pattern self, %self.param_patt.303 [concrete] +// CHECK:STDOUT: %other.param_patt.d59: %pattern_type.98b = value_param_pattern [concrete] +// CHECK:STDOUT: %other.patt.38f: %pattern_type.98b = at_binding_pattern other, %other.param_patt.d59 [concrete] // CHECK:STDOUT: %.a44: Core.Form = init_form %C [concrete] +// CHECK:STDOUT: %return.param_patt.89a: %pattern_type.98b = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e4a: %pattern_type.98b = return_slot_pattern %return.param_patt.89a, %C [concrete] // CHECK:STDOUT: %C.as.Add.impl.Op.type: type = fn_type @C.as.Add.impl.Op [concrete] // CHECK:STDOUT: %C.as.Add.impl.Op: %C.as.Add.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %Add.facet: %Add.type = facet_value %C, (%Add.impl_witness) [concrete] // CHECK:STDOUT: %Add.WithSelf.Op.type.9f5: type = fn_type @Add.WithSelf.Op, @Add.WithSelf(%Add.facet) [concrete] // CHECK:STDOUT: %Add.WithSelf.Op.196: %Add.WithSelf.Op.type.9f5 = struct_value () [concrete] +// CHECK:STDOUT: %return.patt.18a: %pattern_type.98b = return_slot_pattern %return.param_patt.89a, invalid [concrete] // CHECK:STDOUT: %empty_tuple.4db: %C = tuple_value () [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.98b = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.98b = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %y.param_patt: %pattern_type.98b = value_param_pattern [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.98b = at_binding_pattern y, %y.param_patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %Add.assoc_type: type = assoc_entity_type @Add [concrete] @@ -187,12 +222,12 @@ fn F(x: C, y: C) -> C { // CHECK:STDOUT: %Add.ref: type = name_ref Add, imports.%Main.Add [concrete = constants.%Add.type] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %x.param_patt: %pattern_type.98b = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.98b = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %y.param_patt: %pattern_type.98b = value_param_pattern [concrete] -// CHECK:STDOUT: %y.patt: %pattern_type.98b = at_binding_pattern y, %y.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C.ref.loc12_21 [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.98b = value_param_pattern [concrete = constants.%x.param_patt] +// CHECK:STDOUT: %x.patt: %pattern_type.98b = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt] +// CHECK:STDOUT: %y.param_patt: %pattern_type.98b = value_param_pattern [concrete = constants.%y.param_patt] +// CHECK:STDOUT: %y.patt: %pattern_type.98b = at_binding_pattern y, %y.param_patt [concrete = constants.%y.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete = constants.%return.param_patt.89a] +// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C.ref.loc12_21 [concrete = constants.%return.patt.e4a] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc12_21: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %.loc12: Core.Form = init_form %C.ref.loc12_21 [concrete = constants.%.a44] @@ -219,12 +254,12 @@ fn F(x: C, y: C) -> C { // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.Add.impl: %C.ref as %Add.ref { // CHECK:STDOUT: %C.as.Add.impl.Op.decl: %C.as.Add.impl.Op.type = fn_decl @C.as.Add.impl.Op [concrete = constants.%C.as.Add.impl.Op] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.98b = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.98b = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %other.param_patt: %pattern_type.98b = value_param_pattern [concrete] -// CHECK:STDOUT: %other.patt: %pattern_type.98b = at_binding_pattern other, %other.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %Self.ref.loc9_45 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.98b = value_param_pattern [concrete = constants.%self.param_patt.303] +// CHECK:STDOUT: %self.patt: %pattern_type.98b = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.49a] +// CHECK:STDOUT: %other.param_patt: %pattern_type.98b = value_param_pattern [concrete = constants.%other.param_patt.d59] +// CHECK:STDOUT: %other.patt: %pattern_type.98b = at_binding_pattern other, %other.param_patt [concrete = constants.%other.patt.38f] +// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete = constants.%return.param_patt.89a] +// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %Self.ref.loc9_45 [concrete = constants.%return.patt.e4a] // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc9_45: type = name_ref Self, @C.as.Add.impl.%C.ref [concrete = constants.%C] // CHECK:STDOUT: %.loc9_45: Core.Form = init_form %Self.ref.loc9_45 [concrete = constants.%.a44] @@ -262,7 +297,13 @@ fn F(x: C, y: C) -> C { // CHECK:STDOUT: %Self: %Add.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.78d)] +// CHECK:STDOUT: %self.param_patt: @Add.WithSelf.Op.%pattern_type (%pattern_type.78d) = value_param_pattern [symbolic = %self.param_patt (constants.%self.param_patt.d5a)] +// CHECK:STDOUT: %self.patt: @Add.WithSelf.Op.%pattern_type (%pattern_type.78d) = at_binding_pattern self, %self.param_patt [symbolic = %self.patt (constants.%self.patt.26c)] +// CHECK:STDOUT: %other.param_patt: @Add.WithSelf.Op.%pattern_type (%pattern_type.78d) = value_param_pattern [symbolic = %other.param_patt (constants.%other.param_patt.03b)] +// CHECK:STDOUT: %other.patt: @Add.WithSelf.Op.%pattern_type (%pattern_type.78d) = at_binding_pattern other, %other.param_patt [symbolic = %other.patt (constants.%other.patt.bca)] // CHECK:STDOUT: %.1: Core.Form = init_form %Self.as_type [symbolic = %.1 (constants.%.719)] +// CHECK:STDOUT: %return.param_patt: @Add.WithSelf.Op.%pattern_type (%pattern_type.78d) = out_param_pattern [symbolic = %return.param_patt (constants.%return.param_patt.c69)] +// CHECK:STDOUT: %return.patt: @Add.WithSelf.Op.%pattern_type (%pattern_type.78d) = return_slot_pattern %return.param_patt, invalid [symbolic = %return.patt (constants.%return.patt.279)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -304,7 +345,13 @@ fn F(x: C, y: C) -> C { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.78d +// CHECK:STDOUT: %self.param_patt => constants.%self.param_patt.d5a +// CHECK:STDOUT: %self.patt => constants.%self.patt.26c +// CHECK:STDOUT: %other.param_patt => constants.%other.param_patt.03b +// CHECK:STDOUT: %other.patt => constants.%other.patt.bca // CHECK:STDOUT: %.1 => constants.%.719 +// CHECK:STDOUT: %return.param_patt => constants.%return.param_patt.c69 +// CHECK:STDOUT: %return.patt => constants.%return.patt.279 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Add.WithSelf(constants.%Add.facet) { @@ -318,6 +365,12 @@ fn F(x: C, y: C) -> C { // CHECK:STDOUT: %Self => constants.%Add.facet // CHECK:STDOUT: %Self.as_type => constants.%C // CHECK:STDOUT: %pattern_type => constants.%pattern_type.98b +// CHECK:STDOUT: %self.param_patt => constants.%self.param_patt.303 +// CHECK:STDOUT: %self.patt => constants.%self.patt.49a +// CHECK:STDOUT: %other.param_patt => constants.%other.param_patt.d59 +// CHECK:STDOUT: %other.patt => constants.%other.patt.38f // CHECK:STDOUT: %.1 => constants.%.a44 +// CHECK:STDOUT: %return.param_patt => constants.%return.param_patt.89a +// CHECK:STDOUT: %return.patt => constants.%return.patt.18a // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/import_self_specific.carbon b/toolchain/check/testdata/impl/import_self_specific.carbon index 4e14abb5a7ed..3feb99a1e56f 100644 --- a/toolchain/check/testdata/impl/import_self_specific.carbon +++ b/toolchain/check/testdata/impl/import_self_specific.carbon @@ -70,15 +70,18 @@ impl forall [N:! E] D(N) as I where .Assoc = () { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Y.impl_witness: = impl_witness @T.as.Y.impl.%Y.impl_witness_table, @T.as.Y.impl(%T) [symbolic] // CHECK:STDOUT: %Y.facet: %Y.type = facet_value %T, (%Y.impl_witness) [symbolic] // CHECK:STDOUT: %Z.type: type = facet_type <@Z> [concrete] // CHECK:STDOUT: %Self.cb6: %Z.type = symbolic_binding Self, 0 [symbolic] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %U: type = symbolic_binding U, 0 [symbolic] // CHECK:STDOUT: %Z.impl_witness.4e2: = impl_witness @U.as.Z.impl.%Z.impl_witness_table, @U.as.Z.impl(%U) [symbolic] // CHECK:STDOUT: %Z.facet.156: %Z.type = facet_value %U, (%Z.impl_witness.4e2) [symbolic] // CHECK:STDOUT: %pattern_type.5d7: type = pattern_type %Z.type [concrete] +// CHECK:STDOUT: %V.patt: %pattern_type.5d7 = symbolic_binding_pattern V, 0 [symbolic] // CHECK:STDOUT: %V: %Z.type = symbolic_binding V, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -99,6 +102,8 @@ impl forall [N:! E] D(N) as I where .Assoc = () { // CHECK:STDOUT: %Z.facet.4d3: %Z.type = facet_value %as_type, (%Z.lookup_impl_witness) [symbolic] // CHECK:STDOUT: %C.e8d: type = class_type @C, @C(%Z.facet.4d3) [symbolic] // CHECK:STDOUT: %pattern_type.ddf: type = pattern_type %C.e8d [symbolic] +// CHECK:STDOUT: %c.param_patt: %pattern_type.ddf = value_param_pattern [symbolic] +// CHECK:STDOUT: %c.patt: %pattern_type.ddf = at_binding_pattern c, %c.param_patt [symbolic] // CHECK:STDOUT: %I.WithSelf.F.type: type = fn_type @I.WithSelf.F, @I.WithSelf(%Self.37e) [symbolic] // CHECK:STDOUT: %I.WithSelf.F: %I.WithSelf.F.type = struct_value () [symbolic] // CHECK:STDOUT: %assoc1: %I.assoc_type = assoc_entity element1, @I.WithSelf.%I.WithSelf.F.decl [concrete] @@ -113,7 +118,7 @@ impl forall [N:! E] D(N) as I where .Assoc = () { // CHECK:STDOUT: } // CHECK:STDOUT: %Y.decl: type = interface_decl @Y [concrete = constants.%Y.type] {} {} // CHECK:STDOUT: impl_decl @T.as.Y.impl [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc5_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc5_15.1 [symbolic = %T.loc5_15.2 (constants.%T)] // CHECK:STDOUT: %Y.ref: type = name_ref Y, file.%Y.decl [concrete = constants.%Y.type] @@ -125,7 +130,7 @@ impl forall [N:! E] D(N) as I where .Assoc = () { // CHECK:STDOUT: } // CHECK:STDOUT: %Z.decl: type = interface_decl @Z [concrete = constants.%Z.type] {} {} // CHECK:STDOUT: impl_decl @U.as.Z.impl [concrete] { -// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [concrete] +// CHECK:STDOUT: %U.patt.loc9_15.1: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc9_15.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %U.ref: type = name_ref U, %U.loc9_15.1 [symbolic = %U.loc9_15.2 (constants.%U)] // CHECK:STDOUT: %Z.ref: type = name_ref Z, file.%Z.decl [concrete = constants.%Z.type] @@ -136,7 +141,7 @@ impl forall [N:! E] D(N) as I where .Assoc = () { // CHECK:STDOUT: %U.loc9_15.1: type = symbolic_binding U, 0 [symbolic = %U.loc9_15.2 (constants.%U)] // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %V.patt: %pattern_type.5d7 = symbolic_binding_pattern V, 0 [concrete] +// CHECK:STDOUT: %V.patt.loc11_10.1: %pattern_type.5d7 = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc11_10.2 (constants.%V.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc11: type = splice_block %Z.ref [concrete = constants.%Z.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -178,8 +183,8 @@ impl forall [N:! E] D(N) as I where .Assoc = () { // CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, @I.WithSelf.%Assoc [concrete = constants.%assoc0] // CHECK:STDOUT: } // CHECK:STDOUT: %I.WithSelf.F.decl: @I.WithSelf.%I.WithSelf.F.type (%I.WithSelf.F.type) = fn_decl @I.WithSelf.F [symbolic = @I.WithSelf.%I.WithSelf.F (constants.%I.WithSelf.F)] { -// CHECK:STDOUT: %c.param_patt: @I.WithSelf.F.%pattern_type (%pattern_type.ddf) = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: @I.WithSelf.F.%pattern_type (%pattern_type.ddf) = at_binding_pattern c, %c.param_patt [concrete] +// CHECK:STDOUT: %c.param_patt.loc24_9.1: @I.WithSelf.F.%pattern_type (%pattern_type.ddf) = value_param_pattern [symbolic = %c.param_patt.loc24_9.2 (constants.%c.param_patt)] +// CHECK:STDOUT: %c.patt.loc24_9.1: @I.WithSelf.F.%pattern_type (%pattern_type.ddf) = at_binding_pattern c, %c.param_patt.loc24_9.1 [symbolic = %c.patt.loc24_9.2 (constants.%c.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: @I.WithSelf.F.%C.loc24_18.1 (%C.e8d) = value_param call_param0 // CHECK:STDOUT: %.loc24_18.2: type = splice_block %C.loc24_18.2 [symbolic = %C.loc24_18.1 (constants.%C.e8d)] { @@ -209,6 +214,7 @@ impl forall [N:! E] D(N) as I where .Assoc = () { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @T.as.Y.impl(%T.loc5_15.1: type) { +// CHECK:STDOUT: %T.patt.loc5_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_15.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc5_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc5_15.2 (constants.%T)] // CHECK:STDOUT: %Y.impl_witness.loc5_31.2: = impl_witness %Y.impl_witness_table, @T.as.Y.impl(%T.loc5_15.2) [symbolic = %Y.impl_witness.loc5_31.2 (constants.%Y.impl_witness)] // CHECK:STDOUT: @@ -225,6 +231,7 @@ impl forall [N:! E] D(N) as I where .Assoc = () { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @U.as.Z.impl(%U.loc9_15.1: type) { +// CHECK:STDOUT: %U.patt.loc9_15.2: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc9_15.2 (constants.%U.patt)] // CHECK:STDOUT: %U.loc9_15.2: type = symbolic_binding U, 0 [symbolic = %U.loc9_15.2 (constants.%U)] // CHECK:STDOUT: %Z.impl_witness.loc9_31.2: = impl_witness %Z.impl_witness_table, @U.as.Z.impl(%U.loc9_15.2) [symbolic = %Z.impl_witness.loc9_31.2 (constants.%Z.impl_witness.4e2)] // CHECK:STDOUT: @@ -241,6 +248,7 @@ impl forall [N:! E] D(N) as I where .Assoc = () { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%V.loc11_10.2: %Z.type) { +// CHECK:STDOUT: %V.patt.loc11_10.2: %pattern_type.5d7 = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc11_10.2 (constants.%V.patt)] // CHECK:STDOUT: %V.loc11_10.1: %Z.type = symbolic_binding V, 0 [symbolic = %V.loc11_10.1 (constants.%V)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -267,6 +275,8 @@ impl forall [N:! E] D(N) as I where .Assoc = () { // CHECK:STDOUT: %Z.facet.loc24_18.1: %Z.type = facet_value %as_type, (%Z.lookup_impl_witness) [symbolic = %Z.facet.loc24_18.1 (constants.%Z.facet.4d3)] // CHECK:STDOUT: %C.loc24_18.1: type = class_type @C, @C(%Z.facet.loc24_18.1) [symbolic = %C.loc24_18.1 (constants.%C.e8d)] // CHECK:STDOUT: %pattern_type: type = pattern_type %C.loc24_18.1 [symbolic = %pattern_type (constants.%pattern_type.ddf)] +// CHECK:STDOUT: %c.param_patt.loc24_9.2: @I.WithSelf.F.%pattern_type (%pattern_type.ddf) = value_param_pattern [symbolic = %c.param_patt.loc24_9.2 (constants.%c.param_patt)] +// CHECK:STDOUT: %c.patt.loc24_9.2: @I.WithSelf.F.%pattern_type (%pattern_type.ddf) = at_binding_pattern c, %c.param_patt.loc24_9.2 [symbolic = %c.patt.loc24_9.2 (constants.%c.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%c.param: @I.WithSelf.F.%C.loc24_18.1 (%C.e8d)); // CHECK:STDOUT: } @@ -276,6 +286,7 @@ impl forall [N:! E] D(N) as I where .Assoc = () { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @T.as.Y.impl(constants.%T) { +// CHECK:STDOUT: %T.patt.loc5_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc5_15.2 => constants.%T // CHECK:STDOUT: %Y.impl_witness.loc5_31.2 => constants.%Y.impl_witness // CHECK:STDOUT: } @@ -289,6 +300,7 @@ impl forall [N:! E] D(N) as I where .Assoc = () { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @U.as.Z.impl(constants.%U) { +// CHECK:STDOUT: %U.patt.loc9_15.2 => constants.%U.patt // CHECK:STDOUT: %U.loc9_15.2 => constants.%U // CHECK:STDOUT: %Z.impl_witness.loc9_31.2 => constants.%Z.impl_witness.4e2 // CHECK:STDOUT: } @@ -298,12 +310,14 @@ impl forall [N:! E] D(N) as I where .Assoc = () { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%V) { +// CHECK:STDOUT: %V.patt.loc11_10.2 => constants.%V.patt // CHECK:STDOUT: %V.loc11_10.1 => constants.%V // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I.WithSelf(constants.%Self.37e) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @U.as.Z.impl(constants.%as_type) { +// CHECK:STDOUT: %U.patt.loc9_15.2 => constants.%U.patt // CHECK:STDOUT: %U.loc9_15.2 => constants.%as_type // CHECK:STDOUT: %Z.impl_witness.loc9_31.2 => constants.%Z.impl_witness.5d1 // CHECK:STDOUT: @@ -311,6 +325,7 @@ impl forall [N:! E] D(N) as I where .Assoc = () { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%Z.facet.4d3) { +// CHECK:STDOUT: %V.patt.loc11_10.2 => constants.%V.patt // CHECK:STDOUT: %V.loc11_10.1 => constants.%Z.facet.4d3 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -324,6 +339,8 @@ impl forall [N:! E] D(N) as I where .Assoc = () { // CHECK:STDOUT: %Z.facet.loc24_18.1 => constants.%Z.facet.4d3 // CHECK:STDOUT: %C.loc24_18.1 => constants.%C.e8d // CHECK:STDOUT: %pattern_type => constants.%pattern_type.ddf +// CHECK:STDOUT: %c.param_patt.loc24_9.2 => constants.%c.param_patt +// CHECK:STDOUT: %c.patt.loc24_9.2 => constants.%c.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- impl_use.carbon @@ -335,6 +352,7 @@ impl forall [N:! E] D(N) as I where .Assoc = () { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self.c39: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.849: type = pattern_type %E [concrete] +// CHECK:STDOUT: %N.patt: %pattern_type.849 = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %N: %E = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %D.type: type = generic_class_type @D [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -357,10 +375,16 @@ impl forall [N:! E] D(N) as I where .Assoc = () { // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %complete_type.782: = complete_type_witness %empty_tuple.type [concrete] // CHECK:STDOUT: %V: %Z.type = symbolic_binding V, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.5d7: type = pattern_type %Z.type [concrete] +// CHECK:STDOUT: %V.patt: %pattern_type.5d7 = symbolic_binding_pattern V, 0 [symbolic] // CHECK:STDOUT: %C.526: type = class_type @C, @C(%Z.facet.416) [symbolic] // CHECK:STDOUT: %pattern_type.d24: type = pattern_type %C.526 [symbolic] +// CHECK:STDOUT: %c.param_patt.6ae: %pattern_type.d24 = value_param_pattern [symbolic] +// CHECK:STDOUT: %c.patt.2df: %pattern_type.d24 = at_binding_pattern c, %c.param_patt.6ae [symbolic] // CHECK:STDOUT: %U: type = symbolic_binding U, 0 [symbolic] // CHECK:STDOUT: %Z.impl_witness.824: = impl_witness imports.%Z.impl_witness_table, @U.as.Z.impl(%U) [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %.68b: require_specific_def_type = require_specific_def @U.as.Z.impl(%as_type) [symbolic] // CHECK:STDOUT: %Z.impl_witness.6f3: = impl_witness imports.%Z.impl_witness_table, @U.as.Z.impl(%as_type) [symbolic] // CHECK:STDOUT: %.Self.9e9: %I.type = symbolic_binding .Self [symbolic_self] @@ -374,6 +398,7 @@ impl forall [N:! E] D(N) as I where .Assoc = () { // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Y.impl_witness.3d4: = impl_witness imports.%Y.impl_witness_table, @T.as.Y.impl(%T) [symbolic] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Y.impl_witness.2e8: = impl_witness imports.%Y.impl_witness_table, @T.as.Y.impl(%empty_tuple.type) [concrete] // CHECK:STDOUT: %Y.facet: %Y.type = facet_value %empty_tuple.type, (%Y.impl_witness.2e8) [concrete] // CHECK:STDOUT: %I_where.type: type = facet_type <@I where %impl.elem0.699 = %Y.facet> [concrete] @@ -383,6 +408,8 @@ impl forall [N:! E] D(N) as I where .Assoc = () { // CHECK:STDOUT: %Z.facet.39d: %Z.type = facet_value %empty_tuple.type, (%Z.impl_witness.1c1) [concrete] // CHECK:STDOUT: %C.00e: type = class_type @C, @C(%Z.facet.39d) [concrete] // CHECK:STDOUT: %pattern_type.78f: type = pattern_type %C.00e [concrete] +// CHECK:STDOUT: %c.param_patt.d23: %pattern_type.78f = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt.152: %pattern_type.78f = at_binding_pattern c, %c.param_patt.d23 [concrete] // CHECK:STDOUT: %D.as.I.impl.F.type: type = fn_type @D.as.I.impl.F, @D.as.I.impl(%N) [symbolic] // CHECK:STDOUT: %D.as.I.impl.F: %D.as.I.impl.F.type = struct_value () [symbolic] // CHECK:STDOUT: %I.facet: %I.type = facet_value %D, (%I.impl_witness) [symbolic] @@ -432,7 +459,7 @@ impl forall [N:! E] D(N) as I where .Assoc = () { // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %E.decl: type = class_decl @E [concrete = constants.%E] {} {} // CHECK:STDOUT: %D.decl: %D.type = class_decl @D [concrete = constants.%D.generic] { -// CHECK:STDOUT: %N.patt: %pattern_type.849 = symbolic_binding_pattern N, 0 [concrete] +// CHECK:STDOUT: %N.patt.loc7_10.1: %pattern_type.849 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc7_10.2 (constants.%N.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc7: type = splice_block %E.ref [concrete = constants.%E] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.c39] @@ -441,7 +468,7 @@ impl forall [N:! E] D(N) as I where .Assoc = () { // CHECK:STDOUT: %N.loc7_10.2: %E = symbolic_binding N, 0 [symbolic = %N.loc7_10.1 (constants.%N)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @D.as.I.impl [concrete] { -// CHECK:STDOUT: %N.patt: %pattern_type.849 = symbolic_binding_pattern N, 0 [concrete] +// CHECK:STDOUT: %N.patt.loc20_15.1: %pattern_type.849 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc20_15.2 (constants.%N.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: %D.type = name_ref D, file.%D.decl [concrete = constants.%D.generic] // CHECK:STDOUT: %N.ref: %E = name_ref N, %N.loc20_15.2 [symbolic = %N.loc20_15.1 (constants.%N)] @@ -496,6 +523,7 @@ impl forall [N:! E] D(N) as I where .Assoc = () { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @U.as.Z.impl(imports.%Main.import_ref.b3bc94.1: type) [from "impl_def.carbon"] { +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt (constants.%U.patt)] // CHECK:STDOUT: %U: type = symbolic_binding U, 0 [symbolic = %U (constants.%U)] // CHECK:STDOUT: %Z.impl_witness: = impl_witness imports.%Z.impl_witness_table, @U.as.Z.impl(%U) [symbolic = %Z.impl_witness (constants.%Z.impl_witness.824)] // CHECK:STDOUT: @@ -508,6 +536,7 @@ impl forall [N:! E] D(N) as I where .Assoc = () { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @T.as.Y.impl(imports.%Main.import_ref.b3bc94.2: type) [from "impl_def.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %Y.impl_witness: = impl_witness imports.%Y.impl_witness_table, @T.as.Y.impl(%T) [symbolic = %Y.impl_witness (constants.%Y.impl_witness.3d4)] // CHECK:STDOUT: @@ -520,6 +549,7 @@ impl forall [N:! E] D(N) as I where .Assoc = () { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @D.as.I.impl(%N.loc20_15.2: %E) { +// CHECK:STDOUT: %N.patt.loc20_15.2: %pattern_type.849 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc20_15.2 (constants.%N.patt)] // CHECK:STDOUT: %N.loc20_15.1: %E = symbolic_binding N, 0 [symbolic = %N.loc20_15.1 (constants.%N)] // CHECK:STDOUT: %D.loc20_24.1: type = class_type @D, @D(%N.loc20_15.1) [symbolic = %D.loc20_24.1 (constants.%D)] // CHECK:STDOUT: %I.impl_witness.loc20_49.2: = impl_witness %I.impl_witness_table, @D.as.I.impl(%N.loc20_15.1) [symbolic = %I.impl_witness.loc20_49.2 (constants.%I.impl_witness)] @@ -530,8 +560,8 @@ impl forall [N:! E] D(N) as I where .Assoc = () { // CHECK:STDOUT: // CHECK:STDOUT: impl: %D.loc20_24.2 as %.loc20_31 { // CHECK:STDOUT: %D.as.I.impl.F.decl: @D.as.I.impl.%D.as.I.impl.F.type (%D.as.I.impl.F.type) = fn_decl @D.as.I.impl.F [symbolic = @D.as.I.impl.%D.as.I.impl.F (constants.%D.as.I.impl.F)] { -// CHECK:STDOUT: %c.param_patt: %pattern_type.78f = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.78f = at_binding_pattern c, %c.param_patt [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.78f = value_param_pattern [concrete = constants.%c.param_patt.d23] +// CHECK:STDOUT: %c.patt: %pattern_type.78f = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt.152] // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %C.00e = value_param call_param0 // CHECK:STDOUT: %.loc21_22.1: type = splice_block %C [concrete = constants.%C.00e] { @@ -564,6 +594,7 @@ impl forall [N:! E] D(N) as I where .Assoc = () { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @D(%N.loc7_10.2: %E) { +// CHECK:STDOUT: %N.patt.loc7_10.2: %pattern_type.849 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc7_10.2 (constants.%N.patt)] // CHECK:STDOUT: %N.loc7_10.1: %E = symbolic_binding N, 0 [symbolic = %N.loc7_10.1 (constants.%N)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -578,6 +609,7 @@ impl forall [N:! E] D(N) as I where .Assoc = () { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(imports.%Main.import_ref.65b: %Z.type) [from "impl_def.carbon"] { +// CHECK:STDOUT: %V.patt: %pattern_type.5d7 = symbolic_binding_pattern V, 0 [symbolic = %V.patt (constants.%V.patt)] // CHECK:STDOUT: %V: %Z.type = symbolic_binding V, 0 [symbolic = %V (constants.%V)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -600,6 +632,8 @@ impl forall [N:! E] D(N) as I where .Assoc = () { // CHECK:STDOUT: %Z.facet: %Z.type = facet_value %as_type, (%Z.lookup_impl_witness) [symbolic = %Z.facet (constants.%Z.facet.416)] // CHECK:STDOUT: %C: type = class_type @C, @C(%Z.facet) [symbolic = %C (constants.%C.526)] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [symbolic = %pattern_type (constants.%pattern_type.d24)] +// CHECK:STDOUT: %c.param_patt: @I.WithSelf.F.%pattern_type (%pattern_type.d24) = value_param_pattern [symbolic = %c.param_patt (constants.%c.param_patt.6ae)] +// CHECK:STDOUT: %c.patt: @I.WithSelf.F.%pattern_type (%pattern_type.d24) = at_binding_pattern c, %c.param_patt [symbolic = %c.patt (constants.%c.patt.2df)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -614,6 +648,7 @@ impl forall [N:! E] D(N) as I where .Assoc = () { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @D(constants.%N) { +// CHECK:STDOUT: %N.patt.loc7_10.2 => constants.%N.patt // CHECK:STDOUT: %N.loc7_10.1 => constants.%N // CHECK:STDOUT: } // CHECK:STDOUT: @@ -633,19 +668,23 @@ impl forall [N:! E] D(N) as I where .Assoc = () { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%V) { +// CHECK:STDOUT: %V.patt => constants.%V.patt // CHECK:STDOUT: %V => constants.%V // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%Z.facet.416) { +// CHECK:STDOUT: %V.patt => constants.%V.patt // CHECK:STDOUT: %V => constants.%Z.facet.416 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @U.as.Z.impl(constants.%U) { +// CHECK:STDOUT: %U.patt => constants.%U.patt // CHECK:STDOUT: %U => constants.%U // CHECK:STDOUT: %Z.impl_witness => constants.%Z.impl_witness.824 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @U.as.Z.impl(constants.%as_type) { +// CHECK:STDOUT: %U.patt => constants.%U.patt // CHECK:STDOUT: %U => constants.%as_type // CHECK:STDOUT: %Z.impl_witness => constants.%Z.impl_witness.6f3 // CHECK:STDOUT: @@ -662,6 +701,8 @@ impl forall [N:! E] D(N) as I where .Assoc = () { // CHECK:STDOUT: %Z.facet => constants.%Z.facet.416 // CHECK:STDOUT: %C => constants.%C.526 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.d24 +// CHECK:STDOUT: %c.param_patt => constants.%c.param_patt.6ae +// CHECK:STDOUT: %c.patt => constants.%c.patt.2df // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I.WithSelf(constants.%.Self.9e9) { @@ -672,11 +713,13 @@ impl forall [N:! E] D(N) as I where .Assoc = () { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @T.as.Y.impl(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %Y.impl_witness => constants.%Y.impl_witness.3d4 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @T.as.Y.impl(constants.%empty_tuple.type) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%empty_tuple.type // CHECK:STDOUT: %Y.impl_witness => constants.%Y.impl_witness.2e8 // CHECK:STDOUT: @@ -684,6 +727,7 @@ impl forall [N:! E] D(N) as I where .Assoc = () { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @D.as.I.impl(constants.%N) { +// CHECK:STDOUT: %N.patt.loc20_15.2 => constants.%N.patt // CHECK:STDOUT: %N.loc20_15.1 => constants.%N // CHECK:STDOUT: %D.loc20_24.1 => constants.%D // CHECK:STDOUT: %I.impl_witness.loc20_49.2 => constants.%I.impl_witness @@ -694,6 +738,7 @@ impl forall [N:! E] D(N) as I where .Assoc = () { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @U.as.Z.impl(constants.%empty_tuple.type) { +// CHECK:STDOUT: %U.patt => constants.%U.patt // CHECK:STDOUT: %U => constants.%empty_tuple.type // CHECK:STDOUT: %Z.impl_witness => constants.%Z.impl_witness.1c1 // CHECK:STDOUT: @@ -701,6 +746,7 @@ impl forall [N:! E] D(N) as I where .Assoc = () { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%Z.facet.39d) { +// CHECK:STDOUT: %V.patt => constants.%V.patt // CHECK:STDOUT: %V => constants.%Z.facet.39d // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -725,5 +771,7 @@ impl forall [N:! E] D(N) as I where .Assoc = () { // CHECK:STDOUT: %Z.facet => constants.%Z.facet.39d // CHECK:STDOUT: %C => constants.%C.00e // CHECK:STDOUT: %pattern_type => constants.%pattern_type.78f +// CHECK:STDOUT: %c.param_patt => constants.%c.param_patt.d23 +// CHECK:STDOUT: %c.patt => constants.%c.patt.152 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/import_thunk.carbon b/toolchain/check/testdata/impl/import_thunk.carbon index 1d77ab1ee12a..77d9ff8ce1c0 100644 --- a/toolchain/check/testdata/impl/import_thunk.carbon +++ b/toolchain/check/testdata/impl/import_thunk.carbon @@ -50,6 +50,8 @@ fn G() { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_struct_type [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = at_binding_pattern x, %x.param_patt [concrete] // CHECK:STDOUT: %I.WithSelf.F.type: type = fn_type @I.WithSelf.F, @I.WithSelf(%Self) [symbolic] // CHECK:STDOUT: %I.WithSelf.F: %I.WithSelf.F.type = struct_value () [symbolic] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] @@ -78,8 +80,8 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %I.WithSelf.F.decl: @I.WithSelf.%I.WithSelf.F.type (%I.WithSelf.F.type) = fn_decl @I.WithSelf.F [symbolic = @I.WithSelf.%I.WithSelf.F (constants.%I.WithSelf.F)] { -// CHECK:STDOUT: %x.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type = value_param_pattern [concrete = constants.%x.param_patt] +// CHECK:STDOUT: %x.patt: %pattern_type = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %empty_struct_type = value_param call_param0 // CHECK:STDOUT: %.loc5_12.1: type = splice_block %.loc5_12.3 [concrete = constants.%empty_struct_type] { @@ -114,12 +116,14 @@ fn G() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %X.patt: %pattern_type.cb1 = symbolic_binding_pattern X, 0 [symbolic] // CHECK:STDOUT: %X: %empty_tuple.type = symbolic_binding X, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.6b1ed7.1: type = class_type @C, @C(%X) [symbolic] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %Y.patt: %pattern_type.cb1 = symbolic_binding_pattern Y, 0 [symbolic] // CHECK:STDOUT: %Y: %empty_tuple.type = symbolic_binding Y, 0 [symbolic] // CHECK:STDOUT: %C.6b1ed7.2: type = class_type @C, @C(%Y) [symbolic] // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] @@ -127,8 +131,12 @@ fn G() { // CHECK:STDOUT: %I.WithSelf.F.type.418: type = fn_type @I.WithSelf.F, @I.WithSelf(%Self.dda) [symbolic] // CHECK:STDOUT: %I.WithSelf.F.ca5: %I.WithSelf.F.type.418 = struct_value () [symbolic] // CHECK:STDOUT: %pattern_type.a96: type = pattern_type %empty_struct_type [concrete] +// CHECK:STDOUT: %x.param_patt.c77: %pattern_type.a96 = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.05f: %pattern_type.a96 = at_binding_pattern x, %x.param_patt.c77 [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness @C.as.I.impl.%I.impl_witness_table, @C.as.I.impl(%Y) [symbolic] // CHECK:STDOUT: %pattern_type.d0f: type = pattern_type %C.6b1ed7.2 [symbolic] +// CHECK:STDOUT: %x.param_patt.bc9: %pattern_type.d0f = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.cc8: %pattern_type.d0f = at_binding_pattern x, %x.param_patt.bc9 [symbolic] // CHECK:STDOUT: %C.as.I.impl.F.type.9a27ec.1: type = fn_type @C.as.I.impl.F.loc8_24.1, @C.as.I.impl(%Y) [symbolic] // CHECK:STDOUT: %C.as.I.impl.F.84dd70.1: %C.as.I.impl.F.type.9a27ec.1 = struct_value () [symbolic] // CHECK:STDOUT: %I.facet: %I.type = facet_value %C.6b1ed7.2, (%I.impl_witness) [symbolic] @@ -182,7 +190,7 @@ fn G() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %X.patt: %pattern_type.cb1 = symbolic_binding_pattern X, 0 [concrete] +// CHECK:STDOUT: %X.patt.loc5_10.1: %pattern_type.cb1 = symbolic_binding_pattern X, 0 [symbolic = %X.patt.loc5_10.2 (constants.%X.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc5_14.1: type = splice_block %.loc5_14.3 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -192,7 +200,7 @@ fn G() { // CHECK:STDOUT: %X.loc5_10.2: %empty_tuple.type = symbolic_binding X, 0 [symbolic = %X.loc5_10.1 (constants.%X)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @C.as.I.impl [concrete] { -// CHECK:STDOUT: %Y.patt: %pattern_type.cb1 = symbolic_binding_pattern Y, 0 [concrete] +// CHECK:STDOUT: %Y.patt.loc7_15.1: %pattern_type.cb1 = symbolic_binding_pattern Y, 0 [symbolic = %Y.patt.loc7_15.2 (constants.%Y.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: %C.type = name_ref C, file.%C.decl [concrete = constants.%C.generic] // CHECK:STDOUT: %Y.ref: %empty_tuple.type = name_ref Y, %Y.loc7_15.2 [symbolic = %Y.loc7_15.1 (constants.%Y)] @@ -219,6 +227,7 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @C.as.I.impl(%Y.loc7_15.2: %empty_tuple.type) { +// CHECK:STDOUT: %Y.patt.loc7_15.2: %pattern_type.cb1 = symbolic_binding_pattern Y, 0 [symbolic = %Y.patt.loc7_15.2 (constants.%Y.patt)] // CHECK:STDOUT: %Y.loc7_15.1: %empty_tuple.type = symbolic_binding Y, 0 [symbolic = %Y.loc7_15.1 (constants.%Y)] // CHECK:STDOUT: %C.loc7_25.1: type = class_type @C, @C(%Y.loc7_15.1) [symbolic = %C.loc7_25.1 (constants.%C.6b1ed7.2)] // CHECK:STDOUT: %I.impl_witness.loc7_32.2: = impl_witness %I.impl_witness_table, @C.as.I.impl(%Y.loc7_15.1) [symbolic = %I.impl_witness.loc7_32.2 (constants.%I.impl_witness)] @@ -231,8 +240,8 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: impl: %C.loc7_25.2 as %I.ref { // CHECK:STDOUT: %C.as.I.impl.F.decl.loc8_24.1: @C.as.I.impl.%C.as.I.impl.F.type.loc8_24.1 (%C.as.I.impl.F.type.9a27ec.1) = fn_decl @C.as.I.impl.F.loc8_24.1 [symbolic = @C.as.I.impl.%C.as.I.impl.F.loc8_24.1 (constants.%C.as.I.impl.F.84dd70.1)] { -// CHECK:STDOUT: %x.param_patt: @C.as.I.impl.F.loc8_24.1.%pattern_type (%pattern_type.d0f) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @C.as.I.impl.F.loc8_24.1.%pattern_type (%pattern_type.d0f) = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %x.param_patt.loc8_16.1: @C.as.I.impl.F.loc8_24.1.%pattern_type (%pattern_type.d0f) = value_param_pattern [symbolic = %x.param_patt.loc8_16.2 (constants.%x.param_patt.bc9)] +// CHECK:STDOUT: %x.patt.loc8_16.1: @C.as.I.impl.F.loc8_24.1.%pattern_type (%pattern_type.d0f) = at_binding_pattern x, %x.param_patt.loc8_16.1 [symbolic = %x.patt.loc8_16.2 (constants.%x.patt.cc8)] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: @C.as.I.impl.F.loc8_24.1.%C.loc8_21.1 (%C.6b1ed7.2) = value_param call_param0 // CHECK:STDOUT: %.loc8: type = splice_block %C.loc8_21.2 [symbolic = %C.loc8_21.1 (constants.%C.6b1ed7.2)] { @@ -243,8 +252,8 @@ fn G() { // CHECK:STDOUT: %x: @C.as.I.impl.F.loc8_24.1.%C.loc8_21.1 (%C.6b1ed7.2) = value_binding x, %x.param // CHECK:STDOUT: } // CHECK:STDOUT: %C.as.I.impl.F.decl.loc8_24.2: @C.as.I.impl.%C.as.I.impl.F.type.loc8_24.2 (%C.as.I.impl.F.type.9a27ec.2) = fn_decl @C.as.I.impl.F.loc8_24.2 [symbolic = @C.as.I.impl.%C.as.I.impl.F.loc8_24.2 (constants.%C.as.I.impl.F.84dd70.2)] { -// CHECK:STDOUT: %x.param_patt: %pattern_type.a96 = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.a96 = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %.1: %pattern_type.a96 = specific_constant constants.%x.param_patt.c77, @I.WithSelf.F(constants.%I.facet) [concrete = constants.%x.param_patt.c77] +// CHECK:STDOUT: %x.patt: %pattern_type.a96 = at_binding_pattern x, %.1 [concrete = constants.%x.patt.05f] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %empty_struct_type = value_param call_param0 // CHECK:STDOUT: %x: %empty_struct_type = value_binding x, %x.param @@ -262,6 +271,7 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%X.loc5_10.2: %empty_tuple.type) { +// CHECK:STDOUT: %X.patt.loc5_10.2: %pattern_type.cb1 = symbolic_binding_pattern X, 0 [symbolic = %X.patt.loc5_10.2 (constants.%X.patt)] // CHECK:STDOUT: %X.loc5_10.1: %empty_tuple.type = symbolic_binding X, 0 [symbolic = %X.loc5_10.1 (constants.%X)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -283,6 +293,8 @@ fn G() { // CHECK:STDOUT: %Y: %empty_tuple.type = symbolic_binding Y, 0 [symbolic = %Y (constants.%Y)] // CHECK:STDOUT: %C.loc8_21.1: type = class_type @C, @C(%Y) [symbolic = %C.loc8_21.1 (constants.%C.6b1ed7.2)] // CHECK:STDOUT: %pattern_type: type = pattern_type %C.loc8_21.1 [symbolic = %pattern_type (constants.%pattern_type.d0f)] +// CHECK:STDOUT: %x.param_patt.loc8_16.2: @C.as.I.impl.F.loc8_24.1.%pattern_type (%pattern_type.d0f) = value_param_pattern [symbolic = %x.param_patt.loc8_16.2 (constants.%x.param_patt.bc9)] +// CHECK:STDOUT: %x.patt.loc8_16.2: @C.as.I.impl.F.loc8_24.1.%pattern_type (%pattern_type.d0f) = at_binding_pattern x, %x.param_patt.loc8_16.2 [symbolic = %x.patt.loc8_16.2 (constants.%x.patt.cc8)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %C.loc8_21.1 [symbolic = %require_complete (constants.%require_complete)] @@ -302,35 +314,37 @@ fn G() { // CHECK:STDOUT: %C: type = class_type @C, @C(%Y) [symbolic = %C (constants.%C.6b1ed7.2)] // CHECK:STDOUT: %require_complete: = require_complete_type %C [symbolic = %require_complete (constants.%require_complete)] // CHECK:STDOUT: %C.val: @C.as.I.impl.F.loc8_24.2.%C (%C.6b1ed7.2) = struct_value () [symbolic = %C.val (constants.%C.val)] -// CHECK:STDOUT: %.7: ref @C.as.I.impl.F.loc8_24.2.%C (%C.6b1ed7.2) = temporary invalid, %C.val [symbolic = %.7 (constants.%.e66)] +// CHECK:STDOUT: %.9: ref @C.as.I.impl.F.loc8_24.2.%C (%C.6b1ed7.2) = temporary invalid, %C.val [symbolic = %.9 (constants.%.e66)] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %C, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness)] -// CHECK:STDOUT: %Destroy.facet.2: %Destroy.type = facet_value %C, (%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.2 (constants.%Destroy.facet.886)] -// CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.2) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.ba0)] -// CHECK:STDOUT: %.8: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Destroy.facet.2 [symbolic = %.8 (constants.%.854)] -// CHECK:STDOUT: %impl.elem0.2: @C.as.I.impl.F.loc8_24.2.%.8 (%.854) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.2 (constants.%impl.elem0)] -// CHECK:STDOUT: %bound_method.3: = bound_method %.7, %impl.elem0.2 [symbolic = %bound_method.3 (constants.%bound_method.3e7)] -// CHECK:STDOUT: %specific_impl_fn.2: = specific_impl_function %impl.elem0.2, @Destroy.WithSelf.Op(%Destroy.facet.2) [symbolic = %specific_impl_fn.2 (constants.%specific_impl_fn)] -// CHECK:STDOUT: %bound_method.4: = bound_method %.7, %specific_impl_fn.2 [symbolic = %bound_method.4 (constants.%bound_method.ef4)] +// CHECK:STDOUT: %Destroy.facet.3: %Destroy.type = facet_value %C, (%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.3 (constants.%Destroy.facet.886)] +// CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.3) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.ba0)] +// CHECK:STDOUT: %.10: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Destroy.facet.3 [symbolic = %.10 (constants.%.854)] +// CHECK:STDOUT: %impl.elem0.2: @C.as.I.impl.F.loc8_24.2.%.10 (%.854) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.2 (constants.%impl.elem0)] +// CHECK:STDOUT: %bound_method.3: = bound_method %.9, %impl.elem0.2 [symbolic = %bound_method.3 (constants.%bound_method.3e7)] +// CHECK:STDOUT: %specific_impl_fn.2: = specific_impl_function %impl.elem0.2, @Destroy.WithSelf.Op(%Destroy.facet.3) [symbolic = %specific_impl_fn.2 (constants.%specific_impl_fn)] +// CHECK:STDOUT: %bound_method.4: = bound_method %.9, %specific_impl_fn.2 [symbolic = %bound_method.4 (constants.%bound_method.ef4)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%x.param: %empty_struct_type) [thunk @C.as.I.impl.%C.as.I.impl.F.decl.loc8_24.1 for imports.%I.WithSelf.F.decl, @I.WithSelf.F(constants.%I.facet)] { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %.loc8: @C.as.I.impl.F.loc8_24.2.%C.as.I.impl.F.type (%C.as.I.impl.F.type.9a27ec.1) = specific_constant @C.as.I.impl.%C.as.I.impl.F.decl.loc8_24.1, @C.as.I.impl(constants.%Y) [symbolic = %C.as.I.impl.F (constants.%C.as.I.impl.F.84dd70.1)] // CHECK:STDOUT: %F.ref: @C.as.I.impl.F.loc8_24.2.%C.as.I.impl.F.type (%C.as.I.impl.F.type.9a27ec.1) = name_ref F, %.loc8 [symbolic = %C.as.I.impl.F (constants.%C.as.I.impl.F.84dd70.1)] // CHECK:STDOUT: %C.as.I.impl.F.specific_fn.loc8_24.1: = specific_function %F.ref, @C.as.I.impl.F.loc8_24.1(constants.%Y) [symbolic = %C.as.I.impl.F.specific_fn.loc8_24.2 (constants.%C.as.I.impl.F.specific_fn)] -// CHECK:STDOUT: %.1: ref @C.as.I.impl.F.loc8_24.2.%C (%C.6b1ed7.2) = temporary_storage -// CHECK:STDOUT: %.2: init @C.as.I.impl.F.loc8_24.2.%C (%C.6b1ed7.2) to %.1 = class_init () [symbolic = %C.val (constants.%C.val)] -// CHECK:STDOUT: %.3: init @C.as.I.impl.F.loc8_24.2.%C (%C.6b1ed7.2) = converted %x.param, %.2 [symbolic = %C.val (constants.%C.val)] -// CHECK:STDOUT: %.4: ref @C.as.I.impl.F.loc8_24.2.%C (%C.6b1ed7.2) = temporary %.1, %.3 [symbolic = %.7 (constants.%.e66)] -// CHECK:STDOUT: %.5: @C.as.I.impl.F.loc8_24.2.%C (%C.6b1ed7.2) = acquire_value %.4 [symbolic = %C.val (constants.%C.val)] -// CHECK:STDOUT: %C.as.I.impl.F.call: init %empty_tuple.type = call %C.as.I.impl.F.specific_fn.loc8_24.1(%.5) +// CHECK:STDOUT: %.2: ref @C.as.I.impl.F.loc8_24.2.%C (%C.6b1ed7.2) = temporary_storage +// CHECK:STDOUT: %.3: init @C.as.I.impl.F.loc8_24.2.%C (%C.6b1ed7.2) to %.2 = class_init () [symbolic = %C.val (constants.%C.val)] +// CHECK:STDOUT: %.4: init @C.as.I.impl.F.loc8_24.2.%C (%C.6b1ed7.2) = converted %x.param, %.3 [symbolic = %C.val (constants.%C.val)] +// CHECK:STDOUT: %.5: ref @C.as.I.impl.F.loc8_24.2.%C (%C.6b1ed7.2) = temporary %.2, %.4 [symbolic = %.9 (constants.%.e66)] +// CHECK:STDOUT: %.6: @C.as.I.impl.F.loc8_24.2.%C (%C.6b1ed7.2) = acquire_value %.5 [symbolic = %C.val (constants.%C.val)] +// CHECK:STDOUT: %C.as.I.impl.F.call: init %empty_tuple.type = call %C.as.I.impl.F.specific_fn.loc8_24.1(%.6) // CHECK:STDOUT: %Op.ref: %Destroy.assoc_type = name_ref Op, imports.%Core.import_ref.c64 [concrete = constants.%assoc0] -// CHECK:STDOUT: %impl.elem0.1: @C.as.I.impl.F.loc8_24.2.%.8 (%.854) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.2 (constants.%impl.elem0)] -// CHECK:STDOUT: %bound_method.1: = bound_method %.4, %impl.elem0.1 [symbolic = %bound_method.3 (constants.%bound_method.3e7)] -// CHECK:STDOUT: %Destroy.facet.1: %Destroy.type = facet_value constants.%C.6b1ed7.2, (constants.%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.2 (constants.%Destroy.facet.886)] -// CHECK:STDOUT: %.6: %Destroy.type = converted constants.%C.6b1ed7.2, %Destroy.facet.1 [symbolic = %Destroy.facet.2 (constants.%Destroy.facet.886)] +// CHECK:STDOUT: %impl.elem0.1: @C.as.I.impl.F.loc8_24.2.%.10 (%.854) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.2 (constants.%impl.elem0)] +// CHECK:STDOUT: %bound_method.1: = bound_method %.5, %impl.elem0.1 [symbolic = %bound_method.3 (constants.%bound_method.3e7)] +// CHECK:STDOUT: %Destroy.facet.1: %Destroy.type = facet_value constants.%C.6b1ed7.2, (constants.%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.3 (constants.%Destroy.facet.886)] +// CHECK:STDOUT: %.7: %Destroy.type = converted constants.%C.6b1ed7.2, %Destroy.facet.1 [symbolic = %Destroy.facet.3 (constants.%Destroy.facet.886)] +// CHECK:STDOUT: %Destroy.facet.2: %Destroy.type = facet_value constants.%C.6b1ed7.2, (constants.%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.3 (constants.%Destroy.facet.886)] +// CHECK:STDOUT: %.8: %Destroy.type = converted constants.%C.6b1ed7.2, %Destroy.facet.2 [symbolic = %Destroy.facet.3 (constants.%Destroy.facet.886)] // CHECK:STDOUT: %specific_impl_fn.1: = specific_impl_function %impl.elem0.1, @Destroy.WithSelf.Op(constants.%Destroy.facet.886) [symbolic = %specific_impl_fn.2 (constants.%specific_impl_fn)] -// CHECK:STDOUT: %bound_method.2: = bound_method %.4, %specific_impl_fn.1 [symbolic = %bound_method.4 (constants.%bound_method.ef4)] -// CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.2(%.4) +// CHECK:STDOUT: %bound_method.2: = bound_method %.5, %specific_impl_fn.1 [symbolic = %bound_method.4 (constants.%bound_method.ef4)] +// CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.2(%.5) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: } @@ -338,10 +352,12 @@ fn G() { // CHECK:STDOUT: fn @Destroy.Op(%self.param: ref %empty_struct_type) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%X) { +// CHECK:STDOUT: %X.patt.loc5_10.2 => constants.%X.patt // CHECK:STDOUT: %X.loc5_10.1 => constants.%X // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%Y) { +// CHECK:STDOUT: %X.patt.loc5_10.2 => constants.%X.patt // CHECK:STDOUT: %X.loc5_10.1 => constants.%Y // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -357,6 +373,7 @@ fn G() { // CHECK:STDOUT: specific @I.WithSelf.F(constants.%Self.dda) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @C.as.I.impl(constants.%Y) { +// CHECK:STDOUT: %Y.patt.loc7_15.2 => constants.%Y.patt // CHECK:STDOUT: %Y.loc7_15.1 => constants.%Y // CHECK:STDOUT: %C.loc7_25.1 => constants.%C.6b1ed7.2 // CHECK:STDOUT: %I.impl_witness.loc7_32.2 => constants.%I.impl_witness @@ -372,6 +389,8 @@ fn G() { // CHECK:STDOUT: %Y => constants.%Y // CHECK:STDOUT: %C.loc8_21.1 => constants.%C.6b1ed7.2 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.d0f +// CHECK:STDOUT: %x.param_patt.loc8_16.2 => constants.%x.param_patt.bc9 +// CHECK:STDOUT: %x.patt.loc8_16.2 => constants.%x.patt.cc8 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete @@ -399,6 +418,8 @@ fn G() { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %X: %empty_tuple.type = symbolic_binding X, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %X.patt: %pattern_type.cb1 = symbolic_binding_pattern X, 0 [symbolic] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %C.2c9: type = class_type @C, @C(%empty_tuple) [concrete] // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] @@ -415,6 +436,9 @@ fn G() { // CHECK:STDOUT: %C.as.I.impl.F.type.c7d3b5.2: type = fn_type @C.as.I.impl.F.2, @C.as.I.impl(%Y) [symbolic] // CHECK:STDOUT: %C.as.I.impl.F.c1d971.2: %C.as.I.impl.F.type.c7d3b5.2 = struct_value () [symbolic] // CHECK:STDOUT: %pattern_type.d0f: type = pattern_type %C.6b1ed7.2 [symbolic] +// CHECK:STDOUT: %x.param_patt.bc9: %pattern_type.d0f = value_param_pattern [symbolic] +// CHECK:STDOUT: %Y.patt: %pattern_type.cb1 = symbolic_binding_pattern Y, 0 [symbolic] +// CHECK:STDOUT: %x.patt.cc8: %pattern_type.d0f = at_binding_pattern x, %x.param_patt.bc9 [symbolic] // CHECK:STDOUT: %require_complete: = require_complete_type %C.6b1ed7.2 [symbolic] // CHECK:STDOUT: %I.facet.cee: %I.type = facet_value %C.6b1ed7.2, (%I.impl_witness.95e) [symbolic] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] @@ -441,6 +465,8 @@ fn G() { // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %C.as.I.impl.F.specific_fn.e3e0cd.1: = specific_function %C.as.I.impl.F.4ca3bc.2, @C.as.I.impl.F.1(%empty_tuple) [concrete] // CHECK:STDOUT: %pattern_type.7b9: type = pattern_type %C.2c9 [concrete] +// CHECK:STDOUT: %x.param_patt.221: %pattern_type.7b9 = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.565: %pattern_type.7b9 = at_binding_pattern x, %x.param_patt.221 [concrete] // CHECK:STDOUT: %C.as.I.impl.F.specific_fn.e3e0cd.2: = specific_function %C.as.I.impl.F.4ca3bc.1, @C.as.I.impl.F.2(%empty_tuple) [concrete] // CHECK:STDOUT: %C.val.168: %C.2c9 = struct_value () [concrete] // CHECK:STDOUT: %.790: ref %C.2c9 = temporary invalid, %C.val.168 [concrete] @@ -504,6 +530,7 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @C.as.I.impl(imports.%Main.import_ref.c90e1a.4: %empty_tuple.type) [from "b.carbon"] { +// CHECK:STDOUT: %Y.patt: %pattern_type.cb1 = symbolic_binding_pattern Y, 0 [symbolic = %Y.patt (constants.%Y.patt)] // CHECK:STDOUT: %Y: %empty_tuple.type = symbolic_binding Y, 0 [symbolic = %Y (constants.%Y)] // CHECK:STDOUT: %C: type = class_type @C, @C(%Y) [symbolic = %C (constants.%C.6b1ed7.2)] // CHECK:STDOUT: %I.impl_witness: = impl_witness imports.%I.impl_witness_table, @C.as.I.impl(%Y) [symbolic = %I.impl_witness (constants.%I.impl_witness.95e)] @@ -521,6 +548,7 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(imports.%Main.import_ref.c90e1a.1: %empty_tuple.type) [from "b.carbon"] { +// CHECK:STDOUT: %X.patt: %pattern_type.cb1 = symbolic_binding_pattern X, 0 [symbolic = %X.patt (constants.%X.patt)] // CHECK:STDOUT: %X: %empty_tuple.type = symbolic_binding X, 0 [symbolic = %X (constants.%X)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -592,6 +620,8 @@ fn G() { // CHECK:STDOUT: %Y: %empty_tuple.type = symbolic_binding Y, 0 [symbolic = %Y (constants.%Y)] // CHECK:STDOUT: %C: type = class_type @C, @C(%Y) [symbolic = %C (constants.%C.6b1ed7.2)] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [symbolic = %pattern_type (constants.%pattern_type.d0f)] +// CHECK:STDOUT: %x.param_patt: @C.as.I.impl.F.2.%pattern_type (%pattern_type.d0f) = value_param_pattern [symbolic = %x.param_patt (constants.%x.param_patt.bc9)] +// CHECK:STDOUT: %x.patt: @C.as.I.impl.F.2.%pattern_type (%pattern_type.d0f) = at_binding_pattern x, %x.param_patt [symbolic = %x.patt (constants.%x.patt.cc8)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %C [symbolic = %require_complete (constants.%require_complete)] @@ -607,10 +637,12 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%X) { +// CHECK:STDOUT: %X.patt => constants.%X.patt // CHECK:STDOUT: %X => constants.%X // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%empty_tuple) { +// CHECK:STDOUT: %X.patt => constants.%X.patt // CHECK:STDOUT: %X => constants.%empty_tuple // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -626,12 +658,14 @@ fn G() { // CHECK:STDOUT: specific @I.WithSelf.F(constants.%Self.dda) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%Y) { +// CHECK:STDOUT: %X.patt => constants.%X.patt // CHECK:STDOUT: %X => constants.%Y // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C.as.I.impl(constants.%Y) { +// CHECK:STDOUT: %Y.patt => constants.%Y.patt // CHECK:STDOUT: %Y => constants.%Y // CHECK:STDOUT: %C => constants.%C.6b1ed7.2 // CHECK:STDOUT: %I.impl_witness => constants.%I.impl_witness.95e @@ -647,6 +681,8 @@ fn G() { // CHECK:STDOUT: %Y => constants.%Y // CHECK:STDOUT: %C => constants.%C.6b1ed7.2 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.d0f +// CHECK:STDOUT: %x.param_patt => constants.%x.param_patt.bc9 +// CHECK:STDOUT: %x.patt => constants.%x.patt.cc8 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete @@ -657,6 +693,7 @@ fn G() { // CHECK:STDOUT: specific @C.as.I.impl.F.1(constants.%Y) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @C.as.I.impl(constants.%empty_tuple) { +// CHECK:STDOUT: %Y.patt => constants.%Y.patt // CHECK:STDOUT: %Y => constants.%empty_tuple // CHECK:STDOUT: %C => constants.%C.2c9 // CHECK:STDOUT: %I.impl_witness => constants.%I.impl_witness.953 @@ -699,6 +736,8 @@ fn G() { // CHECK:STDOUT: %Y => constants.%empty_tuple // CHECK:STDOUT: %C => constants.%C.2c9 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.7b9 +// CHECK:STDOUT: %x.param_patt => constants.%x.param_patt.221 +// CHECK:STDOUT: %x.patt => constants.%x.patt.565 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type diff --git a/toolchain/check/testdata/impl/import_use_generic.carbon b/toolchain/check/testdata/impl/import_use_generic.carbon index c960f277c5eb..9e854b663eaa 100644 --- a/toolchain/check/testdata/impl/import_use_generic.carbon +++ b/toolchain/check/testdata/impl/import_use_generic.carbon @@ -59,6 +59,7 @@ fn H() -> C({}).(I.F)() {} // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] @@ -85,7 +86,7 @@ fn H() -> C({}).(I.F)() {} // CHECK:STDOUT: .I = %I.decl // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc4_10.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_10.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_13.1: type = splice_block %.loc4_13.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -95,7 +96,7 @@ fn H() -> C({}).(I.F)() {} // CHECK:STDOUT: } // CHECK:STDOUT: %I.decl: type = interface_decl @I [concrete = constants.%I.type] {} {} // CHECK:STDOUT: impl_decl @C.as.I.impl [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc10_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc10_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: %C.type = name_ref C, file.%C.decl [concrete = constants.%C.generic] // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc10_15.2 [symbolic = %T.loc10_15.1 (constants.%T)] @@ -126,6 +127,7 @@ fn H() -> C({}).(I.F)() {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @C.as.I.impl(%T.loc10_15.2: type) { +// CHECK:STDOUT: %T.patt.loc10_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc10_15.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc10_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc10_15.1 (constants.%T)] // CHECK:STDOUT: %C.loc10_27.1: type = class_type @C, @C(%T.loc10_15.1) [symbolic = %C.loc10_27.1 (constants.%C)] // CHECK:STDOUT: %I.impl_witness.loc10_34.2: = impl_witness %I.impl_witness_table, @C.as.I.impl(%T.loc10_15.1) [symbolic = %I.impl_witness.loc10_34.2 (constants.%I.impl_witness)] @@ -147,6 +149,7 @@ fn H() -> C({}).(I.F)() {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc4_10.2: type) { +// CHECK:STDOUT: %T.patt.loc4_10.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_10.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_10.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_10.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -174,6 +177,7 @@ fn H() -> C({}).(I.F)() {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_10.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_10.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -187,6 +191,7 @@ fn H() -> C({}).(I.F)() {} // CHECK:STDOUT: specific @I.WithSelf.F(constants.%Self) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @C.as.I.impl(constants.%T) { +// CHECK:STDOUT: %T.patt.loc10_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc10_15.1 => constants.%T // CHECK:STDOUT: %C.loc10_27.1 => constants.%C // CHECK:STDOUT: %I.impl_witness.loc10_34.2 => constants.%I.impl_witness @@ -217,9 +222,13 @@ fn H() -> C({}).(I.F)() {} // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %C.1d0: type = class_type @C, @C(%T) [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %C.d8e: type = class_type @C, @C(%empty_struct_type) [concrete] // CHECK:STDOUT: %pattern_type.2fd: type = pattern_type %C.d8e [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.2fd = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.2fd = var_pattern %c.patt [concrete] // CHECK:STDOUT: %C.val: %C.d8e = struct_value () [concrete] // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] // CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic] @@ -274,8 +283,8 @@ fn H() -> C({}).(I.F)() {} // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.2fd = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.2fd = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.2fd = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type.2fd = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C.d8e = var %c.var_patt [concrete] // CHECK:STDOUT: %.loc6_12.1: type = splice_block %C [concrete = constants.%C.d8e] { @@ -286,7 +295,7 @@ fn H() -> C({}).(I.F)() {} // CHECK:STDOUT: } // CHECK:STDOUT: %c: ref %C.d8e = ref_binding c, %c.var [concrete = %c.var] // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %return.patt: = return_slot_pattern , [concrete] +// CHECK:STDOUT: %return.patt: = return_slot_pattern , [concrete = ] // CHECK:STDOUT: } { // CHECK:STDOUT: %c.ref: ref %C.d8e = name_ref c, file.%c [concrete = file.%c.var] // CHECK:STDOUT: %I.ref: type = name_ref I, imports.%Main.I [concrete = constants.%I.type] @@ -295,7 +304,7 @@ fn H() -> C({}).(I.F)() {} // CHECK:STDOUT: %return: = return_slot // CHECK:STDOUT: } // CHECK:STDOUT: %H.decl: %H.type = fn_decl @H [concrete = constants.%H] { -// CHECK:STDOUT: %return.patt: = return_slot_pattern , [concrete] +// CHECK:STDOUT: %return.patt: = return_slot_pattern , [concrete = ] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: %C.type = name_ref C, imports.%Main.C [concrete = constants.%C.generic] // CHECK:STDOUT: %.loc25_14: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] @@ -323,6 +332,7 @@ fn H() -> C({}).(I.F)() {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @C.as.I.impl(imports.%Main.import_ref.b3bc94.3: type) [from "import_generic.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C.1d0)] // CHECK:STDOUT: %I.impl_witness: = impl_witness imports.%I.impl_witness_table, @C.as.I.impl(%T) [symbolic = %I.impl_witness (constants.%I.impl_witness.5b2)] @@ -338,6 +348,7 @@ fn H() -> C({}).(I.F)() {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(imports.%Main.import_ref.b3bc94.1: type) [from "import_generic.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -378,10 +389,12 @@ fn H() -> C({}).(I.F)() {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%empty_struct_type) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%empty_struct_type // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -397,6 +410,7 @@ fn H() -> C({}).(I.F)() {} // CHECK:STDOUT: specific @I.WithSelf.F(constants.%Self) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @C.as.I.impl(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %C => constants.%C.1d0 // CHECK:STDOUT: %I.impl_witness => constants.%I.impl_witness.5b2 @@ -409,6 +423,7 @@ fn H() -> C({}).(I.F)() {} // CHECK:STDOUT: specific @C.as.I.impl.F(constants.%T) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @C.as.I.impl(constants.%empty_struct_type) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%empty_struct_type // CHECK:STDOUT: %C => constants.%C.d8e // CHECK:STDOUT: %I.impl_witness => constants.%I.impl_witness.a73 diff --git a/toolchain/check/testdata/impl/incomplete.carbon b/toolchain/check/testdata/impl/incomplete.carbon index 2e47a06fd55a..e5ce0387c327 100644 --- a/toolchain/check/testdata/impl/incomplete.carbon +++ b/toolchain/check/testdata/impl/incomplete.carbon @@ -705,7 +705,7 @@ interface B { // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.I.impl: %C.ref as %.loc8_13 { // CHECK:STDOUT: %C.as.I.impl.F.decl: %C.as.I.impl.F.type = fn_decl @C.as.I.impl.F [concrete = constants.%C.as.I.impl.F] { -// CHECK:STDOUT: %return.patt: = return_slot_pattern , [concrete] +// CHECK:STDOUT: %return.patt: = return_slot_pattern , [concrete = ] // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref: type = name_ref Self, @C.as.I.impl.%C.ref [concrete = constants.%C] // CHECK:STDOUT: %Incomplete.ref: type = name_ref Incomplete, file.%Incomplete.decl [concrete = constants.%Incomplete.type] @@ -796,6 +796,7 @@ interface B { // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %X_where.type: type = facet_type <@X where %impl.elem0 = %empty_struct_type> [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %X_where.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: %X_where.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] @@ -812,7 +813,7 @@ interface B { // CHECK:STDOUT: %Y.decl: type = constraint_decl @Y [concrete = constants.%Y.type] {} {} // CHECK:STDOUT: %X.decl: type = interface_decl @X [concrete = constants.%X.type] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc16_14.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc16_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc16_19.1: type = splice_block %.loc16_19.2 [concrete = constants.%X_where.type] { // CHECK:STDOUT: %.Self.loc16_14: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.c39] @@ -898,6 +899,7 @@ interface B { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc16_14.2: %X_where.type) { +// CHECK:STDOUT: %T.patt.loc16_14.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc16_14.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc16_14.1: %X_where.type = symbolic_binding T, 0 [symbolic = %T.loc16_14.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -938,6 +940,7 @@ interface B { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T) { +// CHECK:STDOUT: %T.patt.loc16_14.2 => constants.%T.patt // CHECK:STDOUT: %T.loc16_14.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/interface_args.carbon b/toolchain/check/testdata/impl/interface_args.carbon index 3e12cdbca3e4..3b9cb33a2eeb 100644 --- a/toolchain/check/testdata/impl/interface_args.carbon +++ b/toolchain/check/testdata/impl/interface_args.carbon @@ -114,6 +114,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %Dest: type = symbolic_binding Dest, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -121,8 +122,12 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Self: %ImplicitAs.type.3aa = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] // CHECK:STDOUT: %pattern_type.701: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt: %pattern_type.701 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt: %pattern_type.701 = at_binding_pattern self, %self.param_patt [symbolic] // CHECK:STDOUT: %.184: Core.Form = init_form %Dest [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %Dest [symbolic] +// CHECK:STDOUT: %return.param_patt: %pattern_type.51d = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt: %pattern_type.51d = return_slot_pattern %return.param_patt, %Dest [symbolic] // CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.type: type = fn_type @ImplicitAs.WithSelf.Convert, @ImplicitAs.WithSelf(%Dest, %Self) [symbolic] // CHECK:STDOUT: %ImplicitAs.WithSelf.Convert: %ImplicitAs.WithSelf.Convert.type = struct_value () [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] @@ -134,7 +139,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: .ImplicitAs = %ImplicitAs.decl // CHECK:STDOUT: } // CHECK:STDOUT: %ImplicitAs.decl: %ImplicitAs.type.0ff = interface_decl @ImplicitAs [concrete = constants.%ImplicitAs.generic] { -// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [concrete] +// CHECK:STDOUT: %Dest.patt.loc3_26.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc3_26.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc3_29.1: type = splice_block %.loc3_29.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -145,6 +150,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(%Dest.loc3_26.2: type) { +// CHECK:STDOUT: %Dest.patt.loc3_26.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc3_26.2 (constants.%Dest.patt)] // CHECK:STDOUT: %Dest.loc3_26.1: type = symbolic_binding Dest, 0 [symbolic = %Dest.loc3_26.1 (constants.%Dest)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -157,10 +163,10 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.decl: @ImplicitAs.WithSelf.%ImplicitAs.WithSelf.Convert.type (%ImplicitAs.WithSelf.Convert.type) = fn_decl @ImplicitAs.WithSelf.Convert [symbolic = @ImplicitAs.WithSelf.%ImplicitAs.WithSelf.Convert (constants.%ImplicitAs.WithSelf.Convert)] { -// CHECK:STDOUT: %self.param_patt: @ImplicitAs.WithSelf.Convert.%pattern_type.loc4_14 (%pattern_type.701) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @ImplicitAs.WithSelf.Convert.%pattern_type.loc4_14 (%pattern_type.701) = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @ImplicitAs.WithSelf.Convert.%pattern_type.loc4_23 (%pattern_type.51d) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @ImplicitAs.WithSelf.Convert.%pattern_type.loc4_23 (%pattern_type.51d) = return_slot_pattern %return.param_patt, %Dest.ref [concrete] +// CHECK:STDOUT: %self.param_patt.loc4_14.1: @ImplicitAs.WithSelf.Convert.%pattern_type.loc4_14 (%pattern_type.701) = value_param_pattern [symbolic = %self.param_patt.loc4_14.2 (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt.loc4_14.1: @ImplicitAs.WithSelf.Convert.%pattern_type.loc4_14 (%pattern_type.701) = at_binding_pattern self, %self.param_patt.loc4_14.1 [symbolic = %self.patt.loc4_14.2 (constants.%self.patt)] +// CHECK:STDOUT: %return.param_patt.loc4_23.1: @ImplicitAs.WithSelf.Convert.%pattern_type.loc4_23 (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt.loc4_23.2 (constants.%return.param_patt)] +// CHECK:STDOUT: %return.patt.loc4_20.1: @ImplicitAs.WithSelf.Convert.%pattern_type.loc4_23 (%pattern_type.51d) = return_slot_pattern %return.param_patt.loc4_23.1, %Dest.ref [symbolic = %return.patt.loc4_20.2 (constants.%return.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @ImplicitAs.%Dest.loc3_26.2 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %.loc4_23.2: Core.Form = init_form %Dest.ref [symbolic = %.loc4_23.1 (constants.%.184)] @@ -194,13 +200,18 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Self: @ImplicitAs.WithSelf.Convert.%ImplicitAs.type (%ImplicitAs.type.3aa) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc4_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc4_14.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type.loc4_14: type = pattern_type %Self.as_type.loc4_14.1 [symbolic = %pattern_type.loc4_14 (constants.%pattern_type.701)] +// CHECK:STDOUT: %self.param_patt.loc4_14.2: @ImplicitAs.WithSelf.Convert.%pattern_type.loc4_14 (%pattern_type.701) = value_param_pattern [symbolic = %self.param_patt.loc4_14.2 (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt.loc4_14.2: @ImplicitAs.WithSelf.Convert.%pattern_type.loc4_14 (%pattern_type.701) = at_binding_pattern self, %self.param_patt.loc4_14.2 [symbolic = %self.patt.loc4_14.2 (constants.%self.patt)] // CHECK:STDOUT: %.loc4_23.1: Core.Form = init_form %Dest [symbolic = %.loc4_23.1 (constants.%.184)] // CHECK:STDOUT: %pattern_type.loc4_23: type = pattern_type %Dest [symbolic = %pattern_type.loc4_23 (constants.%pattern_type.51d)] +// CHECK:STDOUT: %return.param_patt.loc4_23.2: @ImplicitAs.WithSelf.Convert.%pattern_type.loc4_23 (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt.loc4_23.2 (constants.%return.param_patt)] +// CHECK:STDOUT: %return.patt.loc4_20.2: @ImplicitAs.WithSelf.Convert.%pattern_type.loc4_23 (%pattern_type.51d) = return_slot_pattern %return.param_patt.loc4_23.2, %Dest [symbolic = %return.patt.loc4_20.2 (constants.%return.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @ImplicitAs.WithSelf.Convert.%Self.as_type.loc4_14.1 (%Self.as_type)) -> out %return.param: @ImplicitAs.WithSelf.Convert.%Dest (%Dest); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(constants.%Dest) { +// CHECK:STDOUT: %Dest.patt.loc3_26.2 => constants.%Dest.patt // CHECK:STDOUT: %Dest.loc3_26.1 => constants.%Dest // CHECK:STDOUT: } // CHECK:STDOUT: @@ -212,8 +223,12 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc4_14.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type.loc4_14 => constants.%pattern_type.701 +// CHECK:STDOUT: %self.param_patt.loc4_14.2 => constants.%self.param_patt +// CHECK:STDOUT: %self.patt.loc4_14.2 => constants.%self.patt // CHECK:STDOUT: %.loc4_23.1 => constants.%.184 // CHECK:STDOUT: %pattern_type.loc4_23 => constants.%pattern_type.51d +// CHECK:STDOUT: %return.param_patt.loc4_23.2 => constants.%return.param_patt +// CHECK:STDOUT: %return.patt.loc4_20.2 => constants.%return.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- action.carbon @@ -222,6 +237,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Action.type.538: type = generic_interface_type @Action [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -230,6 +246,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Self.67c: %Action.type.cbf = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.67c [symbolic] // CHECK:STDOUT: %pattern_type.085: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt.256: %pattern_type.085 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.8a1: %pattern_type.085 = at_binding_pattern self, %self.param_patt.256 [symbolic] // CHECK:STDOUT: %Action.WithSelf.Op.type.667: type = fn_type @Action.WithSelf.Op, @Action.WithSelf(%T, %Self.67c) [symbolic] // CHECK:STDOUT: %Action.WithSelf.Op.217: %Action.WithSelf.Op.type.667 = struct_value () [symbolic] // CHECK:STDOUT: %Action.assoc_type.1c3: type = assoc_entity_type @Action, @Action(%T) [symbolic] @@ -247,11 +265,15 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Action.assoc_type.4ce: type = assoc_entity_type @Action, @Action(%B) [concrete] // CHECK:STDOUT: %assoc0.005: %Action.assoc_type.4ce = assoc_entity element0, @Action.WithSelf.%Action.WithSelf.Op.decl [concrete] // CHECK:STDOUT: %pattern_type.9ef: type = pattern_type %A [concrete] +// CHECK:STDOUT: %self.param_patt.04e: %pattern_type.9ef = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.312: %pattern_type.9ef = at_binding_pattern self, %self.param_patt.04e [concrete] // CHECK:STDOUT: %A.as.Action.impl.Op.type: type = fn_type @A.as.Action.impl.Op [concrete] // CHECK:STDOUT: %A.as.Action.impl.Op: %A.as.Action.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %Action.facet: %Action.type.5d2 = facet_value %A, (%Action.impl_witness) [concrete] // CHECK:STDOUT: %Action.WithSelf.Op.type.e59: type = fn_type @Action.WithSelf.Op, @Action.WithSelf(%B, %Action.facet) [concrete] // CHECK:STDOUT: %Action.WithSelf.Op.c3b: %Action.WithSelf.Op.type.e59 = struct_value () [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.9ef = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.9ef = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %.898: type = fn_type_with_self_type %Action.WithSelf.Op.type.e59, %Action.facet [concrete] @@ -275,7 +297,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Action.decl: %Action.type.538 = interface_decl @Action [concrete = constants.%Action.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc4_19.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_19.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_22.1: type = splice_block %.loc4_22.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -293,8 +315,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Action.type: type = facet_type <@Action, @Action(constants.%B)> [concrete = constants.%Action.type.5d2] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.9ef = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.9ef = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.9ef = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.9ef = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %A = value_param call_param0 // CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A] @@ -303,6 +325,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Action(%T.loc4_19.2: type) { +// CHECK:STDOUT: %T.patt.loc4_19.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_19.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_19.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_19.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -315,8 +338,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %Action.WithSelf.Op.decl: @Action.WithSelf.%Action.WithSelf.Op.type (%Action.WithSelf.Op.type.667) = fn_decl @Action.WithSelf.Op [symbolic = @Action.WithSelf.%Action.WithSelf.Op (constants.%Action.WithSelf.Op.217)] { -// CHECK:STDOUT: %self.param_patt: @Action.WithSelf.Op.%pattern_type (%pattern_type.085) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @Action.WithSelf.Op.%pattern_type (%pattern_type.085) = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc5_9.1: @Action.WithSelf.Op.%pattern_type (%pattern_type.085) = value_param_pattern [symbolic = %self.param_patt.loc5_9.2 (constants.%self.param_patt.256)] +// CHECK:STDOUT: %self.patt.loc5_9.1: @Action.WithSelf.Op.%pattern_type (%pattern_type.085) = at_binding_pattern self, %self.param_patt.loc5_9.1 [symbolic = %self.patt.loc5_9.2 (constants.%self.patt.8a1)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @Action.WithSelf.Op.%Self.as_type.loc5_9.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc5_9.1: type = splice_block %.loc5_9.3 [symbolic = %Self.as_type.loc5_9.1 (constants.%Self.as_type)] { @@ -340,8 +363,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: // CHECK:STDOUT: impl @A.as.Action.impl: %A.ref as %Action.type { // CHECK:STDOUT: %A.as.Action.impl.Op.decl: %A.as.Action.impl.Op.type = fn_decl @A.as.Action.impl.Op [concrete = constants.%A.as.Action.impl.Op] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.9ef = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.9ef = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.9ef = value_param_pattern [concrete = constants.%self.param_patt.04e] +// CHECK:STDOUT: %self.patt: %pattern_type.9ef = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.312] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %A = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @A.as.Action.impl.%A.ref [concrete = constants.%A] @@ -386,6 +409,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Self: @Action.WithSelf.Op.%Action.type (%Action.type.cbf) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self.67c)] // CHECK:STDOUT: %Self.as_type.loc5_9.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_9.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc5_9.1 [symbolic = %pattern_type (constants.%pattern_type.085)] +// CHECK:STDOUT: %self.param_patt.loc5_9.2: @Action.WithSelf.Op.%pattern_type (%pattern_type.085) = value_param_pattern [symbolic = %self.param_patt.loc5_9.2 (constants.%self.param_patt.256)] +// CHECK:STDOUT: %self.patt.loc5_9.2: @Action.WithSelf.Op.%pattern_type (%pattern_type.085) = at_binding_pattern self, %self.param_patt.loc5_9.2 [symbolic = %self.patt.loc5_9.2 (constants.%self.patt.8a1)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Action.WithSelf.Op.%Self.as_type.loc5_9.1 (%Self.as_type)); // CHECK:STDOUT: } @@ -410,6 +435,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Action(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_19.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_19.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -421,9 +447,12 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Self => constants.%Self.67c // CHECK:STDOUT: %Self.as_type.loc5_9.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.085 +// CHECK:STDOUT: %self.param_patt.loc5_9.2 => constants.%self.param_patt.256 +// CHECK:STDOUT: %self.patt.loc5_9.2 => constants.%self.patt.8a1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Action(constants.%B) { +// CHECK:STDOUT: %T.patt.loc4_19.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_19.1 => constants.%B // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -459,6 +488,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Self => constants.%Action.facet // CHECK:STDOUT: %Self.as_type.loc5_9.1 => constants.%A // CHECK:STDOUT: %pattern_type => constants.%pattern_type.9ef +// CHECK:STDOUT: %self.param_patt.loc5_9.2 => constants.%self.param_patt.04e +// CHECK:STDOUT: %self.patt.loc5_9.2 => constants.%self.patt.312 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- action.impl.carbon @@ -472,16 +503,22 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Action.generic: %Action.type.538 = struct_value () [concrete] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Action.type.cbf: type = facet_type <@Action, @Action(%T)> [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Self.ea2: %Action.type.cbf = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %Action.assoc_type.1c3: type = assoc_entity_type @Action, @Action(%T) [symbolic] // CHECK:STDOUT: %Action.WithSelf.Op.type.a98: type = fn_type @Action.WithSelf.Op, @Action.WithSelf(%T, %Self.ea2) [symbolic] // CHECK:STDOUT: %Action.WithSelf.Op.876: %Action.WithSelf.Op.type.a98 = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.ea2 [symbolic] // CHECK:STDOUT: %pattern_type.1f8: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt.e11: %pattern_type.1f8 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.f9b: %pattern_type.1f8 = at_binding_pattern self, %self.param_patt.e11 [symbolic] // CHECK:STDOUT: %Action.type.5d2: type = facet_type <@Action, @Action(%B)> [concrete] // CHECK:STDOUT: %Self.581: %Action.type.5d2 = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %A: type = class_type @A [concrete] // CHECK:STDOUT: %pattern_type.9ef: type = pattern_type %A [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.9ef = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.9ef = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %Action.WithSelf.Op.type.070: type = fn_type @Action.WithSelf.Op, @Action.WithSelf(%B, %Self.ea2) [symbolic] @@ -543,8 +580,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %default.import.loc2_22.2 = import // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.9ef = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.9ef = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.9ef = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.9ef = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %A = value_param call_param0 // CHECK:STDOUT: %A.ref: type = name_ref A, imports.%Main.A [concrete = constants.%A] @@ -553,6 +590,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Action(imports.%Main.import_ref.b3bc94.3: type) [from "action.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -596,6 +634,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Self: @Action.WithSelf.Op.%Action.type (%Action.type.cbf) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self.ea2)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.1f8)] +// CHECK:STDOUT: %self.param_patt: @Action.WithSelf.Op.%pattern_type (%pattern_type.1f8) = value_param_pattern [symbolic = %self.param_patt (constants.%self.param_patt.e11)] +// CHECK:STDOUT: %self.patt: @Action.WithSelf.Op.%pattern_type (%pattern_type.1f8) = at_binding_pattern self, %self.param_patt [symbolic = %self.patt (constants.%self.patt.f9b)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -617,6 +657,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: fn @A.as.Action.impl.Op [from "action.carbon"]; // CHECK:STDOUT: // CHECK:STDOUT: specific @Action(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -628,9 +669,12 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Self => constants.%Self.ea2 // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.1f8 +// CHECK:STDOUT: %self.param_patt => constants.%self.param_patt.e11 +// CHECK:STDOUT: %self.patt => constants.%self.patt.f9b // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Action(constants.%B) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%B // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -670,16 +714,22 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Action.generic: %Action.type.538 = struct_value () [concrete] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Action.type.cbf: type = facet_type <@Action, @Action(%T)> [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Self.ea2: %Action.type.cbf = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %Action.assoc_type.1c3: type = assoc_entity_type @Action, @Action(%T) [symbolic] // CHECK:STDOUT: %Action.WithSelf.Op.type.a98: type = fn_type @Action.WithSelf.Op, @Action.WithSelf(%T, %Self.ea2) [symbolic] // CHECK:STDOUT: %Action.WithSelf.Op.876: %Action.WithSelf.Op.type.a98 = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.ea2 [symbolic] // CHECK:STDOUT: %pattern_type.1f8: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt: %pattern_type.1f8 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt: %pattern_type.1f8 = at_binding_pattern self, %self.param_patt [symbolic] // CHECK:STDOUT: %Action.type.5d2: type = facet_type <@Action, @Action(%B)> [concrete] // CHECK:STDOUT: %Self.581: %Action.type.5d2 = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %A: type = class_type @A [concrete] // CHECK:STDOUT: %pattern_type.9ef: type = pattern_type %A [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.9ef = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.9ef = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] @@ -737,8 +787,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %default.import.loc2_22.2 = import // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.9ef = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.9ef = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.9ef = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.9ef = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %A = value_param call_param0 // CHECK:STDOUT: %A.ref: type = name_ref A, imports.%Main.A [concrete = constants.%A] @@ -747,6 +797,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Action(imports.%Main.import_ref.b3bc94.3: type) [from "action.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -797,6 +848,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Self: @Action.WithSelf.Op.%Action.type (%Action.type.cbf) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self.ea2)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.1f8)] +// CHECK:STDOUT: %self.param_patt: @Action.WithSelf.Op.%pattern_type (%pattern_type.1f8) = value_param_pattern [symbolic = %self.param_patt (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt: @Action.WithSelf.Op.%pattern_type (%pattern_type.1f8) = at_binding_pattern self, %self.param_patt [symbolic = %self.patt (constants.%self.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -813,6 +866,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Action(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -824,9 +878,12 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Self => constants.%Self.ea2 // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.1f8 +// CHECK:STDOUT: %self.param_patt => constants.%self.param_patt +// CHECK:STDOUT: %self.patt => constants.%self.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Action(constants.%B) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%B // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -835,6 +892,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Action(constants.%C) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%C // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -859,6 +917,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Factory.type.9da: type = generic_interface_type @Factory [concrete] // CHECK:STDOUT: %Factory.generic: %Factory.type.9da = struct_value () [concrete] @@ -866,12 +925,16 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Self.9c2: %Factory.type.711 = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %.184: Core.Form = init_form %T [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %return.param_patt.41d: %pattern_type.51d = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.b39: %pattern_type.51d = return_slot_pattern %return.param_patt.41d, %T [symbolic] // CHECK:STDOUT: %Factory.WithSelf.Make.type.515: type = fn_type @Factory.WithSelf.Make, @Factory.WithSelf(%T, %Self.9c2) [symbolic] // CHECK:STDOUT: %Factory.WithSelf.Make.bc6: %Factory.WithSelf.Make.type.515 = struct_value () [symbolic] // CHECK:STDOUT: %Factory.assoc_type.0ed: type = assoc_entity_type @Factory, @Factory(%T) [symbolic] // CHECK:STDOUT: %assoc0.6f5: %Factory.assoc_type.0ed = assoc_entity element0, @Factory.WithSelf.%Factory.WithSelf.Make.decl [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.9c2 [symbolic] // CHECK:STDOUT: %pattern_type.5ba: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt.d68: %pattern_type.5ba = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.79a: %pattern_type.5ba = at_binding_pattern self, %self.param_patt.d68 [symbolic] // CHECK:STDOUT: %Factory.WithSelf.Method.type.63a: type = fn_type @Factory.WithSelf.Method, @Factory.WithSelf(%T, %Self.9c2) [symbolic] // CHECK:STDOUT: %Factory.WithSelf.Method.097: %Factory.WithSelf.Method.type.63a = struct_value () [symbolic] // CHECK:STDOUT: %assoc1.b7b: %Factory.assoc_type.0ed = assoc_entity element1, @Factory.WithSelf.%Factory.WithSelf.Method.decl [symbolic] @@ -891,9 +954,13 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %assoc1.682: %Factory.assoc_type.8bd = assoc_entity element1, @Factory.WithSelf.%Factory.WithSelf.Method.decl [concrete] // CHECK:STDOUT: %.d83: Core.Form = init_form %B [concrete] // CHECK:STDOUT: %pattern_type.e39: type = pattern_type %B [concrete] +// CHECK:STDOUT: %return.param_patt.934: %pattern_type.e39 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.911: %pattern_type.e39 = return_slot_pattern %return.param_patt.934, %B [concrete] // CHECK:STDOUT: %A.as.Factory.impl.Make.type: type = fn_type @A.as.Factory.impl.Make [concrete] // CHECK:STDOUT: %A.as.Factory.impl.Make: %A.as.Factory.impl.Make.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.9ef: type = pattern_type %A [concrete] +// CHECK:STDOUT: %self.param_patt.04e: %pattern_type.9ef = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.312: %pattern_type.9ef = at_binding_pattern self, %self.param_patt.04e [concrete] // CHECK:STDOUT: %A.as.Factory.impl.Method.type: type = fn_type @A.as.Factory.impl.Method [concrete] // CHECK:STDOUT: %A.as.Factory.impl.Method: %A.as.Factory.impl.Method.type = struct_value () [concrete] // CHECK:STDOUT: %Factory.facet: %Factory.type.5e3 = facet_value %A, (%Factory.impl_witness) [concrete] @@ -919,7 +986,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Factory.decl: %Factory.type.9da = interface_decl @Factory [concrete = constants.%Factory.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc4_20.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_20.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_23.1: type = splice_block %.loc4_23.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -938,6 +1005,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Factory(%T.loc4_20.2: type) { +// CHECK:STDOUT: %T.patt.loc4_20.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_20.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_20.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_20.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -950,8 +1018,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %Factory.WithSelf.Make.decl: @Factory.WithSelf.%Factory.WithSelf.Make.type (%Factory.WithSelf.Make.type.515) = fn_decl @Factory.WithSelf.Make [symbolic = @Factory.WithSelf.%Factory.WithSelf.Make (constants.%Factory.WithSelf.Make.bc6)] { -// CHECK:STDOUT: %return.param_patt: @Factory.WithSelf.Make.%pattern_type (%pattern_type.51d) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @Factory.WithSelf.Make.%pattern_type (%pattern_type.51d) = return_slot_pattern %return.param_patt, %T.ref [concrete] +// CHECK:STDOUT: %return.param_patt.loc6_16.1: @Factory.WithSelf.Make.%pattern_type (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt.loc6_16.2 (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt.loc6_13.1: @Factory.WithSelf.Make.%pattern_type (%pattern_type.51d) = return_slot_pattern %return.param_patt.loc6_16.1, %T.ref [symbolic = %return.patt.loc6_13.2 (constants.%return.patt.b39)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, @Factory.%T.loc4_20.2 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %.loc6_16.2: Core.Form = init_form %T.ref [symbolic = %.loc6_16.1 (constants.%.184)] @@ -960,10 +1028,10 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: } // CHECK:STDOUT: %assoc0.loc6_17.1: @Factory.WithSelf.%Factory.assoc_type (%Factory.assoc_type.0ed) = assoc_entity element0, %Factory.WithSelf.Make.decl [symbolic = %assoc0.loc6_17.2 (constants.%assoc0.6f5)] // CHECK:STDOUT: %Factory.WithSelf.Method.decl: @Factory.WithSelf.%Factory.WithSelf.Method.type (%Factory.WithSelf.Method.type.63a) = fn_decl @Factory.WithSelf.Method [symbolic = @Factory.WithSelf.%Factory.WithSelf.Method (constants.%Factory.WithSelf.Method.097)] { -// CHECK:STDOUT: %self.param_patt: @Factory.WithSelf.Method.%pattern_type.loc8_13 (%pattern_type.5ba) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @Factory.WithSelf.Method.%pattern_type.loc8_13 (%pattern_type.5ba) = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @Factory.WithSelf.Method.%pattern_type.loc8_22 (%pattern_type.51d) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @Factory.WithSelf.Method.%pattern_type.loc8_22 (%pattern_type.51d) = return_slot_pattern %return.param_patt, %T.ref [concrete] +// CHECK:STDOUT: %self.param_patt.loc8_13.1: @Factory.WithSelf.Method.%pattern_type.loc8_13 (%pattern_type.5ba) = value_param_pattern [symbolic = %self.param_patt.loc8_13.2 (constants.%self.param_patt.d68)] +// CHECK:STDOUT: %self.patt.loc8_13.1: @Factory.WithSelf.Method.%pattern_type.loc8_13 (%pattern_type.5ba) = at_binding_pattern self, %self.param_patt.loc8_13.1 [symbolic = %self.patt.loc8_13.2 (constants.%self.patt.79a)] +// CHECK:STDOUT: %return.param_patt.loc8_22.1: @Factory.WithSelf.Method.%pattern_type.loc8_22 (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt.loc8_22.2 (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt.loc8_19.1: @Factory.WithSelf.Method.%pattern_type.loc8_22 (%pattern_type.51d) = return_slot_pattern %return.param_patt.loc8_22.1, %T.ref [symbolic = %return.patt.loc8_19.2 (constants.%return.patt.b39)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, @Factory.%T.loc4_20.2 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %.loc8_22.2: Core.Form = init_form %T.ref [symbolic = %.loc8_22.1 (constants.%.184)] @@ -995,8 +1063,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: // CHECK:STDOUT: impl @A.as.Factory.impl: %A.ref as %Factory.type { // CHECK:STDOUT: %A.as.Factory.impl.Make.decl: %A.as.Factory.impl.Make.type = fn_decl @A.as.Factory.impl.Make [concrete = constants.%A.as.Factory.impl.Make] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.e39 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.e39 = return_slot_pattern %return.param_patt, %B.ref [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.e39 = out_param_pattern [concrete = constants.%return.param_patt.934] +// CHECK:STDOUT: %return.patt: %pattern_type.e39 = return_slot_pattern %return.param_patt, %B.ref [concrete = constants.%return.patt.911] // CHECK:STDOUT: } { // CHECK:STDOUT: %B.ref: type = name_ref B, file.%B.decl [concrete = constants.%B] // CHECK:STDOUT: %.loc15: Core.Form = init_form %B.ref [concrete = constants.%.d83] @@ -1004,10 +1072,10 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %return: ref %B = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %A.as.Factory.impl.Method.decl: %A.as.Factory.impl.Method.type = fn_decl @A.as.Factory.impl.Method [concrete = constants.%A.as.Factory.impl.Method] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.9ef = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.9ef = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.e39 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.e39 = return_slot_pattern %return.param_patt, %B.ref [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.9ef = value_param_pattern [concrete = constants.%self.param_patt.04e] +// CHECK:STDOUT: %self.patt: %pattern_type.9ef = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.312] +// CHECK:STDOUT: %return.param_patt: %pattern_type.e39 = out_param_pattern [concrete = constants.%return.param_patt.934] +// CHECK:STDOUT: %return.patt: %pattern_type.e39 = return_slot_pattern %return.param_patt, %B.ref [concrete = constants.%return.patt.911] // CHECK:STDOUT: } { // CHECK:STDOUT: %B.ref: type = name_ref B, file.%B.decl [concrete = constants.%B] // CHECK:STDOUT: %.loc16: Core.Form = init_form %B.ref [concrete = constants.%.d83] @@ -1048,6 +1116,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %.loc6_16.1: Core.Form = init_form %T [symbolic = %.loc6_16.1 (constants.%.184)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.51d)] +// CHECK:STDOUT: %return.param_patt.loc6_16.2: @Factory.WithSelf.Make.%pattern_type (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt.loc6_16.2 (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt.loc6_13.2: @Factory.WithSelf.Make.%pattern_type (%pattern_type.51d) = return_slot_pattern %return.param_patt.loc6_16.2, %T [symbolic = %return.patt.loc6_13.2 (constants.%return.patt.b39)] // CHECK:STDOUT: // CHECK:STDOUT: fn() -> out %return.param: @Factory.WithSelf.Make.%T (%T); // CHECK:STDOUT: } @@ -1058,8 +1128,12 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Self: @Factory.WithSelf.Method.%Factory.type (%Factory.type.711) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self.9c2)] // CHECK:STDOUT: %Self.as_type.loc8_13.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc8_13.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type.loc8_13: type = pattern_type %Self.as_type.loc8_13.1 [symbolic = %pattern_type.loc8_13 (constants.%pattern_type.5ba)] +// CHECK:STDOUT: %self.param_patt.loc8_13.2: @Factory.WithSelf.Method.%pattern_type.loc8_13 (%pattern_type.5ba) = value_param_pattern [symbolic = %self.param_patt.loc8_13.2 (constants.%self.param_patt.d68)] +// CHECK:STDOUT: %self.patt.loc8_13.2: @Factory.WithSelf.Method.%pattern_type.loc8_13 (%pattern_type.5ba) = at_binding_pattern self, %self.param_patt.loc8_13.2 [symbolic = %self.patt.loc8_13.2 (constants.%self.patt.79a)] // CHECK:STDOUT: %.loc8_22.1: Core.Form = init_form %T [symbolic = %.loc8_22.1 (constants.%.184)] // CHECK:STDOUT: %pattern_type.loc8_22: type = pattern_type %T [symbolic = %pattern_type.loc8_22 (constants.%pattern_type.51d)] +// CHECK:STDOUT: %return.param_patt.loc8_22.2: @Factory.WithSelf.Method.%pattern_type.loc8_22 (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt.loc8_22.2 (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt.loc8_19.2: @Factory.WithSelf.Method.%pattern_type.loc8_22 (%pattern_type.51d) = return_slot_pattern %return.param_patt.loc8_22.2, %T [symbolic = %return.patt.loc8_19.2 (constants.%return.patt.b39)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Factory.WithSelf.Method.%Self.as_type.loc8_13.1 (%Self.as_type)) -> out %return.param: @Factory.WithSelf.Method.%T (%T); // CHECK:STDOUT: } @@ -1069,6 +1143,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: fn @A.as.Factory.impl.Method(%self.param: %A) -> out %return.param: %B; // CHECK:STDOUT: // CHECK:STDOUT: specific @Factory(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_20.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_20.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1078,6 +1153,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %.loc6_16.1 => constants.%.184 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d +// CHECK:STDOUT: %return.param_patt.loc6_16.2 => constants.%return.param_patt.41d +// CHECK:STDOUT: %return.patt.loc6_13.2 => constants.%return.patt.b39 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Factory.WithSelf.Method(constants.%T, constants.%Self.9c2) { @@ -1086,11 +1163,16 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Self => constants.%Self.9c2 // CHECK:STDOUT: %Self.as_type.loc8_13.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type.loc8_13 => constants.%pattern_type.5ba +// CHECK:STDOUT: %self.param_patt.loc8_13.2 => constants.%self.param_patt.d68 +// CHECK:STDOUT: %self.patt.loc8_13.2 => constants.%self.patt.79a // CHECK:STDOUT: %.loc8_22.1 => constants.%.184 // CHECK:STDOUT: %pattern_type.loc8_22 => constants.%pattern_type.51d +// CHECK:STDOUT: %return.param_patt.loc8_22.2 => constants.%return.param_patt.41d +// CHECK:STDOUT: %return.patt.loc8_19.2 => constants.%return.patt.b39 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Factory(constants.%B) { +// CHECK:STDOUT: %T.patt.loc4_20.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_20.1 => constants.%B // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1130,6 +1212,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %T => constants.%B // CHECK:STDOUT: %.loc6_16.1 => constants.%.d83 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.e39 +// CHECK:STDOUT: %return.param_patt.loc6_16.2 => constants.%return.param_patt.934 +// CHECK:STDOUT: %return.patt.loc6_13.2 => constants.%return.patt.911 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Factory.WithSelf.Method(constants.%B, constants.%Factory.facet) { @@ -1138,8 +1222,12 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Self => constants.%Factory.facet // CHECK:STDOUT: %Self.as_type.loc8_13.1 => constants.%A // CHECK:STDOUT: %pattern_type.loc8_13 => constants.%pattern_type.9ef +// CHECK:STDOUT: %self.param_patt.loc8_13.2 => constants.%self.param_patt.04e +// CHECK:STDOUT: %self.patt.loc8_13.2 => constants.%self.patt.312 // CHECK:STDOUT: %.loc8_22.1 => constants.%.d83 // CHECK:STDOUT: %pattern_type.loc8_22 => constants.%pattern_type.e39 +// CHECK:STDOUT: %return.param_patt.loc8_22.2 => constants.%return.param_patt.934 +// CHECK:STDOUT: %return.patt.loc8_19.2 => constants.%return.patt.911 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- factory.impl.carbon @@ -1152,13 +1240,19 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Factory.generic: %Factory.type.9da = struct_value () [concrete] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Factory.type.711: type = facet_type <@Factory, @Factory(%T)> [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Self.3e3: %Factory.type.711 = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %Factory.assoc_type.0ed: type = assoc_entity_type @Factory, @Factory(%T) [symbolic] // CHECK:STDOUT: %Factory.WithSelf.Method.type.d40: type = fn_type @Factory.WithSelf.Method, @Factory.WithSelf(%T, %Self.3e3) [symbolic] // CHECK:STDOUT: %Factory.WithSelf.Method.459: %Factory.WithSelf.Method.type.d40 = struct_value () [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %return.param_patt.41d: %pattern_type.51d = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.c39: %pattern_type.51d = return_slot_pattern %return.param_patt.41d, invalid [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.3e3 [symbolic] // CHECK:STDOUT: %pattern_type.b1a: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt.f89: %pattern_type.b1a = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.5e0: %pattern_type.b1a = at_binding_pattern self, %self.param_patt.f89 [symbolic] // CHECK:STDOUT: %.184: Core.Form = init_form %T [symbolic] // CHECK:STDOUT: %Factory.WithSelf.Make.type.cf7: type = fn_type @Factory.WithSelf.Make, @Factory.WithSelf(%T, %Self.3e3) [symbolic] // CHECK:STDOUT: %Factory.WithSelf.Make.86c: %Factory.WithSelf.Make.type.cf7 = struct_value () [symbolic] @@ -1167,6 +1261,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %A: type = class_type @A [concrete] // CHECK:STDOUT: %.d83: Core.Form = init_form %B [concrete] // CHECK:STDOUT: %pattern_type.e39: type = pattern_type %B [concrete] +// CHECK:STDOUT: %return.param_patt.934: %pattern_type.e39 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.911: %pattern_type.e39 = return_slot_pattern %return.param_patt.934, %B [concrete] // CHECK:STDOUT: %MakeB.type: type = fn_type @MakeB [concrete] // CHECK:STDOUT: %MakeB: %MakeB.type = struct_value () [concrete] // CHECK:STDOUT: %Factory.WithSelf.Make.type.189: type = fn_type @Factory.WithSelf.Make, @Factory.WithSelf(%B, %Self.3e3) [symbolic] @@ -1187,6 +1283,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %A.as.Factory.impl.Make.type: type = fn_type @A.as.Factory.impl.Make [concrete] // CHECK:STDOUT: %A.as.Factory.impl.Make: %A.as.Factory.impl.Make.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.9ef: type = pattern_type %A [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.9ef = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.9ef = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %InstanceB.type: type = fn_type @InstanceB [concrete] // CHECK:STDOUT: %InstanceB: %InstanceB.type = struct_value () [concrete] // CHECK:STDOUT: %assoc1.c00: %Factory.assoc_type.0ed = assoc_entity element1, imports.%Main.import_ref.82f [symbolic] @@ -1245,8 +1343,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %default.import.loc2_23.2 = import // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %MakeB.decl: %MakeB.type = fn_decl @MakeB [concrete = constants.%MakeB] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.e39 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.e39 = return_slot_pattern %return.param_patt, %B.ref.loc4 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.e39 = out_param_pattern [concrete = constants.%return.param_patt.934] +// CHECK:STDOUT: %return.patt: %pattern_type.e39 = return_slot_pattern %return.param_patt, %B.ref.loc4 [concrete = constants.%return.patt.911] // CHECK:STDOUT: } { // CHECK:STDOUT: %B.ref.loc4: type = name_ref B, imports.%Main.B [concrete = constants.%B] // CHECK:STDOUT: %.loc4_15.2: Core.Form = init_form %B.ref.loc4 [concrete = constants.%.d83] @@ -1254,10 +1352,10 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %return: ref %B = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %InstanceB.decl: %InstanceB.type = fn_decl @InstanceB [concrete = constants.%InstanceB] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.9ef = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.9ef = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.e39 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.e39 = return_slot_pattern %return.param_patt, %B.ref.loc7 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.9ef = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.9ef = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.e39 = out_param_pattern [concrete = constants.%return.param_patt.934] +// CHECK:STDOUT: %return.patt: %pattern_type.e39 = return_slot_pattern %return.param_patt, %B.ref.loc7 [concrete = constants.%return.patt.911] // CHECK:STDOUT: } { // CHECK:STDOUT: %B.ref.loc7: type = name_ref B, imports.%Main.B [concrete = constants.%B] // CHECK:STDOUT: %.loc7_23.2: Core.Form = init_form %B.ref.loc7 [concrete = constants.%.d83] @@ -1270,6 +1368,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Factory(imports.%Main.import_ref.b3bc94.4: type) [from "factory.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1315,8 +1414,12 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Self: @Factory.WithSelf.Method.%Factory.type (%Factory.type.711) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self.3e3)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type.1: type = pattern_type %Self.as_type [symbolic = %pattern_type.1 (constants.%pattern_type.b1a)] +// CHECK:STDOUT: %self.param_patt: @Factory.WithSelf.Method.%pattern_type.1 (%pattern_type.b1a) = value_param_pattern [symbolic = %self.param_patt (constants.%self.param_patt.f89)] +// CHECK:STDOUT: %self.patt: @Factory.WithSelf.Method.%pattern_type.1 (%pattern_type.b1a) = at_binding_pattern self, %self.param_patt [symbolic = %self.patt (constants.%self.patt.5e0)] // CHECK:STDOUT: %.1: Core.Form = init_form %T [symbolic = %.1 (constants.%.184)] // CHECK:STDOUT: %pattern_type.2: type = pattern_type %T [symbolic = %pattern_type.2 (constants.%pattern_type.51d)] +// CHECK:STDOUT: %return.param_patt: @Factory.WithSelf.Method.%pattern_type.2 (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt: @Factory.WithSelf.Method.%pattern_type.2 (%pattern_type.51d) = return_slot_pattern %return.param_patt, invalid [symbolic = %return.patt (constants.%return.patt.c39)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -1325,6 +1428,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %.1: Core.Form = init_form %T [symbolic = %.1 (constants.%.184)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.51d)] +// CHECK:STDOUT: %return.param_patt: @Factory.WithSelf.Make.%pattern_type (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt: @Factory.WithSelf.Make.%pattern_type (%pattern_type.51d) = return_slot_pattern %return.param_patt, invalid [symbolic = %return.patt (constants.%return.patt.c39)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -1365,6 +1470,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: fn @A.as.Factory.impl.Method [from "factory.carbon"]; // CHECK:STDOUT: // CHECK:STDOUT: specific @Factory(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1376,17 +1482,24 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Self => constants.%Self.3e3 // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type // CHECK:STDOUT: %pattern_type.1 => constants.%pattern_type.b1a +// CHECK:STDOUT: %self.param_patt => constants.%self.param_patt.f89 +// CHECK:STDOUT: %self.patt => constants.%self.patt.5e0 // CHECK:STDOUT: %.1 => constants.%.184 // CHECK:STDOUT: %pattern_type.2 => constants.%pattern_type.51d +// CHECK:STDOUT: %return.param_patt => constants.%return.param_patt.41d +// CHECK:STDOUT: %return.patt => constants.%return.patt.c39 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Factory.WithSelf.Make(constants.%T, constants.%Self.3e3) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %.1 => constants.%.184 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d +// CHECK:STDOUT: %return.param_patt => constants.%return.param_patt.41d +// CHECK:STDOUT: %return.patt => constants.%return.patt.c39 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Factory(constants.%B) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%B // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1432,13 +1545,19 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Factory.generic: %Factory.type.9da = struct_value () [concrete] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Factory.type.711: type = facet_type <@Factory, @Factory(%T)> [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Self.3e3: %Factory.type.711 = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %Factory.assoc_type.0ed: type = assoc_entity_type @Factory, @Factory(%T) [symbolic] // CHECK:STDOUT: %Factory.WithSelf.Method.type.d40: type = fn_type @Factory.WithSelf.Method, @Factory.WithSelf(%T, %Self.3e3) [symbolic] // CHECK:STDOUT: %Factory.WithSelf.Method.459: %Factory.WithSelf.Method.type.d40 = struct_value () [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %return.param_patt.41d: %pattern_type.51d = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.c39: %pattern_type.51d = return_slot_pattern %return.param_patt.41d, invalid [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.3e3 [symbolic] // CHECK:STDOUT: %pattern_type.b1a: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt: %pattern_type.b1a = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt: %pattern_type.b1a = at_binding_pattern self, %self.param_patt [symbolic] // CHECK:STDOUT: %.184: Core.Form = init_form %T [symbolic] // CHECK:STDOUT: %Factory.WithSelf.Make.type.cf7: type = fn_type @Factory.WithSelf.Make, @Factory.WithSelf(%T, %Self.3e3) [symbolic] // CHECK:STDOUT: %Factory.WithSelf.Make.86c: %Factory.WithSelf.Make.type.cf7 = struct_value () [symbolic] @@ -1448,6 +1567,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %.a44: Core.Form = init_form %C [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %return.param_patt.89a: %pattern_type.98b = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e4a: %pattern_type.98b = return_slot_pattern %return.param_patt.89a, %C [concrete] // CHECK:STDOUT: %MakeC.type: type = fn_type @MakeC [concrete] // CHECK:STDOUT: %MakeC: %MakeC.type = struct_value () [concrete] // CHECK:STDOUT: %Factory.type.8fc: type = facet_type <@Factory, @Factory(%C)> [concrete] @@ -1461,6 +1582,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %assoc1.f6c: %Factory.assoc_type.fc0 = assoc_entity element1, imports.%Main.import_ref.ad0 [concrete] // CHECK:STDOUT: %assoc0.c0a: %Factory.assoc_type.0ed = assoc_entity element0, imports.%Main.import_ref.587 [symbolic] // CHECK:STDOUT: %pattern_type.9ef: type = pattern_type %A [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.9ef = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.9ef = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %InstanceC.type: type = fn_type @InstanceC [concrete] // CHECK:STDOUT: %InstanceC: %InstanceC.type = struct_value () [concrete] // CHECK:STDOUT: %assoc1.c00: %Factory.assoc_type.0ed = assoc_entity element1, imports.%Main.import_ref.82f [symbolic] @@ -1516,8 +1639,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %MakeC.decl: %MakeC.type = fn_decl @MakeC [concrete = constants.%MakeC] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C.ref.loc8 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete = constants.%return.param_patt.89a] +// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C.ref.loc8 [concrete = constants.%return.patt.e4a] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc8: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %.loc8: Core.Form = init_form %C.ref.loc8 [concrete = constants.%.a44] @@ -1525,10 +1648,10 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %return: ref %C = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %InstanceC.decl: %InstanceC.type = fn_decl @InstanceC [concrete = constants.%InstanceC] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.9ef = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.9ef = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C.ref.loc16 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.9ef = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.9ef = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete = constants.%return.param_patt.89a] +// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C.ref.loc16 [concrete = constants.%return.patt.e4a] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc16: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %.loc16: Core.Form = init_form %C.ref.loc16 [concrete = constants.%.a44] @@ -1541,6 +1664,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Factory(imports.%Main.import_ref.b3bc94.4: type) [from "factory.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1594,8 +1718,12 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Self: @Factory.WithSelf.Method.%Factory.type (%Factory.type.711) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self.3e3)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type.1: type = pattern_type %Self.as_type [symbolic = %pattern_type.1 (constants.%pattern_type.b1a)] +// CHECK:STDOUT: %self.param_patt: @Factory.WithSelf.Method.%pattern_type.1 (%pattern_type.b1a) = value_param_pattern [symbolic = %self.param_patt (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt: @Factory.WithSelf.Method.%pattern_type.1 (%pattern_type.b1a) = at_binding_pattern self, %self.param_patt [symbolic = %self.patt (constants.%self.patt)] // CHECK:STDOUT: %.1: Core.Form = init_form %T [symbolic = %.1 (constants.%.184)] // CHECK:STDOUT: %pattern_type.2: type = pattern_type %T [symbolic = %pattern_type.2 (constants.%pattern_type.51d)] +// CHECK:STDOUT: %return.param_patt: @Factory.WithSelf.Method.%pattern_type.2 (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt: @Factory.WithSelf.Method.%pattern_type.2 (%pattern_type.51d) = return_slot_pattern %return.param_patt, invalid [symbolic = %return.patt (constants.%return.patt.c39)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -1604,6 +1732,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %.1: Core.Form = init_form %T [symbolic = %.1 (constants.%.184)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.51d)] +// CHECK:STDOUT: %return.param_patt: @Factory.WithSelf.Make.%pattern_type (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt: @Factory.WithSelf.Make.%pattern_type (%pattern_type.51d) = return_slot_pattern %return.param_patt, invalid [symbolic = %return.patt (constants.%return.patt.c39)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -1631,6 +1761,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Factory(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1642,17 +1773,24 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Self => constants.%Self.3e3 // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type // CHECK:STDOUT: %pattern_type.1 => constants.%pattern_type.b1a +// CHECK:STDOUT: %self.param_patt => constants.%self.param_patt +// CHECK:STDOUT: %self.patt => constants.%self.patt // CHECK:STDOUT: %.1 => constants.%.184 // CHECK:STDOUT: %pattern_type.2 => constants.%pattern_type.51d +// CHECK:STDOUT: %return.param_patt => constants.%return.param_patt.41d +// CHECK:STDOUT: %return.patt => constants.%return.patt.c39 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Factory.WithSelf.Make(constants.%T, constants.%Self.3e3) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %.1 => constants.%.184 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d +// CHECK:STDOUT: %return.param_patt => constants.%return.param_patt.41d +// CHECK:STDOUT: %return.patt => constants.%return.patt.c39 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Factory(constants.%B) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%B // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1661,6 +1799,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Factory(constants.%C) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%C // CHECK:STDOUT: // CHECK:STDOUT: !definition: diff --git a/toolchain/check/testdata/impl/lookup/alias.carbon b/toolchain/check/testdata/impl/lookup/alias.carbon index e36dfd318dcc..ba6293792b1f 100644 --- a/toolchain/check/testdata/impl/lookup/alias.carbon +++ b/toolchain/check/testdata/impl/lookup/alias.carbon @@ -49,6 +49,8 @@ fn G(c: C) { // CHECK:STDOUT: %HasF.WithSelf.F.type.263: type = fn_type @HasF.WithSelf.F, @HasF.WithSelf(%HasF.facet) [concrete] // CHECK:STDOUT: %HasF.WithSelf.F.3c7: %HasF.WithSelf.F.type.263 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = at_binding_pattern c, %c.param_patt [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %.34f: type = fn_type_with_self_type %HasF.WithSelf.F.type.263, %HasF.facet [concrete] @@ -67,8 +69,8 @@ fn G(c: C) { // CHECK:STDOUT: %HasF.ref: type = name_ref HasF, file.%HasF.decl [concrete = constants.%HasF.type] // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %c.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type = at_binding_pattern c, %c.param_patt [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type = value_param_pattern [concrete = constants.%c.param_patt] +// CHECK:STDOUT: %c.patt: %pattern_type = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref.loc27: type = name_ref C, file.%C.decl [concrete = constants.%C] diff --git a/toolchain/check/testdata/impl/lookup/canonical_query_self.carbon b/toolchain/check/testdata/impl/lookup/canonical_query_self.carbon index 8b1f2bee6e3f..45eadeed56c3 100644 --- a/toolchain/check/testdata/impl/lookup/canonical_query_self.carbon +++ b/toolchain/check/testdata/impl/lookup/canonical_query_self.carbon @@ -54,6 +54,8 @@ fn G() { // CHECK:STDOUT: %Self.37e: %I.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type.c84: type = facet_access_type %Self.37e [symbolic] // CHECK:STDOUT: %pattern_type.c60: type = pattern_type %Self.as_type.c84 [symbolic] +// CHECK:STDOUT: %self.param_patt.a33: %pattern_type.c60 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.696: %pattern_type.c60 = at_binding_pattern self, %self.param_patt.a33 [symbolic] // CHECK:STDOUT: %I.WithSelf.II.type.8a2: type = fn_type @I.WithSelf.II, @I.WithSelf(%Self.37e) [symbolic] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %I.WithSelf.II.09c: %I.WithSelf.II.type.8a2 = struct_value () [symbolic] @@ -63,6 +65,8 @@ fn G() { // CHECK:STDOUT: %Self.653: %J.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type.976: type = facet_access_type %Self.653 [symbolic] // CHECK:STDOUT: %pattern_type.506: type = pattern_type %Self.as_type.976 [symbolic] +// CHECK:STDOUT: %self.param_patt.091: %pattern_type.506 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.bfd: %pattern_type.506 = at_binding_pattern self, %self.param_patt.091 [symbolic] // CHECK:STDOUT: %J.WithSelf.JJ.type.e02: type = fn_type @J.WithSelf.JJ, @J.WithSelf(%Self.653) [symbolic] // CHECK:STDOUT: %J.WithSelf.JJ.1d0: %J.WithSelf.JJ.type.e02 = struct_value () [symbolic] // CHECK:STDOUT: %J.assoc_type: type = assoc_entity_type @J [concrete] @@ -81,9 +85,12 @@ fn G() { // CHECK:STDOUT: %type.as.BitAndWith.impl.Op.bound: = bound_method %I.type, %type.as.BitAndWith.impl.Op [concrete] // CHECK:STDOUT: %facet_type: type = facet_type <@I & @J> [concrete] // CHECK:STDOUT: %pattern_type.fb7: type = pattern_type %facet_type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.fb7 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: %facet_type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] // CHECK:STDOUT: %pattern_type.936: type = pattern_type %T.as_type [symbolic] +// CHECK:STDOUT: %t.param_patt.ed4: %pattern_type.936 = value_param_pattern [symbolic] +// CHECK:STDOUT: %t.patt.088: %pattern_type.936 = at_binding_pattern t, %t.param_patt.ed4 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type [symbolic] @@ -99,12 +106,16 @@ fn G() { // CHECK:STDOUT: %J.WithSelf.JJ.6d6: %J.WithSelf.JJ.type.2d7 = struct_value () [symbolic] // CHECK:STDOUT: %.443: type = fn_type_with_self_type %J.WithSelf.JJ.type.2d7, %J.facet.cbc [symbolic] // CHECK:STDOUT: %impl.elem0: %.443 = impl_witness_access %J.lookup_impl_witness, element0 [symbolic] +// CHECK:STDOUT: %self.param_patt.ad3: %pattern_type.936 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.1c9: %pattern_type.936 = at_binding_pattern self, %self.param_patt.ad3 [symbolic] // CHECK:STDOUT: %specific_impl_fn: = specific_impl_function %impl.elem0, @J.WithSelf.JJ(%J.facet.cbc) [symbolic] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness @C.as.I.impl.%I.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.f79: type = pattern_type %C [concrete] +// CHECK:STDOUT: %self.param_patt.dfa: %pattern_type.f79 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.947: %pattern_type.f79 = at_binding_pattern self, %self.param_patt.dfa [concrete] // CHECK:STDOUT: %C.as.I.impl.II.type: type = fn_type @C.as.I.impl.II [concrete] // CHECK:STDOUT: %C.as.I.impl.II: %C.as.I.impl.II.type = struct_value () [concrete] // CHECK:STDOUT: %I.facet.947: %I.type = facet_value %C, (%I.impl_witness) [concrete] @@ -129,6 +140,8 @@ fn G() { // CHECK:STDOUT: %.dd2: type = fn_type_with_self_type %J.WithSelf.JJ.type.95f, %J.facet.a74 [concrete] // CHECK:STDOUT: %C.as.J.impl.JJ.bound: = bound_method %.5d3, %C.as.J.impl.JJ [concrete] // CHECK:STDOUT: %facet_value: %facet_type = facet_value %C, (%I.impl_witness, %J.impl_witness) [concrete] +// CHECK:STDOUT: %t.param_patt.5f8: %pattern_type.f79 = value_param_pattern [concrete] +// CHECK:STDOUT: %t.patt.b06: %pattern_type.f79 = at_binding_pattern t, %t.param_patt.5f8 [concrete] // CHECK:STDOUT: %F.specific_fn: = specific_function %F, @F(%facet_value) [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.2: type = fn_type @Destroy.Op.loc46_11.2 [concrete] @@ -161,9 +174,9 @@ fn G() { // 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: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type.fb7 = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %t.param_patt: @F.%pattern_type (%pattern_type.936) = value_param_pattern [concrete] -// CHECK:STDOUT: %t.patt: @F.%pattern_type (%pattern_type.936) = at_binding_pattern t, %t.param_patt [concrete] +// CHECK:STDOUT: %T.patt.loc22_7.1: %pattern_type.fb7 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc22_7.2 (constants.%T.patt)] +// CHECK:STDOUT: %t.param_patt.loc22_18.1: @F.%pattern_type (%pattern_type.936) = value_param_pattern [symbolic = %t.param_patt.loc22_18.2 (constants.%t.param_patt.ed4)] +// CHECK:STDOUT: %t.patt.loc22_18.1: @F.%pattern_type (%pattern_type.936) = at_binding_pattern t, %t.param_patt.loc22_18.1 [symbolic = %t.patt.loc22_18.2 (constants.%t.patt.088)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc22_12.1: type = splice_block %.loc22_12.3 [concrete = constants.%facet_type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -193,8 +206,8 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %I.WithSelf.II.decl: @I.WithSelf.%I.WithSelf.II.type (%I.WithSelf.II.type.8a2) = fn_decl @I.WithSelf.II [symbolic = @I.WithSelf.%I.WithSelf.II (constants.%I.WithSelf.II.09c)] { -// CHECK:STDOUT: %self.param_patt: @I.WithSelf.II.%pattern_type (%pattern_type.c60) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @I.WithSelf.II.%pattern_type (%pattern_type.c60) = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc16_9.1: @I.WithSelf.II.%pattern_type (%pattern_type.c60) = value_param_pattern [symbolic = %self.param_patt.loc16_9.2 (constants.%self.param_patt.a33)] +// CHECK:STDOUT: %self.patt.loc16_9.1: @I.WithSelf.II.%pattern_type (%pattern_type.c60) = at_binding_pattern self, %self.param_patt.loc16_9.1 [symbolic = %self.patt.loc16_9.2 (constants.%self.patt.696)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @I.WithSelf.II.%Self.as_type.loc16_9.1 (%Self.as_type.c84) = value_param call_param0 // CHECK:STDOUT: %.loc16_9.1: type = splice_block %.loc16_9.2 [symbolic = %Self.as_type.loc16_9.1 (constants.%Self.as_type.c84)] { @@ -222,8 +235,8 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %J.WithSelf.JJ.decl: @J.WithSelf.%J.WithSelf.JJ.type (%J.WithSelf.JJ.type.e02) = fn_decl @J.WithSelf.JJ [symbolic = @J.WithSelf.%J.WithSelf.JJ (constants.%J.WithSelf.JJ.1d0)] { -// CHECK:STDOUT: %self.param_patt: @J.WithSelf.JJ.%pattern_type (%pattern_type.506) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @J.WithSelf.JJ.%pattern_type (%pattern_type.506) = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc19_9.1: @J.WithSelf.JJ.%pattern_type (%pattern_type.506) = value_param_pattern [symbolic = %self.param_patt.loc19_9.2 (constants.%self.param_patt.091)] +// CHECK:STDOUT: %self.patt.loc19_9.1: @J.WithSelf.JJ.%pattern_type (%pattern_type.506) = at_binding_pattern self, %self.param_patt.loc19_9.1 [symbolic = %self.patt.loc19_9.2 (constants.%self.patt.bfd)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @J.WithSelf.JJ.%Self.as_type.loc19_9.1 (%Self.as_type.976) = value_param call_param0 // CHECK:STDOUT: %.loc19_9.1: type = splice_block %.loc19_9.2 [symbolic = %Self.as_type.loc19_9.1 (constants.%Self.as_type.976)] { @@ -245,8 +258,8 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.I.impl: %Self.ref as %I.ref { // CHECK:STDOUT: %C.as.I.impl.II.decl: %C.as.I.impl.II.type = fn_decl @C.as.I.impl.II [concrete = constants.%C.as.I.impl.II] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.f79 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.f79 = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.f79 = value_param_pattern [concrete = constants.%self.param_patt.dfa] +// CHECK:STDOUT: %self.patt: %pattern_type.f79 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.947] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %C = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] @@ -263,8 +276,8 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.J.impl: %Self.ref as %J.ref { // CHECK:STDOUT: %C.as.J.impl.JJ.decl: %C.as.J.impl.JJ.type = fn_decl @C.as.J.impl.JJ [concrete = constants.%C.as.J.impl.JJ] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.f79 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.f79 = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.f79 = value_param_pattern [concrete = constants.%self.param_patt.dfa] +// CHECK:STDOUT: %self.patt: %pattern_type.f79 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.947] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %C = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] @@ -304,6 +317,8 @@ fn G() { // CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.37e)] // CHECK:STDOUT: %Self.as_type.loc16_9.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc16_9.1 (constants.%Self.as_type.c84)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc16_9.1 [symbolic = %pattern_type (constants.%pattern_type.c60)] +// CHECK:STDOUT: %self.param_patt.loc16_9.2: @I.WithSelf.II.%pattern_type (%pattern_type.c60) = value_param_pattern [symbolic = %self.param_patt.loc16_9.2 (constants.%self.param_patt.a33)] +// CHECK:STDOUT: %self.patt.loc16_9.2: @I.WithSelf.II.%pattern_type (%pattern_type.c60) = at_binding_pattern self, %self.param_patt.loc16_9.2 [symbolic = %self.patt.loc16_9.2 (constants.%self.patt.696)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @I.WithSelf.II.%Self.as_type.loc16_9.1 (%Self.as_type.c84)); // CHECK:STDOUT: } @@ -312,14 +327,19 @@ fn G() { // CHECK:STDOUT: %Self: %J.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.653)] // CHECK:STDOUT: %Self.as_type.loc19_9.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc19_9.1 (constants.%Self.as_type.976)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc19_9.1 [symbolic = %pattern_type (constants.%pattern_type.506)] +// CHECK:STDOUT: %self.param_patt.loc19_9.2: @J.WithSelf.JJ.%pattern_type (%pattern_type.506) = value_param_pattern [symbolic = %self.param_patt.loc19_9.2 (constants.%self.param_patt.091)] +// CHECK:STDOUT: %self.patt.loc19_9.2: @J.WithSelf.JJ.%pattern_type (%pattern_type.506) = at_binding_pattern self, %self.param_patt.loc19_9.2 [symbolic = %self.patt.loc19_9.2 (constants.%self.patt.bfd)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @J.WithSelf.JJ.%Self.as_type.loc19_9.1 (%Self.as_type.976)); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc22_7.2: %facet_type) { +// CHECK:STDOUT: %T.patt.loc22_7.2: %pattern_type.fb7 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc22_7.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc22_7.1: %facet_type = symbolic_binding T, 0 [symbolic = %T.loc22_7.1 (constants.%T)] // CHECK:STDOUT: %T.as_type.loc22_20.1: type = facet_access_type %T.loc22_7.1 [symbolic = %T.as_type.loc22_20.1 (constants.%T.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc22_20.1 [symbolic = %pattern_type (constants.%pattern_type.936)] +// CHECK:STDOUT: %t.param_patt.loc22_18.2: @F.%pattern_type (%pattern_type.936) = value_param_pattern [symbolic = %t.param_patt.loc22_18.2 (constants.%t.param_patt.ed4)] +// CHECK:STDOUT: %t.patt.loc22_18.2: @F.%pattern_type (%pattern_type.936) = at_binding_pattern t, %t.param_patt.loc22_18.2 [symbolic = %t.patt.loc22_18.2 (constants.%t.patt.088)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc22_20.1 [symbolic = %require_complete (constants.%require_complete)] @@ -363,8 +383,10 @@ fn G() { // CHECK:STDOUT: %JJ.ref: %J.assoc_type = name_ref JJ, @J.WithSelf.%assoc0 [concrete = constants.%assoc0.7d8] // CHECK:STDOUT: %impl.elem0.loc26_69.1: @F.%.loc26_69 (%.443) = impl_witness_access constants.%J.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc26_69.2 (constants.%impl.elem0)] // CHECK:STDOUT: %bound_method.loc26_69: = bound_method %t.ref, %impl.elem0.loc26_69.1 -// CHECK:STDOUT: %J.facet.loc26_73: %J.type = facet_value constants.%T.as_type, (constants.%J.lookup_impl_witness) [symbolic = %J.facet.loc26_33.2 (constants.%J.facet.cbc)] -// CHECK:STDOUT: %.loc26_73: %J.type = converted constants.%T.as_type, %J.facet.loc26_73 [symbolic = %J.facet.loc26_33.2 (constants.%J.facet.cbc)] +// CHECK:STDOUT: %J.facet.loc26_73.1: %J.type = facet_value constants.%T.as_type, (constants.%J.lookup_impl_witness) [symbolic = %J.facet.loc26_33.2 (constants.%J.facet.cbc)] +// CHECK:STDOUT: %.loc26_73.1: %J.type = converted constants.%T.as_type, %J.facet.loc26_73.1 [symbolic = %J.facet.loc26_33.2 (constants.%J.facet.cbc)] +// CHECK:STDOUT: %J.facet.loc26_73.2: %J.type = facet_value constants.%T.as_type, (constants.%J.lookup_impl_witness) [symbolic = %J.facet.loc26_33.2 (constants.%J.facet.cbc)] +// CHECK:STDOUT: %.loc26_73.2: %J.type = converted constants.%T.as_type, %J.facet.loc26_73.2 [symbolic = %J.facet.loc26_33.2 (constants.%J.facet.cbc)] // CHECK:STDOUT: %specific_impl_fn.loc26_69.1: = specific_impl_function %impl.elem0.loc26_69.1, @J.WithSelf.JJ(constants.%J.facet.cbc) [symbolic = %specific_impl_fn.loc26_69.2 (constants.%specific_impl_fn)] // CHECK:STDOUT: %bound_method.loc26_73: = bound_method %t.ref, %specific_impl_fn.loc26_69.1 // CHECK:STDOUT: %J.WithSelf.JJ.call: init %empty_tuple.type = call %bound_method.loc26_73(%t.ref) @@ -421,6 +443,8 @@ fn G() { // CHECK:STDOUT: %.loc46_15.1: %facet_type = converted %C.ref.loc46_5, %facet_value.loc46_15.1 [concrete = constants.%facet_value] // CHECK:STDOUT: %facet_value.loc46_15.2: %facet_type = facet_value constants.%C, (constants.%I.impl_witness, constants.%J.impl_witness) [concrete = constants.%facet_value] // CHECK:STDOUT: %.loc46_15.2: %facet_type = converted constants.%C, %facet_value.loc46_15.2 [concrete = constants.%facet_value] +// CHECK:STDOUT: %facet_value.loc46_15.3: %facet_type = facet_value constants.%C, (constants.%I.impl_witness, constants.%J.impl_witness) [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc46_15.3: %facet_type = converted constants.%C, %facet_value.loc46_15.3 [concrete = constants.%facet_value] // CHECK:STDOUT: %F.specific_fn: = specific_function %F.ref, @F(constants.%facet_value) [concrete = constants.%F.specific_fn] // CHECK:STDOUT: %.loc46_11.2: ref %C = temporary %.loc46_9.2, %.loc46_11.1 [concrete = constants.%.5d3] // CHECK:STDOUT: %.loc46_11.3: %C = acquire_value %.loc46_11.2 [concrete = constants.%C.val] @@ -458,6 +482,8 @@ fn G() { // CHECK:STDOUT: %Self => constants.%Self.37e // CHECK:STDOUT: %Self.as_type.loc16_9.1 => constants.%Self.as_type.c84 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.c60 +// CHECK:STDOUT: %self.param_patt.loc16_9.2 => constants.%self.param_patt.a33 +// CHECK:STDOUT: %self.patt.loc16_9.2 => constants.%self.patt.696 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @J.WithSelf(constants.%Self.653) { @@ -471,12 +497,17 @@ fn G() { // CHECK:STDOUT: %Self => constants.%Self.653 // CHECK:STDOUT: %Self.as_type.loc19_9.1 => constants.%Self.as_type.976 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.506 +// CHECK:STDOUT: %self.param_patt.loc19_9.2 => constants.%self.param_patt.091 +// CHECK:STDOUT: %self.patt.loc19_9.2 => constants.%self.patt.bfd // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T) { +// CHECK:STDOUT: %T.patt.loc22_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc22_7.1 => constants.%T // CHECK:STDOUT: %T.as_type.loc22_20.1 => constants.%T.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.936 +// CHECK:STDOUT: %t.param_patt.loc22_18.2 => constants.%t.param_patt.ed4 +// CHECK:STDOUT: %t.patt.loc22_18.2 => constants.%t.patt.088 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I.WithSelf(constants.%T) { @@ -504,6 +535,8 @@ fn G() { // CHECK:STDOUT: %Self => constants.%J.facet.cbc // CHECK:STDOUT: %Self.as_type.loc19_9.1 => constants.%T.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.936 +// CHECK:STDOUT: %self.param_patt.loc19_9.2 => constants.%self.param_patt.ad3 +// CHECK:STDOUT: %self.patt.loc19_9.2 => constants.%self.patt.1c9 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I.WithSelf(constants.%I.facet.947) { @@ -517,6 +550,8 @@ fn G() { // CHECK:STDOUT: %Self => constants.%I.facet.947 // CHECK:STDOUT: %Self.as_type.loc16_9.1 => constants.%C // CHECK:STDOUT: %pattern_type => constants.%pattern_type.f79 +// CHECK:STDOUT: %self.param_patt.loc16_9.2 => constants.%self.param_patt.dfa +// CHECK:STDOUT: %self.patt.loc16_9.2 => constants.%self.patt.947 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @J.WithSelf(constants.%J.facet.a74) { @@ -530,6 +565,8 @@ fn G() { // CHECK:STDOUT: %Self => constants.%J.facet.a74 // CHECK:STDOUT: %Self.as_type.loc19_9.1 => constants.%C // CHECK:STDOUT: %pattern_type => constants.%pattern_type.f79 +// CHECK:STDOUT: %self.param_patt.loc19_9.2 => constants.%self.param_patt.dfa +// CHECK:STDOUT: %self.patt.loc19_9.2 => constants.%self.patt.947 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @J.WithSelf(constants.%C.type.facet) { @@ -547,9 +584,12 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%facet_value) { +// CHECK:STDOUT: %T.patt.loc22_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc22_7.1 => constants.%facet_value // CHECK:STDOUT: %T.as_type.loc22_20.1 => constants.%C // CHECK:STDOUT: %pattern_type => constants.%pattern_type.f79 +// CHECK:STDOUT: %t.param_patt.loc22_18.2 => constants.%t.param_patt.5f8 +// CHECK:STDOUT: %t.patt.loc22_18.2 => constants.%t.patt.b06 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type diff --git a/toolchain/check/testdata/impl/lookup/fail_alias_impl_not_found.carbon b/toolchain/check/testdata/impl/lookup/fail_alias_impl_not_found.carbon index 3ffb459ac3f2..af38166f093d 100644 --- a/toolchain/check/testdata/impl/lookup/fail_alias_impl_not_found.carbon +++ b/toolchain/check/testdata/impl/lookup/fail_alias_impl_not_found.carbon @@ -46,6 +46,8 @@ fn F(c: C) { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = at_binding_pattern c, %c.param_patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -59,8 +61,8 @@ fn F(c: C) { // CHECK:STDOUT: %I.decl: type = interface_decl @I [concrete = constants.%I.type] {} {} // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %c.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type = at_binding_pattern c, %c.param_patt [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type = value_param_pattern [concrete = constants.%c.param_patt] +// CHECK:STDOUT: %c.patt: %pattern_type = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref.loc23: type = name_ref C, file.%C.decl [concrete = constants.%C] diff --git a/toolchain/check/testdata/impl/lookup/generic.carbon b/toolchain/check/testdata/impl/lookup/generic.carbon index 93a5f06a465d..69200dfeaee4 100644 --- a/toolchain/check/testdata/impl/lookup/generic.carbon +++ b/toolchain/check/testdata/impl/lookup/generic.carbon @@ -135,6 +135,8 @@ fn G(x: A) { // CHECK:STDOUT: %Self: %HasF.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] // CHECK:STDOUT: %pattern_type.c9f: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt.74d: %pattern_type.c9f = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.b33: %pattern_type.c9f = at_binding_pattern self, %self.param_patt.74d [symbolic] // CHECK:STDOUT: %HasF.WithSelf.F.type.a73: type = fn_type @HasF.WithSelf.F, @HasF.WithSelf(%Self) [symbolic] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %HasF.WithSelf.F.851: %HasF.WithSelf.F.type.a73 = struct_value () [symbolic] @@ -143,9 +145,12 @@ fn G(x: A) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %HasF.impl_witness.ebe: = impl_witness @T.as.HasF.impl.%HasF.impl_witness_table, @T.as.HasF.impl(%T) [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %self.param_patt.b7c: %pattern_type.51d = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.7e4: %pattern_type.51d = at_binding_pattern self, %self.param_patt.b7c [symbolic] // CHECK:STDOUT: %T.as.HasF.impl.F.type.195: type = fn_type @T.as.HasF.impl.F, @T.as.HasF.impl(%T) [symbolic] // CHECK:STDOUT: %T.as.HasF.impl.F.863: %T.as.HasF.impl.F.type.195 = struct_value () [symbolic] // CHECK:STDOUT: %HasF.facet.805: %HasF.type = facet_value %T, (%HasF.impl_witness.ebe) [symbolic] @@ -155,6 +160,8 @@ fn G(x: A) { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.a96: type = pattern_type %empty_struct_type [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.a96 = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.a96 = at_binding_pattern x, %x.param_patt [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %HasF.impl_witness.aaf: = impl_witness @T.as.HasF.impl.%HasF.impl_witness_table, @T.as.HasF.impl(%empty_struct_type) [concrete] @@ -164,6 +171,8 @@ fn G(x: A) { // CHECK:STDOUT: %HasF.WithSelf.F.type.476: type = fn_type @HasF.WithSelf.F, @HasF.WithSelf(%HasF.facet.b0f) [concrete] // CHECK:STDOUT: %HasF.WithSelf.F.141: %HasF.WithSelf.F.type.476 = struct_value () [concrete] // CHECK:STDOUT: %.be5: type = fn_type_with_self_type %HasF.WithSelf.F.type.476, %HasF.facet.b0f [concrete] +// CHECK:STDOUT: %self.param_patt.482: %pattern_type.a96 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.b63: %pattern_type.a96 = at_binding_pattern self, %self.param_patt.482 [concrete] // CHECK:STDOUT: %T.as.HasF.impl.F.specific_fn: = specific_function %T.as.HasF.impl.F.e31, @T.as.HasF.impl.F(%empty_struct_type) [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: } @@ -184,7 +193,7 @@ fn G(x: A) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %HasF.decl: type = interface_decl @HasF [concrete = constants.%HasF.type] {} {} // CHECK:STDOUT: impl_decl @T.as.HasF.impl [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc8_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc8_15.2 [symbolic = %T.loc8_15.1 (constants.%T)] // CHECK:STDOUT: %HasF.ref: type = name_ref HasF, file.%HasF.decl [concrete = constants.%HasF.type] @@ -195,8 +204,8 @@ fn G(x: A) { // CHECK:STDOUT: %T.loc8_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc8_15.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %x.param_patt: %pattern_type.a96 = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.a96 = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.a96 = value_param_pattern [concrete = constants.%x.param_patt] +// CHECK:STDOUT: %x.patt: %pattern_type.a96 = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %empty_struct_type = value_param call_param0 // CHECK:STDOUT: %.loc12_10.1: type = splice_block %.loc12_10.3 [concrete = constants.%empty_struct_type] { @@ -213,8 +222,8 @@ fn G(x: A) { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %HasF.WithSelf.F.decl: @HasF.WithSelf.%HasF.WithSelf.F.type (%HasF.WithSelf.F.type.a73) = fn_decl @HasF.WithSelf.F [symbolic = @HasF.WithSelf.%HasF.WithSelf.F (constants.%HasF.WithSelf.F.851)] { -// CHECK:STDOUT: %self.param_patt: @HasF.WithSelf.F.%pattern_type (%pattern_type.c9f) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @HasF.WithSelf.F.%pattern_type (%pattern_type.c9f) = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc5_8.1: @HasF.WithSelf.F.%pattern_type (%pattern_type.c9f) = value_param_pattern [symbolic = %self.param_patt.loc5_8.2 (constants.%self.param_patt.74d)] +// CHECK:STDOUT: %self.patt.loc5_8.1: @HasF.WithSelf.F.%pattern_type (%pattern_type.c9f) = at_binding_pattern self, %self.param_patt.loc5_8.1 [symbolic = %self.patt.loc5_8.2 (constants.%self.patt.b33)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @HasF.WithSelf.F.%Self.as_type.loc5_8.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc5_8.1: type = splice_block %.loc5_8.2 [symbolic = %Self.as_type.loc5_8.1 (constants.%Self.as_type)] { @@ -235,6 +244,7 @@ fn G(x: A) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @T.as.HasF.impl(%T.loc8_15.2: type) { +// CHECK:STDOUT: %T.patt.loc8_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc8_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc8_15.1 (constants.%T)] // CHECK:STDOUT: %HasF.impl_witness.loc8_34.2: = impl_witness %HasF.impl_witness_table, @T.as.HasF.impl(%T.loc8_15.1) [symbolic = %HasF.impl_witness.loc8_34.2 (constants.%HasF.impl_witness.ebe)] // CHECK:STDOUT: @@ -244,8 +254,8 @@ fn G(x: A) { // CHECK:STDOUT: // CHECK:STDOUT: impl: %T.ref as %HasF.ref { // CHECK:STDOUT: %T.as.HasF.impl.F.decl: @T.as.HasF.impl.%T.as.HasF.impl.F.type (%T.as.HasF.impl.F.type.195) = fn_decl @T.as.HasF.impl.F [symbolic = @T.as.HasF.impl.%T.as.HasF.impl.F (constants.%T.as.HasF.impl.F.863)] { -// CHECK:STDOUT: %self.param_patt: @T.as.HasF.impl.F.%pattern_type (%pattern_type.51d) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @T.as.HasF.impl.F.%pattern_type (%pattern_type.51d) = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc9_15.1: @T.as.HasF.impl.F.%pattern_type (%pattern_type.51d) = value_param_pattern [symbolic = %self.param_patt.loc9_15.2 (constants.%self.param_patt.b7c)] +// CHECK:STDOUT: %self.patt.loc9_15.1: @T.as.HasF.impl.F.%pattern_type (%pattern_type.51d) = at_binding_pattern self, %self.param_patt.loc9_15.1 [symbolic = %self.patt.loc9_15.2 (constants.%self.patt.7e4)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @T.as.HasF.impl.F.%T (%T) = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @T.as.HasF.impl.%T.ref [symbolic = %T (constants.%T)] @@ -265,6 +275,8 @@ fn G(x: A) { // CHECK:STDOUT: %Self: %HasF.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc5_8.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_8.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc5_8.1 [symbolic = %pattern_type (constants.%pattern_type.c9f)] +// CHECK:STDOUT: %self.param_patt.loc5_8.2: @HasF.WithSelf.F.%pattern_type (%pattern_type.c9f) = value_param_pattern [symbolic = %self.param_patt.loc5_8.2 (constants.%self.param_patt.74d)] +// CHECK:STDOUT: %self.patt.loc5_8.2: @HasF.WithSelf.F.%pattern_type (%pattern_type.c9f) = at_binding_pattern self, %self.param_patt.loc5_8.2 [symbolic = %self.patt.loc5_8.2 (constants.%self.patt.b33)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @HasF.WithSelf.F.%Self.as_type.loc5_8.1 (%Self.as_type)); // CHECK:STDOUT: } @@ -272,6 +284,8 @@ fn G(x: A) { // CHECK:STDOUT: generic fn @T.as.HasF.impl.F(@T.as.HasF.impl.%T.loc8_15.2: type) { // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.51d)] +// CHECK:STDOUT: %self.param_patt.loc9_15.2: @T.as.HasF.impl.F.%pattern_type (%pattern_type.51d) = value_param_pattern [symbolic = %self.param_patt.loc9_15.2 (constants.%self.param_patt.b7c)] +// CHECK:STDOUT: %self.patt.loc9_15.2: @T.as.HasF.impl.F.%pattern_type (%pattern_type.51d) = at_binding_pattern self, %self.param_patt.loc9_15.2 [symbolic = %self.patt.loc9_15.2 (constants.%self.patt.7e4)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic = %require_complete (constants.%require_complete)] @@ -306,9 +320,12 @@ fn G(x: A) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc5_8.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.c9f +// CHECK:STDOUT: %self.param_patt.loc5_8.2 => constants.%self.param_patt.74d +// CHECK:STDOUT: %self.patt.loc5_8.2 => constants.%self.patt.b33 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @T.as.HasF.impl(constants.%T) { +// CHECK:STDOUT: %T.patt.loc8_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_15.1 => constants.%T // CHECK:STDOUT: %HasF.impl_witness.loc8_34.2 => constants.%HasF.impl_witness.ebe // CHECK:STDOUT: @@ -320,6 +337,8 @@ fn G(x: A) { // CHECK:STDOUT: specific @T.as.HasF.impl.F(constants.%T) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d +// CHECK:STDOUT: %self.param_patt.loc9_15.2 => constants.%self.param_patt.b7c +// CHECK:STDOUT: %self.patt.loc9_15.2 => constants.%self.patt.7e4 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HasF.WithSelf(constants.%HasF.facet.805) { @@ -333,9 +352,12 @@ fn G(x: A) { // CHECK:STDOUT: %Self => constants.%HasF.facet.805 // CHECK:STDOUT: %Self.as_type.loc5_8.1 => constants.%T // CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d +// CHECK:STDOUT: %self.param_patt.loc5_8.2 => constants.%self.param_patt.b7c +// CHECK:STDOUT: %self.patt.loc5_8.2 => constants.%self.patt.7e4 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @T.as.HasF.impl(constants.%empty_struct_type) { +// CHECK:STDOUT: %T.patt.loc8_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_15.1 => constants.%empty_struct_type // CHECK:STDOUT: %HasF.impl_witness.loc8_34.2 => constants.%HasF.impl_witness.aaf // CHECK:STDOUT: @@ -354,6 +376,8 @@ fn G(x: A) { // CHECK:STDOUT: specific @T.as.HasF.impl.F(constants.%empty_struct_type) { // CHECK:STDOUT: %T => constants.%empty_struct_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.a96 +// CHECK:STDOUT: %self.param_patt.loc9_15.2 => constants.%self.param_patt.482 +// CHECK:STDOUT: %self.patt.loc9_15.2 => constants.%self.patt.b63 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type @@ -366,7 +390,11 @@ fn G(x: A) { // CHECK:STDOUT: %Self.c62: %HasF.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type.5c2: type = facet_access_type %Self.c62 [symbolic] // CHECK:STDOUT: %pattern_type.c9f: type = pattern_type %Self.as_type.5c2 [symbolic] +// CHECK:STDOUT: %self.param_patt.74d: %pattern_type.c9f = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.b33: %pattern_type.c9f = at_binding_pattern self, %self.param_patt.74d [symbolic] // CHECK:STDOUT: %.376: Core.Form = init_form %Self.as_type.5c2 [symbolic] +// CHECK:STDOUT: %return.param_patt.78b: %pattern_type.c9f = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.c00: %pattern_type.c9f = return_slot_pattern %return.param_patt.78b, %Self.as_type.5c2 [symbolic] // CHECK:STDOUT: %HasF.WithSelf.F.type.a73: type = fn_type @HasF.WithSelf.F, @HasF.WithSelf(%Self.c62) [symbolic] // CHECK:STDOUT: %HasF.WithSelf.F.851: %HasF.WithSelf.F.type.a73 = struct_value () [symbolic] // CHECK:STDOUT: %HasF.assoc_type: type = assoc_entity_type @HasF [concrete] @@ -374,11 +402,16 @@ fn G(x: A) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.d47: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %ptr.e8f: type = ptr_type %T.67d [symbolic] // CHECK:STDOUT: %HasF.impl_witness.672: = impl_witness @ptr.as.HasF.impl.%HasF.impl_witness_table, @ptr.as.HasF.impl(%T.67d) [symbolic] // CHECK:STDOUT: %pattern_type.4f4: type = pattern_type %ptr.e8f [symbolic] +// CHECK:STDOUT: %self.param_patt.921: %pattern_type.4f4 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.99b: %pattern_type.4f4 = at_binding_pattern self, %self.param_patt.921 [symbolic] // CHECK:STDOUT: %.cb6: Core.Form = init_form %ptr.e8f [symbolic] +// CHECK:STDOUT: %return.param_patt.27f: %pattern_type.4f4 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.d67: %pattern_type.4f4 = return_slot_pattern %return.param_patt.27f, %ptr.e8f [symbolic] // CHECK:STDOUT: %ptr.as.HasF.impl.F.type.d5f: type = fn_type @ptr.as.HasF.impl.F, @ptr.as.HasF.impl(%T.67d) [symbolic] // CHECK:STDOUT: %ptr.as.HasF.impl.F.be3: %ptr.as.HasF.impl.F.type.d5f = struct_value () [symbolic] // CHECK:STDOUT: %HasF.facet.3fb: %HasF.type = facet_value %ptr.e8f, (%HasF.impl_witness.672) [symbolic] @@ -399,7 +432,11 @@ fn G(x: A) { // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %ptr.c28: type = ptr_type %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.1cc: type = pattern_type %ptr.c28 [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.1cc = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.1cc = at_binding_pattern x, %x.param_patt [concrete] // CHECK:STDOUT: %.9ba: Core.Form = init_form %ptr.c28 [concrete] +// CHECK:STDOUT: %return.param_patt.07a: %pattern_type.1cc = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.da5: %pattern_type.1cc = return_slot_pattern %return.param_patt.07a, %ptr.c28 [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %HasF.impl_witness.e43: = impl_witness @ptr.as.HasF.impl.%HasF.impl_witness_table, @ptr.as.HasF.impl(%empty_struct_type) [concrete] @@ -409,6 +446,8 @@ fn G(x: A) { // CHECK:STDOUT: %HasF.WithSelf.F.type.c4f: type = fn_type @HasF.WithSelf.F, @HasF.WithSelf(%HasF.facet.7a9) [concrete] // CHECK:STDOUT: %HasF.WithSelf.F.814: %HasF.WithSelf.F.type.c4f = struct_value () [concrete] // CHECK:STDOUT: %.2ad: type = fn_type_with_self_type %HasF.WithSelf.F.type.c4f, %HasF.facet.7a9 [concrete] +// CHECK:STDOUT: %self.param_patt.4b0: %pattern_type.1cc = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.254: %pattern_type.1cc = at_binding_pattern self, %self.param_patt.4b0 [concrete] // CHECK:STDOUT: %ptr.as.HasF.impl.F.specific_fn: = specific_function %ptr.as.HasF.impl.F.156, @ptr.as.HasF.impl.F(%empty_struct_type) [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %ptr.c28 [concrete] // CHECK:STDOUT: %Copy.impl_witness.1c2: = impl_witness imports.%Copy.impl_witness_table.4f1, @ptr.as.Copy.impl(%empty_struct_type) [concrete] @@ -441,7 +480,7 @@ fn G(x: A) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %HasF.decl: type = interface_decl @HasF [concrete = constants.%HasF.type] {} {} // CHECK:STDOUT: impl_decl @ptr.as.HasF.impl [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc8_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt.d47)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc8_15.2 [symbolic = %T.loc8_15.1 (constants.%T.67d)] // CHECK:STDOUT: %ptr.loc8_25.2: type = ptr_type %T.ref [symbolic = %ptr.loc8_25.1 (constants.%ptr.e8f)] @@ -453,10 +492,10 @@ fn G(x: A) { // CHECK:STDOUT: %T.loc8_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc8_15.1 (constants.%T.67d)] // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %x.param_patt: %pattern_type.1cc = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.1cc = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.1cc = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.1cc = return_slot_pattern %return.param_patt, %ptr.loc12_19 [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.1cc = value_param_pattern [concrete = constants.%x.param_patt] +// CHECK:STDOUT: %x.patt: %pattern_type.1cc = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.1cc = out_param_pattern [concrete = constants.%return.param_patt.07a] +// CHECK:STDOUT: %return.patt: %pattern_type.1cc = return_slot_pattern %return.param_patt, %ptr.loc12_19 [concrete = constants.%return.patt.da5] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc12_18: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] // CHECK:STDOUT: %.loc12_19.1: type = converted %.loc12_18, constants.%empty_struct_type [concrete = constants.%empty_struct_type] @@ -480,10 +519,10 @@ fn G(x: A) { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %HasF.WithSelf.F.decl: @HasF.WithSelf.%HasF.WithSelf.F.type (%HasF.WithSelf.F.type.a73) = fn_decl @HasF.WithSelf.F [symbolic = @HasF.WithSelf.%HasF.WithSelf.F (constants.%HasF.WithSelf.F.851)] { -// CHECK:STDOUT: %self.param_patt: @HasF.WithSelf.F.%pattern_type (%pattern_type.c9f) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @HasF.WithSelf.F.%pattern_type (%pattern_type.c9f) = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @HasF.WithSelf.F.%pattern_type (%pattern_type.c9f) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @HasF.WithSelf.F.%pattern_type (%pattern_type.c9f) = return_slot_pattern %return.param_patt, %.loc5_17.2 [concrete] +// CHECK:STDOUT: %self.param_patt.loc5_8.1: @HasF.WithSelf.F.%pattern_type (%pattern_type.c9f) = value_param_pattern [symbolic = %self.param_patt.loc5_8.2 (constants.%self.param_patt.74d)] +// CHECK:STDOUT: %self.patt.loc5_8.1: @HasF.WithSelf.F.%pattern_type (%pattern_type.c9f) = at_binding_pattern self, %self.param_patt.loc5_8.1 [symbolic = %self.patt.loc5_8.2 (constants.%self.patt.b33)] +// CHECK:STDOUT: %return.param_patt.loc5_17.1: @HasF.WithSelf.F.%pattern_type (%pattern_type.c9f) = out_param_pattern [symbolic = %return.param_patt.loc5_17.2 (constants.%return.param_patt.78b)] +// CHECK:STDOUT: %return.patt.loc5_14.1: @HasF.WithSelf.F.%pattern_type (%pattern_type.c9f) = return_slot_pattern %return.param_patt.loc5_17.1, %.loc5_17.2 [symbolic = %return.patt.loc5_14.2 (constants.%return.patt.c00)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc5_17: %HasF.type = name_ref Self, @HasF.%Self [symbolic = %Self (constants.%Self.c62)] // CHECK:STDOUT: %Self.as_type.loc5_17: type = facet_access_type %Self.ref.loc5_17 [symbolic = %Self.as_type.loc5_8.1 (constants.%Self.as_type.5c2)] @@ -511,6 +550,7 @@ fn G(x: A) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @ptr.as.HasF.impl(%T.loc8_15.2: type) { +// CHECK:STDOUT: %T.patt.loc8_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt.d47)] // CHECK:STDOUT: %T.loc8_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc8_15.1 (constants.%T.67d)] // CHECK:STDOUT: %ptr.loc8_25.1: type = ptr_type %T.loc8_15.1 [symbolic = %ptr.loc8_25.1 (constants.%ptr.e8f)] // CHECK:STDOUT: %HasF.impl_witness.loc8_35.2: = impl_witness %HasF.impl_witness_table, @ptr.as.HasF.impl(%T.loc8_15.1) [symbolic = %HasF.impl_witness.loc8_35.2 (constants.%HasF.impl_witness.672)] @@ -521,10 +561,10 @@ fn G(x: A) { // CHECK:STDOUT: // CHECK:STDOUT: impl: %ptr.loc8_25.2 as %HasF.ref { // CHECK:STDOUT: %ptr.as.HasF.impl.F.decl: @ptr.as.HasF.impl.%ptr.as.HasF.impl.F.type (%ptr.as.HasF.impl.F.type.d5f) = fn_decl @ptr.as.HasF.impl.F [symbolic = @ptr.as.HasF.impl.%ptr.as.HasF.impl.F (constants.%ptr.as.HasF.impl.F.be3)] { -// CHECK:STDOUT: %self.param_patt: @ptr.as.HasF.impl.F.%pattern_type (%pattern_type.4f4) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @ptr.as.HasF.impl.F.%pattern_type (%pattern_type.4f4) = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @ptr.as.HasF.impl.F.%pattern_type (%pattern_type.4f4) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @ptr.as.HasF.impl.F.%pattern_type (%pattern_type.4f4) = return_slot_pattern %return.param_patt, %ptr.loc9_18 [concrete] +// CHECK:STDOUT: %self.param_patt.loc9_8.1: @ptr.as.HasF.impl.F.%pattern_type (%pattern_type.4f4) = value_param_pattern [symbolic = %self.param_patt.loc9_8.2 (constants.%self.param_patt.921)] +// CHECK:STDOUT: %self.patt.loc9_8.1: @ptr.as.HasF.impl.F.%pattern_type (%pattern_type.4f4) = at_binding_pattern self, %self.param_patt.loc9_8.1 [symbolic = %self.patt.loc9_8.2 (constants.%self.patt.99b)] +// CHECK:STDOUT: %return.param_patt.loc9_18.1: @ptr.as.HasF.impl.F.%pattern_type (%pattern_type.4f4) = out_param_pattern [symbolic = %return.param_patt.loc9_18.2 (constants.%return.param_patt.27f)] +// CHECK:STDOUT: %return.patt.loc9_14.1: @ptr.as.HasF.impl.F.%pattern_type (%pattern_type.4f4) = return_slot_pattern %return.param_patt.loc9_18.1, %ptr.loc9_18 [symbolic = %return.patt.loc9_14.2 (constants.%return.patt.d67)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, @ptr.as.HasF.impl.%T.loc8_15.2 [symbolic = %T (constants.%T.67d)] // CHECK:STDOUT: %ptr.loc9_18: type = ptr_type %T.ref [symbolic = %ptr.loc9_8 (constants.%ptr.e8f)] @@ -550,7 +590,11 @@ fn G(x: A) { // CHECK:STDOUT: %Self: %HasF.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.c62)] // CHECK:STDOUT: %Self.as_type.loc5_8.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_8.1 (constants.%Self.as_type.5c2)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc5_8.1 [symbolic = %pattern_type (constants.%pattern_type.c9f)] +// CHECK:STDOUT: %self.param_patt.loc5_8.2: @HasF.WithSelf.F.%pattern_type (%pattern_type.c9f) = value_param_pattern [symbolic = %self.param_patt.loc5_8.2 (constants.%self.param_patt.74d)] +// CHECK:STDOUT: %self.patt.loc5_8.2: @HasF.WithSelf.F.%pattern_type (%pattern_type.c9f) = at_binding_pattern self, %self.param_patt.loc5_8.2 [symbolic = %self.patt.loc5_8.2 (constants.%self.patt.b33)] // CHECK:STDOUT: %.loc5_17.1: Core.Form = init_form %Self.as_type.loc5_8.1 [symbolic = %.loc5_17.1 (constants.%.376)] +// CHECK:STDOUT: %return.param_patt.loc5_17.2: @HasF.WithSelf.F.%pattern_type (%pattern_type.c9f) = out_param_pattern [symbolic = %return.param_patt.loc5_17.2 (constants.%return.param_patt.78b)] +// CHECK:STDOUT: %return.patt.loc5_14.2: @HasF.WithSelf.F.%pattern_type (%pattern_type.c9f) = return_slot_pattern %return.param_patt.loc5_17.2, %Self.as_type.loc5_8.1 [symbolic = %return.patt.loc5_14.2 (constants.%return.patt.c00)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @HasF.WithSelf.F.%Self.as_type.loc5_8.1 (%Self.as_type.5c2)) -> out %return.param: @HasF.WithSelf.F.%Self.as_type.loc5_8.1 (%Self.as_type.5c2); // CHECK:STDOUT: } @@ -559,25 +603,31 @@ fn G(x: A) { // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T.67d)] // CHECK:STDOUT: %ptr.loc9_8: type = ptr_type %T [symbolic = %ptr.loc9_8 (constants.%ptr.e8f)] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc9_8 [symbolic = %pattern_type (constants.%pattern_type.4f4)] +// CHECK:STDOUT: %self.param_patt.loc9_8.2: @ptr.as.HasF.impl.F.%pattern_type (%pattern_type.4f4) = value_param_pattern [symbolic = %self.param_patt.loc9_8.2 (constants.%self.param_patt.921)] +// CHECK:STDOUT: %self.patt.loc9_8.2: @ptr.as.HasF.impl.F.%pattern_type (%pattern_type.4f4) = at_binding_pattern self, %self.param_patt.loc9_8.2 [symbolic = %self.patt.loc9_8.2 (constants.%self.patt.99b)] // CHECK:STDOUT: %.loc9_18.1: Core.Form = init_form %ptr.loc9_8 [symbolic = %.loc9_18.1 (constants.%.cb6)] +// CHECK:STDOUT: %return.param_patt.loc9_18.2: @ptr.as.HasF.impl.F.%pattern_type (%pattern_type.4f4) = out_param_pattern [symbolic = %return.param_patt.loc9_18.2 (constants.%return.param_patt.27f)] +// CHECK:STDOUT: %return.patt.loc9_14.2: @ptr.as.HasF.impl.F.%pattern_type (%pattern_type.4f4) = return_slot_pattern %return.param_patt.loc9_18.2, %ptr.loc9_8 [symbolic = %return.patt.loc9_14.2 (constants.%return.patt.d67)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %ptr.loc9_8 [symbolic = %require_complete (constants.%require_complete.ef1)] -// CHECK:STDOUT: %.loc9_29.2: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T) [symbolic = %.loc9_29.2 (constants.%.0e9)] +// CHECK:STDOUT: %.loc9_29.3: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T) [symbolic = %.loc9_29.3 (constants.%.0e9)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %ptr.loc9_8, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.1da)] -// CHECK:STDOUT: %Copy.facet.loc9_29.2: %Copy.type = facet_value %ptr.loc9_8, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc9_29.2 (constants.%Copy.facet.302)] -// CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.loc9_29.2) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.884)] -// CHECK:STDOUT: %.loc9_29.3: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %Copy.facet.loc9_29.2 [symbolic = %.loc9_29.3 (constants.%.be5)] -// CHECK:STDOUT: %impl.elem0.loc9_29.2: @ptr.as.HasF.impl.F.%.loc9_29.3 (%.be5) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc9_29.2 (constants.%impl.elem0.484)] -// CHECK:STDOUT: %specific_impl_fn.loc9_29.2: = specific_impl_function %impl.elem0.loc9_29.2, @Copy.WithSelf.Op(%Copy.facet.loc9_29.2) [symbolic = %specific_impl_fn.loc9_29.2 (constants.%specific_impl_fn.a76)] +// CHECK:STDOUT: %Copy.facet.loc9_29.3: %Copy.type = facet_value %ptr.loc9_8, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc9_29.3 (constants.%Copy.facet.302)] +// CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.loc9_29.3) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.884)] +// CHECK:STDOUT: %.loc9_29.4: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %Copy.facet.loc9_29.3 [symbolic = %.loc9_29.4 (constants.%.be5)] +// CHECK:STDOUT: %impl.elem0.loc9_29.2: @ptr.as.HasF.impl.F.%.loc9_29.4 (%.be5) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc9_29.2 (constants.%impl.elem0.484)] +// CHECK:STDOUT: %specific_impl_fn.loc9_29.2: = specific_impl_function %impl.elem0.loc9_29.2, @Copy.WithSelf.Op(%Copy.facet.loc9_29.3) [symbolic = %specific_impl_fn.loc9_29.2 (constants.%specific_impl_fn.a76)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @ptr.as.HasF.impl.F.%ptr.loc9_8 (%ptr.e8f)) -> out %return.param: @ptr.as.HasF.impl.F.%ptr.loc9_8 (%ptr.e8f) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %self.ref: @ptr.as.HasF.impl.F.%ptr.loc9_8 (%ptr.e8f) = name_ref self, %self -// CHECK:STDOUT: %impl.elem0.loc9_29.1: @ptr.as.HasF.impl.F.%.loc9_29.3 (%.be5) = impl_witness_access constants.%Copy.lookup_impl_witness.1da, element0 [symbolic = %impl.elem0.loc9_29.2 (constants.%impl.elem0.484)] +// CHECK:STDOUT: %impl.elem0.loc9_29.1: @ptr.as.HasF.impl.F.%.loc9_29.4 (%.be5) = impl_witness_access constants.%Copy.lookup_impl_witness.1da, element0 [symbolic = %impl.elem0.loc9_29.2 (constants.%impl.elem0.484)] // CHECK:STDOUT: %bound_method.loc9_29.1: = bound_method %self.ref, %impl.elem0.loc9_29.1 -// CHECK:STDOUT: %Copy.facet.loc9_29.1: %Copy.type = facet_value constants.%ptr.e8f, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc9_29.2 (constants.%Copy.facet.302)] -// CHECK:STDOUT: %.loc9_29.1: %Copy.type = converted constants.%ptr.e8f, %Copy.facet.loc9_29.1 [symbolic = %Copy.facet.loc9_29.2 (constants.%Copy.facet.302)] +// CHECK:STDOUT: %Copy.facet.loc9_29.1: %Copy.type = facet_value constants.%ptr.e8f, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc9_29.3 (constants.%Copy.facet.302)] +// CHECK:STDOUT: %.loc9_29.1: %Copy.type = converted constants.%ptr.e8f, %Copy.facet.loc9_29.1 [symbolic = %Copy.facet.loc9_29.3 (constants.%Copy.facet.302)] +// CHECK:STDOUT: %Copy.facet.loc9_29.2: %Copy.type = facet_value constants.%ptr.e8f, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc9_29.3 (constants.%Copy.facet.302)] +// CHECK:STDOUT: %.loc9_29.2: %Copy.type = converted constants.%ptr.e8f, %Copy.facet.loc9_29.2 [symbolic = %Copy.facet.loc9_29.3 (constants.%Copy.facet.302)] // CHECK:STDOUT: %specific_impl_fn.loc9_29.1: = specific_impl_function %impl.elem0.loc9_29.1, @Copy.WithSelf.Op(constants.%Copy.facet.302) [symbolic = %specific_impl_fn.loc9_29.2 (constants.%specific_impl_fn.a76)] // CHECK:STDOUT: %bound_method.loc9_29.2: = bound_method %self.ref, %specific_impl_fn.loc9_29.1 // CHECK:STDOUT: %Copy.WithSelf.Op.call: init @ptr.as.HasF.impl.F.%ptr.loc9_8 (%ptr.e8f) = call %bound_method.loc9_29.2(%self.ref) @@ -609,10 +659,15 @@ fn G(x: A) { // CHECK:STDOUT: %Self => constants.%Self.c62 // CHECK:STDOUT: %Self.as_type.loc5_8.1 => constants.%Self.as_type.5c2 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.c9f +// CHECK:STDOUT: %self.param_patt.loc5_8.2 => constants.%self.param_patt.74d +// CHECK:STDOUT: %self.patt.loc5_8.2 => constants.%self.patt.b33 // CHECK:STDOUT: %.loc5_17.1 => constants.%.376 +// CHECK:STDOUT: %return.param_patt.loc5_17.2 => constants.%return.param_patt.78b +// CHECK:STDOUT: %return.patt.loc5_14.2 => constants.%return.patt.c00 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ptr.as.HasF.impl(constants.%T.67d) { +// CHECK:STDOUT: %T.patt.loc8_15.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc8_15.1 => constants.%T.67d // CHECK:STDOUT: %ptr.loc8_25.1 => constants.%ptr.e8f // CHECK:STDOUT: %HasF.impl_witness.loc8_35.2 => constants.%HasF.impl_witness.672 @@ -626,7 +681,11 @@ fn G(x: A) { // CHECK:STDOUT: %T => constants.%T.67d // CHECK:STDOUT: %ptr.loc9_8 => constants.%ptr.e8f // CHECK:STDOUT: %pattern_type => constants.%pattern_type.4f4 +// CHECK:STDOUT: %self.param_patt.loc9_8.2 => constants.%self.param_patt.921 +// CHECK:STDOUT: %self.patt.loc9_8.2 => constants.%self.patt.99b // CHECK:STDOUT: %.loc9_18.1 => constants.%.cb6 +// CHECK:STDOUT: %return.param_patt.loc9_18.2 => constants.%return.param_patt.27f +// CHECK:STDOUT: %return.patt.loc9_14.2 => constants.%return.patt.d67 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HasF.WithSelf(constants.%HasF.facet.3fb) { @@ -640,10 +699,15 @@ fn G(x: A) { // CHECK:STDOUT: %Self => constants.%HasF.facet.3fb // CHECK:STDOUT: %Self.as_type.loc5_8.1 => constants.%ptr.e8f // CHECK:STDOUT: %pattern_type => constants.%pattern_type.4f4 +// CHECK:STDOUT: %self.param_patt.loc5_8.2 => constants.%self.param_patt.921 +// CHECK:STDOUT: %self.patt.loc5_8.2 => constants.%self.patt.99b // CHECK:STDOUT: %.loc5_17.1 => constants.%.cb6 +// CHECK:STDOUT: %return.param_patt.loc5_17.2 => constants.%return.param_patt.27f +// CHECK:STDOUT: %return.patt.loc5_14.2 => constants.%return.patt.d67 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ptr.as.HasF.impl(constants.%empty_struct_type) { +// CHECK:STDOUT: %T.patt.loc8_15.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc8_15.1 => constants.%empty_struct_type // CHECK:STDOUT: %ptr.loc8_25.1 => constants.%ptr.c28 // CHECK:STDOUT: %HasF.impl_witness.loc8_35.2 => constants.%HasF.impl_witness.e43 @@ -664,15 +728,19 @@ fn G(x: A) { // CHECK:STDOUT: %T => constants.%empty_struct_type // CHECK:STDOUT: %ptr.loc9_8 => constants.%ptr.c28 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.1cc +// CHECK:STDOUT: %self.param_patt.loc9_8.2 => constants.%self.param_patt.4b0 +// CHECK:STDOUT: %self.patt.loc9_8.2 => constants.%self.patt.254 // CHECK:STDOUT: %.loc9_18.1 => constants.%.9ba +// CHECK:STDOUT: %return.param_patt.loc9_18.2 => constants.%return.param_patt.07a +// CHECK:STDOUT: %return.patt.loc9_14.2 => constants.%return.patt.da5 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type -// CHECK:STDOUT: %.loc9_29.2 => constants.%.a81 +// CHECK:STDOUT: %.loc9_29.3 => constants.%.a81 // CHECK:STDOUT: %Copy.lookup_impl_witness => constants.%Copy.impl_witness.1c2 -// CHECK:STDOUT: %Copy.facet.loc9_29.2 => constants.%Copy.facet.80f +// CHECK:STDOUT: %Copy.facet.loc9_29.3 => constants.%Copy.facet.80f // CHECK:STDOUT: %Copy.WithSelf.Op.type => constants.%Copy.WithSelf.Op.type.8a4 -// CHECK:STDOUT: %.loc9_29.3 => constants.%.523 +// CHECK:STDOUT: %.loc9_29.4 => constants.%.523 // CHECK:STDOUT: %impl.elem0.loc9_29.2 => constants.%ptr.as.Copy.impl.Op.9ed // CHECK:STDOUT: %specific_impl_fn.loc9_29.2 => constants.%ptr.as.Copy.impl.Op.specific_fn // CHECK:STDOUT: } @@ -684,6 +752,8 @@ fn G(x: A) { // CHECK:STDOUT: %Self: %HasF.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] // CHECK:STDOUT: %pattern_type.c9f: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt.74d: %pattern_type.c9f = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.b33: %pattern_type.c9f = at_binding_pattern self, %self.param_patt.74d [symbolic] // CHECK:STDOUT: %HasF.WithSelf.F.type.a73: type = fn_type @HasF.WithSelf.F, @HasF.WithSelf(%Self) [symbolic] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %HasF.WithSelf.F.851: %HasF.WithSelf.F.type.a73 = struct_value () [symbolic] @@ -692,6 +762,7 @@ fn G(x: A) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] @@ -700,6 +771,8 @@ fn G(x: A) { // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %HasF.impl_witness.4e6: = impl_witness @C.as.HasF.impl.%HasF.impl_witness_table, @C.as.HasF.impl(%T) [symbolic] // CHECK:STDOUT: %pattern_type.ebe: type = pattern_type %C.1d0 [symbolic] +// CHECK:STDOUT: %self.param_patt.5bc: %pattern_type.ebe = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.6f1: %pattern_type.ebe = at_binding_pattern self, %self.param_patt.5bc [symbolic] // CHECK:STDOUT: %C.as.HasF.impl.F.type.67f: type = fn_type @C.as.HasF.impl.F, @C.as.HasF.impl(%T) [symbolic] // CHECK:STDOUT: %C.as.HasF.impl.F.7ba: %C.as.HasF.impl.F.type.67f = struct_value () [symbolic] // CHECK:STDOUT: %HasF.facet.0c3: %HasF.type = facet_value %C.1d0, (%HasF.impl_witness.4e6) [symbolic] @@ -709,6 +782,8 @@ fn G(x: A) { // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %C.d8e: type = class_type @C, @C(%empty_struct_type) [concrete] // CHECK:STDOUT: %pattern_type.2fd: type = pattern_type %C.d8e [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.2fd = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.2fd = at_binding_pattern x, %x.param_patt [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %HasF.impl_witness.f0d: = impl_witness @C.as.HasF.impl.%HasF.impl_witness_table, @C.as.HasF.impl(%empty_struct_type) [concrete] @@ -718,6 +793,8 @@ fn G(x: A) { // CHECK:STDOUT: %HasF.WithSelf.F.type.938: type = fn_type @HasF.WithSelf.F, @HasF.WithSelf(%HasF.facet.132) [concrete] // CHECK:STDOUT: %HasF.WithSelf.F.787: %HasF.WithSelf.F.type.938 = struct_value () [concrete] // CHECK:STDOUT: %.bf7: type = fn_type_with_self_type %HasF.WithSelf.F.type.938, %HasF.facet.132 [concrete] +// CHECK:STDOUT: %self.param_patt.12a: %pattern_type.2fd = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.ac5: %pattern_type.2fd = at_binding_pattern self, %self.param_patt.12a [concrete] // CHECK:STDOUT: %C.as.HasF.impl.F.specific_fn: = specific_function %C.as.HasF.impl.F.612, @C.as.HasF.impl.F(%empty_struct_type) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -738,7 +815,7 @@ fn G(x: A) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %HasF.decl: type = interface_decl @HasF [concrete = constants.%HasF.type] {} {} // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc8_10.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_10.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8_13.1: type = splice_block %.loc8_13.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -747,7 +824,7 @@ fn G(x: A) { // CHECK:STDOUT: %T.loc8_10.2: type = symbolic_binding T, 0 [symbolic = %T.loc8_10.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @C.as.HasF.impl [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc10_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc10_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: %C.type = name_ref C, file.%C.decl [concrete = constants.%C.generic] // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc10_15.2 [symbolic = %T.loc10_15.1 (constants.%T)] @@ -760,8 +837,8 @@ fn G(x: A) { // CHECK:STDOUT: %T.loc10_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc10_15.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %x.param_patt: %pattern_type.2fd = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.2fd = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.2fd = value_param_pattern [concrete = constants.%x.param_patt] +// CHECK:STDOUT: %x.patt: %pattern_type.2fd = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %C.d8e = value_param call_param0 // CHECK:STDOUT: %.loc14_13.1: type = splice_block %C [concrete = constants.%C.d8e] { @@ -780,8 +857,8 @@ fn G(x: A) { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %HasF.WithSelf.F.decl: @HasF.WithSelf.%HasF.WithSelf.F.type (%HasF.WithSelf.F.type.a73) = fn_decl @HasF.WithSelf.F [symbolic = @HasF.WithSelf.%HasF.WithSelf.F (constants.%HasF.WithSelf.F.851)] { -// CHECK:STDOUT: %self.param_patt: @HasF.WithSelf.F.%pattern_type (%pattern_type.c9f) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @HasF.WithSelf.F.%pattern_type (%pattern_type.c9f) = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc5_8.1: @HasF.WithSelf.F.%pattern_type (%pattern_type.c9f) = value_param_pattern [symbolic = %self.param_patt.loc5_8.2 (constants.%self.param_patt.74d)] +// CHECK:STDOUT: %self.patt.loc5_8.1: @HasF.WithSelf.F.%pattern_type (%pattern_type.c9f) = at_binding_pattern self, %self.param_patt.loc5_8.1 [symbolic = %self.patt.loc5_8.2 (constants.%self.patt.b33)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @HasF.WithSelf.F.%Self.as_type.loc5_8.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc5_8.1: type = splice_block %.loc5_8.2 [symbolic = %Self.as_type.loc5_8.1 (constants.%Self.as_type)] { @@ -802,6 +879,7 @@ fn G(x: A) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @C.as.HasF.impl(%T.loc10_15.2: type) { +// CHECK:STDOUT: %T.patt.loc10_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc10_15.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc10_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc10_15.1 (constants.%T)] // CHECK:STDOUT: %C.loc10_27.1: type = class_type @C, @C(%T.loc10_15.1) [symbolic = %C.loc10_27.1 (constants.%C.1d0)] // CHECK:STDOUT: %HasF.impl_witness.loc10_37.2: = impl_witness %HasF.impl_witness_table, @C.as.HasF.impl(%T.loc10_15.1) [symbolic = %HasF.impl_witness.loc10_37.2 (constants.%HasF.impl_witness.4e6)] @@ -812,8 +890,8 @@ fn G(x: A) { // CHECK:STDOUT: // CHECK:STDOUT: impl: %C.loc10_27.2 as %HasF.ref { // CHECK:STDOUT: %C.as.HasF.impl.F.decl: @C.as.HasF.impl.%C.as.HasF.impl.F.type (%C.as.HasF.impl.F.type.67f) = fn_decl @C.as.HasF.impl.F [symbolic = @C.as.HasF.impl.%C.as.HasF.impl.F (constants.%C.as.HasF.impl.F.7ba)] { -// CHECK:STDOUT: %self.param_patt: @C.as.HasF.impl.F.%pattern_type (%pattern_type.ebe) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @C.as.HasF.impl.F.%pattern_type (%pattern_type.ebe) = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc11_15.1: @C.as.HasF.impl.F.%pattern_type (%pattern_type.ebe) = value_param_pattern [symbolic = %self.param_patt.loc11_15.2 (constants.%self.param_patt.5bc)] +// CHECK:STDOUT: %self.patt.loc11_15.1: @C.as.HasF.impl.F.%pattern_type (%pattern_type.ebe) = at_binding_pattern self, %self.param_patt.loc11_15.1 [symbolic = %self.patt.loc11_15.2 (constants.%self.patt.6f1)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @C.as.HasF.impl.F.%C (%C.1d0) = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @C.as.HasF.impl.%C.loc10_27.2 [symbolic = %C (constants.%C.1d0)] @@ -830,6 +908,7 @@ fn G(x: A) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc8_10.2: type) { +// CHECK:STDOUT: %T.patt.loc8_10.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_10.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc8_10.1: type = symbolic_binding T, 0 [symbolic = %T.loc8_10.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -847,6 +926,8 @@ fn G(x: A) { // CHECK:STDOUT: %Self: %HasF.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc5_8.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_8.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc5_8.1 [symbolic = %pattern_type (constants.%pattern_type.c9f)] +// CHECK:STDOUT: %self.param_patt.loc5_8.2: @HasF.WithSelf.F.%pattern_type (%pattern_type.c9f) = value_param_pattern [symbolic = %self.param_patt.loc5_8.2 (constants.%self.param_patt.74d)] +// CHECK:STDOUT: %self.patt.loc5_8.2: @HasF.WithSelf.F.%pattern_type (%pattern_type.c9f) = at_binding_pattern self, %self.param_patt.loc5_8.2 [symbolic = %self.patt.loc5_8.2 (constants.%self.patt.b33)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @HasF.WithSelf.F.%Self.as_type.loc5_8.1 (%Self.as_type)); // CHECK:STDOUT: } @@ -855,6 +936,8 @@ fn G(x: A) { // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C.1d0)] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [symbolic = %pattern_type (constants.%pattern_type.ebe)] +// CHECK:STDOUT: %self.param_patt.loc11_15.2: @C.as.HasF.impl.F.%pattern_type (%pattern_type.ebe) = value_param_pattern [symbolic = %self.param_patt.loc11_15.2 (constants.%self.param_patt.5bc)] +// CHECK:STDOUT: %self.patt.loc11_15.2: @C.as.HasF.impl.F.%pattern_type (%pattern_type.ebe) = at_binding_pattern self, %self.param_patt.loc11_15.2 [symbolic = %self.patt.loc11_15.2 (constants.%self.patt.6f1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %C [symbolic = %require_complete (constants.%require_complete)] @@ -889,15 +972,19 @@ fn G(x: A) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc5_8.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.c9f +// CHECK:STDOUT: %self.param_patt.loc5_8.2 => constants.%self.param_patt.74d +// CHECK:STDOUT: %self.patt.loc5_8.2 => constants.%self.patt.b33 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%T) { +// CHECK:STDOUT: %T.patt.loc8_10.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_10.1 => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C.as.HasF.impl(constants.%T) { +// CHECK:STDOUT: %T.patt.loc10_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc10_15.1 => constants.%T // CHECK:STDOUT: %C.loc10_27.1 => constants.%C.1d0 // CHECK:STDOUT: %HasF.impl_witness.loc10_37.2 => constants.%HasF.impl_witness.4e6 @@ -911,6 +998,8 @@ fn G(x: A) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %C => constants.%C.1d0 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.ebe +// CHECK:STDOUT: %self.param_patt.loc11_15.2 => constants.%self.param_patt.5bc +// CHECK:STDOUT: %self.patt.loc11_15.2 => constants.%self.patt.6f1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HasF.WithSelf(constants.%HasF.facet.0c3) { @@ -924,15 +1013,19 @@ fn G(x: A) { // CHECK:STDOUT: %Self => constants.%HasF.facet.0c3 // CHECK:STDOUT: %Self.as_type.loc5_8.1 => constants.%C.1d0 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.ebe +// CHECK:STDOUT: %self.param_patt.loc5_8.2 => constants.%self.param_patt.5bc +// CHECK:STDOUT: %self.patt.loc5_8.2 => constants.%self.patt.6f1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%empty_struct_type) { +// CHECK:STDOUT: %T.patt.loc8_10.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_10.1 => constants.%empty_struct_type // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C.as.HasF.impl(constants.%empty_struct_type) { +// CHECK:STDOUT: %T.patt.loc10_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc10_15.1 => constants.%empty_struct_type // CHECK:STDOUT: %C.loc10_27.1 => constants.%C.d8e // CHECK:STDOUT: %HasF.impl_witness.loc10_37.2 => constants.%HasF.impl_witness.f0d @@ -953,6 +1046,8 @@ fn G(x: A) { // CHECK:STDOUT: %T => constants.%empty_struct_type // CHECK:STDOUT: %C => constants.%C.d8e // CHECK:STDOUT: %pattern_type => constants.%pattern_type.2fd +// CHECK:STDOUT: %self.param_patt.loc11_15.2 => constants.%self.param_patt.12a +// CHECK:STDOUT: %self.patt.loc11_15.2 => constants.%self.patt.ac5 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type @@ -964,6 +1059,7 @@ fn G(x: A) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %HasF.type.c96: type = generic_interface_type @HasF [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -972,6 +1068,8 @@ fn G(x: A) { // CHECK:STDOUT: %Self.822: %HasF.type.daf = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.822 [symbolic] // CHECK:STDOUT: %pattern_type.a2b: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt.d2c: %pattern_type.a2b = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.763: %pattern_type.a2b = at_binding_pattern self, %self.param_patt.d2c [symbolic] // CHECK:STDOUT: %HasF.WithSelf.F.type.41d: type = fn_type @HasF.WithSelf.F, @HasF.WithSelf(%T, %Self.822) [symbolic] // CHECK:STDOUT: %HasF.WithSelf.F.ff7: %HasF.WithSelf.F.type.41d = struct_value () [symbolic] // CHECK:STDOUT: %HasF.assoc_type.ddf: type = assoc_entity_type @HasF, @HasF(%T) [symbolic] @@ -981,11 +1079,15 @@ fn G(x: A) { // CHECK:STDOUT: %HasF.impl_witness.932: = impl_witness @empty_struct_type.as.HasF.impl.%HasF.impl_witness_table, @empty_struct_type.as.HasF.impl(%T) [symbolic] // CHECK:STDOUT: %require_complete: = require_complete_type %HasF.type.daf [symbolic] // CHECK:STDOUT: %pattern_type.a96: type = pattern_type %empty_struct_type [concrete] +// CHECK:STDOUT: %self.param_patt.482: %pattern_type.a96 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.b63: %pattern_type.a96 = at_binding_pattern self, %self.param_patt.482 [concrete] // CHECK:STDOUT: %empty_struct_type.as.HasF.impl.F.type.5ee: type = fn_type @empty_struct_type.as.HasF.impl.F, @empty_struct_type.as.HasF.impl(%T) [symbolic] // CHECK:STDOUT: %empty_struct_type.as.HasF.impl.F.b79: %empty_struct_type.as.HasF.impl.F.type.5ee = struct_value () [symbolic] // CHECK:STDOUT: %HasF.facet.9f2: %HasF.type.daf = facet_value %empty_struct_type, (%HasF.impl_witness.932) [symbolic] // CHECK:STDOUT: %HasF.WithSelf.F.type.dd7: type = fn_type @HasF.WithSelf.F, @HasF.WithSelf(%T, %HasF.facet.9f2) [symbolic] // CHECK:STDOUT: %HasF.WithSelf.F.7b3: %HasF.WithSelf.F.type.dd7 = struct_value () [symbolic] +// CHECK:STDOUT: %x.param_patt: %pattern_type.a96 = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.a96 = at_binding_pattern x, %x.param_patt [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %HasF.type.b91: type = facet_type <@HasF, @HasF(%empty_struct_type)> [concrete] @@ -1020,7 +1122,7 @@ fn G(x: A) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %HasF.decl: %HasF.type.c96 = interface_decl @HasF [concrete = constants.%HasF.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc4_17.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_17.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_20.1: type = splice_block %.loc4_20.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1029,7 +1131,7 @@ fn G(x: A) { // CHECK:STDOUT: %T.loc4_17.2: type = symbolic_binding T, 0 [symbolic = %T.loc4_17.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @empty_struct_type.as.HasF.impl [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc8_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8_25.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] // CHECK:STDOUT: %.loc8_25.2: type = converted %.loc8_25.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type] @@ -1043,8 +1145,8 @@ fn G(x: A) { // CHECK:STDOUT: %T.loc8_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc8_15.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %x.param_patt: %pattern_type.a96 = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.a96 = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.a96 = value_param_pattern [concrete = constants.%x.param_patt] +// CHECK:STDOUT: %x.patt: %pattern_type.a96 = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %empty_struct_type = value_param call_param0 // CHECK:STDOUT: %.loc12_10.1: type = splice_block %.loc12_10.3 [concrete = constants.%empty_struct_type] { @@ -1056,6 +1158,7 @@ fn G(x: A) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @HasF(%T.loc4_17.2: type) { +// CHECK:STDOUT: %T.patt.loc4_17.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_17.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_17.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_17.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1068,8 +1171,8 @@ fn G(x: A) { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %HasF.WithSelf.F.decl: @HasF.WithSelf.%HasF.WithSelf.F.type (%HasF.WithSelf.F.type.41d) = fn_decl @HasF.WithSelf.F [symbolic = @HasF.WithSelf.%HasF.WithSelf.F (constants.%HasF.WithSelf.F.ff7)] { -// CHECK:STDOUT: %self.param_patt: @HasF.WithSelf.F.%pattern_type (%pattern_type.a2b) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @HasF.WithSelf.F.%pattern_type (%pattern_type.a2b) = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc5_8.1: @HasF.WithSelf.F.%pattern_type (%pattern_type.a2b) = value_param_pattern [symbolic = %self.param_patt.loc5_8.2 (constants.%self.param_patt.d2c)] +// CHECK:STDOUT: %self.patt.loc5_8.1: @HasF.WithSelf.F.%pattern_type (%pattern_type.a2b) = at_binding_pattern self, %self.param_patt.loc5_8.1 [symbolic = %self.patt.loc5_8.2 (constants.%self.patt.763)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @HasF.WithSelf.F.%Self.as_type.loc5_8.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc5_8.1: type = splice_block %.loc5_8.3 [symbolic = %Self.as_type.loc5_8.1 (constants.%Self.as_type)] { @@ -1092,6 +1195,7 @@ fn G(x: A) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @empty_struct_type.as.HasF.impl(%T.loc8_15.2: type) { +// CHECK:STDOUT: %T.patt.loc8_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc8_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc8_15.1 (constants.%T)] // CHECK:STDOUT: %HasF.type.loc8_36.1: type = facet_type <@HasF, @HasF(%T.loc8_15.1)> [symbolic = %HasF.type.loc8_36.1 (constants.%HasF.type.daf)] // CHECK:STDOUT: %HasF.impl_witness.loc8_38.2: = impl_witness %HasF.impl_witness_table, @empty_struct_type.as.HasF.impl(%T.loc8_15.1) [symbolic = %HasF.impl_witness.loc8_38.2 (constants.%HasF.impl_witness.932)] @@ -1103,8 +1207,8 @@ fn G(x: A) { // CHECK:STDOUT: // CHECK:STDOUT: impl: %.loc8_25.2 as %HasF.type.loc8_36.2 { // CHECK:STDOUT: %empty_struct_type.as.HasF.impl.F.decl: @empty_struct_type.as.HasF.impl.%empty_struct_type.as.HasF.impl.F.type (%empty_struct_type.as.HasF.impl.F.type.5ee) = fn_decl @empty_struct_type.as.HasF.impl.F [symbolic = @empty_struct_type.as.HasF.impl.%empty_struct_type.as.HasF.impl.F (constants.%empty_struct_type.as.HasF.impl.F.b79)] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.a96 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.a96 = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.a96 = value_param_pattern [concrete = constants.%self.param_patt.482] +// CHECK:STDOUT: %self.patt: %pattern_type.a96 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.b63] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %empty_struct_type = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @empty_struct_type.as.HasF.impl.%.loc8_25.2 [concrete = constants.%empty_struct_type] @@ -1126,6 +1230,8 @@ fn G(x: A) { // CHECK:STDOUT: %Self: @HasF.WithSelf.F.%HasF.type (%HasF.type.daf) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self.822)] // CHECK:STDOUT: %Self.as_type.loc5_8.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_8.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc5_8.1 [symbolic = %pattern_type (constants.%pattern_type.a2b)] +// CHECK:STDOUT: %self.param_patt.loc5_8.2: @HasF.WithSelf.F.%pattern_type (%pattern_type.a2b) = value_param_pattern [symbolic = %self.param_patt.loc5_8.2 (constants.%self.param_patt.d2c)] +// CHECK:STDOUT: %self.patt.loc5_8.2: @HasF.WithSelf.F.%pattern_type (%pattern_type.a2b) = at_binding_pattern self, %self.param_patt.loc5_8.2 [symbolic = %self.patt.loc5_8.2 (constants.%self.patt.763)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @HasF.WithSelf.F.%Self.as_type.loc5_8.1 (%Self.as_type)); // CHECK:STDOUT: } @@ -1157,6 +1263,7 @@ fn G(x: A) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HasF(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_17.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_17.1 => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1181,9 +1288,12 @@ fn G(x: A) { // CHECK:STDOUT: %Self => constants.%Self.822 // CHECK:STDOUT: %Self.as_type.loc5_8.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.a2b +// CHECK:STDOUT: %self.param_patt.loc5_8.2 => constants.%self.param_patt.d2c +// CHECK:STDOUT: %self.patt.loc5_8.2 => constants.%self.patt.763 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @empty_struct_type.as.HasF.impl(constants.%T) { +// CHECK:STDOUT: %T.patt.loc8_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_15.1 => constants.%T // CHECK:STDOUT: %HasF.type.loc8_36.1 => constants.%HasF.type.daf // CHECK:STDOUT: %HasF.impl_witness.loc8_38.2 => constants.%HasF.impl_witness.932 @@ -1213,9 +1323,12 @@ fn G(x: A) { // CHECK:STDOUT: %Self => constants.%HasF.facet.9f2 // CHECK:STDOUT: %Self.as_type.loc5_8.1 => constants.%empty_struct_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.a96 +// CHECK:STDOUT: %self.param_patt.loc5_8.2 => constants.%self.param_patt.482 +// CHECK:STDOUT: %self.patt.loc5_8.2 => constants.%self.patt.b63 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HasF(constants.%empty_struct_type) { +// CHECK:STDOUT: %T.patt.loc4_17.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_17.1 => constants.%empty_struct_type // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1235,6 +1348,7 @@ fn G(x: A) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @empty_struct_type.as.HasF.impl(constants.%empty_struct_type) { +// CHECK:STDOUT: %T.patt.loc8_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_15.1 => constants.%empty_struct_type // CHECK:STDOUT: %HasF.type.loc8_36.1 => constants.%HasF.type.b91 // CHECK:STDOUT: %HasF.impl_witness.loc8_38.2 => constants.%HasF.impl_witness.7f1 @@ -1267,6 +1381,8 @@ fn G(x: A) { // CHECK:STDOUT: %Self: %HasF.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] // CHECK:STDOUT: %pattern_type.c9f: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt.74d: %pattern_type.c9f = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.b33: %pattern_type.c9f = at_binding_pattern self, %self.param_patt.74d [symbolic] // CHECK:STDOUT: %HasF.WithSelf.F.type: type = fn_type @HasF.WithSelf.F, @HasF.WithSelf(%Self) [symbolic] // CHECK:STDOUT: %HasF.WithSelf.F: %HasF.WithSelf.F.type = struct_value () [symbolic] // CHECK:STDOUT: %HasF.assoc_type: type = assoc_entity_type @HasF [concrete] @@ -1274,16 +1390,22 @@ fn G(x: A) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %U: type = symbolic_binding U, 1 [symbolic] // CHECK:STDOUT: %HasF.impl_witness: = impl_witness @T.as.HasF.impl.%HasF.impl_witness_table, @T.as.HasF.impl(%T, %U) [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %self.param_patt.b7c: %pattern_type.51d = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.7e4: %pattern_type.51d = at_binding_pattern self, %self.param_patt.b7c [symbolic] // CHECK:STDOUT: %T.as.HasF.impl.F.type: type = fn_type @T.as.HasF.impl.F, @T.as.HasF.impl(%T, %U) [symbolic] // CHECK:STDOUT: %T.as.HasF.impl.F: %T.as.HasF.impl.F.type = struct_value () [symbolic] // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.a96: type = pattern_type %empty_struct_type [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.a96 = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.a96 = at_binding_pattern x, %x.param_patt [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -1304,8 +1426,8 @@ fn G(x: A) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %HasF.decl: type = interface_decl @HasF [concrete = constants.%HasF.type] {} {} // CHECK:STDOUT: impl_decl @T.as.HasF.impl [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [concrete] +// CHECK:STDOUT: %T.patt.loc12_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %U.patt.loc12_25.1: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc12_25.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc12_15.2 [symbolic = %T.loc12_15.1 (constants.%T)] // CHECK:STDOUT: %HasF.ref: type = name_ref HasF, file.%HasF.decl [concrete = constants.%HasF.type] @@ -1321,8 +1443,8 @@ fn G(x: A) { // CHECK:STDOUT: %U.loc12_25.2: type = symbolic_binding U, 1 [symbolic = %U.loc12_25.1 (constants.%U)] // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %x.param_patt: %pattern_type.a96 = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.a96 = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.a96 = value_param_pattern [concrete = constants.%x.param_patt] +// CHECK:STDOUT: %x.patt: %pattern_type.a96 = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %empty_struct_type = value_param call_param0 // CHECK:STDOUT: %.loc16_10.1: type = splice_block %.loc16_10.3 [concrete = constants.%empty_struct_type] { @@ -1339,8 +1461,8 @@ fn G(x: A) { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %HasF.WithSelf.F.decl: @HasF.WithSelf.%HasF.WithSelf.F.type (%HasF.WithSelf.F.type) = fn_decl @HasF.WithSelf.F [symbolic = @HasF.WithSelf.%HasF.WithSelf.F (constants.%HasF.WithSelf.F)] { -// CHECK:STDOUT: %self.param_patt: @HasF.WithSelf.F.%pattern_type (%pattern_type.c9f) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @HasF.WithSelf.F.%pattern_type (%pattern_type.c9f) = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc5_8.1: @HasF.WithSelf.F.%pattern_type (%pattern_type.c9f) = value_param_pattern [symbolic = %self.param_patt.loc5_8.2 (constants.%self.param_patt.74d)] +// CHECK:STDOUT: %self.patt.loc5_8.1: @HasF.WithSelf.F.%pattern_type (%pattern_type.c9f) = at_binding_pattern self, %self.param_patt.loc5_8.1 [symbolic = %self.patt.loc5_8.2 (constants.%self.patt.b33)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @HasF.WithSelf.F.%Self.as_type.loc5_8.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc5_8.1: type = splice_block %.loc5_8.2 [symbolic = %Self.as_type.loc5_8.1 (constants.%Self.as_type)] { @@ -1361,7 +1483,9 @@ fn G(x: A) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @T.as.HasF.impl(%T.loc12_15.2: type, %U.loc12_25.2: type) { +// CHECK:STDOUT: %T.patt.loc12_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_15.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc12_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc12_15.1 (constants.%T)] +// CHECK:STDOUT: %U.patt.loc12_25.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc12_25.2 (constants.%U.patt)] // CHECK:STDOUT: %U.loc12_25.1: type = symbolic_binding U, 1 [symbolic = %U.loc12_25.1 (constants.%U)] // CHECK:STDOUT: %HasF.impl_witness.loc12_44.2: = impl_witness %HasF.impl_witness_table, @T.as.HasF.impl(%T.loc12_15.1, %U.loc12_25.1) [symbolic = %HasF.impl_witness.loc12_44.2 (constants.%HasF.impl_witness)] // CHECK:STDOUT: @@ -1371,8 +1495,8 @@ fn G(x: A) { // CHECK:STDOUT: // CHECK:STDOUT: impl: %T.ref as %HasF.ref { // CHECK:STDOUT: %T.as.HasF.impl.F.decl: @T.as.HasF.impl.%T.as.HasF.impl.F.type (%T.as.HasF.impl.F.type) = fn_decl @T.as.HasF.impl.F [symbolic = @T.as.HasF.impl.%T.as.HasF.impl.F (constants.%T.as.HasF.impl.F)] { -// CHECK:STDOUT: %self.param_patt: @T.as.HasF.impl.F.%pattern_type (%pattern_type.51d) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @T.as.HasF.impl.F.%pattern_type (%pattern_type.51d) = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc13_15.1: @T.as.HasF.impl.F.%pattern_type (%pattern_type.51d) = value_param_pattern [symbolic = %self.param_patt.loc13_15.2 (constants.%self.param_patt.b7c)] +// CHECK:STDOUT: %self.patt.loc13_15.1: @T.as.HasF.impl.F.%pattern_type (%pattern_type.51d) = at_binding_pattern self, %self.param_patt.loc13_15.1 [symbolic = %self.patt.loc13_15.2 (constants.%self.patt.7e4)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @T.as.HasF.impl.F.%T (%T) = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @T.as.HasF.impl.%T.ref [symbolic = %T (constants.%T)] @@ -1392,6 +1516,8 @@ fn G(x: A) { // CHECK:STDOUT: %Self: %HasF.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc5_8.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_8.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc5_8.1 [symbolic = %pattern_type (constants.%pattern_type.c9f)] +// CHECK:STDOUT: %self.param_patt.loc5_8.2: @HasF.WithSelf.F.%pattern_type (%pattern_type.c9f) = value_param_pattern [symbolic = %self.param_patt.loc5_8.2 (constants.%self.param_patt.74d)] +// CHECK:STDOUT: %self.patt.loc5_8.2: @HasF.WithSelf.F.%pattern_type (%pattern_type.c9f) = at_binding_pattern self, %self.param_patt.loc5_8.2 [symbolic = %self.patt.loc5_8.2 (constants.%self.patt.b33)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @HasF.WithSelf.F.%Self.as_type.loc5_8.1 (%Self.as_type)); // CHECK:STDOUT: } @@ -1399,6 +1525,8 @@ fn G(x: A) { // CHECK:STDOUT: generic fn @T.as.HasF.impl.F(@T.as.HasF.impl.%T.loc12_15.2: type, @T.as.HasF.impl.%U.loc12_25.2: type) { // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.51d)] +// CHECK:STDOUT: %self.param_patt.loc13_15.2: @T.as.HasF.impl.F.%pattern_type (%pattern_type.51d) = value_param_pattern [symbolic = %self.param_patt.loc13_15.2 (constants.%self.param_patt.b7c)] +// CHECK:STDOUT: %self.patt.loc13_15.2: @T.as.HasF.impl.F.%pattern_type (%pattern_type.51d) = at_binding_pattern self, %self.param_patt.loc13_15.2 [symbolic = %self.patt.loc13_15.2 (constants.%self.patt.7e4)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic = %require_complete (constants.%require_complete)] @@ -1428,10 +1556,14 @@ fn G(x: A) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc5_8.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.c9f +// CHECK:STDOUT: %self.param_patt.loc5_8.2 => constants.%self.param_patt.74d +// CHECK:STDOUT: %self.patt.loc5_8.2 => constants.%self.patt.b33 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @T.as.HasF.impl(constants.%T, constants.%U) { +// CHECK:STDOUT: %T.patt.loc12_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc12_15.1 => constants.%T +// CHECK:STDOUT: %U.patt.loc12_25.2 => constants.%U.patt // CHECK:STDOUT: %U.loc12_25.1 => constants.%U // CHECK:STDOUT: %HasF.impl_witness.loc12_44.2 => constants.%HasF.impl_witness // CHECK:STDOUT: @@ -1443,6 +1575,8 @@ fn G(x: A) { // CHECK:STDOUT: specific @T.as.HasF.impl.F(constants.%T, constants.%U) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d +// CHECK:STDOUT: %self.param_patt.loc13_15.2 => constants.%self.param_patt.b7c +// CHECK:STDOUT: %self.patt.loc13_15.2 => constants.%self.patt.7e4 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_inconsistent_deduction.carbon @@ -1451,6 +1585,7 @@ fn G(x: A) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %HasF.type.c96: type = generic_interface_type @HasF [concrete] // CHECK:STDOUT: %HasF.generic: %HasF.type.c96 = struct_value () [concrete] @@ -1458,6 +1593,8 @@ fn G(x: A) { // CHECK:STDOUT: %Self.822: %HasF.type.daf = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.822 [symbolic] // CHECK:STDOUT: %pattern_type.a2b: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt.d2c: %pattern_type.a2b = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.763: %pattern_type.a2b = at_binding_pattern self, %self.param_patt.d2c [symbolic] // CHECK:STDOUT: %HasF.WithSelf.F.type.41d: type = fn_type @HasF.WithSelf.F, @HasF.WithSelf(%T, %Self.822) [symbolic] // CHECK:STDOUT: %HasF.WithSelf.F.ff7: %HasF.WithSelf.F.type.41d = struct_value () [symbolic] // CHECK:STDOUT: %HasF.assoc_type.ddf: type = assoc_entity_type @HasF, @HasF(%T) [symbolic] @@ -1465,6 +1602,8 @@ fn G(x: A) { // CHECK:STDOUT: %HasF.impl_witness: = impl_witness @T.as.HasF.impl.%HasF.impl_witness_table, @T.as.HasF.impl(%T) [symbolic] // CHECK:STDOUT: %require_complete.513: = require_complete_type %HasF.type.daf [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %self.param_patt.b7c: %pattern_type.51d = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.7e4: %pattern_type.51d = at_binding_pattern self, %self.param_patt.b7c [symbolic] // CHECK:STDOUT: %T.as.HasF.impl.F.type: type = fn_type @T.as.HasF.impl.F, @T.as.HasF.impl(%T) [symbolic] // CHECK:STDOUT: %T.as.HasF.impl.F: %T.as.HasF.impl.F.type = struct_value () [symbolic] // CHECK:STDOUT: %HasF.facet: %HasF.type.daf = facet_value %T, (%HasF.impl_witness) [symbolic] @@ -1476,6 +1615,8 @@ fn G(x: A) { // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %B: type = class_type @B [concrete] // CHECK:STDOUT: %pattern_type.9ef: type = pattern_type %A [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.9ef = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.9ef = at_binding_pattern x, %x.param_patt [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %HasF.type.5a7: type = facet_type <@HasF, @HasF(%B)> [concrete] @@ -1503,7 +1644,7 @@ fn G(x: A) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %HasF.decl: %HasF.type.c96 = interface_decl @HasF [concrete = constants.%HasF.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc4_17.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_17.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_20.1: type = splice_block %.loc4_20.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1512,7 +1653,7 @@ fn G(x: A) { // CHECK:STDOUT: %T.loc4_17.2: type = symbolic_binding T, 0 [symbolic = %T.loc4_17.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @T.as.HasF.impl [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc8_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc8_24: type = name_ref T, %T.loc8_15.2 [symbolic = %T.loc8_15.1 (constants.%T)] // CHECK:STDOUT: %HasF.ref: %HasF.type.c96 = name_ref HasF, file.%HasF.decl [concrete = constants.%HasF.generic] @@ -1527,8 +1668,8 @@ fn G(x: A) { // CHECK:STDOUT: %A.decl: type = class_decl @A [concrete = constants.%A] {} {} // CHECK:STDOUT: %B.decl: type = class_decl @B [concrete = constants.%B] {} {} // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %x.param_patt: %pattern_type.9ef = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.9ef = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.9ef = value_param_pattern [concrete = constants.%x.param_patt] +// CHECK:STDOUT: %x.patt: %pattern_type.9ef = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %A = value_param call_param0 // CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A] @@ -1537,6 +1678,7 @@ fn G(x: A) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @HasF(%T.loc4_17.2: type) { +// CHECK:STDOUT: %T.patt.loc4_17.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_17.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_17.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_17.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1549,8 +1691,8 @@ fn G(x: A) { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %HasF.WithSelf.F.decl: @HasF.WithSelf.%HasF.WithSelf.F.type (%HasF.WithSelf.F.type.41d) = fn_decl @HasF.WithSelf.F [symbolic = @HasF.WithSelf.%HasF.WithSelf.F (constants.%HasF.WithSelf.F.ff7)] { -// CHECK:STDOUT: %self.param_patt: @HasF.WithSelf.F.%pattern_type (%pattern_type.a2b) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @HasF.WithSelf.F.%pattern_type (%pattern_type.a2b) = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc5_8.1: @HasF.WithSelf.F.%pattern_type (%pattern_type.a2b) = value_param_pattern [symbolic = %self.param_patt.loc5_8.2 (constants.%self.param_patt.d2c)] +// CHECK:STDOUT: %self.patt.loc5_8.1: @HasF.WithSelf.F.%pattern_type (%pattern_type.a2b) = at_binding_pattern self, %self.param_patt.loc5_8.1 [symbolic = %self.patt.loc5_8.2 (constants.%self.patt.763)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @HasF.WithSelf.F.%Self.as_type.loc5_8.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc5_8.1: type = splice_block %.loc5_8.3 [symbolic = %Self.as_type.loc5_8.1 (constants.%Self.as_type)] { @@ -1573,6 +1715,7 @@ fn G(x: A) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @T.as.HasF.impl(%T.loc8_15.2: type) { +// CHECK:STDOUT: %T.patt.loc8_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc8_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc8_15.1 (constants.%T)] // CHECK:STDOUT: %HasF.type.loc8_35.1: type = facet_type <@HasF, @HasF(%T.loc8_15.1)> [symbolic = %HasF.type.loc8_35.1 (constants.%HasF.type.daf)] // CHECK:STDOUT: %HasF.impl_witness.loc8_37.2: = impl_witness %HasF.impl_witness_table, @T.as.HasF.impl(%T.loc8_15.1) [symbolic = %HasF.impl_witness.loc8_37.2 (constants.%HasF.impl_witness)] @@ -1584,8 +1727,8 @@ fn G(x: A) { // CHECK:STDOUT: // CHECK:STDOUT: impl: %T.ref.loc8_24 as %HasF.type.loc8_35.2 { // CHECK:STDOUT: %T.as.HasF.impl.F.decl: @T.as.HasF.impl.%T.as.HasF.impl.F.type (%T.as.HasF.impl.F.type) = fn_decl @T.as.HasF.impl.F [symbolic = @T.as.HasF.impl.%T.as.HasF.impl.F (constants.%T.as.HasF.impl.F)] { -// CHECK:STDOUT: %self.param_patt: @T.as.HasF.impl.F.%pattern_type (%pattern_type.51d) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @T.as.HasF.impl.F.%pattern_type (%pattern_type.51d) = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc9_15.1: @T.as.HasF.impl.F.%pattern_type (%pattern_type.51d) = value_param_pattern [symbolic = %self.param_patt.loc9_15.2 (constants.%self.param_patt.b7c)] +// CHECK:STDOUT: %self.patt.loc9_15.1: @T.as.HasF.impl.F.%pattern_type (%pattern_type.51d) = at_binding_pattern self, %self.param_patt.loc9_15.1 [symbolic = %self.patt.loc9_15.2 (constants.%self.patt.7e4)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @T.as.HasF.impl.F.%T (%T) = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @T.as.HasF.impl.%T.ref.loc8_24 [symbolic = %T (constants.%T)] @@ -1623,6 +1766,8 @@ fn G(x: A) { // CHECK:STDOUT: %Self: @HasF.WithSelf.F.%HasF.type (%HasF.type.daf) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self.822)] // CHECK:STDOUT: %Self.as_type.loc5_8.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_8.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc5_8.1 [symbolic = %pattern_type (constants.%pattern_type.a2b)] +// CHECK:STDOUT: %self.param_patt.loc5_8.2: @HasF.WithSelf.F.%pattern_type (%pattern_type.a2b) = value_param_pattern [symbolic = %self.param_patt.loc5_8.2 (constants.%self.param_patt.d2c)] +// CHECK:STDOUT: %self.patt.loc5_8.2: @HasF.WithSelf.F.%pattern_type (%pattern_type.a2b) = at_binding_pattern self, %self.param_patt.loc5_8.2 [symbolic = %self.patt.loc5_8.2 (constants.%self.patt.763)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @HasF.WithSelf.F.%Self.as_type.loc5_8.1 (%Self.as_type)); // CHECK:STDOUT: } @@ -1630,6 +1775,8 @@ fn G(x: A) { // CHECK:STDOUT: generic fn @T.as.HasF.impl.F(@T.as.HasF.impl.%T.loc8_15.2: type) { // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.51d)] +// CHECK:STDOUT: %self.param_patt.loc9_15.2: @T.as.HasF.impl.F.%pattern_type (%pattern_type.51d) = value_param_pattern [symbolic = %self.param_patt.loc9_15.2 (constants.%self.param_patt.b7c)] +// CHECK:STDOUT: %self.patt.loc9_15.2: @T.as.HasF.impl.F.%pattern_type (%pattern_type.51d) = at_binding_pattern self, %self.param_patt.loc9_15.2 [symbolic = %self.patt.loc9_15.2 (constants.%self.patt.7e4)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic = %require_complete (constants.%require_complete.944)] @@ -1652,6 +1799,7 @@ fn G(x: A) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HasF(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_17.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_17.1 => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1676,9 +1824,12 @@ fn G(x: A) { // CHECK:STDOUT: %Self => constants.%Self.822 // CHECK:STDOUT: %Self.as_type.loc5_8.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.a2b +// CHECK:STDOUT: %self.param_patt.loc5_8.2 => constants.%self.param_patt.d2c +// CHECK:STDOUT: %self.patt.loc5_8.2 => constants.%self.patt.763 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @T.as.HasF.impl(constants.%T) { +// CHECK:STDOUT: %T.patt.loc8_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_15.1 => constants.%T // CHECK:STDOUT: %HasF.type.loc8_35.1 => constants.%HasF.type.daf // CHECK:STDOUT: %HasF.impl_witness.loc8_37.2 => constants.%HasF.impl_witness @@ -1692,6 +1843,8 @@ fn G(x: A) { // CHECK:STDOUT: specific @T.as.HasF.impl.F(constants.%T) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d +// CHECK:STDOUT: %self.param_patt.loc9_15.2 => constants.%self.param_patt.b7c +// CHECK:STDOUT: %self.patt.loc9_15.2 => constants.%self.patt.7e4 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HasF.WithSelf(constants.%T, constants.%HasF.facet) { @@ -1711,9 +1864,12 @@ fn G(x: A) { // CHECK:STDOUT: %Self => constants.%HasF.facet // CHECK:STDOUT: %Self.as_type.loc5_8.1 => constants.%T // CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d +// CHECK:STDOUT: %self.param_patt.loc5_8.2 => constants.%self.param_patt.b7c +// CHECK:STDOUT: %self.patt.loc5_8.2 => constants.%self.patt.7e4 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HasF(constants.%B) { +// CHECK:STDOUT: %T.patt.loc4_17.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_17.1 => constants.%B // CHECK:STDOUT: // CHECK:STDOUT: !definition: diff --git a/toolchain/check/testdata/impl/lookup/impl_forall.carbon b/toolchain/check/testdata/impl/lookup/impl_forall.carbon index ef8bbf7138d6..4b9c0de0805c 100644 --- a/toolchain/check/testdata/impl/lookup/impl_forall.carbon +++ b/toolchain/check/testdata/impl/lookup/impl_forall.carbon @@ -56,15 +56,20 @@ fn TestSpecific(a: A({})*) -> {}* { // CHECK:STDOUT: %I.generic: %I.type.335 = struct_value () [concrete] // CHECK:STDOUT: %I.type.3fe556.1: type = facet_type <@I, @I(%U.67d)> [symbolic] // CHECK:STDOUT: %Self.1916c4.1: %I.type.3fe556.1 = symbolic_binding Self, 1 [symbolic] +// CHECK:STDOUT: %V.patt.d47: %pattern_type.98f = symbolic_binding_pattern V, 0 [symbolic] // CHECK:STDOUT: %V.67d: type = symbolic_binding V, 0 [symbolic] // CHECK:STDOUT: %A.47a1de.2: type = class_type @A, @A(%V.67d) [symbolic] // CHECK:STDOUT: %I.type.3fe556.2: type = facet_type <@I, @I(%V.67d)> [symbolic] // CHECK:STDOUT: %I.impl_witness.25d8bb.1: = impl_witness @A.as.I.impl.%I.impl_witness_table, @A.as.I.impl(%V.67d) [symbolic] // CHECK:STDOUT: %require_complete.45eab2.1: = require_complete_type %I.type.3fe556.2 [symbolic] // CHECK:STDOUT: %pattern_type.44a178.1: type = pattern_type %A.47a1de.2 [symbolic] +// CHECK:STDOUT: %self.param_patt.a903c4.1: %pattern_type.44a178.1 = ref_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.4f0789.1: %pattern_type.44a178.1 = at_binding_pattern self, %self.param_patt.a903c4.1 [symbolic] // CHECK:STDOUT: %ptr.e8f8f9.2: type = ptr_type %V.67d [symbolic] // CHECK:STDOUT: %.cb6cb9.2: Core.Form = init_form %ptr.e8f8f9.2 [symbolic] // CHECK:STDOUT: %pattern_type.4f4b84.2: type = pattern_type %ptr.e8f8f9.2 [symbolic] +// CHECK:STDOUT: %return.param_patt.27f587.2: %pattern_type.4f4b84.2 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.d67681.2: %pattern_type.4f4b84.2 = return_slot_pattern %return.param_patt.27f587.2, %ptr.e8f8f9.2 [symbolic] // CHECK:STDOUT: %A.as.I.impl.F.type.d1ec9e.1: type = fn_type @A.as.I.impl.F, @A.as.I.impl(%V.67d) [symbolic] // CHECK:STDOUT: %A.as.I.impl.F.d83bf5.1: %A.as.I.impl.F.type.d1ec9e.1 = struct_value () [symbolic] // CHECK:STDOUT: %A.elem.d41ac1.2: type = unbound_element_type %A.47a1de.2, %V.67d [symbolic] @@ -80,13 +85,18 @@ fn TestSpecific(a: A({})*) -> {}* { // CHECK:STDOUT: %.be5: type = fn_type_with_self_type %Copy.WithSelf.Op.type.884, %Copy.facet.302 [symbolic] // CHECK:STDOUT: %impl.elem0.484: %.be5 = impl_witness_access %Copy.lookup_impl_witness.1da, element0 [symbolic] // CHECK:STDOUT: %specific_impl_fn.a76: = specific_impl_function %impl.elem0.484, @Copy.WithSelf.Op(%Copy.facet.302) [symbolic] +// CHECK:STDOUT: %W.patt: %pattern_type.98f = symbolic_binding_pattern W, 0 [symbolic] // CHECK:STDOUT: %W: type = symbolic_binding W, 0 [symbolic] // CHECK:STDOUT: %A.47a1de.3: type = class_type @A, @A(%W) [symbolic] // CHECK:STDOUT: %ptr.5ab: type = ptr_type %A.47a1de.3 [symbolic] // CHECK:STDOUT: %pattern_type.c61: type = pattern_type %ptr.5ab [symbolic] +// CHECK:STDOUT: %a.param_patt.537: %pattern_type.c61 = value_param_pattern [symbolic] +// CHECK:STDOUT: %a.patt.60b: %pattern_type.c61 = at_binding_pattern a, %a.param_patt.537 [symbolic] // CHECK:STDOUT: %ptr.e8f8f9.4: type = ptr_type %W [symbolic] // CHECK:STDOUT: %.cb6cb9.4: Core.Form = init_form %ptr.e8f8f9.4 [symbolic] // CHECK:STDOUT: %pattern_type.4f4b84.4: type = pattern_type %ptr.e8f8f9.4 [symbolic] +// CHECK:STDOUT: %return.param_patt.27f587.4: %pattern_type.4f4b84.4 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.d67681.3: %pattern_type.4f4b84.4 = return_slot_pattern %return.param_patt.27f587.4, %ptr.e8f8f9.4 [symbolic] // CHECK:STDOUT: %I.type.3fe556.3: type = facet_type <@I, @I(%W)> [symbolic] // CHECK:STDOUT: %I.assoc_type.b71f2b.3: type = assoc_entity_type @I, @I(%W) [symbolic] // CHECK:STDOUT: %assoc0.13b5f8.3: %I.assoc_type.b71f2b.3 = assoc_entity element0, @I.WithSelf.%I.WithSelf.F.decl [symbolic] @@ -108,6 +118,8 @@ fn TestSpecific(a: A({})*) -> {}* { // CHECK:STDOUT: %ptr.c28: type = ptr_type %empty_struct_type [concrete] // CHECK:STDOUT: %.9ba: Core.Form = init_form %ptr.c28 [concrete] // CHECK:STDOUT: %pattern_type.1cc: type = pattern_type %ptr.c28 [concrete] +// CHECK:STDOUT: %return.param_patt.07a: %pattern_type.1cc = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.da5: %pattern_type.1cc = return_slot_pattern %return.param_patt.07a, %ptr.c28 [concrete] // CHECK:STDOUT: %I.type.81d: type = facet_type <@I, @I(%empty_struct_type)> [concrete] // CHECK:STDOUT: %I.assoc_type.cd3: type = assoc_entity_type @I, @I(%empty_struct_type) [concrete] // CHECK:STDOUT: %assoc0.a4c: %I.assoc_type.cd3 = assoc_entity element0, @I.WithSelf.%I.WithSelf.F.decl [concrete] @@ -119,6 +131,8 @@ fn TestSpecific(a: A({})*) -> {}* { // CHECK:STDOUT: %I.WithSelf.F.type.071: type = fn_type @I.WithSelf.F, @I.WithSelf(%empty_struct_type, %I.facet.3f4) [concrete] // CHECK:STDOUT: %.6b2: type = fn_type_with_self_type %I.WithSelf.F.type.071, %I.facet.3f4 [concrete] // CHECK:STDOUT: %pattern_type.1ff: type = pattern_type %A.940 [concrete] +// CHECK:STDOUT: %self.param_patt.0f0: %pattern_type.1ff = ref_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.975: %pattern_type.1ff = at_binding_pattern self, %self.param_patt.0f0 [concrete] // CHECK:STDOUT: %A.as.I.impl.F.specific_fn: = specific_function %A.as.I.impl.F.837, @A.as.I.impl.F(%empty_struct_type) [concrete] // CHECK:STDOUT: %A.elem.339: type = unbound_element_type %A.940, %empty_struct_type [concrete] // CHECK:STDOUT: %struct_type.n.91c: type = struct_type {.n: %empty_struct_type} [concrete] @@ -141,7 +155,7 @@ fn TestSpecific(a: A({})*) -> {}* { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: impl_decl @A.as.I.impl [concrete] { -// CHECK:STDOUT: %V.patt: %pattern_type.98f = symbolic_binding_pattern V, 0 [concrete] +// CHECK:STDOUT: %V.patt.loc12_15.1: %pattern_type.98f = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc12_15.2 (constants.%V.patt.d47)] // CHECK:STDOUT: } { // CHECK:STDOUT: %A.ref: %A.type = name_ref A, file.%A.decl [concrete = constants.%A.generic] // CHECK:STDOUT: %V.ref.loc12_26: type = name_ref V, %V.loc12_15.2 [symbolic = %V.loc12_15.1 (constants.%V.67d)] @@ -158,6 +172,7 @@ fn TestSpecific(a: A({})*) -> {}* { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @A.as.I.impl(%V.loc12_15.2: type) { +// CHECK:STDOUT: %V.patt.loc12_15.2: %pattern_type.98f = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc12_15.2 (constants.%V.patt.d47)] // CHECK:STDOUT: %V.loc12_15.1: type = symbolic_binding V, 0 [symbolic = %V.loc12_15.1 (constants.%V.67d)] // CHECK:STDOUT: %A.loc12_27.1: type = class_type @A, @A(%V.loc12_15.1) [symbolic = %A.loc12_27.1 (constants.%A.47a1de.2)] // CHECK:STDOUT: %I.type.loc12_35.1: type = facet_type <@I, @I(%V.loc12_15.1)> [symbolic = %I.type.loc12_35.1 (constants.%I.type.3fe556.2)] @@ -170,10 +185,10 @@ fn TestSpecific(a: A({})*) -> {}* { // CHECK:STDOUT: // CHECK:STDOUT: impl: %A.loc12_27.2 as %I.type.loc12_35.2 { // CHECK:STDOUT: %A.as.I.impl.F.decl: @A.as.I.impl.%A.as.I.impl.F.type (%A.as.I.impl.F.type.d1ec9e.1) = fn_decl @A.as.I.impl.F [symbolic = @A.as.I.impl.%A.as.I.impl.F (constants.%A.as.I.impl.F.d83bf5.1)] { -// CHECK:STDOUT: %self.param_patt: @A.as.I.impl.F.%pattern_type.loc13_12 (%pattern_type.44a178.1) = ref_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @A.as.I.impl.F.%pattern_type.loc13_12 (%pattern_type.44a178.1) = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @A.as.I.impl.F.%pattern_type.loc13_22 (%pattern_type.4f4b84.2) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @A.as.I.impl.F.%pattern_type.loc13_22 (%pattern_type.4f4b84.2) = return_slot_pattern %return.param_patt, %ptr.loc13_22.2 [concrete] +// CHECK:STDOUT: %self.param_patt.loc13_12.1: @A.as.I.impl.F.%pattern_type.loc13_12 (%pattern_type.44a178.1) = ref_param_pattern [symbolic = %self.param_patt.loc13_12.2 (constants.%self.param_patt.a903c4.1)] +// CHECK:STDOUT: %self.patt.loc13_12.1: @A.as.I.impl.F.%pattern_type.loc13_12 (%pattern_type.44a178.1) = at_binding_pattern self, %self.param_patt.loc13_12.1 [symbolic = %self.patt.loc13_12.2 (constants.%self.patt.4f0789.1)] +// CHECK:STDOUT: %return.param_patt.loc13_22.1: @A.as.I.impl.F.%pattern_type.loc13_22 (%pattern_type.4f4b84.2) = out_param_pattern [symbolic = %return.param_patt.loc13_22.2 (constants.%return.param_patt.27f587.2)] +// CHECK:STDOUT: %return.patt.loc13_18.1: @A.as.I.impl.F.%pattern_type.loc13_22 (%pattern_type.4f4b84.2) = return_slot_pattern %return.param_patt.loc13_22.1, %ptr.loc13_22.2 [symbolic = %return.patt.loc13_18.2 (constants.%return.patt.d67681.2)] // CHECK:STDOUT: } { // CHECK:STDOUT: %V.ref: type = name_ref V, @A.as.I.impl.%V.loc12_15.2 [symbolic = %V (constants.%V.67d)] // CHECK:STDOUT: %ptr.loc13_22.2: type = ptr_type %V.ref [symbolic = %ptr.loc13_22.1 (constants.%ptr.e8f8f9.2)] @@ -199,21 +214,25 @@ fn TestSpecific(a: A({})*) -> {}* { // CHECK:STDOUT: %V: type = symbolic_binding V, 0 [symbolic = %V (constants.%V.67d)] // CHECK:STDOUT: %A: type = class_type @A, @A(%V) [symbolic = %A (constants.%A.47a1de.2)] // CHECK:STDOUT: %pattern_type.loc13_12: type = pattern_type %A [symbolic = %pattern_type.loc13_12 (constants.%pattern_type.44a178.1)] +// CHECK:STDOUT: %self.param_patt.loc13_12.2: @A.as.I.impl.F.%pattern_type.loc13_12 (%pattern_type.44a178.1) = ref_param_pattern [symbolic = %self.param_patt.loc13_12.2 (constants.%self.param_patt.a903c4.1)] +// CHECK:STDOUT: %self.patt.loc13_12.2: @A.as.I.impl.F.%pattern_type.loc13_12 (%pattern_type.44a178.1) = at_binding_pattern self, %self.param_patt.loc13_12.2 [symbolic = %self.patt.loc13_12.2 (constants.%self.patt.4f0789.1)] // CHECK:STDOUT: %ptr.loc13_22.1: type = ptr_type %V [symbolic = %ptr.loc13_22.1 (constants.%ptr.e8f8f9.2)] // CHECK:STDOUT: %.loc13_22.1: Core.Form = init_form %ptr.loc13_22.1 [symbolic = %.loc13_22.1 (constants.%.cb6cb9.2)] // CHECK:STDOUT: %pattern_type.loc13_22: type = pattern_type %ptr.loc13_22.1 [symbolic = %pattern_type.loc13_22 (constants.%pattern_type.4f4b84.2)] +// CHECK:STDOUT: %return.param_patt.loc13_22.2: @A.as.I.impl.F.%pattern_type.loc13_22 (%pattern_type.4f4b84.2) = out_param_pattern [symbolic = %return.param_patt.loc13_22.2 (constants.%return.param_patt.27f587.2)] +// CHECK:STDOUT: %return.patt.loc13_18.2: @A.as.I.impl.F.%pattern_type.loc13_22 (%pattern_type.4f4b84.2) = return_slot_pattern %return.param_patt.loc13_22.2, %ptr.loc13_22.1 [symbolic = %return.patt.loc13_18.2 (constants.%return.patt.d67681.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc13_12: = require_complete_type %A [symbolic = %require_complete.loc13_12 (constants.%require_complete.c7a)] // CHECK:STDOUT: %require_complete.loc13_18: = require_complete_type %ptr.loc13_22.1 [symbolic = %require_complete.loc13_18 (constants.%require_complete.ef162c.1)] // CHECK:STDOUT: %A.elem: type = unbound_element_type %A, %V [symbolic = %A.elem (constants.%A.elem.d41ac1.2)] -// CHECK:STDOUT: %.loc14_12.2: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%V) [symbolic = %.loc14_12.2 (constants.%.0e9)] +// CHECK:STDOUT: %.loc14_12.3: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%V) [symbolic = %.loc14_12.3 (constants.%.0e9)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %ptr.loc13_22.1, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.1da)] -// CHECK:STDOUT: %Copy.facet.loc14_12.2: %Copy.type = facet_value %ptr.loc13_22.1, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc14_12.2 (constants.%Copy.facet.302)] -// CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.loc14_12.2) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.884)] -// CHECK:STDOUT: %.loc14_12.3: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %Copy.facet.loc14_12.2 [symbolic = %.loc14_12.3 (constants.%.be5)] -// CHECK:STDOUT: %impl.elem0.loc14_12.2: @A.as.I.impl.F.%.loc14_12.3 (%.be5) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc14_12.2 (constants.%impl.elem0.484)] -// CHECK:STDOUT: %specific_impl_fn.loc14_12.2: = specific_impl_function %impl.elem0.loc14_12.2, @Copy.WithSelf.Op(%Copy.facet.loc14_12.2) [symbolic = %specific_impl_fn.loc14_12.2 (constants.%specific_impl_fn.a76)] +// CHECK:STDOUT: %Copy.facet.loc14_12.3: %Copy.type = facet_value %ptr.loc13_22.1, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc14_12.3 (constants.%Copy.facet.302)] +// CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.loc14_12.3) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.884)] +// CHECK:STDOUT: %.loc14_12.4: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %Copy.facet.loc14_12.3 [symbolic = %.loc14_12.4 (constants.%.be5)] +// CHECK:STDOUT: %impl.elem0.loc14_12.2: @A.as.I.impl.F.%.loc14_12.4 (%.be5) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc14_12.2 (constants.%impl.elem0.484)] +// CHECK:STDOUT: %specific_impl_fn.loc14_12.2: = specific_impl_function %impl.elem0.loc14_12.2, @Copy.WithSelf.Op(%Copy.facet.loc14_12.3) [symbolic = %specific_impl_fn.loc14_12.2 (constants.%specific_impl_fn.a76)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: ref @A.as.I.impl.F.%A (%A.47a1de.2)) -> out %return.param: @A.as.I.impl.F.%ptr.loc13_22.1 (%ptr.e8f8f9.2) { // CHECK:STDOUT: !entry: @@ -221,10 +240,12 @@ fn TestSpecific(a: A({})*) -> {}* { // CHECK:STDOUT: %n.ref: @A.as.I.impl.F.%A.elem (%A.elem.d41ac1.2) = name_ref n, @A.%.loc4 [concrete = @A.%.loc4] // CHECK:STDOUT: %.loc14_17: ref @A.as.I.impl.F.%V (%V.67d) = class_element_access %self.ref, element0 // CHECK:STDOUT: %addr: @A.as.I.impl.F.%ptr.loc13_22.1 (%ptr.e8f8f9.2) = addr_of %.loc14_17 -// CHECK:STDOUT: %impl.elem0.loc14_12.1: @A.as.I.impl.F.%.loc14_12.3 (%.be5) = impl_witness_access constants.%Copy.lookup_impl_witness.1da, element0 [symbolic = %impl.elem0.loc14_12.2 (constants.%impl.elem0.484)] +// CHECK:STDOUT: %impl.elem0.loc14_12.1: @A.as.I.impl.F.%.loc14_12.4 (%.be5) = impl_witness_access constants.%Copy.lookup_impl_witness.1da, element0 [symbolic = %impl.elem0.loc14_12.2 (constants.%impl.elem0.484)] // CHECK:STDOUT: %bound_method.loc14_12.1: = bound_method %addr, %impl.elem0.loc14_12.1 -// CHECK:STDOUT: %Copy.facet.loc14_12.1: %Copy.type = facet_value constants.%ptr.e8f8f9.2, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc14_12.2 (constants.%Copy.facet.302)] -// CHECK:STDOUT: %.loc14_12.1: %Copy.type = converted constants.%ptr.e8f8f9.2, %Copy.facet.loc14_12.1 [symbolic = %Copy.facet.loc14_12.2 (constants.%Copy.facet.302)] +// CHECK:STDOUT: %Copy.facet.loc14_12.1: %Copy.type = facet_value constants.%ptr.e8f8f9.2, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc14_12.3 (constants.%Copy.facet.302)] +// CHECK:STDOUT: %.loc14_12.1: %Copy.type = converted constants.%ptr.e8f8f9.2, %Copy.facet.loc14_12.1 [symbolic = %Copy.facet.loc14_12.3 (constants.%Copy.facet.302)] +// CHECK:STDOUT: %Copy.facet.loc14_12.2: %Copy.type = facet_value constants.%ptr.e8f8f9.2, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc14_12.3 (constants.%Copy.facet.302)] +// CHECK:STDOUT: %.loc14_12.2: %Copy.type = converted constants.%ptr.e8f8f9.2, %Copy.facet.loc14_12.2 [symbolic = %Copy.facet.loc14_12.3 (constants.%Copy.facet.302)] // CHECK:STDOUT: %specific_impl_fn.loc14_12.1: = specific_impl_function %impl.elem0.loc14_12.1, @Copy.WithSelf.Op(constants.%Copy.facet.302) [symbolic = %specific_impl_fn.loc14_12.2 (constants.%specific_impl_fn.a76)] // CHECK:STDOUT: %bound_method.loc14_12.2: = bound_method %addr, %specific_impl_fn.loc14_12.1 // CHECK:STDOUT: %Copy.WithSelf.Op.call: init @A.as.I.impl.F.%ptr.loc13_22.1 (%ptr.e8f8f9.2) = call %bound_method.loc14_12.2(%addr) @@ -286,6 +307,7 @@ fn TestSpecific(a: A({})*) -> {}* { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A.as.I.impl(constants.%V.67d) { +// CHECK:STDOUT: %V.patt.loc12_15.2 => constants.%V.patt.d47 // CHECK:STDOUT: %V.loc12_15.1 => constants.%V.67d // CHECK:STDOUT: %A.loc12_27.1 => constants.%A.47a1de.2 // CHECK:STDOUT: %I.type.loc12_35.1 => constants.%I.type.3fe556.2 @@ -301,22 +323,32 @@ fn TestSpecific(a: A({})*) -> {}* { // CHECK:STDOUT: %V => constants.%V.67d // CHECK:STDOUT: %A => constants.%A.47a1de.2 // CHECK:STDOUT: %pattern_type.loc13_12 => constants.%pattern_type.44a178.1 +// CHECK:STDOUT: %self.param_patt.loc13_12.2 => constants.%self.param_patt.a903c4.1 +// CHECK:STDOUT: %self.patt.loc13_12.2 => constants.%self.patt.4f0789.1 // CHECK:STDOUT: %ptr.loc13_22.1 => constants.%ptr.e8f8f9.2 // CHECK:STDOUT: %.loc13_22.1 => constants.%.cb6cb9.2 // CHECK:STDOUT: %pattern_type.loc13_22 => constants.%pattern_type.4f4b84.2 +// CHECK:STDOUT: %return.param_patt.loc13_22.2 => constants.%return.param_patt.27f587.2 +// CHECK:STDOUT: %return.patt.loc13_18.2 => constants.%return.patt.d67681.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TestGeneric(constants.%W) { +// CHECK:STDOUT: %W.patt.loc19_17.2 => constants.%W.patt // CHECK:STDOUT: %W.loc19_17.1 => constants.%W // CHECK:STDOUT: %A.loc19_32.1 => constants.%A.47a1de.3 // CHECK:STDOUT: %ptr.loc19_33.1 => constants.%ptr.5ab // CHECK:STDOUT: %pattern_type.loc19_27 => constants.%pattern_type.c61 +// CHECK:STDOUT: %a.param_patt.loc19_27.2 => constants.%a.param_patt.537 +// CHECK:STDOUT: %a.patt.loc19_27.2 => constants.%a.patt.60b // CHECK:STDOUT: %ptr.loc19_40.1 => constants.%ptr.e8f8f9.4 // CHECK:STDOUT: %.loc19_40.1 => constants.%.cb6cb9.4 // CHECK:STDOUT: %pattern_type.loc19_40 => constants.%pattern_type.4f4b84.4 +// CHECK:STDOUT: %return.param_patt.loc19_40.2 => constants.%return.param_patt.27f587.4 +// CHECK:STDOUT: %return.patt.loc19_36.2 => constants.%return.patt.d67681.3 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A.as.I.impl(constants.%W) { +// CHECK:STDOUT: %V.patt.loc12_15.2 => constants.%V.patt.d47 // CHECK:STDOUT: %V.loc12_15.1 => constants.%W // CHECK:STDOUT: %A.loc12_27.1 => constants.%A.47a1de.3 // CHECK:STDOUT: %I.type.loc12_35.1 => constants.%I.type.3fe556.3 @@ -329,6 +361,7 @@ fn TestSpecific(a: A({})*) -> {}* { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A.as.I.impl(constants.%empty_struct_type) { +// CHECK:STDOUT: %V.patt.loc12_15.2 => constants.%V.patt.d47 // CHECK:STDOUT: %V.loc12_15.1 => constants.%empty_struct_type // CHECK:STDOUT: %A.loc12_27.1 => constants.%A.940 // CHECK:STDOUT: %I.type.loc12_35.1 => constants.%I.type.81d @@ -344,19 +377,23 @@ fn TestSpecific(a: A({})*) -> {}* { // CHECK:STDOUT: %V => constants.%empty_struct_type // CHECK:STDOUT: %A => constants.%A.940 // CHECK:STDOUT: %pattern_type.loc13_12 => constants.%pattern_type.1ff +// CHECK:STDOUT: %self.param_patt.loc13_12.2 => constants.%self.param_patt.0f0 +// CHECK:STDOUT: %self.patt.loc13_12.2 => constants.%self.patt.975 // CHECK:STDOUT: %ptr.loc13_22.1 => constants.%ptr.c28 // CHECK:STDOUT: %.loc13_22.1 => constants.%.9ba // CHECK:STDOUT: %pattern_type.loc13_22 => constants.%pattern_type.1cc +// CHECK:STDOUT: %return.param_patt.loc13_22.2 => constants.%return.param_patt.07a +// CHECK:STDOUT: %return.patt.loc13_18.2 => constants.%return.patt.da5 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc13_12 => constants.%complete_type.0a6 // CHECK:STDOUT: %require_complete.loc13_18 => constants.%complete_type.38e // CHECK:STDOUT: %A.elem => constants.%A.elem.339 -// CHECK:STDOUT: %.loc14_12.2 => constants.%.a81 +// CHECK:STDOUT: %.loc14_12.3 => constants.%.a81 // CHECK:STDOUT: %Copy.lookup_impl_witness => constants.%Copy.impl_witness.1c2 -// CHECK:STDOUT: %Copy.facet.loc14_12.2 => constants.%Copy.facet.80f +// CHECK:STDOUT: %Copy.facet.loc14_12.3 => constants.%Copy.facet.80f // CHECK:STDOUT: %Copy.WithSelf.Op.type => constants.%Copy.WithSelf.Op.type.8a4 -// CHECK:STDOUT: %.loc14_12.3 => constants.%.523 +// CHECK:STDOUT: %.loc14_12.4 => constants.%.523 // CHECK:STDOUT: %impl.elem0.loc14_12.2 => constants.%ptr.as.Copy.impl.Op.9ed // CHECK:STDOUT: %specific_impl_fn.loc14_12.2 => constants.%ptr.as.Copy.impl.Op.specific_fn // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/impl/lookup/import.carbon b/toolchain/check/testdata/impl/lookup/import.carbon index c76921dc7f9a..538044894316 100644 --- a/toolchain/check/testdata/impl/lookup/import.carbon +++ b/toolchain/check/testdata/impl/lookup/import.carbon @@ -231,6 +231,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self: %HasF.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] // CHECK:STDOUT: %pattern_type.f71: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt.18e: %pattern_type.f71 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.5a5: %pattern_type.f71 = at_binding_pattern self, %self.param_patt.18e [symbolic] // CHECK:STDOUT: %HasF.WithSelf.F.type.dce: type = fn_type @HasF.WithSelf.F, @HasF.WithSelf(%Self) [symbolic] // CHECK:STDOUT: %HasF.WithSelf.F.faf: %HasF.WithSelf.F.type.dce = struct_value () [symbolic] // CHECK:STDOUT: %HasF.assoc_type: type = assoc_entity_type @HasF [concrete] @@ -240,6 +242,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %HasF.impl_witness: = impl_witness @C.as.HasF.impl.%HasF.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.866: type = pattern_type %C [concrete] +// CHECK:STDOUT: %self.param_patt.f0b: %pattern_type.866 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.c87: %pattern_type.866 = at_binding_pattern self, %self.param_patt.f0b [concrete] // CHECK:STDOUT: %C.as.HasF.impl.F.type: type = fn_type @C.as.HasF.impl.F [concrete] // CHECK:STDOUT: %C.as.HasF.impl.F: %C.as.HasF.impl.F.type = struct_value () [concrete] // CHECK:STDOUT: %HasF.facet: %HasF.type = facet_value %C, (%HasF.impl_witness) [concrete] @@ -275,8 +279,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %HasF.WithSelf.F.decl: @HasF.WithSelf.%HasF.WithSelf.F.type (%HasF.WithSelf.F.type.dce) = fn_decl @HasF.WithSelf.F [symbolic = @HasF.WithSelf.%HasF.WithSelf.F (constants.%HasF.WithSelf.F.faf)] { -// CHECK:STDOUT: %self.param_patt: @HasF.WithSelf.F.%pattern_type (%pattern_type.f71) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @HasF.WithSelf.F.%pattern_type (%pattern_type.f71) = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc5_8.1: @HasF.WithSelf.F.%pattern_type (%pattern_type.f71) = value_param_pattern [symbolic = %self.param_patt.loc5_8.2 (constants.%self.param_patt.18e)] +// CHECK:STDOUT: %self.patt.loc5_8.1: @HasF.WithSelf.F.%pattern_type (%pattern_type.f71) = at_binding_pattern self, %self.param_patt.loc5_8.1 [symbolic = %self.patt.loc5_8.2 (constants.%self.patt.5a5)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @HasF.WithSelf.F.%Self.as_type.loc5_8.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc5_8.1: type = splice_block %.loc5_8.2 [symbolic = %Self.as_type.loc5_8.1 (constants.%Self.as_type)] { @@ -298,8 +302,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.HasF.impl: %C.ref as %HasF.ref { // CHECK:STDOUT: %C.as.HasF.impl.F.decl: %C.as.HasF.impl.F.type = fn_decl @C.as.HasF.impl.F [concrete = constants.%C.as.HasF.impl.F] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.866 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.866 = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.866 = value_param_pattern [concrete = constants.%self.param_patt.f0b] +// CHECK:STDOUT: %self.patt: %pattern_type.866 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.c87] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %C = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @C.as.HasF.impl.%C.ref [concrete = constants.%C] @@ -326,6 +330,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self: %HasF.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc5_8.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_8.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc5_8.1 [symbolic = %pattern_type (constants.%pattern_type.f71)] +// CHECK:STDOUT: %self.param_patt.loc5_8.2: @HasF.WithSelf.F.%pattern_type (%pattern_type.f71) = value_param_pattern [symbolic = %self.param_patt.loc5_8.2 (constants.%self.param_patt.18e)] +// CHECK:STDOUT: %self.patt.loc5_8.2: @HasF.WithSelf.F.%pattern_type (%pattern_type.f71) = at_binding_pattern self, %self.param_patt.loc5_8.2 [symbolic = %self.patt.loc5_8.2 (constants.%self.patt.5a5)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @HasF.WithSelf.F.%Self.as_type.loc5_8.1 (%Self.as_type)); // CHECK:STDOUT: } @@ -346,6 +352,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc5_8.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.f71 +// CHECK:STDOUT: %self.param_patt.loc5_8.2 => constants.%self.param_patt.18e +// CHECK:STDOUT: %self.patt.loc5_8.2 => constants.%self.patt.5a5 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HasF.WithSelf(constants.%HasF.facet) { @@ -359,6 +367,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self => constants.%HasF.facet // CHECK:STDOUT: %Self.as_type.loc5_8.1 => constants.%C // CHECK:STDOUT: %pattern_type => constants.%pattern_type.866 +// CHECK:STDOUT: %self.param_patt.loc5_8.2 => constants.%self.param_patt.f0b +// CHECK:STDOUT: %self.patt.loc5_8.2 => constants.%self.patt.c87 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- package_b.carbon @@ -368,6 +378,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self.150: %HasG.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type.dd3: type = facet_access_type %Self.150 [symbolic] // CHECK:STDOUT: %pattern_type.bfc: type = pattern_type %Self.as_type.dd3 [symbolic] +// CHECK:STDOUT: %self.param_patt.e6a: %pattern_type.bfc = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.054: %pattern_type.bfc = at_binding_pattern self, %self.param_patt.e6a [symbolic] // CHECK:STDOUT: %HasG.WithSelf.G.type.34a: type = fn_type @HasG.WithSelf.G, @HasG.WithSelf(%Self.150) [symbolic] // CHECK:STDOUT: %HasG.WithSelf.G.6a9: %HasG.WithSelf.G.type.34a = struct_value () [symbolic] // CHECK:STDOUT: %HasG.assoc_type: type = assoc_entity_type @HasG [concrete] @@ -378,6 +390,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %HasG.impl_witness.992: = impl_witness @C.as.HasG.impl.%HasG.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.866: type = pattern_type %C [concrete] +// CHECK:STDOUT: %self.param_patt.f0b: %pattern_type.866 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.c87: %pattern_type.866 = at_binding_pattern self, %self.param_patt.f0b [concrete] // CHECK:STDOUT: %C.as.HasG.impl.G.type: type = fn_type @C.as.HasG.impl.G [concrete] // CHECK:STDOUT: %C.as.HasG.impl.G: %C.as.HasG.impl.G.type = struct_value () [concrete] // CHECK:STDOUT: %HasG.facet.fa2: %HasG.type = facet_value %C, (%HasG.impl_witness.992) [concrete] @@ -389,8 +403,12 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %HasF.WithSelf.F.c56: %HasF.WithSelf.F.type.c4f = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type.7bb: type = facet_access_type %Self.4dc [symbolic] // CHECK:STDOUT: %pattern_type.6cd: type = pattern_type %Self.as_type.7bb [symbolic] +// CHECK:STDOUT: %self.param_patt.43c: %pattern_type.6cd = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.072: %pattern_type.6cd = at_binding_pattern self, %self.param_patt.43c [symbolic] // CHECK:STDOUT: %HasF.impl_witness: = impl_witness @D.as.HasF.impl.%HasF.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.709: type = pattern_type %D [concrete] +// CHECK:STDOUT: %self.param_patt.68d: %pattern_type.709 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.6ac: %pattern_type.709 = at_binding_pattern self, %self.param_patt.68d [concrete] // CHECK:STDOUT: %D.as.HasF.impl.F.type: type = fn_type @D.as.HasF.impl.F [concrete] // CHECK:STDOUT: %D.as.HasF.impl.F: %D.as.HasF.impl.F.type = struct_value () [concrete] // CHECK:STDOUT: %HasF.facet: %HasF.type = facet_value %D, (%HasF.impl_witness) [concrete] @@ -457,8 +475,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %HasG.WithSelf.G.decl: @HasG.WithSelf.%HasG.WithSelf.G.type (%HasG.WithSelf.G.type.34a) = fn_decl @HasG.WithSelf.G [symbolic = @HasG.WithSelf.%HasG.WithSelf.G (constants.%HasG.WithSelf.G.6a9)] { -// CHECK:STDOUT: %self.param_patt: @HasG.WithSelf.G.%pattern_type (%pattern_type.bfc) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @HasG.WithSelf.G.%pattern_type (%pattern_type.bfc) = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc7_8.1: @HasG.WithSelf.G.%pattern_type (%pattern_type.bfc) = value_param_pattern [symbolic = %self.param_patt.loc7_8.2 (constants.%self.param_patt.e6a)] +// CHECK:STDOUT: %self.patt.loc7_8.1: @HasG.WithSelf.G.%pattern_type (%pattern_type.bfc) = at_binding_pattern self, %self.param_patt.loc7_8.1 [symbolic = %self.patt.loc7_8.2 (constants.%self.patt.054)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @HasG.WithSelf.G.%Self.as_type.loc7_8.1 (%Self.as_type.dd3) = value_param call_param0 // CHECK:STDOUT: %.loc7_8.1: type = splice_block %.loc7_8.2 [symbolic = %Self.as_type.loc7_8.1 (constants.%Self.as_type.dd3)] { @@ -489,8 +507,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.HasG.impl: %C.ref as %HasG.ref { // CHECK:STDOUT: %C.as.HasG.impl.G.decl: %C.as.HasG.impl.G.type = fn_decl @C.as.HasG.impl.G [concrete = constants.%C.as.HasG.impl.G] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.866 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.866 = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.866 = value_param_pattern [concrete = constants.%self.param_patt.f0b] +// CHECK:STDOUT: %self.patt: %pattern_type.866 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.c87] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %C = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @C.as.HasG.impl.%C.ref [concrete = constants.%C] @@ -507,8 +525,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: // CHECK:STDOUT: impl @D.as.HasF.impl: %D.ref as %HasF.ref { // CHECK:STDOUT: %D.as.HasF.impl.F.decl: %D.as.HasF.impl.F.type = fn_decl @D.as.HasF.impl.F [concrete = constants.%D.as.HasF.impl.F] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.709 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.709 = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.709 = value_param_pattern [concrete = constants.%self.param_patt.68d] +// CHECK:STDOUT: %self.patt: %pattern_type.709 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.6ac] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %D = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @D.as.HasF.impl.%D.ref [concrete = constants.%D] @@ -525,8 +543,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: // CHECK:STDOUT: impl @D.as.HasG.impl: %D.ref as %HasG.ref { // CHECK:STDOUT: %D.as.HasG.impl.G.decl: %D.as.HasG.impl.G.type = fn_decl @D.as.HasG.impl.G [concrete = constants.%D.as.HasG.impl.G] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.709 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.709 = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.709 = value_param_pattern [concrete = constants.%self.param_patt.68d] +// CHECK:STDOUT: %self.patt: %pattern_type.709 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.6ac] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %D = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @D.as.HasG.impl.%D.ref [concrete = constants.%D] @@ -560,6 +578,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self: %HasG.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.150)] // CHECK:STDOUT: %Self.as_type.loc7_8.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc7_8.1 (constants.%Self.as_type.dd3)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc7_8.1 [symbolic = %pattern_type (constants.%pattern_type.bfc)] +// CHECK:STDOUT: %self.param_patt.loc7_8.2: @HasG.WithSelf.G.%pattern_type (%pattern_type.bfc) = value_param_pattern [symbolic = %self.param_patt.loc7_8.2 (constants.%self.param_patt.e6a)] +// CHECK:STDOUT: %self.patt.loc7_8.2: @HasG.WithSelf.G.%pattern_type (%pattern_type.bfc) = at_binding_pattern self, %self.param_patt.loc7_8.2 [symbolic = %self.patt.loc7_8.2 (constants.%self.patt.054)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @HasG.WithSelf.G.%Self.as_type.loc7_8.1 (%Self.as_type.dd3)); // CHECK:STDOUT: } @@ -573,6 +593,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self: %HasF.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.4dc)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.7bb)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.6cd)] +// CHECK:STDOUT: %self.param_patt: @HasF.WithSelf.F.%pattern_type (%pattern_type.6cd) = value_param_pattern [symbolic = %self.param_patt (constants.%self.param_patt.43c)] +// CHECK:STDOUT: %self.patt: @HasF.WithSelf.F.%pattern_type (%pattern_type.6cd) = at_binding_pattern self, %self.param_patt [symbolic = %self.patt (constants.%self.patt.072)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -598,6 +620,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self => constants.%Self.150 // CHECK:STDOUT: %Self.as_type.loc7_8.1 => constants.%Self.as_type.dd3 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.bfc +// CHECK:STDOUT: %self.param_patt.loc7_8.2 => constants.%self.param_patt.e6a +// CHECK:STDOUT: %self.patt.loc7_8.2 => constants.%self.patt.054 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HasG.WithSelf(constants.%HasG.facet.fa2) { @@ -611,6 +635,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self => constants.%HasG.facet.fa2 // CHECK:STDOUT: %Self.as_type.loc7_8.1 => constants.%C // CHECK:STDOUT: %pattern_type => constants.%pattern_type.866 +// CHECK:STDOUT: %self.param_patt.loc7_8.2 => constants.%self.param_patt.f0b +// CHECK:STDOUT: %self.patt.loc7_8.2 => constants.%self.patt.c87 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HasF.WithSelf(constants.%Self.4dc) { @@ -624,6 +650,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self => constants.%Self.4dc // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.7bb // CHECK:STDOUT: %pattern_type => constants.%pattern_type.6cd +// CHECK:STDOUT: %self.param_patt => constants.%self.param_patt.43c +// CHECK:STDOUT: %self.patt => constants.%self.patt.072 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HasF.WithSelf(constants.%HasF.facet) { @@ -637,6 +665,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self => constants.%HasF.facet // CHECK:STDOUT: %Self.as_type => constants.%D // CHECK:STDOUT: %pattern_type => constants.%pattern_type.709 +// CHECK:STDOUT: %self.param_patt => constants.%self.param_patt.68d +// CHECK:STDOUT: %self.patt => constants.%self.patt.6ac // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HasG.WithSelf(constants.%HasG.facet.16a) { @@ -650,6 +680,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self => constants.%HasG.facet.16a // CHECK:STDOUT: %Self.as_type.loc7_8.1 => constants.%D // CHECK:STDOUT: %pattern_type => constants.%pattern_type.709 +// CHECK:STDOUT: %self.param_patt.loc7_8.2 => constants.%self.param_patt.68d +// CHECK:STDOUT: %self.patt.loc7_8.2 => constants.%self.patt.6ac // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- use_cf.carbon @@ -659,6 +691,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.866: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.866 = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.866 = at_binding_pattern c, %c.param_patt [concrete] // CHECK:STDOUT: %TestCF.type: type = fn_type @TestCF [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %TestCF: %TestCF.type = struct_value () [concrete] @@ -668,6 +702,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %HasF.WithSelf.F.c56: %HasF.WithSelf.F.type.c4f = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] // CHECK:STDOUT: %pattern_type.6cd: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt.43c: %pattern_type.6cd = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.072: %pattern_type.6cd = at_binding_pattern self, %self.param_patt.43c [symbolic] // CHECK:STDOUT: %HasF.assoc_type: type = assoc_entity_type @HasF [concrete] // CHECK:STDOUT: %assoc0: %HasF.assoc_type = assoc_entity element0, imports.%PackageA.import_ref.91e [concrete] // CHECK:STDOUT: %HasF.impl_witness: = impl_witness imports.%HasF.impl_witness_table [concrete] @@ -714,8 +750,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %PackageA.import = import PackageA // CHECK:STDOUT: %TestCF.decl: %TestCF.type = fn_decl @TestCF [concrete = constants.%TestCF] { -// CHECK:STDOUT: %c.param_patt: %pattern_type.866 = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.866 = at_binding_pattern c, %c.param_patt [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.866 = value_param_pattern [concrete = constants.%c.param_patt] +// CHECK:STDOUT: %c.patt: %pattern_type.866 = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %C = value_param call_param0 // CHECK:STDOUT: %.loc6: type = splice_block %C.ref [concrete = constants.%C] { @@ -763,6 +799,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self: %HasF.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.6cd)] +// CHECK:STDOUT: %self.param_patt: @HasF.WithSelf.F.%pattern_type (%pattern_type.6cd) = value_param_pattern [symbolic = %self.param_patt (constants.%self.param_patt.43c)] +// CHECK:STDOUT: %self.patt: @HasF.WithSelf.F.%pattern_type (%pattern_type.6cd) = at_binding_pattern self, %self.param_patt [symbolic = %self.patt (constants.%self.patt.072)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -780,6 +818,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.6cd +// CHECK:STDOUT: %self.param_patt => constants.%self.param_patt.43c +// CHECK:STDOUT: %self.patt => constants.%self.patt.072 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HasF.WithSelf(constants.%HasF.facet) { @@ -796,6 +836,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.709: type = pattern_type %D [concrete] +// CHECK:STDOUT: %d.param_patt: %pattern_type.709 = value_param_pattern [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.709 = at_binding_pattern d, %d.param_patt [concrete] // CHECK:STDOUT: %TestDF.type: type = fn_type @TestDF [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %TestDF: %TestDF.type = struct_value () [concrete] @@ -805,6 +847,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %HasF.WithSelf.F.c56: %HasF.WithSelf.F.type.c4f = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] // CHECK:STDOUT: %pattern_type.6cd: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt.43c: %pattern_type.6cd = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.072: %pattern_type.6cd = at_binding_pattern self, %self.param_patt.43c [symbolic] // CHECK:STDOUT: %HasF.assoc_type: type = assoc_entity_type @HasF [concrete] // CHECK:STDOUT: %assoc0: %HasF.assoc_type = assoc_entity element0, imports.%PackageA.import_ref.91e [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] @@ -862,8 +906,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %PackageA.import = import PackageA // CHECK:STDOUT: %PackageB.import = import PackageB // CHECK:STDOUT: %TestDF.decl: %TestDF.type = fn_decl @TestDF [concrete = constants.%TestDF] { -// CHECK:STDOUT: %d.param_patt: %pattern_type.709 = value_param_pattern [concrete] -// CHECK:STDOUT: %d.patt: %pattern_type.709 = at_binding_pattern d, %d.param_patt [concrete] +// CHECK:STDOUT: %d.param_patt: %pattern_type.709 = value_param_pattern [concrete = constants.%d.param_patt] +// CHECK:STDOUT: %d.patt: %pattern_type.709 = at_binding_pattern d, %d.param_patt [concrete = constants.%d.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %d.param: %D = value_param call_param0 // CHECK:STDOUT: %.loc7: type = splice_block %D.ref [concrete = constants.%D] { @@ -923,6 +967,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self: %HasF.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.6cd)] +// CHECK:STDOUT: %self.param_patt: @HasF.WithSelf.F.%pattern_type (%pattern_type.6cd) = value_param_pattern [symbolic = %self.param_patt (constants.%self.param_patt.43c)] +// CHECK:STDOUT: %self.patt: @HasF.WithSelf.F.%pattern_type (%pattern_type.6cd) = at_binding_pattern self, %self.param_patt [symbolic = %self.patt (constants.%self.patt.072)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -940,6 +986,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.6cd +// CHECK:STDOUT: %self.param_patt => constants.%self.param_patt.43c +// CHECK:STDOUT: %self.patt => constants.%self.patt.072 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HasF.WithSelf(constants.%HasF.facet) { @@ -956,6 +1004,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.866: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.866 = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.866 = at_binding_pattern c, %c.param_patt [concrete] // CHECK:STDOUT: %TestCG.type: type = fn_type @TestCG [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %TestCG: %TestCG.type = struct_value () [concrete] @@ -965,6 +1015,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %HasG.WithSelf.G.50a: %HasG.WithSelf.G.type.95e = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] // CHECK:STDOUT: %pattern_type.2fa: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt.f6e: %pattern_type.2fa = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.5c8: %pattern_type.2fa = at_binding_pattern self, %self.param_patt.f6e [symbolic] // CHECK:STDOUT: %HasG.assoc_type: type = assoc_entity_type @HasG [concrete] // CHECK:STDOUT: %assoc0: %HasG.assoc_type = assoc_entity element0, imports.%PackageB.import_ref.89b [concrete] // CHECK:STDOUT: %D: type = class_type @D [concrete] @@ -1022,8 +1074,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %PackageA.import = import PackageA // CHECK:STDOUT: %PackageB.import = import PackageB // CHECK:STDOUT: %TestCG.decl: %TestCG.type = fn_decl @TestCG [concrete = constants.%TestCG] { -// CHECK:STDOUT: %c.param_patt: %pattern_type.866 = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.866 = at_binding_pattern c, %c.param_patt [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.866 = value_param_pattern [concrete = constants.%c.param_patt] +// CHECK:STDOUT: %c.patt: %pattern_type.866 = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %C = value_param call_param0 // CHECK:STDOUT: %.loc7: type = splice_block %C.ref [concrete = constants.%C] { @@ -1083,6 +1135,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self: %HasG.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.2fa)] +// CHECK:STDOUT: %self.param_patt: @HasG.WithSelf.G.%pattern_type (%pattern_type.2fa) = value_param_pattern [symbolic = %self.param_patt (constants.%self.param_patt.f6e)] +// CHECK:STDOUT: %self.patt: @HasG.WithSelf.G.%pattern_type (%pattern_type.2fa) = at_binding_pattern self, %self.param_patt [symbolic = %self.patt (constants.%self.patt.5c8)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -1100,6 +1154,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.2fa +// CHECK:STDOUT: %self.param_patt => constants.%self.param_patt.f6e +// CHECK:STDOUT: %self.patt => constants.%self.patt.5c8 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HasG.WithSelf(constants.%HasG.facet) { @@ -1116,6 +1172,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.709: type = pattern_type %D [concrete] +// CHECK:STDOUT: %d.param_patt: %pattern_type.709 = value_param_pattern [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.709 = at_binding_pattern d, %d.param_patt [concrete] // CHECK:STDOUT: %TestDG.type: type = fn_type @TestDG [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %TestDG: %TestDG.type = struct_value () [concrete] @@ -1125,6 +1183,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %HasG.WithSelf.G.50a: %HasG.WithSelf.G.type.95e = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] // CHECK:STDOUT: %pattern_type.2fa: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt.f6e: %pattern_type.2fa = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.5c8: %pattern_type.2fa = at_binding_pattern self, %self.param_patt.f6e [symbolic] // CHECK:STDOUT: %HasG.assoc_type: type = assoc_entity_type @HasG [concrete] // CHECK:STDOUT: %assoc0: %HasG.assoc_type = assoc_entity element0, imports.%PackageB.import_ref.89b [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] @@ -1177,8 +1237,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %PackageB.import = import PackageB // CHECK:STDOUT: %TestDG.decl: %TestDG.type = fn_decl @TestDG [concrete = constants.%TestDG] { -// CHECK:STDOUT: %d.param_patt: %pattern_type.709 = value_param_pattern [concrete] -// CHECK:STDOUT: %d.patt: %pattern_type.709 = at_binding_pattern d, %d.param_patt [concrete] +// CHECK:STDOUT: %d.param_patt: %pattern_type.709 = value_param_pattern [concrete = constants.%d.param_patt] +// CHECK:STDOUT: %d.patt: %pattern_type.709 = at_binding_pattern d, %d.param_patt [concrete = constants.%d.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %d.param: %D = value_param call_param0 // CHECK:STDOUT: %.loc6: type = splice_block %D.ref [concrete = constants.%D] { @@ -1238,6 +1298,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self: %HasG.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.2fa)] +// CHECK:STDOUT: %self.param_patt: @HasG.WithSelf.G.%pattern_type (%pattern_type.2fa) = value_param_pattern [symbolic = %self.param_patt (constants.%self.param_patt.f6e)] +// CHECK:STDOUT: %self.patt: @HasG.WithSelf.G.%pattern_type (%pattern_type.2fa) = at_binding_pattern self, %self.param_patt [symbolic = %self.patt (constants.%self.patt.5c8)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -1255,6 +1317,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.2fa +// CHECK:STDOUT: %self.param_patt => constants.%self.param_patt.f6e +// CHECK:STDOUT: %self.patt => constants.%self.patt.5c8 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HasG.WithSelf(constants.%HasG.facet) { @@ -1271,6 +1335,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self: %Z.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] // CHECK:STDOUT: %pattern_type.a8e: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt.507: %pattern_type.a8e = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.1bb: %pattern_type.a8e = at_binding_pattern self, %self.param_patt.507 [symbolic] // CHECK:STDOUT: %Z.WithSelf.H.type.9ae: type = fn_type @Z.WithSelf.H, @Z.WithSelf(%Self) [symbolic] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Z.WithSelf.H.051: %Z.WithSelf.H.type.9ae = struct_value () [symbolic] @@ -1279,6 +1345,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %Z.impl_witness: = impl_witness @empty_tuple.type.as.Z.impl.%Z.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %self.param_patt.154: %pattern_type.cb1 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.8c1: %pattern_type.cb1 = at_binding_pattern self, %self.param_patt.154 [concrete] // CHECK:STDOUT: %empty_tuple.type.as.Z.impl.H.type: type = fn_type @empty_tuple.type.as.Z.impl.H [concrete] // CHECK:STDOUT: %empty_tuple.type.as.Z.impl.H: %empty_tuple.type.as.Z.impl.H.type = struct_value () [concrete] // CHECK:STDOUT: %Z.facet: %Z.type = facet_value %empty_tuple.type, (%Z.impl_witness) [concrete] @@ -1313,8 +1381,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %Z.WithSelf.H.decl: @Z.WithSelf.%Z.WithSelf.H.type (%Z.WithSelf.H.type.9ae) = fn_decl @Z.WithSelf.H [symbolic = @Z.WithSelf.%Z.WithSelf.H (constants.%Z.WithSelf.H.051)] { -// CHECK:STDOUT: %self.param_patt: @Z.WithSelf.H.%pattern_type (%pattern_type.a8e) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @Z.WithSelf.H.%pattern_type (%pattern_type.a8e) = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc5_8.1: @Z.WithSelf.H.%pattern_type (%pattern_type.a8e) = value_param_pattern [symbolic = %self.param_patt.loc5_8.2 (constants.%self.param_patt.507)] +// CHECK:STDOUT: %self.patt.loc5_8.1: @Z.WithSelf.H.%pattern_type (%pattern_type.a8e) = at_binding_pattern self, %self.param_patt.loc5_8.1 [symbolic = %self.patt.loc5_8.2 (constants.%self.patt.1bb)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @Z.WithSelf.H.%Self.as_type.loc5_8.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc5_8.1: type = splice_block %.loc5_8.2 [symbolic = %Self.as_type.loc5_8.1 (constants.%Self.as_type)] { @@ -1336,8 +1404,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: // CHECK:STDOUT: impl @empty_tuple.type.as.Z.impl: %.loc8_7.2 as %Z.ref { // CHECK:STDOUT: %empty_tuple.type.as.Z.impl.H.decl: %empty_tuple.type.as.Z.impl.H.type = fn_decl @empty_tuple.type.as.Z.impl.H [concrete = constants.%empty_tuple.type.as.Z.impl.H] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.cb1 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.cb1 = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.cb1 = value_param_pattern [concrete = constants.%self.param_patt.154] +// CHECK:STDOUT: %self.patt: %pattern_type.cb1 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.8c1] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %empty_tuple.type = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @empty_tuple.type.as.Z.impl.%.loc8_7.2 [concrete = constants.%empty_tuple.type] @@ -1356,6 +1424,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self: %Z.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc5_8.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_8.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc5_8.1 [symbolic = %pattern_type (constants.%pattern_type.a8e)] +// CHECK:STDOUT: %self.param_patt.loc5_8.2: @Z.WithSelf.H.%pattern_type (%pattern_type.a8e) = value_param_pattern [symbolic = %self.param_patt.loc5_8.2 (constants.%self.param_patt.507)] +// CHECK:STDOUT: %self.patt.loc5_8.2: @Z.WithSelf.H.%pattern_type (%pattern_type.a8e) = at_binding_pattern self, %self.param_patt.loc5_8.2 [symbolic = %self.patt.loc5_8.2 (constants.%self.patt.1bb)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Z.WithSelf.H.%Self.as_type.loc5_8.1 (%Self.as_type)); // CHECK:STDOUT: } @@ -1376,6 +1446,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc5_8.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.a8e +// CHECK:STDOUT: %self.param_patt.loc5_8.2 => constants.%self.param_patt.507 +// CHECK:STDOUT: %self.patt.loc5_8.2 => constants.%self.patt.1bb // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Z.WithSelf(constants.%Z.facet) { @@ -1389,6 +1461,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self => constants.%Z.facet // CHECK:STDOUT: %Self.as_type.loc5_8.1 => constants.%empty_tuple.type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.cb1 +// CHECK:STDOUT: %self.param_patt.loc5_8.2 => constants.%self.param_patt.154 +// CHECK:STDOUT: %self.patt.loc5_8.2 => constants.%self.patt.8c1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_associated_interface.carbon @@ -1404,6 +1478,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Z.WithSelf.H.6ec: %Z.WithSelf.H.type.e28 = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] // CHECK:STDOUT: %pattern_type.f00: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt.a99: %pattern_type.f00 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.ca0: %pattern_type.f00 = at_binding_pattern self, %self.param_patt.a99 [symbolic] // CHECK:STDOUT: %Z.assoc_type: type = assoc_entity_type @Z [concrete] // CHECK:STDOUT: %assoc0: %Z.assoc_type = assoc_entity element0, imports.%PackageAssociatedInterface.import_ref.635 [concrete] // CHECK:STDOUT: %Z.impl_witness: = impl_witness imports.%Z.impl_witness_table [concrete] @@ -1481,6 +1557,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self: %Z.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.f00)] +// CHECK:STDOUT: %self.param_patt: @Z.WithSelf.H.%pattern_type (%pattern_type.f00) = value_param_pattern [symbolic = %self.param_patt (constants.%self.param_patt.a99)] +// CHECK:STDOUT: %self.patt: @Z.WithSelf.H.%pattern_type (%pattern_type.f00) = at_binding_pattern self, %self.param_patt [symbolic = %self.patt (constants.%self.patt.ca0)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -1498,6 +1576,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.f00 +// CHECK:STDOUT: %self.param_patt => constants.%self.param_patt.a99 +// CHECK:STDOUT: %self.patt => constants.%self.patt.ca0 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Z.WithSelf(constants.%Z.facet) { @@ -1513,8 +1593,10 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %X.patt: %pattern_type.51d = symbolic_binding_pattern X, 1 [symbolic] // CHECK:STDOUT: %X: %T = symbolic_binding X, 1 [symbolic] // CHECK:STDOUT: %AnyParam.type: type = generic_class_type @AnyParam [concrete] // CHECK:STDOUT: %AnyParam.generic: %AnyParam.type = struct_value () [concrete] @@ -1525,6 +1607,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self: %Y.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] // CHECK:STDOUT: %pattern_type.28b: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt: %pattern_type.28b = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt: %pattern_type.28b = at_binding_pattern self, %self.param_patt [symbolic] // CHECK:STDOUT: %Y.WithSelf.K.type: type = fn_type @Y.WithSelf.K, @Y.WithSelf(%Self) [symbolic] // CHECK:STDOUT: %Y.WithSelf.K: %Y.WithSelf.K.type = struct_value () [symbolic] // CHECK:STDOUT: %Y.assoc_type: type = assoc_entity_type @Y [concrete] @@ -1547,8 +1631,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %AnyParam.decl: %AnyParam.type = class_decl @AnyParam [concrete = constants.%AnyParam.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %X.patt: @AnyParam.%pattern_type (%pattern_type.51d) = symbolic_binding_pattern X, 1 [concrete] +// CHECK:STDOUT: %T.patt.loc4_17.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_17.2 (constants.%T.patt)] +// CHECK:STDOUT: %X.patt.loc4_27.1: @AnyParam.%pattern_type (%pattern_type.51d) = symbolic_binding_pattern X, 1 [symbolic = %X.patt.loc4_27.2 (constants.%X.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_20.1: type = splice_block %.loc4_20.2 [concrete = type] { // CHECK:STDOUT: %.Self.loc4_17: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1570,8 +1654,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %Y.WithSelf.K.decl: @Y.WithSelf.%Y.WithSelf.K.type (%Y.WithSelf.K.type) = fn_decl @Y.WithSelf.K [symbolic = @Y.WithSelf.%Y.WithSelf.K (constants.%Y.WithSelf.K)] { -// CHECK:STDOUT: %self.param_patt: @Y.WithSelf.K.%pattern_type (%pattern_type.28b) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @Y.WithSelf.K.%pattern_type (%pattern_type.28b) = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc7_15.1: @Y.WithSelf.K.%pattern_type (%pattern_type.28b) = value_param_pattern [symbolic = %self.param_patt.loc7_15.2 (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt.loc7_15.1: @Y.WithSelf.K.%pattern_type (%pattern_type.28b) = at_binding_pattern self, %self.param_patt.loc7_15.1 [symbolic = %self.patt.loc7_15.2 (constants.%self.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @Y.WithSelf.K.%Self.as_type.loc7_15.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc7_15.1: type = splice_block %.loc7_15.2 [symbolic = %Self.as_type.loc7_15.1 (constants.%Self.as_type)] { @@ -1592,9 +1676,11 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @AnyParam(%T.loc4_17.2: type, %X.loc4_27.2: @AnyParam.%T.loc4_17.1 (%T)) { +// CHECK:STDOUT: %T.patt.loc4_17.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_17.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_17.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_17.1 (constants.%T)] -// CHECK:STDOUT: %X.loc4_27.1: @AnyParam.%T.loc4_17.1 (%T) = symbolic_binding X, 1 [symbolic = %X.loc4_27.1 (constants.%X)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc4_17.1 [symbolic = %pattern_type (constants.%pattern_type.51d)] +// CHECK:STDOUT: %X.patt.loc4_27.2: @AnyParam.%pattern_type (%pattern_type.51d) = symbolic_binding_pattern X, 1 [symbolic = %X.patt.loc4_27.2 (constants.%X.patt)] +// CHECK:STDOUT: %X.loc4_27.1: @AnyParam.%T.loc4_17.1 (%T) = symbolic_binding X, 1 [symbolic = %X.loc4_27.1 (constants.%X)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -1611,6 +1697,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self: %Y.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc7_15.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc7_15.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc7_15.1 [symbolic = %pattern_type (constants.%pattern_type.28b)] +// CHECK:STDOUT: %self.param_patt.loc7_15.2: @Y.WithSelf.K.%pattern_type (%pattern_type.28b) = value_param_pattern [symbolic = %self.param_patt.loc7_15.2 (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt.loc7_15.2: @Y.WithSelf.K.%pattern_type (%pattern_type.28b) = at_binding_pattern self, %self.param_patt.loc7_15.2 [symbolic = %self.patt.loc7_15.2 (constants.%self.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %Self.as_type.loc7_15.1 [symbolic = %require_complete (constants.%require_complete)] @@ -1622,9 +1710,11 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @AnyParam(constants.%T, constants.%X) { +// CHECK:STDOUT: %T.patt.loc4_17.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_17.1 => constants.%T -// CHECK:STDOUT: %X.loc4_27.1 => constants.%X // CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d +// CHECK:STDOUT: %X.patt.loc4_27.2 => constants.%X.patt +// CHECK:STDOUT: %X.loc4_27.1 => constants.%X // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Y.WithSelf(constants.%Self) { @@ -1638,6 +1728,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc7_15.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.28b +// CHECK:STDOUT: %self.param_patt.loc7_15.2 => constants.%self.param_patt +// CHECK:STDOUT: %self.patt.loc7_15.2 => constants.%self.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- has_generic_interface.carbon @@ -1646,6 +1738,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %U: type = symbolic_binding U, 0 [symbolic] // CHECK:STDOUT: %GenericInterface.type.cd1: type = generic_interface_type @GenericInterface [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -1659,7 +1752,10 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %X: %T = symbolic_binding X, 1 [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %X.patt.9f0: %pattern_type.51d = symbolic_binding_pattern X, 1 [symbolic] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %pattern_type.ed9: type = pattern_type %GenericInterface.type.cd1 [concrete] +// CHECK:STDOUT: %X.patt.ff8: %pattern_type.ed9 = symbolic_binding_pattern X, 1 [symbolic] // CHECK:STDOUT: %AnyParam.591: type = class_type @AnyParam, @AnyParam(%GenericInterface.type.cd1, %GenericInterface.generic) [concrete] // CHECK:STDOUT: %Y.type: type = facet_type <@Y> [concrete] // CHECK:STDOUT: %Self.aff: %Y.type = symbolic_binding Self, 0 [symbolic] @@ -1667,9 +1763,13 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Y.WithSelf.K.d2d: %Y.WithSelf.K.type.977 = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type.59a: type = facet_access_type %Self.aff [symbolic] // CHECK:STDOUT: %pattern_type.615: type = pattern_type %Self.as_type.59a [symbolic] +// CHECK:STDOUT: %self.param_patt.f96: %pattern_type.615 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.871: %pattern_type.615 = at_binding_pattern self, %self.param_patt.f96 [symbolic] // CHECK:STDOUT: %require_complete: = require_complete_type %Self.as_type.59a [symbolic] // CHECK:STDOUT: %Y.impl_witness: = impl_witness @AnyParam.as.Y.impl.%Y.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.f0f: type = pattern_type %AnyParam.591 [concrete] +// CHECK:STDOUT: %self.param_patt.93d: %pattern_type.f0f = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.cdd: %pattern_type.f0f = at_binding_pattern self, %self.param_patt.93d [concrete] // CHECK:STDOUT: %AnyParam.as.Y.impl.K.type: type = fn_type @AnyParam.as.Y.impl.K [concrete] // CHECK:STDOUT: %AnyParam.as.Y.impl.K: %AnyParam.as.Y.impl.K.type = struct_value () [concrete] // CHECK:STDOUT: %Y.facet: %Y.type = facet_value %AnyParam.591, (%Y.impl_witness) [concrete] @@ -1677,6 +1777,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Y.WithSelf.K.8fc: %Y.WithSelf.K.type.cd7 = struct_value () [concrete] // CHECK:STDOUT: %L.type: type = fn_type @L [concrete] // CHECK:STDOUT: %L: %L.type = struct_value () [concrete] +// CHECK:STDOUT: %obj.patt: %pattern_type.f0f = ref_binding_pattern obj [concrete] +// CHECK:STDOUT: %obj.var_patt: %pattern_type.f0f = var_pattern %obj.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %AnyParam.val: %AnyParam.591 = struct_value () [concrete] // CHECK:STDOUT: %Y.assoc_type: type = assoc_entity_type @Y [concrete] @@ -1722,7 +1824,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %PackageHasParam.import = import PackageHasParam // CHECK:STDOUT: %GenericInterface.decl: %GenericInterface.type.cd1 = interface_decl @GenericInterface [concrete = constants.%GenericInterface.generic] { -// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [concrete] +// CHECK:STDOUT: %U.patt.loc6_29.1: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc6_29.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6_32.1: type = splice_block %.loc6_32.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1742,6 +1844,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @GenericInterface(%U.loc6_29.2: type) { +// CHECK:STDOUT: %U.patt.loc6_29.2: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc6_29.2 (constants.%U.patt)] // CHECK:STDOUT: %U.loc6_29.1: type = symbolic_binding U, 0 [symbolic = %U.loc6_29.1 (constants.%U)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1771,8 +1874,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: // CHECK:STDOUT: impl @AnyParam.as.Y.impl: %AnyParam as %Y.ref { // CHECK:STDOUT: %AnyParam.as.Y.impl.K.decl: %AnyParam.as.Y.impl.K.type = fn_decl @AnyParam.as.Y.impl.K [concrete = constants.%AnyParam.as.Y.impl.K] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.f0f = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.f0f = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.f0f = value_param_pattern [concrete = constants.%self.param_patt.93d] +// CHECK:STDOUT: %self.patt: %pattern_type.f0f = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.cdd] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %AnyParam.591 = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @AnyParam.as.Y.impl.%AnyParam [concrete = constants.%AnyParam.591] @@ -1788,9 +1891,11 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @AnyParam(imports.%PackageHasParam.import_ref.b3b: type, imports.%PackageHasParam.import_ref.b42: @AnyParam.%T (%T)) [from "has_param.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %X: @AnyParam.%T (%T) = symbolic_binding X, 1 [symbolic = %X (constants.%X)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.51d)] +// CHECK:STDOUT: %X.patt: @AnyParam.%pattern_type (%pattern_type.51d) = symbolic_binding_pattern X, 1 [symbolic = %X.patt (constants.%X.patt.9f0)] +// CHECK:STDOUT: %X: @AnyParam.%T (%T) = symbolic_binding X, 1 [symbolic = %X (constants.%X)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -1806,6 +1911,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self: %Y.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.aff)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.59a)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.615)] +// CHECK:STDOUT: %self.param_patt: @Y.WithSelf.K.%pattern_type (%pattern_type.615) = value_param_pattern [symbolic = %self.param_patt (constants.%self.param_patt.f96)] +// CHECK:STDOUT: %self.patt: @Y.WithSelf.K.%pattern_type (%pattern_type.615) = at_binding_pattern self, %self.param_patt [symbolic = %self.patt (constants.%self.patt.871)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %Self.as_type [symbolic = %require_complete (constants.%require_complete)] @@ -1821,8 +1928,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: fn @L() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %obj.patt: %pattern_type.f0f = ref_binding_pattern obj [concrete] -// CHECK:STDOUT: %obj.var_patt: %pattern_type.f0f = var_pattern %obj.patt [concrete] +// CHECK:STDOUT: %obj.patt: %pattern_type.f0f = ref_binding_pattern obj [concrete = constants.%obj.patt] +// CHECK:STDOUT: %obj.var_patt: %pattern_type.f0f = var_pattern %obj.patt [concrete = constants.%obj.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %obj.var: ref %AnyParam.591 = var %obj.var_patt // CHECK:STDOUT: %.loc13_58.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] @@ -1857,21 +1964,26 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @GenericInterface(constants.%U) { +// CHECK:STDOUT: %U.patt.loc6_29.2 => constants.%U.patt // CHECK:STDOUT: %U.loc6_29.1 => constants.%U // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @GenericInterface.WithSelf(constants.%U, constants.%Self.19b) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @AnyParam(constants.%T, constants.%X) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %X => constants.%X // CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d +// CHECK:STDOUT: %X.patt => constants.%X.patt.9f0 +// CHECK:STDOUT: %X => constants.%X // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @AnyParam(constants.%GenericInterface.type.cd1, constants.%GenericInterface.generic) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%GenericInterface.type.cd1 -// CHECK:STDOUT: %X => constants.%GenericInterface.generic // CHECK:STDOUT: %pattern_type => constants.%pattern_type.ed9 +// CHECK:STDOUT: %X.patt => constants.%X.patt.ff8 +// CHECK:STDOUT: %X => constants.%GenericInterface.generic // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } @@ -1887,6 +1999,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self => constants.%Self.aff // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.59a // CHECK:STDOUT: %pattern_type => constants.%pattern_type.615 +// CHECK:STDOUT: %self.param_patt => constants.%self.param_patt.f96 +// CHECK:STDOUT: %self.patt => constants.%self.patt.871 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Y.WithSelf(constants.%Y.facet) { @@ -1900,6 +2014,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self => constants.%Y.facet // CHECK:STDOUT: %Self.as_type => constants.%AnyParam.591 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.f0f +// CHECK:STDOUT: %self.param_patt => constants.%self.param_patt.93d +// CHECK:STDOUT: %self.patt => constants.%self.patt.cdd // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- use_generic_interface_as_param.carbon @@ -1915,14 +2031,21 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %X: %T = symbolic_binding X, 1 [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %X.patt.9f0: %pattern_type.51d = symbolic_binding_pattern X, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %GenericInterface.type.cd1: type = generic_interface_type @GenericInterface [concrete] // CHECK:STDOUT: %GenericInterface.generic: %GenericInterface.type.cd1 = struct_value () [concrete] // CHECK:STDOUT: %U: type = symbolic_binding U, 0 [symbolic] // CHECK:STDOUT: %GenericInterface.type.48f: type = facet_type <@GenericInterface, @GenericInterface(%U)> [symbolic] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %Self.d44: %GenericInterface.type.48f = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %pattern_type.ed9: type = pattern_type %GenericInterface.type.cd1 [concrete] +// CHECK:STDOUT: %X.patt.ff8: %pattern_type.ed9 = symbolic_binding_pattern X, 1 [symbolic] // CHECK:STDOUT: %AnyParam.591: type = class_type @AnyParam, @AnyParam(%GenericInterface.type.cd1, %GenericInterface.generic) [concrete] // CHECK:STDOUT: %pattern_type.f0f: type = pattern_type %AnyParam.591 [concrete] +// CHECK:STDOUT: %obj.patt: %pattern_type.f0f = ref_binding_pattern obj [concrete] +// CHECK:STDOUT: %obj.var_patt: %pattern_type.f0f = var_pattern %obj.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %AnyParam.val: %AnyParam.591 = struct_value () [concrete] // CHECK:STDOUT: %Y.type: type = facet_type <@Y> [concrete] @@ -1931,6 +2054,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Y.WithSelf.K.d2d: %Y.WithSelf.K.type.977 = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type.59a: type = facet_access_type %Self.aff [symbolic] // CHECK:STDOUT: %pattern_type.615: type = pattern_type %Self.as_type.59a [symbolic] +// CHECK:STDOUT: %self.param_patt.f96: %pattern_type.615 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.871: %pattern_type.615 = at_binding_pattern self, %self.param_patt.f96 [symbolic] // CHECK:STDOUT: %require_complete: = require_complete_type %Self.as_type.59a [symbolic] // CHECK:STDOUT: %Y.assoc_type: type = assoc_entity_type @Y [concrete] // CHECK:STDOUT: %assoc0.970: %Y.assoc_type = assoc_entity element0, imports.%PackageHasParam.import_ref.ee7 [concrete] @@ -1997,6 +2122,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @GenericInterface(imports.%PackageGenericInterface.import_ref.b3bc94.2: type) [from "has_generic_interface.carbon"] { +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt (constants.%U.patt)] // CHECK:STDOUT: %U: type = symbolic_binding U, 0 [symbolic = %U (constants.%U)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -2027,9 +2153,11 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @AnyParam(imports.%PackageHasParam.import_ref.b3b: type, imports.%PackageHasParam.import_ref.b42: @AnyParam.%T (%T)) [from "has_param.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %X: @AnyParam.%T (%T) = symbolic_binding X, 1 [symbolic = %X (constants.%X)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.51d)] +// CHECK:STDOUT: %X.patt: @AnyParam.%pattern_type (%pattern_type.51d) = symbolic_binding_pattern X, 1 [symbolic = %X.patt (constants.%X.patt.9f0)] +// CHECK:STDOUT: %X: @AnyParam.%T (%T) = symbolic_binding X, 1 [symbolic = %X (constants.%X)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -2044,8 +2172,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: fn @M() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %obj.patt: %pattern_type.f0f = ref_binding_pattern obj [concrete] -// CHECK:STDOUT: %obj.var_patt: %pattern_type.f0f = var_pattern %obj.patt [concrete] +// CHECK:STDOUT: %obj.patt: %pattern_type.f0f = ref_binding_pattern obj [concrete = constants.%obj.patt] +// CHECK:STDOUT: %obj.var_patt: %pattern_type.f0f = var_pattern %obj.patt [concrete = constants.%obj.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %obj.var: ref %AnyParam.591 = var %obj.var_patt // CHECK:STDOUT: %.loc9_50.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] @@ -2077,6 +2205,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self: %Y.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.aff)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.59a)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.615)] +// CHECK:STDOUT: %self.param_patt: @Y.WithSelf.K.%pattern_type (%pattern_type.615) = value_param_pattern [symbolic = %self.param_patt (constants.%self.param_patt.f96)] +// CHECK:STDOUT: %self.patt: @Y.WithSelf.K.%pattern_type (%pattern_type.615) = at_binding_pattern self, %self.param_patt [symbolic = %self.patt (constants.%self.patt.871)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %Self.as_type [symbolic = %require_complete (constants.%require_complete)] @@ -2094,21 +2224,26 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @AnyParam(constants.%T, constants.%X) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %X => constants.%X // CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d +// CHECK:STDOUT: %X.patt => constants.%X.patt.9f0 +// CHECK:STDOUT: %X => constants.%X // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @GenericInterface(constants.%U) { +// CHECK:STDOUT: %U.patt => constants.%U.patt // CHECK:STDOUT: %U => constants.%U // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @GenericInterface.WithSelf(constants.%U, constants.%Self.d44) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @AnyParam(constants.%GenericInterface.type.cd1, constants.%GenericInterface.generic) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%GenericInterface.type.cd1 -// CHECK:STDOUT: %X => constants.%GenericInterface.generic // CHECK:STDOUT: %pattern_type => constants.%pattern_type.ed9 +// CHECK:STDOUT: %X.patt => constants.%X.patt.ff8 +// CHECK:STDOUT: %X => constants.%GenericInterface.generic // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } @@ -2124,6 +2259,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self => constants.%Self.aff // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.59a // CHECK:STDOUT: %pattern_type => constants.%pattern_type.615 +// CHECK:STDOUT: %self.param_patt => constants.%self.param_patt.f96 +// CHECK:STDOUT: %self.patt => constants.%self.patt.871 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Y.WithSelf(constants.%Y.facet) { @@ -2139,6 +2276,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %U: type = symbolic_binding U, 0 [symbolic] // CHECK:STDOUT: %GenericClass.type: type = generic_class_type @GenericClass [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -2151,7 +2289,10 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %X: %T = symbolic_binding X, 1 [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %X.patt.9f0: %pattern_type.51d = symbolic_binding_pattern X, 1 [symbolic] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %pattern_type.399: type = pattern_type %GenericClass.type [concrete] +// CHECK:STDOUT: %X.patt.036: %pattern_type.399 = symbolic_binding_pattern X, 1 [symbolic] // CHECK:STDOUT: %AnyParam.21c: type = class_type @AnyParam, @AnyParam(%GenericClass.type, %GenericClass.generic) [concrete] // CHECK:STDOUT: %Y.type: type = facet_type <@Y> [concrete] // CHECK:STDOUT: %Self.aff: %Y.type = symbolic_binding Self, 0 [symbolic] @@ -2159,9 +2300,13 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Y.WithSelf.K.d2d: %Y.WithSelf.K.type.977 = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type.59a: type = facet_access_type %Self.aff [symbolic] // CHECK:STDOUT: %pattern_type.615: type = pattern_type %Self.as_type.59a [symbolic] +// CHECK:STDOUT: %self.param_patt.f96: %pattern_type.615 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.871: %pattern_type.615 = at_binding_pattern self, %self.param_patt.f96 [symbolic] // CHECK:STDOUT: %require_complete: = require_complete_type %Self.as_type.59a [symbolic] // CHECK:STDOUT: %Y.impl_witness: = impl_witness @AnyParam.as.Y.impl.%Y.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.005: type = pattern_type %AnyParam.21c [concrete] +// CHECK:STDOUT: %self.param_patt.e35: %pattern_type.005 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.f3a: %pattern_type.005 = at_binding_pattern self, %self.param_patt.e35 [concrete] // CHECK:STDOUT: %AnyParam.as.Y.impl.K.type: type = fn_type @AnyParam.as.Y.impl.K [concrete] // CHECK:STDOUT: %AnyParam.as.Y.impl.K: %AnyParam.as.Y.impl.K.type = struct_value () [concrete] // CHECK:STDOUT: %Y.facet: %Y.type = facet_value %AnyParam.21c, (%Y.impl_witness) [concrete] @@ -2169,6 +2314,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Y.WithSelf.K.658: %Y.WithSelf.K.type.020 = struct_value () [concrete] // CHECK:STDOUT: %L.type: type = fn_type @L [concrete] // CHECK:STDOUT: %L: %L.type = struct_value () [concrete] +// CHECK:STDOUT: %obj.patt: %pattern_type.005 = ref_binding_pattern obj [concrete] +// CHECK:STDOUT: %obj.var_patt: %pattern_type.005 = var_pattern %obj.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %AnyParam.val: %AnyParam.21c = struct_value () [concrete] // CHECK:STDOUT: %Y.assoc_type: type = assoc_entity_type @Y [concrete] @@ -2214,7 +2361,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %PackageHasParam.import = import PackageHasParam // CHECK:STDOUT: %GenericClass.decl: %GenericClass.type = class_decl @GenericClass [concrete = constants.%GenericClass.generic] { -// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [concrete] +// CHECK:STDOUT: %U.patt.loc6_21.1: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc6_21.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6_24.1: type = splice_block %.loc6_24.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -2244,8 +2391,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: // CHECK:STDOUT: impl @AnyParam.as.Y.impl: %AnyParam as %Y.ref { // CHECK:STDOUT: %AnyParam.as.Y.impl.K.decl: %AnyParam.as.Y.impl.K.type = fn_decl @AnyParam.as.Y.impl.K [concrete = constants.%AnyParam.as.Y.impl.K] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.005 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.005 = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.005 = value_param_pattern [concrete = constants.%self.param_patt.e35] +// CHECK:STDOUT: %self.patt: %pattern_type.005 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.f3a] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %AnyParam.21c = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @AnyParam.as.Y.impl.%AnyParam [concrete = constants.%AnyParam.21c] @@ -2261,6 +2408,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @GenericClass(%U.loc6_21.2: type) { +// CHECK:STDOUT: %U.patt.loc6_21.2: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc6_21.2 (constants.%U.patt)] // CHECK:STDOUT: %U.loc6_21.1: type = symbolic_binding U, 0 [symbolic = %U.loc6_21.1 (constants.%U)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -2275,9 +2423,11 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @AnyParam(imports.%PackageHasParam.import_ref.b3b: type, imports.%PackageHasParam.import_ref.b42: @AnyParam.%T (%T)) [from "has_param.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %X: @AnyParam.%T (%T) = symbolic_binding X, 1 [symbolic = %X (constants.%X)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.51d)] +// CHECK:STDOUT: %X.patt: @AnyParam.%pattern_type (%pattern_type.51d) = symbolic_binding_pattern X, 1 [symbolic = %X.patt (constants.%X.patt.9f0)] +// CHECK:STDOUT: %X: @AnyParam.%T (%T) = symbolic_binding X, 1 [symbolic = %X (constants.%X)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -2293,6 +2443,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self: %Y.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.aff)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.59a)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.615)] +// CHECK:STDOUT: %self.param_patt: @Y.WithSelf.K.%pattern_type (%pattern_type.615) = value_param_pattern [symbolic = %self.param_patt (constants.%self.param_patt.f96)] +// CHECK:STDOUT: %self.patt: @Y.WithSelf.K.%pattern_type (%pattern_type.615) = at_binding_pattern self, %self.param_patt [symbolic = %self.patt (constants.%self.patt.871)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %Self.as_type [symbolic = %require_complete (constants.%require_complete)] @@ -2308,8 +2460,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: fn @L() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %obj.patt: %pattern_type.005 = ref_binding_pattern obj [concrete] -// CHECK:STDOUT: %obj.var_patt: %pattern_type.005 = var_pattern %obj.patt [concrete] +// CHECK:STDOUT: %obj.patt: %pattern_type.005 = ref_binding_pattern obj [concrete = constants.%obj.patt] +// CHECK:STDOUT: %obj.var_patt: %pattern_type.005 = var_pattern %obj.patt [concrete = constants.%obj.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %obj.var: ref %AnyParam.21c = var %obj.var_patt // CHECK:STDOUT: %.loc13_54.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] @@ -2344,19 +2496,24 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @GenericClass(constants.%U) { +// CHECK:STDOUT: %U.patt.loc6_21.2 => constants.%U.patt // CHECK:STDOUT: %U.loc6_21.1 => constants.%U // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @AnyParam(constants.%T, constants.%X) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %X => constants.%X // CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d +// CHECK:STDOUT: %X.patt => constants.%X.patt.9f0 +// CHECK:STDOUT: %X => constants.%X // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @AnyParam(constants.%GenericClass.type, constants.%GenericClass.generic) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%GenericClass.type -// CHECK:STDOUT: %X => constants.%GenericClass.generic // CHECK:STDOUT: %pattern_type => constants.%pattern_type.399 +// CHECK:STDOUT: %X.patt => constants.%X.patt.036 +// CHECK:STDOUT: %X => constants.%GenericClass.generic // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } @@ -2372,6 +2529,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self => constants.%Self.aff // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.59a // CHECK:STDOUT: %pattern_type => constants.%pattern_type.615 +// CHECK:STDOUT: %self.param_patt => constants.%self.param_patt.f96 +// CHECK:STDOUT: %self.patt => constants.%self.patt.871 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Y.WithSelf(constants.%Y.facet) { @@ -2385,6 +2544,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self => constants.%Y.facet // CHECK:STDOUT: %Self.as_type => constants.%AnyParam.21c // CHECK:STDOUT: %pattern_type => constants.%pattern_type.005 +// CHECK:STDOUT: %self.param_patt => constants.%self.param_patt.e35 +// CHECK:STDOUT: %self.patt => constants.%self.patt.f3a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- use_generic_class_as_param.carbon @@ -2400,12 +2561,19 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %X: %T = symbolic_binding X, 1 [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %X.patt.9f0: %pattern_type.51d = symbolic_binding_pattern X, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %GenericClass.type: type = generic_class_type @GenericClass [concrete] // CHECK:STDOUT: %GenericClass.generic: %GenericClass.type = struct_value () [concrete] // CHECK:STDOUT: %U: type = symbolic_binding U, 0 [symbolic] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %pattern_type.399: type = pattern_type %GenericClass.type [concrete] +// CHECK:STDOUT: %X.patt.036: %pattern_type.399 = symbolic_binding_pattern X, 1 [symbolic] // CHECK:STDOUT: %AnyParam.21c: type = class_type @AnyParam, @AnyParam(%GenericClass.type, %GenericClass.generic) [concrete] // CHECK:STDOUT: %pattern_type.005: type = pattern_type %AnyParam.21c [concrete] +// CHECK:STDOUT: %obj.patt: %pattern_type.005 = ref_binding_pattern obj [concrete] +// CHECK:STDOUT: %obj.var_patt: %pattern_type.005 = var_pattern %obj.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %AnyParam.val: %AnyParam.21c = struct_value () [concrete] // CHECK:STDOUT: %Y.type: type = facet_type <@Y> [concrete] @@ -2414,6 +2582,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Y.WithSelf.K.d2d: %Y.WithSelf.K.type.977 = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type.59a: type = facet_access_type %Self.aff [symbolic] // CHECK:STDOUT: %pattern_type.615: type = pattern_type %Self.as_type.59a [symbolic] +// CHECK:STDOUT: %self.param_patt.f96: %pattern_type.615 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.871: %pattern_type.615 = at_binding_pattern self, %self.param_patt.f96 [symbolic] // CHECK:STDOUT: %require_complete: = require_complete_type %Self.as_type.59a [symbolic] // CHECK:STDOUT: %Y.assoc_type: type = assoc_entity_type @Y [concrete] // CHECK:STDOUT: %assoc0.970: %Y.assoc_type = assoc_entity element0, imports.%PackageHasParam.import_ref.ee7 [concrete] @@ -2495,9 +2665,11 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @AnyParam(imports.%PackageHasParam.import_ref.b3b: type, imports.%PackageHasParam.import_ref.b42: @AnyParam.%T (%T)) [from "has_param.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %X: @AnyParam.%T (%T) = symbolic_binding X, 1 [symbolic = %X (constants.%X)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.51d)] +// CHECK:STDOUT: %X.patt: @AnyParam.%pattern_type (%pattern_type.51d) = symbolic_binding_pattern X, 1 [symbolic = %X.patt (constants.%X.patt.9f0)] +// CHECK:STDOUT: %X: @AnyParam.%T (%T) = symbolic_binding X, 1 [symbolic = %X (constants.%X)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -2510,6 +2682,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @GenericClass(imports.%PackageGenericClass.import_ref.b3b: type) [from "has_generic_class.carbon"] { +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt (constants.%U.patt)] // CHECK:STDOUT: %U: type = symbolic_binding U, 0 [symbolic = %U (constants.%U)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -2525,8 +2698,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: fn @M() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %obj.patt: %pattern_type.005 = ref_binding_pattern obj [concrete] -// CHECK:STDOUT: %obj.var_patt: %pattern_type.005 = var_pattern %obj.patt [concrete] +// CHECK:STDOUT: %obj.patt: %pattern_type.005 = ref_binding_pattern obj [concrete = constants.%obj.patt] +// CHECK:STDOUT: %obj.var_patt: %pattern_type.005 = var_pattern %obj.patt [concrete = constants.%obj.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %obj.var: ref %AnyParam.21c = var %obj.var_patt // CHECK:STDOUT: %.loc8_74.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] @@ -2558,6 +2731,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self: %Y.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.aff)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.59a)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.615)] +// CHECK:STDOUT: %self.param_patt: @Y.WithSelf.K.%pattern_type (%pattern_type.615) = value_param_pattern [symbolic = %self.param_patt (constants.%self.param_patt.f96)] +// CHECK:STDOUT: %self.patt: @Y.WithSelf.K.%pattern_type (%pattern_type.615) = at_binding_pattern self, %self.param_patt [symbolic = %self.patt (constants.%self.patt.871)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %Self.as_type [symbolic = %require_complete (constants.%require_complete)] @@ -2575,19 +2750,24 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @AnyParam(constants.%T, constants.%X) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %X => constants.%X // CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d +// CHECK:STDOUT: %X.patt => constants.%X.patt.9f0 +// CHECK:STDOUT: %X => constants.%X // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @GenericClass(constants.%U) { +// CHECK:STDOUT: %U.patt => constants.%U.patt // CHECK:STDOUT: %U => constants.%U // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @AnyParam(constants.%GenericClass.type, constants.%GenericClass.generic) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%GenericClass.type -// CHECK:STDOUT: %X => constants.%GenericClass.generic // CHECK:STDOUT: %pattern_type => constants.%pattern_type.399 +// CHECK:STDOUT: %X.patt => constants.%X.patt.036 +// CHECK:STDOUT: %X => constants.%GenericClass.generic // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } @@ -2603,6 +2783,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self => constants.%Self.aff // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.59a // CHECK:STDOUT: %pattern_type => constants.%pattern_type.615 +// CHECK:STDOUT: %self.param_patt => constants.%self.param_patt.f96 +// CHECK:STDOUT: %self.patt => constants.%self.patt.871 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Y.WithSelf(constants.%Y.facet) { @@ -2634,6 +2816,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] @@ -2644,6 +2827,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self.155: %I.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.155 [symbolic] // CHECK:STDOUT: %pattern_type.919: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt.620: %pattern_type.919 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.a65: %pattern_type.919 = at_binding_pattern self, %self.param_patt.620 [symbolic] // CHECK:STDOUT: %I.WithSelf.F.type.e1c: type = fn_type @I.WithSelf.F, @I.WithSelf(%Self.155) [symbolic] // CHECK:STDOUT: %I.WithSelf.F.1a7: %I.WithSelf.F.type.e1c = struct_value () [symbolic] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] @@ -2654,6 +2839,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %C.279: type = class_type @C, @C(%tuple.type.d47) [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness @C.as.I.impl.%I.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.881: type = pattern_type %C.279 [concrete] +// CHECK:STDOUT: %self.param_patt.76e: %pattern_type.881 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.a54: %pattern_type.881 = at_binding_pattern self, %self.param_patt.76e [concrete] // CHECK:STDOUT: %C.as.I.impl.F.type: type = fn_type @C.as.I.impl.F [concrete] // CHECK:STDOUT: %C.as.I.impl.F: %C.as.I.impl.F.type = struct_value () [concrete] // CHECK:STDOUT: %I.facet: %I.type = facet_value %C.279, (%I.impl_witness) [concrete] @@ -2692,7 +2879,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Extra7.decl: type = interface_decl @Extra7 [concrete = constants.%Extra7.type] {} {} // CHECK:STDOUT: %Extra8.decl: type = interface_decl @Extra8 [concrete = constants.%Extra8.type] {} {} // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc13_10.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_10.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc13_13.1: type = splice_block %.loc13_13.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -2812,8 +2999,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %I.WithSelf.F.decl: @I.WithSelf.%I.WithSelf.F.type (%I.WithSelf.F.type.e1c) = fn_decl @I.WithSelf.F [symbolic = @I.WithSelf.%I.WithSelf.F (constants.%I.WithSelf.F.1a7)] { -// CHECK:STDOUT: %self.param_patt: @I.WithSelf.F.%pattern_type (%pattern_type.919) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @I.WithSelf.F.%pattern_type (%pattern_type.919) = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc14_20.1: @I.WithSelf.F.%pattern_type (%pattern_type.919) = value_param_pattern [symbolic = %self.param_patt.loc14_20.2 (constants.%self.param_patt.620)] +// CHECK:STDOUT: %self.patt.loc14_20.1: @I.WithSelf.F.%pattern_type (%pattern_type.919) = at_binding_pattern self, %self.param_patt.loc14_20.1 [symbolic = %self.patt.loc14_20.2 (constants.%self.patt.a65)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @I.WithSelf.F.%Self.as_type.loc14_20.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc14_20.1: type = splice_block %.loc14_20.2 [symbolic = %Self.as_type.loc14_20.1 (constants.%Self.as_type)] { @@ -2835,8 +3022,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.I.impl: %C as %I.ref { // CHECK:STDOUT: %C.as.I.impl.F.decl: %C.as.I.impl.F.type = fn_decl @C.as.I.impl.F [concrete = constants.%C.as.I.impl.F] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.881 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.881 = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.881 = value_param_pattern [concrete = constants.%self.param_patt.76e] +// CHECK:STDOUT: %self.patt: %pattern_type.881 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.a54] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %C.279 = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @C.as.I.impl.%C [concrete = constants.%C.279] @@ -2852,6 +3039,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc13_10.2: type) { +// CHECK:STDOUT: %T.patt.loc13_10.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_10.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc13_10.1: type = symbolic_binding T, 0 [symbolic = %T.loc13_10.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -2869,6 +3057,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.155)] // CHECK:STDOUT: %Self.as_type.loc14_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc14_20.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc14_20.1 [symbolic = %pattern_type (constants.%pattern_type.919)] +// CHECK:STDOUT: %self.param_patt.loc14_20.2: @I.WithSelf.F.%pattern_type (%pattern_type.919) = value_param_pattern [symbolic = %self.param_patt.loc14_20.2 (constants.%self.param_patt.620)] +// CHECK:STDOUT: %self.patt.loc14_20.2: @I.WithSelf.F.%pattern_type (%pattern_type.919) = at_binding_pattern self, %self.param_patt.loc14_20.2 [symbolic = %self.patt.loc14_20.2 (constants.%self.patt.a65)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @I.WithSelf.F.%Self.as_type.loc14_20.1 (%Self.as_type)); // CHECK:STDOUT: } @@ -2895,6 +3085,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: specific @Extra8.WithSelf(constants.%Self.345) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%T) { +// CHECK:STDOUT: %T.patt.loc13_10.2 => constants.%T.patt // CHECK:STDOUT: %T.loc13_10.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -2909,9 +3100,12 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self => constants.%Self.155 // CHECK:STDOUT: %Self.as_type.loc14_20.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.919 +// CHECK:STDOUT: %self.param_patt.loc14_20.2 => constants.%self.param_patt.620 +// CHECK:STDOUT: %self.patt.loc14_20.2 => constants.%self.patt.a65 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%tuple.type.d47) { +// CHECK:STDOUT: %T.patt.loc13_10.2 => constants.%T.patt // CHECK:STDOUT: %T.loc13_10.1 => constants.%tuple.type.d47 // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -2928,6 +3122,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self => constants.%I.facet // CHECK:STDOUT: %Self.as_type.loc14_20.1 => constants.%C.279 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.881 +// CHECK:STDOUT: %self.param_patt.loc14_20.2 => constants.%self.param_patt.76e +// CHECK:STDOUT: %self.patt.loc14_20.2 => constants.%self.patt.a54 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_use_has_extra_interfaces.carbon @@ -2938,8 +3134,12 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %C.62c: type = class_type @C, @C(type) [concrete] // CHECK:STDOUT: %pattern_type.1fc: type = pattern_type %C.62c [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.1fc = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.1fc = at_binding_pattern c, %c.param_patt [concrete] // CHECK:STDOUT: %Test.type: type = fn_type @Test [concrete] // CHECK:STDOUT: %Test: %Test.type = struct_value () [concrete] // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] @@ -2948,6 +3148,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %I.WithSelf.F: %I.WithSelf.F.type = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.b29 [symbolic] // CHECK:STDOUT: %pattern_type.43d: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt: %pattern_type.43d = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt: %pattern_type.43d = at_binding_pattern self, %self.param_patt [symbolic] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] // CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, imports.%HasExtraInterfaces.import_ref.f85 [concrete] // CHECK:STDOUT: %Extra8.type: type = facet_type <@Extra8> [concrete] @@ -3012,8 +3214,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %HasExtraInterfaces.import = import HasExtraInterfaces // CHECK:STDOUT: %Test.decl: %Test.type = fn_decl @Test [concrete = constants.%Test] { -// CHECK:STDOUT: %c.param_patt: %pattern_type.1fc = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.1fc = at_binding_pattern c, %c.param_patt [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.1fc = value_param_pattern [concrete = constants.%c.param_patt] +// CHECK:STDOUT: %c.patt: %pattern_type.1fc = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %C.62c = value_param call_param0 // CHECK:STDOUT: %.loc5_37: type = splice_block %C [concrete = constants.%C.62c] { @@ -3105,6 +3307,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(imports.%HasExtraInterfaces.import_ref.b3b: type) [from "has_extra_interfaces.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -3130,15 +3333,19 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.b29)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.43d)] +// CHECK:STDOUT: %self.param_patt: @I.WithSelf.F.%pattern_type (%pattern_type.43d) = value_param_pattern [symbolic = %self.param_patt (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt: @I.WithSelf.F.%pattern_type (%pattern_type.43d) = at_binding_pattern self, %self.param_patt [symbolic = %self.patt (constants.%self.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(type) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => type // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -3155,6 +3362,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self => constants.%Self.b29 // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.43d +// CHECK:STDOUT: %self.param_patt => constants.%self.param_patt +// CHECK:STDOUT: %self.patt => constants.%self.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Extra8.WithSelf(constants.%Self.5d6) {} @@ -3174,6 +3383,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: specific @Extra1.WithSelf(constants.%Self.e84) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%tuple.type) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%tuple.type // CHECK:STDOUT: // CHECK:STDOUT: !definition: diff --git a/toolchain/check/testdata/impl/lookup/instance_method.carbon b/toolchain/check/testdata/impl/lookup/instance_method.carbon index 695cc10e9d6a..39cd754daaa7 100644 --- a/toolchain/check/testdata/impl/lookup/instance_method.carbon +++ b/toolchain/check/testdata/impl/lookup/instance_method.carbon @@ -37,18 +37,24 @@ fn F(c: C) -> i32 { // CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] // CHECK:STDOUT: %pattern_type.c60: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt.a33: %pattern_type.c60 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.696: %pattern_type.c60 = at_binding_pattern self, %self.param_patt.a33 [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: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] // CHECK:STDOUT: %I.WithSelf.F.type.dcc: type = fn_type @I.WithSelf.F, @I.WithSelf(%Self) [symbolic] // CHECK:STDOUT: %I.WithSelf.F.ec6: %I.WithSelf.F.type.dcc = struct_value () [symbolic] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] // CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, @I.WithSelf.%I.WithSelf.F.decl [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness @C.as.I.impl.%I.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %self.param_patt.303: %pattern_type.98b = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.49a: %pattern_type.98b = at_binding_pattern self, %self.param_patt.303 [concrete] // CHECK:STDOUT: %C.as.I.impl.F.type: type = fn_type @C.as.I.impl.F [concrete] // CHECK:STDOUT: %C.as.I.impl.F: %C.as.I.impl.F.type = struct_value () [concrete] // CHECK:STDOUT: %I.facet: %I.type = facet_value %C, (%I.impl_witness) [concrete] @@ -56,6 +62,8 @@ fn F(c: C) -> i32 { // CHECK:STDOUT: %I.WithSelf.F.513: %I.WithSelf.F.type.064 = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.98b = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = at_binding_pattern c, %c.param_patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %type: type = facet_type [concrete] @@ -86,10 +94,10 @@ fn F(c: C) -> i32 { // CHECK:STDOUT: %I.decl: type = interface_decl @I [concrete = constants.%I.type] {} {} // CHECK:STDOUT: %C.decl.loc21: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %c.param_patt: %pattern_type.98b = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.98b = at_binding_pattern c, %c.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.98b = value_param_pattern [concrete = constants.%c.param_patt] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc27: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -107,10 +115,10 @@ fn F(c: C) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %I.WithSelf.F.decl: @I.WithSelf.%I.WithSelf.F.type (%I.WithSelf.F.type.dcc) = fn_decl @I.WithSelf.F [symbolic = @I.WithSelf.%I.WithSelf.F (constants.%I.WithSelf.F.ec6)] { -// CHECK:STDOUT: %self.param_patt: @I.WithSelf.F.%pattern_type (%pattern_type.c60) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @I.WithSelf.F.%pattern_type (%pattern_type.c60) = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %self.param_patt.loc18_8.1: @I.WithSelf.F.%pattern_type (%pattern_type.c60) = value_param_pattern [symbolic = %self.param_patt.loc18_8.2 (constants.%self.param_patt.a33)] +// CHECK:STDOUT: %self.patt.loc18_8.1: @I.WithSelf.F.%pattern_type (%pattern_type.c60) = at_binding_pattern self, %self.param_patt.loc18_8.1 [symbolic = %self.patt.loc18_8.2 (constants.%self.patt.696)] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc18_17: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -136,10 +144,10 @@ fn F(c: C) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.I.impl: %Self.ref as %I.ref { // CHECK:STDOUT: %C.as.I.impl.F.decl: %C.as.I.impl.F.type = fn_decl @C.as.I.impl.F [concrete = constants.%C.as.I.impl.F] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.98b = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.98b = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.98b = value_param_pattern [concrete = constants.%self.param_patt.303] +// CHECK:STDOUT: %self.patt: %pattern_type.98b = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.49a] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc23: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -177,6 +185,8 @@ fn F(c: C) -> i32 { // CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc18_8.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc18_8.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc18_8.1 [symbolic = %pattern_type (constants.%pattern_type.c60)] +// CHECK:STDOUT: %self.param_patt.loc18_8.2: @I.WithSelf.F.%pattern_type (%pattern_type.c60) = value_param_pattern [symbolic = %self.param_patt.loc18_8.2 (constants.%self.param_patt.a33)] +// CHECK:STDOUT: %self.patt.loc18_8.2: @I.WithSelf.F.%pattern_type (%pattern_type.c60) = at_binding_pattern self, %self.param_patt.loc18_8.2 [symbolic = %self.patt.loc18_8.2 (constants.%self.patt.696)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @I.WithSelf.F.%Self.as_type.loc18_8.1 (%Self.as_type)) -> out %return.param: %i32; // CHECK:STDOUT: } @@ -204,6 +214,8 @@ fn F(c: C) -> i32 { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc18_8.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.c60 +// CHECK:STDOUT: %self.param_patt.loc18_8.2 => constants.%self.param_patt.a33 +// CHECK:STDOUT: %self.patt.loc18_8.2 => constants.%self.patt.696 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I.WithSelf(constants.%I.facet) { @@ -217,6 +229,8 @@ fn F(c: C) -> i32 { // CHECK:STDOUT: %Self => constants.%I.facet // CHECK:STDOUT: %Self.as_type.loc18_8.1 => constants.%C // CHECK:STDOUT: %pattern_type => constants.%pattern_type.98b +// CHECK:STDOUT: %self.param_patt.loc18_8.2 => constants.%self.param_patt.303 +// CHECK:STDOUT: %self.patt.loc18_8.2 => constants.%self.patt.49a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I.WithSelf(constants.%C.type.facet) { diff --git a/toolchain/check/testdata/impl/lookup/lookup_interface_with_enclosing_generic_inside_rewrite_constraint.carbon b/toolchain/check/testdata/impl/lookup/lookup_interface_with_enclosing_generic_inside_rewrite_constraint.carbon index 237c9e23ae1e..d3b852a2f360 100644 --- a/toolchain/check/testdata/impl/lookup/lookup_interface_with_enclosing_generic_inside_rewrite_constraint.carbon +++ b/toolchain/check/testdata/impl/lookup/lookup_interface_with_enclosing_generic_inside_rewrite_constraint.carbon @@ -106,6 +106,7 @@ fn F() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self.c39: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %OuterParam.patt: %pattern_type.98f = symbolic_binding_pattern OuterParam, 0 [symbolic] // CHECK:STDOUT: %OuterParam: type = symbolic_binding OuterParam, 0 [symbolic] // CHECK:STDOUT: %Outer.type: type = generic_class_type @Outer [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -123,6 +124,7 @@ fn F() { // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %Y_where.type.e36: type = facet_type <@Y, @Y(%OuterParam) where %impl.elem0.231 = %empty_tuple.type> [symbolic] // CHECK:STDOUT: %pattern_type.afd: type = pattern_type %Y_where.type.e36 [symbolic] +// CHECK:STDOUT: %H.patt.d84: %pattern_type.afd = symbolic_binding_pattern H, 1 [symbolic] // CHECK:STDOUT: %H: %Y_where.type.e36 = symbolic_binding H, 1 [symbolic] // CHECK:STDOUT: %Outer.G.type.744: type = fn_type @Outer.G, @Outer(%OuterParam) [symbolic] // CHECK:STDOUT: %Outer.G.2ce: %Outer.G.type.744 = struct_value () [symbolic] @@ -148,6 +150,7 @@ fn F() { // CHECK:STDOUT: %facet_value: %Y_where.type.84c = facet_value %C, (%Y.impl_witness) [concrete] // CHECK:STDOUT: %complete_type.002: = complete_type_witness %Y.type.1f7 [concrete] // CHECK:STDOUT: %pattern_type.27b: type = pattern_type %Y_where.type.84c [concrete] +// CHECK:STDOUT: %H.patt.5a1: %pattern_type.27b = symbolic_binding_pattern H, 1 [symbolic] // CHECK:STDOUT: %Outer.G.specific_fn: = specific_function %Outer.G.49b, @Outer.G(%empty_tuple.type, %facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -167,7 +170,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Outer.decl: %Outer.type = class_decl @Outer [concrete = constants.%Outer.generic] { -// CHECK:STDOUT: %OuterParam.patt: %pattern_type.98f = symbolic_binding_pattern OuterParam, 0 [concrete] +// CHECK:STDOUT: %OuterParam.patt.loc49_23.1: %pattern_type.98f = symbolic_binding_pattern OuterParam, 0 [symbolic = %OuterParam.patt.loc49_23.2 (constants.%OuterParam.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc49_26.1: type = splice_block %.loc49_26.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.c39] @@ -236,6 +239,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Outer(%OuterParam.loc49_23.2: type) { +// CHECK:STDOUT: %OuterParam.patt.loc49_23.2: %pattern_type.98f = symbolic_binding_pattern OuterParam, 0 [symbolic = %OuterParam.patt.loc49_23.2 (constants.%OuterParam.patt)] // CHECK:STDOUT: %OuterParam.loc49_23.1: type = symbolic_binding OuterParam, 0 [symbolic = %OuterParam.loc49_23.1 (constants.%OuterParam)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -246,7 +250,7 @@ fn F() { // CHECK:STDOUT: class { // CHECK:STDOUT: %Y.decl: type = interface_decl @Y [symbolic = @Outer.%Y.type (constants.%Y.type.d63)] {} {} // CHECK:STDOUT: %Outer.G.decl: @Outer.%Outer.G.type (%Outer.G.type.744) = fn_decl @Outer.G [symbolic = @Outer.%Outer.G (constants.%Outer.G.2ce)] { -// CHECK:STDOUT: %H.patt: @Outer.G.%pattern_type (%pattern_type.afd) = symbolic_binding_pattern H, 1 [concrete] +// CHECK:STDOUT: %H.patt.loc54_16.1: @Outer.G.%pattern_type (%pattern_type.afd) = symbolic_binding_pattern H, 1 [symbolic = %H.patt.loc54_16.2 (constants.%H.patt.d84)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc54_21.1: type = splice_block %.loc54_21.2 [symbolic = %Y_where.type (constants.%Y_where.type.e36)] { // CHECK:STDOUT: %.Self.loc54_16: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.c39] @@ -291,8 +295,9 @@ fn F() { // CHECK:STDOUT: %Y.lookup_impl_witness: = lookup_impl_witness %.Self.loc54_21.1, @Y, @Y(%OuterParam) [symbolic = %Y.lookup_impl_witness (constants.%Y.lookup_impl_witness.593)] // CHECK:STDOUT: %impl.elem0.loc54_27.1: type = impl_witness_access %Y.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc54_27.1 (constants.%impl.elem0.231)] // CHECK:STDOUT: %Y_where.type: type = facet_type <@Y, @Y(%OuterParam) where %impl.elem0.loc54_27.1 = constants.%empty_tuple.type> [symbolic = %Y_where.type (constants.%Y_where.type.e36)] -// CHECK:STDOUT: %H.loc54_16.1: @Outer.G.%Y_where.type (%Y_where.type.e36) = symbolic_binding H, 1 [symbolic = %H.loc54_16.1 (constants.%H)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Y_where.type [symbolic = %pattern_type (constants.%pattern_type.afd)] +// CHECK:STDOUT: %H.patt.loc54_16.2: @Outer.G.%pattern_type (%pattern_type.afd) = symbolic_binding_pattern H, 1 [symbolic = %H.patt.loc54_16.2 (constants.%H.patt.d84)] +// CHECK:STDOUT: %H.loc54_16.1: @Outer.G.%Y_where.type (%Y_where.type.e36) = symbolic_binding H, 1 [symbolic = %H.loc54_16.1 (constants.%H)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -319,6 +324,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Outer(constants.%OuterParam) { +// CHECK:STDOUT: %OuterParam.patt.loc49_23.2 => constants.%OuterParam.patt // CHECK:STDOUT: %OuterParam.loc49_23.1 => constants.%OuterParam // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -359,11 +365,13 @@ fn F() { // CHECK:STDOUT: %Y.lookup_impl_witness => constants.%Y.lookup_impl_witness.593 // CHECK:STDOUT: %impl.elem0.loc54_27.1 => constants.%impl.elem0.231 // CHECK:STDOUT: %Y_where.type => constants.%Y_where.type.e36 -// CHECK:STDOUT: %H.loc54_16.1 => constants.%H // CHECK:STDOUT: %pattern_type => constants.%pattern_type.afd +// CHECK:STDOUT: %H.patt.loc54_16.2 => constants.%H.patt.d84 +// CHECK:STDOUT: %H.loc54_16.1 => constants.%H // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Outer(constants.%empty_tuple.type) { +// CHECK:STDOUT: %OuterParam.patt.loc49_23.2 => constants.%OuterParam.patt // CHECK:STDOUT: %OuterParam.loc49_23.1 => constants.%empty_tuple.type // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -411,8 +419,9 @@ fn F() { // CHECK:STDOUT: %Y.lookup_impl_witness => constants.%Y.lookup_impl_witness.25a // CHECK:STDOUT: %impl.elem0.loc54_27.1 => constants.%impl.elem0.765 // CHECK:STDOUT: %Y_where.type => constants.%Y_where.type.84c -// CHECK:STDOUT: %H.loc54_16.1 => constants.%facet_value // CHECK:STDOUT: %pattern_type => constants.%pattern_type.27b +// CHECK:STDOUT: %H.patt.loc54_16.2 => constants.%H.patt.5a1 +// CHECK:STDOUT: %H.loc54_16.1 => constants.%facet_value // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } @@ -427,6 +436,7 @@ fn F() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self.c39: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.f4f: type = pattern_type %Z1.type [concrete] +// CHECK:STDOUT: %OuterParam.patt: %pattern_type.f4f = symbolic_binding_pattern OuterParam, 0 [symbolic] // CHECK:STDOUT: %OuterParam: %Z1.type = symbolic_binding OuterParam, 0 [symbolic] // CHECK:STDOUT: %Outer.type: type = generic_class_type @Outer [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -444,6 +454,7 @@ fn F() { // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %Y_where.type.9b0: type = facet_type <@Y, @Y(%OuterParam) where %impl.elem0.231 = %empty_tuple.type> [symbolic] // CHECK:STDOUT: %pattern_type.68e: type = pattern_type %Y_where.type.9b0 [symbolic] +// CHECK:STDOUT: %H.patt.a60: %pattern_type.68e = symbolic_binding_pattern H, 1 [symbolic] // CHECK:STDOUT: %H: %Y_where.type.9b0 = symbolic_binding H, 1 [symbolic] // CHECK:STDOUT: %Outer.G.type.2cf: type = fn_type @Outer.G, @Outer(%OuterParam) [symbolic] // CHECK:STDOUT: %Outer.G.f56: %Outer.G.type.2cf = struct_value () [symbolic] @@ -489,6 +500,7 @@ fn F() { // CHECK:STDOUT: %complete_type.8f5: = complete_type_witness %Y_where.type.948 [concrete] // CHECK:STDOUT: %facet_value.1c3: %Y_where.type.948 = facet_value %C.5e2, (%Y.impl_witness.056) [concrete] // CHECK:STDOUT: %pattern_type.4ae: type = pattern_type %Y_where.type.948 [concrete] +// CHECK:STDOUT: %H.patt.a2a: %pattern_type.4ae = symbolic_binding_pattern H, 1 [symbolic] // CHECK:STDOUT: %Outer.G.specific_fn: = specific_function %Outer.G.20a, @Outer.G(%Z1.facet, %facet_value.1c3) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -515,7 +527,7 @@ fn F() { // CHECK:STDOUT: %Z1.decl: type = interface_decl @Z1 [concrete = constants.%Z1.type] {} {} // CHECK:STDOUT: %Z2.decl: type = interface_decl @Z2 [concrete = constants.%Z2.type] {} {} // CHECK:STDOUT: %Outer.decl: %Outer.type = class_decl @Outer [concrete = constants.%Outer.generic] { -// CHECK:STDOUT: %OuterParam.patt: %pattern_type.f4f = symbolic_binding_pattern OuterParam, 0 [concrete] +// CHECK:STDOUT: %OuterParam.patt.loc6_23.1: %pattern_type.f4f = symbolic_binding_pattern OuterParam, 0 [symbolic = %OuterParam.patt.loc6_23.2 (constants.%OuterParam.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6: type = splice_block %Z1.ref [concrete = constants.%Z1.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.c39] @@ -629,6 +641,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Outer(%OuterParam.loc6_23.2: %Z1.type) { +// CHECK:STDOUT: %OuterParam.patt.loc6_23.2: %pattern_type.f4f = symbolic_binding_pattern OuterParam, 0 [symbolic = %OuterParam.patt.loc6_23.2 (constants.%OuterParam.patt)] // CHECK:STDOUT: %OuterParam.loc6_23.1: %Z1.type = symbolic_binding OuterParam, 0 [symbolic = %OuterParam.loc6_23.1 (constants.%OuterParam)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -640,7 +653,7 @@ fn F() { // CHECK:STDOUT: class { // CHECK:STDOUT: %Y.decl: type = interface_decl @Y [symbolic = @Outer.%Y.type (constants.%Y.type.6da)] {} {} // CHECK:STDOUT: %Outer.G.decl: @Outer.%Outer.G.type (%Outer.G.type.2cf) = fn_decl @Outer.G [symbolic = @Outer.%Outer.G (constants.%Outer.G.f56)] { -// CHECK:STDOUT: %H.patt: @Outer.G.%pattern_type (%pattern_type.68e) = symbolic_binding_pattern H, 1 [concrete] +// CHECK:STDOUT: %H.patt.loc11_16.1: @Outer.G.%pattern_type (%pattern_type.68e) = symbolic_binding_pattern H, 1 [symbolic = %H.patt.loc11_16.2 (constants.%H.patt.a60)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc11_21.1: type = splice_block %.loc11_21.2 [symbolic = %Y_where.type (constants.%Y_where.type.9b0)] { // CHECK:STDOUT: %.Self.loc11_16: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.c39] @@ -708,8 +721,9 @@ fn F() { // CHECK:STDOUT: %Y.lookup_impl_witness: = lookup_impl_witness %.Self.loc11_21.1, @Y, @Y(%OuterParam) [symbolic = %Y.lookup_impl_witness (constants.%Y.lookup_impl_witness.775)] // CHECK:STDOUT: %impl.elem0.loc11_27.1: type = impl_witness_access %Y.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc11_27.1 (constants.%impl.elem0.231)] // CHECK:STDOUT: %Y_where.type: type = facet_type <@Y, @Y(%OuterParam) where %impl.elem0.loc11_27.1 = constants.%empty_tuple.type> [symbolic = %Y_where.type (constants.%Y_where.type.9b0)] -// CHECK:STDOUT: %H.loc11_16.1: @Outer.G.%Y_where.type (%Y_where.type.9b0) = symbolic_binding H, 1 [symbolic = %H.loc11_16.1 (constants.%H)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Y_where.type [symbolic = %pattern_type (constants.%pattern_type.68e)] +// CHECK:STDOUT: %H.patt.loc11_16.2: @Outer.G.%pattern_type (%pattern_type.68e) = symbolic_binding_pattern H, 1 [symbolic = %H.patt.loc11_16.2 (constants.%H.patt.a60)] +// CHECK:STDOUT: %H.loc11_16.1: @Outer.G.%Y_where.type (%Y_where.type.9b0) = symbolic_binding H, 1 [symbolic = %H.loc11_16.1 (constants.%H)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -771,6 +785,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Outer(constants.%OuterParam) { +// CHECK:STDOUT: %OuterParam.patt.loc6_23.2 => constants.%OuterParam.patt // CHECK:STDOUT: %OuterParam.loc6_23.1 => constants.%OuterParam // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -812,8 +827,9 @@ fn F() { // CHECK:STDOUT: %Y.lookup_impl_witness => constants.%Y.lookup_impl_witness.775 // CHECK:STDOUT: %impl.elem0.loc11_27.1 => constants.%impl.elem0.231 // CHECK:STDOUT: %Y_where.type => constants.%Y_where.type.9b0 -// CHECK:STDOUT: %H.loc11_16.1 => constants.%H // CHECK:STDOUT: %pattern_type => constants.%pattern_type.68e +// CHECK:STDOUT: %H.patt.loc11_16.2 => constants.%H.patt.a60 +// CHECK:STDOUT: %H.loc11_16.1 => constants.%H // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%OuterParam) {} @@ -849,6 +865,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Outer(constants.%Z1.facet) { +// CHECK:STDOUT: %OuterParam.patt.loc6_23.2 => constants.%OuterParam.patt // CHECK:STDOUT: %OuterParam.loc6_23.1 => constants.%Z1.facet // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -903,8 +920,9 @@ fn F() { // CHECK:STDOUT: %Y.lookup_impl_witness => constants.%Y.lookup_impl_witness.e27 // CHECK:STDOUT: %impl.elem0.loc11_27.1 => constants.%impl.elem0.801 // CHECK:STDOUT: %Y_where.type => constants.%Y_where.type.948 -// CHECK:STDOUT: %H.loc11_16.1 => constants.%facet_value.1c3 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.4ae +// CHECK:STDOUT: %H.patt.loc11_16.2 => constants.%H.patt.a2a +// CHECK:STDOUT: %H.loc11_16.1 => constants.%facet_value.1c3 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/impl/lookup/specialization_with_symbolic_rewrite.carbon b/toolchain/check/testdata/impl/lookup/specialization_with_symbolic_rewrite.carbon index d322366fbf2a..e46a7dce5998 100644 --- a/toolchain/check/testdata/impl/lookup/specialization_with_symbolic_rewrite.carbon +++ b/toolchain/check/testdata/impl/lookup/specialization_with_symbolic_rewrite.carbon @@ -101,6 +101,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self.c39: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.d47: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Z.type.c39: type = generic_interface_type @Z [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -112,6 +113,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %S.patt: %pattern_type.98f = symbolic_binding_pattern S, 1 [symbolic] // CHECK:STDOUT: %S: type = symbolic_binding S, 1 [symbolic] // CHECK:STDOUT: %Z.type.78b: type = facet_type <@Z, @Z(%S)> [symbolic] // CHECK:STDOUT: %.Self.a97: %Z.type.78b = symbolic_binding .Self [symbolic] @@ -140,9 +142,12 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %require_complete.9f7: = require_complete_type %Z_where.type.18c [symbolic] // CHECK:STDOUT: %Z.facet.fa5: %Z.type.963 = facet_value %T.67d, (%Z.impl_witness.fc3) [symbolic] // CHECK:STDOUT: %pattern_type.d7e: type = pattern_type %Z.type.963 [concrete] +// CHECK:STDOUT: %T.patt.4cc: %pattern_type.d7e = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.4b3: %Z.type.963 = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T.4b3 [symbolic] // CHECK:STDOUT: %pattern_type.d37: type = pattern_type %T.as_type [symbolic] +// CHECK:STDOUT: %t.param_patt: %pattern_type.d37 = value_param_pattern [symbolic] +// CHECK:STDOUT: %t.patt: %pattern_type.d37 = at_binding_pattern t, %t.param_patt [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.df7: = require_complete_type %T.as_type [symbolic] @@ -150,6 +155,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %Z.impl_witness.597: = impl_witness @T.as.Z.impl.61e.%Z.impl_witness_table, @T.as.Z.impl.61e(%T.as_type) [symbolic] // CHECK:STDOUT: %require_complete.c7b: = require_complete_type %Z_where.type.c07 [symbolic] // CHECK:STDOUT: %.c6c: require_specific_def_type = require_specific_def @T.as.Z.impl.61e(%T.as_type) [symbolic] +// CHECK:STDOUT: %a.patt: %pattern_type.d37 = value_binding_pattern a [symbolic] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -168,7 +174,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Z.decl: %Z.type.c39 = interface_decl @Z [concrete = constants.%Z.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc3_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_14.2 (constants.%T.patt.d47)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc3_17.1: type = splice_block %.loc3_17.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.c39] @@ -178,8 +184,8 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: impl_decl @T.as.Z.impl.9ba [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %S.patt: %pattern_type.98f = symbolic_binding_pattern S, 1 [concrete] +// CHECK:STDOUT: %T.patt.loc9_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_15.2 (constants.%T.patt.d47)] +// CHECK:STDOUT: %S.patt.loc9_25.1: %pattern_type.98f = symbolic_binding_pattern S, 1 [symbolic = %S.patt.loc9_25.2 (constants.%S.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc9_15.1 [symbolic = %T.loc9_15.2 (constants.%T.67d)] // CHECK:STDOUT: %Z.ref: %Z.type.c39 = name_ref Z, file.%Z.decl [concrete = constants.%Z.generic] @@ -210,7 +216,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %S.loc9_25.1: type = symbolic_binding S, 1 [symbolic = %S.loc9_25.2 (constants.%S)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @T.as.Z.impl.61e [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc11_21.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_21.2 (constants.%T.patt.d47)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc11_30: type = name_ref T, %T.loc11_21.1 [symbolic = %T.loc11_21.2 (constants.%T.67d)] // CHECK:STDOUT: %Z.ref: %Z.type.c39 = name_ref Z, file.%Z.decl [concrete = constants.%Z.generic] @@ -235,9 +241,9 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %T.loc11_21.1: type = symbolic_binding T, 0 [symbolic = %T.loc11_21.2 (constants.%T.67d)] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type.d7e = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %t.param_patt: @F.%pattern_type (%pattern_type.d37) = value_param_pattern [concrete] -// CHECK:STDOUT: %t.patt: @F.%pattern_type (%pattern_type.d37) = at_binding_pattern t, %t.param_patt [concrete] +// CHECK:STDOUT: %T.patt.loc13_7.1: %pattern_type.d7e = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_7.2 (constants.%T.patt.4cc)] +// CHECK:STDOUT: %t.param_patt.loc13_17.1: @F.%pattern_type (%pattern_type.d37) = value_param_pattern [symbolic = %t.param_patt.loc13_17.2 (constants.%t.param_patt)] +// CHECK:STDOUT: %t.patt.loc13_17.1: @F.%pattern_type (%pattern_type.d37) = at_binding_pattern t, %t.param_patt.loc13_17.1 [symbolic = %t.patt.loc13_17.2 (constants.%t.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc13_13: type = splice_block %Z.type [concrete = constants.%Z.type.963] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.c39] @@ -257,6 +263,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Z(%T.loc3_14.2: type) { +// CHECK:STDOUT: %T.patt.loc3_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_14.2 (constants.%T.patt.d47)] // CHECK:STDOUT: %T.loc3_14.1: type = symbolic_binding T, 0 [symbolic = %T.loc3_14.1 (constants.%T.67d)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -282,7 +289,9 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @T.as.Z.impl.9ba(%T.loc9_15.1: type, %S.loc9_25.1: type) { +// CHECK:STDOUT: %T.patt.loc9_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_15.2 (constants.%T.patt.d47)] // CHECK:STDOUT: %T.loc9_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc9_15.2 (constants.%T.67d)] +// CHECK:STDOUT: %S.patt.loc9_25.2: %pattern_type.98f = symbolic_binding_pattern S, 1 [symbolic = %S.patt.loc9_25.2 (constants.%S.patt)] // CHECK:STDOUT: %S.loc9_25.2: type = symbolic_binding S, 1 [symbolic = %S.loc9_25.2 (constants.%S)] // CHECK:STDOUT: %Z.type.loc9_42.2: type = facet_type <@Z, @Z(%S.loc9_25.2)> [symbolic = %Z.type.loc9_42.2 (constants.%Z.type.78b)] // CHECK:STDOUT: %.Self.loc9_44.2: @T.as.Z.impl.9ba.%Z.type.loc9_42.2 (%Z.type.78b) = symbolic_binding .Self [symbolic = %.Self.loc9_44.2 (constants.%.Self.a97)] @@ -310,6 +319,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @T.as.Z.impl.61e(%T.loc11_21.1: type) { +// CHECK:STDOUT: %T.patt.loc11_21.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_21.2 (constants.%T.patt.d47)] // CHECK:STDOUT: %T.loc11_21.2: type = symbolic_binding T, 0 [symbolic = %T.loc11_21.2 (constants.%T.67d)] // CHECK:STDOUT: %Z_where.type: type = facet_type <@Z, @Z(constants.%C) where constants.%impl.elem0.9ca = %T.loc11_21.2> [symbolic = %Z_where.type (constants.%Z_where.type.18c)] // CHECK:STDOUT: %Z.impl_witness.loc11_53.2: = impl_witness %Z.impl_witness_table, @T.as.Z.impl.61e(%T.loc11_21.2) [symbolic = %Z.impl_witness.loc11_53.2 (constants.%Z.impl_witness.fc3)] @@ -337,18 +347,22 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc13_7.2: %Z.type.963) { +// CHECK:STDOUT: %T.patt.loc13_7.2: %pattern_type.d7e = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_7.2 (constants.%T.patt.4cc)] // CHECK:STDOUT: %T.loc13_7.1: %Z.type.963 = symbolic_binding T, 0 [symbolic = %T.loc13_7.1 (constants.%T.4b3)] // CHECK:STDOUT: %T.as_type.loc13_19.1: type = facet_access_type %T.loc13_7.1 [symbolic = %T.as_type.loc13_19.1 (constants.%T.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc13_19.1 [symbolic = %pattern_type (constants.%pattern_type.d37)] +// CHECK:STDOUT: %t.param_patt.loc13_17.2: @F.%pattern_type (%pattern_type.d37) = value_param_pattern [symbolic = %t.param_patt.loc13_17.2 (constants.%t.param_patt)] +// CHECK:STDOUT: %t.patt.loc13_17.2: @F.%pattern_type (%pattern_type.d37) = at_binding_pattern t, %t.param_patt.loc13_17.2 [symbolic = %t.patt.loc13_17.2 (constants.%t.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc13_19.1 [symbolic = %require_complete (constants.%require_complete.df7)] // CHECK:STDOUT: %.loc15_18.4: require_specific_def_type = require_specific_def @T.as.Z.impl.61e(%T.as_type.loc13_19.1) [symbolic = %.loc15_18.4 (constants.%.c6c)] +// CHECK:STDOUT: %a.patt.loc15_15.2: @F.%pattern_type (%pattern_type.d37) = value_binding_pattern a [symbolic = %a.patt.loc15_15.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%t.param: @F.%T.as_type.loc13_19.1 (%T.as_type)) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: @F.%pattern_type (%pattern_type.d37) = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt.loc15_15.1: @F.%pattern_type (%pattern_type.d37) = value_binding_pattern a [symbolic = %a.patt.loc15_15.2 (constants.%a.patt)] // CHECK:STDOUT: } // CHECK:STDOUT: %t.ref: @F.%T.as_type.loc13_19.1 (%T.as_type) = name_ref t, %t // CHECK:STDOUT: %.loc15_18.1: type = splice_block %impl.elem0 [symbolic = %T.as_type.loc13_19.1 (constants.%T.as_type)] { @@ -365,12 +379,14 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Z(constants.%T.67d) { +// CHECK:STDOUT: %T.patt.loc3_14.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc3_14.1 => constants.%T.67d // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Z.WithSelf(constants.%T.67d, constants.%Self.21f) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @Z(constants.%S) { +// CHECK:STDOUT: %T.patt.loc3_14.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc3_14.1 => constants.%S // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -393,7 +409,9 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @T.as.Z.impl.9ba(constants.%T.67d, constants.%S) { +// CHECK:STDOUT: %T.patt.loc9_15.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc9_15.2 => constants.%T.67d +// CHECK:STDOUT: %S.patt.loc9_25.2 => constants.%S.patt // CHECK:STDOUT: %S.loc9_25.2 => constants.%S // CHECK:STDOUT: %Z.type.loc9_42.2 => constants.%Z.type.78b // CHECK:STDOUT: %.Self.loc9_44.2 => constants.%.Self.a97 @@ -415,6 +433,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Z(constants.%C) { +// CHECK:STDOUT: %T.patt.loc3_14.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc3_14.1 => constants.%C // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -437,6 +456,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @T.as.Z.impl.61e(constants.%T.67d) { +// CHECK:STDOUT: %T.patt.loc11_21.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc11_21.2 => constants.%T.67d // CHECK:STDOUT: %Z_where.type => constants.%Z_where.type.18c // CHECK:STDOUT: %Z.impl_witness.loc11_53.2 => constants.%Z.impl_witness.fc3 @@ -450,9 +470,12 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T.4b3) { +// CHECK:STDOUT: %T.patt.loc13_7.2 => constants.%T.patt.4cc // CHECK:STDOUT: %T.loc13_7.1 => constants.%T.4b3 // CHECK:STDOUT: %T.as_type.loc13_19.1 => constants.%T.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.d37 +// CHECK:STDOUT: %t.param_patt.loc13_17.2 => constants.%t.param_patt +// CHECK:STDOUT: %t.patt.loc13_17.2 => constants.%t.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Z.WithSelf(constants.%C, constants.%T.4b3) { @@ -463,6 +486,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @T.as.Z.impl.61e(constants.%T.as_type) { +// CHECK:STDOUT: %T.patt.loc11_21.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc11_21.2 => constants.%T.as_type // CHECK:STDOUT: %Z_where.type => constants.%Z_where.type.c07 // CHECK:STDOUT: %Z.impl_witness.loc11_53.2 => constants.%Z.impl_witness.597 @@ -477,6 +501,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self.c39: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.d47: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Z.type.c39: type = generic_interface_type @Z [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -490,6 +515,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %S.patt: %pattern_type.98f = symbolic_binding_pattern S, 1 [symbolic] // CHECK:STDOUT: %S: type = symbolic_binding S, 1 [symbolic] // CHECK:STDOUT: %Z.type.78b: type = facet_type <@Z, @Z(%S)> [symbolic] // CHECK:STDOUT: %.Self.a97: %Z.type.78b = symbolic_binding .Self [symbolic] @@ -518,9 +544,12 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %require_complete.9f7: = require_complete_type %Z_where.type.18c [symbolic] // CHECK:STDOUT: %Z.facet.fa5: %Z.type.963 = facet_value %T.67d, (%Z.impl_witness.fc3) [symbolic] // CHECK:STDOUT: %pattern_type.d7e: type = pattern_type %Z.type.963 [concrete] +// CHECK:STDOUT: %T.patt.4cc: %pattern_type.d7e = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.4b3: %Z.type.963 = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T.4b3 [symbolic] // CHECK:STDOUT: %pattern_type.d37: type = pattern_type %T.as_type [symbolic] +// CHECK:STDOUT: %t.param_patt: %pattern_type.d37 = value_param_pattern [symbolic] +// CHECK:STDOUT: %t.patt: %pattern_type.d37 = at_binding_pattern t, %t.param_patt [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.df7: = require_complete_type %T.as_type [symbolic] @@ -528,6 +557,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %impl.elem0.aab: type = impl_witness_access %Z.lookup_impl_witness.89c, element0 [symbolic] // CHECK:STDOUT: %require_complete.d22: = require_complete_type %impl.elem0.aab [symbolic] // CHECK:STDOUT: %pattern_type.dc1: type = pattern_type %impl.elem0.aab [symbolic] +// CHECK:STDOUT: %a.patt: %pattern_type.dc1 = value_binding_pattern a [symbolic] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] // CHECK:STDOUT: %Dest: type = symbolic_binding Dest, 0 [symbolic] @@ -565,7 +595,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Z.decl: %Z.type.c39 = interface_decl @Z [concrete = constants.%Z.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc3_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_14.2 (constants.%T.patt.d47)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc3_17.1: type = splice_block %.loc3_17.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.c39] @@ -576,8 +606,8 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %Y.decl: type = interface_decl @Y [concrete = constants.%Y.type] {} {} // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: impl_decl @T.as.Z.impl.9ba [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %S.patt: %pattern_type.98f = symbolic_binding_pattern S, 1 [concrete] +// CHECK:STDOUT: %T.patt.loc10_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc10_15.2 (constants.%T.patt.d47)] +// CHECK:STDOUT: %S.patt.loc10_25.1: %pattern_type.98f = symbolic_binding_pattern S, 1 [symbolic = %S.patt.loc10_25.2 (constants.%S.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc10_15.1 [symbolic = %T.loc10_15.2 (constants.%T.67d)] // CHECK:STDOUT: %Z.ref: %Z.type.c39 = name_ref Z, file.%Z.decl [concrete = constants.%Z.generic] @@ -608,7 +638,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %S.loc10_25.1: type = symbolic_binding S, 1 [symbolic = %S.loc10_25.2 (constants.%S)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @T.as.Z.impl.61e [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc12_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_15.2 (constants.%T.patt.d47)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc12_24: type = name_ref T, %T.loc12_15.1 [symbolic = %T.loc12_15.2 (constants.%T.67d)] // CHECK:STDOUT: %Z.ref: %Z.type.c39 = name_ref Z, file.%Z.decl [concrete = constants.%Z.generic] @@ -633,9 +663,9 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %T.loc12_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc12_15.2 (constants.%T.67d)] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type.d7e = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %t.param_patt: @F.%pattern_type.loc14 (%pattern_type.d37) = value_param_pattern [concrete] -// CHECK:STDOUT: %t.patt: @F.%pattern_type.loc14 (%pattern_type.d37) = at_binding_pattern t, %t.param_patt [concrete] +// CHECK:STDOUT: %T.patt.loc14_7.1: %pattern_type.d7e = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_7.2 (constants.%T.patt.4cc)] +// CHECK:STDOUT: %t.param_patt.loc14_17.1: @F.%pattern_type.loc14 (%pattern_type.d37) = value_param_pattern [symbolic = %t.param_patt.loc14_17.2 (constants.%t.param_patt)] +// CHECK:STDOUT: %t.patt.loc14_17.1: @F.%pattern_type.loc14 (%pattern_type.d37) = at_binding_pattern t, %t.param_patt.loc14_17.1 [symbolic = %t.patt.loc14_17.2 (constants.%t.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc14_13: type = splice_block %Z.type [concrete = constants.%Z.type.963] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.c39] @@ -655,6 +685,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Z(%T.loc3_14.2: type) { +// CHECK:STDOUT: %T.patt.loc3_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_14.2 (constants.%T.patt.d47)] // CHECK:STDOUT: %T.loc3_14.1: type = symbolic_binding T, 0 [symbolic = %T.loc3_14.1 (constants.%T.67d)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -691,7 +722,9 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @T.as.Z.impl.9ba(%T.loc10_15.1: type, %S.loc10_25.1: type) { +// CHECK:STDOUT: %T.patt.loc10_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc10_15.2 (constants.%T.patt.d47)] // CHECK:STDOUT: %T.loc10_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc10_15.2 (constants.%T.67d)] +// CHECK:STDOUT: %S.patt.loc10_25.2: %pattern_type.98f = symbolic_binding_pattern S, 1 [symbolic = %S.patt.loc10_25.2 (constants.%S.patt)] // CHECK:STDOUT: %S.loc10_25.2: type = symbolic_binding S, 1 [symbolic = %S.loc10_25.2 (constants.%S)] // CHECK:STDOUT: %Z.type.loc10_42.2: type = facet_type <@Z, @Z(%S.loc10_25.2)> [symbolic = %Z.type.loc10_42.2 (constants.%Z.type.78b)] // CHECK:STDOUT: %.Self.loc10_44.2: @T.as.Z.impl.9ba.%Z.type.loc10_42.2 (%Z.type.78b) = symbolic_binding .Self [symbolic = %.Self.loc10_44.2 (constants.%.Self.a97)] @@ -719,6 +752,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @T.as.Z.impl.61e(%T.loc12_15.1: type) { +// CHECK:STDOUT: %T.patt.loc12_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_15.2 (constants.%T.patt.d47)] // CHECK:STDOUT: %T.loc12_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc12_15.2 (constants.%T.67d)] // CHECK:STDOUT: %Z_where.type: type = facet_type <@Z, @Z(constants.%C) where constants.%impl.elem0.9ca = %T.loc12_15.2> [symbolic = %Z_where.type (constants.%Z_where.type.18c)] // CHECK:STDOUT: %Z.impl_witness.loc12_47.2: = impl_witness %Z.impl_witness_table, @T.as.Z.impl.61e(%T.loc12_15.2) [symbolic = %Z.impl_witness.loc12_47.2 (constants.%Z.impl_witness.fc3)] @@ -746,9 +780,12 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc14_7.2: %Z.type.963) { +// CHECK:STDOUT: %T.patt.loc14_7.2: %pattern_type.d7e = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_7.2 (constants.%T.patt.4cc)] // CHECK:STDOUT: %T.loc14_7.1: %Z.type.963 = symbolic_binding T, 0 [symbolic = %T.loc14_7.1 (constants.%T.4b3)] // CHECK:STDOUT: %T.as_type.loc14_19.1: type = facet_access_type %T.loc14_7.1 [symbolic = %T.as_type.loc14_19.1 (constants.%T.as_type)] // CHECK:STDOUT: %pattern_type.loc14: type = pattern_type %T.as_type.loc14_19.1 [symbolic = %pattern_type.loc14 (constants.%pattern_type.d37)] +// CHECK:STDOUT: %t.param_patt.loc14_17.2: @F.%pattern_type.loc14 (%pattern_type.d37) = value_param_pattern [symbolic = %t.param_patt.loc14_17.2 (constants.%t.param_patt)] +// CHECK:STDOUT: %t.patt.loc14_17.2: @F.%pattern_type.loc14 (%pattern_type.d37) = at_binding_pattern t, %t.param_patt.loc14_17.2 [symbolic = %t.patt.loc14_17.2 (constants.%t.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc14: = require_complete_type %T.as_type.loc14_19.1 [symbolic = %require_complete.loc14 (constants.%require_complete.df7)] @@ -756,6 +793,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %impl.elem0.loc22_18.2: type = impl_witness_access %Z.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc22_18.2 (constants.%impl.elem0.aab)] // CHECK:STDOUT: %require_complete.loc22_18: = require_complete_type %impl.elem0.loc22_18.2 [symbolic = %require_complete.loc22_18 (constants.%require_complete.d22)] // CHECK:STDOUT: %pattern_type.loc22: type = pattern_type %impl.elem0.loc22_18.2 [symbolic = %pattern_type.loc22 (constants.%pattern_type.dc1)] +// CHECK:STDOUT: %a.patt.loc22_15.2: @F.%pattern_type.loc22 (%pattern_type.dc1) = value_binding_pattern a [symbolic = %a.patt.loc22_15.2 (constants.%a.patt)] // CHECK:STDOUT: %ImplicitAs.type.loc22_23.2: type = facet_type <@ImplicitAs, @ImplicitAs(%impl.elem0.loc22_18.2)> [symbolic = %ImplicitAs.type.loc22_23.2 (constants.%ImplicitAs.type.034)] // CHECK:STDOUT: %require_complete.loc22_23: = require_complete_type %ImplicitAs.type.loc22_23.2 [symbolic = %require_complete.loc22_23 (constants.%require_complete.504)] // CHECK:STDOUT: %ImplicitAs.assoc_type: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%impl.elem0.loc22_18.2) [symbolic = %ImplicitAs.assoc_type (constants.%ImplicitAs.assoc_type.aba)] @@ -764,9 +802,13 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: fn(%t.param: @F.%T.as_type.loc14_19.1 (%T.as_type)) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: @F.%pattern_type.loc22 (%pattern_type.dc1) = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt.loc22_15.1: @F.%pattern_type.loc22 (%pattern_type.dc1) = value_binding_pattern a [symbolic = %a.patt.loc22_15.2 (constants.%a.patt)] // CHECK:STDOUT: } // CHECK:STDOUT: %t.ref: @F.%T.as_type.loc14_19.1 (%T.as_type) = name_ref t, %t +// CHECK:STDOUT: %ImplicitAs.type.loc22_23.1: type = facet_type <@ImplicitAs, @ImplicitAs(constants.%impl.elem0.aab)> [symbolic = %ImplicitAs.type.loc22_23.2 (constants.%ImplicitAs.type.034)] +// CHECK:STDOUT: %.loc22_23.1: @F.%ImplicitAs.assoc_type (%ImplicitAs.assoc_type.aba) = specific_constant imports.%Core.import_ref.484, @ImplicitAs.WithSelf(constants.%impl.elem0.aab, constants.%Self.294) [symbolic = %assoc0 (constants.%assoc0.7e2)] +// CHECK:STDOUT: %Convert.ref: @F.%ImplicitAs.assoc_type (%ImplicitAs.assoc_type.aba) = name_ref Convert, %.loc22_23.1 [symbolic = %assoc0 (constants.%assoc0.7e2)] +// CHECK:STDOUT: %.loc22_23.2: @F.%impl.elem0.loc22_18.2 (%impl.elem0.aab) = converted %t.ref, [concrete = ] // CHECK:STDOUT: %.loc22_18.1: type = splice_block %impl.elem0.loc22_18.1 [symbolic = %impl.elem0.loc22_18.2 (constants.%impl.elem0.aab)] { // CHECK:STDOUT: %T.ref.loc22: %Z.type.963 = name_ref T, %T.loc14_7.2 [symbolic = %T.loc14_7.1 (constants.%T.4b3)] // CHECK:STDOUT: %T.as_type.loc22: type = facet_access_type %T.ref.loc22 [symbolic = %T.as_type.loc14_19.1 (constants.%T.as_type)] @@ -775,16 +817,13 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %X.ref: %Z.assoc_type.f4d = name_ref X, %.loc22_18.3 [concrete = constants.%assoc0.169] // CHECK:STDOUT: %impl.elem0.loc22_18.1: type = impl_witness_access constants.%Z.lookup_impl_witness.89c, element0 [symbolic = %impl.elem0.loc22_18.2 (constants.%impl.elem0.aab)] // CHECK:STDOUT: } -// CHECK:STDOUT: %ImplicitAs.type.loc22_23.1: type = facet_type <@ImplicitAs, @ImplicitAs(constants.%impl.elem0.aab)> [symbolic = %ImplicitAs.type.loc22_23.2 (constants.%ImplicitAs.type.034)] -// CHECK:STDOUT: %.loc22_23.1: @F.%ImplicitAs.assoc_type (%ImplicitAs.assoc_type.aba) = specific_constant imports.%Core.import_ref.484, @ImplicitAs.WithSelf(constants.%impl.elem0.aab, constants.%Self.294) [symbolic = %assoc0 (constants.%assoc0.7e2)] -// CHECK:STDOUT: %Convert.ref: @F.%ImplicitAs.assoc_type (%ImplicitAs.assoc_type.aba) = name_ref Convert, %.loc22_23.1 [symbolic = %assoc0 (constants.%assoc0.7e2)] -// CHECK:STDOUT: %.loc22_23.2: @F.%impl.elem0.loc22_18.2 (%impl.elem0.aab) = converted %t.ref, [concrete = ] // CHECK:STDOUT: %a: @F.%impl.elem0.loc22_18.2 (%impl.elem0.aab) = value_binding a, [concrete = ] // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Z(constants.%T.67d) { +// CHECK:STDOUT: %T.patt.loc3_14.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc3_14.1 => constants.%T.67d // CHECK:STDOUT: } // CHECK:STDOUT: @@ -793,6 +832,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: specific @Y.WithSelf(constants.%Self.765) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @Z(constants.%S) { +// CHECK:STDOUT: %T.patt.loc3_14.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc3_14.1 => constants.%S // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -815,7 +855,9 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @T.as.Z.impl.9ba(constants.%T.67d, constants.%S) { +// CHECK:STDOUT: %T.patt.loc10_15.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc10_15.2 => constants.%T.67d +// CHECK:STDOUT: %S.patt.loc10_25.2 => constants.%S.patt // CHECK:STDOUT: %S.loc10_25.2 => constants.%S // CHECK:STDOUT: %Z.type.loc10_42.2 => constants.%Z.type.78b // CHECK:STDOUT: %.Self.loc10_44.2 => constants.%.Self.a97 @@ -837,6 +879,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Z(constants.%C) { +// CHECK:STDOUT: %T.patt.loc3_14.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc3_14.1 => constants.%C // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -859,6 +902,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @T.as.Z.impl.61e(constants.%T.67d) { +// CHECK:STDOUT: %T.patt.loc12_15.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc12_15.2 => constants.%T.67d // CHECK:STDOUT: %Z_where.type => constants.%Z_where.type.18c // CHECK:STDOUT: %Z.impl_witness.loc12_47.2 => constants.%Z.impl_witness.fc3 @@ -872,9 +916,12 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T.4b3) { +// CHECK:STDOUT: %T.patt.loc14_7.2 => constants.%T.patt.4cc // CHECK:STDOUT: %T.loc14_7.1 => constants.%T.4b3 // CHECK:STDOUT: %T.as_type.loc14_19.1 => constants.%T.as_type // CHECK:STDOUT: %pattern_type.loc14 => constants.%pattern_type.d37 +// CHECK:STDOUT: %t.param_patt.loc14_17.2 => constants.%t.param_patt +// CHECK:STDOUT: %t.patt.loc14_17.2 => constants.%t.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Z.WithSelf(constants.%C, constants.%T.4b3) { @@ -894,6 +941,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self.c39: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %U.patt.d47: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %U.67d: type = symbolic_binding U, 0 [symbolic] // CHECK:STDOUT: %.Self.ffa: %Ptr.type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self.ffa [symbolic_self] @@ -904,8 +952,11 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %Ptr.impl_witness.dc28c2.1: = impl_witness @U.as.Ptr.impl.%Ptr.impl_witness_table, @U.as.Ptr.impl(%U.67d) [symbolic] // CHECK:STDOUT: %require_complete.15c7c4.1: = require_complete_type %Ptr_where.type.71ffc3.1 [symbolic] // CHECK:STDOUT: %Ptr.facet.a52cb5.1: %Ptr.type = facet_value %U.67d, (%Ptr.impl_witness.dc28c2.1) [symbolic] +// CHECK:STDOUT: %T.patt.d47: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T.67d [symbolic] +// CHECK:STDOUT: %t.patt: %pattern_type.51d = ref_binding_pattern t [symbolic] +// CHECK:STDOUT: %t.param_patt: %pattern_type.51d = var_param_pattern %t.patt [symbolic] // CHECK:STDOUT: %ptr.e8f8f9.2: type = ptr_type %T.67d [symbolic] // CHECK:STDOUT: %Ptr_where.type.71ffc3.2: type = facet_type <@Ptr where %impl.elem0.92c = %ptr.e8f8f9.2> [symbolic] // CHECK:STDOUT: %Ptr.impl_witness.dc28c2.2: = impl_witness @U.as.Ptr.impl.%Ptr.impl_witness_table, @U.as.Ptr.impl(%T.67d) [symbolic] @@ -914,6 +965,8 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %Ptr.facet.a52cb5.2: %Ptr.type = facet_value %T.67d, (%Ptr.impl_witness.dc28c2.2) [symbolic] // CHECK:STDOUT: %.cb6: Core.Form = init_form %ptr.e8f8f9.2 [symbolic] // CHECK:STDOUT: %pattern_type.4f4: type = pattern_type %ptr.e8f8f9.2 [symbolic] +// CHECK:STDOUT: %return.param_patt.27f: %pattern_type.4f4 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.d67: %pattern_type.4f4 = return_slot_pattern %return.param_patt.27f, %ptr.e8f8f9.2 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.944: = require_complete_type %T.67d [symbolic] @@ -946,7 +999,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Ptr.decl: type = interface_decl @Ptr [concrete = constants.%Ptr.type] {} {} // CHECK:STDOUT: impl_decl @U.as.Ptr.impl [concrete] { -// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [concrete] +// CHECK:STDOUT: %U.patt.loc7_21.1: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc7_21.2 (constants.%U.patt.d47)] // CHECK:STDOUT: } { // CHECK:STDOUT: %U.ref.loc7_30: type = name_ref U, %U.loc7_21.1 [symbolic = %U.loc7_21.2 (constants.%U.67d)] // CHECK:STDOUT: %Ptr.ref: type = name_ref Ptr, file.%Ptr.decl [concrete = constants.%Ptr.type] @@ -969,11 +1022,11 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %U.loc7_21.1: type = symbolic_binding U, 0 [symbolic = %U.loc7_21.2 (constants.%U.67d)] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %t.patt: @F.%pattern_type.loc9_21 (%pattern_type.51d) = ref_binding_pattern t [concrete] -// CHECK:STDOUT: %t.param_patt: @F.%pattern_type.loc9_21 (%pattern_type.51d) = var_param_pattern %t.patt [concrete] -// CHECK:STDOUT: %return.param_patt: @F.%pattern_type.loc9_30 (%pattern_type.4f4) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @F.%pattern_type.loc9_30 (%pattern_type.4f4) = return_slot_pattern %return.param_patt, %impl.elem0.loc9 [concrete] +// CHECK:STDOUT: %T.patt.loc9_7.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_7.2 (constants.%T.patt.d47)] +// CHECK:STDOUT: %t.patt.loc9_21.1: @F.%pattern_type.loc9_21 (%pattern_type.51d) = ref_binding_pattern t [symbolic = %t.patt.loc9_21.2 (constants.%t.patt)] +// CHECK:STDOUT: %t.param_patt.loc9_16.1: @F.%pattern_type.loc9_21 (%pattern_type.51d) = var_param_pattern %t.patt.loc9_21.1 [symbolic = %t.param_patt.loc9_16.2 (constants.%t.param_patt)] +// CHECK:STDOUT: %return.param_patt.loc9_30.1: @F.%pattern_type.loc9_30 (%pattern_type.4f4) = out_param_pattern [symbolic = %return.param_patt.loc9_30.2 (constants.%return.param_patt.27f)] +// CHECK:STDOUT: %return.patt.loc9_26.1: @F.%pattern_type.loc9_30 (%pattern_type.4f4) = return_slot_pattern %return.param_patt.loc9_30.1, %impl.elem0.loc9 [symbolic = %return.patt.loc9_26.2 (constants.%return.patt.d67)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc9_29: type = name_ref T, %T.loc9_7.2 [symbolic = %T.loc9_7.1 (constants.%T.67d)] // CHECK:STDOUT: %Ptr.ref: type = name_ref Ptr, file.%Ptr.decl [concrete = constants.%Ptr.type] @@ -1013,6 +1066,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @U.as.Ptr.impl(%U.loc7_21.1: type) { +// CHECK:STDOUT: %U.patt.loc7_21.2: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc7_21.2 (constants.%U.patt.d47)] // CHECK:STDOUT: %U.loc7_21.2: type = symbolic_binding U, 0 [symbolic = %U.loc7_21.2 (constants.%U.67d)] // CHECK:STDOUT: %ptr.loc7_54.2: type = ptr_type %U.loc7_21.2 [symbolic = %ptr.loc7_54.2 (constants.%ptr.e8f8f9.1)] // CHECK:STDOUT: %Ptr_where.type: type = facet_type <@Ptr where constants.%impl.elem0.92c = %ptr.loc7_54.2> [symbolic = %Ptr_where.type (constants.%Ptr_where.type.71ffc3.1)] @@ -1033,34 +1087,41 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc9_7.2: type) { +// CHECK:STDOUT: %T.patt.loc9_7.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_7.2 (constants.%T.patt.d47)] // CHECK:STDOUT: %T.loc9_7.1: type = symbolic_binding T, 0 [symbolic = %T.loc9_7.1 (constants.%T.67d)] // CHECK:STDOUT: %pattern_type.loc9_21: type = pattern_type %T.loc9_7.1 [symbolic = %pattern_type.loc9_21 (constants.%pattern_type.51d)] +// CHECK:STDOUT: %t.patt.loc9_21.2: @F.%pattern_type.loc9_21 (%pattern_type.51d) = ref_binding_pattern t [symbolic = %t.patt.loc9_21.2 (constants.%t.patt)] +// CHECK:STDOUT: %t.param_patt.loc9_16.2: @F.%pattern_type.loc9_21 (%pattern_type.51d) = var_param_pattern %t.patt.loc9_21.2 [symbolic = %t.param_patt.loc9_16.2 (constants.%t.param_patt)] // CHECK:STDOUT: %.loc9_30.1: require_specific_def_type = require_specific_def @U.as.Ptr.impl(%T.loc9_7.1) [symbolic = %.loc9_30.1 (constants.%.e08)] // CHECK:STDOUT: %Ptr.impl_witness: = impl_witness @U.as.Ptr.impl.%Ptr.impl_witness_table, @U.as.Ptr.impl(%T.loc9_7.1) [symbolic = %Ptr.impl_witness (constants.%Ptr.impl_witness.dc28c2.2)] // CHECK:STDOUT: %Ptr.facet.loc9_30.1: %Ptr.type = facet_value %T.loc9_7.1, (%Ptr.impl_witness) [symbolic = %Ptr.facet.loc9_30.1 (constants.%Ptr.facet.a52cb5.2)] // CHECK:STDOUT: %ptr: type = ptr_type %T.loc9_7.1 [symbolic = %ptr (constants.%ptr.e8f8f9.2)] // CHECK:STDOUT: %.loc9_30.2: Core.Form = init_form %ptr [symbolic = %.loc9_30.2 (constants.%.cb6)] // CHECK:STDOUT: %pattern_type.loc9_30: type = pattern_type %ptr [symbolic = %pattern_type.loc9_30 (constants.%pattern_type.4f4)] +// CHECK:STDOUT: %return.param_patt.loc9_30.2: @F.%pattern_type.loc9_30 (%pattern_type.4f4) = out_param_pattern [symbolic = %return.param_patt.loc9_30.2 (constants.%return.param_patt.27f)] +// CHECK:STDOUT: %return.patt.loc9_26.2: @F.%pattern_type.loc9_30 (%pattern_type.4f4) = return_slot_pattern %return.param_patt.loc9_30.2, %ptr [symbolic = %return.patt.loc9_26.2 (constants.%return.patt.d67)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc9_16: = require_complete_type %T.loc9_7.1 [symbolic = %require_complete.loc9_16 (constants.%require_complete.944)] // CHECK:STDOUT: %require_complete.loc9_26: = require_complete_type %ptr [symbolic = %require_complete.loc9_26 (constants.%require_complete.ef1)] -// CHECK:STDOUT: %.loc10_10.2: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.loc9_7.1) [symbolic = %.loc10_10.2 (constants.%.0e9)] +// CHECK:STDOUT: %.loc10_10.3: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.loc9_7.1) [symbolic = %.loc10_10.3 (constants.%.0e9)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %ptr, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.1da)] -// CHECK:STDOUT: %Copy.facet.loc10_10.2: %Copy.type = facet_value %ptr, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc10_10.2 (constants.%Copy.facet)] -// CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.loc10_10.2) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.884)] -// CHECK:STDOUT: %.loc10_10.3: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %Copy.facet.loc10_10.2 [symbolic = %.loc10_10.3 (constants.%.be5)] -// CHECK:STDOUT: %impl.elem0.loc10_10.2: @F.%.loc10_10.3 (%.be5) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc10_10.2 (constants.%impl.elem0.484)] -// CHECK:STDOUT: %specific_impl_fn.loc10_10.2: = specific_impl_function %impl.elem0.loc10_10.2, @Copy.WithSelf.Op(%Copy.facet.loc10_10.2) [symbolic = %specific_impl_fn.loc10_10.2 (constants.%specific_impl_fn.a76)] +// CHECK:STDOUT: %Copy.facet.loc10_10.3: %Copy.type = facet_value %ptr, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc10_10.3 (constants.%Copy.facet)] +// CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.loc10_10.3) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.884)] +// CHECK:STDOUT: %.loc10_10.4: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %Copy.facet.loc10_10.3 [symbolic = %.loc10_10.4 (constants.%.be5)] +// CHECK:STDOUT: %impl.elem0.loc10_10.2: @F.%.loc10_10.4 (%.be5) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc10_10.2 (constants.%impl.elem0.484)] +// CHECK:STDOUT: %specific_impl_fn.loc10_10.2: = specific_impl_function %impl.elem0.loc10_10.2, @Copy.WithSelf.Op(%Copy.facet.loc10_10.3) [symbolic = %specific_impl_fn.loc10_10.2 (constants.%specific_impl_fn.a76)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%t.param: ref @F.%T.loc9_7.1 (%T.67d)) -> out %return.param: @F.%ptr (%ptr.e8f8f9.2) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %t.ref: ref @F.%T.loc9_7.1 (%T.67d) = name_ref t, %t // CHECK:STDOUT: %addr: @F.%ptr (%ptr.e8f8f9.2) = addr_of %t.ref -// CHECK:STDOUT: %impl.elem0.loc10_10.1: @F.%.loc10_10.3 (%.be5) = impl_witness_access constants.%Copy.lookup_impl_witness.1da, element0 [symbolic = %impl.elem0.loc10_10.2 (constants.%impl.elem0.484)] +// CHECK:STDOUT: %impl.elem0.loc10_10.1: @F.%.loc10_10.4 (%.be5) = impl_witness_access constants.%Copy.lookup_impl_witness.1da, element0 [symbolic = %impl.elem0.loc10_10.2 (constants.%impl.elem0.484)] // CHECK:STDOUT: %bound_method.loc10_10.1: = bound_method %addr, %impl.elem0.loc10_10.1 -// CHECK:STDOUT: %Copy.facet.loc10_10.1: %Copy.type = facet_value constants.%ptr.e8f8f9.2, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc10_10.2 (constants.%Copy.facet)] -// CHECK:STDOUT: %.loc10_10.1: %Copy.type = converted constants.%ptr.e8f8f9.2, %Copy.facet.loc10_10.1 [symbolic = %Copy.facet.loc10_10.2 (constants.%Copy.facet)] +// CHECK:STDOUT: %Copy.facet.loc10_10.1: %Copy.type = facet_value constants.%ptr.e8f8f9.2, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc10_10.3 (constants.%Copy.facet)] +// CHECK:STDOUT: %.loc10_10.1: %Copy.type = converted constants.%ptr.e8f8f9.2, %Copy.facet.loc10_10.1 [symbolic = %Copy.facet.loc10_10.3 (constants.%Copy.facet)] +// CHECK:STDOUT: %Copy.facet.loc10_10.2: %Copy.type = facet_value constants.%ptr.e8f8f9.2, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc10_10.3 (constants.%Copy.facet)] +// CHECK:STDOUT: %.loc10_10.2: %Copy.type = converted constants.%ptr.e8f8f9.2, %Copy.facet.loc10_10.2 [symbolic = %Copy.facet.loc10_10.3 (constants.%Copy.facet)] // CHECK:STDOUT: %specific_impl_fn.loc10_10.1: = specific_impl_function %impl.elem0.loc10_10.1, @Copy.WithSelf.Op(constants.%Copy.facet) [symbolic = %specific_impl_fn.loc10_10.2 (constants.%specific_impl_fn.a76)] // CHECK:STDOUT: %bound_method.loc10_10.2: = bound_method %addr, %specific_impl_fn.loc10_10.1 // CHECK:STDOUT: %Copy.WithSelf.Op.call: init @F.%ptr (%ptr.e8f8f9.2) = call %bound_method.loc10_10.2(%addr) @@ -1077,6 +1138,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @U.as.Ptr.impl(constants.%U.67d) { +// CHECK:STDOUT: %U.patt.loc7_21.2 => constants.%U.patt.d47 // CHECK:STDOUT: %U.loc7_21.2 => constants.%U.67d // CHECK:STDOUT: %ptr.loc7_54.2 => constants.%ptr.e8f8f9.1 // CHECK:STDOUT: %Ptr_where.type => constants.%Ptr_where.type.71ffc3.1 @@ -1088,6 +1150,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @U.as.Ptr.impl(constants.%T.67d) { +// CHECK:STDOUT: %U.patt.loc7_21.2 => constants.%U.patt.d47 // CHECK:STDOUT: %U.loc7_21.2 => constants.%T.67d // CHECK:STDOUT: %ptr.loc7_54.2 => constants.%ptr.e8f8f9.2 // CHECK:STDOUT: %Ptr_where.type => constants.%Ptr_where.type.71ffc3.2 @@ -1102,14 +1165,19 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T.67d) { +// CHECK:STDOUT: %T.patt.loc9_7.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc9_7.1 => constants.%T.67d // CHECK:STDOUT: %pattern_type.loc9_21 => constants.%pattern_type.51d +// CHECK:STDOUT: %t.patt.loc9_21.2 => constants.%t.patt +// CHECK:STDOUT: %t.param_patt.loc9_16.2 => constants.%t.param_patt // CHECK:STDOUT: %.loc9_30.1 => constants.%.e08 // CHECK:STDOUT: %Ptr.impl_witness => constants.%Ptr.impl_witness.dc28c2.2 // CHECK:STDOUT: %Ptr.facet.loc9_30.1 => constants.%Ptr.facet.a52cb5.2 // CHECK:STDOUT: %ptr => constants.%ptr.e8f8f9.2 // CHECK:STDOUT: %.loc9_30.2 => constants.%.cb6 // CHECK:STDOUT: %pattern_type.loc9_30 => constants.%pattern_type.4f4 +// CHECK:STDOUT: %return.param_patt.loc9_30.2 => constants.%return.param_patt.27f +// CHECK:STDOUT: %return.patt.loc9_26.2 => constants.%return.patt.d67 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- final_impl_rewrite_of_symbolic_through_facet_access_type.carbon @@ -1122,6 +1190,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self.c39: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %U.patt.d47: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %U.67d: type = symbolic_binding U, 0 [symbolic] // CHECK:STDOUT: %.Self.ffa: %Ptr.type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self.ffa [symbolic_self] @@ -1133,9 +1202,12 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %require_complete.15c: = require_complete_type %Ptr_where.type.71f [symbolic] // CHECK:STDOUT: %Ptr.facet: %Ptr.type = facet_value %U.67d, (%Ptr.impl_witness.dc2) [symbolic] // CHECK:STDOUT: %pattern_type.f5d: type = pattern_type %Ptr.type [concrete] +// CHECK:STDOUT: %T.patt.a2e: %pattern_type.f5d = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.76f: %Ptr.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.468: type = facet_access_type %T.76f [symbolic] // CHECK:STDOUT: %pattern_type.756: type = pattern_type %T.as_type.468 [symbolic] +// CHECK:STDOUT: %t.patt: %pattern_type.756 = ref_binding_pattern t [symbolic] +// CHECK:STDOUT: %t.param_patt: %pattern_type.756 = var_param_pattern %t.patt [symbolic] // CHECK:STDOUT: %ptr.ac4: type = ptr_type %T.as_type.468 [symbolic] // CHECK:STDOUT: %Ptr_where.type.928: type = facet_type <@Ptr where %impl.elem0.92c = %ptr.ac4> [symbolic] // CHECK:STDOUT: %Ptr.impl_witness.668: = impl_witness @U.as.Ptr.impl.%Ptr.impl_witness_table, @U.as.Ptr.impl(%T.as_type.468) [symbolic] @@ -1143,6 +1215,8 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %.184: require_specific_def_type = require_specific_def @U.as.Ptr.impl(%T.as_type.468) [symbolic] // CHECK:STDOUT: %.e16: Core.Form = init_form %ptr.ac4 [symbolic] // CHECK:STDOUT: %pattern_type.f62: type = pattern_type %ptr.ac4 [symbolic] +// CHECK:STDOUT: %return.param_patt.b93: %pattern_type.f62 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.058: %pattern_type.f62 = return_slot_pattern %return.param_patt.b93, %ptr.ac4 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.35c: = require_complete_type %T.as_type.468 [symbolic] @@ -1175,7 +1249,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Ptr.decl: type = interface_decl @Ptr [concrete = constants.%Ptr.type] {} {} // CHECK:STDOUT: impl_decl @U.as.Ptr.impl [concrete] { -// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [concrete] +// CHECK:STDOUT: %U.patt.loc7_21.1: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc7_21.2 (constants.%U.patt.d47)] // CHECK:STDOUT: } { // CHECK:STDOUT: %U.ref.loc7_30: type = name_ref U, %U.loc7_21.1 [symbolic = %U.loc7_21.2 (constants.%U.67d)] // CHECK:STDOUT: %Ptr.ref: type = name_ref Ptr, file.%Ptr.decl [concrete = constants.%Ptr.type] @@ -1198,11 +1272,11 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %U.loc7_21.1: type = symbolic_binding U, 0 [symbolic = %U.loc7_21.2 (constants.%U.67d)] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type.f5d = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %t.patt: @F.%pattern_type.loc9_20 (%pattern_type.756) = ref_binding_pattern t [concrete] -// CHECK:STDOUT: %t.param_patt: @F.%pattern_type.loc9_20 (%pattern_type.756) = var_param_pattern %t.patt [concrete] -// CHECK:STDOUT: %return.param_patt: @F.%pattern_type.loc9_29 (%pattern_type.f62) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @F.%pattern_type.loc9_29 (%pattern_type.f62) = return_slot_pattern %return.param_patt, %impl.elem0.loc9 [concrete] +// CHECK:STDOUT: %T.patt.loc9_7.1: %pattern_type.f5d = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_7.2 (constants.%T.patt.a2e)] +// CHECK:STDOUT: %t.patt.loc9_20.1: @F.%pattern_type.loc9_20 (%pattern_type.756) = ref_binding_pattern t [symbolic = %t.patt.loc9_20.2 (constants.%t.patt)] +// CHECK:STDOUT: %t.param_patt.loc9_15.1: @F.%pattern_type.loc9_20 (%pattern_type.756) = var_param_pattern %t.patt.loc9_20.1 [symbolic = %t.param_patt.loc9_15.2 (constants.%t.param_patt)] +// CHECK:STDOUT: %return.param_patt.loc9_29.1: @F.%pattern_type.loc9_29 (%pattern_type.f62) = out_param_pattern [symbolic = %return.param_patt.loc9_29.2 (constants.%return.param_patt.b93)] +// CHECK:STDOUT: %return.patt.loc9_25.1: @F.%pattern_type.loc9_29 (%pattern_type.f62) = return_slot_pattern %return.param_patt.loc9_29.1, %impl.elem0.loc9 [symbolic = %return.patt.loc9_25.2 (constants.%return.patt.058)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc9_28: %Ptr.type = name_ref T, %T.loc9_7.2 [symbolic = %T.loc9_7.1 (constants.%T.76f)] // CHECK:STDOUT: %T.as_type.loc9_29: type = facet_access_type %T.ref.loc9_28 [symbolic = %T.as_type.loc9_22.1 (constants.%T.as_type.468)] @@ -1245,6 +1319,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @U.as.Ptr.impl(%U.loc7_21.1: type) { +// CHECK:STDOUT: %U.patt.loc7_21.2: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc7_21.2 (constants.%U.patt.d47)] // CHECK:STDOUT: %U.loc7_21.2: type = symbolic_binding U, 0 [symbolic = %U.loc7_21.2 (constants.%U.67d)] // CHECK:STDOUT: %ptr.loc7_54.2: type = ptr_type %U.loc7_21.2 [symbolic = %ptr.loc7_54.2 (constants.%ptr.e8f8f9.1)] // CHECK:STDOUT: %Ptr_where.type: type = facet_type <@Ptr where constants.%impl.elem0.92c = %ptr.loc7_54.2> [symbolic = %Ptr_where.type (constants.%Ptr_where.type.71f)] @@ -1265,33 +1340,40 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc9_7.2: %Ptr.type) { +// CHECK:STDOUT: %T.patt.loc9_7.2: %pattern_type.f5d = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_7.2 (constants.%T.patt.a2e)] // CHECK:STDOUT: %T.loc9_7.1: %Ptr.type = symbolic_binding T, 0 [symbolic = %T.loc9_7.1 (constants.%T.76f)] // CHECK:STDOUT: %T.as_type.loc9_22.1: type = facet_access_type %T.loc9_7.1 [symbolic = %T.as_type.loc9_22.1 (constants.%T.as_type.468)] // CHECK:STDOUT: %pattern_type.loc9_20: type = pattern_type %T.as_type.loc9_22.1 [symbolic = %pattern_type.loc9_20 (constants.%pattern_type.756)] +// CHECK:STDOUT: %t.patt.loc9_20.2: @F.%pattern_type.loc9_20 (%pattern_type.756) = ref_binding_pattern t [symbolic = %t.patt.loc9_20.2 (constants.%t.patt)] +// CHECK:STDOUT: %t.param_patt.loc9_15.2: @F.%pattern_type.loc9_20 (%pattern_type.756) = var_param_pattern %t.patt.loc9_20.2 [symbolic = %t.param_patt.loc9_15.2 (constants.%t.param_patt)] // CHECK:STDOUT: %.loc9_29.1: require_specific_def_type = require_specific_def @U.as.Ptr.impl(%T.as_type.loc9_22.1) [symbolic = %.loc9_29.1 (constants.%.184)] // CHECK:STDOUT: %ptr: type = ptr_type %T.as_type.loc9_22.1 [symbolic = %ptr (constants.%ptr.ac4)] // CHECK:STDOUT: %.loc9_29.2: Core.Form = init_form %ptr [symbolic = %.loc9_29.2 (constants.%.e16)] // CHECK:STDOUT: %pattern_type.loc9_29: type = pattern_type %ptr [symbolic = %pattern_type.loc9_29 (constants.%pattern_type.f62)] +// CHECK:STDOUT: %return.param_patt.loc9_29.2: @F.%pattern_type.loc9_29 (%pattern_type.f62) = out_param_pattern [symbolic = %return.param_patt.loc9_29.2 (constants.%return.param_patt.b93)] +// CHECK:STDOUT: %return.patt.loc9_25.2: @F.%pattern_type.loc9_29 (%pattern_type.f62) = return_slot_pattern %return.param_patt.loc9_29.2, %ptr [symbolic = %return.patt.loc9_25.2 (constants.%return.patt.058)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc9_15: = require_complete_type %T.as_type.loc9_22.1 [symbolic = %require_complete.loc9_15 (constants.%require_complete.35c)] // CHECK:STDOUT: %require_complete.loc9_25: = require_complete_type %ptr [symbolic = %require_complete.loc9_25 (constants.%require_complete.841)] -// CHECK:STDOUT: %.loc10_10.2: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.as_type.loc9_22.1) [symbolic = %.loc10_10.2 (constants.%.ee9)] +// CHECK:STDOUT: %.loc10_10.3: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.as_type.loc9_22.1) [symbolic = %.loc10_10.3 (constants.%.ee9)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %ptr, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.d90)] -// CHECK:STDOUT: %Copy.facet.loc10_10.2: %Copy.type = facet_value %ptr, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc10_10.2 (constants.%Copy.facet)] -// CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.loc10_10.2) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.a39)] -// CHECK:STDOUT: %.loc10_10.3: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %Copy.facet.loc10_10.2 [symbolic = %.loc10_10.3 (constants.%.229)] -// CHECK:STDOUT: %impl.elem0.loc10_10.2: @F.%.loc10_10.3 (%.229) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc10_10.2 (constants.%impl.elem0.1f8)] -// CHECK:STDOUT: %specific_impl_fn.loc10_10.2: = specific_impl_function %impl.elem0.loc10_10.2, @Copy.WithSelf.Op(%Copy.facet.loc10_10.2) [symbolic = %specific_impl_fn.loc10_10.2 (constants.%specific_impl_fn.d80)] +// CHECK:STDOUT: %Copy.facet.loc10_10.3: %Copy.type = facet_value %ptr, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc10_10.3 (constants.%Copy.facet)] +// CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.loc10_10.3) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.a39)] +// CHECK:STDOUT: %.loc10_10.4: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %Copy.facet.loc10_10.3 [symbolic = %.loc10_10.4 (constants.%.229)] +// CHECK:STDOUT: %impl.elem0.loc10_10.2: @F.%.loc10_10.4 (%.229) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc10_10.2 (constants.%impl.elem0.1f8)] +// CHECK:STDOUT: %specific_impl_fn.loc10_10.2: = specific_impl_function %impl.elem0.loc10_10.2, @Copy.WithSelf.Op(%Copy.facet.loc10_10.3) [symbolic = %specific_impl_fn.loc10_10.2 (constants.%specific_impl_fn.d80)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%t.param: ref @F.%T.as_type.loc9_22.1 (%T.as_type.468)) -> out %return.param: @F.%ptr (%ptr.ac4) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %t.ref: ref @F.%T.as_type.loc9_22.1 (%T.as_type.468) = name_ref t, %t // CHECK:STDOUT: %addr: @F.%ptr (%ptr.ac4) = addr_of %t.ref -// CHECK:STDOUT: %impl.elem0.loc10_10.1: @F.%.loc10_10.3 (%.229) = impl_witness_access constants.%Copy.lookup_impl_witness.d90, element0 [symbolic = %impl.elem0.loc10_10.2 (constants.%impl.elem0.1f8)] +// CHECK:STDOUT: %impl.elem0.loc10_10.1: @F.%.loc10_10.4 (%.229) = impl_witness_access constants.%Copy.lookup_impl_witness.d90, element0 [symbolic = %impl.elem0.loc10_10.2 (constants.%impl.elem0.1f8)] // CHECK:STDOUT: %bound_method.loc10_10.1: = bound_method %addr, %impl.elem0.loc10_10.1 -// CHECK:STDOUT: %Copy.facet.loc10_10.1: %Copy.type = facet_value constants.%ptr.ac4, (constants.%Copy.lookup_impl_witness.d90) [symbolic = %Copy.facet.loc10_10.2 (constants.%Copy.facet)] -// CHECK:STDOUT: %.loc10_10.1: %Copy.type = converted constants.%ptr.ac4, %Copy.facet.loc10_10.1 [symbolic = %Copy.facet.loc10_10.2 (constants.%Copy.facet)] +// CHECK:STDOUT: %Copy.facet.loc10_10.1: %Copy.type = facet_value constants.%ptr.ac4, (constants.%Copy.lookup_impl_witness.d90) [symbolic = %Copy.facet.loc10_10.3 (constants.%Copy.facet)] +// CHECK:STDOUT: %.loc10_10.1: %Copy.type = converted constants.%ptr.ac4, %Copy.facet.loc10_10.1 [symbolic = %Copy.facet.loc10_10.3 (constants.%Copy.facet)] +// CHECK:STDOUT: %Copy.facet.loc10_10.2: %Copy.type = facet_value constants.%ptr.ac4, (constants.%Copy.lookup_impl_witness.d90) [symbolic = %Copy.facet.loc10_10.3 (constants.%Copy.facet)] +// CHECK:STDOUT: %.loc10_10.2: %Copy.type = converted constants.%ptr.ac4, %Copy.facet.loc10_10.2 [symbolic = %Copy.facet.loc10_10.3 (constants.%Copy.facet)] // CHECK:STDOUT: %specific_impl_fn.loc10_10.1: = specific_impl_function %impl.elem0.loc10_10.1, @Copy.WithSelf.Op(constants.%Copy.facet) [symbolic = %specific_impl_fn.loc10_10.2 (constants.%specific_impl_fn.d80)] // CHECK:STDOUT: %bound_method.loc10_10.2: = bound_method %addr, %specific_impl_fn.loc10_10.1 // CHECK:STDOUT: %Copy.WithSelf.Op.call: init @F.%ptr (%ptr.ac4) = call %bound_method.loc10_10.2(%addr) @@ -1308,6 +1390,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @U.as.Ptr.impl(constants.%U.67d) { +// CHECK:STDOUT: %U.patt.loc7_21.2 => constants.%U.patt.d47 // CHECK:STDOUT: %U.loc7_21.2 => constants.%U.67d // CHECK:STDOUT: %ptr.loc7_54.2 => constants.%ptr.e8f8f9.1 // CHECK:STDOUT: %Ptr_where.type => constants.%Ptr_where.type.71f @@ -1323,6 +1406,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @U.as.Ptr.impl(constants.%T.as_type.468) { +// CHECK:STDOUT: %U.patt.loc7_21.2 => constants.%U.patt.d47 // CHECK:STDOUT: %U.loc7_21.2 => constants.%T.as_type.468 // CHECK:STDOUT: %ptr.loc7_54.2 => constants.%ptr.ac4 // CHECK:STDOUT: %Ptr_where.type => constants.%Ptr_where.type.928 @@ -1333,13 +1417,18 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T.76f) { +// CHECK:STDOUT: %T.patt.loc9_7.2 => constants.%T.patt.a2e // CHECK:STDOUT: %T.loc9_7.1 => constants.%T.76f // CHECK:STDOUT: %T.as_type.loc9_22.1 => constants.%T.as_type.468 // CHECK:STDOUT: %pattern_type.loc9_20 => constants.%pattern_type.756 +// CHECK:STDOUT: %t.patt.loc9_20.2 => constants.%t.patt +// CHECK:STDOUT: %t.param_patt.loc9_15.2 => constants.%t.param_patt // CHECK:STDOUT: %.loc9_29.1 => constants.%.184 // CHECK:STDOUT: %ptr => constants.%ptr.ac4 // CHECK:STDOUT: %.loc9_29.2 => constants.%.e16 // CHECK:STDOUT: %pattern_type.loc9_29 => constants.%pattern_type.f62 +// CHECK:STDOUT: %return.param_patt.loc9_29.2 => constants.%return.param_patt.b93 +// CHECK:STDOUT: %return.patt.loc9_25.2 => constants.%return.patt.058 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- final_impl_rewrite_of_symbolic_through_facet_value.carbon @@ -1352,6 +1441,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self.c39: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %U.patt.d47: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %U.67d: type = symbolic_binding U, 0 [symbolic] // CHECK:STDOUT: %.Self.ffa: %Ptr.type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self.ffa [symbolic_self] @@ -1363,9 +1453,12 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %require_complete.15c: = require_complete_type %Ptr_where.type.71f [symbolic] // CHECK:STDOUT: %Ptr.facet: %Ptr.type = facet_value %U.67d, (%Ptr.impl_witness.dc2) [symbolic] // CHECK:STDOUT: %pattern_type.f5d: type = pattern_type %Ptr.type [concrete] +// CHECK:STDOUT: %T.patt.a2e: %pattern_type.f5d = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.76f: %Ptr.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.468: type = facet_access_type %T.76f [symbolic] // CHECK:STDOUT: %pattern_type.756: type = pattern_type %T.as_type.468 [symbolic] +// CHECK:STDOUT: %t.patt: %pattern_type.756 = ref_binding_pattern t [symbolic] +// CHECK:STDOUT: %t.param_patt: %pattern_type.756 = var_param_pattern %t.patt [symbolic] // CHECK:STDOUT: %ptr.ac4: type = ptr_type %T.as_type.468 [symbolic] // CHECK:STDOUT: %Ptr_where.type.928: type = facet_type <@Ptr where %impl.elem0.92c = %ptr.ac4> [symbolic] // CHECK:STDOUT: %Ptr.impl_witness.668: = impl_witness @U.as.Ptr.impl.%Ptr.impl_witness_table, @U.as.Ptr.impl(%T.as_type.468) [symbolic] @@ -1373,6 +1466,8 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %.184: require_specific_def_type = require_specific_def @U.as.Ptr.impl(%T.as_type.468) [symbolic] // CHECK:STDOUT: %.e16: Core.Form = init_form %ptr.ac4 [symbolic] // CHECK:STDOUT: %pattern_type.f62: type = pattern_type %ptr.ac4 [symbolic] +// CHECK:STDOUT: %return.param_patt.b93: %pattern_type.f62 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.058: %pattern_type.f62 = return_slot_pattern %return.param_patt.b93, %ptr.ac4 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.35c: = require_complete_type %T.as_type.468 [symbolic] @@ -1405,7 +1500,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Ptr.decl: type = interface_decl @Ptr [concrete = constants.%Ptr.type] {} {} // CHECK:STDOUT: impl_decl @U.as.Ptr.impl [concrete] { -// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [concrete] +// CHECK:STDOUT: %U.patt.loc7_21.1: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc7_21.2 (constants.%U.patt.d47)] // CHECK:STDOUT: } { // CHECK:STDOUT: %U.ref.loc7_30: type = name_ref U, %U.loc7_21.1 [symbolic = %U.loc7_21.2 (constants.%U.67d)] // CHECK:STDOUT: %Ptr.ref: type = name_ref Ptr, file.%Ptr.decl [concrete = constants.%Ptr.type] @@ -1428,11 +1523,11 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %U.loc7_21.1: type = symbolic_binding U, 0 [symbolic = %U.loc7_21.2 (constants.%U.67d)] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type.f5d = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %t.patt: @F.%pattern_type.loc9_20 (%pattern_type.756) = ref_binding_pattern t [concrete] -// CHECK:STDOUT: %t.param_patt: @F.%pattern_type.loc9_20 (%pattern_type.756) = var_param_pattern %t.patt [concrete] -// CHECK:STDOUT: %return.param_patt: @F.%pattern_type.loc9_29 (%pattern_type.f62) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @F.%pattern_type.loc9_29 (%pattern_type.f62) = return_slot_pattern %return.param_patt, %impl.elem0.loc9 [concrete] +// CHECK:STDOUT: %T.patt.loc9_7.1: %pattern_type.f5d = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_7.2 (constants.%T.patt.a2e)] +// CHECK:STDOUT: %t.patt.loc9_20.1: @F.%pattern_type.loc9_20 (%pattern_type.756) = ref_binding_pattern t [symbolic = %t.patt.loc9_20.2 (constants.%t.patt)] +// CHECK:STDOUT: %t.param_patt.loc9_15.1: @F.%pattern_type.loc9_20 (%pattern_type.756) = var_param_pattern %t.patt.loc9_20.1 [symbolic = %t.param_patt.loc9_15.2 (constants.%t.param_patt)] +// CHECK:STDOUT: %return.param_patt.loc9_29.1: @F.%pattern_type.loc9_29 (%pattern_type.f62) = out_param_pattern [symbolic = %return.param_patt.loc9_29.2 (constants.%return.param_patt.b93)] +// CHECK:STDOUT: %return.patt.loc9_25.1: @F.%pattern_type.loc9_29 (%pattern_type.f62) = return_slot_pattern %return.param_patt.loc9_29.1, %impl.elem0.loc9 [symbolic = %return.patt.loc9_25.2 (constants.%return.patt.058)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc9_28: %Ptr.type = name_ref T, %T.loc9_7.2 [symbolic = %T.loc9_7.1 (constants.%T.76f)] // CHECK:STDOUT: %Ptr.ref.loc9_31: type = name_ref Ptr, file.%Ptr.decl [concrete = constants.%Ptr.type] @@ -1474,6 +1569,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @U.as.Ptr.impl(%U.loc7_21.1: type) { +// CHECK:STDOUT: %U.patt.loc7_21.2: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc7_21.2 (constants.%U.patt.d47)] // CHECK:STDOUT: %U.loc7_21.2: type = symbolic_binding U, 0 [symbolic = %U.loc7_21.2 (constants.%U.67d)] // CHECK:STDOUT: %ptr.loc7_54.2: type = ptr_type %U.loc7_21.2 [symbolic = %ptr.loc7_54.2 (constants.%ptr.e8f8f9.1)] // CHECK:STDOUT: %Ptr_where.type: type = facet_type <@Ptr where constants.%impl.elem0.92c = %ptr.loc7_54.2> [symbolic = %Ptr_where.type (constants.%Ptr_where.type.71f)] @@ -1494,33 +1590,40 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc9_7.2: %Ptr.type) { +// CHECK:STDOUT: %T.patt.loc9_7.2: %pattern_type.f5d = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_7.2 (constants.%T.patt.a2e)] // CHECK:STDOUT: %T.loc9_7.1: %Ptr.type = symbolic_binding T, 0 [symbolic = %T.loc9_7.1 (constants.%T.76f)] // CHECK:STDOUT: %T.as_type.loc9_22.1: type = facet_access_type %T.loc9_7.1 [symbolic = %T.as_type.loc9_22.1 (constants.%T.as_type.468)] // CHECK:STDOUT: %pattern_type.loc9_20: type = pattern_type %T.as_type.loc9_22.1 [symbolic = %pattern_type.loc9_20 (constants.%pattern_type.756)] +// CHECK:STDOUT: %t.patt.loc9_20.2: @F.%pattern_type.loc9_20 (%pattern_type.756) = ref_binding_pattern t [symbolic = %t.patt.loc9_20.2 (constants.%t.patt)] +// CHECK:STDOUT: %t.param_patt.loc9_15.2: @F.%pattern_type.loc9_20 (%pattern_type.756) = var_param_pattern %t.patt.loc9_20.2 [symbolic = %t.param_patt.loc9_15.2 (constants.%t.param_patt)] // CHECK:STDOUT: %.loc9_29.1: require_specific_def_type = require_specific_def @U.as.Ptr.impl(%T.as_type.loc9_22.1) [symbolic = %.loc9_29.1 (constants.%.184)] // CHECK:STDOUT: %ptr: type = ptr_type %T.as_type.loc9_22.1 [symbolic = %ptr (constants.%ptr.ac4)] // CHECK:STDOUT: %.loc9_29.2: Core.Form = init_form %ptr [symbolic = %.loc9_29.2 (constants.%.e16)] // CHECK:STDOUT: %pattern_type.loc9_29: type = pattern_type %ptr [symbolic = %pattern_type.loc9_29 (constants.%pattern_type.f62)] +// CHECK:STDOUT: %return.param_patt.loc9_29.2: @F.%pattern_type.loc9_29 (%pattern_type.f62) = out_param_pattern [symbolic = %return.param_patt.loc9_29.2 (constants.%return.param_patt.b93)] +// CHECK:STDOUT: %return.patt.loc9_25.2: @F.%pattern_type.loc9_29 (%pattern_type.f62) = return_slot_pattern %return.param_patt.loc9_29.2, %ptr [symbolic = %return.patt.loc9_25.2 (constants.%return.patt.058)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc9_15: = require_complete_type %T.as_type.loc9_22.1 [symbolic = %require_complete.loc9_15 (constants.%require_complete.35c)] // CHECK:STDOUT: %require_complete.loc9_25: = require_complete_type %ptr [symbolic = %require_complete.loc9_25 (constants.%require_complete.841)] -// CHECK:STDOUT: %.loc10_10.2: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.as_type.loc9_22.1) [symbolic = %.loc10_10.2 (constants.%.ee9)] +// CHECK:STDOUT: %.loc10_10.3: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.as_type.loc9_22.1) [symbolic = %.loc10_10.3 (constants.%.ee9)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %ptr, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.d90)] -// CHECK:STDOUT: %Copy.facet.loc10_10.2: %Copy.type = facet_value %ptr, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc10_10.2 (constants.%Copy.facet)] -// CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.loc10_10.2) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.a39)] -// CHECK:STDOUT: %.loc10_10.3: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %Copy.facet.loc10_10.2 [symbolic = %.loc10_10.3 (constants.%.229)] -// CHECK:STDOUT: %impl.elem0.loc10_10.2: @F.%.loc10_10.3 (%.229) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc10_10.2 (constants.%impl.elem0.1f8)] -// CHECK:STDOUT: %specific_impl_fn.loc10_10.2: = specific_impl_function %impl.elem0.loc10_10.2, @Copy.WithSelf.Op(%Copy.facet.loc10_10.2) [symbolic = %specific_impl_fn.loc10_10.2 (constants.%specific_impl_fn.d80)] +// CHECK:STDOUT: %Copy.facet.loc10_10.3: %Copy.type = facet_value %ptr, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc10_10.3 (constants.%Copy.facet)] +// CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.loc10_10.3) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.a39)] +// CHECK:STDOUT: %.loc10_10.4: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %Copy.facet.loc10_10.3 [symbolic = %.loc10_10.4 (constants.%.229)] +// CHECK:STDOUT: %impl.elem0.loc10_10.2: @F.%.loc10_10.4 (%.229) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc10_10.2 (constants.%impl.elem0.1f8)] +// CHECK:STDOUT: %specific_impl_fn.loc10_10.2: = specific_impl_function %impl.elem0.loc10_10.2, @Copy.WithSelf.Op(%Copy.facet.loc10_10.3) [symbolic = %specific_impl_fn.loc10_10.2 (constants.%specific_impl_fn.d80)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%t.param: ref @F.%T.as_type.loc9_22.1 (%T.as_type.468)) -> out %return.param: @F.%ptr (%ptr.ac4) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %t.ref: ref @F.%T.as_type.loc9_22.1 (%T.as_type.468) = name_ref t, %t // CHECK:STDOUT: %addr: @F.%ptr (%ptr.ac4) = addr_of %t.ref -// CHECK:STDOUT: %impl.elem0.loc10_10.1: @F.%.loc10_10.3 (%.229) = impl_witness_access constants.%Copy.lookup_impl_witness.d90, element0 [symbolic = %impl.elem0.loc10_10.2 (constants.%impl.elem0.1f8)] +// CHECK:STDOUT: %impl.elem0.loc10_10.1: @F.%.loc10_10.4 (%.229) = impl_witness_access constants.%Copy.lookup_impl_witness.d90, element0 [symbolic = %impl.elem0.loc10_10.2 (constants.%impl.elem0.1f8)] // CHECK:STDOUT: %bound_method.loc10_10.1: = bound_method %addr, %impl.elem0.loc10_10.1 -// CHECK:STDOUT: %Copy.facet.loc10_10.1: %Copy.type = facet_value constants.%ptr.ac4, (constants.%Copy.lookup_impl_witness.d90) [symbolic = %Copy.facet.loc10_10.2 (constants.%Copy.facet)] -// CHECK:STDOUT: %.loc10_10.1: %Copy.type = converted constants.%ptr.ac4, %Copy.facet.loc10_10.1 [symbolic = %Copy.facet.loc10_10.2 (constants.%Copy.facet)] +// CHECK:STDOUT: %Copy.facet.loc10_10.1: %Copy.type = facet_value constants.%ptr.ac4, (constants.%Copy.lookup_impl_witness.d90) [symbolic = %Copy.facet.loc10_10.3 (constants.%Copy.facet)] +// CHECK:STDOUT: %.loc10_10.1: %Copy.type = converted constants.%ptr.ac4, %Copy.facet.loc10_10.1 [symbolic = %Copy.facet.loc10_10.3 (constants.%Copy.facet)] +// CHECK:STDOUT: %Copy.facet.loc10_10.2: %Copy.type = facet_value constants.%ptr.ac4, (constants.%Copy.lookup_impl_witness.d90) [symbolic = %Copy.facet.loc10_10.3 (constants.%Copy.facet)] +// CHECK:STDOUT: %.loc10_10.2: %Copy.type = converted constants.%ptr.ac4, %Copy.facet.loc10_10.2 [symbolic = %Copy.facet.loc10_10.3 (constants.%Copy.facet)] // CHECK:STDOUT: %specific_impl_fn.loc10_10.1: = specific_impl_function %impl.elem0.loc10_10.1, @Copy.WithSelf.Op(constants.%Copy.facet) [symbolic = %specific_impl_fn.loc10_10.2 (constants.%specific_impl_fn.d80)] // CHECK:STDOUT: %bound_method.loc10_10.2: = bound_method %addr, %specific_impl_fn.loc10_10.1 // CHECK:STDOUT: %Copy.WithSelf.Op.call: init @F.%ptr (%ptr.ac4) = call %bound_method.loc10_10.2(%addr) @@ -1537,6 +1640,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @U.as.Ptr.impl(constants.%U.67d) { +// CHECK:STDOUT: %U.patt.loc7_21.2 => constants.%U.patt.d47 // CHECK:STDOUT: %U.loc7_21.2 => constants.%U.67d // CHECK:STDOUT: %ptr.loc7_54.2 => constants.%ptr.e8f8f9.1 // CHECK:STDOUT: %Ptr_where.type => constants.%Ptr_where.type.71f @@ -1548,6 +1652,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @U.as.Ptr.impl(constants.%T.as_type.468) { +// CHECK:STDOUT: %U.patt.loc7_21.2 => constants.%U.patt.d47 // CHECK:STDOUT: %U.loc7_21.2 => constants.%T.as_type.468 // CHECK:STDOUT: %ptr.loc7_54.2 => constants.%ptr.ac4 // CHECK:STDOUT: %Ptr_where.type => constants.%Ptr_where.type.928 @@ -1562,12 +1667,17 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T.76f) { +// CHECK:STDOUT: %T.patt.loc9_7.2 => constants.%T.patt.a2e // CHECK:STDOUT: %T.loc9_7.1 => constants.%T.76f // CHECK:STDOUT: %T.as_type.loc9_22.1 => constants.%T.as_type.468 // CHECK:STDOUT: %pattern_type.loc9_20 => constants.%pattern_type.756 +// CHECK:STDOUT: %t.patt.loc9_20.2 => constants.%t.patt +// CHECK:STDOUT: %t.param_patt.loc9_15.2 => constants.%t.param_patt // CHECK:STDOUT: %.loc9_29.1 => constants.%.184 // CHECK:STDOUT: %ptr => constants.%ptr.ac4 // CHECK:STDOUT: %.loc9_29.2 => constants.%.e16 // CHECK:STDOUT: %pattern_type.loc9_29 => constants.%pattern_type.f62 +// CHECK:STDOUT: %return.param_patt.loc9_29.2 => constants.%return.param_patt.b93 +// CHECK:STDOUT: %return.patt.loc9_25.2 => constants.%return.patt.058 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/lookup/specific_args.carbon b/toolchain/check/testdata/impl/lookup/specific_args.carbon index 9862260aed1b..817863b9c2d3 100644 --- a/toolchain/check/testdata/impl/lookup/specific_args.carbon +++ b/toolchain/check/testdata/impl/lookup/specific_args.carbon @@ -62,6 +62,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %I.type.335: type = generic_interface_type @I [concrete] // CHECK:STDOUT: %I.generic: %I.type.335 = struct_value () [concrete] @@ -69,6 +70,8 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %Self: %I.type.3fe = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] // CHECK:STDOUT: %pattern_type.b82: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt: %pattern_type.b82 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt: %pattern_type.b82 = at_binding_pattern self, %self.param_patt [symbolic] // CHECK:STDOUT: %I.WithSelf.F.type: type = fn_type @I.WithSelf.F, @I.WithSelf(%T, %Self) [symbolic] // CHECK:STDOUT: %I.WithSelf.F: %I.WithSelf.F.type = struct_value () [symbolic] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I, @I(%T) [symbolic] @@ -88,7 +91,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: .X = %X.decl // CHECK:STDOUT: } // CHECK:STDOUT: %I.decl: %I.type.335 = interface_decl @I [concrete = constants.%I.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc4_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_17.1: type = splice_block %.loc4_17.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -97,7 +100,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %T.loc4_14.2: type = symbolic_binding T, 0 [symbolic = %T.loc4_14.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc5_10.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_10.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc5_13.1: type = splice_block %.loc5_13.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -109,6 +112,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @I(%T.loc4_14.2: type) { +// CHECK:STDOUT: %T.patt.loc4_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_14.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_14.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -121,8 +125,8 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %I.WithSelf.F.decl: @I.WithSelf.%I.WithSelf.F.type (%I.WithSelf.F.type) = fn_decl @I.WithSelf.F [symbolic = @I.WithSelf.%I.WithSelf.F (constants.%I.WithSelf.F)] { -// CHECK:STDOUT: %self.param_patt: @I.WithSelf.F.%pattern_type (%pattern_type.b82) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @I.WithSelf.F.%pattern_type (%pattern_type.b82) = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc4_30.1: @I.WithSelf.F.%pattern_type (%pattern_type.b82) = value_param_pattern [symbolic = %self.param_patt.loc4_30.2 (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt.loc4_30.1: @I.WithSelf.F.%pattern_type (%pattern_type.b82) = at_binding_pattern self, %self.param_patt.loc4_30.1 [symbolic = %self.patt.loc4_30.2 (constants.%self.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @I.WithSelf.F.%Self.as_type.loc4_30.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc4_30.1: type = splice_block %.loc4_30.3 [symbolic = %Self.as_type.loc4_30.1 (constants.%Self.as_type)] { @@ -145,6 +149,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc5_10.2: type) { +// CHECK:STDOUT: %T.patt.loc5_10.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_10.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc5_10.1: type = symbolic_binding T, 0 [symbolic = %T.loc5_10.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -172,11 +177,14 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %Self: @I.WithSelf.F.%I.type (%I.type.3fe) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc4_30.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc4_30.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc4_30.1 [symbolic = %pattern_type (constants.%pattern_type.b82)] +// CHECK:STDOUT: %self.param_patt.loc4_30.2: @I.WithSelf.F.%pattern_type (%pattern_type.b82) = value_param_pattern [symbolic = %self.param_patt.loc4_30.2 (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt.loc4_30.2: @I.WithSelf.F.%pattern_type (%pattern_type.b82) = at_binding_pattern self, %self.param_patt.loc4_30.2 [symbolic = %self.patt.loc4_30.2 (constants.%self.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @I.WithSelf.F.%Self.as_type.loc4_30.1 (%Self.as_type)); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_14.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_14.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -188,9 +196,12 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc4_30.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.b82 +// CHECK:STDOUT: %self.param_patt.loc4_30.2 => constants.%self.param_patt +// CHECK:STDOUT: %self.patt.loc4_30.2 => constants.%self.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%T) { +// CHECK:STDOUT: %T.patt.loc5_10.2 => constants.%T.patt // CHECK:STDOUT: %T.loc5_10.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -205,11 +216,15 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %I.generic: %I.type.335 = struct_value () [concrete] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %I.type.3fe: type = facet_type <@I, @I(%T)> [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Self.a67: %I.type.3fe = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %I.WithSelf.F.type.0fc: type = fn_type @I.WithSelf.F, @I.WithSelf(%T, %Self.a67) [symbolic] // CHECK:STDOUT: %I.WithSelf.F.a92: %I.WithSelf.F.type.0fc = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.a67 [symbolic] // CHECK:STDOUT: %pattern_type.efd: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt.e56: %pattern_type.efd = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.99d: %pattern_type.efd = at_binding_pattern self, %self.param_patt.e56 [symbolic] // CHECK:STDOUT: %I.type.ec4: type = facet_type <@I, @I(%InInterfaceArgs)> [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness @X.as.I.impl.%I.impl_witness_table [concrete] // CHECK:STDOUT: %Self.8d9: %I.type.ec4 = symbolic_binding Self, 1 [symbolic] @@ -218,6 +233,8 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %I.assoc_type.f32: type = assoc_entity_type @I, @I(%InInterfaceArgs) [concrete] // CHECK:STDOUT: %assoc0.d86: %I.assoc_type.f32 = assoc_entity element0, imports.%Main.import_ref.35c [concrete] // CHECK:STDOUT: %pattern_type.6cb: type = pattern_type %X [concrete] +// CHECK:STDOUT: %self.param_patt.172: %pattern_type.6cb = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.7ac: %pattern_type.6cb = at_binding_pattern self, %self.param_patt.172 [concrete] // CHECK:STDOUT: %X.as.I.impl.F.type: type = fn_type @X.as.I.impl.F [concrete] // CHECK:STDOUT: %X.as.I.impl.F: %X.as.I.impl.F.type = struct_value () [concrete] // CHECK:STDOUT: %I.facet: %I.type.ec4 = facet_value %X, (%I.impl_witness) [concrete] @@ -258,6 +275,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @I(imports.%Main.import_ref.b3bc94.3: type) [from "types.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -276,8 +294,8 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: // CHECK:STDOUT: impl @X.as.I.impl: %X.ref as %I.type { // CHECK:STDOUT: %X.as.I.impl.F.decl: %X.as.I.impl.F.type = fn_decl @X.as.I.impl.F [concrete = constants.%X.as.I.impl.F] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.6cb = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.6cb = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.6cb = value_param_pattern [concrete = constants.%self.param_patt.172] +// CHECK:STDOUT: %self.patt: %pattern_type.6cb = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.7ac] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %X = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @X.as.I.impl.%X.ref [concrete = constants.%X] @@ -313,6 +331,8 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %Self: @I.WithSelf.F.%I.type (%I.type.3fe) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self.a67)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.efd)] +// CHECK:STDOUT: %self.param_patt: @I.WithSelf.F.%pattern_type (%pattern_type.efd) = value_param_pattern [symbolic = %self.param_patt (constants.%self.param_patt.e56)] +// CHECK:STDOUT: %self.patt: @I.WithSelf.F.%pattern_type (%pattern_type.efd) = at_binding_pattern self, %self.param_patt [symbolic = %self.patt (constants.%self.patt.99d)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -323,6 +343,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -334,9 +355,12 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %Self => constants.%Self.a67 // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.efd +// CHECK:STDOUT: %self.param_patt => constants.%self.param_patt.e56 +// CHECK:STDOUT: %self.patt => constants.%self.patt.99d // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%InInterfaceArgs) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%InInterfaceArgs // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -372,6 +396,8 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %Self => constants.%I.facet // CHECK:STDOUT: %Self.as_type => constants.%X // CHECK:STDOUT: %pattern_type => constants.%pattern_type.6cb +// CHECK:STDOUT: %self.param_patt => constants.%self.param_patt.172 +// CHECK:STDOUT: %self.patt => constants.%self.patt.7ac // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- use_impl_in_interface_args.carbon @@ -381,6 +407,8 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.6cb: type = pattern_type %X [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.6cb = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.6cb = at_binding_pattern x, %x.param_patt [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] @@ -388,12 +416,16 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %I.generic: %I.type.335 = struct_value () [concrete] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %I.type.3fe: type = facet_type <@I, @I(%T)> [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Self.a67: %I.type.3fe = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %I.assoc_type.b71: type = assoc_entity_type @I, @I(%T) [symbolic] // CHECK:STDOUT: %I.WithSelf.F.type.0fc: type = fn_type @I.WithSelf.F, @I.WithSelf(%T, %Self.a67) [symbolic] // CHECK:STDOUT: %I.WithSelf.F.a92: %I.WithSelf.F.type.0fc = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.a67 [symbolic] // CHECK:STDOUT: %pattern_type.efd: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt.e56: %pattern_type.efd = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.99d: %pattern_type.efd = at_binding_pattern self, %self.param_patt.e56 [symbolic] // CHECK:STDOUT: %InInterfaceArgs: type = class_type @InInterfaceArgs [concrete] // CHECK:STDOUT: %I.type.ec4: type = facet_type <@I, @I(%InInterfaceArgs)> [concrete] // CHECK:STDOUT: %Self.8d9: %I.type.ec4 = symbolic_binding Self, 1 [symbolic] @@ -445,8 +477,8 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %x.param_patt: %pattern_type.6cb = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.6cb = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.6cb = value_param_pattern [concrete = constants.%x.param_patt] +// CHECK:STDOUT: %x.patt: %pattern_type.6cb = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %X = value_param call_param0 // CHECK:STDOUT: %X.ref: type = name_ref X, imports.%Main.X [concrete = constants.%X] @@ -455,6 +487,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @I(imports.%Main.import_ref.b3bc94.3: type) [from "types.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -510,6 +543,8 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %Self: @I.WithSelf.F.%I.type (%I.type.3fe) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self.a67)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.efd)] +// CHECK:STDOUT: %self.param_patt: @I.WithSelf.F.%pattern_type (%pattern_type.efd) = value_param_pattern [symbolic = %self.param_patt (constants.%self.param_patt.e56)] +// CHECK:STDOUT: %self.patt: @I.WithSelf.F.%pattern_type (%pattern_type.efd) = at_binding_pattern self, %self.param_patt [symbolic = %self.patt (constants.%self.patt.99d)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -517,6 +552,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: fn @X.as.I.impl.F [from "impl_in_interface_args.carbon"]; // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -528,9 +564,12 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %Self => constants.%Self.a67 // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.efd +// CHECK:STDOUT: %self.param_patt => constants.%self.param_patt.e56 +// CHECK:STDOUT: %self.patt => constants.%self.patt.99d // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%InInterfaceArgs) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%InInterfaceArgs // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -569,6 +608,8 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %C.165: type = class_type @C, @C(%InClassArgs) [concrete] // CHECK:STDOUT: %I.type.335: type = generic_interface_type @I [concrete] // CHECK:STDOUT: %I.generic: %I.type.335 = struct_value () [concrete] @@ -578,6 +619,8 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %I.WithSelf.F.a92: %I.WithSelf.F.type.0fc = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.a67 [symbolic] // CHECK:STDOUT: %pattern_type.efd: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt.e56: %pattern_type.efd = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.99d: %pattern_type.efd = at_binding_pattern self, %self.param_patt.e56 [symbolic] // CHECK:STDOUT: %X: type = class_type @X [concrete] // CHECK:STDOUT: %I.type.d91: type = facet_type <@I, @I(%X)> [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness @C.as.I.impl.%I.impl_witness_table [concrete] @@ -587,6 +630,8 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %I.assoc_type.696: type = assoc_entity_type @I, @I(%X) [concrete] // CHECK:STDOUT: %assoc0.a42: %I.assoc_type.696 = assoc_entity element0, imports.%Main.import_ref.35c [concrete] // CHECK:STDOUT: %pattern_type.90a: type = pattern_type %C.165 [concrete] +// CHECK:STDOUT: %self.param_patt.b6d: %pattern_type.90a = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.8f9: %pattern_type.90a = at_binding_pattern self, %self.param_patt.b6d [concrete] // CHECK:STDOUT: %C.as.I.impl.F.type: type = fn_type @C.as.I.impl.F [concrete] // CHECK:STDOUT: %C.as.I.impl.F: %C.as.I.impl.F.type = struct_value () [concrete] // CHECK:STDOUT: %I.facet: %I.type.d91 = facet_value %C.165, (%I.impl_witness) [concrete] @@ -632,6 +677,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @I(imports.%Main.import_ref.b3bc94.4: type) [from "types.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -650,8 +696,8 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.I.impl: %C as %I.type { // CHECK:STDOUT: %C.as.I.impl.F.decl: %C.as.I.impl.F.type = fn_decl @C.as.I.impl.F [concrete = constants.%C.as.I.impl.F] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.90a = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.90a = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.90a = value_param_pattern [concrete = constants.%self.param_patt.b6d] +// CHECK:STDOUT: %self.patt: %pattern_type.90a = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.8f9] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %C.165 = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @C.as.I.impl.%C [concrete = constants.%C.165] @@ -675,6 +721,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(imports.%Main.import_ref.b3bc94.1: type) [from "types.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -700,6 +747,8 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %Self: @I.WithSelf.F.%I.type (%I.type.3fe) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self.a67)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.efd)] +// CHECK:STDOUT: %self.param_patt: @I.WithSelf.F.%pattern_type (%pattern_type.efd) = value_param_pattern [symbolic = %self.param_patt (constants.%self.param_patt.e56)] +// CHECK:STDOUT: %self.patt: @I.WithSelf.F.%pattern_type (%pattern_type.efd) = at_binding_pattern self, %self.param_patt [symbolic = %self.patt (constants.%self.patt.99d)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -710,16 +759,19 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%InClassArgs) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%InClassArgs // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -731,9 +783,12 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %Self => constants.%Self.a67 // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.efd +// CHECK:STDOUT: %self.param_patt => constants.%self.param_patt.e56 +// CHECK:STDOUT: %self.patt => constants.%self.patt.99d // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%X) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%X // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -769,6 +824,8 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %Self => constants.%I.facet // CHECK:STDOUT: %Self.as_type => constants.%C.165 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.90a +// CHECK:STDOUT: %self.param_patt => constants.%self.param_patt.b6d +// CHECK:STDOUT: %self.patt => constants.%self.patt.8f9 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- use_impl_in_class_args.carbon @@ -780,9 +837,13 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %InClassArgs: type = class_type @InClassArgs [concrete] // CHECK:STDOUT: %C.165: type = class_type @C, @C(%InClassArgs) [concrete] // CHECK:STDOUT: %pattern_type.90a: type = pattern_type %C.165 [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.90a = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.90a = at_binding_pattern c, %c.param_patt [concrete] // CHECK:STDOUT: %H.type: type = fn_type @H [concrete] // CHECK:STDOUT: %H: %H.type = struct_value () [concrete] // CHECK:STDOUT: %I.type.335: type = generic_interface_type @I [concrete] @@ -794,6 +855,8 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %I.WithSelf.F.a92: %I.WithSelf.F.type.0fc = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.a67 [symbolic] // CHECK:STDOUT: %pattern_type.efd: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt.e56: %pattern_type.efd = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.99d: %pattern_type.efd = at_binding_pattern self, %self.param_patt.e56 [symbolic] // CHECK:STDOUT: %X: type = class_type @X [concrete] // CHECK:STDOUT: %I.type.d91: type = facet_type <@I, @I(%X)> [concrete] // CHECK:STDOUT: %Self.c9d: %I.type.d91 = symbolic_binding Self, 1 [symbolic] @@ -848,8 +911,8 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %H.decl: %H.type = fn_decl @H [concrete = constants.%H] { -// CHECK:STDOUT: %c.param_patt: %pattern_type.90a = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.90a = at_binding_pattern c, %c.param_patt [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.90a = value_param_pattern [concrete = constants.%c.param_patt] +// CHECK:STDOUT: %c.patt: %pattern_type.90a = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %C.165 = value_param call_param0 // CHECK:STDOUT: %.loc6_22: type = splice_block %C [concrete = constants.%C.165] { @@ -862,6 +925,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @I(imports.%Main.import_ref.b3bc94.4: type) [from "types.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -884,6 +948,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(imports.%Main.import_ref.b3bc94.1: type) [from "types.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -930,6 +995,8 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %Self: @I.WithSelf.F.%I.type (%I.type.3fe) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self.a67)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.efd)] +// CHECK:STDOUT: %self.param_patt: @I.WithSelf.F.%pattern_type (%pattern_type.efd) = value_param_pattern [symbolic = %self.param_patt (constants.%self.param_patt.e56)] +// CHECK:STDOUT: %self.patt: @I.WithSelf.F.%pattern_type (%pattern_type.efd) = at_binding_pattern self, %self.param_patt [symbolic = %self.patt (constants.%self.patt.99d)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -937,16 +1004,19 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: fn @C.as.I.impl.F [from "impl_in_class_args.carbon"]; // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%InClassArgs) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%InClassArgs // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -958,9 +1028,12 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %Self => constants.%Self.a67 // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.efd +// CHECK:STDOUT: %self.param_patt => constants.%self.param_patt.e56 +// CHECK:STDOUT: %self.patt => constants.%self.patt.99d // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%X) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%X // CHECK:STDOUT: // CHECK:STDOUT: !definition: diff --git a/toolchain/check/testdata/impl/lookup/transitive.carbon b/toolchain/check/testdata/impl/lookup/transitive.carbon index c3b8015e6c1f..7a80752182b1 100644 --- a/toolchain/check/testdata/impl/lookup/transitive.carbon +++ b/toolchain/check/testdata/impl/lookup/transitive.carbon @@ -55,6 +55,8 @@ fn Call() { // CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt: %pattern_type = at_binding_pattern self, %self.param_patt [symbolic] // CHECK:STDOUT: %I.WithSelf.F.type: type = fn_type @I.WithSelf.F, @I.WithSelf(%Self) [symbolic] // CHECK:STDOUT: %I.WithSelf.F: %I.WithSelf.F.type = struct_value () [symbolic] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] @@ -83,8 +85,8 @@ fn Call() { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %I.WithSelf.F.decl: @I.WithSelf.%I.WithSelf.F.type (%I.WithSelf.F.type) = fn_decl @I.WithSelf.F [symbolic = @I.WithSelf.%I.WithSelf.F (constants.%I.WithSelf.F)] { -// CHECK:STDOUT: %self.param_patt: @I.WithSelf.F.%pattern_type (%pattern_type) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @I.WithSelf.F.%pattern_type (%pattern_type) = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc4_20.1: @I.WithSelf.F.%pattern_type (%pattern_type) = value_param_pattern [symbolic = %self.param_patt.loc4_20.2 (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt.loc4_20.1: @I.WithSelf.F.%pattern_type (%pattern_type) = at_binding_pattern self, %self.param_patt.loc4_20.1 [symbolic = %self.patt.loc4_20.2 (constants.%self.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @I.WithSelf.F.%Self.as_type.loc4_20.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc4_20.1: type = splice_block %.loc4_20.2 [symbolic = %Self.as_type.loc4_20.1 (constants.%Self.as_type)] { @@ -108,6 +110,8 @@ fn Call() { // CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc4_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc4_20.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc4_20.1 [symbolic = %pattern_type (constants.%pattern_type)] +// CHECK:STDOUT: %self.param_patt.loc4_20.2: @I.WithSelf.F.%pattern_type (%pattern_type) = value_param_pattern [symbolic = %self.param_patt.loc4_20.2 (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt.loc4_20.2: @I.WithSelf.F.%pattern_type (%pattern_type) = at_binding_pattern self, %self.param_patt.loc4_20.2 [symbolic = %self.patt.loc4_20.2 (constants.%self.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @I.WithSelf.F.%Self.as_type.loc4_20.1 (%Self.as_type)); // CHECK:STDOUT: } @@ -118,6 +122,8 @@ fn Call() { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc4_20.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type +// CHECK:STDOUT: %self.param_patt.loc4_20.2 => constants.%self.param_patt +// CHECK:STDOUT: %self.patt.loc4_20.2 => constants.%self.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- c.carbon @@ -132,8 +138,12 @@ fn Call() { // CHECK:STDOUT: %I.WithSelf.F.ca5: %I.WithSelf.F.type.418 = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] // CHECK:STDOUT: %pattern_type.b3a: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt.58e: %pattern_type.b3a = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.300: %pattern_type.b3a = at_binding_pattern self, %self.param_patt.58e [symbolic] // CHECK:STDOUT: %I.impl_witness: = impl_witness @C.as.I.impl.%I.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %self.param_patt.303: %pattern_type.98b = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.49a: %pattern_type.98b = at_binding_pattern self, %self.param_patt.303 [concrete] // CHECK:STDOUT: %C.as.I.impl.F.type: type = fn_type @C.as.I.impl.F [concrete] // CHECK:STDOUT: %C.as.I.impl.F: %C.as.I.impl.F.type = struct_value () [concrete] // CHECK:STDOUT: %I.facet: %I.type = facet_value %C, (%I.impl_witness) [concrete] @@ -179,8 +189,8 @@ fn Call() { // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.I.impl: %C.ref as %I.ref { // CHECK:STDOUT: %C.as.I.impl.F.decl: %C.as.I.impl.F.type = fn_decl @C.as.I.impl.F [concrete = constants.%C.as.I.impl.F] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.98b = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.98b = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.98b = value_param_pattern [concrete = constants.%self.param_patt.303] +// CHECK:STDOUT: %self.patt: %pattern_type.98b = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.49a] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %C = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @C.as.I.impl.%C.ref [concrete = constants.%C] @@ -207,6 +217,8 @@ fn Call() { // CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.b3a)] +// CHECK:STDOUT: %self.param_patt: @I.WithSelf.F.%pattern_type (%pattern_type.b3a) = value_param_pattern [symbolic = %self.param_patt (constants.%self.param_patt.58e)] +// CHECK:STDOUT: %self.patt: @I.WithSelf.F.%pattern_type (%pattern_type.b3a) = at_binding_pattern self, %self.param_patt [symbolic = %self.patt (constants.%self.patt.300)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -227,6 +239,8 @@ fn Call() { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.b3a +// CHECK:STDOUT: %self.param_patt => constants.%self.param_patt.58e +// CHECK:STDOUT: %self.patt => constants.%self.patt.300 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I.WithSelf(constants.%I.facet) { @@ -240,6 +254,8 @@ fn Call() { // CHECK:STDOUT: %Self => constants.%I.facet // CHECK:STDOUT: %Self.as_type => constants.%C // CHECK:STDOUT: %pattern_type => constants.%pattern_type.98b +// CHECK:STDOUT: %self.param_patt => constants.%self.param_patt.303 +// CHECK:STDOUT: %self.patt => constants.%self.patt.49a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- get.carbon @@ -250,6 +266,8 @@ fn Call() { // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %.a44: Core.Form = init_form %C [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %C [concrete] // CHECK:STDOUT: %Get.type: type = fn_type @Get [concrete] // CHECK:STDOUT: %Get: %Get.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -273,8 +291,8 @@ fn Call() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %Get.decl: %Get.type = fn_decl @Get [concrete = constants.%Get] { -// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %C.ref [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %C.ref [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %.loc6: Core.Form = init_form %C.ref [concrete = constants.%.a44] @@ -309,6 +327,8 @@ fn Call() { // CHECK:STDOUT: %I.WithSelf.F.ca5: %I.WithSelf.F.type.418 = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type.b38: type = facet_access_type %Self.dda [symbolic] // CHECK:STDOUT: %pattern_type.b3a: type = pattern_type %Self.as_type.b38 [symbolic] +// CHECK:STDOUT: %self.param_patt.58e: %pattern_type.b3a = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.300: %pattern_type.b3a = at_binding_pattern self, %self.param_patt.58e [symbolic] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] // CHECK:STDOUT: %assoc0.232: %I.assoc_type = assoc_entity element0, imports.%Main.import_ref.9f7 [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness imports.%I.impl_witness_table [concrete] @@ -402,6 +422,8 @@ fn Call() { // CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.dda)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.b38)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.b3a)] +// CHECK:STDOUT: %self.param_patt: @I.WithSelf.F.%pattern_type (%pattern_type.b3a) = value_param_pattern [symbolic = %self.param_patt (constants.%self.param_patt.58e)] +// CHECK:STDOUT: %self.patt: @I.WithSelf.F.%pattern_type (%pattern_type.b3a) = at_binding_pattern self, %self.param_patt [symbolic = %self.patt (constants.%self.patt.300)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -426,6 +448,8 @@ fn Call() { // CHECK:STDOUT: %Self => constants.%Self.dda // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.b38 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.b3a +// CHECK:STDOUT: %self.param_patt => constants.%self.param_patt.58e +// CHECK:STDOUT: %self.patt => constants.%self.patt.300 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I.WithSelf(constants.%I.facet) { diff --git a/toolchain/check/testdata/impl/multiple_extend.carbon b/toolchain/check/testdata/impl/multiple_extend.carbon index 7efe59c96c8d..7aabaefa500a 100644 --- a/toolchain/check/testdata/impl/multiple_extend.carbon +++ b/toolchain/check/testdata/impl/multiple_extend.carbon @@ -196,6 +196,8 @@ fn P(o: O) { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = at_binding_pattern c, %c.param_patt [concrete] // CHECK:STDOUT: %H.type: type = fn_type @H [concrete] // CHECK:STDOUT: %H: %H.type = struct_value () [concrete] // CHECK:STDOUT: %type: type = facet_type [concrete] @@ -219,8 +221,8 @@ fn P(o: O) { // CHECK:STDOUT: %HasG.decl: type = interface_decl @HasG [concrete = constants.%HasG.type] {} {} // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %H.decl: %H.type = fn_decl @H [concrete = constants.%H] { -// CHECK:STDOUT: %c.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type = at_binding_pattern c, %c.param_patt [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type = value_param_pattern [concrete = constants.%c.param_patt] +// CHECK:STDOUT: %c.patt: %pattern_type = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref.loc21: type = name_ref C, file.%C.decl [concrete = constants.%C] @@ -427,6 +429,8 @@ fn P(o: O) { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %D [concrete] +// CHECK:STDOUT: %d.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type = at_binding_pattern d, %d.param_patt [concrete] // CHECK:STDOUT: %B.type: type = fn_type @B [concrete] // CHECK:STDOUT: %B: %B.type = struct_value () [concrete] // CHECK:STDOUT: %type: type = facet_type [concrete] @@ -448,8 +452,8 @@ fn P(o: O) { // CHECK:STDOUT: %HasA2.decl: type = interface_decl @HasA2 [concrete = constants.%HasA2.type] {} {} // CHECK:STDOUT: %D.decl: type = class_decl @D [concrete = constants.%D] {} {} // CHECK:STDOUT: %B.decl: %B.type = fn_decl @B [concrete = constants.%B] { -// CHECK:STDOUT: %d.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %d.patt: %pattern_type = at_binding_pattern d, %d.param_patt [concrete] +// CHECK:STDOUT: %d.param_patt: %pattern_type = value_param_pattern [concrete = constants.%d.param_patt] +// CHECK:STDOUT: %d.patt: %pattern_type = at_binding_pattern d, %d.param_patt [concrete = constants.%d.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %d.param: %D = value_param call_param0 // CHECK:STDOUT: %D.ref.loc21: type = name_ref D, file.%D.decl [concrete = constants.%D] @@ -636,6 +640,8 @@ fn P(o: O) { // CHECK:STDOUT: %struct_type.base.e05: type = struct_type {.base: %B} [concrete] // CHECK:STDOUT: %complete_type.c77: = complete_type_witness %struct_type.base.e05 [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %E [concrete] +// CHECK:STDOUT: %e.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type = at_binding_pattern e, %e.param_patt [concrete] // CHECK:STDOUT: %H.type: type = fn_type @H [concrete] // CHECK:STDOUT: %H: %H.type = struct_value () [concrete] // CHECK:STDOUT: %type: type = facet_type [concrete] @@ -656,8 +662,8 @@ fn P(o: O) { // CHECK:STDOUT: %B.decl: type = class_decl @B [concrete = constants.%B] {} {} // CHECK:STDOUT: %E.decl: type = class_decl @E [concrete = constants.%E] {} {} // CHECK:STDOUT: %H.decl: %H.type = fn_decl @H [concrete = constants.%H] { -// CHECK:STDOUT: %e.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %e.patt: %pattern_type = at_binding_pattern e, %e.param_patt [concrete] +// CHECK:STDOUT: %e.param_patt: %pattern_type = value_param_pattern [concrete = constants.%e.param_patt] +// CHECK:STDOUT: %e.patt: %pattern_type = at_binding_pattern e, %e.param_patt [concrete = constants.%e.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %e.param: %E = value_param call_param0 // CHECK:STDOUT: %E.ref.loc19: type = name_ref E, file.%E.decl [concrete = constants.%E] @@ -809,6 +815,8 @@ fn P(o: O) { // CHECK:STDOUT: %struct_type.base.cae: type = struct_type {.base: %Base} [concrete] // CHECK:STDOUT: %complete_type.c02: = complete_type_witness %struct_type.base.cae [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %L [concrete] +// CHECK:STDOUT: %l.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %l.patt: %pattern_type = at_binding_pattern l, %l.param_patt [concrete] // CHECK:STDOUT: %M.type: type = fn_type @M [concrete] // CHECK:STDOUT: %M: %M.type = struct_value () [concrete] // CHECK:STDOUT: %type: type = facet_type [concrete] @@ -828,8 +836,8 @@ fn P(o: O) { // CHECK:STDOUT: %HasK.decl: type = interface_decl @HasK [concrete = constants.%HasK.type] {} {} // CHECK:STDOUT: %L.decl: type = class_decl @L [concrete = constants.%L] {} {} // CHECK:STDOUT: %M.decl: %M.type = fn_decl @M [concrete = constants.%M] { -// CHECK:STDOUT: %l.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %l.patt: %pattern_type = at_binding_pattern l, %l.param_patt [concrete] +// CHECK:STDOUT: %l.param_patt: %pattern_type = value_param_pattern [concrete = constants.%l.param_patt] +// CHECK:STDOUT: %l.patt: %pattern_type = at_binding_pattern l, %l.param_patt [concrete = constants.%l.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %l.param: %L = value_param call_param0 // CHECK:STDOUT: %L.ref.loc19: type = name_ref L, file.%L.decl [concrete = constants.%L] @@ -983,6 +991,8 @@ fn P(o: O) { // CHECK:STDOUT: %struct_type.base.40f: type = struct_type {.base: %NBase} [concrete] // CHECK:STDOUT: %complete_type.3b3: = complete_type_witness %struct_type.base.40f [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %O [concrete] +// CHECK:STDOUT: %o.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %o.patt: %pattern_type = at_binding_pattern o, %o.param_patt [concrete] // CHECK:STDOUT: %P.type: type = fn_type @P [concrete] // CHECK:STDOUT: %P: %P.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -1000,8 +1010,8 @@ fn P(o: O) { // CHECK:STDOUT: %HasN2.decl: type = interface_decl @HasN2 [concrete = constants.%HasN2.type] {} {} // CHECK:STDOUT: %O.decl: type = class_decl @O [concrete = constants.%O] {} {} // CHECK:STDOUT: %P.decl: %P.type = fn_decl @P [concrete = constants.%P] { -// CHECK:STDOUT: %o.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %o.patt: %pattern_type = at_binding_pattern o, %o.param_patt [concrete] +// CHECK:STDOUT: %o.param_patt: %pattern_type = value_param_pattern [concrete = constants.%o.param_patt] +// CHECK:STDOUT: %o.patt: %pattern_type = at_binding_pattern o, %o.param_patt [concrete = constants.%o.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %o.param: %O = value_param call_param0 // CHECK:STDOUT: %O.ref.loc27: type = name_ref O, file.%O.decl [concrete = constants.%O] diff --git a/toolchain/check/testdata/impl/name_lookup_in_impl_definition.carbon b/toolchain/check/testdata/impl/name_lookup_in_impl_definition.carbon index ef79548dc071..ecf8524ccadf 100644 --- a/toolchain/check/testdata/impl/name_lookup_in_impl_definition.carbon +++ b/toolchain/check/testdata/impl/name_lookup_in_impl_definition.carbon @@ -34,11 +34,15 @@ impl forall [T:! type] T as I where .U = C { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %I.impl_witness: = impl_witness @T.as.I.impl.%I.impl_witness_table, @T.as.I.impl(%T) [symbolic] // CHECK:STDOUT: %I.facet: %I.type = facet_value %T, (%I.impl_witness) [symbolic] // CHECK:STDOUT: %.a44: Core.Form = init_form %C [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %return.param_patt.89a: %pattern_type.98b = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e4a: %pattern_type.98b = return_slot_pattern %return.param_patt.89a, %C [concrete] // CHECK:STDOUT: %T.as.I.impl.F.type: type = fn_type @T.as.I.impl.F, @T.as.I.impl(%T) [symbolic] // CHECK:STDOUT: %T.as.I.impl.F: %T.as.I.impl.F.type = struct_value () [symbolic] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] @@ -53,8 +57,8 @@ impl forall [T:! type] T as I where .U = C { // CHECK:STDOUT: // CHECK:STDOUT: impl: %T.ref as %.loc10_31 { // CHECK:STDOUT: %T.as.I.impl.F.decl: @T.as.I.impl.%T.as.I.impl.F.type (%T.as.I.impl.F.type) = fn_decl @T.as.I.impl.F [symbolic = @T.as.I.impl.%T.as.I.impl.F (constants.%T.as.I.impl.F)] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %U.ref [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete = constants.%return.param_patt.89a] +// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %U.ref [concrete = constants.%return.patt.e4a] // CHECK:STDOUT: } { // CHECK:STDOUT: %I.facet.loc13_13.2: %I.type = facet_value @T.as.I.impl.%T.ref, (constants.%I.impl_witness) [symbolic = %I.facet.loc13_13.1 (constants.%I.facet)] // CHECK:STDOUT: %.loc13_13.1: %I.type = converted @T.as.I.impl.%T.ref, %I.facet.loc13_13.2 [symbolic = %I.facet.loc13_13.1 (constants.%I.facet)] @@ -98,6 +102,7 @@ impl forall [T:! type] T as I where .U = C { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @T.as.I.impl(constants.%T) { +// CHECK:STDOUT: %T.patt.loc10_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc10_15.1 => constants.%T // CHECK:STDOUT: %I.impl_witness.loc10_44.2 => constants.%I.impl_witness // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/self_in_class.carbon b/toolchain/check/testdata/impl/self_in_class.carbon index ba3127059299..12acf33a1e8d 100644 --- a/toolchain/check/testdata/impl/self_in_class.carbon +++ b/toolchain/check/testdata/impl/self_in_class.carbon @@ -34,6 +34,8 @@ class A { // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] // CHECK:STDOUT: %.a3b: Core.Form = init_form %Self.as_type [symbolic] // CHECK:STDOUT: %pattern_type.daa: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %return.param_patt.080: %pattern_type.daa = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.d84: %pattern_type.daa = return_slot_pattern %return.param_patt.080, %Self.as_type [symbolic] // CHECK:STDOUT: %DefaultConstructible.WithSelf.Make.type.6f5: type = fn_type @DefaultConstructible.WithSelf.Make, @DefaultConstructible.WithSelf(%Self) [symbolic] // CHECK:STDOUT: %DefaultConstructible.WithSelf.Make.a1d: %DefaultConstructible.WithSelf.Make.type.6f5 = struct_value () [symbolic] // CHECK:STDOUT: %DefaultConstructible.assoc_type: type = assoc_entity_type @DefaultConstructible [concrete] @@ -45,6 +47,8 @@ class A { // CHECK:STDOUT: %DefaultConstructible.impl_witness: = impl_witness @C.as.DefaultConstructible.impl.%DefaultConstructible.impl_witness_table [concrete] // CHECK:STDOUT: %.a44: Core.Form = init_form %C [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %return.param_patt.89a: %pattern_type.98b = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e4a: %pattern_type.98b = return_slot_pattern %return.param_patt.89a, %C [concrete] // CHECK:STDOUT: %C.as.DefaultConstructible.impl.Make.type: type = fn_type @C.as.DefaultConstructible.impl.Make [concrete] // CHECK:STDOUT: %C.as.DefaultConstructible.impl.Make: %C.as.DefaultConstructible.impl.Make.type = struct_value () [concrete] // CHECK:STDOUT: %DefaultConstructible.facet: %DefaultConstructible.type = facet_value %C, (%DefaultConstructible.impl_witness) [concrete] @@ -71,8 +75,8 @@ class A { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %DefaultConstructible.WithSelf.Make.decl: @DefaultConstructible.WithSelf.%DefaultConstructible.WithSelf.Make.type (%DefaultConstructible.WithSelf.Make.type.6f5) = fn_decl @DefaultConstructible.WithSelf.Make [symbolic = @DefaultConstructible.WithSelf.%DefaultConstructible.WithSelf.Make (constants.%DefaultConstructible.WithSelf.Make.a1d)] { -// CHECK:STDOUT: %return.param_patt: @DefaultConstructible.WithSelf.Make.%pattern_type (%pattern_type.daa) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @DefaultConstructible.WithSelf.Make.%pattern_type (%pattern_type.daa) = return_slot_pattern %return.param_patt, %.loc16_16.2 [concrete] +// CHECK:STDOUT: %return.param_patt.loc16_16.1: @DefaultConstructible.WithSelf.Make.%pattern_type (%pattern_type.daa) = out_param_pattern [symbolic = %return.param_patt.loc16_16.2 (constants.%return.param_patt.080)] +// CHECK:STDOUT: %return.patt.loc16_13.1: @DefaultConstructible.WithSelf.Make.%pattern_type (%pattern_type.daa) = return_slot_pattern %return.param_patt.loc16_16.1, %.loc16_16.2 [symbolic = %return.patt.loc16_13.2 (constants.%return.patt.d84)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref: %DefaultConstructible.type = name_ref Self, @DefaultConstructible.%Self [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc16_16.2: type = facet_access_type %Self.ref [symbolic = %Self.as_type.loc16_16.1 (constants.%Self.as_type)] @@ -93,8 +97,8 @@ class A { // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.DefaultConstructible.impl: %C.ref as %DefaultConstructible.ref { // CHECK:STDOUT: %C.as.DefaultConstructible.impl.Make.decl: %C.as.DefaultConstructible.impl.Make.type = fn_decl @C.as.DefaultConstructible.impl.Make [concrete = constants.%C.as.DefaultConstructible.impl.Make] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %Self.ref [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete = constants.%return.param_patt.89a] +// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %Self.ref [concrete = constants.%return.patt.e4a] // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref: type = name_ref Self, @C.as.DefaultConstructible.impl.%C.ref [concrete = constants.%C] // CHECK:STDOUT: %.loc25_18: Core.Form = init_form %Self.ref [concrete = constants.%.a44] @@ -137,6 +141,8 @@ class A { // CHECK:STDOUT: %Self.as_type.loc16_16.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc16_16.1 (constants.%Self.as_type)] // CHECK:STDOUT: %.loc16_16.1: Core.Form = init_form %Self.as_type.loc16_16.1 [symbolic = %.loc16_16.1 (constants.%.a3b)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc16_16.1 [symbolic = %pattern_type (constants.%pattern_type.daa)] +// CHECK:STDOUT: %return.param_patt.loc16_16.2: @DefaultConstructible.WithSelf.Make.%pattern_type (%pattern_type.daa) = out_param_pattern [symbolic = %return.param_patt.loc16_16.2 (constants.%return.param_patt.080)] +// CHECK:STDOUT: %return.patt.loc16_13.2: @DefaultConstructible.WithSelf.Make.%pattern_type (%pattern_type.daa) = return_slot_pattern %return.param_patt.loc16_16.2, %Self.as_type.loc16_16.1 [symbolic = %return.patt.loc16_13.2 (constants.%return.patt.d84)] // CHECK:STDOUT: // CHECK:STDOUT: fn() -> out %return.param: @DefaultConstructible.WithSelf.Make.%Self.as_type.loc16_16.1 (%Self.as_type); // CHECK:STDOUT: } @@ -161,6 +167,8 @@ class A { // CHECK:STDOUT: %Self.as_type.loc16_16.1 => constants.%Self.as_type // CHECK:STDOUT: %.loc16_16.1 => constants.%.a3b // CHECK:STDOUT: %pattern_type => constants.%pattern_type.daa +// CHECK:STDOUT: %return.param_patt.loc16_16.2 => constants.%return.param_patt.080 +// CHECK:STDOUT: %return.patt.loc16_13.2 => constants.%return.patt.d84 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @DefaultConstructible.WithSelf(constants.%DefaultConstructible.facet) { @@ -175,5 +183,7 @@ class A { // CHECK:STDOUT: %Self.as_type.loc16_16.1 => constants.%C // CHECK:STDOUT: %.loc16_16.1 => constants.%.a44 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.98b +// CHECK:STDOUT: %return.param_patt.loc16_16.2 => constants.%return.param_patt.89a +// CHECK:STDOUT: %return.patt.loc16_13.2 => constants.%return.patt.e4a // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/self_in_signature.carbon b/toolchain/check/testdata/impl/self_in_signature.carbon index b1192264dab9..50ae1122ebc0 100644 --- a/toolchain/check/testdata/impl/self_in_signature.carbon +++ b/toolchain/check/testdata/impl/self_in_signature.carbon @@ -48,7 +48,13 @@ impl D as SelfNested { // CHECK:STDOUT: %Self.bde: %UseSelf.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type.968: type = facet_access_type %Self.bde [symbolic] // CHECK:STDOUT: %pattern_type.04e: type = pattern_type %Self.as_type.968 [symbolic] +// CHECK:STDOUT: %self.param_patt.1da: %pattern_type.04e = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.36a: %pattern_type.04e = at_binding_pattern self, %self.param_patt.1da [symbolic] +// CHECK:STDOUT: %x.param_patt.14a: %pattern_type.04e = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.6f8: %pattern_type.04e = at_binding_pattern x, %x.param_patt.14a [symbolic] // CHECK:STDOUT: %.326: Core.Form = init_form %Self.as_type.968 [symbolic] +// CHECK:STDOUT: %return.param_patt.ff3: %pattern_type.04e = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.8f7: %pattern_type.04e = return_slot_pattern %return.param_patt.ff3, %Self.as_type.968 [symbolic] // CHECK:STDOUT: %UseSelf.WithSelf.F.type.74d: type = fn_type @UseSelf.WithSelf.F, @UseSelf.WithSelf(%Self.bde) [symbolic] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %UseSelf.WithSelf.F.8c4: %UseSelf.WithSelf.F.type.74d = struct_value () [symbolic] @@ -60,7 +66,13 @@ impl D as SelfNested { // CHECK:STDOUT: %D: type = class_type @D [concrete] // CHECK:STDOUT: %UseSelf.impl_witness.046: = impl_witness @C.as.UseSelf.impl.%UseSelf.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %self.param_patt.303: %pattern_type.98b = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.49a: %pattern_type.98b = at_binding_pattern self, %self.param_patt.303 [concrete] +// CHECK:STDOUT: %x.param_patt.0f9: %pattern_type.98b = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.2cc: %pattern_type.98b = at_binding_pattern x, %x.param_patt.0f9 [concrete] // CHECK:STDOUT: %.a44: Core.Form = init_form %C [concrete] +// CHECK:STDOUT: %return.param_patt.89a: %pattern_type.98b = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e4a: %pattern_type.98b = return_slot_pattern %return.param_patt.89a, %C [concrete] // CHECK:STDOUT: %C.as.UseSelf.impl.F.type: type = fn_type @C.as.UseSelf.impl.F [concrete] // CHECK:STDOUT: %C.as.UseSelf.impl.F: %C.as.UseSelf.impl.F.type = struct_value () [concrete] // CHECK:STDOUT: %UseSelf.facet.14b: %UseSelf.type = facet_value %C, (%UseSelf.impl_witness.046) [concrete] @@ -70,7 +82,13 @@ impl D as SelfNested { // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %UseSelf.impl_witness.047: = impl_witness @D.as.UseSelf.impl.%UseSelf.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.d8d: type = pattern_type %D [concrete] +// CHECK:STDOUT: %self.param_patt.f16: %pattern_type.d8d = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.6c0: %pattern_type.d8d = at_binding_pattern self, %self.param_patt.f16 [concrete] +// CHECK:STDOUT: %x.param_patt.23b: %pattern_type.d8d = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.75f: %pattern_type.d8d = at_binding_pattern x, %x.param_patt.23b [concrete] // CHECK:STDOUT: %.592: Core.Form = init_form %D [concrete] +// CHECK:STDOUT: %return.param_patt.eae: %pattern_type.d8d = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e38: %pattern_type.d8d = return_slot_pattern %return.param_patt.eae, %D [concrete] // CHECK:STDOUT: %D.as.UseSelf.impl.F.type: type = fn_type @D.as.UseSelf.impl.F [concrete] // CHECK:STDOUT: %D.as.UseSelf.impl.F: %D.as.UseSelf.impl.F.type = struct_value () [concrete] // CHECK:STDOUT: %UseSelf.facet.64f: %UseSelf.type = facet_value %D, (%UseSelf.impl_witness.047) [concrete] @@ -87,6 +105,8 @@ impl D as SelfNested { // CHECK:STDOUT: %tuple.876: %tuple.type.24b = tuple_value (%ptr.a16, %struct_type.x.y.749) [symbolic] // CHECK:STDOUT: %tuple.type.d83: type = tuple_type (%ptr.a16, %struct_type.x.y.749) [symbolic] // CHECK:STDOUT: %pattern_type.6eb: type = pattern_type %tuple.type.d83 [symbolic] +// CHECK:STDOUT: %x.param_patt.a6c: %pattern_type.6eb = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.792: %pattern_type.6eb = at_binding_pattern x, %x.param_patt.a6c [symbolic] // CHECK:STDOUT: %SelfNested.WithSelf.F.type.702: type = fn_type @SelfNested.WithSelf.F, @SelfNested.WithSelf(%Self.e81) [symbolic] // CHECK:STDOUT: %SelfNested.WithSelf.F.eec: %SelfNested.WithSelf.F.type.702 = struct_value () [symbolic] // CHECK:STDOUT: %SelfNested.assoc_type: type = assoc_entity_type @SelfNested [concrete] @@ -97,6 +117,8 @@ impl D as SelfNested { // CHECK:STDOUT: %tuple.562: %tuple.type.24b = tuple_value (%ptr.6b6, %struct_type.x.y.ee7) [concrete] // CHECK:STDOUT: %tuple.type.746: type = tuple_type (%ptr.6b6, %struct_type.x.y.ee7) [concrete] // CHECK:STDOUT: %pattern_type.79c: type = pattern_type %tuple.type.746 [concrete] +// CHECK:STDOUT: %x.param_patt.110: %pattern_type.79c = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.99f: %pattern_type.79c = at_binding_pattern x, %x.param_patt.110 [concrete] // CHECK:STDOUT: %C.as.SelfNested.impl.F.type: type = fn_type @C.as.SelfNested.impl.F [concrete] // CHECK:STDOUT: %C.as.SelfNested.impl.F: %C.as.SelfNested.impl.F.type = struct_value () [concrete] // CHECK:STDOUT: %SelfNested.facet.749: %SelfNested.type = facet_value %C, (%SelfNested.impl_witness.d40) [concrete] @@ -108,6 +130,8 @@ impl D as SelfNested { // CHECK:STDOUT: %tuple.c73: %tuple.type.24b = tuple_value (%ptr.d57, %struct_type.x.y.e52) [concrete] // CHECK:STDOUT: %tuple.type.aaa: type = tuple_type (%ptr.d57, %struct_type.x.y.e52) [concrete] // CHECK:STDOUT: %pattern_type.338: type = pattern_type %tuple.type.aaa [concrete] +// CHECK:STDOUT: %x.param_patt.a5b: %pattern_type.338 = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.766: %pattern_type.338 = at_binding_pattern x, %x.param_patt.a5b [concrete] // CHECK:STDOUT: %D.as.SelfNested.impl.F.type: type = fn_type @D.as.SelfNested.impl.F [concrete] // CHECK:STDOUT: %D.as.SelfNested.impl.F: %D.as.SelfNested.impl.F.type = struct_value () [concrete] // CHECK:STDOUT: %SelfNested.facet.d22: %SelfNested.type = facet_value %D, (%SelfNested.impl_witness.ad8) [concrete] @@ -150,12 +174,12 @@ impl D as SelfNested { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %UseSelf.WithSelf.F.decl: @UseSelf.WithSelf.%UseSelf.WithSelf.F.type (%UseSelf.WithSelf.F.type.74d) = fn_decl @UseSelf.WithSelf.F [symbolic = @UseSelf.WithSelf.%UseSelf.WithSelf.F (constants.%UseSelf.WithSelf.F.8c4)] { -// CHECK:STDOUT: %self.param_patt: @UseSelf.WithSelf.F.%pattern_type (%pattern_type.04e) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @UseSelf.WithSelf.F.%pattern_type (%pattern_type.04e) = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %x.param_patt: @UseSelf.WithSelf.F.%pattern_type (%pattern_type.04e) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @UseSelf.WithSelf.F.%pattern_type (%pattern_type.04e) = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @UseSelf.WithSelf.F.%pattern_type (%pattern_type.04e) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @UseSelf.WithSelf.F.%pattern_type (%pattern_type.04e) = return_slot_pattern %return.param_patt, %.loc16_26.2 [concrete] +// CHECK:STDOUT: %self.param_patt.loc16_8.1: @UseSelf.WithSelf.F.%pattern_type (%pattern_type.04e) = value_param_pattern [symbolic = %self.param_patt.loc16_8.2 (constants.%self.param_patt.1da)] +// CHECK:STDOUT: %self.patt.loc16_8.1: @UseSelf.WithSelf.F.%pattern_type (%pattern_type.04e) = at_binding_pattern self, %self.param_patt.loc16_8.1 [symbolic = %self.patt.loc16_8.2 (constants.%self.patt.36a)] +// CHECK:STDOUT: %x.param_patt.loc16_15.1: @UseSelf.WithSelf.F.%pattern_type (%pattern_type.04e) = value_param_pattern [symbolic = %x.param_patt.loc16_15.2 (constants.%x.param_patt.14a)] +// CHECK:STDOUT: %x.patt.loc16_15.1: @UseSelf.WithSelf.F.%pattern_type (%pattern_type.04e) = at_binding_pattern x, %x.param_patt.loc16_15.1 [symbolic = %x.patt.loc16_15.2 (constants.%x.patt.6f8)] +// CHECK:STDOUT: %return.param_patt.loc16_26.1: @UseSelf.WithSelf.F.%pattern_type (%pattern_type.04e) = out_param_pattern [symbolic = %return.param_patt.loc16_26.2 (constants.%return.param_patt.ff3)] +// CHECK:STDOUT: %return.patt.loc16_23.1: @UseSelf.WithSelf.F.%pattern_type (%pattern_type.04e) = return_slot_pattern %return.param_patt.loc16_26.1, %.loc16_26.2 [symbolic = %return.patt.loc16_23.2 (constants.%return.patt.8f7)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc16_26: %UseSelf.type = name_ref Self, @UseSelf.%Self [symbolic = %Self (constants.%Self.bde)] // CHECK:STDOUT: %Self.as_type.loc16_26: type = facet_access_type %Self.ref.loc16_26 [symbolic = %Self.as_type.loc16_8.1 (constants.%Self.as_type.968)] @@ -195,8 +219,8 @@ impl D as SelfNested { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %SelfNested.WithSelf.F.decl: @SelfNested.WithSelf.%SelfNested.WithSelf.F.type (%SelfNested.WithSelf.F.type.702) = fn_decl @SelfNested.WithSelf.F [symbolic = @SelfNested.WithSelf.%SelfNested.WithSelf.F (constants.%SelfNested.WithSelf.F.eec)] { -// CHECK:STDOUT: %x.param_patt: @SelfNested.WithSelf.F.%pattern_type (%pattern_type.6eb) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @SelfNested.WithSelf.F.%pattern_type (%pattern_type.6eb) = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %x.param_patt.loc32_9.1: @SelfNested.WithSelf.F.%pattern_type (%pattern_type.6eb) = value_param_pattern [symbolic = %x.param_patt.loc32_9.2 (constants.%x.param_patt.a6c)] +// CHECK:STDOUT: %x.patt.loc32_9.1: @SelfNested.WithSelf.F.%pattern_type (%pattern_type.6eb) = at_binding_pattern x, %x.param_patt.loc32_9.1 [symbolic = %x.patt.loc32_9.2 (constants.%x.patt.792)] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: @SelfNested.WithSelf.F.%tuple.type (%tuple.type.d83) = value_param call_param0 // CHECK:STDOUT: %.loc32_37.1: type = splice_block %.loc32_37.3 [symbolic = %tuple.type (constants.%tuple.type.d83)] { @@ -228,12 +252,12 @@ impl D as SelfNested { // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.UseSelf.impl: %C.ref as %UseSelf.ref { // CHECK:STDOUT: %C.as.UseSelf.impl.F.decl: %C.as.UseSelf.impl.F.type = fn_decl @C.as.UseSelf.impl.F [concrete = constants.%C.as.UseSelf.impl.F] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.98b = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.98b = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %x.param_patt: %pattern_type.98b = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.98b = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C.ref.loc24_40 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.98b = value_param_pattern [concrete = constants.%self.param_patt.303] +// CHECK:STDOUT: %self.patt: %pattern_type.98b = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.49a] +// CHECK:STDOUT: %x.param_patt: %pattern_type.98b = value_param_pattern [concrete = constants.%x.param_patt.0f9] +// CHECK:STDOUT: %x.patt: %pattern_type.98b = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt.2cc] +// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete = constants.%return.param_patt.89a] +// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C.ref.loc24_40 [concrete = constants.%return.patt.e4a] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc24_40: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %.loc24_40: Core.Form = init_form %C.ref.loc24_40 [concrete = constants.%.a44] @@ -258,12 +282,12 @@ impl D as SelfNested { // CHECK:STDOUT: // CHECK:STDOUT: impl @D.as.UseSelf.impl: %D.ref as %UseSelf.ref { // CHECK:STDOUT: %D.as.UseSelf.impl.F.decl: %D.as.UseSelf.impl.F.type = fn_decl @D.as.UseSelf.impl.F [concrete = constants.%D.as.UseSelf.impl.F] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.d8d = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.d8d = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %x.param_patt: %pattern_type.d8d = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.d8d = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.d8d = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.d8d = return_slot_pattern %return.param_patt, %Self.ref.loc28_40 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.d8d = value_param_pattern [concrete = constants.%self.param_patt.f16] +// CHECK:STDOUT: %self.patt: %pattern_type.d8d = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.6c0] +// CHECK:STDOUT: %x.param_patt: %pattern_type.d8d = value_param_pattern [concrete = constants.%x.param_patt.23b] +// CHECK:STDOUT: %x.patt: %pattern_type.d8d = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt.75f] +// CHECK:STDOUT: %return.param_patt: %pattern_type.d8d = out_param_pattern [concrete = constants.%return.param_patt.eae] +// CHECK:STDOUT: %return.patt: %pattern_type.d8d = return_slot_pattern %return.param_patt, %Self.ref.loc28_40 [concrete = constants.%return.patt.e38] // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc28_40: type = name_ref Self, @D.as.UseSelf.impl.%D.ref [concrete = constants.%D] // CHECK:STDOUT: %.loc28_40: Core.Form = init_form %Self.ref.loc28_40 [concrete = constants.%.592] @@ -287,8 +311,8 @@ impl D as SelfNested { // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.SelfNested.impl: %C.ref as %SelfNested.ref { // CHECK:STDOUT: %C.as.SelfNested.impl.F.decl: %C.as.SelfNested.impl.F.type = fn_decl @C.as.SelfNested.impl.F [concrete = constants.%C.as.SelfNested.impl.F] { -// CHECK:STDOUT: %x.param_patt: %pattern_type.79c = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.79c = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.79c = value_param_pattern [concrete = constants.%x.param_patt.110] +// CHECK:STDOUT: %x.patt: %pattern_type.79c = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt.99f] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %tuple.type.746 = value_param call_param0 // CHECK:STDOUT: %.loc36_31.1: type = splice_block %.loc36_31.3 [concrete = constants.%tuple.type.746] { @@ -315,8 +339,8 @@ impl D as SelfNested { // CHECK:STDOUT: // CHECK:STDOUT: impl @D.as.SelfNested.impl: %D.ref as %SelfNested.ref { // CHECK:STDOUT: %D.as.SelfNested.impl.F.decl: %D.as.SelfNested.impl.F.type = fn_decl @D.as.SelfNested.impl.F [concrete = constants.%D.as.SelfNested.impl.F] { -// CHECK:STDOUT: %x.param_patt: %pattern_type.338 = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.338 = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.338 = value_param_pattern [concrete = constants.%x.param_patt.a5b] +// CHECK:STDOUT: %x.patt: %pattern_type.338 = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt.766] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %tuple.type.aaa = value_param call_param0 // CHECK:STDOUT: %.loc40_37.1: type = splice_block %.loc40_37.3 [concrete = constants.%tuple.type.aaa] { @@ -360,7 +384,13 @@ impl D as SelfNested { // CHECK:STDOUT: %Self: %UseSelf.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.bde)] // CHECK:STDOUT: %Self.as_type.loc16_8.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc16_8.1 (constants.%Self.as_type.968)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc16_8.1 [symbolic = %pattern_type (constants.%pattern_type.04e)] +// CHECK:STDOUT: %self.param_patt.loc16_8.2: @UseSelf.WithSelf.F.%pattern_type (%pattern_type.04e) = value_param_pattern [symbolic = %self.param_patt.loc16_8.2 (constants.%self.param_patt.1da)] +// CHECK:STDOUT: %self.patt.loc16_8.2: @UseSelf.WithSelf.F.%pattern_type (%pattern_type.04e) = at_binding_pattern self, %self.param_patt.loc16_8.2 [symbolic = %self.patt.loc16_8.2 (constants.%self.patt.36a)] +// CHECK:STDOUT: %x.param_patt.loc16_15.2: @UseSelf.WithSelf.F.%pattern_type (%pattern_type.04e) = value_param_pattern [symbolic = %x.param_patt.loc16_15.2 (constants.%x.param_patt.14a)] +// CHECK:STDOUT: %x.patt.loc16_15.2: @UseSelf.WithSelf.F.%pattern_type (%pattern_type.04e) = at_binding_pattern x, %x.param_patt.loc16_15.2 [symbolic = %x.patt.loc16_15.2 (constants.%x.patt.6f8)] // CHECK:STDOUT: %.loc16_26.1: Core.Form = init_form %Self.as_type.loc16_8.1 [symbolic = %.loc16_26.1 (constants.%.326)] +// CHECK:STDOUT: %return.param_patt.loc16_26.2: @UseSelf.WithSelf.F.%pattern_type (%pattern_type.04e) = out_param_pattern [symbolic = %return.param_patt.loc16_26.2 (constants.%return.param_patt.ff3)] +// CHECK:STDOUT: %return.patt.loc16_23.2: @UseSelf.WithSelf.F.%pattern_type (%pattern_type.04e) = return_slot_pattern %return.param_patt.loc16_26.2, %Self.as_type.loc16_8.1 [symbolic = %return.patt.loc16_23.2 (constants.%return.patt.8f7)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @UseSelf.WithSelf.F.%Self.as_type.loc16_8.1 (%Self.as_type.968), %x.param: @UseSelf.WithSelf.F.%Self.as_type.loc16_8.1 (%Self.as_type.968)) -> out %return.param: @UseSelf.WithSelf.F.%Self.as_type.loc16_8.1 (%Self.as_type.968); // CHECK:STDOUT: } @@ -389,6 +419,8 @@ impl D as SelfNested { // CHECK:STDOUT: %tuple: %tuple.type.24b = tuple_value (%ptr.loc32_16.1, %struct_type.x.y.loc32_36.1) [symbolic = %tuple (constants.%tuple.876)] // CHECK:STDOUT: %tuple.type: type = tuple_type (%ptr.loc32_16.1, %struct_type.x.y.loc32_36.1) [symbolic = %tuple.type (constants.%tuple.type.d83)] // CHECK:STDOUT: %pattern_type: type = pattern_type %tuple.type [symbolic = %pattern_type (constants.%pattern_type.6eb)] +// CHECK:STDOUT: %x.param_patt.loc32_9.2: @SelfNested.WithSelf.F.%pattern_type (%pattern_type.6eb) = value_param_pattern [symbolic = %x.param_patt.loc32_9.2 (constants.%x.param_patt.a6c)] +// CHECK:STDOUT: %x.patt.loc32_9.2: @SelfNested.WithSelf.F.%pattern_type (%pattern_type.6eb) = at_binding_pattern x, %x.param_patt.loc32_9.2 [symbolic = %x.patt.loc32_9.2 (constants.%x.patt.792)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%x.param: @SelfNested.WithSelf.F.%tuple.type (%tuple.type.d83)); // CHECK:STDOUT: } @@ -408,7 +440,13 @@ impl D as SelfNested { // CHECK:STDOUT: %Self => constants.%Self.bde // CHECK:STDOUT: %Self.as_type.loc16_8.1 => constants.%Self.as_type.968 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.04e +// CHECK:STDOUT: %self.param_patt.loc16_8.2 => constants.%self.param_patt.1da +// CHECK:STDOUT: %self.patt.loc16_8.2 => constants.%self.patt.36a +// CHECK:STDOUT: %x.param_patt.loc16_15.2 => constants.%x.param_patt.14a +// CHECK:STDOUT: %x.patt.loc16_15.2 => constants.%x.patt.6f8 // CHECK:STDOUT: %.loc16_26.1 => constants.%.326 +// CHECK:STDOUT: %return.param_patt.loc16_26.2 => constants.%return.param_patt.ff3 +// CHECK:STDOUT: %return.patt.loc16_23.2 => constants.%return.patt.8f7 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @UseSelf.WithSelf(constants.%UseSelf.facet.14b) { @@ -422,7 +460,13 @@ impl D as SelfNested { // CHECK:STDOUT: %Self => constants.%UseSelf.facet.14b // CHECK:STDOUT: %Self.as_type.loc16_8.1 => constants.%C // CHECK:STDOUT: %pattern_type => constants.%pattern_type.98b +// CHECK:STDOUT: %self.param_patt.loc16_8.2 => constants.%self.param_patt.303 +// CHECK:STDOUT: %self.patt.loc16_8.2 => constants.%self.patt.49a +// CHECK:STDOUT: %x.param_patt.loc16_15.2 => constants.%x.param_patt.0f9 +// CHECK:STDOUT: %x.patt.loc16_15.2 => constants.%x.patt.2cc // CHECK:STDOUT: %.loc16_26.1 => constants.%.a44 +// CHECK:STDOUT: %return.param_patt.loc16_26.2 => constants.%return.param_patt.89a +// CHECK:STDOUT: %return.patt.loc16_23.2 => constants.%return.patt.e4a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @UseSelf.WithSelf(constants.%UseSelf.facet.64f) { @@ -436,7 +480,13 @@ impl D as SelfNested { // CHECK:STDOUT: %Self => constants.%UseSelf.facet.64f // CHECK:STDOUT: %Self.as_type.loc16_8.1 => constants.%D // CHECK:STDOUT: %pattern_type => constants.%pattern_type.d8d +// CHECK:STDOUT: %self.param_patt.loc16_8.2 => constants.%self.param_patt.f16 +// CHECK:STDOUT: %self.patt.loc16_8.2 => constants.%self.patt.6c0 +// CHECK:STDOUT: %x.param_patt.loc16_15.2 => constants.%x.param_patt.23b +// CHECK:STDOUT: %x.patt.loc16_15.2 => constants.%x.patt.75f // CHECK:STDOUT: %.loc16_26.1 => constants.%.592 +// CHECK:STDOUT: %return.param_patt.loc16_26.2 => constants.%return.param_patt.eae +// CHECK:STDOUT: %return.patt.loc16_23.2 => constants.%return.patt.e38 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @SelfNested.WithSelf(constants.%Self.e81) { @@ -454,6 +504,8 @@ impl D as SelfNested { // CHECK:STDOUT: %tuple => constants.%tuple.876 // CHECK:STDOUT: %tuple.type => constants.%tuple.type.d83 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.6eb +// CHECK:STDOUT: %x.param_patt.loc32_9.2 => constants.%x.param_patt.a6c +// CHECK:STDOUT: %x.patt.loc32_9.2 => constants.%x.patt.792 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @SelfNested.WithSelf(constants.%SelfNested.facet.749) { @@ -471,6 +523,8 @@ impl D as SelfNested { // CHECK:STDOUT: %tuple => constants.%tuple.562 // CHECK:STDOUT: %tuple.type => constants.%tuple.type.746 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.79c +// CHECK:STDOUT: %x.param_patt.loc32_9.2 => constants.%x.param_patt.110 +// CHECK:STDOUT: %x.patt.loc32_9.2 => constants.%x.patt.99f // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @SelfNested.WithSelf(constants.%SelfNested.facet.d22) { @@ -488,5 +542,7 @@ impl D as SelfNested { // CHECK:STDOUT: %tuple => constants.%tuple.c73 // CHECK:STDOUT: %tuple.type => constants.%tuple.type.aaa // CHECK:STDOUT: %pattern_type => constants.%pattern_type.338 +// CHECK:STDOUT: %x.param_patt.loc32_9.2 => constants.%x.param_patt.a5b +// CHECK:STDOUT: %x.patt.loc32_9.2 => constants.%x.patt.766 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/use_assoc_entity.carbon b/toolchain/check/testdata/impl/use_assoc_entity.carbon index 3636eb56c394..2974fe5fde90 100644 --- a/toolchain/check/testdata/impl/use_assoc_entity.carbon +++ b/toolchain/check/testdata/impl/use_assoc_entity.carbon @@ -394,13 +394,11 @@ impl C2 as J2 where .U2 = C2 { } // --- fail_associated_type_in_signature_mismatch.carbon +// CHECK:STDERR: fail_associated_type_in_signature_mismatch.carbon: error: cannot convert from struct type `{.a: ()}` to `{.x: ()}`: unexpected field `a` in source type [StructInitUnexpectedFieldInConversion] library "[[@TEST_NAME]]"; interface K { let V:! type; - // CHECK:STDERR: fail_associated_type_in_signature_mismatch.carbon:[[@LINE+3]]:14: error: cannot convert from struct type `{.a: ()}` to `{.x: ()}`: unexpected field `a` in source type [StructInitUnexpectedFieldInConversion] - // CHECK:STDERR: fn F(self, v: V) -> V; - // CHECK:STDERR: ^~~~ fn F(self, v: V) -> V; } @@ -497,10 +495,16 @@ fn F() { // CHECK:STDOUT: %J.assoc_type: type = assoc_entity_type @J [concrete] // CHECK:STDOUT: %Self.as_type.976: type = facet_access_type %Self.653 [symbolic] // CHECK:STDOUT: %pattern_type.506: type = pattern_type %Self.as_type.976 [symbolic] +// CHECK:STDOUT: %self.param_patt.091: %pattern_type.506 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.bfd: %pattern_type.506 = at_binding_pattern self, %self.param_patt.091 [symbolic] // CHECK:STDOUT: %J.lookup_impl_witness.e57: = lookup_impl_witness %Self.653, @J [symbolic] // CHECK:STDOUT: %impl.elem0.c15: type = impl_witness_access %J.lookup_impl_witness.e57, element0 [symbolic] // CHECK:STDOUT: %pattern_type.a39: type = pattern_type %impl.elem0.c15 [symbolic] +// CHECK:STDOUT: %u.param_patt.81e: %pattern_type.a39 = value_param_pattern [symbolic] +// CHECK:STDOUT: %u.patt.1b4: %pattern_type.a39 = at_binding_pattern u, %u.param_patt.81e [symbolic] // CHECK:STDOUT: %.eb9: Core.Form = init_form %impl.elem0.c15 [symbolic] +// CHECK:STDOUT: %return.param_patt.740: %pattern_type.a39 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.cdd: %pattern_type.a39 = return_slot_pattern %return.param_patt.740, %impl.elem0.c15 [symbolic] // CHECK:STDOUT: %J.WithSelf.F.type.a0a: type = fn_type @J.WithSelf.F, @J.WithSelf(%Self.653) [symbolic] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %J.WithSelf.F.f69: %J.WithSelf.F.type.a0a = struct_value () [symbolic] @@ -513,8 +517,14 @@ fn F() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %J.impl_witness.a18: = impl_witness @empty_tuple.type.as.J.impl.%J.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %self.param_patt.154: %pattern_type.cb1 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.8c1: %pattern_type.cb1 = at_binding_pattern self, %self.param_patt.154 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %u.param_patt.151: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %u.patt.49f: %pattern_type.6b6 = at_binding_pattern u, %u.param_patt.151 [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %empty_tuple.type.as.J.impl.F.type: type = fn_type @empty_tuple.type.as.J.impl.F [concrete] // CHECK:STDOUT: %empty_tuple.type.as.J.impl.F: %empty_tuple.type.as.J.impl.F.type = struct_value () [concrete] // CHECK:STDOUT: %J.facet.7f4: %J.type = facet_value %empty_tuple.type, (%J.impl_witness.a18) [concrete] @@ -551,7 +561,13 @@ fn F() { // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %J.impl_witness.aa2: = impl_witness @C.as.J.impl.%J.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %self.param_patt.303: %pattern_type.98b = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.49a: %pattern_type.98b = at_binding_pattern self, %self.param_patt.303 [concrete] +// CHECK:STDOUT: %u.param_patt.162: %pattern_type.98b = value_param_pattern [concrete] +// CHECK:STDOUT: %u.patt.0e4: %pattern_type.98b = at_binding_pattern u, %u.param_patt.162 [concrete] // CHECK:STDOUT: %.a44: Core.Form = init_form %C [concrete] +// CHECK:STDOUT: %return.param_patt.89a: %pattern_type.98b = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e4a: %pattern_type.98b = return_slot_pattern %return.param_patt.89a, %C [concrete] // CHECK:STDOUT: %C.as.J.impl.F.type: type = fn_type @C.as.J.impl.F [concrete] // CHECK:STDOUT: %C.as.J.impl.F: %C.as.J.impl.F.type = struct_value () [concrete] // CHECK:STDOUT: %J.facet.9f1: %J.type = facet_value %C, (%J.impl_witness.aa2) [concrete] @@ -574,12 +590,12 @@ fn F() { // CHECK:STDOUT: !with Self: // CHECK:STDOUT: // CHECK:STDOUT: %J.WithSelf.F.decl: @J.WithSelf.%J.WithSelf.F.type (%J.WithSelf.F.type.a0a) = fn_decl @J.WithSelf.F [symbolic = @J.WithSelf.%J.WithSelf.F (constants.%J.WithSelf.F.f69)] { -// CHECK:STDOUT: %self.param_patt: @J.WithSelf.F.%pattern_type.loc6_8 (%pattern_type.506) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @J.WithSelf.F.%pattern_type.loc6_8 (%pattern_type.506) = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %u.param_patt: @J.WithSelf.F.%pattern_type.loc6_15 (%pattern_type.a39) = value_param_pattern [concrete] -// CHECK:STDOUT: %u.patt: @J.WithSelf.F.%pattern_type.loc6_15 (%pattern_type.a39) = at_binding_pattern u, %u.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @J.WithSelf.F.%pattern_type.loc6_15 (%pattern_type.a39) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @J.WithSelf.F.%pattern_type.loc6_15 (%pattern_type.a39) = return_slot_pattern %return.param_patt, %U.ref.loc6_23 [concrete] +// CHECK:STDOUT: %self.param_patt.loc6_8.1: @J.WithSelf.F.%pattern_type.loc6_8 (%pattern_type.506) = value_param_pattern [symbolic = %self.param_patt.loc6_8.2 (constants.%self.param_patt.091)] +// CHECK:STDOUT: %self.patt.loc6_8.1: @J.WithSelf.F.%pattern_type.loc6_8 (%pattern_type.506) = at_binding_pattern self, %self.param_patt.loc6_8.1 [symbolic = %self.patt.loc6_8.2 (constants.%self.patt.bfd)] +// CHECK:STDOUT: %u.param_patt.loc6_15.1: @J.WithSelf.F.%pattern_type.loc6_15 (%pattern_type.a39) = value_param_pattern [symbolic = %u.param_patt.loc6_15.2 (constants.%u.param_patt.81e)] +// CHECK:STDOUT: %u.patt.loc6_15.1: @J.WithSelf.F.%pattern_type.loc6_15 (%pattern_type.a39) = at_binding_pattern u, %u.param_patt.loc6_15.1 [symbolic = %u.patt.loc6_15.2 (constants.%u.patt.1b4)] +// CHECK:STDOUT: %return.param_patt.loc6_23.1: @J.WithSelf.F.%pattern_type.loc6_15 (%pattern_type.a39) = out_param_pattern [symbolic = %return.param_patt.loc6_23.2 (constants.%return.param_patt.740)] +// CHECK:STDOUT: %return.patt.loc6_20.1: @J.WithSelf.F.%pattern_type.loc6_15 (%pattern_type.a39) = return_slot_pattern %return.param_patt.loc6_23.1, %U.ref.loc6_23 [symbolic = %return.patt.loc6_20.2 (constants.%return.patt.cdd)] // CHECK:STDOUT: } { // CHECK:STDOUT: %impl.elem0.loc6_23: type = impl_witness_access constants.%J.lookup_impl_witness.e57, element0 [symbolic = %impl.elem0.loc6_17.1 (constants.%impl.elem0.c15)] // CHECK:STDOUT: %U.ref.loc6_23: type = name_ref U, %impl.elem0.loc6_23 [symbolic = %impl.elem0.loc6_17.1 (constants.%impl.elem0.c15)] @@ -614,12 +630,12 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: impl @empty_tuple.type.as.J.impl: %.loc10_7.2 as %.loc10_14 { // CHECK:STDOUT: %empty_tuple.type.as.J.impl.F.decl: %empty_tuple.type.as.J.impl.F.type = fn_decl @empty_tuple.type.as.J.impl.F [concrete = constants.%empty_tuple.type.as.J.impl.F] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.cb1 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.cb1 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %u.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %u.patt: %pattern_type.6b6 = at_binding_pattern u, %u.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc12_32 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.cb1 = value_param_pattern [concrete = constants.%self.param_patt.154] +// CHECK:STDOUT: %self.patt: %pattern_type.cb1 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.8c1] +// CHECK:STDOUT: %u.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%u.param_patt.151] +// CHECK:STDOUT: %u.patt: %pattern_type.6b6 = at_binding_pattern u, %u.param_patt [concrete = constants.%u.patt.49f] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc12_32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc12_32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc12: Core.Form = init_form %i32.loc12_32 [concrete = constants.%.795] @@ -642,12 +658,12 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.J.impl: %C.ref.loc27_6 as %.loc27_13 { // CHECK:STDOUT: %C.as.J.impl.F.decl: %C.as.J.impl.F.type = fn_decl @C.as.J.impl.F [concrete = constants.%C.as.J.impl.F] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.98b = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.98b = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %u.param_patt: %pattern_type.98b = value_param_pattern [concrete] -// CHECK:STDOUT: %u.patt: %pattern_type.98b = at_binding_pattern u, %u.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C.ref.loc29_30 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.98b = value_param_pattern [concrete = constants.%self.param_patt.303] +// CHECK:STDOUT: %self.patt: %pattern_type.98b = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.49a] +// CHECK:STDOUT: %u.param_patt: %pattern_type.98b = value_param_pattern [concrete = constants.%u.param_patt.162] +// CHECK:STDOUT: %u.patt: %pattern_type.98b = at_binding_pattern u, %u.param_patt [concrete = constants.%u.patt.0e4] +// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete = constants.%return.param_patt.89a] +// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C.ref.loc29_30 [concrete = constants.%return.patt.e4a] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc29_30: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %.loc29_30: Core.Form = init_form %C.ref.loc29_30 [concrete = constants.%.a44] @@ -673,10 +689,16 @@ fn F() { // CHECK:STDOUT: %Self: %J.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.653)] // CHECK:STDOUT: %Self.as_type.loc6_8.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc6_8.1 (constants.%Self.as_type.976)] // CHECK:STDOUT: %pattern_type.loc6_8: type = pattern_type %Self.as_type.loc6_8.1 [symbolic = %pattern_type.loc6_8 (constants.%pattern_type.506)] +// CHECK:STDOUT: %self.param_patt.loc6_8.2: @J.WithSelf.F.%pattern_type.loc6_8 (%pattern_type.506) = value_param_pattern [symbolic = %self.param_patt.loc6_8.2 (constants.%self.param_patt.091)] +// CHECK:STDOUT: %self.patt.loc6_8.2: @J.WithSelf.F.%pattern_type.loc6_8 (%pattern_type.506) = at_binding_pattern self, %self.param_patt.loc6_8.2 [symbolic = %self.patt.loc6_8.2 (constants.%self.patt.bfd)] // CHECK:STDOUT: %J.lookup_impl_witness: = lookup_impl_witness %Self, @J [symbolic = %J.lookup_impl_witness (constants.%J.lookup_impl_witness.e57)] // CHECK:STDOUT: %impl.elem0.loc6_17.1: type = impl_witness_access %J.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc6_17.1 (constants.%impl.elem0.c15)] // CHECK:STDOUT: %pattern_type.loc6_15: type = pattern_type %impl.elem0.loc6_17.1 [symbolic = %pattern_type.loc6_15 (constants.%pattern_type.a39)] +// CHECK:STDOUT: %u.param_patt.loc6_15.2: @J.WithSelf.F.%pattern_type.loc6_15 (%pattern_type.a39) = value_param_pattern [symbolic = %u.param_patt.loc6_15.2 (constants.%u.param_patt.81e)] +// CHECK:STDOUT: %u.patt.loc6_15.2: @J.WithSelf.F.%pattern_type.loc6_15 (%pattern_type.a39) = at_binding_pattern u, %u.param_patt.loc6_15.2 [symbolic = %u.patt.loc6_15.2 (constants.%u.patt.1b4)] // CHECK:STDOUT: %.loc6_23.1: Core.Form = init_form %impl.elem0.loc6_17.1 [symbolic = %.loc6_23.1 (constants.%.eb9)] +// CHECK:STDOUT: %return.param_patt.loc6_23.2: @J.WithSelf.F.%pattern_type.loc6_15 (%pattern_type.a39) = out_param_pattern [symbolic = %return.param_patt.loc6_23.2 (constants.%return.param_patt.740)] +// CHECK:STDOUT: %return.patt.loc6_20.2: @J.WithSelf.F.%pattern_type.loc6_15 (%pattern_type.a39) = return_slot_pattern %return.param_patt.loc6_23.2, %impl.elem0.loc6_17.1 [symbolic = %return.patt.loc6_20.2 (constants.%return.patt.cdd)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @J.WithSelf.F.%Self.as_type.loc6_8.1 (%Self.as_type.976), %u.param: @J.WithSelf.F.%impl.elem0.loc6_17.1 (%impl.elem0.c15)) -> out %return.param: @J.WithSelf.F.%impl.elem0.loc6_17.1 (%impl.elem0.c15); // CHECK:STDOUT: } @@ -732,10 +754,16 @@ fn F() { // CHECK:STDOUT: %Self => constants.%Self.653 // CHECK:STDOUT: %Self.as_type.loc6_8.1 => constants.%Self.as_type.976 // CHECK:STDOUT: %pattern_type.loc6_8 => constants.%pattern_type.506 +// CHECK:STDOUT: %self.param_patt.loc6_8.2 => constants.%self.param_patt.091 +// CHECK:STDOUT: %self.patt.loc6_8.2 => constants.%self.patt.bfd // CHECK:STDOUT: %J.lookup_impl_witness => constants.%J.lookup_impl_witness.e57 // CHECK:STDOUT: %impl.elem0.loc6_17.1 => constants.%impl.elem0.c15 // CHECK:STDOUT: %pattern_type.loc6_15 => constants.%pattern_type.a39 +// CHECK:STDOUT: %u.param_patt.loc6_15.2 => constants.%u.param_patt.81e +// CHECK:STDOUT: %u.patt.loc6_15.2 => constants.%u.patt.1b4 // CHECK:STDOUT: %.loc6_23.1 => constants.%.eb9 +// CHECK:STDOUT: %return.param_patt.loc6_23.2 => constants.%return.param_patt.740 +// CHECK:STDOUT: %return.patt.loc6_20.2 => constants.%return.patt.cdd // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @J.WithSelf(constants.%.Self.d2f) { @@ -756,10 +784,16 @@ fn F() { // CHECK:STDOUT: %Self => constants.%J.facet.7f4 // CHECK:STDOUT: %Self.as_type.loc6_8.1 => constants.%empty_tuple.type // CHECK:STDOUT: %pattern_type.loc6_8 => constants.%pattern_type.cb1 +// CHECK:STDOUT: %self.param_patt.loc6_8.2 => constants.%self.param_patt.154 +// CHECK:STDOUT: %self.patt.loc6_8.2 => constants.%self.patt.8c1 // CHECK:STDOUT: %J.lookup_impl_witness => constants.%J.impl_witness.a18 // CHECK:STDOUT: %impl.elem0.loc6_17.1 => constants.%i32 // CHECK:STDOUT: %pattern_type.loc6_15 => constants.%pattern_type.6b6 +// CHECK:STDOUT: %u.param_patt.loc6_15.2 => constants.%u.param_patt.151 +// CHECK:STDOUT: %u.patt.loc6_15.2 => constants.%u.patt.49f // CHECK:STDOUT: %.loc6_23.1 => constants.%.795 +// CHECK:STDOUT: %return.param_patt.loc6_23.2 => constants.%return.param_patt.a9a +// CHECK:STDOUT: %return.patt.loc6_20.2 => constants.%return.patt.e1b // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @J.WithSelf(constants.%J.facet.9f1) { @@ -773,10 +807,16 @@ fn F() { // CHECK:STDOUT: %Self => constants.%J.facet.9f1 // CHECK:STDOUT: %Self.as_type.loc6_8.1 => constants.%C // CHECK:STDOUT: %pattern_type.loc6_8 => constants.%pattern_type.98b +// CHECK:STDOUT: %self.param_patt.loc6_8.2 => constants.%self.param_patt.303 +// CHECK:STDOUT: %self.patt.loc6_8.2 => constants.%self.patt.49a // CHECK:STDOUT: %J.lookup_impl_witness => constants.%J.impl_witness.aa2 // CHECK:STDOUT: %impl.elem0.loc6_17.1 => constants.%C // CHECK:STDOUT: %pattern_type.loc6_15 => constants.%pattern_type.98b +// CHECK:STDOUT: %u.param_patt.loc6_15.2 => constants.%u.param_patt.162 +// CHECK:STDOUT: %u.patt.loc6_15.2 => constants.%u.patt.0e4 // CHECK:STDOUT: %.loc6_23.1 => constants.%.a44 +// CHECK:STDOUT: %return.param_patt.loc6_23.2 => constants.%return.param_patt.89a +// CHECK:STDOUT: %return.patt.loc6_20.2 => constants.%return.patt.e4a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- extend_impl_with_associated_type_in_signature.carbon @@ -798,6 +838,7 @@ fn F() { // CHECK:STDOUT: %J.facet: %J.type = facet_value %E, (%J.impl_witness) [concrete] // CHECK:STDOUT: %J.WithSelf.F.type.78d: type = fn_type @J.WithSelf.F, @J.WithSelf(%J.facet) [concrete] // CHECK:STDOUT: %J.WithSelf.G.type.622: type = fn_type @J.WithSelf.G, @J.WithSelf(%J.facet) [concrete] +// CHECK:STDOUT: %e1.patt: %pattern_type.6b6 = value_binding_pattern e1 [concrete] // CHECK:STDOUT: %.f23: type = fn_type_with_self_type %J.WithSelf.F.type.78d, %J.facet [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %ImplicitAs.type.914: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] @@ -814,19 +855,23 @@ fn F() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39, @Core.IntLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete] // CHECK:STDOUT: %bound_method.3cb: = bound_method %int_2.ecc, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_2.295: %i32 = int_value 2 [concrete] +// CHECK:STDOUT: %e2.patt: %pattern_type.6b6 = value_binding_pattern e2 [concrete] // CHECK:STDOUT: %.008: type = fn_type_with_self_type %J.WithSelf.G.type.622, %J.facet [concrete] // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.485: = bound_method %int_3.1ba, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] // CHECK:STDOUT: %bound_method.763: = bound_method %int_3.1ba, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_3.410: %i32 = int_value 3 [concrete] +// CHECK:STDOUT: %e3.patt: %pattern_type.6b6 = value_binding_pattern e3 [concrete] // CHECK:STDOUT: %int_4.0c1: Core.IntLiteral = int_value 4 [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.aad: = bound_method %int_4.0c1, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] // CHECK:STDOUT: %bound_method.b7a: = bound_method %int_4.0c1, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_4.4eb: %i32 = int_value 4 [concrete] +// CHECK:STDOUT: %e4.patt: %pattern_type.6b6 = value_binding_pattern e4 [concrete] // CHECK:STDOUT: %int_5.64b: Core.IntLiteral = int_value 5 [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.f6c: = bound_method %int_5.64b, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] // CHECK:STDOUT: %bound_method.c9d: = bound_method %int_5.64b, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_5.eef: %i32 = int_value 5 [concrete] +// CHECK:STDOUT: %e5.patt: %pattern_type.6b6 = value_binding_pattern e5 [concrete] // CHECK:STDOUT: %int_6.462: Core.IntLiteral = int_value 6 [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.13d: = bound_method %int_6.462, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] // CHECK:STDOUT: %bound_method.be9: = bound_method %int_6.462, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] @@ -841,7 +886,7 @@ fn F() { // CHECK:STDOUT: fn @CallBoth(%e.param: %E) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %e1.patt: %pattern_type.6b6 = value_binding_pattern e1 [concrete] +// CHECK:STDOUT: %e1.patt: %pattern_type.6b6 = value_binding_pattern e1 [concrete = constants.%e1.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %e.ref.loc22: %E = name_ref e, %e // CHECK:STDOUT: %F.ref.loc22: %J.assoc_type = name_ref F, @J.WithSelf.%assoc1 [concrete = constants.%assoc1.413] @@ -855,12 +900,12 @@ fn F() { // CHECK:STDOUT: %.loc22_28.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc22 [concrete = constants.%int_2.295] // CHECK:STDOUT: %.loc22_28.2: %i32 = converted %int_2, %.loc22_28.1 [concrete = constants.%int_2.295] // CHECK:STDOUT: %E.as.J.impl.F.call.loc22: init %i32 = call %impl.elem1.loc22(%.loc22_28.2) -// CHECK:STDOUT: %i32.loc22: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc22_29.1: %i32 = value_of_initializer %E.as.J.impl.F.call.loc22 // CHECK:STDOUT: %.loc22_29.2: %i32 = converted %E.as.J.impl.F.call.loc22, %.loc22_29.1 +// CHECK:STDOUT: %i32.loc22: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %e1: %i32 = value_binding e1, %.loc22_29.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %e2.patt: %pattern_type.6b6 = value_binding_pattern e2 [concrete] +// CHECK:STDOUT: %e2.patt: %pattern_type.6b6 = value_binding_pattern e2 [concrete = constants.%e2.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %e.ref.loc23: %E = name_ref e, %e // CHECK:STDOUT: %G.ref.loc23: %J.assoc_type = name_ref G, @J.WithSelf.%assoc2 [concrete = constants.%assoc2] @@ -875,12 +920,12 @@ fn F() { // CHECK:STDOUT: %.loc23_28.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc23 [concrete = constants.%int_3.410] // CHECK:STDOUT: %.loc23_28.2: %i32 = converted %int_3, %.loc23_28.1 [concrete = constants.%int_3.410] // CHECK:STDOUT: %E.as.J.impl.G.call.loc23: init %i32 = call %bound_method.loc23_25(%e.ref.loc23, %.loc23_28.2) -// CHECK:STDOUT: %i32.loc23: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc23_29.1: %i32 = value_of_initializer %E.as.J.impl.G.call.loc23 // CHECK:STDOUT: %.loc23_29.2: %i32 = converted %E.as.J.impl.G.call.loc23, %.loc23_29.1 +// CHECK:STDOUT: %i32.loc23: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %e2: %i32 = value_binding e2, %.loc23_29.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %e3.patt: %pattern_type.6b6 = value_binding_pattern e3 [concrete] +// CHECK:STDOUT: %e3.patt: %pattern_type.6b6 = value_binding_pattern e3 [concrete = constants.%e3.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %E.ref.loc24: type = name_ref E, file.%E.decl [concrete = constants.%E] // CHECK:STDOUT: %F.ref.loc24: %J.assoc_type = name_ref F, @J.WithSelf.%assoc1 [concrete = constants.%assoc1.413] @@ -894,12 +939,12 @@ fn F() { // CHECK:STDOUT: %.loc24_28.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc24 [concrete = constants.%int_4.4eb] // CHECK:STDOUT: %.loc24_28.2: %i32 = converted %int_4, %.loc24_28.1 [concrete = constants.%int_4.4eb] // CHECK:STDOUT: %E.as.J.impl.F.call.loc24: init %i32 = call %impl.elem1.loc24(%.loc24_28.2) -// CHECK:STDOUT: %i32.loc24: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc24_29.1: %i32 = value_of_initializer %E.as.J.impl.F.call.loc24 // CHECK:STDOUT: %.loc24_29.2: %i32 = converted %E.as.J.impl.F.call.loc24, %.loc24_29.1 +// CHECK:STDOUT: %i32.loc24: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %e3: %i32 = value_binding e3, %.loc24_29.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %e4.patt: %pattern_type.6b6 = value_binding_pattern e4 [concrete] +// CHECK:STDOUT: %e4.patt: %pattern_type.6b6 = value_binding_pattern e4 [concrete = constants.%e4.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %e.ref.loc25: %E = name_ref e, %e // CHECK:STDOUT: %E.ref.loc25: type = name_ref E, file.%E.decl [concrete = constants.%E] @@ -915,12 +960,12 @@ fn F() { // CHECK:STDOUT: %.loc25_32.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc25 [concrete = constants.%int_5.eef] // CHECK:STDOUT: %.loc25_32.2: %i32 = converted %int_5, %.loc25_32.1 [concrete = constants.%int_5.eef] // CHECK:STDOUT: %E.as.J.impl.G.call.loc25: init %i32 = call %bound_method.loc25_25(%e.ref.loc25, %.loc25_32.2) -// CHECK:STDOUT: %i32.loc25: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc25_33.1: %i32 = value_of_initializer %E.as.J.impl.G.call.loc25 // CHECK:STDOUT: %.loc25_33.2: %i32 = converted %E.as.J.impl.G.call.loc25, %.loc25_33.1 +// CHECK:STDOUT: %i32.loc25: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %e4: %i32 = value_binding e4, %.loc25_33.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %e5.patt: %pattern_type.6b6 = value_binding_pattern e5 [concrete] +// CHECK:STDOUT: %e5.patt: %pattern_type.6b6 = value_binding_pattern e5 [concrete = constants.%e5.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %e.ref.loc26: %E = name_ref e, %e // CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl [concrete = constants.%J.type] @@ -936,9 +981,9 @@ fn F() { // CHECK:STDOUT: %.loc26_32.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc26 [concrete = constants.%int_6.439] // CHECK:STDOUT: %.loc26_32.2: %i32 = converted %int_6, %.loc26_32.1 [concrete = constants.%int_6.439] // CHECK:STDOUT: %E.as.J.impl.G.call.loc26: init %i32 = call %bound_method.loc26_25(%e.ref.loc26, %.loc26_32.2) -// CHECK:STDOUT: %i32.loc26: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc26_33.1: %i32 = value_of_initializer %E.as.J.impl.G.call.loc26 // CHECK:STDOUT: %.loc26_33.2: %i32 = converted %E.as.J.impl.G.call.loc26, %.loc26_33.1 +// CHECK:STDOUT: %i32.loc26: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %e5: %i32 = value_binding e5, %.loc26_33.2 // CHECK:STDOUT: // CHECK:STDOUT: } @@ -983,7 +1028,11 @@ fn F() { // CHECK:STDOUT: %J.impl_witness: = impl_witness @E.as.J.impl.%J.impl_witness_table [concrete] // CHECK:STDOUT: %J.facet: %J.type = facet_value %E, (%J.impl_witness) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %u.param_patt.151: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %u.patt.49f: %pattern_type.6b6 = at_binding_pattern u, %u.param_patt.151 [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %E.as.J.impl.F.type: type = fn_type @E.as.J.impl.F [concrete] // CHECK:STDOUT: %E.as.J.impl.F: %E.as.J.impl.F.type = struct_value () [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -1005,10 +1054,10 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: impl @E.as.J.impl: %Self.ref as %.loc9_20 { // CHECK:STDOUT: %E.as.J.impl.F.decl: %E.as.J.impl.F.type = fn_decl @E.as.J.impl.F [concrete = constants.%E.as.J.impl.F] { -// CHECK:STDOUT: %u.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %u.patt: %pattern_type.6b6 = at_binding_pattern u, %u.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %U.ref.loc11_19 [concrete] +// CHECK:STDOUT: %u.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%u.param_patt.151] +// CHECK:STDOUT: %u.patt: %pattern_type.6b6 = at_binding_pattern u, %u.param_patt [concrete = constants.%u.patt.49f] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %U.ref.loc11_19 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %J.facet.loc11_19: %J.type = facet_value @E.as.J.impl.%Self.ref, (constants.%J.impl_witness) [concrete = constants.%J.facet] // CHECK:STDOUT: %.loc11_19.1: %J.type = converted @E.as.J.impl.%Self.ref, %J.facet.loc11_19 [concrete = constants.%J.facet] @@ -1103,6 +1152,8 @@ fn F() { // CHECK:STDOUT: %J.facet: %J.type = facet_value %E, (%J.impl_witness) [concrete] // CHECK:STDOUT: %.262: Core.Form = init_form %empty_tuple.type [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %empty_tuple.type [concrete] // CHECK:STDOUT: %E.G.type: type = fn_type @E.G [concrete] // CHECK:STDOUT: %E.G: %E.G.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -1110,8 +1161,8 @@ fn F() { // CHECK:STDOUT: class @E { // CHECK:STDOUT: // CHECK:STDOUT: %E.G.decl: %E.G.type = fn_decl @E.G [concrete = constants.%E.G] { -// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %X.ref [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %X.ref [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %J.facet: %J.type = facet_value constants.%E, (constants.%J.impl_witness) [concrete = constants.%J.facet] // CHECK:STDOUT: %.loc11_13.1: %J.type = converted constants.%E, %J.facet [concrete = constants.%J.facet] diff --git a/toolchain/check/testdata/index/array_element_access.carbon b/toolchain/check/testdata/index/array_element_access.carbon index 2fd2f7b5d741..c8595fe8c53d 100644 --- a/toolchain/check/testdata/index/array_element_access.carbon +++ b/toolchain/check/testdata/index/array_element_access.carbon @@ -28,6 +28,8 @@ var d: i32 = a[b]; // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_2, %i32 [concrete] // CHECK:STDOUT: %pattern_type.7b0: type = pattern_type %array_type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.7b0 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.7b0 = var_pattern %a.patt [concrete] // CHECK:STDOUT: %int_12.6a3: Core.IntLiteral = int_value 12 [concrete] // CHECK:STDOUT: %int_24.e3c: Core.IntLiteral = int_value 24 [concrete] // CHECK:STDOUT: %tuple.type.f94: type = tuple_type (Core.IntLiteral, Core.IntLiteral) [concrete] @@ -55,9 +57,13 @@ var d: i32 = a[b]; // CHECK:STDOUT: %bound_method.b67: = bound_method %int_24.e3c, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_24.130: %i32 = int_value 24 [concrete] // CHECK:STDOUT: %array: %array_type = tuple_value (%int_12.8c7, %int_24.130) [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.094: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] // CHECK:STDOUT: %bound_method.953: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_1.0c6: %i32 = int_value 1 [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.6b6 = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.6b6 = var_pattern %c.patt [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.7b4: = bound_method %int_0.5c6, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] // CHECK:STDOUT: %bound_method.6e0: = bound_method %int_0.5c6, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_0.3c0: %i32 = int_value 0 [concrete] @@ -71,6 +77,8 @@ var d: i32 = a[b]; // CHECK:STDOUT: %Copy.WithSelf.Op.type.d09: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet) [concrete] // CHECK:STDOUT: %.7a6: type = fn_type_with_self_type %Copy.WithSelf.Op.type.d09, %Copy.facet [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.4f6, @Int.as.Copy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.6b6 = ref_binding_pattern d [concrete] +// CHECK:STDOUT: %d.var_patt: %pattern_type.6b6 = var_pattern %d.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -100,8 +108,8 @@ var d: i32 = a[b]; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.7b0 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.7b0 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.7b0 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.7b0 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type = var %a.var_patt [concrete] // CHECK:STDOUT: %.loc15: type = splice_block %array_type [concrete = constants.%array_type] { @@ -111,22 +119,22 @@ var d: i32 = a[b]; // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %array_type = ref_binding a, %a.var [concrete = %a.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var %b.var_patt [concrete] // CHECK:STDOUT: %i32.loc16: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %b: ref %i32 = ref_binding b, %b.var [concrete = %b.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.6b6 = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.6b6 = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.6b6 = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type.6b6 = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %i32 = var %c.var_patt [concrete] // CHECK:STDOUT: %i32.loc17: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %c: ref %i32 = ref_binding c, %c.var [concrete = %c.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.6b6 = ref_binding_pattern d [concrete] -// CHECK:STDOUT: %d.var_patt: %pattern_type.6b6 = var_pattern %d.patt [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.6b6 = ref_binding_pattern d [concrete = constants.%d.patt] +// CHECK:STDOUT: %d.var_patt: %pattern_type.6b6 = var_pattern %d.patt [concrete = constants.%d.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %i32 = var %d.var_patt [concrete] // CHECK:STDOUT: %i32.loc18: type = type_literal constants.%i32 [concrete = constants.%i32] diff --git a/toolchain/check/testdata/index/expr_category.carbon b/toolchain/check/testdata/index/expr_category.carbon index ad6c1512035c..df8779d750ce 100644 --- a/toolchain/check/testdata/index/expr_category.carbon +++ b/toolchain/check/testdata/index/expr_category.carbon @@ -44,11 +44,17 @@ fn ValueBinding(b: array(i32, 3)) { // CHECK:STDOUT: %array_type: type = array_type %int_3.1ba, %i32 [concrete] // CHECK:STDOUT: %.2b2: Core.Form = init_form %array_type [concrete] // CHECK:STDOUT: %pattern_type.771: type = pattern_type %array_type [concrete] +// CHECK:STDOUT: %return.param_patt.8a2: %pattern_type.771 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.2f6: %pattern_type.771 = return_slot_pattern %return.param_patt.8a2, %array_type [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.771 = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt.4a0e77.1: %pattern_type.771 = at_binding_pattern b, %b.param_patt [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.771 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.771 = var_pattern %a.patt [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %tuple.type.37f: type = tuple_type (Core.IntLiteral, Core.IntLiteral, Core.IntLiteral) [concrete] @@ -79,6 +85,8 @@ fn ValueBinding(b: array(i32, 3)) { // CHECK:STDOUT: %array: %array_type = tuple_value (%int_1.0c6, %int_2.295, %int_3.410) [concrete] // CHECK:STDOUT: %ptr.d08: type = ptr_type %i32 [concrete] // CHECK:STDOUT: %pattern_type.f00: type = pattern_type %ptr.d08 [concrete] +// CHECK:STDOUT: %pa.patt: %pattern_type.f00 = ref_binding_pattern pa [concrete] +// CHECK:STDOUT: %pa.var_patt: %pattern_type.f00 = var_pattern %pa.patt [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.7b4: = bound_method %int_0.5c6, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] // CHECK:STDOUT: %bound_method.6e0: = bound_method %int_0.5c6, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_0.3c0: %i32 = int_value 0 [concrete] @@ -102,6 +110,7 @@ fn ValueBinding(b: array(i32, 3)) { // CHECK:STDOUT: %Destroy.Op.1a2547.1: %Destroy.Op.type.1d8f74.1 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.4: type = fn_type @Destroy.Op.loc18_3.3 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.4: %Destroy.Op.type.1d8f74.4 = struct_value () [concrete] +// CHECK:STDOUT: %b.patt.4a0e77.2: %pattern_type.771 = at_binding_pattern b, %b.param_patt [concrete] // CHECK:STDOUT: %ValueBinding.type: type = fn_type @ValueBinding [concrete] // CHECK:STDOUT: %ValueBinding: %ValueBinding.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -134,8 +143,8 @@ fn ValueBinding(b: array(i32, 3)) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.771 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.771 = return_slot_pattern %return.param_patt, %array_type [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.771 = out_param_pattern [concrete = constants.%return.param_patt.8a2] +// CHECK:STDOUT: %return.patt: %pattern_type.771 = return_slot_pattern %return.param_patt, %array_type [concrete = constants.%return.patt.2f6] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete = constants.%int_3.1ba] @@ -145,8 +154,8 @@ fn ValueBinding(b: array(i32, 3)) { // CHECK:STDOUT: %return: ref %array_type = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %b.param_patt: %pattern_type.771 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.771 = at_binding_pattern b, %b.param_patt [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.771 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.771 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt.4a0e77.1] // CHECK:STDOUT: } { // CHECK:STDOUT: %b.param: %array_type = value_param call_param0 // CHECK:STDOUT: %.loc17: type = splice_block %array_type.loc17 [concrete = constants.%array_type] { @@ -157,8 +166,8 @@ fn ValueBinding(b: array(i32, 3)) { // CHECK:STDOUT: %b: %array_type = value_binding b, %b.param // CHECK:STDOUT: } // CHECK:STDOUT: %ValueBinding.decl: %ValueBinding.type = fn_decl @ValueBinding [concrete = constants.%ValueBinding] { -// CHECK:STDOUT: %b.param_patt: %pattern_type.771 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.771 = at_binding_pattern b, %b.param_patt [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.771 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.771 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt.4a0e77.2] // CHECK:STDOUT: } { // CHECK:STDOUT: %b.param: %array_type = value_param call_param0 // CHECK:STDOUT: %.loc25: type = splice_block %array_type.loc25 [concrete = constants.%array_type] { @@ -175,8 +184,8 @@ fn ValueBinding(b: array(i32, 3)) { // CHECK:STDOUT: fn @G(%b.param: %array_type) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.771 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.771 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.771 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.771 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type = var %a.var_patt // CHECK:STDOUT: %int_1.loc18_27: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -220,8 +229,8 @@ fn ValueBinding(b: array(i32, 3)) { // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %array_type = ref_binding a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %pa.patt: %pattern_type.f00 = ref_binding_pattern pa [concrete] -// CHECK:STDOUT: %pa.var_patt: %pattern_type.f00 = var_pattern %pa.patt [concrete] +// CHECK:STDOUT: %pa.patt: %pattern_type.f00 = ref_binding_pattern pa [concrete = constants.%pa.patt] +// CHECK:STDOUT: %pa.var_patt: %pattern_type.f00 = var_pattern %pa.patt [concrete = constants.%pa.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %pa.var: ref %ptr.d08 = var %pa.var_patt // CHECK:STDOUT: %a.ref.loc21: ref %array_type = name_ref a, %a @@ -288,8 +297,8 @@ fn ValueBinding(b: array(i32, 3)) { // CHECK:STDOUT: fn @ValueBinding(%b.param: %array_type) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.771 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.771 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.771 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.771 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type = var %a.var_patt // CHECK:STDOUT: %int_1.loc26_27: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] diff --git a/toolchain/check/testdata/index/fail_array_large_index.carbon b/toolchain/check/testdata/index/fail_array_large_index.carbon index 2d8940c5322e..765a973d80df 100644 --- a/toolchain/check/testdata/index/fail_array_large_index.carbon +++ b/toolchain/check/testdata/index/fail_array_large_index.carbon @@ -37,6 +37,8 @@ var c: i32 = a[0x7FFF_FFFF]; // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_1.5b8, %i32 [concrete] // CHECK:STDOUT: %pattern_type.97e: type = pattern_type %array_type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.97e = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.97e = var_pattern %a.patt [concrete] // CHECK:STDOUT: %int_12.6a3: Core.IntLiteral = int_value 12 [concrete] // CHECK:STDOUT: %tuple.type.985: type = tuple_type (Core.IntLiteral) [concrete] // CHECK:STDOUT: %tuple.3bc: %tuple.type.985 = tuple_value (%int_12.6a3) [concrete] @@ -59,6 +61,8 @@ var c: i32 = a[0x7FFF_FFFF]; // CHECK:STDOUT: %bound_method.46b: = bound_method %int_12.6a3, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_12.8c7: %i32 = int_value 12 [concrete] // CHECK:STDOUT: %array: %array_type = tuple_value (%int_12.8c7) [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.094: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] // CHECK:STDOUT: %bound_method.953: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_1.0c6: %i32 = int_value 1 [concrete] @@ -72,6 +76,8 @@ var c: i32 = a[0x7FFF_FFFF]; // CHECK:STDOUT: %Copy.WithSelf.Op.type.d09: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet) [concrete] // CHECK:STDOUT: %.7a6: type = fn_type_with_self_type %Copy.WithSelf.Op.type.d09, %Copy.facet [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.4f6, @Int.as.Copy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.6b6 = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.6b6 = var_pattern %c.patt [concrete] // CHECK:STDOUT: %int_2147483647.d89: Core.IntLiteral = int_value 2147483647 [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.91c: = bound_method %int_2147483647.d89, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] // CHECK:STDOUT: %bound_method.777: = bound_method %int_2147483647.d89, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] @@ -104,8 +110,8 @@ var c: i32 = a[0x7FFF_FFFF]; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.97e = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.97e = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.97e = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.97e = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type = var %a.var_patt [concrete] // CHECK:STDOUT: %.loc15: type = splice_block %array_type [concrete = constants.%array_type] { @@ -115,15 +121,15 @@ var c: i32 = a[0x7FFF_FFFF]; // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %array_type = ref_binding a, %a.var [concrete = %a.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var %b.var_patt [concrete] // CHECK:STDOUT: %i32.loc21: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %b: ref %i32 = ref_binding b, %b.var [concrete = %b.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.6b6 = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.6b6 = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.6b6 = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type.6b6 = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %i32 = var %c.var_patt [concrete] // CHECK:STDOUT: %i32.loc27: type = type_literal constants.%i32 [concrete = constants.%i32] diff --git a/toolchain/check/testdata/index/fail_array_non_int_indexing.carbon b/toolchain/check/testdata/index/fail_array_non_int_indexing.carbon index 2da93b1f053a..eb3b9213ede2 100644 --- a/toolchain/check/testdata/index/fail_array_non_int_indexing.carbon +++ b/toolchain/check/testdata/index/fail_array_non_int_indexing.carbon @@ -33,6 +33,8 @@ var b: i32 = a[2.6]; // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_1, %i32 [concrete] // CHECK:STDOUT: %pattern_type.97e: type = pattern_type %array_type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.97e = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.97e = var_pattern %a.patt [concrete] // CHECK:STDOUT: %int_12.6a3: Core.IntLiteral = int_value 12 [concrete] // CHECK:STDOUT: %tuple.type.985: type = tuple_type (Core.IntLiteral) [concrete] // CHECK:STDOUT: %tuple.3bc: %tuple.type.985 = tuple_value (%int_12.6a3) [concrete] @@ -55,6 +57,8 @@ var b: i32 = a[2.6]; // CHECK:STDOUT: %bound_method: = bound_method %int_12.6a3, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_12.8c7: %i32 = int_value 12 [concrete] // CHECK:STDOUT: %array: %array_type = tuple_value (%int_12.8c7) [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete] // CHECK:STDOUT: %float: Core.FloatLiteral = float_literal_value 26e-1 [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.ac8: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N) [symbolic] @@ -93,8 +97,8 @@ var b: i32 = a[2.6]; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.97e = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.97e = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.97e = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.97e = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type = var %a.var_patt [concrete] // CHECK:STDOUT: %.loc15: type = splice_block %array_type [concrete = constants.%array_type] { @@ -104,8 +108,8 @@ var b: i32 = a[2.6]; // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %array_type = ref_binding a, %a.var [concrete = %a.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var %b.var_patt [concrete] // CHECK:STDOUT: %i32.loc23: type = type_literal constants.%i32 [concrete = constants.%i32] diff --git a/toolchain/check/testdata/index/fail_array_out_of_bound_access.carbon b/toolchain/check/testdata/index/fail_array_out_of_bound_access.carbon index d8c363e345dc..8ec0cb496182 100644 --- a/toolchain/check/testdata/index/fail_array_out_of_bound_access.carbon +++ b/toolchain/check/testdata/index/fail_array_out_of_bound_access.carbon @@ -30,6 +30,8 @@ var b: i32 = a[1]; // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_1.5b8, %i32 [concrete] // CHECK:STDOUT: %pattern_type.97e: type = pattern_type %array_type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.97e = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.97e = var_pattern %a.patt [concrete] // CHECK:STDOUT: %int_12.6a3: Core.IntLiteral = int_value 12 [concrete] // CHECK:STDOUT: %tuple.type.985: type = tuple_type (Core.IntLiteral) [concrete] // CHECK:STDOUT: %tuple.3bc: %tuple.type.985 = tuple_value (%int_12.6a3) [concrete] @@ -52,6 +54,8 @@ var b: i32 = a[1]; // CHECK:STDOUT: %bound_method.46b: = bound_method %int_12.6a3, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_12.8c7: %i32 = int_value 12 [concrete] // CHECK:STDOUT: %array: %array_type = tuple_value (%int_12.8c7) [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.094: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] // CHECK:STDOUT: %bound_method.953: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_1.0c6: %i32 = int_value 1 [concrete] @@ -92,8 +96,8 @@ var b: i32 = a[1]; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.97e = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.97e = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.97e = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.97e = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type = var %a.var_patt [concrete] // CHECK:STDOUT: %.loc15: type = splice_block %array_type [concrete = constants.%array_type] { @@ -103,8 +107,8 @@ var b: i32 = a[1]; // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %array_type = ref_binding a, %a.var [concrete = %a.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var %b.var_patt [concrete] // CHECK:STDOUT: %i32.loc20: type = type_literal constants.%i32 [concrete = constants.%i32] diff --git a/toolchain/check/testdata/index/fail_expr_category.carbon b/toolchain/check/testdata/index/fail_expr_category.carbon index 98115ad459c4..07223ec95c2d 100644 --- a/toolchain/check/testdata/index/fail_expr_category.carbon +++ b/toolchain/check/testdata/index/fail_expr_category.carbon @@ -53,13 +53,19 @@ fn G(b: array(i32, 3)) { // CHECK:STDOUT: %array_type: type = array_type %int_3, %i32 [concrete] // CHECK:STDOUT: %.2b2: Core.Form = init_form %array_type [concrete] // CHECK:STDOUT: %pattern_type.771: type = pattern_type %array_type [concrete] +// CHECK:STDOUT: %return.param_patt.8a2: %pattern_type.771 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.2f6: %pattern_type.771 = return_slot_pattern %return.param_patt.8a2, %array_type [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.771 = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.771 = at_binding_pattern b, %b.param_patt [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %ptr.d08: type = ptr_type %i32 [concrete] // CHECK:STDOUT: %pattern_type.f00: type = pattern_type %ptr.d08 [concrete] +// CHECK:STDOUT: %pb.patt: %pattern_type.f00 = ref_binding_pattern pb [concrete] +// CHECK:STDOUT: %pb.var_patt: %pattern_type.f00 = var_pattern %pb.patt [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -92,6 +98,8 @@ fn G(b: array(i32, 3)) { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.aad: = bound_method %int_4.0c1, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] // CHECK:STDOUT: %bound_method.b7a: = bound_method %int_4.0c1, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_4.4eb: %i32 = int_value 4 [concrete] +// CHECK:STDOUT: %pf.patt: %pattern_type.f00 = ref_binding_pattern pf [concrete] +// CHECK:STDOUT: %pf.var_patt: %pattern_type.f00 = var_pattern %pf.patt [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.3: type = fn_type @Destroy.Op.loc41_5.3 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.3: %Destroy.Op.type.1d8f74.3 = struct_value () [concrete] @@ -126,8 +134,8 @@ fn G(b: array(i32, 3)) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.771 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.771 = return_slot_pattern %return.param_patt, %array_type [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.771 = out_param_pattern [concrete = constants.%return.param_patt.8a2] +// CHECK:STDOUT: %return.patt: %pattern_type.771 = return_slot_pattern %return.param_patt, %array_type [concrete = constants.%return.patt.2f6] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete = constants.%int_3] @@ -137,8 +145,8 @@ fn G(b: array(i32, 3)) { // CHECK:STDOUT: %return: ref %array_type = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %b.param_patt: %pattern_type.771 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.771 = at_binding_pattern b, %b.param_patt [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.771 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.771 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %b.param: %array_type = value_param call_param0 // CHECK:STDOUT: %.loc17: type = splice_block %array_type [concrete = constants.%array_type] { @@ -155,8 +163,8 @@ fn G(b: array(i32, 3)) { // CHECK:STDOUT: fn @G(%b.param: %array_type) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %pb.patt: %pattern_type.f00 = ref_binding_pattern pb [concrete] -// CHECK:STDOUT: %pb.var_patt: %pattern_type.f00 = var_pattern %pb.patt [concrete] +// CHECK:STDOUT: %pb.patt: %pattern_type.f00 = ref_binding_pattern pb [concrete = constants.%pb.patt] +// CHECK:STDOUT: %pb.var_patt: %pattern_type.f00 = var_pattern %pb.patt [concrete = constants.%pb.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %pb.var: ref %ptr.d08 = var %pb.var_patt // CHECK:STDOUT: %b.ref.loc23: %array_type = name_ref b, %b @@ -204,8 +212,8 @@ fn G(b: array(i32, 3)) { // CHECK:STDOUT: %.loc28_8: init %i32 = converted %int_4.loc28, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc28_8 [concrete = constants.%int_4.4eb] // CHECK:STDOUT: assign %.loc28_6.3, %.loc28_8 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %pf.patt: %pattern_type.f00 = ref_binding_pattern pf [concrete] -// CHECK:STDOUT: %pf.var_patt: %pattern_type.f00 = var_pattern %pf.patt [concrete] +// CHECK:STDOUT: %pf.patt: %pattern_type.f00 = ref_binding_pattern pf [concrete = constants.%pf.patt] +// CHECK:STDOUT: %pf.var_patt: %pattern_type.f00 = var_pattern %pf.patt [concrete = constants.%pf.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %pf.var: ref %ptr.d08 = var %pf.var_patt // CHECK:STDOUT: %F.ref.loc36: %F.type = name_ref F, file.%F.decl [concrete = constants.%F] diff --git a/toolchain/check/testdata/index/fail_invalid_base.carbon b/toolchain/check/testdata/index/fail_invalid_base.carbon index 65114ddf3bb1..9b9a752f82a7 100644 --- a/toolchain/check/testdata/index/fail_invalid_base.carbon +++ b/toolchain/check/testdata/index/fail_invalid_base.carbon @@ -47,15 +47,23 @@ var d: i32 = {.a: i32, .b: i32}[0]; // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.6b6 = var_pattern %a.patt [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.6b6 = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.6b6 = var_pattern %c.patt [concrete] // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %struct_type.a.b.cfd: type = struct_type {.a: Core.IntLiteral, .b: Core.IntLiteral} [concrete] // CHECK:STDOUT: %struct: %struct_type.a.b.cfd = struct_value (%int_1, %int_2) [concrete] // CHECK:STDOUT: %IndexWith.type.df6: type = generic_interface_type @IndexWith [concrete] // CHECK:STDOUT: %IndexWith.generic: %IndexWith.type.df6 = struct_value () [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.6b6 = ref_binding_pattern d [concrete] +// CHECK:STDOUT: %d.var_patt: %pattern_type.6b6 = var_pattern %d.patt [concrete] // CHECK:STDOUT: %struct_type.a.b.b4c: type = struct_type {.a: %i32, .b: %i32} [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -83,30 +91,30 @@ var d: i32 = {.a: i32, .b: i32}[0]; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %N: = namespace [concrete] {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.6b6 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.6b6 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %i32 = var %a.var_patt [concrete] // CHECK:STDOUT: %i32.loc21: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %a: ref %i32 = ref_binding a, %a.var [concrete = %a.var] // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var %b.var_patt [concrete] // CHECK:STDOUT: %i32.loc28: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %b: ref %i32 = ref_binding b, %b.var [concrete = %b.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.6b6 = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.6b6 = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.6b6 = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type.6b6 = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %i32 = var %c.var_patt [concrete] // CHECK:STDOUT: %i32.loc34: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %c: ref %i32 = ref_binding c, %c.var [concrete = %c.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.6b6 = ref_binding_pattern d [concrete] -// CHECK:STDOUT: %d.var_patt: %pattern_type.6b6 = var_pattern %d.patt [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.6b6 = ref_binding_pattern d [concrete = constants.%d.patt] +// CHECK:STDOUT: %d.var_patt: %pattern_type.6b6 = var_pattern %d.patt [concrete = constants.%d.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %i32 = var %d.var_patt [concrete] // CHECK:STDOUT: %i32.loc40: type = type_literal constants.%i32 [concrete = constants.%i32] diff --git a/toolchain/check/testdata/index/fail_name_not_found.carbon b/toolchain/check/testdata/index/fail_name_not_found.carbon index 36c738e6d976..c237ea509367 100644 --- a/toolchain/check/testdata/index/fail_name_not_found.carbon +++ b/toolchain/check/testdata/index/fail_name_not_found.carbon @@ -32,6 +32,8 @@ fn Main() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.2: type = fn_type @Destroy.Op.loc20_3.2 [concrete] @@ -62,8 +64,8 @@ fn Main() { // CHECK:STDOUT: fn @Main() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var %b.var_patt // CHECK:STDOUT: %a.ref: = name_ref a, [concrete = ] diff --git a/toolchain/check/testdata/index/fail_negative_indexing.carbon b/toolchain/check/testdata/index/fail_negative_indexing.carbon index e54ea018170e..9a0da5448142 100644 --- a/toolchain/check/testdata/index/fail_negative_indexing.carbon +++ b/toolchain/check/testdata/index/fail_negative_indexing.carbon @@ -31,6 +31,8 @@ var d: i32 = c[-10]; // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_2, %i32 [concrete] // CHECK:STDOUT: %pattern_type.7b0: type = pattern_type %array_type [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.7b0 = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.7b0 = var_pattern %c.patt [concrete] // CHECK:STDOUT: %int_42.20e: Core.IntLiteral = int_value 42 [concrete] // CHECK:STDOUT: %tuple.type.f94: type = tuple_type (Core.IntLiteral, Core.IntLiteral) [concrete] // CHECK:STDOUT: %tuple.df5: %tuple.type.f94 = tuple_value (%int_42.20e, %int_42.20e) [concrete] @@ -54,6 +56,8 @@ var d: i32 = c[-10]; // CHECK:STDOUT: %int_42.ac4: %i32 = int_value 42 [concrete] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %array: %array_type = tuple_value (%int_42.ac4, %int_42.ac4) [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.6b6 = ref_binding_pattern d [concrete] +// CHECK:STDOUT: %d.var_patt: %pattern_type.6b6 = var_pattern %d.patt [concrete] // CHECK:STDOUT: %int_10: Core.IntLiteral = int_value 10 [concrete] // CHECK:STDOUT: %Negate.type: type = facet_type <@Negate> [concrete] // CHECK:STDOUT: %Negate.impl_witness: = impl_witness imports.%Negate.impl_witness_table [concrete] @@ -109,8 +113,8 @@ var d: i32 = c[-10]; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.7b0 = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.7b0 = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.7b0 = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type.7b0 = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %array_type = var %c.var_patt [concrete] // CHECK:STDOUT: %.loc15: type = splice_block %array_type [concrete = constants.%array_type] { @@ -120,8 +124,8 @@ var d: i32 = c[-10]; // CHECK:STDOUT: } // CHECK:STDOUT: %c: ref %array_type = ref_binding c, %c.var [concrete = %c.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.6b6 = ref_binding_pattern d [concrete] -// CHECK:STDOUT: %d.var_patt: %pattern_type.6b6 = var_pattern %d.patt [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.6b6 = ref_binding_pattern d [concrete = constants.%d.patt] +// CHECK:STDOUT: %d.var_patt: %pattern_type.6b6 = var_pattern %d.patt [concrete = constants.%d.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %i32 = var %d.var_patt [concrete] // CHECK:STDOUT: %i32.loc20: type = type_literal constants.%i32 [concrete = constants.%i32] diff --git a/toolchain/check/testdata/interface/as_type.carbon b/toolchain/check/testdata/interface/as_type.carbon index 1846ce460ce8..942771f9dbf5 100644 --- a/toolchain/check/testdata/interface/as_type.carbon +++ b/toolchain/check/testdata/interface/as_type.carbon @@ -22,6 +22,8 @@ fn F(unused e: Empty) {} // CHECK:STDOUT: %Empty.type: type = facet_type <@Empty> [concrete] // CHECK:STDOUT: %Self: %Empty.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %pattern_type: type = pattern_type %Empty.type [concrete] +// CHECK:STDOUT: %e.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type = at_binding_pattern e, %e.param_patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -33,8 +35,8 @@ fn F(unused e: Empty) {} // CHECK:STDOUT: } // CHECK:STDOUT: %Empty.decl: type = interface_decl @Empty [concrete = constants.%Empty.type] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %e.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %e.patt: %pattern_type = at_binding_pattern e, %e.param_patt [concrete] +// CHECK:STDOUT: %e.param_patt: %pattern_type = value_param_pattern [concrete = constants.%e.param_patt] +// CHECK:STDOUT: %e.patt: %pattern_type = at_binding_pattern e, %e.param_patt [concrete = constants.%e.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %e.param: %Empty.type = value_param call_param0 // CHECK:STDOUT: %Empty.ref: type = name_ref Empty, file.%Empty.decl [concrete = constants.%Empty.type] diff --git a/toolchain/check/testdata/interface/as_type_of_type.carbon b/toolchain/check/testdata/interface/as_type_of_type.carbon index 81d2259030a6..5ffb63e70da9 100644 --- a/toolchain/check/testdata/interface/as_type_of_type.carbon +++ b/toolchain/check/testdata/interface/as_type_of_type.carbon @@ -36,6 +36,7 @@ fn F(T:! Empty) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.894: type = pattern_type %Empty.type [concrete] +// CHECK:STDOUT: %T.patt.1d7: %pattern_type.894 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.4e8: %Empty.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -44,6 +45,8 @@ fn F(T:! Empty) { // CHECK:STDOUT: %ptr: type = ptr_type %T.as_type.22c [symbolic] // CHECK:STDOUT: %require_complete.ee8: = require_complete_type %ptr [symbolic] // CHECK:STDOUT: %pattern_type.777: type = pattern_type %ptr [symbolic] +// CHECK:STDOUT: %x.patt: %pattern_type.777 = ref_binding_pattern x [symbolic] +// CHECK:STDOUT: %x.var_patt: %pattern_type.777 = var_pattern %x.patt [symbolic] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %DefaultOrUnformed.lookup_impl_witness: = lookup_impl_witness %ptr, @DefaultOrUnformed [symbolic] // CHECK:STDOUT: %.50b: require_specific_def_type = require_specific_def @T.as.DefaultOrUnformed.impl(%ptr) [symbolic] @@ -87,7 +90,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.894 = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc21_7.1: %pattern_type.894 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_7.2 (constants.%T.patt.1d7)] // 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] @@ -126,6 +129,7 @@ fn F(T:! Empty) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc21_7.2: %Empty.type) { +// CHECK:STDOUT: %T.patt.loc21_7.2: %pattern_type.894 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_7.2 (constants.%T.patt.1d7)] // CHECK:STDOUT: %T.loc21_7.1: %Empty.type = symbolic_binding T, 0 [symbolic = %T.loc21_7.1 (constants.%T.4e8)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -133,6 +137,8 @@ fn F(T:! Empty) { // CHECK:STDOUT: %ptr.loc22_18.2: type = ptr_type %T.as_type.loc22_18.2 [symbolic = %ptr.loc22_18.2 (constants.%ptr)] // CHECK:STDOUT: %require_complete: = require_complete_type %ptr.loc22_18.2 [symbolic = %require_complete (constants.%require_complete.ee8)] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc22_18.2 [symbolic = %pattern_type (constants.%pattern_type.777)] +// CHECK:STDOUT: %x.patt.loc22_15.2: @F.%pattern_type (%pattern_type.777) = ref_binding_pattern x [symbolic = %x.patt.loc22_15.2 (constants.%x.patt)] +// CHECK:STDOUT: %x.var_patt.loc22_3.2: @F.%pattern_type (%pattern_type.777) = var_pattern %x.patt.loc22_15.2 [symbolic = %x.var_patt.loc22_3.2 (constants.%x.var_patt)] // CHECK:STDOUT: %.loc22_19.3: require_specific_def_type = require_specific_def @T.as.DefaultOrUnformed.impl(%ptr.loc22_18.2) [symbolic = %.loc22_19.3 (constants.%.50b)] // CHECK:STDOUT: %DefaultOrUnformed.lookup_impl_witness: = lookup_impl_witness %ptr.loc22_18.2, @DefaultOrUnformed [symbolic = %DefaultOrUnformed.lookup_impl_witness (constants.%DefaultOrUnformed.lookup_impl_witness)] // CHECK:STDOUT: %DefaultOrUnformed.facet.loc22_19.2: %DefaultOrUnformed.type = facet_value %ptr.loc22_18.2, (%DefaultOrUnformed.lookup_impl_witness) [symbolic = %DefaultOrUnformed.facet.loc22_19.2 (constants.%DefaultOrUnformed.facet)] @@ -141,19 +147,19 @@ fn F(T:! Empty) { // CHECK:STDOUT: %impl.elem0.loc22_19.2: @F.%.loc22_19.4 (%.ddb) = impl_witness_access %DefaultOrUnformed.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc22_19.2 (constants.%impl.elem0.98b)] // CHECK:STDOUT: %specific_impl_fn.loc22_19.2: = specific_impl_function %impl.elem0.loc22_19.2, @DefaultOrUnformed.WithSelf.Op(%DefaultOrUnformed.facet.loc22_19.2) [symbolic = %specific_impl_fn.loc22_19.2 (constants.%specific_impl_fn.f14)] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %ptr.loc22_18.2, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness)] -// CHECK:STDOUT: %Destroy.facet.loc22_3.2: %Destroy.type = facet_value %ptr.loc22_18.2, (%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.loc22_3.2 (constants.%Destroy.facet)] -// CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.loc22_3.2) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.67a)] -// CHECK:STDOUT: %.loc22_3.2: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Destroy.facet.loc22_3.2 [symbolic = %.loc22_3.2 (constants.%.0f5)] -// CHECK:STDOUT: %impl.elem0.loc22_3.2: @F.%.loc22_3.2 (%.0f5) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc22_3.2 (constants.%impl.elem0.584)] -// CHECK:STDOUT: %specific_impl_fn.loc22_3.2: = specific_impl_function %impl.elem0.loc22_3.2, @Destroy.WithSelf.Op(%Destroy.facet.loc22_3.2) [symbolic = %specific_impl_fn.loc22_3.2 (constants.%specific_impl_fn.e4d)] +// CHECK:STDOUT: %Destroy.facet.loc22_3.3: %Destroy.type = facet_value %ptr.loc22_18.2, (%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.loc22_3.3 (constants.%Destroy.facet)] +// CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.loc22_3.3) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.67a)] +// CHECK:STDOUT: %.loc22_3.3: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Destroy.facet.loc22_3.3 [symbolic = %.loc22_3.3 (constants.%.0f5)] +// CHECK:STDOUT: %impl.elem0.loc22_3.2: @F.%.loc22_3.3 (%.0f5) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc22_3.2 (constants.%impl.elem0.584)] +// CHECK:STDOUT: %specific_impl_fn.loc22_3.2: = specific_impl_function %impl.elem0.loc22_3.2, @Destroy.WithSelf.Op(%Destroy.facet.loc22_3.3) [symbolic = %specific_impl_fn.loc22_3.2 (constants.%specific_impl_fn.e4d)] // CHECK:STDOUT: // CHECK:STDOUT: fn() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: @F.%pattern_type (%pattern_type.777) = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: @F.%pattern_type (%pattern_type.777) = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt.loc22_15.1: @F.%pattern_type (%pattern_type.777) = ref_binding_pattern x [symbolic = %x.patt.loc22_15.2 (constants.%x.patt)] +// CHECK:STDOUT: %x.var_patt.loc22_3.1: @F.%pattern_type (%pattern_type.777) = var_pattern %x.patt.loc22_15.1 [symbolic = %x.var_patt.loc22_3.2 (constants.%x.var_patt)] // CHECK:STDOUT: } -// CHECK:STDOUT: %x.var: ref @F.%ptr.loc22_18.2 (%ptr) = var %x.var_patt +// CHECK:STDOUT: %x.var: ref @F.%ptr.loc22_18.2 (%ptr) = var %x.var_patt.loc22_3.1 // CHECK:STDOUT: %DefaultOrUnformed.facet.loc22_19.1: %DefaultOrUnformed.type = facet_value constants.%ptr, (constants.%DefaultOrUnformed.lookup_impl_witness) [symbolic = %DefaultOrUnformed.facet.loc22_19.2 (constants.%DefaultOrUnformed.facet)] // CHECK:STDOUT: %.loc22_19.1: %DefaultOrUnformed.type = converted constants.%ptr, %DefaultOrUnformed.facet.loc22_19.1 [symbolic = %DefaultOrUnformed.facet.loc22_19.2 (constants.%DefaultOrUnformed.facet)] // CHECK:STDOUT: %as_type: type = facet_access_type %.loc22_19.1 [symbolic = %ptr.loc22_18.2 (constants.%ptr)] @@ -169,10 +175,12 @@ fn F(T:! Empty) { // CHECK:STDOUT: %ptr.loc22_18.1: type = ptr_type %.loc22_18.2 [symbolic = %ptr.loc22_18.2 (constants.%ptr)] // CHECK:STDOUT: } // CHECK:STDOUT: %x: ref @F.%ptr.loc22_18.2 (%ptr) = ref_binding x, %x.var -// CHECK:STDOUT: %impl.elem0.loc22_3.1: @F.%.loc22_3.2 (%.0f5) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc22_3.2 (constants.%impl.elem0.584)] +// CHECK:STDOUT: %impl.elem0.loc22_3.1: @F.%.loc22_3.3 (%.0f5) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc22_3.2 (constants.%impl.elem0.584)] // CHECK:STDOUT: %bound_method.loc22_3.1: = bound_method %x.var, %impl.elem0.loc22_3.1 -// CHECK:STDOUT: %Destroy.facet.loc22_3.1: %Destroy.type = facet_value constants.%ptr, (constants.%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.loc22_3.2 (constants.%Destroy.facet)] -// CHECK:STDOUT: %.loc22_3.1: %Destroy.type = converted constants.%ptr, %Destroy.facet.loc22_3.1 [symbolic = %Destroy.facet.loc22_3.2 (constants.%Destroy.facet)] +// CHECK:STDOUT: %Destroy.facet.loc22_3.1: %Destroy.type = facet_value constants.%ptr, (constants.%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.loc22_3.3 (constants.%Destroy.facet)] +// CHECK:STDOUT: %.loc22_3.1: %Destroy.type = converted constants.%ptr, %Destroy.facet.loc22_3.1 [symbolic = %Destroy.facet.loc22_3.3 (constants.%Destroy.facet)] +// CHECK:STDOUT: %Destroy.facet.loc22_3.2: %Destroy.type = facet_value constants.%ptr, (constants.%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.loc22_3.3 (constants.%Destroy.facet)] +// CHECK:STDOUT: %.loc22_3.2: %Destroy.type = converted constants.%ptr, %Destroy.facet.loc22_3.2 [symbolic = %Destroy.facet.loc22_3.3 (constants.%Destroy.facet)] // CHECK:STDOUT: %specific_impl_fn.loc22_3.1: = specific_impl_function %impl.elem0.loc22_3.1, @Destroy.WithSelf.Op(constants.%Destroy.facet) [symbolic = %specific_impl_fn.loc22_3.2 (constants.%specific_impl_fn.e4d)] // CHECK:STDOUT: %bound_method.loc22_3.2: = bound_method %x.var, %specific_impl_fn.loc22_3.1 // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc22_3.2(%x.var) @@ -189,6 +197,7 @@ fn F(T:! Empty) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T.4e8) { +// CHECK:STDOUT: %T.patt.loc21_7.2 => constants.%T.patt.1d7 // CHECK:STDOUT: %T.loc21_7.1 => constants.%T.4e8 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/assoc_const_in_generic.carbon b/toolchain/check/testdata/interface/assoc_const_in_generic.carbon index 841490a8ccd6..6797602083bb 100644 --- a/toolchain/check/testdata/interface/assoc_const_in_generic.carbon +++ b/toolchain/check/testdata/interface/assoc_const_in_generic.carbon @@ -33,15 +33,19 @@ fn H() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %I.type.335: type = generic_interface_type @I [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %I.generic: %I.type.335 = struct_value () [concrete] // CHECK:STDOUT: %I.type.3fe: type = facet_type <@I, @I(%T)> [symbolic] // CHECK:STDOUT: %Self.191: %I.type.3fe = symbolic_binding Self, 1 [symbolic] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 2 [symbolic] // CHECK:STDOUT: %U: type = symbolic_binding U, 2 [symbolic] // CHECK:STDOUT: %.a6b: Core.Form = init_form %U [symbolic] // CHECK:STDOUT: %pattern_type.62e: type = pattern_type %U [symbolic] +// CHECK:STDOUT: %return.param_patt: %pattern_type.62e = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt: %pattern_type.62e = return_slot_pattern %return.param_patt, %U [symbolic] // CHECK:STDOUT: %I.WithSelf.F.type.09f: type = fn_type @I.WithSelf.F, @I.WithSelf(%T, %Self.191) [symbolic] // CHECK:STDOUT: %I.WithSelf.F.5f2: %I.WithSelf.F.type.09f = struct_value () [symbolic] // CHECK:STDOUT: %I.assoc_type.b71: type = assoc_entity_type @I, @I(%T) [symbolic] @@ -70,7 +74,7 @@ fn H() { // CHECK:STDOUT: .H = %H.decl // CHECK:STDOUT: } // CHECK:STDOUT: %I.decl: %I.type.335 = interface_decl @I [concrete = constants.%I.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc15_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc15_17.1: type = splice_block %.loc15_17.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -79,7 +83,7 @@ fn H() { // CHECK:STDOUT: %T.loc15_14.2: type = symbolic_binding T, 0 [symbolic = %T.loc15_14.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc19_7.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc19_7.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc19_10.1: type = splice_block %.loc19_10.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -91,6 +95,7 @@ fn H() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @I(%T.loc15_14.2: type) { +// CHECK:STDOUT: %T.patt.loc15_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_14.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc15_14.1: type = symbolic_binding T, 0 [symbolic = %T.loc15_14.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -103,9 +108,9 @@ fn H() { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %I.WithSelf.F.decl: @I.WithSelf.%I.WithSelf.F.type (%I.WithSelf.F.type.09f) = fn_decl @I.WithSelf.F [symbolic = @I.WithSelf.%I.WithSelf.F (constants.%I.WithSelf.F.5f2)] { -// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 2 [concrete] -// CHECK:STDOUT: %return.param_patt: @I.WithSelf.F.%pattern_type (%pattern_type.62e) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @I.WithSelf.F.%pattern_type (%pattern_type.62e) = return_slot_pattern %return.param_patt, %U.ref [concrete] +// CHECK:STDOUT: %U.patt.loc16_9.1: %pattern_type.98f = symbolic_binding_pattern U, 2 [symbolic = %U.patt.loc16_9.2 (constants.%U.patt)] +// CHECK:STDOUT: %return.param_patt.loc16_21.1: @I.WithSelf.F.%pattern_type (%pattern_type.62e) = out_param_pattern [symbolic = %return.param_patt.loc16_21.2 (constants.%return.param_patt)] +// CHECK:STDOUT: %return.patt.loc16_18.1: @I.WithSelf.F.%pattern_type (%pattern_type.62e) = return_slot_pattern %return.param_patt.loc16_21.1, %U.ref [symbolic = %return.patt.loc16_18.2 (constants.%return.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %U.ref: type = name_ref U, %U.loc16_9.2 [symbolic = %U.loc16_9.1 (constants.%U)] // CHECK:STDOUT: %.loc16_21.2: Core.Form = init_form %U.ref [symbolic = %.loc16_21.1 (constants.%.a6b)] @@ -129,14 +134,18 @@ fn H() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @I.WithSelf.F(@I.%T.loc15_14.2: type, @I.%Self.loc15_23.1: @I.%I.type (%I.type.3fe), %U.loc16_9.2: type) { +// CHECK:STDOUT: %U.patt.loc16_9.2: %pattern_type.98f = symbolic_binding_pattern U, 2 [symbolic = %U.patt.loc16_9.2 (constants.%U.patt)] // CHECK:STDOUT: %U.loc16_9.1: type = symbolic_binding U, 2 [symbolic = %U.loc16_9.1 (constants.%U)] // CHECK:STDOUT: %.loc16_21.1: Core.Form = init_form %U.loc16_9.1 [symbolic = %.loc16_21.1 (constants.%.a6b)] // CHECK:STDOUT: %pattern_type: type = pattern_type %U.loc16_9.1 [symbolic = %pattern_type (constants.%pattern_type.62e)] +// CHECK:STDOUT: %return.param_patt.loc16_21.2: @I.WithSelf.F.%pattern_type (%pattern_type.62e) = out_param_pattern [symbolic = %return.param_patt.loc16_21.2 (constants.%return.param_patt)] +// CHECK:STDOUT: %return.patt.loc16_18.2: @I.WithSelf.F.%pattern_type (%pattern_type.62e) = return_slot_pattern %return.param_patt.loc16_21.2, %U.loc16_9.1 [symbolic = %return.patt.loc16_18.2 (constants.%return.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn() -> out %return.param: @I.WithSelf.F.%U.loc16_9.1 (%U); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @G(%T.loc19_7.2: type) { +// CHECK:STDOUT: %T.patt.loc19_7.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc19_7.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc19_7.1: type = symbolic_binding T, 0 [symbolic = %T.loc19_7.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -167,6 +176,7 @@ fn H() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%T) { +// CHECK:STDOUT: %T.patt.loc15_14.2 => constants.%T.patt // CHECK:STDOUT: %T.loc15_14.1 => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -186,16 +196,21 @@ fn H() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I.WithSelf.F(constants.%T, constants.%Self.191, constants.%U) { +// CHECK:STDOUT: %U.patt.loc16_9.2 => constants.%U.patt // CHECK:STDOUT: %U.loc16_9.1 => constants.%U // CHECK:STDOUT: %.loc16_21.1 => constants.%.a6b // CHECK:STDOUT: %pattern_type => constants.%pattern_type.62e +// CHECK:STDOUT: %return.param_patt.loc16_21.2 => constants.%return.param_patt +// CHECK:STDOUT: %return.patt.loc16_18.2 => constants.%return.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%T) { +// CHECK:STDOUT: %T.patt.loc19_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc19_7.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%empty_struct_type) { +// CHECK:STDOUT: %T.patt.loc19_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc19_7.1 => constants.%empty_struct_type // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -206,6 +221,7 @@ fn H() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%empty_struct_type) { +// CHECK:STDOUT: %T.patt.loc15_14.2 => constants.%T.patt // CHECK:STDOUT: %T.loc15_14.1 => constants.%empty_struct_type // CHECK:STDOUT: // CHECK:STDOUT: !definition: diff --git a/toolchain/check/testdata/interface/compound_member_access.carbon b/toolchain/check/testdata/interface/compound_member_access.carbon index 84a56d11ac97..dccb44f1e53f 100644 --- a/toolchain/check/testdata/interface/compound_member_access.carbon +++ b/toolchain/check/testdata/interface/compound_member_access.carbon @@ -200,18 +200,22 @@ fn Works() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.2c5: type = pattern_type %J.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.2c5 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: %J.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] // CHECK:STDOUT: %J.lookup_impl_witness.1952bf.1: = lookup_impl_witness %T, @J [symbolic] // CHECK:STDOUT: %impl.elem0.436176.1: type = impl_witness_access %J.lookup_impl_witness.1952bf.1, element0 [symbolic] // CHECK:STDOUT: %pattern_type.0f6fa4.1: type = pattern_type %impl.elem0.436176.1 [symbolic] +// CHECK:STDOUT: %S.patt: %pattern_type.0f6fa4.1 = symbolic_binding_pattern S, 1 [symbolic] // CHECK:STDOUT: %S: %impl.elem0.436176.1 = symbolic_binding S, 1 [symbolic] // CHECK:STDOUT: %Simple1.type: type = fn_type @Simple1 [concrete] // CHECK:STDOUT: %Simple1: %Simple1.type = struct_value () [concrete] +// CHECK:STDOUT: %V.patt: %pattern_type.2c5 = symbolic_binding_pattern V, 0 [symbolic] // CHECK:STDOUT: %V: %J.type = symbolic_binding V, 0 [symbolic] // CHECK:STDOUT: %J.lookup_impl_witness.1952bf.2: = lookup_impl_witness %V, @J [symbolic] // CHECK:STDOUT: %impl.elem0.436176.2: type = impl_witness_access %J.lookup_impl_witness.1952bf.2, element0 [symbolic] // CHECK:STDOUT: %pattern_type.0f6fa4.2: type = pattern_type %impl.elem0.436176.2 [symbolic] +// CHECK:STDOUT: %W.patt: %pattern_type.0f6fa4.2 = symbolic_binding_pattern W, 1 [symbolic] // CHECK:STDOUT: %W: %impl.elem0.436176.2 = symbolic_binding W, 1 [symbolic] // CHECK:STDOUT: %Compound1.type: type = fn_type @Compound1 [concrete] // CHECK:STDOUT: %Compound1: %Compound1.type = struct_value () [concrete] @@ -234,8 +238,8 @@ fn Works() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %J.decl: type = interface_decl @J [concrete = constants.%J.type] {} {} // CHECK:STDOUT: %Simple1.decl: %Simple1.type = fn_decl @Simple1 [concrete = constants.%Simple1] { -// CHECK:STDOUT: %T.patt: %pattern_type.2c5 = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %S.patt: @Simple1.%pattern_type (%pattern_type.0f6fa4.1) = symbolic_binding_pattern S, 1 [concrete] +// CHECK:STDOUT: %T.patt.loc8_13.1: %pattern_type.2c5 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %S.patt.loc8_27.1: @Simple1.%pattern_type (%pattern_type.0f6fa4.1) = symbolic_binding_pattern S, 1 [symbolic = %S.patt.loc8_27.2 (constants.%S.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8_16: type = splice_block %J.ref [concrete = constants.%J.type] { // CHECK:STDOUT: %.Self.loc8_13: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -253,8 +257,8 @@ fn Works() { // CHECK:STDOUT: %S.loc8_27.2: @Simple1.%impl.elem0.loc8_31.1 (%impl.elem0.436176.1) = symbolic_binding S, 1 [symbolic = %S.loc8_27.1 (constants.%S)] // CHECK:STDOUT: } // CHECK:STDOUT: %Compound1.decl: %Compound1.type = fn_decl @Compound1 [concrete = constants.%Compound1] { -// CHECK:STDOUT: %V.patt: %pattern_type.2c5 = symbolic_binding_pattern V, 0 [concrete] -// CHECK:STDOUT: %W.patt: @Compound1.%pattern_type (%pattern_type.0f6fa4.2) = symbolic_binding_pattern W, 1 [concrete] +// CHECK:STDOUT: %V.patt.loc11_15.1: %pattern_type.2c5 = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc11_15.2 (constants.%V.patt)] +// CHECK:STDOUT: %W.patt.loc11_29.1: @Compound1.%pattern_type (%pattern_type.0f6fa4.2) = symbolic_binding_pattern W, 1 [symbolic = %W.patt.loc11_29.2 (constants.%W.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc11_18: type = splice_block %J.ref.loc11_18 [concrete = constants.%J.type] { // CHECK:STDOUT: %.Self.loc11_15: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -290,12 +294,14 @@ fn Works() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Simple1(%T.loc8_13.2: %J.type, %S.loc8_27.2: @Simple1.%impl.elem0.loc8_31.1 (%impl.elem0.436176.1)) { +// CHECK:STDOUT: %T.patt.loc8_13.2: %pattern_type.2c5 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_13.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc8_13.1: %J.type = symbolic_binding T, 0 [symbolic = %T.loc8_13.1 (constants.%T)] // CHECK:STDOUT: %T.as_type.loc8_31.1: type = facet_access_type %T.loc8_13.1 [symbolic = %T.as_type.loc8_31.1 (constants.%T.as_type)] // CHECK:STDOUT: %J.lookup_impl_witness: = lookup_impl_witness %T.loc8_13.1, @J [symbolic = %J.lookup_impl_witness (constants.%J.lookup_impl_witness.1952bf.1)] // CHECK:STDOUT: %impl.elem0.loc8_31.1: type = impl_witness_access %J.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc8_31.1 (constants.%impl.elem0.436176.1)] -// CHECK:STDOUT: %S.loc8_27.1: @Simple1.%impl.elem0.loc8_31.1 (%impl.elem0.436176.1) = symbolic_binding S, 1 [symbolic = %S.loc8_27.1 (constants.%S)] // CHECK:STDOUT: %pattern_type: type = pattern_type %impl.elem0.loc8_31.1 [symbolic = %pattern_type (constants.%pattern_type.0f6fa4.1)] +// CHECK:STDOUT: %S.patt.loc8_27.2: @Simple1.%pattern_type (%pattern_type.0f6fa4.1) = symbolic_binding_pattern S, 1 [symbolic = %S.patt.loc8_27.2 (constants.%S.patt)] +// CHECK:STDOUT: %S.loc8_27.1: @Simple1.%impl.elem0.loc8_31.1 (%impl.elem0.436176.1) = symbolic_binding S, 1 [symbolic = %S.loc8_27.1 (constants.%S)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -306,11 +312,13 @@ fn Works() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Compound1(%V.loc11_15.2: %J.type, %W.loc11_29.2: @Compound1.%impl.elem0.loc11_33.1 (%impl.elem0.436176.2)) { +// CHECK:STDOUT: %V.patt.loc11_15.2: %pattern_type.2c5 = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc11_15.2 (constants.%V.patt)] // CHECK:STDOUT: %V.loc11_15.1: %J.type = symbolic_binding V, 0 [symbolic = %V.loc11_15.1 (constants.%V)] // CHECK:STDOUT: %J.lookup_impl_witness: = lookup_impl_witness %V.loc11_15.1, @J [symbolic = %J.lookup_impl_witness (constants.%J.lookup_impl_witness.1952bf.2)] // CHECK:STDOUT: %impl.elem0.loc11_33.1: type = impl_witness_access %J.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc11_33.1 (constants.%impl.elem0.436176.2)] -// CHECK:STDOUT: %W.loc11_29.1: @Compound1.%impl.elem0.loc11_33.1 (%impl.elem0.436176.2) = symbolic_binding W, 1 [symbolic = %W.loc11_29.1 (constants.%W)] // CHECK:STDOUT: %pattern_type: type = pattern_type %impl.elem0.loc11_33.1 [symbolic = %pattern_type (constants.%pattern_type.0f6fa4.2)] +// CHECK:STDOUT: %W.patt.loc11_29.2: @Compound1.%pattern_type (%pattern_type.0f6fa4.2) = symbolic_binding_pattern W, 1 [symbolic = %W.patt.loc11_29.2 (constants.%W.patt)] +// CHECK:STDOUT: %W.loc11_29.1: @Compound1.%impl.elem0.loc11_33.1 (%impl.elem0.436176.2) = symbolic_binding W, 1 [symbolic = %W.loc11_29.1 (constants.%W)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -329,12 +337,14 @@ fn Works() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Simple1(constants.%T, constants.%S) { +// CHECK:STDOUT: %T.patt.loc8_13.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_13.1 => constants.%T // CHECK:STDOUT: %T.as_type.loc8_31.1 => constants.%T.as_type // CHECK:STDOUT: %J.lookup_impl_witness => constants.%J.lookup_impl_witness.1952bf.1 // CHECK:STDOUT: %impl.elem0.loc8_31.1 => constants.%impl.elem0.436176.1 -// CHECK:STDOUT: %S.loc8_27.1 => constants.%S // CHECK:STDOUT: %pattern_type => constants.%pattern_type.0f6fa4.1 +// CHECK:STDOUT: %S.patt.loc8_27.2 => constants.%S.patt +// CHECK:STDOUT: %S.loc8_27.1 => constants.%S // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @J.WithSelf(constants.%V) { @@ -342,11 +352,13 @@ fn Works() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Compound1(constants.%V, constants.%W) { +// CHECK:STDOUT: %V.patt.loc11_15.2 => constants.%V.patt // CHECK:STDOUT: %V.loc11_15.1 => constants.%V // CHECK:STDOUT: %J.lookup_impl_witness => constants.%J.lookup_impl_witness.1952bf.2 // CHECK:STDOUT: %impl.elem0.loc11_33.1 => constants.%impl.elem0.436176.2 -// CHECK:STDOUT: %W.loc11_29.1 => constants.%W // CHECK:STDOUT: %pattern_type => constants.%pattern_type.0f6fa4.2 +// CHECK:STDOUT: %W.patt.loc11_29.2 => constants.%W.patt +// CHECK:STDOUT: %W.loc11_29.1 => constants.%W // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- non_instance.carbon @@ -362,6 +374,7 @@ fn Works() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type %K1.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: %K1.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Simple2.type: type = fn_type @Simple2 [concrete] // CHECK:STDOUT: %Simple2: %Simple2.type = struct_value () [concrete] @@ -372,6 +385,7 @@ fn Works() { // CHECK:STDOUT: %.ad76f4.1: type = fn_type_with_self_type %K1.WithSelf.Q1.type.95e2e8.1, %T [symbolic] // CHECK:STDOUT: %impl.elem0.6d291b.1: %.ad76f4.1 = impl_witness_access %K1.lookup_impl_witness.27af5e.1, element0 [symbolic] // CHECK:STDOUT: %specific_impl_fn.747340.1: = specific_impl_function %impl.elem0.6d291b.1, @K1.WithSelf.Q1(%T) [symbolic] +// CHECK:STDOUT: %V.patt: %pattern_type = symbolic_binding_pattern V, 0 [symbolic] // CHECK:STDOUT: %V: %K1.type = symbolic_binding V, 0 [symbolic] // CHECK:STDOUT: %Compound2.type: type = fn_type @Compound2 [concrete] // CHECK:STDOUT: %Compound2: %Compound2.type = struct_value () [concrete] @@ -400,7 +414,7 @@ fn Works() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %K1.decl: type = interface_decl @K1 [concrete = constants.%K1.type] {} {} // CHECK:STDOUT: %Simple2.decl: %Simple2.type = fn_decl @Simple2 [concrete = constants.%Simple2] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc8_13.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_13.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8: type = splice_block %K1.ref [concrete = constants.%K1.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -409,7 +423,7 @@ fn Works() { // CHECK:STDOUT: %T.loc8_13.2: %K1.type = symbolic_binding T, 0 [symbolic = %T.loc8_13.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %Compound2.decl: %Compound2.type = fn_decl @Compound2 [concrete = constants.%Compound2] { -// CHECK:STDOUT: %V.patt: %pattern_type = symbolic_binding_pattern V, 0 [concrete] +// CHECK:STDOUT: %V.patt.loc13_15.1: %pattern_type = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc13_15.2 (constants.%V.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc13: type = splice_block %K1.ref.loc13 [concrete = constants.%K1.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -440,6 +454,7 @@ fn Works() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Simple2(%T.loc8_13.2: %K1.type) { +// CHECK:STDOUT: %T.patt.loc8_13.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_13.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc8_13.1: %K1.type = symbolic_binding T, 0 [symbolic = %T.loc8_13.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -464,6 +479,7 @@ fn Works() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Compound2(%V.loc13_15.2: %K1.type) { +// CHECK:STDOUT: %V.patt.loc13_15.2: %pattern_type = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc13_15.2 (constants.%V.patt)] // CHECK:STDOUT: %V.loc13_15.1: %K1.type = symbolic_binding V, 0 [symbolic = %V.loc13_15.1 (constants.%V)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -495,6 +511,7 @@ fn Works() { // CHECK:STDOUT: specific @K1.WithSelf.Q1(constants.%Self) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @Simple2(constants.%T) { +// CHECK:STDOUT: %T.patt.loc8_13.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_13.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -508,6 +525,7 @@ fn Works() { // CHECK:STDOUT: specific @K1.WithSelf.Q1(constants.%T) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @Compound2(constants.%V) { +// CHECK:STDOUT: %V.patt.loc13_15.2 => constants.%V.patt // CHECK:STDOUT: %V.loc13_15.1 => constants.%V // CHECK:STDOUT: } // CHECK:STDOUT: @@ -533,9 +551,12 @@ fn Works() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.583: type = pattern_type %K2.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.583 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: %K2.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] // CHECK:STDOUT: %pattern_type.f2711c.1: type = pattern_type %T.as_type [symbolic] +// CHECK:STDOUT: %x.param_patt: %pattern_type.f2711c.1 = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt: %pattern_type.f2711c.1 = at_binding_pattern x, %x.param_patt [symbolic] // CHECK:STDOUT: %Simple3.type: type = fn_type @Simple3 [concrete] // CHECK:STDOUT: %Simple3: %Simple3.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.041d4e.1: = require_complete_type %T.as_type [symbolic] @@ -545,9 +566,12 @@ fn Works() { // CHECK:STDOUT: %.13a: type = fn_type_with_self_type %K2.WithSelf.Q2.type.71e, %T [symbolic] // CHECK:STDOUT: %impl.elem0: %.13a = impl_witness_access %K2.lookup_impl_witness, element0 [symbolic] // CHECK:STDOUT: %specific_impl_fn: = specific_impl_function %impl.elem0, @K2.WithSelf.Q2(%T) [symbolic] +// CHECK:STDOUT: %V.patt: %pattern_type.583 = symbolic_binding_pattern V, 0 [symbolic] // CHECK:STDOUT: %V: %K2.type = symbolic_binding V, 0 [symbolic] // CHECK:STDOUT: %V.as_type: type = facet_access_type %V [symbolic] // CHECK:STDOUT: %pattern_type.f2711c.2: type = pattern_type %V.as_type [symbolic] +// CHECK:STDOUT: %y.param_patt: %pattern_type.f2711c.2 = value_param_pattern [symbolic] +// CHECK:STDOUT: %y.patt: %pattern_type.f2711c.2 = at_binding_pattern y, %y.param_patt [symbolic] // CHECK:STDOUT: %Compound3.type: type = fn_type @Compound3 [concrete] // CHECK:STDOUT: %Compound3: %Compound3.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.041d4e.2: = require_complete_type %V.as_type [symbolic] @@ -574,9 +598,9 @@ fn Works() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %K2.decl: type = interface_decl @K2 [concrete = constants.%K2.type] {} {} // CHECK:STDOUT: %Simple3.decl: %Simple3.type = fn_decl @Simple3 [concrete = constants.%Simple3] { -// CHECK:STDOUT: %T.patt: %pattern_type.583 = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %x.param_patt: @Simple3.%pattern_type (%pattern_type.f2711c.1) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @Simple3.%pattern_type (%pattern_type.f2711c.1) = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %T.patt.loc8_13.1: %pattern_type.583 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.param_patt.loc8_21.1: @Simple3.%pattern_type (%pattern_type.f2711c.1) = value_param_pattern [symbolic = %x.param_patt.loc8_21.2 (constants.%x.param_patt)] +// CHECK:STDOUT: %x.patt.loc8_21.1: @Simple3.%pattern_type (%pattern_type.f2711c.1) = at_binding_pattern x, %x.param_patt.loc8_21.1 [symbolic = %x.patt.loc8_21.2 (constants.%x.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8_16: type = splice_block %K2.ref [concrete = constants.%K2.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -592,9 +616,9 @@ fn Works() { // CHECK:STDOUT: %x: @Simple3.%T.as_type.loc8_23.1 (%T.as_type) = value_binding x, %x.param // CHECK:STDOUT: } // CHECK:STDOUT: %Compound3.decl: %Compound3.type = fn_decl @Compound3 [concrete = constants.%Compound3] { -// CHECK:STDOUT: %V.patt: %pattern_type.583 = symbolic_binding_pattern V, 0 [concrete] -// CHECK:STDOUT: %y.param_patt: @Compound3.%pattern_type (%pattern_type.f2711c.2) = value_param_pattern [concrete] -// CHECK:STDOUT: %y.patt: @Compound3.%pattern_type (%pattern_type.f2711c.2) = at_binding_pattern y, %y.param_patt [concrete] +// CHECK:STDOUT: %V.patt.loc14_15.1: %pattern_type.583 = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc14_15.2 (constants.%V.patt)] +// CHECK:STDOUT: %y.param_patt.loc14_23.1: @Compound3.%pattern_type (%pattern_type.f2711c.2) = value_param_pattern [symbolic = %y.param_patt.loc14_23.2 (constants.%y.param_patt)] +// CHECK:STDOUT: %y.patt.loc14_23.1: @Compound3.%pattern_type (%pattern_type.f2711c.2) = at_binding_pattern y, %y.param_patt.loc14_23.1 [symbolic = %y.patt.loc14_23.2 (constants.%y.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc14_18: type = splice_block %K2.ref.loc14 [concrete = constants.%K2.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -632,9 +656,12 @@ fn Works() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Simple3(%T.loc8_13.2: %K2.type) { +// CHECK:STDOUT: %T.patt.loc8_13.2: %pattern_type.583 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_13.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc8_13.1: %K2.type = symbolic_binding T, 0 [symbolic = %T.loc8_13.1 (constants.%T)] // CHECK:STDOUT: %T.as_type.loc8_23.1: type = facet_access_type %T.loc8_13.1 [symbolic = %T.as_type.loc8_23.1 (constants.%T.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc8_23.1 [symbolic = %pattern_type (constants.%pattern_type.f2711c.1)] +// CHECK:STDOUT: %x.param_patt.loc8_21.2: @Simple3.%pattern_type (%pattern_type.f2711c.1) = value_param_pattern [symbolic = %x.param_patt.loc8_21.2 (constants.%x.param_patt)] +// CHECK:STDOUT: %x.patt.loc8_21.2: @Simple3.%pattern_type (%pattern_type.f2711c.1) = at_binding_pattern x, %x.param_patt.loc8_21.2 [symbolic = %x.patt.loc8_21.2 (constants.%x.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc8_23.1 [symbolic = %require_complete (constants.%require_complete.041d4e.1)] @@ -656,9 +683,12 @@ fn Works() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Compound3(%V.loc14_15.2: %K2.type) { +// CHECK:STDOUT: %V.patt.loc14_15.2: %pattern_type.583 = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc14_15.2 (constants.%V.patt)] // CHECK:STDOUT: %V.loc14_15.1: %K2.type = symbolic_binding V, 0 [symbolic = %V.loc14_15.1 (constants.%V)] // CHECK:STDOUT: %V.as_type.loc14_25.1: type = facet_access_type %V.loc14_15.1 [symbolic = %V.as_type.loc14_25.1 (constants.%V.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %V.as_type.loc14_25.1 [symbolic = %pattern_type (constants.%pattern_type.f2711c.2)] +// CHECK:STDOUT: %y.param_patt.loc14_23.2: @Compound3.%pattern_type (%pattern_type.f2711c.2) = value_param_pattern [symbolic = %y.param_patt.loc14_23.2 (constants.%y.param_patt)] +// CHECK:STDOUT: %y.patt.loc14_23.2: @Compound3.%pattern_type (%pattern_type.f2711c.2) = at_binding_pattern y, %y.param_patt.loc14_23.2 [symbolic = %y.patt.loc14_23.2 (constants.%y.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %V.as_type.loc14_25.1 [symbolic = %require_complete (constants.%require_complete.041d4e.2)] @@ -683,9 +713,12 @@ fn Works() { // CHECK:STDOUT: specific @K2.WithSelf.Q2(constants.%Self.b0c) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @Simple3(constants.%T) { +// CHECK:STDOUT: %T.patt.loc8_13.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_13.1 => constants.%T // CHECK:STDOUT: %T.as_type.loc8_23.1 => constants.%T.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.f2711c.1 +// CHECK:STDOUT: %x.param_patt.loc8_21.2 => constants.%x.param_patt +// CHECK:STDOUT: %x.patt.loc8_21.2 => constants.%x.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @K2.WithSelf(constants.%T) { @@ -698,9 +731,12 @@ fn Works() { // CHECK:STDOUT: specific @K2.WithSelf.Q2(constants.%T) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @Compound3(constants.%V) { +// CHECK:STDOUT: %V.patt.loc14_15.2 => constants.%V.patt // CHECK:STDOUT: %V.loc14_15.1 => constants.%V // CHECK:STDOUT: %V.as_type.loc14_25.1 => constants.%V.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.f2711c.2 +// CHECK:STDOUT: %y.param_patt.loc14_23.2 => constants.%y.param_patt +// CHECK:STDOUT: %y.patt.loc14_23.2 => constants.%y.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- instance.carbon @@ -710,22 +746,31 @@ fn Works() { // CHECK:STDOUT: %Self: %L1.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] // CHECK:STDOUT: %pattern_type.63b: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt.075: %pattern_type.63b = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.637: %pattern_type.63b = at_binding_pattern self, %self.param_patt.075 [symbolic] // CHECK:STDOUT: %L1.WithSelf.R1.type.861: type = fn_type @L1.WithSelf.R1, @L1.WithSelf(%Self) [symbolic] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %L1.WithSelf.R1.1c0: %L1.WithSelf.R1.type.861 = struct_value () [symbolic] // CHECK:STDOUT: %L1.assoc_type: type = assoc_entity_type @L1 [concrete] // CHECK:STDOUT: %assoc0: %L1.assoc_type = assoc_entity element0, @L1.WithSelf.%L1.WithSelf.R1.decl [concrete] +// CHECK:STDOUT: %self.param_patt.f1b: %pattern_type.63b = ref_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.d80: %pattern_type.63b = at_binding_pattern self, %self.param_patt.f1b [symbolic] // CHECK:STDOUT: %L1.WithSelf.S1.type.ff3: type = fn_type @L1.WithSelf.S1, @L1.WithSelf(%Self) [symbolic] // CHECK:STDOUT: %L1.WithSelf.S1.11f: %L1.WithSelf.S1.type.ff3 = struct_value () [symbolic] // CHECK:STDOUT: %assoc1: %L1.assoc_type = assoc_entity element1, @L1.WithSelf.%L1.WithSelf.S1.decl [concrete] // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.b7b: type = pattern_type %L1.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.b7b = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: %L1.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] // CHECK:STDOUT: %pattern_type.5697a7.1: type = pattern_type %T.as_type [symbolic] +// CHECK:STDOUT: %x.param_patt: %pattern_type.5697a7.1 = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt: %pattern_type.5697a7.1 = at_binding_pattern x, %x.param_patt [symbolic] // CHECK:STDOUT: %ptr.ed22b9.1: type = ptr_type %T.as_type [symbolic] // CHECK:STDOUT: %pattern_type.e0b9be.1: type = pattern_type %ptr.ed22b9.1 [symbolic] +// CHECK:STDOUT: %p.param_patt.f2a353.1: %pattern_type.e0b9be.1 = value_param_pattern [symbolic] +// CHECK:STDOUT: %p.patt.4967c5.1: %pattern_type.e0b9be.1 = at_binding_pattern p, %p.param_patt.f2a353.1 [symbolic] // CHECK:STDOUT: %Simple4.type: type = fn_type @Simple4 [concrete] // CHECK:STDOUT: %Simple4: %Simple4.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.770490.1: = require_complete_type %T.as_type [symbolic] @@ -737,15 +782,24 @@ fn Works() { // CHECK:STDOUT: %L1.lookup_impl_witness.cca206.1: = lookup_impl_witness %T, @L1 [symbolic] // CHECK:STDOUT: %.56f6e0.1: type = fn_type_with_self_type %L1.WithSelf.R1.type.62535e.1, %T [symbolic] // CHECK:STDOUT: %impl.elem0.4e8926.1: %.56f6e0.1 = impl_witness_access %L1.lookup_impl_witness.cca206.1, element0 [symbolic] +// CHECK:STDOUT: %self.param_patt.346880.1: %pattern_type.5697a7.1 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.3f2bf1.1: %pattern_type.5697a7.1 = at_binding_pattern self, %self.param_patt.346880.1 [symbolic] // CHECK:STDOUT: %specific_impl_fn.e046e8.1: = specific_impl_function %impl.elem0.4e8926.1, @L1.WithSelf.R1(%T) [symbolic] // CHECK:STDOUT: %.b63157.1: type = fn_type_with_self_type %L1.WithSelf.S1.type.690082.1, %T [symbolic] // CHECK:STDOUT: %impl.elem1.86bb43.1: %.b63157.1 = impl_witness_access %L1.lookup_impl_witness.cca206.1, element1 [symbolic] +// CHECK:STDOUT: %self.param_patt.f25107.1: %pattern_type.5697a7.1 = ref_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.c50c02.1: %pattern_type.5697a7.1 = at_binding_pattern self, %self.param_patt.f25107.1 [symbolic] // CHECK:STDOUT: %specific_impl_fn.340d61.1: = specific_impl_function %impl.elem1.86bb43.1, @L1.WithSelf.S1(%T) [symbolic] +// CHECK:STDOUT: %V.patt: %pattern_type.b7b = symbolic_binding_pattern V, 0 [symbolic] // CHECK:STDOUT: %V: %L1.type = symbolic_binding V, 0 [symbolic] // CHECK:STDOUT: %V.as_type: type = facet_access_type %V [symbolic] // CHECK:STDOUT: %pattern_type.5697a7.2: type = pattern_type %V.as_type [symbolic] +// CHECK:STDOUT: %y.param_patt: %pattern_type.5697a7.2 = value_param_pattern [symbolic] +// CHECK:STDOUT: %y.patt: %pattern_type.5697a7.2 = at_binding_pattern y, %y.param_patt [symbolic] // CHECK:STDOUT: %ptr.ed22b9.2: type = ptr_type %V.as_type [symbolic] // CHECK:STDOUT: %pattern_type.e0b9be.2: type = pattern_type %ptr.ed22b9.2 [symbolic] +// CHECK:STDOUT: %p.param_patt.f2a353.2: %pattern_type.e0b9be.2 = value_param_pattern [symbolic] +// CHECK:STDOUT: %p.patt.4967c5.2: %pattern_type.e0b9be.2 = at_binding_pattern p, %p.param_patt.f2a353.2 [symbolic] // CHECK:STDOUT: %Compound4.type: type = fn_type @Compound4 [concrete] // CHECK:STDOUT: %Compound4: %Compound4.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.770490.2: = require_complete_type %V.as_type [symbolic] @@ -757,9 +811,13 @@ fn Works() { // CHECK:STDOUT: %L1.WithSelf.S1.acaab8.2: %L1.WithSelf.S1.type.690082.2 = struct_value () [symbolic] // CHECK:STDOUT: %.56f6e0.2: type = fn_type_with_self_type %L1.WithSelf.R1.type.62535e.2, %V [symbolic] // CHECK:STDOUT: %impl.elem0.4e8926.2: %.56f6e0.2 = impl_witness_access %L1.lookup_impl_witness.cca206.2, element0 [symbolic] +// CHECK:STDOUT: %self.param_patt.346880.2: %pattern_type.5697a7.2 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.3f2bf1.2: %pattern_type.5697a7.2 = at_binding_pattern self, %self.param_patt.346880.2 [symbolic] // CHECK:STDOUT: %specific_impl_fn.e046e8.2: = specific_impl_function %impl.elem0.4e8926.2, @L1.WithSelf.R1(%V) [symbolic] // CHECK:STDOUT: %.b63157.2: type = fn_type_with_self_type %L1.WithSelf.S1.type.690082.2, %V [symbolic] // CHECK:STDOUT: %impl.elem1.86bb43.2: %.b63157.2 = impl_witness_access %L1.lookup_impl_witness.cca206.2, element1 [symbolic] +// CHECK:STDOUT: %self.param_patt.f25107.2: %pattern_type.5697a7.2 = ref_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.c50c02.2: %pattern_type.5697a7.2 = at_binding_pattern self, %self.param_patt.f25107.2 [symbolic] // CHECK:STDOUT: %specific_impl_fn.340d61.2: = specific_impl_function %impl.elem1.86bb43.2, @L1.WithSelf.S1(%V) [symbolic] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -780,11 +838,11 @@ fn Works() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %L1.decl: type = interface_decl @L1 [concrete = constants.%L1.type] {} {} // CHECK:STDOUT: %Simple4.decl: %Simple4.type = fn_decl @Simple4 [concrete = constants.%Simple4] { -// CHECK:STDOUT: %T.patt: %pattern_type.b7b = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %x.param_patt: @Simple4.%pattern_type.loc9_21 (%pattern_type.5697a7.1) = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: @Simple4.%pattern_type.loc9_21 (%pattern_type.5697a7.1) = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %p.param_patt: @Simple4.%pattern_type.loc9_27 (%pattern_type.e0b9be.1) = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: @Simple4.%pattern_type.loc9_27 (%pattern_type.e0b9be.1) = at_binding_pattern p, %p.param_patt [concrete] +// CHECK:STDOUT: %T.patt.loc9_13.1: %pattern_type.b7b = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.param_patt.loc9_21.1: @Simple4.%pattern_type.loc9_21 (%pattern_type.5697a7.1) = value_param_pattern [symbolic = %x.param_patt.loc9_21.2 (constants.%x.param_patt)] +// CHECK:STDOUT: %x.patt.loc9_21.1: @Simple4.%pattern_type.loc9_21 (%pattern_type.5697a7.1) = at_binding_pattern x, %x.param_patt.loc9_21.1 [symbolic = %x.patt.loc9_21.2 (constants.%x.patt)] +// CHECK:STDOUT: %p.param_patt.loc9_27.1: @Simple4.%pattern_type.loc9_27 (%pattern_type.e0b9be.1) = value_param_pattern [symbolic = %p.param_patt.loc9_27.2 (constants.%p.param_patt.f2a353.1)] +// CHECK:STDOUT: %p.patt.loc9_27.1: @Simple4.%pattern_type.loc9_27 (%pattern_type.e0b9be.1) = at_binding_pattern p, %p.param_patt.loc9_27.1 [symbolic = %p.patt.loc9_27.2 (constants.%p.patt.4967c5.1)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc9_16: type = splice_block %L1.ref [concrete = constants.%L1.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -808,11 +866,11 @@ fn Works() { // CHECK:STDOUT: %p: @Simple4.%ptr.loc9_30.1 (%ptr.ed22b9.1) = value_binding p, %p.param // CHECK:STDOUT: } // CHECK:STDOUT: %Compound4.decl: %Compound4.type = fn_decl @Compound4 [concrete = constants.%Compound4] { -// CHECK:STDOUT: %V.patt: %pattern_type.b7b = symbolic_binding_pattern V, 0 [concrete] -// CHECK:STDOUT: %y.param_patt: @Compound4.%pattern_type.loc15_23 (%pattern_type.5697a7.2) = value_param_pattern [concrete] -// CHECK:STDOUT: %y.patt: @Compound4.%pattern_type.loc15_23 (%pattern_type.5697a7.2) = at_binding_pattern y, %y.param_patt [concrete] -// CHECK:STDOUT: %p.param_patt: @Compound4.%pattern_type.loc15_29 (%pattern_type.e0b9be.2) = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: @Compound4.%pattern_type.loc15_29 (%pattern_type.e0b9be.2) = at_binding_pattern p, %p.param_patt [concrete] +// CHECK:STDOUT: %V.patt.loc15_15.1: %pattern_type.b7b = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc15_15.2 (constants.%V.patt)] +// CHECK:STDOUT: %y.param_patt.loc15_23.1: @Compound4.%pattern_type.loc15_23 (%pattern_type.5697a7.2) = value_param_pattern [symbolic = %y.param_patt.loc15_23.2 (constants.%y.param_patt)] +// CHECK:STDOUT: %y.patt.loc15_23.1: @Compound4.%pattern_type.loc15_23 (%pattern_type.5697a7.2) = at_binding_pattern y, %y.param_patt.loc15_23.1 [symbolic = %y.patt.loc15_23.2 (constants.%y.patt)] +// CHECK:STDOUT: %p.param_patt.loc15_29.1: @Compound4.%pattern_type.loc15_29 (%pattern_type.e0b9be.2) = value_param_pattern [symbolic = %p.param_patt.loc15_29.2 (constants.%p.param_patt.f2a353.2)] +// CHECK:STDOUT: %p.patt.loc15_29.1: @Compound4.%pattern_type.loc15_29 (%pattern_type.e0b9be.2) = at_binding_pattern p, %p.param_patt.loc15_29.1 [symbolic = %p.patt.loc15_29.2 (constants.%p.patt.4967c5.2)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc15_18: type = splice_block %L1.ref.loc15 [concrete = constants.%L1.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -843,8 +901,8 @@ fn Works() { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %L1.WithSelf.R1.decl: @L1.WithSelf.%L1.WithSelf.R1.type (%L1.WithSelf.R1.type.861) = fn_decl @L1.WithSelf.R1 [symbolic = @L1.WithSelf.%L1.WithSelf.R1 (constants.%L1.WithSelf.R1.1c0)] { -// CHECK:STDOUT: %self.param_patt: @L1.WithSelf.R1.%pattern_type (%pattern_type.63b) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @L1.WithSelf.R1.%pattern_type (%pattern_type.63b) = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc4_9.1: @L1.WithSelf.R1.%pattern_type (%pattern_type.63b) = value_param_pattern [symbolic = %self.param_patt.loc4_9.2 (constants.%self.param_patt.075)] +// CHECK:STDOUT: %self.patt.loc4_9.1: @L1.WithSelf.R1.%pattern_type (%pattern_type.63b) = at_binding_pattern self, %self.param_patt.loc4_9.1 [symbolic = %self.patt.loc4_9.2 (constants.%self.patt.637)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @L1.WithSelf.R1.%Self.as_type.loc4_9.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc4_9.1: type = splice_block %.loc4_9.2 [symbolic = %Self.as_type.loc4_9.1 (constants.%Self.as_type)] { @@ -856,8 +914,8 @@ fn Works() { // CHECK:STDOUT: } // CHECK:STDOUT: %assoc0: %L1.assoc_type = assoc_entity element0, %L1.WithSelf.R1.decl [concrete = constants.%assoc0] // CHECK:STDOUT: %L1.WithSelf.S1.decl: @L1.WithSelf.%L1.WithSelf.S1.type (%L1.WithSelf.S1.type.ff3) = fn_decl @L1.WithSelf.S1 [symbolic = @L1.WithSelf.%L1.WithSelf.S1 (constants.%L1.WithSelf.S1.11f)] { -// CHECK:STDOUT: %self.param_patt: @L1.WithSelf.S1.%pattern_type (%pattern_type.63b) = ref_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @L1.WithSelf.S1.%pattern_type (%pattern_type.63b) = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc5_13.1: @L1.WithSelf.S1.%pattern_type (%pattern_type.63b) = ref_param_pattern [symbolic = %self.param_patt.loc5_13.2 (constants.%self.param_patt.f1b)] +// CHECK:STDOUT: %self.patt.loc5_13.1: @L1.WithSelf.S1.%pattern_type (%pattern_type.63b) = at_binding_pattern self, %self.param_patt.loc5_13.1 [symbolic = %self.patt.loc5_13.2 (constants.%self.patt.d80)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref @L1.WithSelf.S1.%Self.as_type.loc5_13.1 (%Self.as_type) = ref_param call_param0 // CHECK:STDOUT: %.loc5_13.1: type = splice_block %.loc5_13.2 [symbolic = %Self.as_type.loc5_13.1 (constants.%Self.as_type)] { @@ -882,6 +940,8 @@ fn Works() { // CHECK:STDOUT: %Self: %L1.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc4_9.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc4_9.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc4_9.1 [symbolic = %pattern_type (constants.%pattern_type.63b)] +// CHECK:STDOUT: %self.param_patt.loc4_9.2: @L1.WithSelf.R1.%pattern_type (%pattern_type.63b) = value_param_pattern [symbolic = %self.param_patt.loc4_9.2 (constants.%self.param_patt.075)] +// CHECK:STDOUT: %self.patt.loc4_9.2: @L1.WithSelf.R1.%pattern_type (%pattern_type.63b) = at_binding_pattern self, %self.param_patt.loc4_9.2 [symbolic = %self.patt.loc4_9.2 (constants.%self.patt.637)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @L1.WithSelf.R1.%Self.as_type.loc4_9.1 (%Self.as_type)); // CHECK:STDOUT: } @@ -890,16 +950,23 @@ fn Works() { // CHECK:STDOUT: %Self: %L1.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc5_13.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_13.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc5_13.1 [symbolic = %pattern_type (constants.%pattern_type.63b)] +// CHECK:STDOUT: %self.param_patt.loc5_13.2: @L1.WithSelf.S1.%pattern_type (%pattern_type.63b) = ref_param_pattern [symbolic = %self.param_patt.loc5_13.2 (constants.%self.param_patt.f1b)] +// CHECK:STDOUT: %self.patt.loc5_13.2: @L1.WithSelf.S1.%pattern_type (%pattern_type.63b) = at_binding_pattern self, %self.param_patt.loc5_13.2 [symbolic = %self.patt.loc5_13.2 (constants.%self.patt.d80)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: ref @L1.WithSelf.S1.%Self.as_type.loc5_13.1 (%Self.as_type)); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Simple4(%T.loc9_13.2: %L1.type) { +// CHECK:STDOUT: %T.patt.loc9_13.2: %pattern_type.b7b = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_13.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc9_13.1: %L1.type = symbolic_binding T, 0 [symbolic = %T.loc9_13.1 (constants.%T)] // CHECK:STDOUT: %T.as_type.loc9_23.1: type = facet_access_type %T.loc9_13.1 [symbolic = %T.as_type.loc9_23.1 (constants.%T.as_type)] // CHECK:STDOUT: %pattern_type.loc9_21: type = pattern_type %T.as_type.loc9_23.1 [symbolic = %pattern_type.loc9_21 (constants.%pattern_type.5697a7.1)] +// CHECK:STDOUT: %x.param_patt.loc9_21.2: @Simple4.%pattern_type.loc9_21 (%pattern_type.5697a7.1) = value_param_pattern [symbolic = %x.param_patt.loc9_21.2 (constants.%x.param_patt)] +// CHECK:STDOUT: %x.patt.loc9_21.2: @Simple4.%pattern_type.loc9_21 (%pattern_type.5697a7.1) = at_binding_pattern x, %x.param_patt.loc9_21.2 [symbolic = %x.patt.loc9_21.2 (constants.%x.patt)] // CHECK:STDOUT: %ptr.loc9_30.1: type = ptr_type %T.as_type.loc9_23.1 [symbolic = %ptr.loc9_30.1 (constants.%ptr.ed22b9.1)] // CHECK:STDOUT: %pattern_type.loc9_27: type = pattern_type %ptr.loc9_30.1 [symbolic = %pattern_type.loc9_27 (constants.%pattern_type.e0b9be.1)] +// CHECK:STDOUT: %p.param_patt.loc9_27.2: @Simple4.%pattern_type.loc9_27 (%pattern_type.e0b9be.1) = value_param_pattern [symbolic = %p.param_patt.loc9_27.2 (constants.%p.param_patt.f2a353.1)] +// CHECK:STDOUT: %p.patt.loc9_27.2: @Simple4.%pattern_type.loc9_27 (%pattern_type.e0b9be.1) = at_binding_pattern p, %p.param_patt.loc9_27.2 [symbolic = %p.patt.loc9_27.2 (constants.%p.patt.4967c5.1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc9_21: = require_complete_type %T.as_type.loc9_23.1 [symbolic = %require_complete.loc9_21 (constants.%require_complete.770490.1)] @@ -920,7 +987,8 @@ fn Works() { // CHECK:STDOUT: %R1.ref: %L1.assoc_type = name_ref R1, @L1.WithSelf.%assoc0 [concrete = constants.%assoc0] // CHECK:STDOUT: %impl.elem0.loc10_4.1: @Simple4.%.loc10_4 (%.56f6e0.1) = impl_witness_access constants.%L1.lookup_impl_witness.cca206.1, element0 [symbolic = %impl.elem0.loc10_4.2 (constants.%impl.elem0.4e8926.1)] // CHECK:STDOUT: %bound_method.loc10_4: = bound_method %x.ref, %impl.elem0.loc10_4.1 -// CHECK:STDOUT: %.loc10_8: %L1.type = converted constants.%T.as_type, constants.%T [symbolic = %T.loc9_13.1 (constants.%T)] +// CHECK:STDOUT: %.loc10_8.1: %L1.type = converted constants.%T.as_type, constants.%T [symbolic = %T.loc9_13.1 (constants.%T)] +// CHECK:STDOUT: %.loc10_8.2: %L1.type = converted constants.%T.as_type, constants.%T [symbolic = %T.loc9_13.1 (constants.%T)] // CHECK:STDOUT: %specific_impl_fn.loc10_4.1: = specific_impl_function %impl.elem0.loc10_4.1, @L1.WithSelf.R1(constants.%T) [symbolic = %specific_impl_fn.loc10_4.2 (constants.%specific_impl_fn.e046e8.1)] // CHECK:STDOUT: %bound_method.loc10_8: = bound_method %x.ref, %specific_impl_fn.loc10_4.1 // CHECK:STDOUT: %L1.WithSelf.R1.call: init %empty_tuple.type = call %bound_method.loc10_8(%x.ref) @@ -929,7 +997,8 @@ fn Works() { // CHECK:STDOUT: %S1.ref: %L1.assoc_type = name_ref S1, @L1.WithSelf.%assoc1 [concrete = constants.%assoc1] // CHECK:STDOUT: %impl.elem1.loc11_4.1: @Simple4.%.loc11_4.2 (%.b63157.1) = impl_witness_access constants.%L1.lookup_impl_witness.cca206.1, element1 [symbolic = %impl.elem1.loc11_4.2 (constants.%impl.elem1.86bb43.1)] // CHECK:STDOUT: %bound_method.loc11_4: = bound_method %.loc11_4.1, %impl.elem1.loc11_4.1 -// CHECK:STDOUT: %.loc11_9: %L1.type = converted constants.%T.as_type, constants.%T [symbolic = %T.loc9_13.1 (constants.%T)] +// CHECK:STDOUT: %.loc11_9.1: %L1.type = converted constants.%T.as_type, constants.%T [symbolic = %T.loc9_13.1 (constants.%T)] +// CHECK:STDOUT: %.loc11_9.2: %L1.type = converted constants.%T.as_type, constants.%T [symbolic = %T.loc9_13.1 (constants.%T)] // CHECK:STDOUT: %specific_impl_fn.loc11_4.1: = specific_impl_function %impl.elem1.loc11_4.1, @L1.WithSelf.S1(constants.%T) [symbolic = %specific_impl_fn.loc11_4.2 (constants.%specific_impl_fn.340d61.1)] // CHECK:STDOUT: %bound_method.loc11_9: = bound_method %.loc11_4.1, %specific_impl_fn.loc11_4.1 // CHECK:STDOUT: %L1.WithSelf.S1.call: init %empty_tuple.type = call %bound_method.loc11_9(%.loc11_4.1) @@ -938,11 +1007,16 @@ fn Works() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Compound4(%V.loc15_15.2: %L1.type) { +// CHECK:STDOUT: %V.patt.loc15_15.2: %pattern_type.b7b = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc15_15.2 (constants.%V.patt)] // CHECK:STDOUT: %V.loc15_15.1: %L1.type = symbolic_binding V, 0 [symbolic = %V.loc15_15.1 (constants.%V)] // CHECK:STDOUT: %V.as_type.loc15_25.1: type = facet_access_type %V.loc15_15.1 [symbolic = %V.as_type.loc15_25.1 (constants.%V.as_type)] // CHECK:STDOUT: %pattern_type.loc15_23: type = pattern_type %V.as_type.loc15_25.1 [symbolic = %pattern_type.loc15_23 (constants.%pattern_type.5697a7.2)] +// CHECK:STDOUT: %y.param_patt.loc15_23.2: @Compound4.%pattern_type.loc15_23 (%pattern_type.5697a7.2) = value_param_pattern [symbolic = %y.param_patt.loc15_23.2 (constants.%y.param_patt)] +// CHECK:STDOUT: %y.patt.loc15_23.2: @Compound4.%pattern_type.loc15_23 (%pattern_type.5697a7.2) = at_binding_pattern y, %y.param_patt.loc15_23.2 [symbolic = %y.patt.loc15_23.2 (constants.%y.patt)] // CHECK:STDOUT: %ptr.loc15_32.1: type = ptr_type %V.as_type.loc15_25.1 [symbolic = %ptr.loc15_32.1 (constants.%ptr.ed22b9.2)] // CHECK:STDOUT: %pattern_type.loc15_29: type = pattern_type %ptr.loc15_32.1 [symbolic = %pattern_type.loc15_29 (constants.%pattern_type.e0b9be.2)] +// CHECK:STDOUT: %p.param_patt.loc15_29.2: @Compound4.%pattern_type.loc15_29 (%pattern_type.e0b9be.2) = value_param_pattern [symbolic = %p.param_patt.loc15_29.2 (constants.%p.param_patt.f2a353.2)] +// CHECK:STDOUT: %p.patt.loc15_29.2: @Compound4.%pattern_type.loc15_29 (%pattern_type.e0b9be.2) = at_binding_pattern p, %p.param_patt.loc15_29.2 [symbolic = %p.patt.loc15_29.2 (constants.%p.patt.4967c5.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc15_23: = require_complete_type %V.as_type.loc15_25.1 [symbolic = %require_complete.loc15_23 (constants.%require_complete.770490.2)] @@ -964,7 +1038,8 @@ fn Works() { // CHECK:STDOUT: %R1.ref: %L1.assoc_type = name_ref R1, @L1.WithSelf.%assoc0 [concrete = constants.%assoc0] // CHECK:STDOUT: %impl.elem0.loc16_4.1: @Compound4.%.loc16_4 (%.56f6e0.2) = impl_witness_access constants.%L1.lookup_impl_witness.cca206.2, element0 [symbolic = %impl.elem0.loc16_4.2 (constants.%impl.elem0.4e8926.2)] // CHECK:STDOUT: %bound_method.loc16_4: = bound_method %y.ref, %impl.elem0.loc16_4.1 -// CHECK:STDOUT: %.loc16_13: %L1.type = converted constants.%V.as_type, constants.%V [symbolic = %V.loc15_15.1 (constants.%V)] +// CHECK:STDOUT: %.loc16_13.1: %L1.type = converted constants.%V.as_type, constants.%V [symbolic = %V.loc15_15.1 (constants.%V)] +// CHECK:STDOUT: %.loc16_13.2: %L1.type = converted constants.%V.as_type, constants.%V [symbolic = %V.loc15_15.1 (constants.%V)] // CHECK:STDOUT: %specific_impl_fn.loc16_4.1: = specific_impl_function %impl.elem0.loc16_4.1, @L1.WithSelf.R1(constants.%V) [symbolic = %specific_impl_fn.loc16_4.2 (constants.%specific_impl_fn.e046e8.2)] // CHECK:STDOUT: %bound_method.loc16_13: = bound_method %y.ref, %specific_impl_fn.loc16_4.1 // CHECK:STDOUT: %L1.WithSelf.R1.call: init %empty_tuple.type = call %bound_method.loc16_13(%y.ref) @@ -974,7 +1049,8 @@ fn Works() { // CHECK:STDOUT: %.loc17_4.1: ref @Compound4.%V.as_type.loc15_25.1 (%V.as_type) = deref %p.ref // CHECK:STDOUT: %impl.elem1.loc17_4.1: @Compound4.%.loc17_4.2 (%.b63157.2) = impl_witness_access constants.%L1.lookup_impl_witness.cca206.2, element1 [symbolic = %impl.elem1.loc17_4.2 (constants.%impl.elem1.86bb43.2)] // CHECK:STDOUT: %bound_method.loc17_4: = bound_method %.loc17_4.1, %impl.elem1.loc17_4.1 -// CHECK:STDOUT: %.loc17_14: %L1.type = converted constants.%V.as_type, constants.%V [symbolic = %V.loc15_15.1 (constants.%V)] +// CHECK:STDOUT: %.loc17_14.1: %L1.type = converted constants.%V.as_type, constants.%V [symbolic = %V.loc15_15.1 (constants.%V)] +// CHECK:STDOUT: %.loc17_14.2: %L1.type = converted constants.%V.as_type, constants.%V [symbolic = %V.loc15_15.1 (constants.%V)] // CHECK:STDOUT: %specific_impl_fn.loc17_4.1: = specific_impl_function %impl.elem1.loc17_4.1, @L1.WithSelf.S1(constants.%V) [symbolic = %specific_impl_fn.loc17_4.2 (constants.%specific_impl_fn.340d61.2)] // CHECK:STDOUT: %bound_method.loc17_14: = bound_method %.loc17_4.1, %specific_impl_fn.loc17_4.1 // CHECK:STDOUT: %L1.WithSelf.S1.call: init %empty_tuple.type = call %bound_method.loc17_14(%.loc17_4.1) @@ -995,20 +1071,29 @@ fn Works() { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc4_9.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.63b +// CHECK:STDOUT: %self.param_patt.loc4_9.2 => constants.%self.param_patt.075 +// CHECK:STDOUT: %self.patt.loc4_9.2 => constants.%self.patt.637 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @L1.WithSelf.S1(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc5_13.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.63b +// CHECK:STDOUT: %self.param_patt.loc5_13.2 => constants.%self.param_patt.f1b +// CHECK:STDOUT: %self.patt.loc5_13.2 => constants.%self.patt.d80 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Simple4(constants.%T) { +// CHECK:STDOUT: %T.patt.loc9_13.2 => constants.%T.patt // CHECK:STDOUT: %T.loc9_13.1 => constants.%T // CHECK:STDOUT: %T.as_type.loc9_23.1 => constants.%T.as_type // CHECK:STDOUT: %pattern_type.loc9_21 => constants.%pattern_type.5697a7.1 +// CHECK:STDOUT: %x.param_patt.loc9_21.2 => constants.%x.param_patt +// CHECK:STDOUT: %x.patt.loc9_21.2 => constants.%x.patt // CHECK:STDOUT: %ptr.loc9_30.1 => constants.%ptr.ed22b9.1 // CHECK:STDOUT: %pattern_type.loc9_27 => constants.%pattern_type.e0b9be.1 +// CHECK:STDOUT: %p.param_patt.loc9_27.2 => constants.%p.param_patt.f2a353.1 +// CHECK:STDOUT: %p.patt.loc9_27.2 => constants.%p.patt.4967c5.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @L1.WithSelf(constants.%T) { @@ -1024,20 +1109,29 @@ fn Works() { // CHECK:STDOUT: %Self => constants.%T // CHECK:STDOUT: %Self.as_type.loc4_9.1 => constants.%T.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.5697a7.1 +// CHECK:STDOUT: %self.param_patt.loc4_9.2 => constants.%self.param_patt.346880.1 +// CHECK:STDOUT: %self.patt.loc4_9.2 => constants.%self.patt.3f2bf1.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @L1.WithSelf.S1(constants.%T) { // CHECK:STDOUT: %Self => constants.%T // CHECK:STDOUT: %Self.as_type.loc5_13.1 => constants.%T.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.5697a7.1 +// CHECK:STDOUT: %self.param_patt.loc5_13.2 => constants.%self.param_patt.f25107.1 +// CHECK:STDOUT: %self.patt.loc5_13.2 => constants.%self.patt.c50c02.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Compound4(constants.%V) { +// CHECK:STDOUT: %V.patt.loc15_15.2 => constants.%V.patt // CHECK:STDOUT: %V.loc15_15.1 => constants.%V // CHECK:STDOUT: %V.as_type.loc15_25.1 => constants.%V.as_type // CHECK:STDOUT: %pattern_type.loc15_23 => constants.%pattern_type.5697a7.2 +// CHECK:STDOUT: %y.param_patt.loc15_23.2 => constants.%y.param_patt +// CHECK:STDOUT: %y.patt.loc15_23.2 => constants.%y.patt // CHECK:STDOUT: %ptr.loc15_32.1 => constants.%ptr.ed22b9.2 // CHECK:STDOUT: %pattern_type.loc15_29 => constants.%pattern_type.e0b9be.2 +// CHECK:STDOUT: %p.param_patt.loc15_29.2 => constants.%p.param_patt.f2a353.2 +// CHECK:STDOUT: %p.patt.loc15_29.2 => constants.%p.patt.4967c5.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @L1.WithSelf(constants.%V) { @@ -1053,12 +1147,16 @@ fn Works() { // CHECK:STDOUT: %Self => constants.%V // CHECK:STDOUT: %Self.as_type.loc4_9.1 => constants.%V.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.5697a7.2 +// CHECK:STDOUT: %self.param_patt.loc4_9.2 => constants.%self.param_patt.346880.2 +// CHECK:STDOUT: %self.patt.loc4_9.2 => constants.%self.patt.3f2bf1.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @L1.WithSelf.S1(constants.%V) { // CHECK:STDOUT: %Self => constants.%V // CHECK:STDOUT: %Self.as_type.loc5_13.1 => constants.%V.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.5697a7.2 +// CHECK:STDOUT: %self.param_patt.loc5_13.2 => constants.%self.param_patt.f25107.2 +// CHECK:STDOUT: %self.patt.loc5_13.2 => constants.%self.patt.c50c02.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_interface_instance_caller_not.carbon @@ -1068,16 +1166,21 @@ fn Works() { // CHECK:STDOUT: %Self: %L2.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] // CHECK:STDOUT: %pattern_type.b91: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt.d8c: %pattern_type.b91 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.588: %pattern_type.b91 = at_binding_pattern self, %self.param_patt.d8c [symbolic] // CHECK:STDOUT: %L2.WithSelf.R2.type.bc0: type = fn_type @L2.WithSelf.R2, @L2.WithSelf(%Self) [symbolic] // CHECK:STDOUT: %L2.WithSelf.R2.efd: %L2.WithSelf.R2.type.bc0 = struct_value () [symbolic] // CHECK:STDOUT: %L2.assoc_type: type = assoc_entity_type @L2 [concrete] // CHECK:STDOUT: %assoc0: %L2.assoc_type = assoc_entity element0, @L2.WithSelf.%L2.WithSelf.R2.decl [concrete] +// CHECK:STDOUT: %self.param_patt.2ec: %pattern_type.b91 = ref_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.663: %pattern_type.b91 = at_binding_pattern self, %self.param_patt.2ec [symbolic] // CHECK:STDOUT: %L2.WithSelf.S2.type.51d: type = fn_type @L2.WithSelf.S2, @L2.WithSelf(%Self) [symbolic] // CHECK:STDOUT: %L2.WithSelf.S2.a11: %L2.WithSelf.S2.type.51d = struct_value () [symbolic] // CHECK:STDOUT: %assoc1: %L2.assoc_type = assoc_entity element1, @L2.WithSelf.%L2.WithSelf.S2.decl [concrete] // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.5b3: type = pattern_type %L2.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.5b3 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: %L2.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Simple5.type: type = fn_type @Simple5 [concrete] // CHECK:STDOUT: %Simple5: %Simple5.type = struct_value () [concrete] @@ -1091,6 +1194,7 @@ fn Works() { // CHECK:STDOUT: %impl.elem0: %.244 = impl_witness_access %L2.lookup_impl_witness.d84, element0 [symbolic] // CHECK:STDOUT: %.451: type = fn_type_with_self_type %L2.WithSelf.S2.type.937, %T [symbolic] // CHECK:STDOUT: %impl.elem1: %.451 = impl_witness_access %L2.lookup_impl_witness.d84, element1 [symbolic] +// CHECK:STDOUT: %V.patt: %pattern_type.5b3 = symbolic_binding_pattern V, 0 [symbolic] // CHECK:STDOUT: %V: %L2.type = symbolic_binding V, 0 [symbolic] // CHECK:STDOUT: %Compound5.type: type = fn_type @Compound5 [concrete] // CHECK:STDOUT: %Compound5: %Compound5.type = struct_value () [concrete] @@ -1113,7 +1217,7 @@ fn Works() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %L2.decl: type = interface_decl @L2 [concrete = constants.%L2.type] {} {} // CHECK:STDOUT: %Simple5.decl: %Simple5.type = fn_decl @Simple5 [concrete = constants.%Simple5] { -// CHECK:STDOUT: %T.patt: %pattern_type.5b3 = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc10_13.1: %pattern_type.5b3 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc10_13.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc10: type = splice_block %L2.ref [concrete = constants.%L2.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1122,7 +1226,7 @@ fn Works() { // CHECK:STDOUT: %T.loc10_13.2: %L2.type = symbolic_binding T, 0 [symbolic = %T.loc10_13.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %Compound5.decl: %Compound5.type = fn_decl @Compound5 [concrete = constants.%Compound5] { -// CHECK:STDOUT: %V.patt: %pattern_type.5b3 = symbolic_binding_pattern V, 0 [concrete] +// CHECK:STDOUT: %V.patt.loc30_15.1: %pattern_type.5b3 = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc30_15.2 (constants.%V.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc30: type = splice_block %L2.ref.loc30 [concrete = constants.%L2.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1138,8 +1242,8 @@ fn Works() { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %L2.WithSelf.R2.decl: @L2.WithSelf.%L2.WithSelf.R2.type (%L2.WithSelf.R2.type.bc0) = fn_decl @L2.WithSelf.R2 [symbolic = @L2.WithSelf.%L2.WithSelf.R2 (constants.%L2.WithSelf.R2.efd)] { -// CHECK:STDOUT: %self.param_patt: @L2.WithSelf.R2.%pattern_type (%pattern_type.b91) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @L2.WithSelf.R2.%pattern_type (%pattern_type.b91) = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc5_9.1: @L2.WithSelf.R2.%pattern_type (%pattern_type.b91) = value_param_pattern [symbolic = %self.param_patt.loc5_9.2 (constants.%self.param_patt.d8c)] +// CHECK:STDOUT: %self.patt.loc5_9.1: @L2.WithSelf.R2.%pattern_type (%pattern_type.b91) = at_binding_pattern self, %self.param_patt.loc5_9.1 [symbolic = %self.patt.loc5_9.2 (constants.%self.patt.588)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @L2.WithSelf.R2.%Self.as_type.loc5_9.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc5_9.1: type = splice_block %.loc5_9.2 [symbolic = %Self.as_type.loc5_9.1 (constants.%Self.as_type)] { @@ -1151,8 +1255,8 @@ fn Works() { // CHECK:STDOUT: } // CHECK:STDOUT: %assoc0: %L2.assoc_type = assoc_entity element0, %L2.WithSelf.R2.decl [concrete = constants.%assoc0] // CHECK:STDOUT: %L2.WithSelf.S2.decl: @L2.WithSelf.%L2.WithSelf.S2.type (%L2.WithSelf.S2.type.51d) = fn_decl @L2.WithSelf.S2 [symbolic = @L2.WithSelf.%L2.WithSelf.S2 (constants.%L2.WithSelf.S2.a11)] { -// CHECK:STDOUT: %self.param_patt: @L2.WithSelf.S2.%pattern_type (%pattern_type.b91) = ref_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @L2.WithSelf.S2.%pattern_type (%pattern_type.b91) = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc6_13.1: @L2.WithSelf.S2.%pattern_type (%pattern_type.b91) = ref_param_pattern [symbolic = %self.param_patt.loc6_13.2 (constants.%self.param_patt.2ec)] +// CHECK:STDOUT: %self.patt.loc6_13.1: @L2.WithSelf.S2.%pattern_type (%pattern_type.b91) = at_binding_pattern self, %self.param_patt.loc6_13.1 [symbolic = %self.patt.loc6_13.2 (constants.%self.patt.663)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref @L2.WithSelf.S2.%Self.as_type.loc6_13.1 (%Self.as_type) = ref_param call_param0 // CHECK:STDOUT: %.loc6_13.1: type = splice_block %.loc6_13.2 [symbolic = %Self.as_type.loc6_13.1 (constants.%Self.as_type)] { @@ -1177,6 +1281,8 @@ fn Works() { // CHECK:STDOUT: %Self: %L2.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc5_9.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_9.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc5_9.1 [symbolic = %pattern_type (constants.%pattern_type.b91)] +// CHECK:STDOUT: %self.param_patt.loc5_9.2: @L2.WithSelf.R2.%pattern_type (%pattern_type.b91) = value_param_pattern [symbolic = %self.param_patt.loc5_9.2 (constants.%self.param_patt.d8c)] +// CHECK:STDOUT: %self.patt.loc5_9.2: @L2.WithSelf.R2.%pattern_type (%pattern_type.b91) = at_binding_pattern self, %self.param_patt.loc5_9.2 [symbolic = %self.patt.loc5_9.2 (constants.%self.patt.588)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @L2.WithSelf.R2.%Self.as_type.loc5_9.1 (%Self.as_type)); // CHECK:STDOUT: } @@ -1185,11 +1291,14 @@ fn Works() { // CHECK:STDOUT: %Self: %L2.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc6_13.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc6_13.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc6_13.1 [symbolic = %pattern_type (constants.%pattern_type.b91)] +// CHECK:STDOUT: %self.param_patt.loc6_13.2: @L2.WithSelf.S2.%pattern_type (%pattern_type.b91) = ref_param_pattern [symbolic = %self.param_patt.loc6_13.2 (constants.%self.param_patt.2ec)] +// CHECK:STDOUT: %self.patt.loc6_13.2: @L2.WithSelf.S2.%pattern_type (%pattern_type.b91) = at_binding_pattern self, %self.param_patt.loc6_13.2 [symbolic = %self.patt.loc6_13.2 (constants.%self.patt.663)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: ref @L2.WithSelf.S2.%Self.as_type.loc6_13.1 (%Self.as_type)); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Simple5(%T.loc10_13.2: %L2.type) { +// CHECK:STDOUT: %T.patt.loc10_13.2: %pattern_type.5b3 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc10_13.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc10_13.1: %L2.type = symbolic_binding T, 0 [symbolic = %T.loc10_13.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1219,6 +1328,7 @@ fn Works() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Compound5(%V.loc30_15.2: %L2.type) { +// CHECK:STDOUT: %V.patt.loc30_15.2: %pattern_type.5b3 = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc30_15.2 (constants.%V.patt)] // CHECK:STDOUT: %V.loc30_15.1: %L2.type = symbolic_binding V, 0 [symbolic = %V.loc30_15.1 (constants.%V)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1248,15 +1358,20 @@ fn Works() { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc5_9.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.b91 +// CHECK:STDOUT: %self.param_patt.loc5_9.2 => constants.%self.param_patt.d8c +// CHECK:STDOUT: %self.patt.loc5_9.2 => constants.%self.patt.588 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @L2.WithSelf.S2(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc6_13.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.b91 +// CHECK:STDOUT: %self.param_patt.loc6_13.2 => constants.%self.param_patt.2ec +// CHECK:STDOUT: %self.patt.loc6_13.2 => constants.%self.patt.663 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Simple5(constants.%T) { +// CHECK:STDOUT: %T.patt.loc10_13.2 => constants.%T.patt // CHECK:STDOUT: %T.loc10_13.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1270,6 +1385,7 @@ fn Works() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Compound5(constants.%V) { +// CHECK:STDOUT: %V.patt.loc30_15.2 => constants.%V.patt // CHECK:STDOUT: %V.loc30_15.1 => constants.%V // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/default_fn.carbon b/toolchain/check/testdata/interface/default_fn.carbon index 584eaef2e1a0..552bac53ac29 100644 --- a/toolchain/check/testdata/interface/default_fn.carbon +++ b/toolchain/check/testdata/interface/default_fn.carbon @@ -36,6 +36,8 @@ class C { // CHECK:STDOUT: %Self.4e9: %I.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type.0fa: type = facet_access_type %Self.4e9 [symbolic] // CHECK:STDOUT: %pattern_type.492: type = pattern_type %Self.as_type.0fa [symbolic] +// CHECK:STDOUT: %self.param_patt.55d: %pattern_type.492 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.bd2: %pattern_type.492 = at_binding_pattern self, %self.param_patt.55d [symbolic] // CHECK:STDOUT: %I.WithSelf.F.type.933: type = fn_type @I.WithSelf.F, @I.WithSelf(%Self.4e9) [symbolic] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %I.WithSelf.F.02a: %I.WithSelf.F.type.933 = struct_value () [symbolic] @@ -43,14 +45,19 @@ class C { // CHECK:STDOUT: %assoc0.08d: %I.assoc_type = assoc_entity element0, @I.WithSelf.%I.WithSelf.F.decl [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness @C.as.I.impl.%I.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %self.param_patt.303: %pattern_type.98b = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.49a718.1: %pattern_type.98b = at_binding_pattern self, %self.param_patt.303 [concrete] // CHECK:STDOUT: %C.as.I.impl.F.type: type = fn_type @C.as.I.impl.F [concrete] // CHECK:STDOUT: %C.as.I.impl.F: %C.as.I.impl.F.type = struct_value () [concrete] // CHECK:STDOUT: %I.facet: %I.type = facet_value %C, (%I.impl_witness) [concrete] // CHECK:STDOUT: %I.WithSelf.F.type.903: type = fn_type @I.WithSelf.F, @I.WithSelf(%I.facet) [concrete] // CHECK:STDOUT: %I.WithSelf.F.60d: %I.WithSelf.F.type.903 = struct_value () [concrete] +// CHECK:STDOUT: %self.patt.49a718.2: %pattern_type.98b = at_binding_pattern self, %self.param_patt.303 [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %Self.as_type.0fa [symbolic] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %.66b: type = fn_type_with_self_type %I.WithSelf.F.type.903, %I.facet [concrete] @@ -83,8 +90,8 @@ class C { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %I.WithSelf.F.decl: @I.WithSelf.%I.WithSelf.F.type (%I.WithSelf.F.type.933) = fn_decl @I.WithSelf.F [symbolic = @I.WithSelf.%I.WithSelf.F (constants.%I.WithSelf.F.02a)] { -// CHECK:STDOUT: %self.param_patt: @I.WithSelf.F.%pattern_type (%pattern_type.492) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @I.WithSelf.F.%pattern_type (%pattern_type.492) = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc18_17.1: @I.WithSelf.F.%pattern_type (%pattern_type.492) = value_param_pattern [symbolic = %self.param_patt.loc18_17.2 (constants.%self.param_patt.55d)] +// CHECK:STDOUT: %self.patt.loc18_17.1: @I.WithSelf.F.%pattern_type (%pattern_type.492) = at_binding_pattern self, %self.param_patt.loc18_17.1 [symbolic = %self.patt.loc18_17.2 (constants.%self.patt.bd2)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @I.WithSelf.F.%Self.as_type.loc18_17.1 (%Self.as_type.0fa) = value_param call_param0 // CHECK:STDOUT: %.loc18_17.1: type = splice_block %.loc18_17.2 [symbolic = %Self.as_type.loc18_17.1 (constants.%Self.as_type.0fa)] { @@ -110,8 +117,8 @@ class C { // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.I.impl: %C.ref as %I.ref { // CHECK:STDOUT: %C.as.I.impl.F.decl: %C.as.I.impl.F.type = fn_decl @C.as.I.impl.F [concrete = constants.%C.as.I.impl.F] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.98b = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.98b = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.98b = value_param_pattern [concrete = constants.%self.param_patt.303] +// CHECK:STDOUT: %self.patt: %pattern_type.98b = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.49a718.1] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %C = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @C.as.I.impl.%C.ref [concrete = constants.%C] @@ -145,6 +152,8 @@ class C { // CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.4e9)] // CHECK:STDOUT: %Self.as_type.loc18_17.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc18_17.1 (constants.%Self.as_type.0fa)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc18_17.1 [symbolic = %pattern_type (constants.%pattern_type.492)] +// CHECK:STDOUT: %self.param_patt.loc18_17.2: @I.WithSelf.F.%pattern_type (%pattern_type.492) = value_param_pattern [symbolic = %self.param_patt.loc18_17.2 (constants.%self.param_patt.55d)] +// CHECK:STDOUT: %self.patt.loc18_17.2: @I.WithSelf.F.%pattern_type (%pattern_type.492) = at_binding_pattern self, %self.param_patt.loc18_17.2 [symbolic = %self.patt.loc18_17.2 (constants.%self.patt.bd2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %Self.as_type.loc18_17.1 [symbolic = %require_complete (constants.%require_complete)] @@ -152,8 +161,8 @@ class C { // CHECK:STDOUT: fn(%self.param: @I.WithSelf.F.%Self.as_type.loc18_17.1 (%Self.as_type.0fa)) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt // CHECK:STDOUT: %.loc20_19.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] @@ -198,6 +207,8 @@ class C { // CHECK:STDOUT: %Self => constants.%Self.4e9 // CHECK:STDOUT: %Self.as_type.loc18_17.1 => constants.%Self.as_type.0fa // CHECK:STDOUT: %pattern_type => constants.%pattern_type.492 +// CHECK:STDOUT: %self.param_patt.loc18_17.2 => constants.%self.param_patt.55d +// CHECK:STDOUT: %self.patt.loc18_17.2 => constants.%self.patt.bd2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I.WithSelf(constants.%I.facet) { @@ -211,5 +222,7 @@ class C { // CHECK:STDOUT: %Self => constants.%I.facet // CHECK:STDOUT: %Self.as_type.loc18_17.1 => constants.%C // CHECK:STDOUT: %pattern_type => constants.%pattern_type.98b +// CHECK:STDOUT: %self.param_patt.loc18_17.2 => constants.%self.param_patt.303 +// CHECK:STDOUT: %self.patt.loc18_17.2 => constants.%self.patt.49a718.2 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/export_name.carbon b/toolchain/check/testdata/interface/export_name.carbon index ccfa14c782af..fff939094bd9 100644 --- a/toolchain/check/testdata/interface/export_name.carbon +++ b/toolchain/check/testdata/interface/export_name.carbon @@ -105,6 +105,8 @@ fn UseEmpty(unused i: I) {} // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] // CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %pattern_type: type = pattern_type %I.type [concrete] +// CHECK:STDOUT: %i.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %i.patt: %pattern_type = at_binding_pattern i, %i.param_patt [concrete] // CHECK:STDOUT: %UseEmpty.type: type = fn_type @UseEmpty [concrete] // CHECK:STDOUT: %UseEmpty: %UseEmpty.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -121,8 +123,8 @@ fn UseEmpty(unused i: I) {} // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %UseEmpty.decl: %UseEmpty.type = fn_decl @UseEmpty [concrete = constants.%UseEmpty] { -// CHECK:STDOUT: %i.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %i.patt: %pattern_type = at_binding_pattern i, %i.param_patt [concrete] +// CHECK:STDOUT: %i.param_patt: %pattern_type = value_param_pattern [concrete = constants.%i.param_patt] +// CHECK:STDOUT: %i.patt: %pattern_type = at_binding_pattern i, %i.param_patt [concrete = constants.%i.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %i.param: %I.type = value_param call_param0 // CHECK:STDOUT: %I.ref: type = name_ref I, imports.%Main.I [concrete = constants.%I.type] diff --git a/toolchain/check/testdata/interface/fail_assoc_const_alias.carbon b/toolchain/check/testdata/interface/fail_assoc_const_alias.carbon index 016a52e42952..471138bf6720 100644 --- a/toolchain/check/testdata/interface/fail_assoc_const_alias.carbon +++ b/toolchain/check/testdata/interface/fail_assoc_const_alias.carbon @@ -89,6 +89,8 @@ interface C { // CHECK:STDOUT: %impl.elem0.422: type = impl_witness_access %I2.lookup_impl_witness.b5c, element0 [symbolic] // CHECK:STDOUT: %.932: Core.Form = init_form %impl.elem0.422 [symbolic] // CHECK:STDOUT: %pattern_type.ff8: type = pattern_type %impl.elem0.422 [symbolic] +// CHECK:STDOUT: %return.param_patt: %pattern_type.ff8 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt: %pattern_type.ff8 = return_slot_pattern %return.param_patt, %impl.elem0.422 [symbolic] // CHECK:STDOUT: %J2.WithSelf.F2.type: type = fn_type @J2.WithSelf.F2, @J2.WithSelf(%Self.c1f) [symbolic] // CHECK:STDOUT: %J2.WithSelf.F2: %J2.WithSelf.F2.type = struct_value () [symbolic] // CHECK:STDOUT: %J2.assoc_type: type = assoc_entity_type @J2 [concrete] @@ -108,8 +110,8 @@ interface C { // CHECK:STDOUT: %T2.ref: %I2.assoc_type = name_ref T2, @T2.%assoc0 [concrete = constants.%assoc0.d6c] // CHECK:STDOUT: %U2: %I2.assoc_type = alias_binding U2, %T2.ref [concrete = constants.%assoc0.d6c] // CHECK:STDOUT: %J2.WithSelf.F2.decl: @J2.WithSelf.%J2.WithSelf.F2.type (%J2.WithSelf.F2.type) = fn_decl @J2.WithSelf.F2 [symbolic = @J2.WithSelf.%J2.WithSelf.F2 (constants.%J2.WithSelf.F2)] { -// CHECK:STDOUT: %return.param_patt: @J2.WithSelf.F2.%pattern_type (%pattern_type.ff8) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @J2.WithSelf.F2.%pattern_type (%pattern_type.ff8) = return_slot_pattern %return.param_patt, %U2.ref [concrete] +// CHECK:STDOUT: %return.param_patt.loc14_14.1: @J2.WithSelf.F2.%pattern_type (%pattern_type.ff8) = out_param_pattern [symbolic = %return.param_patt.loc14_14.2 (constants.%return.param_patt)] +// CHECK:STDOUT: %return.patt.loc14_11.1: @J2.WithSelf.F2.%pattern_type (%pattern_type.ff8) = return_slot_pattern %return.param_patt.loc14_14.1, %U2.ref [symbolic = %return.patt.loc14_11.2 (constants.%return.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.as_type.loc14_14.2: type = facet_access_type @J2.%Self [symbolic = %Self.as_type.loc14_14.1 (constants.%Self.as_type)] // CHECK:STDOUT: %I2.facet.loc14_14.2: %I2.type = facet_value %Self.as_type.loc14_14.2, (constants.%I2.lookup_impl_witness.b5c) [symbolic = %I2.facet.loc14_14.1 (constants.%I2.facet.39b)] @@ -142,6 +144,8 @@ interface C { // CHECK:STDOUT: %impl.elem0.loc14_14.1: type = impl_witness_access %I2.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc14_14.1 (constants.%impl.elem0.422)] // CHECK:STDOUT: %.loc14_14.2: Core.Form = init_form %impl.elem0.loc14_14.1 [symbolic = %.loc14_14.2 (constants.%.932)] // CHECK:STDOUT: %pattern_type: type = pattern_type %impl.elem0.loc14_14.1 [symbolic = %pattern_type (constants.%pattern_type.ff8)] +// CHECK:STDOUT: %return.param_patt.loc14_14.2: @J2.WithSelf.F2.%pattern_type (%pattern_type.ff8) = out_param_pattern [symbolic = %return.param_patt.loc14_14.2 (constants.%return.param_patt)] +// CHECK:STDOUT: %return.patt.loc14_11.2: @J2.WithSelf.F2.%pattern_type (%pattern_type.ff8) = return_slot_pattern %return.param_patt.loc14_14.2, %impl.elem0.loc14_14.1 [symbolic = %return.patt.loc14_11.2 (constants.%return.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn() -> out %return.param: @J2.WithSelf.F2.%impl.elem0.loc14_14.1 (%impl.elem0.422); // CHECK:STDOUT: } @@ -157,6 +161,8 @@ interface C { // CHECK:STDOUT: %impl.elem0.loc14_14.1 => constants.%impl.elem0.422 // CHECK:STDOUT: %.loc14_14.2 => constants.%.932 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.ff8 +// CHECK:STDOUT: %return.param_patt.loc14_14.2 => constants.%return.param_patt +// CHECK:STDOUT: %return.patt.loc14_11.2 => constants.%return.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- call_with_compound_member_access.carbon @@ -166,6 +172,8 @@ interface C { // CHECK:STDOUT: %Self: %C.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt: %pattern_type = at_binding_pattern self, %self.param_patt [symbolic] // CHECK:STDOUT: %C.WithSelf.F.type: type = fn_type @C.WithSelf.F, @C.WithSelf(%Self) [symbolic] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %C.WithSelf.F: %C.WithSelf.F.type = struct_value () [symbolic] @@ -211,7 +219,8 @@ interface C { // CHECK:STDOUT: %F.ref.loc8: %C.assoc_type = name_ref F, @C.WithSelf.%assoc0 [concrete = constants.%assoc0] // CHECK:STDOUT: %impl.elem0.loc8_9.1: @C.WithSelf.G.%.loc8_9 (%.b5a) = impl_witness_access constants.%C.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc8_9.2 (constants.%impl.elem0)] // CHECK:STDOUT: %bound_method.loc8_9: = bound_method %self.ref.loc8, %impl.elem0.loc8_9.1 -// CHECK:STDOUT: %.loc8_12: %C.type = converted constants.%Self.as_type, constants.%Self [symbolic = %Self (constants.%Self)] +// CHECK:STDOUT: %.loc8_12.1: %C.type = converted constants.%Self.as_type, constants.%Self [symbolic = %Self (constants.%Self)] +// CHECK:STDOUT: %.loc8_12.2: %C.type = converted constants.%Self.as_type, constants.%Self [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %specific_impl_fn.loc8_9.1: = specific_impl_function %impl.elem0.loc8_9.1, @C.WithSelf.F(constants.%Self) [symbolic = %specific_impl_fn.loc8_9.2 (constants.%specific_impl_fn)] // CHECK:STDOUT: %bound_method.loc8_12: = bound_method %self.ref.loc8, %specific_impl_fn.loc8_9.1 // CHECK:STDOUT: %C.WithSelf.F.call.loc8: init %empty_tuple.type = call %bound_method.loc8_12(%self.ref.loc8) @@ -219,7 +228,8 @@ interface C { // CHECK:STDOUT: %impl.elem0.loc9: @C.WithSelf.G.%.loc8_9 (%.b5a) = impl_witness_access constants.%C.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc8_9.2 (constants.%impl.elem0)] // CHECK:STDOUT: %F.ref.loc9: @C.WithSelf.G.%.loc8_9 (%.b5a) = name_ref F, %impl.elem0.loc9 [symbolic = %impl.elem0.loc8_9.2 (constants.%impl.elem0)] // CHECK:STDOUT: %bound_method.loc9_9: = bound_method %self.ref.loc9, %F.ref.loc9 -// CHECK:STDOUT: %.loc9: %C.type = converted constants.%Self.as_type, constants.%Self [symbolic = %Self (constants.%Self)] +// CHECK:STDOUT: %.loc9_14.1: %C.type = converted constants.%Self.as_type, constants.%Self [symbolic = %Self (constants.%Self)] +// CHECK:STDOUT: %.loc9_14.2: %C.type = converted constants.%Self.as_type, constants.%Self [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %specific_impl_fn.loc9: = specific_impl_function %F.ref.loc9, @C.WithSelf.F(constants.%Self) [symbolic = %specific_impl_fn.loc8_9.2 (constants.%specific_impl_fn)] // CHECK:STDOUT: %bound_method.loc9_14: = bound_method %self.ref.loc9, %specific_impl_fn.loc9 // CHECK:STDOUT: %C.WithSelf.F.call.loc9: init %empty_tuple.type = call %bound_method.loc9_14(%self.ref.loc9) @@ -240,5 +250,7 @@ interface C { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc6_8.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type +// CHECK:STDOUT: %self.param_patt.loc6_8.2 => constants.%self.param_patt +// CHECK:STDOUT: %self.patt.loc6_8.2 => constants.%self.patt // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/fail_assoc_fn_invalid_use.carbon b/toolchain/check/testdata/interface/fail_assoc_fn_invalid_use.carbon index cff5801c5aa2..1b8e3ffef58f 100644 --- a/toolchain/check/testdata/interface/fail_assoc_fn_invalid_use.carbon +++ b/toolchain/check/testdata/interface/fail_assoc_fn_invalid_use.carbon @@ -36,6 +36,8 @@ fn Use(T:! I) { // CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] // CHECK:STDOUT: %pattern_type.c60: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt: %pattern_type.c60 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt: %pattern_type.c60 = at_binding_pattern self, %self.param_patt [symbolic] // CHECK:STDOUT: %I.WithSelf.F.type.dcc: type = fn_type @I.WithSelf.F, @I.WithSelf(%Self) [symbolic] // CHECK:STDOUT: %I.WithSelf.F.ec6: %I.WithSelf.F.type.dcc = struct_value () [symbolic] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] @@ -43,6 +45,7 @@ fn Use(T:! I) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.6cb: type = pattern_type %I.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.6cb = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: %I.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Use.type: type = fn_type @Use [concrete] // CHECK:STDOUT: %Use: %Use.type = struct_value () [concrete] @@ -62,7 +65,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.6cb = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc8_9.1: %pattern_type.6cb = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_9.2 (constants.%T.patt)] // 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] @@ -78,8 +81,8 @@ fn Use(T:! I) { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %I.WithSelf.F.decl: @I.WithSelf.%I.WithSelf.F.type (%I.WithSelf.F.type.dcc) = fn_decl @I.WithSelf.F [symbolic = @I.WithSelf.%I.WithSelf.F (constants.%I.WithSelf.F.ec6)] { -// CHECK:STDOUT: %self.param_patt: @I.WithSelf.F.%pattern_type (%pattern_type.c60) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @I.WithSelf.F.%pattern_type (%pattern_type.c60) = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc5_8.1: @I.WithSelf.F.%pattern_type (%pattern_type.c60) = value_param_pattern [symbolic = %self.param_patt.loc5_8.2 (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt.loc5_8.1: @I.WithSelf.F.%pattern_type (%pattern_type.c60) = at_binding_pattern self, %self.param_patt.loc5_8.1 [symbolic = %self.patt.loc5_8.2 (constants.%self.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @I.WithSelf.F.%Self.as_type.loc5_8.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc5_8.1: type = splice_block %.loc5_8.2 [symbolic = %Self.as_type.loc5_8.1 (constants.%Self.as_type)] { @@ -103,11 +106,14 @@ fn Use(T:! I) { // CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc5_8.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_8.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc5_8.1 [symbolic = %pattern_type (constants.%pattern_type.c60)] +// CHECK:STDOUT: %self.param_patt.loc5_8.2: @I.WithSelf.F.%pattern_type (%pattern_type.c60) = value_param_pattern [symbolic = %self.param_patt.loc5_8.2 (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt.loc5_8.2: @I.WithSelf.F.%pattern_type (%pattern_type.c60) = at_binding_pattern self, %self.param_patt.loc5_8.2 [symbolic = %self.patt.loc5_8.2 (constants.%self.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @I.WithSelf.F.%Self.as_type.loc5_8.1 (%Self.as_type)); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Use(%T.loc8_9.2: %I.type) { +// CHECK:STDOUT: %T.patt.loc8_9.2: %pattern_type.6cb = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_9.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc8_9.1: %I.type = symbolic_binding T, 0 [symbolic = %T.loc8_9.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -140,9 +146,12 @@ fn Use(T:! I) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc5_8.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.c60 +// CHECK:STDOUT: %self.param_patt.loc5_8.2 => constants.%self.param_patt +// CHECK:STDOUT: %self.patt.loc5_8.2 => constants.%self.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Use(constants.%T) { +// CHECK:STDOUT: %T.patt.loc8_9.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_9.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/fail_duplicate.carbon b/toolchain/check/testdata/interface/fail_duplicate.carbon index a289f55b54ba..ae89022be3d0 100644 --- a/toolchain/check/testdata/interface/fail_duplicate.carbon +++ b/toolchain/check/testdata/interface/fail_duplicate.carbon @@ -142,6 +142,8 @@ interface Class { } // CHECK:STDOUT: %Self.3ce02d.2: %Interface.type.283524.2 = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.3ce02d.2 [symbolic] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt: %pattern_type = at_binding_pattern self, %self.param_patt [symbolic] // CHECK:STDOUT: %Interface.WithSelf.F.type: type = fn_type @Interface.WithSelf.F, @Interface.WithSelf.loc13(%Self.3ce02d.2) [symbolic] // CHECK:STDOUT: %Interface.WithSelf.F: %Interface.WithSelf.F.type = struct_value () [symbolic] // CHECK:STDOUT: %Interface.assoc_type: type = assoc_entity_type @Interface.loc13 [concrete] @@ -173,8 +175,8 @@ interface Class { } // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %Interface.WithSelf.F.decl: @Interface.WithSelf.loc13.%Interface.WithSelf.F.type (%Interface.WithSelf.F.type) = fn_decl @Interface.WithSelf.F [symbolic = @Interface.WithSelf.loc13.%Interface.WithSelf.F (constants.%Interface.WithSelf.F)] { -// CHECK:STDOUT: %self.param_patt: @Interface.WithSelf.F.%pattern_type (%pattern_type) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @Interface.WithSelf.F.%pattern_type (%pattern_type) = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc14_8.1: @Interface.WithSelf.F.%pattern_type (%pattern_type) = value_param_pattern [symbolic = %self.param_patt.loc14_8.2 (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt.loc14_8.1: @Interface.WithSelf.F.%pattern_type (%pattern_type) = at_binding_pattern self, %self.param_patt.loc14_8.1 [symbolic = %self.patt.loc14_8.2 (constants.%self.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @Interface.WithSelf.F.%Self.as_type.loc14_8.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc14_8.1: type = splice_block %.loc14_8.2 [symbolic = %Self.as_type.loc14_8.1 (constants.%Self.as_type)] { @@ -198,6 +200,8 @@ interface Class { } // CHECK:STDOUT: %Self: %Interface.type.283524.2 = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.3ce02d.2)] // CHECK:STDOUT: %Self.as_type.loc14_8.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc14_8.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc14_8.1 [symbolic = %pattern_type (constants.%pattern_type)] +// CHECK:STDOUT: %self.param_patt.loc14_8.2: @Interface.WithSelf.F.%pattern_type (%pattern_type) = value_param_pattern [symbolic = %self.param_patt.loc14_8.2 (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt.loc14_8.2: @Interface.WithSelf.F.%pattern_type (%pattern_type) = at_binding_pattern self, %self.param_patt.loc14_8.2 [symbolic = %self.patt.loc14_8.2 (constants.%self.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Interface.WithSelf.F.%Self.as_type.loc14_8.1 (%Self.as_type)); // CHECK:STDOUT: } @@ -210,6 +214,8 @@ interface Class { } // CHECK:STDOUT: %Self => constants.%Self.3ce02d.2 // CHECK:STDOUT: %Self.as_type.loc14_8.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type +// CHECK:STDOUT: %self.param_patt.loc14_8.2 => constants.%self.param_patt +// CHECK:STDOUT: %self.patt.loc14_8.2 => constants.%self.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_name_conflict_with_fn.carbon diff --git a/toolchain/check/testdata/interface/fail_generic_redeclaration.carbon b/toolchain/check/testdata/interface/fail_generic_redeclaration.carbon index a0abaadc1029..b0ad0263d817 100644 --- a/toolchain/check/testdata/interface/fail_generic_redeclaration.carbon +++ b/toolchain/check/testdata/interface/fail_generic_redeclaration.carbon @@ -49,6 +49,7 @@ interface DifferentParams(T:! ()) {} // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.d47: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %NotGeneric.type.fec: type = generic_interface_type @NotGeneric.loc23 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -63,6 +64,7 @@ interface DifferentParams(T:! ()) {} // CHECK:STDOUT: %DifferentParams.generic.54c122.1: %DifferentParams.type.998819.1 = struct_value () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %T.patt.8f8: %pattern_type.cb1 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.d5f: %empty_tuple.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %DifferentParams.type.998819.2: type = generic_interface_type @DifferentParams.loc43 [concrete] // CHECK:STDOUT: %DifferentParams.generic.54c122.2: %DifferentParams.type.998819.2 = struct_value () [concrete] @@ -78,7 +80,7 @@ interface DifferentParams(T:! ()) {} // CHECK:STDOUT: } // CHECK:STDOUT: %NotGeneric.decl.loc15: type = interface_decl @NotGeneric.loc15 [concrete = constants.%NotGeneric.type.fd5] {} {} // CHECK:STDOUT: %NotGeneric.decl.loc23: %NotGeneric.type.fec = interface_decl @NotGeneric.loc23 [concrete = constants.%NotGeneric.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc23_23.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc23_23.2 (constants.%T.patt.d47)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc23_26.1: type = splice_block %.loc23_26.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -87,7 +89,7 @@ interface DifferentParams(T:! ()) {} // CHECK:STDOUT: %T.loc23_23.2: type = symbolic_binding T, 0 [symbolic = %T.loc23_23.1 (constants.%T.67d)] // CHECK:STDOUT: } // CHECK:STDOUT: %Generic.decl.loc25: %Generic.type.30d = interface_decl @Generic.loc25 [concrete = constants.%Generic.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc25_20.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc25_20.2 (constants.%T.patt.d47)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc25_23.1: type = splice_block %.loc25_23.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -97,7 +99,7 @@ interface DifferentParams(T:! ()) {} // CHECK:STDOUT: } // CHECK:STDOUT: %Generic.decl.loc33: type = interface_decl @Generic.loc33 [concrete = constants.%Generic.type.b2d] {} {} // CHECK:STDOUT: %DifferentParams.decl.loc35: %DifferentParams.type.998819.1 = interface_decl @DifferentParams.loc35 [concrete = constants.%DifferentParams.generic.54c122.1] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc35_28.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc35_28.2 (constants.%T.patt.d47)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc35_31.1: type = splice_block %.loc35_31.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -106,7 +108,7 @@ interface DifferentParams(T:! ()) {} // CHECK:STDOUT: %T.loc35_28.2: type = symbolic_binding T, 0 [symbolic = %T.loc35_28.1 (constants.%T.67d)] // CHECK:STDOUT: } // CHECK:STDOUT: %DifferentParams.decl.loc43: %DifferentParams.type.998819.2 = interface_decl @DifferentParams.loc43 [concrete = constants.%DifferentParams.generic.54c122.2] { -// CHECK:STDOUT: %T.patt: %pattern_type.cb1 = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc43_28.1: %pattern_type.cb1 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc43_28.2 (constants.%T.patt.8f8)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc43_32.1: type = splice_block %.loc43_32.3 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -120,6 +122,7 @@ interface DifferentParams(T:! ()) {} // CHECK:STDOUT: interface @NotGeneric.loc15; // CHECK:STDOUT: // CHECK:STDOUT: generic interface @NotGeneric.loc23(%T.loc23_23.2: type) { +// CHECK:STDOUT: %T.patt.loc23_23.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc23_23.2 (constants.%T.patt.d47)] // CHECK:STDOUT: %T.loc23_23.1: type = symbolic_binding T, 0 [symbolic = %T.loc23_23.1 (constants.%T.67d)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -139,6 +142,7 @@ interface DifferentParams(T:! ()) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Generic.loc25(%T.loc25_20.2: type) { +// CHECK:STDOUT: %T.patt.loc25_20.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc25_20.2 (constants.%T.patt.d47)] // CHECK:STDOUT: %T.loc25_20.1: type = symbolic_binding T, 0 [symbolic = %T.loc25_20.1 (constants.%T.67d)] // CHECK:STDOUT: // CHECK:STDOUT: interface; @@ -156,12 +160,14 @@ interface DifferentParams(T:! ()) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @DifferentParams.loc35(%T.loc35_28.2: type) { +// CHECK:STDOUT: %T.patt.loc35_28.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc35_28.2 (constants.%T.patt.d47)] // CHECK:STDOUT: %T.loc35_28.1: type = symbolic_binding T, 0 [symbolic = %T.loc35_28.1 (constants.%T.67d)] // CHECK:STDOUT: // CHECK:STDOUT: interface; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @DifferentParams.loc43(%T.loc43_28.2: %empty_tuple.type) { +// CHECK:STDOUT: %T.patt.loc43_28.2: %pattern_type.cb1 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc43_28.2 (constants.%T.patt.8f8)] // CHECK:STDOUT: %T.loc43_28.1: %empty_tuple.type = symbolic_binding T, 0 [symbolic = %T.loc43_28.1 (constants.%T.d5f)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -181,22 +187,26 @@ interface DifferentParams(T:! ()) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @NotGeneric.loc23(constants.%T.67d) { +// CHECK:STDOUT: %T.patt.loc23_23.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc23_23.1 => constants.%T.67d // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @NotGeneric.WithSelf(constants.%T.67d, constants.%Self.b8f) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @Generic.loc25(constants.%T.67d) { +// CHECK:STDOUT: %T.patt.loc25_20.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc25_20.1 => constants.%T.67d // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Generic.WithSelf(constants.%Self.c53) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @DifferentParams.loc35(constants.%T.67d) { +// CHECK:STDOUT: %T.patt.loc35_28.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc35_28.1 => constants.%T.67d // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @DifferentParams.loc43(constants.%T.d5f) { +// CHECK:STDOUT: %T.patt.loc43_28.2 => constants.%T.patt.8f8 // CHECK:STDOUT: %T.loc43_28.1 => constants.%T.d5f // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/fail_lookup_in_type_type.carbon b/toolchain/check/testdata/interface/fail_lookup_in_type_type.carbon index ad9547f39a2b..2bca72a81021 100644 --- a/toolchain/check/testdata/interface/fail_lookup_in_type_type.carbon +++ b/toolchain/check/testdata/interface/fail_lookup_in_type_type.carbon @@ -44,7 +44,7 @@ let U: (type where .Self impls type).missing = {}; // CHECK:STDOUT: .T = %T // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %T.patt: = value_binding_pattern T [concrete] +// CHECK:STDOUT: %T.patt: = value_binding_pattern T [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc8: type = type_literal type [concrete = type] // CHECK:STDOUT: %T: = value_binding T, [concrete = ] @@ -71,7 +71,7 @@ let U: (type where .Self impls type).missing = {}; // CHECK:STDOUT: .U = %U // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %U.patt: = value_binding_pattern U [concrete] +// CHECK:STDOUT: %U.patt: = value_binding_pattern U [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %.1: = splice_block [concrete = ] { // CHECK:STDOUT: %.loc8_9: type = type_literal type [concrete = type] diff --git a/toolchain/check/testdata/interface/fail_lookup_undefined.carbon b/toolchain/check/testdata/interface/fail_lookup_undefined.carbon index 5f282a71a3d1..231092bd5b77 100644 --- a/toolchain/check/testdata/interface/fail_lookup_undefined.carbon +++ b/toolchain/check/testdata/interface/fail_lookup_undefined.carbon @@ -88,7 +88,7 @@ interface BeingDefined { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %BeingDefined.WithSelf.H.decl: @BeingDefined.WithSelf.%BeingDefined.WithSelf.H.type (%BeingDefined.WithSelf.H.type) = fn_decl @BeingDefined.WithSelf.H [symbolic = @BeingDefined.WithSelf.%BeingDefined.WithSelf.H (constants.%BeingDefined.WithSelf.H)] { -// CHECK:STDOUT: %return.patt: = return_slot_pattern , [concrete] +// CHECK:STDOUT: %return.patt: = return_slot_pattern , [concrete = ] // CHECK:STDOUT: } { // CHECK:STDOUT: %BeingDefined.ref: type = name_ref BeingDefined, file.%BeingDefined.decl [concrete = constants.%BeingDefined.type] // CHECK:STDOUT: %T.ref: = name_ref T, [concrete = ] diff --git a/toolchain/check/testdata/interface/fail_member_lookup.carbon b/toolchain/check/testdata/interface/fail_member_lookup.carbon index 4c7d51815038..874722fc829a 100644 --- a/toolchain/check/testdata/interface/fail_member_lookup.carbon +++ b/toolchain/check/testdata/interface/fail_member_lookup.carbon @@ -66,6 +66,7 @@ fn G(U:! Different) -> U.(Interface.T); // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.776: type = pattern_type %Different.type [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.776 = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %U: %Different.type = symbolic_binding U, 0 [symbolic] // CHECK:STDOUT: %U.as_type: type = facet_access_type %U [symbolic] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] @@ -96,8 +97,8 @@ 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.776 = symbolic_binding_pattern U, 0 [concrete] -// CHECK:STDOUT: %return.patt: = return_slot_pattern , [concrete] +// CHECK:STDOUT: %U.patt.loc32_7.1: %pattern_type.776 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc32_7.2 (constants.%U.patt)] +// CHECK:STDOUT: %return.patt: = return_slot_pattern , [concrete = ] // CHECK:STDOUT: } { // CHECK:STDOUT: %U.ref: %Different.type = name_ref U, %U.loc32_7.2 [symbolic = %U.loc32_7.1 (constants.%U)] // CHECK:STDOUT: %Interface.ref: type = name_ref Interface, file.%Interface.decl [concrete = constants.%Interface.type] @@ -152,8 +153,8 @@ fn G(U:! Different) -> U.(Interface.T); // CHECK:STDOUT: %Interface.ref.loc14: type = name_ref Interface, file.%Interface.decl [concrete = constants.%Interface.type] // CHECK:STDOUT: %F.ref: %Interface.assoc_type = name_ref F, @Interface.WithSelf.%assoc0 [concrete = constants.%assoc0.baa] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt: = ref_binding_pattern v [concrete = ] +// CHECK:STDOUT: %v.var_patt: = var_pattern %v.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref = var %v.var_patt [concrete = ] // CHECK:STDOUT: assign %v.var, @@ -167,6 +168,7 @@ fn G(U:! Different) -> U.(Interface.T); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @G(%U.loc32_7.2: %Different.type) { +// CHECK:STDOUT: %U.patt.loc32_7.2: %pattern_type.776 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc32_7.2 (constants.%U.patt)] // CHECK:STDOUT: %U.loc32_7.1: %Different.type = symbolic_binding U, 0 [symbolic = %U.loc32_7.1 (constants.%U)] // CHECK:STDOUT: %U.as_type.loc32_25.1: type = facet_access_type %U.loc32_7.1 [symbolic = %U.as_type.loc32_25.1 (constants.%U.as_type)] // CHECK:STDOUT: @@ -187,6 +189,7 @@ fn G(U:! Different) -> U.(Interface.T); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%U) { +// CHECK:STDOUT: %U.patt.loc32_7.2 => constants.%U.patt // CHECK:STDOUT: %U.loc32_7.1 => constants.%U // CHECK:STDOUT: %U.as_type.loc32_25.1 => constants.%U.as_type // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/interface/fail_modifiers.carbon b/toolchain/check/testdata/interface/fail_modifiers.carbon index 1cafa2acd926..75ad846d6789 100644 --- a/toolchain/check/testdata/interface/fail_modifiers.carbon +++ b/toolchain/check/testdata/interface/fail_modifiers.carbon @@ -169,6 +169,8 @@ interface I { // CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt: %pattern_type = at_binding_pattern self, %self.param_patt [symbolic] // CHECK:STDOUT: %I.WithSelf.F.type: type = fn_type @I.WithSelf.F, @I.WithSelf(%Self) [symbolic] // CHECK:STDOUT: %I.WithSelf.F: %I.WithSelf.F.type = struct_value () [symbolic] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] @@ -188,8 +190,8 @@ interface I { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %I.WithSelf.F.decl: @I.WithSelf.%I.WithSelf.F.type (%I.WithSelf.F.type) = fn_decl @I.WithSelf.F [symbolic = @I.WithSelf.%I.WithSelf.F (constants.%I.WithSelf.F)] { -// CHECK:STDOUT: %self.param_patt: @I.WithSelf.F.%pattern_type (%pattern_type) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @I.WithSelf.F.%pattern_type (%pattern_type) = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc9_16.1: @I.WithSelf.F.%pattern_type (%pattern_type) = value_param_pattern [symbolic = %self.param_patt.loc9_16.2 (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt.loc9_16.1: @I.WithSelf.F.%pattern_type (%pattern_type) = at_binding_pattern self, %self.param_patt.loc9_16.1 [symbolic = %self.patt.loc9_16.2 (constants.%self.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @I.WithSelf.F.%Self.as_type.loc9_16.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc9_16.1: type = splice_block %.loc9_16.2 [symbolic = %Self.as_type.loc9_16.1 (constants.%Self.as_type)] { @@ -213,6 +215,8 @@ interface I { // CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc9_16.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc9_16.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc9_16.1 [symbolic = %pattern_type (constants.%pattern_type)] +// CHECK:STDOUT: %self.param_patt.loc9_16.2: @I.WithSelf.F.%pattern_type (%pattern_type) = value_param_pattern [symbolic = %self.param_patt.loc9_16.2 (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt.loc9_16.2: @I.WithSelf.F.%pattern_type (%pattern_type) = at_binding_pattern self, %self.param_patt.loc9_16.2 [symbolic = %self.patt.loc9_16.2 (constants.%self.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @I.WithSelf.F.%Self.as_type.loc9_16.1 (%Self.as_type)); // CHECK:STDOUT: } @@ -223,6 +227,8 @@ interface I { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc9_16.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type +// CHECK:STDOUT: %self.param_patt.loc9_16.2 => constants.%self.param_patt +// CHECK:STDOUT: %self.patt.loc9_16.2 => constants.%self.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_protected_member.carbon @@ -232,6 +238,8 @@ interface I { // CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt: %pattern_type = at_binding_pattern self, %self.param_patt [symbolic] // CHECK:STDOUT: %I.WithSelf.F.type: type = fn_type @I.WithSelf.F, @I.WithSelf(%Self) [symbolic] // CHECK:STDOUT: %I.WithSelf.F: %I.WithSelf.F.type = struct_value () [symbolic] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] @@ -251,8 +259,8 @@ interface I { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %I.WithSelf.F.decl: @I.WithSelf.%I.WithSelf.F.type (%I.WithSelf.F.type) = fn_decl @I.WithSelf.F [symbolic = @I.WithSelf.%I.WithSelf.F (constants.%I.WithSelf.F)] { -// CHECK:STDOUT: %self.param_patt: @I.WithSelf.F.%pattern_type (%pattern_type) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @I.WithSelf.F.%pattern_type (%pattern_type) = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc9_18.1: @I.WithSelf.F.%pattern_type (%pattern_type) = value_param_pattern [symbolic = %self.param_patt.loc9_18.2 (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt.loc9_18.1: @I.WithSelf.F.%pattern_type (%pattern_type) = at_binding_pattern self, %self.param_patt.loc9_18.1 [symbolic = %self.patt.loc9_18.2 (constants.%self.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @I.WithSelf.F.%Self.as_type.loc9_18.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc9_18.1: type = splice_block %.loc9_18.2 [symbolic = %Self.as_type.loc9_18.1 (constants.%Self.as_type)] { @@ -276,6 +284,8 @@ interface I { // CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc9_18.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc9_18.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc9_18.1 [symbolic = %pattern_type (constants.%pattern_type)] +// CHECK:STDOUT: %self.param_patt.loc9_18.2: @I.WithSelf.F.%pattern_type (%pattern_type) = value_param_pattern [symbolic = %self.param_patt.loc9_18.2 (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt.loc9_18.2: @I.WithSelf.F.%pattern_type (%pattern_type) = at_binding_pattern self, %self.param_patt.loc9_18.2 [symbolic = %self.patt.loc9_18.2 (constants.%self.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @I.WithSelf.F.%Self.as_type.loc9_18.1 (%Self.as_type)); // CHECK:STDOUT: } @@ -286,5 +296,7 @@ interface I { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc9_18.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type +// CHECK:STDOUT: %self.param_patt.loc9_18.2 => constants.%self.param_patt +// CHECK:STDOUT: %self.patt.loc9_18.2 => constants.%self.patt // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/fail_todo_define_default_fn_inline.carbon b/toolchain/check/testdata/interface/fail_todo_define_default_fn_inline.carbon index 64866db008b5..f5b443788d79 100644 --- a/toolchain/check/testdata/interface/fail_todo_define_default_fn_inline.carbon +++ b/toolchain/check/testdata/interface/fail_todo_define_default_fn_inline.carbon @@ -40,7 +40,13 @@ interface Interface { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] // CHECK:STDOUT: %Interface.WithSelf.G.type: type = fn_type @Interface.WithSelf.G, @Interface.WithSelf(%Self) [symbolic] // CHECK:STDOUT: %Interface.WithSelf.G: %Interface.WithSelf.G.type = struct_value () [symbolic] // CHECK:STDOUT: %assoc1: %Interface.assoc_type = assoc_entity element1, @Interface.WithSelf.%Interface.WithSelf.G.decl [concrete] @@ -72,12 +78,12 @@ interface Interface { // CHECK:STDOUT: %Interface.WithSelf.F.decl: @Interface.WithSelf.%Interface.WithSelf.F.type (%Interface.WithSelf.F.type) = fn_decl @Interface.WithSelf.F [symbolic = @Interface.WithSelf.%Interface.WithSelf.F (constants.%Interface.WithSelf.F)] {} {} // CHECK:STDOUT: %assoc0: %Interface.assoc_type = assoc_entity element0, %Interface.WithSelf.F.decl [concrete = constants.%assoc0] // CHECK:STDOUT: %Interface.WithSelf.G.decl: @Interface.WithSelf.%Interface.WithSelf.G.type (%Interface.WithSelf.G.type) = fn_decl @Interface.WithSelf.G [symbolic = @Interface.WithSelf.%Interface.WithSelf.G (constants.%Interface.WithSelf.G)] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc26_35 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc26_35 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc26_35: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc26: Core.Form = init_form %i32.loc26_35 [concrete = constants.%.795] diff --git a/toolchain/check/testdata/interface/fail_todo_define_default_fn_out_of_line.carbon b/toolchain/check/testdata/interface/fail_todo_define_default_fn_out_of_line.carbon index 851503e1e68f..b0d6e8a805c4 100644 --- a/toolchain/check/testdata/interface/fail_todo_define_default_fn_out_of_line.carbon +++ b/toolchain/check/testdata/interface/fail_todo_define_default_fn_out_of_line.carbon @@ -69,7 +69,13 @@ fn Interface.C.F(unused self, U:! type, u: U*) -> U* { return u; } // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] // CHECK:STDOUT: %Interface.WithSelf.G.type: type = fn_type @Interface.WithSelf.G, @Interface.WithSelf(%Self) [symbolic] // CHECK:STDOUT: %Interface.WithSelf.G: %Interface.WithSelf.G.type = struct_value () [symbolic] // CHECK:STDOUT: %assoc1: %Interface.assoc_type = assoc_entity element1, @Interface.WithSelf.%Interface.WithSelf.G.decl [concrete] @@ -93,12 +99,12 @@ fn Interface.C.F(unused self, U:! type, u: U*) -> U* { return u; } // CHECK:STDOUT: %Interface.decl: type = interface_decl @Interface [concrete = constants.%Interface.type] {} {} // CHECK:STDOUT: %Interface.WithSelf.F.decl: %Interface.WithSelf.F.type = fn_decl @Interface.WithSelf.F [symbolic = constants.%Interface.WithSelf.F] {} {} // CHECK:STDOUT: %Interface.WithSelf.G.decl: %Interface.WithSelf.G.type = fn_decl @Interface.WithSelf.G [symbolic = constants.%Interface.WithSelf.G] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc18_35 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc18_35 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc18_35: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc18: Core.Form = init_form %i32.loc18_35 [concrete = constants.%.795] @@ -121,12 +127,12 @@ fn Interface.C.F(unused self, U:! type, u: U*) -> U* { return u; } // CHECK:STDOUT: %Interface.WithSelf.F.decl: @Interface.WithSelf.%Interface.WithSelf.F.type (%Interface.WithSelf.F.type) = fn_decl @Interface.WithSelf.F [symbolic = @Interface.WithSelf.%Interface.WithSelf.F (constants.%Interface.WithSelf.F)] {} {} // CHECK:STDOUT: %assoc0: %Interface.assoc_type = assoc_entity element0, %Interface.WithSelf.F.decl [concrete = constants.%assoc0] // CHECK:STDOUT: %Interface.WithSelf.G.decl: @Interface.WithSelf.%Interface.WithSelf.G.type (%Interface.WithSelf.G.type) = fn_decl @Interface.WithSelf.G [symbolic = @Interface.WithSelf.%Interface.WithSelf.G (constants.%Interface.WithSelf.G)] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc18_35 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc18_35 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc13_35: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc13: Core.Form = init_form %i32.loc13_35 [concrete = constants.%.795] @@ -178,13 +184,20 @@ fn Interface.C.F(unused self, U:! type, u: U*) -> U* { return u; } // CHECK:STDOUT: %Self.3ce: %Interface.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %C: type = class_type @C, @C(%Self.3ce) [symbolic] // CHECK:STDOUT: %pattern_type.f25: type = pattern_type %C [symbolic] +// CHECK:STDOUT: %self.param_patt.f45: %pattern_type.f25 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.134: %pattern_type.f25 = at_binding_pattern self, %self.param_patt.f45 [symbolic] // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %U.patt.014: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %U.091: type = symbolic_binding U, 1 [symbolic] // CHECK:STDOUT: %ptr.18e: type = ptr_type %U.091 [symbolic] // CHECK:STDOUT: %pattern_type.423: type = pattern_type %ptr.18e [symbolic] +// CHECK:STDOUT: %u.param_patt: %pattern_type.423 = value_param_pattern [symbolic] +// CHECK:STDOUT: %u.patt: %pattern_type.423 = at_binding_pattern u, %u.param_patt [symbolic] // CHECK:STDOUT: %.6d8: Core.Form = init_form %ptr.18e [symbolic] +// CHECK:STDOUT: %return.param_patt.534: %pattern_type.423 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.669: %pattern_type.423 = return_slot_pattern %return.param_patt.534, %ptr.18e [symbolic] // CHECK:STDOUT: %C.F.type: type = fn_type @C.F, @C(%Self.3ce) [symbolic] // CHECK:STDOUT: %C.F: %C.F.type = struct_value () [symbolic] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] @@ -218,13 +231,13 @@ fn Interface.C.F(unused 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.param_patt: @C.F.%pattern_type.loc14_10 (%pattern_type.f25) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @C.F.%pattern_type.loc14_10 (%pattern_type.f25) = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [concrete] -// CHECK:STDOUT: %u.param_patt: @C.F.%pattern_type.loc14_27 (%pattern_type.423) = value_param_pattern [concrete] -// CHECK:STDOUT: %u.patt: @C.F.%pattern_type.loc14_27 (%pattern_type.423) = at_binding_pattern u, %u.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @C.F.%pattern_type.loc14_27 (%pattern_type.423) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @C.F.%pattern_type.loc14_27 (%pattern_type.423) = return_slot_pattern %return.param_patt, %ptr.loc20_52 [concrete] +// CHECK:STDOUT: %self.param_patt.loc20: @C.F.%pattern_type.loc14_10 (%pattern_type.f25) = value_param_pattern [symbolic = %self.param_patt.loc14 (constants.%self.param_patt.f45)] +// CHECK:STDOUT: %self.patt.loc20: @C.F.%pattern_type.loc14_10 (%pattern_type.f25) = at_binding_pattern self, %self.param_patt.loc20 [symbolic = %self.patt.loc14 (constants.%self.patt.134)] +// CHECK:STDOUT: %U.patt.loc20: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc14 (constants.%U.patt.014)] +// CHECK:STDOUT: %u.param_patt.loc20: @C.F.%pattern_type.loc14_27 (%pattern_type.423) = value_param_pattern [symbolic = %u.param_patt.loc14 (constants.%u.param_patt)] +// CHECK:STDOUT: %u.patt.loc20: @C.F.%pattern_type.loc14_27 (%pattern_type.423) = at_binding_pattern u, %u.param_patt.loc20 [symbolic = %u.patt.loc14 (constants.%u.patt)] +// CHECK:STDOUT: %return.param_patt.loc20: @C.F.%pattern_type.loc14_27 (%pattern_type.423) = out_param_pattern [symbolic = %return.param_patt.loc14 (constants.%return.param_patt.534)] +// CHECK:STDOUT: %return.patt.loc20: @C.F.%pattern_type.loc14_27 (%pattern_type.423) = return_slot_pattern %return.param_patt.loc20, %ptr.loc20_52 [symbolic = %return.patt.loc14 (constants.%return.patt.669)] // CHECK:STDOUT: } { // CHECK:STDOUT: %U.ref.loc20_51: type = name_ref U, %U.loc20 [symbolic = %U.loc14_17.1 (constants.%U.091)] // CHECK:STDOUT: %ptr.loc20_52: type = ptr_type %U.ref.loc20_51 [symbolic = %ptr.loc14_30.1 (constants.%ptr.18e)] @@ -274,13 +287,13 @@ fn Interface.C.F(unused self, U:! type, u: U*) -> U* { return u; } // 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.param_patt: @C.F.%pattern_type.loc14_10 (%pattern_type.f25) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @C.F.%pattern_type.loc14_10 (%pattern_type.f25) = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [concrete] -// CHECK:STDOUT: %u.param_patt: @C.F.%pattern_type.loc14_27 (%pattern_type.423) = value_param_pattern [concrete] -// CHECK:STDOUT: %u.patt: @C.F.%pattern_type.loc14_27 (%pattern_type.423) = at_binding_pattern u, %u.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @C.F.%pattern_type.loc14_27 (%pattern_type.423) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @C.F.%pattern_type.loc14_27 (%pattern_type.423) = return_slot_pattern %return.param_patt, %ptr.loc20_52 [concrete] +// CHECK:STDOUT: %self.param_patt.loc20: @C.F.%pattern_type.loc14_10 (%pattern_type.f25) = value_param_pattern [symbolic = %self.param_patt.loc14 (constants.%self.param_patt.f45)] +// CHECK:STDOUT: %self.patt.loc20: @C.F.%pattern_type.loc14_10 (%pattern_type.f25) = at_binding_pattern self, %self.param_patt.loc20 [symbolic = %self.patt.loc14 (constants.%self.patt.134)] +// CHECK:STDOUT: %U.patt.loc20: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc14 (constants.%U.patt.014)] +// CHECK:STDOUT: %u.param_patt.loc20: @C.F.%pattern_type.loc14_27 (%pattern_type.423) = value_param_pattern [symbolic = %u.param_patt.loc14 (constants.%u.param_patt)] +// CHECK:STDOUT: %u.patt.loc20: @C.F.%pattern_type.loc14_27 (%pattern_type.423) = at_binding_pattern u, %u.param_patt.loc20 [symbolic = %u.patt.loc14 (constants.%u.patt)] +// CHECK:STDOUT: %return.param_patt.loc20: @C.F.%pattern_type.loc14_27 (%pattern_type.423) = out_param_pattern [symbolic = %return.param_patt.loc14 (constants.%return.param_patt.534)] +// CHECK:STDOUT: %return.patt.loc20: @C.F.%pattern_type.loc14_27 (%pattern_type.423) = return_slot_pattern %return.param_patt.loc20, %ptr.loc20_52 [symbolic = %return.patt.loc14 (constants.%return.patt.669)] // CHECK:STDOUT: } { // CHECK:STDOUT: %U.ref.loc14_36: type = name_ref U, %U.loc14_17.2 [symbolic = %U.loc14_17.1 (constants.%U.091)] // CHECK:STDOUT: %ptr.loc14_37: type = ptr_type %U.ref.loc14_36 [symbolic = %ptr.loc14_30.1 (constants.%ptr.18e)] @@ -318,29 +331,38 @@ fn Interface.C.F(unused self, U:! type, u: U*) -> U* { return u; } // CHECK:STDOUT: %Self: %Interface.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.3ce)] // 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.f25)] +// CHECK:STDOUT: %self.param_patt.loc14: @C.F.%pattern_type.loc14_10 (%pattern_type.f25) = value_param_pattern [symbolic = %self.param_patt.loc14 (constants.%self.param_patt.f45)] +// CHECK:STDOUT: %self.patt.loc14: @C.F.%pattern_type.loc14_10 (%pattern_type.f25) = at_binding_pattern self, %self.param_patt.loc14 [symbolic = %self.patt.loc14 (constants.%self.patt.134)] +// CHECK:STDOUT: %U.patt.loc14: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc14 (constants.%U.patt.014)] // CHECK:STDOUT: %U.loc14_17.1: type = symbolic_binding U, 1 [symbolic = %U.loc14_17.1 (constants.%U.091)] // CHECK:STDOUT: %ptr.loc14_30.1: type = ptr_type %U.loc14_17.1 [symbolic = %ptr.loc14_30.1 (constants.%ptr.18e)] // CHECK:STDOUT: %pattern_type.loc14_27: type = pattern_type %ptr.loc14_30.1 [symbolic = %pattern_type.loc14_27 (constants.%pattern_type.423)] +// CHECK:STDOUT: %u.param_patt.loc14: @C.F.%pattern_type.loc14_27 (%pattern_type.423) = value_param_pattern [symbolic = %u.param_patt.loc14 (constants.%u.param_patt)] +// CHECK:STDOUT: %u.patt.loc14: @C.F.%pattern_type.loc14_27 (%pattern_type.423) = at_binding_pattern u, %u.param_patt.loc14 [symbolic = %u.patt.loc14 (constants.%u.patt)] // CHECK:STDOUT: %.loc14_37.1: Core.Form = init_form %ptr.loc14_30.1 [symbolic = %.loc14_37.1 (constants.%.6d8)] +// CHECK:STDOUT: %return.param_patt.loc14: @C.F.%pattern_type.loc14_27 (%pattern_type.423) = out_param_pattern [symbolic = %return.param_patt.loc14 (constants.%return.param_patt.534)] +// CHECK:STDOUT: %return.patt.loc14: @C.F.%pattern_type.loc14_27 (%pattern_type.423) = return_slot_pattern %return.param_patt.loc14, %ptr.loc14_30.1 [symbolic = %return.patt.loc14 (constants.%return.patt.669)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc20_25: = require_complete_type %C [symbolic = %require_complete.loc20_25 (constants.%require_complete.f37)] // CHECK:STDOUT: %require_complete.loc20_42: = require_complete_type %ptr.loc14_30.1 [symbolic = %require_complete.loc20_42 (constants.%require_complete.56d)] -// CHECK:STDOUT: %.loc20_63.2: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%U.loc14_17.1) [symbolic = %.loc20_63.2 (constants.%.ddf)] +// CHECK:STDOUT: %.loc20_63.3: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%U.loc14_17.1) [symbolic = %.loc20_63.3 (constants.%.ddf)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %ptr.loc14_30.1, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.088)] -// CHECK:STDOUT: %Copy.facet.loc20_63.2: %Copy.type = facet_value %ptr.loc14_30.1, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc20_63.2 (constants.%Copy.facet)] -// CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.loc20_63.2) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.da6)] -// CHECK:STDOUT: %.loc20_63.3: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %Copy.facet.loc20_63.2 [symbolic = %.loc20_63.3 (constants.%.a56)] -// CHECK:STDOUT: %impl.elem0.loc20_63.2: @C.F.%.loc20_63.3 (%.a56) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc20_63.2 (constants.%impl.elem0.fbe)] -// CHECK:STDOUT: %specific_impl_fn.loc20_63.2: = specific_impl_function %impl.elem0.loc20_63.2, @Copy.WithSelf.Op(%Copy.facet.loc20_63.2) [symbolic = %specific_impl_fn.loc20_63.2 (constants.%specific_impl_fn.16d)] +// CHECK:STDOUT: %Copy.facet.loc20_63.3: %Copy.type = facet_value %ptr.loc14_30.1, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc20_63.3 (constants.%Copy.facet)] +// CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.loc20_63.3) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.da6)] +// CHECK:STDOUT: %.loc20_63.4: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %Copy.facet.loc20_63.3 [symbolic = %.loc20_63.4 (constants.%.a56)] +// CHECK:STDOUT: %impl.elem0.loc20_63.2: @C.F.%.loc20_63.4 (%.a56) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc20_63.2 (constants.%impl.elem0.fbe)] +// CHECK:STDOUT: %specific_impl_fn.loc20_63.2: = specific_impl_function %impl.elem0.loc20_63.2, @Copy.WithSelf.Op(%Copy.facet.loc20_63.3) [symbolic = %specific_impl_fn.loc20_63.2 (constants.%specific_impl_fn.16d)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param.loc20: @C.F.%C (%C), %u.param.loc20: @C.F.%ptr.loc14_30.1 (%ptr.18e)) -> out %return.param.loc20: @C.F.%ptr.loc14_30.1 (%ptr.18e) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %u.ref: @C.F.%ptr.loc14_30.1 (%ptr.18e) = name_ref u, %u.loc20 -// CHECK:STDOUT: %impl.elem0.loc20_63.1: @C.F.%.loc20_63.3 (%.a56) = impl_witness_access constants.%Copy.lookup_impl_witness.088, element0 [symbolic = %impl.elem0.loc20_63.2 (constants.%impl.elem0.fbe)] +// CHECK:STDOUT: %impl.elem0.loc20_63.1: @C.F.%.loc20_63.4 (%.a56) = impl_witness_access constants.%Copy.lookup_impl_witness.088, element0 [symbolic = %impl.elem0.loc20_63.2 (constants.%impl.elem0.fbe)] // CHECK:STDOUT: %bound_method.loc20_63.1: = bound_method %u.ref, %impl.elem0.loc20_63.1 -// CHECK:STDOUT: %Copy.facet.loc20_63.1: %Copy.type = facet_value constants.%ptr.18e, (constants.%Copy.lookup_impl_witness.088) [symbolic = %Copy.facet.loc20_63.2 (constants.%Copy.facet)] -// CHECK:STDOUT: %.loc20_63.1: %Copy.type = converted constants.%ptr.18e, %Copy.facet.loc20_63.1 [symbolic = %Copy.facet.loc20_63.2 (constants.%Copy.facet)] +// CHECK:STDOUT: %Copy.facet.loc20_63.1: %Copy.type = facet_value constants.%ptr.18e, (constants.%Copy.lookup_impl_witness.088) [symbolic = %Copy.facet.loc20_63.3 (constants.%Copy.facet)] +// CHECK:STDOUT: %.loc20_63.1: %Copy.type = converted constants.%ptr.18e, %Copy.facet.loc20_63.1 [symbolic = %Copy.facet.loc20_63.3 (constants.%Copy.facet)] +// CHECK:STDOUT: %Copy.facet.loc20_63.2: %Copy.type = facet_value constants.%ptr.18e, (constants.%Copy.lookup_impl_witness.088) [symbolic = %Copy.facet.loc20_63.3 (constants.%Copy.facet)] +// CHECK:STDOUT: %.loc20_63.2: %Copy.type = converted constants.%ptr.18e, %Copy.facet.loc20_63.2 [symbolic = %Copy.facet.loc20_63.3 (constants.%Copy.facet)] // CHECK:STDOUT: %specific_impl_fn.loc20_63.1: = specific_impl_function %impl.elem0.loc20_63.1, @Copy.WithSelf.Op(constants.%Copy.facet) [symbolic = %specific_impl_fn.loc20_63.2 (constants.%specific_impl_fn.16d)] // CHECK:STDOUT: %bound_method.loc20_63.2: = bound_method %u.ref, %specific_impl_fn.loc20_63.1 // CHECK:STDOUT: %Copy.WithSelf.Op.call: init @C.F.%ptr.loc14_30.1 (%ptr.18e) = call %bound_method.loc20_63.2(%u.ref) @@ -361,9 +383,16 @@ fn Interface.C.F(unused self, U:! type, u: U*) -> U* { return u; } // CHECK:STDOUT: %Self => constants.%Self.3ce // CHECK:STDOUT: %C => constants.%C // CHECK:STDOUT: %pattern_type.loc14_10 => constants.%pattern_type.f25 +// CHECK:STDOUT: %self.param_patt.loc14 => constants.%self.param_patt.f45 +// CHECK:STDOUT: %self.patt.loc14 => constants.%self.patt.134 +// CHECK:STDOUT: %U.patt.loc14 => constants.%U.patt.014 // CHECK:STDOUT: %U.loc14_17.1 => constants.%U.091 // CHECK:STDOUT: %ptr.loc14_30.1 => constants.%ptr.18e // CHECK:STDOUT: %pattern_type.loc14_27 => constants.%pattern_type.423 +// CHECK:STDOUT: %u.param_patt.loc14 => constants.%u.param_patt +// CHECK:STDOUT: %u.patt.loc14 => constants.%u.patt // CHECK:STDOUT: %.loc14_37.1 => constants.%.6d8 +// CHECK:STDOUT: %return.param_patt.loc14 => constants.%return.param_patt.534 +// CHECK:STDOUT: %return.patt.loc14 => constants.%return.patt.669 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/final.carbon b/toolchain/check/testdata/interface/final.carbon index 6ad3a9cd5e9f..4edf45f87669 100644 --- a/toolchain/check/testdata/interface/final.carbon +++ b/toolchain/check/testdata/interface/final.carbon @@ -43,6 +43,7 @@ fn Use() { UseJ(C); } // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.2c5: type = pattern_type %J.type [concrete] +// CHECK:STDOUT: %T.patt.ac1: %pattern_type.2c5 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.e40: %J.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.d90: type = facet_access_type %T.e40 [symbolic] // CHECK:STDOUT: %I.impl_witness.333: = impl_witness @T.as_type.as.I.impl.%I.impl_witness_table, @T.as_type.as.I.impl(%T.e40) [symbolic] @@ -52,6 +53,7 @@ fn Use() { UseJ(C); } // CHECK:STDOUT: %I.WithSelf.F.type.12f: type = fn_type @I.WithSelf.F, @I.WithSelf(%I.facet.39f) [symbolic] // CHECK:STDOUT: %I.WithSelf.F.a78: %I.WithSelf.F.type.12f = struct_value () [symbolic] // CHECK:STDOUT: %pattern_type.6cb: type = pattern_type %I.type [concrete] +// CHECK:STDOUT: %T.patt.1df: %pattern_type.6cb = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.dda: %I.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %UseI.type: type = fn_type @UseI [concrete] // CHECK:STDOUT: %UseI: %UseI.type = struct_value () [concrete] @@ -108,7 +110,7 @@ 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.as_type.as.I.impl [concrete] { -// CHECK:STDOUT: %T.patt: %pattern_type.2c5 = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc7_21.1: %pattern_type.2c5 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_21.2 (constants.%T.patt.ac1)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: %J.type = name_ref T, %T.loc7_21.2 [symbolic = %T.loc7_21.1 (constants.%T.e40)] // CHECK:STDOUT: %T.as_type.loc7_27.2: type = facet_access_type %T.ref [symbolic = %T.as_type.loc7_27.1 (constants.%T.as_type.d90)] @@ -121,7 +123,7 @@ fn Use() { UseJ(C); } // CHECK:STDOUT: %T.loc7_21.2: %J.type = symbolic_binding T, 0 [symbolic = %T.loc7_21.1 (constants.%T.e40)] // CHECK:STDOUT: } // CHECK:STDOUT: %UseI.decl: %UseI.type = fn_decl @UseI [concrete = constants.%UseI] { -// CHECK:STDOUT: %T.patt: %pattern_type.6cb = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc11_10.1: %pattern_type.6cb = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_10.2 (constants.%T.patt.1df)] // 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] @@ -130,7 +132,7 @@ fn Use() { UseJ(C); } // CHECK:STDOUT: %T.loc11_10.2: %I.type = symbolic_binding T, 0 [symbolic = %T.loc11_10.1 (constants.%T.dda)] // CHECK:STDOUT: } // CHECK:STDOUT: %UseJ.decl: %UseJ.type = fn_decl @UseJ [concrete = constants.%UseJ] { -// CHECK:STDOUT: %T.patt: %pattern_type.2c5 = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc12_10.1: %pattern_type.2c5 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_10.2 (constants.%T.patt.ac1)] // 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] @@ -174,6 +176,7 @@ fn Use() { UseJ(C); } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @T.as_type.as.I.impl(%T.loc7_21.2: %J.type) { +// CHECK:STDOUT: %T.patt.loc7_21.2: %pattern_type.2c5 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_21.2 (constants.%T.patt.ac1)] // CHECK:STDOUT: %T.loc7_21.1: %J.type = symbolic_binding T, 0 [symbolic = %T.loc7_21.1 (constants.%T.e40)] // CHECK:STDOUT: %T.as_type.loc7_27.1: type = facet_access_type %T.loc7_21.1 [symbolic = %T.as_type.loc7_27.1 (constants.%T.as_type.d90)] // CHECK:STDOUT: %I.impl_witness.loc7_34.2: = impl_witness %I.impl_witness_table, @T.as_type.as.I.impl(%T.loc7_21.1) [symbolic = %I.impl_witness.loc7_34.2 (constants.%I.impl_witness.333)] @@ -225,6 +228,7 @@ fn Use() { UseJ(C); } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @UseI(%T.loc11_10.2: %I.type) { +// CHECK:STDOUT: %T.patt.loc11_10.2: %pattern_type.6cb = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_10.2 (constants.%T.patt.1df)] // CHECK:STDOUT: %T.loc11_10.1: %I.type = symbolic_binding T, 0 [symbolic = %T.loc11_10.1 (constants.%T.dda)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -249,6 +253,7 @@ fn Use() { UseJ(C); } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @UseJ(%T.loc12_10.2: %J.type) { +// CHECK:STDOUT: %T.patt.loc12_10.2: %pattern_type.2c5 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_10.2 (constants.%T.patt.ac1)] // CHECK:STDOUT: %T.loc12_10.1: %J.type = symbolic_binding T, 0 [symbolic = %T.loc12_10.1 (constants.%T.e40)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -296,6 +301,7 @@ fn Use() { UseJ(C); } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @T.as_type.as.I.impl(constants.%T.e40) { +// CHECK:STDOUT: %T.patt.loc7_21.2 => constants.%T.patt.ac1 // CHECK:STDOUT: %T.loc7_21.1 => constants.%T.e40 // CHECK:STDOUT: %T.as_type.loc7_27.1 => constants.%T.as_type.d90 // CHECK:STDOUT: %I.impl_witness.loc7_34.2 => constants.%I.impl_witness.333 @@ -319,6 +325,7 @@ fn Use() { UseJ(C); } // CHECK:STDOUT: specific @I.WithSelf.F(constants.%I.facet.39f) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @UseI(constants.%T.dda) { +// CHECK:STDOUT: %T.patt.loc11_10.2 => constants.%T.patt.1df // CHECK:STDOUT: %T.loc11_10.1 => constants.%T.dda // CHECK:STDOUT: } // CHECK:STDOUT: @@ -332,10 +339,12 @@ fn Use() { UseJ(C); } // CHECK:STDOUT: specific @I.WithSelf.F(constants.%T.dda) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @UseJ(constants.%T.e40) { +// CHECK:STDOUT: %T.patt.loc12_10.2 => constants.%T.patt.ac1 // CHECK:STDOUT: %T.loc12_10.1 => constants.%T.e40 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @UseI(constants.%I.facet.39f) { +// CHECK:STDOUT: %T.patt.loc11_10.2 => constants.%T.patt.1df // CHECK:STDOUT: %T.loc11_10.1 => constants.%I.facet.39f // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -352,6 +361,7 @@ fn Use() { UseJ(C); } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @UseJ(constants.%J.facet) { +// CHECK:STDOUT: %T.patt.loc12_10.2 => constants.%T.patt.ac1 // CHECK:STDOUT: %T.loc12_10.1 => constants.%J.facet // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -363,6 +373,7 @@ fn Use() { UseJ(C); } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @T.as_type.as.I.impl(constants.%J.facet) { +// CHECK:STDOUT: %T.patt.loc7_21.2 => constants.%T.patt.ac1 // CHECK:STDOUT: %T.loc7_21.1 => constants.%J.facet // CHECK:STDOUT: %T.as_type.loc7_27.1 => constants.%C // CHECK:STDOUT: %I.impl_witness.loc7_34.2 => constants.%I.impl_witness.9d5 @@ -373,6 +384,7 @@ fn Use() { UseJ(C); } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @UseI(constants.%I.facet.ed7) { +// CHECK:STDOUT: %T.patt.loc11_10.2 => constants.%T.patt.1df // CHECK:STDOUT: %T.loc11_10.1 => constants.%I.facet.ed7 // CHECK:STDOUT: // CHECK:STDOUT: !definition: diff --git a/toolchain/check/testdata/interface/generic.carbon b/toolchain/check/testdata/interface/generic.carbon index cde7128a4da1..fa3368172d8b 100644 --- a/toolchain/check/testdata/interface/generic.carbon +++ b/toolchain/check/testdata/interface/generic.carbon @@ -82,6 +82,7 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.d47: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Simple.type.887: type = generic_interface_type @Simple [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -97,6 +98,8 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: %Self.e5d: %WithAssocFn.type.ea2 = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %.325: Core.Form = init_form %X [concrete] // CHECK:STDOUT: %pattern_type.6cb: type = pattern_type %X [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6cb = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type.6cb = return_slot_pattern %return.param_patt, %X [concrete] // CHECK:STDOUT: %WithAssocFn.WithSelf.F.type.25e: type = fn_type @WithAssocFn.WithSelf.F, @WithAssocFn.WithSelf(%T.67d, %Self.e5d) [symbolic] // CHECK:STDOUT: %WithAssocFn.WithSelf.F.b21: %WithAssocFn.WithSelf.F.type.25e = struct_value () [symbolic] // CHECK:STDOUT: %WithAssocFn.assoc_type.b11: type = assoc_entity_type @WithAssocFn, @WithAssocFn(%T.67d) [symbolic] @@ -121,10 +124,12 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %X.val: %X = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T.67d [symbolic] +// CHECK:STDOUT: %N.patt: %pattern_type.51d = symbolic_binding_pattern N, 1 [symbolic] // CHECK:STDOUT: %N: %T.67d = symbolic_binding N, 1 [symbolic] // CHECK:STDOUT: %WithImplicitArgs.type: type = generic_interface_type @WithImplicitArgs [concrete] // CHECK:STDOUT: %WithImplicitArgs.generic: %WithImplicitArgs.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.472: type = pattern_type %Simple.type.d50 [concrete] +// CHECK:STDOUT: %T.patt.407: %pattern_type.472 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.16788c.1: %Simple.type.d50 = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.16788c.2: %Simple.type.d50 = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Receive.type: type = fn_type @Receive [concrete] @@ -145,7 +150,7 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: .Pass = %Pass.decl // CHECK:STDOUT: } // CHECK:STDOUT: %Simple.decl: %Simple.type.887 = interface_decl @Simple [concrete = constants.%Simple.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc4_19.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_19.2 (constants.%T.patt.d47)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_22.1: type = splice_block %.loc4_22.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -155,7 +160,7 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: } // CHECK:STDOUT: %X.decl: type = class_decl @X [concrete = constants.%X] {} {} // CHECK:STDOUT: %WithAssocFn.decl: %WithAssocFn.type.0a6 = interface_decl @WithAssocFn [concrete = constants.%WithAssocFn.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc8_24.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_24.2 (constants.%T.patt.d47)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8_27.1: type = splice_block %.loc8_27.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -165,8 +170,8 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %WithImplicitArgs.decl: %WithImplicitArgs.type = interface_decl @WithImplicitArgs [concrete = constants.%WithImplicitArgs.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %N.patt: @WithImplicitArgs.%pattern_type (%pattern_type.51d) = symbolic_binding_pattern N, 1 [concrete] +// CHECK:STDOUT: %T.patt.loc22_29.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc22_29.2 (constants.%T.patt.d47)] +// CHECK:STDOUT: %N.patt.loc22_39.1: @WithImplicitArgs.%pattern_type (%pattern_type.51d) = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc22_39.2 (constants.%N.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc22_32.1: type = splice_block %.loc22_32.2 [concrete = type] { // CHECK:STDOUT: %.Self.loc22_29: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -180,7 +185,7 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: %N.loc22_39.2: @WithImplicitArgs.%T.loc22_29.1 (%T.67d) = symbolic_binding N, 1 [symbolic = %N.loc22_39.1 (constants.%N)] // CHECK:STDOUT: } // CHECK:STDOUT: %Receive.decl: %Receive.type = fn_decl @Receive [concrete = constants.%Receive] { -// CHECK:STDOUT: %T.patt: %pattern_type.472 = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc24_20.1: %pattern_type.472 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc24_20.2 (constants.%T.patt.407)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc24: type = splice_block %Simple.type [concrete = constants.%Simple.type.d50] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -191,7 +196,7 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: %T.loc24_20.3: %Simple.type.d50 = symbolic_binding T, 0 [symbolic = %T.loc24_20.2 (constants.%T.16788c.2)] // CHECK:STDOUT: } // CHECK:STDOUT: %Pass.decl: %Pass.type = fn_decl @Pass [concrete = constants.%Pass] { -// CHECK:STDOUT: %T.patt: %pattern_type.472 = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc25_10.1: %pattern_type.472 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc25_10.2 (constants.%T.patt.407)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc25: type = splice_block %Simple.type [concrete = constants.%Simple.type.d50] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -204,6 +209,7 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Simple(%T.loc4_19.2: type) { +// CHECK:STDOUT: %T.patt.loc4_19.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_19.2 (constants.%T.patt.d47)] // CHECK:STDOUT: %T.loc4_19.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_19.1 (constants.%T.67d)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -223,6 +229,7 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @WithAssocFn(%T.loc8_24.2: type) { +// CHECK:STDOUT: %T.patt.loc8_24.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_24.2 (constants.%T.patt.d47)] // CHECK:STDOUT: %T.loc8_24.1: type = symbolic_binding T, 0 [symbolic = %T.loc8_24.1 (constants.%T.67d)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -235,8 +242,8 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %WithAssocFn.WithSelf.F.decl: @WithAssocFn.WithSelf.%WithAssocFn.WithSelf.F.type (%WithAssocFn.WithSelf.F.type.25e) = fn_decl @WithAssocFn.WithSelf.F [symbolic = @WithAssocFn.WithSelf.%WithAssocFn.WithSelf.F (constants.%WithAssocFn.WithSelf.F.b21)] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6cb = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6cb = return_slot_pattern %return.param_patt, %X.ref [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6cb = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.6cb = return_slot_pattern %return.param_patt, %X.ref [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %X.ref: type = name_ref X, file.%X.decl [concrete = constants.%X] // CHECK:STDOUT: %.loc10: Core.Form = init_form %X.ref [concrete = constants.%.325] @@ -257,9 +264,11 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @WithImplicitArgs(%T.loc22_29.2: type, %N.loc22_39.2: @WithImplicitArgs.%T.loc22_29.1 (%T.67d)) { +// CHECK:STDOUT: %T.patt.loc22_29.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc22_29.2 (constants.%T.patt.d47)] // CHECK:STDOUT: %T.loc22_29.1: type = symbolic_binding T, 0 [symbolic = %T.loc22_29.1 (constants.%T.67d)] -// CHECK:STDOUT: %N.loc22_39.1: @WithImplicitArgs.%T.loc22_29.1 (%T.67d) = symbolic_binding N, 1 [symbolic = %N.loc22_39.1 (constants.%N)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc22_29.1 [symbolic = %pattern_type (constants.%pattern_type.51d)] +// CHECK:STDOUT: %N.patt.loc22_39.2: @WithImplicitArgs.%pattern_type (%pattern_type.51d) = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc22_39.2 (constants.%N.patt)] +// CHECK:STDOUT: %N.loc22_39.1: @WithImplicitArgs.%T.loc22_29.1 (%T.67d) = symbolic_binding N, 1 [symbolic = %N.loc22_39.1 (constants.%N)] // CHECK:STDOUT: // CHECK:STDOUT: interface; // CHECK:STDOUT: } @@ -275,8 +284,8 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.WithAssocFn.impl: %Self.ref as %WithAssocFn.type { // CHECK:STDOUT: %C.as.WithAssocFn.impl.F.decl: %C.as.WithAssocFn.impl.F.type = fn_decl @C.as.WithAssocFn.impl.F [concrete = constants.%C.as.WithAssocFn.impl.F] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6cb = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6cb = return_slot_pattern %return.param_patt, %X.ref [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6cb = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.6cb = return_slot_pattern %return.param_patt, %X.ref [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %X.ref: type = name_ref X, file.%X.decl [concrete = constants.%X] // CHECK:STDOUT: %.loc16: Core.Form = init_form %X.ref [concrete = constants.%.325] @@ -338,6 +347,7 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Receive(%T.loc24_20.3: %Simple.type.d50) { +// CHECK:STDOUT: %T.patt.loc24_20.2: %pattern_type.472 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc24_20.2 (constants.%T.patt.407)] // CHECK:STDOUT: %T.loc24_20.1: %Simple.type.d50 = symbolic_binding T, 0 [symbolic = %T.loc24_20.1 (constants.%T.16788c.1)] // CHECK:STDOUT: %T.loc24_20.2: %Simple.type.d50 = symbolic_binding T, 0 [symbolic = %T.loc24_20.2 (constants.%T.16788c.2)] // CHECK:STDOUT: @@ -350,6 +360,7 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Pass(%T.loc25_10.2: %Simple.type.d50) { +// CHECK:STDOUT: %T.patt.loc25_10.2: %pattern_type.472 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc25_10.2 (constants.%T.patt.407)] // CHECK:STDOUT: %T.loc25_10.1: %Simple.type.d50 = symbolic_binding T, 0 [symbolic = %T.loc25_10.1 (constants.%T.16788c.1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -366,12 +377,14 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Simple(constants.%T.67d) { +// CHECK:STDOUT: %T.patt.loc4_19.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc4_19.1 => constants.%T.67d // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Simple.WithSelf(constants.%T.67d, constants.%Self.55b) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @WithAssocFn(constants.%T.67d) { +// CHECK:STDOUT: %T.patt.loc8_24.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc8_24.1 => constants.%T.67d // CHECK:STDOUT: } // CHECK:STDOUT: @@ -380,6 +393,7 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: specific @WithAssocFn.WithSelf.F(constants.%T.67d, constants.%Self.e5d) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @Simple(constants.%C) { +// CHECK:STDOUT: %T.patt.loc4_19.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc4_19.1 => constants.%C // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -396,6 +410,7 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @WithAssocFn(constants.%C) { +// CHECK:STDOUT: %T.patt.loc8_24.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc8_24.1 => constants.%C // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -428,21 +443,26 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: specific @WithAssocFn.WithSelf.F(constants.%C, constants.%WithAssocFn.facet) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @WithImplicitArgs(constants.%T.67d, constants.%N) { +// CHECK:STDOUT: %T.patt.loc22_29.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc22_29.1 => constants.%T.67d -// CHECK:STDOUT: %N.loc22_39.1 => constants.%N // CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d +// CHECK:STDOUT: %N.patt.loc22_39.2 => constants.%N.patt +// CHECK:STDOUT: %N.loc22_39.1 => constants.%N // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Receive(constants.%T.16788c.2) { +// CHECK:STDOUT: %T.patt.loc24_20.2 => constants.%T.patt.407 // CHECK:STDOUT: %T.loc24_20.1 => constants.%T.16788c.2 // CHECK:STDOUT: %T.loc24_20.2 => constants.%T.16788c.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Pass(constants.%T.16788c.1) { +// CHECK:STDOUT: %T.patt.loc25_10.2 => constants.%T.patt.407 // CHECK:STDOUT: %T.loc25_10.1 => constants.%T.16788c.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Receive(constants.%T.16788c.1) { +// CHECK:STDOUT: %T.patt.loc24_20.2 => constants.%T.patt.407 // CHECK:STDOUT: %T.loc24_20.1 => constants.%T.16788c.1 // CHECK:STDOUT: %T.loc24_20.2 => constants.%T.16788c.1 // CHECK:STDOUT: @@ -455,6 +475,7 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.d47: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Generic.type.30d: type = generic_interface_type @Generic [concrete] // CHECK:STDOUT: %Generic.generic: %Generic.type.30d = struct_value () [concrete] @@ -466,11 +487,13 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: %B: type = class_type @B [concrete] // CHECK:STDOUT: %Generic.type.c3a: type = facet_type <@Generic, @Generic(%A)> [concrete] // CHECK:STDOUT: %pattern_type.338: type = pattern_type %Generic.type.c3a [concrete] +// CHECK:STDOUT: %T.patt.49c: %pattern_type.338 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.ca1: %Generic.type.c3a = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %Generic.type.57d: type = facet_type <@Generic, @Generic(%B)> [concrete] // CHECK:STDOUT: %pattern_type.dae: type = pattern_type %Generic.type.57d [concrete] +// CHECK:STDOUT: %T.patt.b1f: %pattern_type.dae = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.f18: %Generic.type.57d = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] @@ -487,7 +510,7 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: .G = %G.decl // CHECK:STDOUT: } // CHECK:STDOUT: %Generic.decl: %Generic.type.30d = interface_decl @Generic [concrete = constants.%Generic.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc4_20.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_20.2 (constants.%T.patt.d47)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_23.1: type = splice_block %.loc4_23.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -498,7 +521,7 @@ fn F(unused 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.338 = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc9_7.1: %pattern_type.338 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_7.2 (constants.%T.patt.49c)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc9: type = splice_block %Generic.type [concrete = constants.%Generic.type.c3a] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -509,7 +532,7 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: %T.loc9_7.2: %Generic.type.c3a = symbolic_binding T, 0 [symbolic = %T.loc9_7.1 (constants.%T.ca1)] // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %T.patt: %pattern_type.dae = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc10_7.1: %pattern_type.dae = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc10_7.2 (constants.%T.patt.b1f)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc10: type = splice_block %Generic.type [concrete = constants.%Generic.type.57d] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -522,6 +545,7 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Generic(%T.loc4_20.2: type) { +// CHECK:STDOUT: %T.patt.loc4_20.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_20.2 (constants.%T.patt.d47)] // CHECK:STDOUT: %T.loc4_20.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_20.1 (constants.%T.67d)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -557,12 +581,14 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc9_7.2: %Generic.type.c3a) { +// CHECK:STDOUT: %T.patt.loc9_7.2: %pattern_type.338 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_7.2 (constants.%T.patt.49c)] // CHECK:STDOUT: %T.loc9_7.1: %Generic.type.c3a = symbolic_binding T, 0 [symbolic = %T.loc9_7.1 (constants.%T.ca1)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @G(%T.loc10_7.2: %Generic.type.57d) { +// CHECK:STDOUT: %T.patt.loc10_7.2: %pattern_type.dae = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc10_7.2 (constants.%T.patt.b1f)] // CHECK:STDOUT: %T.loc10_7.1: %Generic.type.57d = symbolic_binding T, 0 [symbolic = %T.loc10_7.1 (constants.%T.f18)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -578,20 +604,24 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Generic(constants.%T.67d) { +// CHECK:STDOUT: %T.patt.loc4_20.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc4_20.1 => constants.%T.67d // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Generic.WithSelf(constants.%T.67d, constants.%Self.8ea) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @Generic(constants.%A) { +// CHECK:STDOUT: %T.patt.loc4_20.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc4_20.1 => constants.%A // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T.ca1) { +// CHECK:STDOUT: %T.patt.loc9_7.2 => constants.%T.patt.49c // CHECK:STDOUT: %T.loc9_7.1 => constants.%T.ca1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Generic(constants.%B) { +// CHECK:STDOUT: %T.patt.loc4_20.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc4_20.1 => constants.%B // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -600,6 +630,7 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%T.f18) { +// CHECK:STDOUT: %T.patt.loc10_7.2 => constants.%T.patt.b1f // CHECK:STDOUT: %T.loc10_7.1 => constants.%T.f18 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -613,6 +644,7 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Generic.type.30d: type = generic_interface_type @Generic [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -630,7 +662,7 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: .F = %F.decl // CHECK:STDOUT: } // CHECK:STDOUT: %Generic.decl: %Generic.type.30d = interface_decl @Generic [concrete = constants.%Generic.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc3_20.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_20.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc3_23.1: type = splice_block %.loc3_23.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -639,7 +671,7 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: %T.loc3_20.2: type = symbolic_binding T, 0 [symbolic = %T.loc3_20.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt: = symbolic_binding_pattern T, 0 [concrete = ] // CHECK:STDOUT: } { // CHECK:STDOUT: %.1: = splice_block [concrete = ] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -652,6 +684,7 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Generic(%T.loc3_20.2: type) { +// CHECK:STDOUT: %T.patt.loc3_20.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_20.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc3_20.1: type = symbolic_binding T, 0 [symbolic = %T.loc3_20.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -680,6 +713,7 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Generic(constants.%T) { +// CHECK:STDOUT: %T.patt.loc3_20.2 => constants.%T.patt // CHECK:STDOUT: %T.loc3_20.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/generic_binding_after_assoc_const.carbon b/toolchain/check/testdata/interface/generic_binding_after_assoc_const.carbon index 0d9797d38c07..abb67f79655c 100644 --- a/toolchain/check/testdata/interface/generic_binding_after_assoc_const.carbon +++ b/toolchain/check/testdata/interface/generic_binding_after_assoc_const.carbon @@ -28,6 +28,7 @@ interface I { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 1 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 1 [symbolic] // CHECK:STDOUT: %I.WithSelf.F.type: type = fn_type @I.WithSelf.F, @I.WithSelf(%Self) [symbolic] // CHECK:STDOUT: %I.WithSelf.F: %I.WithSelf.F.type = struct_value () [symbolic] @@ -52,7 +53,7 @@ interface I { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %I.WithSelf.F.decl: @I.WithSelf.%I.WithSelf.F.type (%I.WithSelf.F.type) = fn_decl @I.WithSelf.F [symbolic = @I.WithSelf.%I.WithSelf.F (constants.%I.WithSelf.F)] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 1 [concrete] +// CHECK:STDOUT: %T.patt.loc16_9.1: %pattern_type = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc16_9.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc16_12.1: type = splice_block %.loc16_12.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -65,7 +66,7 @@ interface I { // CHECK:STDOUT: %assoc1: %I.assoc_type = assoc_entity element1, @I.WithSelf.%U [concrete = constants.%assoc1] // CHECK:STDOUT: } // CHECK:STDOUT: %I.WithSelf.G.decl: @I.WithSelf.%I.WithSelf.G.type (%I.WithSelf.G.type) = fn_decl @I.WithSelf.G [symbolic = @I.WithSelf.%I.WithSelf.G (constants.%I.WithSelf.G)] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 1 [concrete] +// CHECK:STDOUT: %T.patt.loc20_9.1: %pattern_type = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc20_9.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc20_12.1: type = splice_block %.loc20_12.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -86,12 +87,14 @@ interface I { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @I.WithSelf.F(@I.%Self: %I.type, %T.loc16_9.2: type) { +// CHECK:STDOUT: %T.patt.loc16_9.2: %pattern_type = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc16_9.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc16_9.1: type = symbolic_binding T, 1 [symbolic = %T.loc16_9.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @I.WithSelf.G(@I.%Self: %I.type, %T.loc20_9.2: type) { +// CHECK:STDOUT: %T.patt.loc20_9.2: %pattern_type = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc20_9.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc20_9.1: type = symbolic_binding T, 1 [symbolic = %T.loc20_9.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); @@ -100,10 +103,12 @@ interface I { // CHECK:STDOUT: specific @I.WithSelf(constants.%Self) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @I.WithSelf.F(constants.%Self, constants.%T) { +// CHECK:STDOUT: %T.patt.loc16_9.2 => constants.%T.patt // CHECK:STDOUT: %T.loc16_9.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I.WithSelf.G(constants.%Self, constants.%T) { +// CHECK:STDOUT: %T.patt.loc20_9.2 => constants.%T.patt // CHECK:STDOUT: %T.loc20_9.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/generic_import.carbon b/toolchain/check/testdata/interface/generic_import.carbon index 65f59cdc2d2f..1e6216aeec53 100644 --- a/toolchain/check/testdata/interface/generic_import.carbon +++ b/toolchain/check/testdata/interface/generic_import.carbon @@ -37,6 +37,7 @@ impl C as AddWith(C) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %AddWith.type.097: type = generic_interface_type @AddWith [concrete] // CHECK:STDOUT: %AddWith.generic: %AddWith.type.097 = struct_value () [concrete] @@ -53,7 +54,7 @@ impl C as AddWith(C) { // CHECK:STDOUT: .AddWith = %AddWith.decl // CHECK:STDOUT: } // CHECK:STDOUT: %AddWith.decl: %AddWith.type.097 = interface_decl @AddWith [concrete = constants.%AddWith.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc4_20.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_20.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_23.1: type = splice_block %.loc4_23.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -64,6 +65,7 @@ impl C as AddWith(C) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @AddWith(%T.loc4_20.2: type) { +// CHECK:STDOUT: %T.patt.loc4_20.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_20.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_20.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_20.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -92,6 +94,7 @@ impl C as AddWith(C) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @AddWith(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_20.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_20.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -109,6 +112,8 @@ impl C as AddWith(C) { // CHECK:STDOUT: %AddWith.generic: %AddWith.type.097 = struct_value () [concrete] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %AddWith.type.e7b: type = facet_type <@AddWith, @AddWith(%T)> [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Self.403: %AddWith.type.e7b = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %AddWith.WithSelf.F.type.ada: type = fn_type @AddWith.WithSelf.F, @AddWith.WithSelf(%T, %Self.403) [symbolic] // CHECK:STDOUT: %AddWith.WithSelf.F.2ed: %AddWith.WithSelf.F.type.ada = struct_value () [symbolic] @@ -153,6 +158,7 @@ impl C as AddWith(C) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @AddWith(imports.%Main.import_ref.b3bc94.3: type) [from "a.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -198,6 +204,7 @@ impl C as AddWith(C) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @AddWith(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -206,6 +213,7 @@ impl C as AddWith(C) { // CHECK:STDOUT: specific @AddWith.WithSelf.F(constants.%T, constants.%Self.403) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @AddWith(constants.%C) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%C // CHECK:STDOUT: // CHECK:STDOUT: !definition: diff --git a/toolchain/check/testdata/interface/generic_method.carbon b/toolchain/check/testdata/interface/generic_method.carbon index 50f7a4fc9f09..d9c308d612b2 100644 --- a/toolchain/check/testdata/interface/generic_method.carbon +++ b/toolchain/check/testdata/interface/generic_method.carbon @@ -90,21 +90,27 @@ fn CallIndirect() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.d47: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %A.type.55a: type = generic_interface_type @A [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %A.generic: %A.type.55a = struct_value () [concrete] // CHECK:STDOUT: %A.type.acd: type = facet_type <@A, @A(%T.67d)> [symbolic] // CHECK:STDOUT: %Self.49a: %A.type.acd = symbolic_binding Self, 1 [symbolic] +// CHECK:STDOUT: %U.patt.b22: %pattern_type.98f = symbolic_binding_pattern U, 2 [symbolic] // CHECK:STDOUT: %U.4e7: type = symbolic_binding U, 2 [symbolic] // CHECK:STDOUT: %ptr.8f6: type = ptr_type %U.4e7 [symbolic] // CHECK:STDOUT: %pattern_type.986: type = pattern_type %ptr.8f6 [symbolic] +// CHECK:STDOUT: %u.param_patt.a01: %pattern_type.986 = value_param_pattern [symbolic] +// CHECK:STDOUT: %u.patt.c78: %pattern_type.986 = at_binding_pattern u, %u.param_patt.a01 [symbolic] // CHECK:STDOUT: %tuple.type.76f: type = tuple_type (type, %A.type.acd, type) [symbolic] // CHECK:STDOUT: %tuple.0f4: %tuple.type.76f = tuple_value (%T.67d, %Self.49a, %ptr.8f6) [symbolic] // CHECK:STDOUT: %Self.as_type.763: type = facet_access_type %Self.49a [symbolic] // CHECK:STDOUT: %tuple.type.640: type = tuple_type (%T.67d, %Self.as_type.763, %ptr.8f6) [symbolic] // CHECK:STDOUT: %.f0d: Core.Form = init_form %tuple.type.640 [symbolic] // CHECK:STDOUT: %pattern_type.0d7: type = pattern_type %tuple.type.640 [symbolic] +// CHECK:STDOUT: %return.param_patt.9d3: %pattern_type.0d7 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.8aa: %pattern_type.0d7 = return_slot_pattern %return.param_patt.9d3, %tuple.type.640 [symbolic] // CHECK:STDOUT: %A.WithSelf.F.type.08d: type = fn_type @A.WithSelf.F, @A.WithSelf(%T.67d, %Self.49a) [symbolic] // CHECK:STDOUT: %A.WithSelf.F.3fa: %A.WithSelf.F.type.08d = struct_value () [symbolic] // CHECK:STDOUT: %A.assoc_type.447: type = assoc_entity_type @A, @A(%T.67d) [symbolic] @@ -121,14 +127,19 @@ fn CallIndirect() { // CHECK:STDOUT: %A.WithSelf.F.1e2: %A.WithSelf.F.type.ad4 = struct_value () [symbolic] // CHECK:STDOUT: %A.assoc_type.a54: type = assoc_entity_type @A, @A(%X) [concrete] // CHECK:STDOUT: %assoc0.987: %A.assoc_type.a54 = assoc_entity element0, @A.WithSelf.%A.WithSelf.F.decl [concrete] +// CHECK:STDOUT: %U.patt.d47: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %U.67d: type = symbolic_binding U, 0 [symbolic] // CHECK:STDOUT: %ptr.e8f8f9.1: type = ptr_type %U.67d [symbolic] // CHECK:STDOUT: %pattern_type.4f4b84.1: type = pattern_type %ptr.e8f8f9.1 [symbolic] +// CHECK:STDOUT: %u.param_patt.58b: %pattern_type.4f4b84.1 = value_param_pattern [symbolic] +// CHECK:STDOUT: %u.patt.542: %pattern_type.4f4b84.1 = at_binding_pattern u, %u.param_patt.58b [symbolic] // CHECK:STDOUT: %tuple.type.ff9: type = tuple_type (type, type, type) [concrete] // CHECK:STDOUT: %tuple.f57: %tuple.type.ff9 = tuple_value (%X, %Y, %ptr.e8f8f9.1) [symbolic] // CHECK:STDOUT: %tuple.type.316: type = tuple_type (%X, %Y, %ptr.e8f8f9.1) [symbolic] // CHECK:STDOUT: %.3c1: Core.Form = init_form %tuple.type.316 [symbolic] // CHECK:STDOUT: %pattern_type.178: type = pattern_type %tuple.type.316 [symbolic] +// CHECK:STDOUT: %return.param_patt.b96: %pattern_type.178 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.f2f: %pattern_type.178 = return_slot_pattern %return.param_patt.b96, %tuple.type.316 [symbolic] // CHECK:STDOUT: %Y.as.A.impl.F.type: type = fn_type @Y.as.A.impl.F [concrete] // CHECK:STDOUT: %Y.as.A.impl.F: %Y.as.A.impl.F.type = struct_value () [concrete] // CHECK:STDOUT: %A.facet.c65: %A.type.df0 = facet_value %Y, (%A.impl_witness) [concrete] @@ -155,6 +166,8 @@ fn CallIndirect() { // CHECK:STDOUT: %Call.type: type = fn_type @Call [concrete] // CHECK:STDOUT: %Call: %Call.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.34e: type = pattern_type %Z [concrete] +// CHECK:STDOUT: %u.patt.352: %pattern_type.34e = ref_binding_pattern u [concrete] +// CHECK:STDOUT: %u.var_patt: %pattern_type.34e = var_pattern %u.patt.352 [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.150: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.53a: %T.as.DefaultOrUnformed.impl.Op.type.150 = struct_value () [symbolic] @@ -166,10 +179,14 @@ fn CallIndirect() { // CHECK:STDOUT: %.7d5: type = fn_type_with_self_type %A.WithSelf.F.type.22c, %A.facet.c65 [concrete] // CHECK:STDOUT: %ptr.415: type = ptr_type %Z [concrete] // CHECK:STDOUT: %pattern_type.b4b: type = pattern_type %ptr.415 [concrete] +// CHECK:STDOUT: %u.param_patt.5c1: %pattern_type.b4b = value_param_pattern [concrete] +// CHECK:STDOUT: %u.patt.5b6: %pattern_type.b4b = at_binding_pattern u, %u.param_patt.5c1 [concrete] // CHECK:STDOUT: %tuple.8e4: %tuple.type.ff9 = tuple_value (%X, %Y, %ptr.415) [concrete] // CHECK:STDOUT: %tuple.type.2cd: type = tuple_type (%X, %Y, %ptr.415) [concrete] // CHECK:STDOUT: %.5bc: Core.Form = init_form %tuple.type.2cd [concrete] // CHECK:STDOUT: %pattern_type.b33: type = pattern_type %tuple.type.2cd [concrete] +// CHECK:STDOUT: %return.param_patt.75d: %pattern_type.b33 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.8bb: %pattern_type.b33 = return_slot_pattern %return.param_patt.75d, %tuple.type.2cd [concrete] // CHECK:STDOUT: %Y.as.A.impl.F.specific_fn: = specific_function %Y.as.A.impl.F, @Y.as.A.impl.F(%Z) [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.3: type = fn_type @Destroy.Op.loc23_22.3 [concrete] @@ -195,6 +212,7 @@ fn CallIndirect() { // CHECK:STDOUT: %type.as.BitAndWith.impl.Op.bound: = bound_method %A.type.df0, %type.as.BitAndWith.impl.Op [concrete] // CHECK:STDOUT: %facet_type: type = facet_type <@A, @A(%X) & @Destroy> [concrete] // CHECK:STDOUT: %pattern_type.871: type = pattern_type %facet_type [concrete] +// CHECK:STDOUT: %T.patt.c17: %pattern_type.871 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.5b7: %facet_type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %CallGeneric.type: type = fn_type @CallGeneric [concrete] // CHECK:STDOUT: %CallGeneric: %CallGeneric.type = struct_value () [concrete] @@ -211,6 +229,8 @@ fn CallIndirect() { // CHECK:STDOUT: %tuple.type.c2a: type = tuple_type (%X, %T.as_type.0af, %ptr.415) [symbolic] // CHECK:STDOUT: %.546: Core.Form = init_form %tuple.type.c2a [symbolic] // CHECK:STDOUT: %pattern_type.0e9: type = pattern_type %tuple.type.c2a [symbolic] +// CHECK:STDOUT: %return.param_patt.579: %pattern_type.0e9 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.62e: %pattern_type.0e9 = return_slot_pattern %return.param_patt.579, %tuple.type.c2a [symbolic] // CHECK:STDOUT: %specific_impl_fn.74d: = specific_impl_function %impl.elem0.1a3, @A.WithSelf.F(%X, %A.facet.318, %Z) [symbolic] // CHECK:STDOUT: %require_complete.d14: = require_complete_type %tuple.type.c2a [symbolic] // CHECK:STDOUT: %Destroy.lookup_impl_witness.a02: = lookup_impl_witness %tuple.type.c2a, @Destroy [symbolic] @@ -271,7 +291,7 @@ fn CallIndirect() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl: %A.type.55a = interface_decl @A [concrete = constants.%A.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc5_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_14.2 (constants.%T.patt.d47)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc5_17.1: type = splice_block %.loc5_17.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -290,7 +310,7 @@ fn CallIndirect() { // CHECK:STDOUT: } // CHECK:STDOUT: %Call.decl: %Call.type = fn_decl @Call [concrete = constants.%Call] {} {} // CHECK:STDOUT: %CallGeneric.decl: %CallGeneric.type = fn_decl @CallGeneric [concrete = constants.%CallGeneric] { -// CHECK:STDOUT: %T.patt: %pattern_type.871 = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc26_17.1: %pattern_type.871 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc26_17.2 (constants.%T.patt.c17)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc26_25.1: type = splice_block %.loc26_25.3 [concrete = constants.%facet_type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -311,6 +331,7 @@ fn CallIndirect() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @A(%T.loc5_14.2: type) { +// CHECK:STDOUT: %T.patt.loc5_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_14.2 (constants.%T.patt.d47)] // CHECK:STDOUT: %T.loc5_14.1: type = symbolic_binding T, 0 [symbolic = %T.loc5_14.1 (constants.%T.67d)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -323,11 +344,11 @@ fn CallIndirect() { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %A.WithSelf.F.decl: @A.WithSelf.%A.WithSelf.F.type (%A.WithSelf.F.type.08d) = fn_decl @A.WithSelf.F [symbolic = @A.WithSelf.%A.WithSelf.F (constants.%A.WithSelf.F.3fa)] { -// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 2 [concrete] -// CHECK:STDOUT: %u.param_patt: @A.WithSelf.F.%pattern_type.loc6_19 (%pattern_type.986) = value_param_pattern [concrete] -// CHECK:STDOUT: %u.patt: @A.WithSelf.F.%pattern_type.loc6_19 (%pattern_type.986) = at_binding_pattern u, %u.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @A.WithSelf.F.%pattern_type.loc6_40 (%pattern_type.0d7) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @A.WithSelf.F.%pattern_type.loc6_40 (%pattern_type.0d7) = return_slot_pattern %return.param_patt, %.loc6_40.4 [concrete] +// CHECK:STDOUT: %U.patt.loc6_9.1: %pattern_type.98f = symbolic_binding_pattern U, 2 [symbolic = %U.patt.loc6_9.2 (constants.%U.patt.b22)] +// CHECK:STDOUT: %u.param_patt.loc6_19.1: @A.WithSelf.F.%pattern_type.loc6_19 (%pattern_type.986) = value_param_pattern [symbolic = %u.param_patt.loc6_19.2 (constants.%u.param_patt.a01)] +// CHECK:STDOUT: %u.patt.loc6_19.1: @A.WithSelf.F.%pattern_type.loc6_19 (%pattern_type.986) = at_binding_pattern u, %u.param_patt.loc6_19.1 [symbolic = %u.patt.loc6_19.2 (constants.%u.patt.c78)] +// CHECK:STDOUT: %return.param_patt.loc6_40.1: @A.WithSelf.F.%pattern_type.loc6_40 (%pattern_type.0d7) = out_param_pattern [symbolic = %return.param_patt.loc6_40.2 (constants.%return.param_patt.9d3)] +// CHECK:STDOUT: %return.patt.loc6_25.1: @A.WithSelf.F.%pattern_type.loc6_40 (%pattern_type.0d7) = return_slot_pattern %return.param_patt.loc6_40.1, %.loc6_40.4 [symbolic = %return.patt.loc6_25.2 (constants.%return.patt.8aa)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, @A.%T.loc5_14.2 [symbolic = %T (constants.%T.67d)] // CHECK:STDOUT: %.loc6_32: @A.WithSelf.F.%A.type (%A.type.acd) = specific_constant @A.%Self.loc5_23.1, @A(constants.%T.67d) [symbolic = %Self (constants.%Self.49a)] @@ -370,11 +391,11 @@ fn CallIndirect() { // CHECK:STDOUT: // CHECK:STDOUT: impl @Y.as.A.impl: %Y.ref as %A.type { // CHECK:STDOUT: %Y.as.A.impl.F.decl: %Y.as.A.impl.F.type = fn_decl @Y.as.A.impl.F [concrete = constants.%Y.as.A.impl.F] { -// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [concrete] -// CHECK:STDOUT: %u.param_patt: @Y.as.A.impl.F.%pattern_type.loc16_19 (%pattern_type.4f4b84.1) = value_param_pattern [concrete] -// CHECK:STDOUT: %u.patt: @Y.as.A.impl.F.%pattern_type.loc16_19 (%pattern_type.4f4b84.1) = at_binding_pattern u, %u.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @Y.as.A.impl.F.%pattern_type.loc16_37 (%pattern_type.178) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @Y.as.A.impl.F.%pattern_type.loc16_37 (%pattern_type.178) = return_slot_pattern %return.param_patt, %.loc16_37.3 [concrete] +// CHECK:STDOUT: %U.patt.loc16_9.1: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc16_9.2 (constants.%U.patt.d47)] +// CHECK:STDOUT: %u.param_patt.loc16_19.1: @Y.as.A.impl.F.%pattern_type.loc16_19 (%pattern_type.4f4b84.1) = value_param_pattern [symbolic = %u.param_patt.loc16_19.2 (constants.%u.param_patt.58b)] +// CHECK:STDOUT: %u.patt.loc16_19.1: @Y.as.A.impl.F.%pattern_type.loc16_19 (%pattern_type.4f4b84.1) = at_binding_pattern u, %u.param_patt.loc16_19.1 [symbolic = %u.patt.loc16_19.2 (constants.%u.patt.542)] +// CHECK:STDOUT: %return.param_patt.loc16_37.1: @Y.as.A.impl.F.%pattern_type.loc16_37 (%pattern_type.178) = out_param_pattern [symbolic = %return.param_patt.loc16_37.2 (constants.%return.param_patt.b96)] +// CHECK:STDOUT: %return.patt.loc16_25.1: @Y.as.A.impl.F.%pattern_type.loc16_37 (%pattern_type.178) = return_slot_pattern %return.param_patt.loc16_37.1, %.loc16_37.3 [symbolic = %return.patt.loc16_25.2 (constants.%return.patt.f2f)] // CHECK:STDOUT: } { // CHECK:STDOUT: %X.ref: type = name_ref X, file.%X.decl [concrete = constants.%X] // CHECK:STDOUT: %Y.ref: type = name_ref Y, file.%Y.decl [concrete = constants.%Y] @@ -433,9 +454,12 @@ fn CallIndirect() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @A.WithSelf.F(@A.%T.loc5_14.2: type, @A.%Self.loc5_23.1: @A.%A.type (%A.type.acd), %U.loc6_9.2: type) { +// CHECK:STDOUT: %U.patt.loc6_9.2: %pattern_type.98f = symbolic_binding_pattern U, 2 [symbolic = %U.patt.loc6_9.2 (constants.%U.patt.b22)] // CHECK:STDOUT: %U.loc6_9.1: type = symbolic_binding U, 2 [symbolic = %U.loc6_9.1 (constants.%U.4e7)] // CHECK:STDOUT: %ptr.loc6_22.1: type = ptr_type %U.loc6_9.1 [symbolic = %ptr.loc6_22.1 (constants.%ptr.8f6)] // CHECK:STDOUT: %pattern_type.loc6_19: type = pattern_type %ptr.loc6_22.1 [symbolic = %pattern_type.loc6_19 (constants.%pattern_type.986)] +// CHECK:STDOUT: %u.param_patt.loc6_19.2: @A.WithSelf.F.%pattern_type.loc6_19 (%pattern_type.986) = value_param_pattern [symbolic = %u.param_patt.loc6_19.2 (constants.%u.param_patt.a01)] +// CHECK:STDOUT: %u.patt.loc6_19.2: @A.WithSelf.F.%pattern_type.loc6_19 (%pattern_type.986) = at_binding_pattern u, %u.param_patt.loc6_19.2 [symbolic = %u.patt.loc6_19.2 (constants.%u.patt.c78)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T.67d)] // CHECK:STDOUT: %A.type: type = facet_type <@A, @A(%T)> [symbolic = %A.type (constants.%A.type.acd)] // CHECK:STDOUT: %Self: @A.WithSelf.F.%A.type (%A.type.acd) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self.49a)] @@ -445,30 +469,37 @@ fn CallIndirect() { // CHECK:STDOUT: %tuple.type.loc6_40.2: type = tuple_type (%T, %Self.as_type.loc6_40.1, %ptr.loc6_22.1) [symbolic = %tuple.type.loc6_40.2 (constants.%tuple.type.640)] // CHECK:STDOUT: %.loc6_40.1: Core.Form = init_form %tuple.type.loc6_40.2 [symbolic = %.loc6_40.1 (constants.%.f0d)] // CHECK:STDOUT: %pattern_type.loc6_40: type = pattern_type %tuple.type.loc6_40.2 [symbolic = %pattern_type.loc6_40 (constants.%pattern_type.0d7)] +// CHECK:STDOUT: %return.param_patt.loc6_40.2: @A.WithSelf.F.%pattern_type.loc6_40 (%pattern_type.0d7) = out_param_pattern [symbolic = %return.param_patt.loc6_40.2 (constants.%return.param_patt.9d3)] +// CHECK:STDOUT: %return.patt.loc6_25.2: @A.WithSelf.F.%pattern_type.loc6_40 (%pattern_type.0d7) = return_slot_pattern %return.param_patt.loc6_40.2, %tuple.type.loc6_40.2 [symbolic = %return.patt.loc6_25.2 (constants.%return.patt.8aa)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%u.param: @A.WithSelf.F.%ptr.loc6_22.1 (%ptr.8f6)) -> out %return.param: @A.WithSelf.F.%tuple.type.loc6_40.2 (%tuple.type.640); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Y.as.A.impl.F(%U.loc16_9.2: type) { +// CHECK:STDOUT: %U.patt.loc16_9.2: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc16_9.2 (constants.%U.patt.d47)] // CHECK:STDOUT: %U.loc16_9.1: type = symbolic_binding U, 0 [symbolic = %U.loc16_9.1 (constants.%U.67d)] // CHECK:STDOUT: %ptr.loc16_22.1: type = ptr_type %U.loc16_9.1 [symbolic = %ptr.loc16_22.1 (constants.%ptr.e8f8f9.1)] // CHECK:STDOUT: %pattern_type.loc16_19: type = pattern_type %ptr.loc16_22.1 [symbolic = %pattern_type.loc16_19 (constants.%pattern_type.4f4b84.1)] +// CHECK:STDOUT: %u.param_patt.loc16_19.2: @Y.as.A.impl.F.%pattern_type.loc16_19 (%pattern_type.4f4b84.1) = value_param_pattern [symbolic = %u.param_patt.loc16_19.2 (constants.%u.param_patt.58b)] +// CHECK:STDOUT: %u.patt.loc16_19.2: @Y.as.A.impl.F.%pattern_type.loc16_19 (%pattern_type.4f4b84.1) = at_binding_pattern u, %u.param_patt.loc16_19.2 [symbolic = %u.patt.loc16_19.2 (constants.%u.patt.542)] // CHECK:STDOUT: %tuple: %tuple.type.ff9 = tuple_value (constants.%X, constants.%Y, %ptr.loc16_22.1) [symbolic = %tuple (constants.%tuple.f57)] // CHECK:STDOUT: %tuple.type.loc16: type = tuple_type (constants.%X, constants.%Y, %ptr.loc16_22.1) [symbolic = %tuple.type.loc16 (constants.%tuple.type.316)] // CHECK:STDOUT: %.loc16_37.1: Core.Form = init_form %tuple.type.loc16 [symbolic = %.loc16_37.1 (constants.%.3c1)] // CHECK:STDOUT: %pattern_type.loc16_37: type = pattern_type %tuple.type.loc16 [symbolic = %pattern_type.loc16_37 (constants.%pattern_type.178)] +// CHECK:STDOUT: %return.param_patt.loc16_37.2: @Y.as.A.impl.F.%pattern_type.loc16_37 (%pattern_type.178) = out_param_pattern [symbolic = %return.param_patt.loc16_37.2 (constants.%return.param_patt.b96)] +// CHECK:STDOUT: %return.patt.loc16_25.2: @Y.as.A.impl.F.%pattern_type.loc16_37 (%pattern_type.178) = return_slot_pattern %return.param_patt.loc16_37.2, %tuple.type.loc16 [symbolic = %return.patt.loc16_25.2 (constants.%return.patt.f2f)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc16_19: = require_complete_type %ptr.loc16_22.1 [symbolic = %require_complete.loc16_19 (constants.%require_complete.ef162c.1)] // CHECK:STDOUT: %require_complete.loc16_25: = require_complete_type %tuple.type.loc16 [symbolic = %require_complete.loc16_25 (constants.%require_complete.44f)] // CHECK:STDOUT: %tuple.type.loc17: type = tuple_type (constants.%empty_struct_type, constants.%empty_struct_type, %ptr.loc16_22.1) [symbolic = %tuple.type.loc17 (constants.%tuple.type.dd2)] -// CHECK:STDOUT: %.loc17_21.2: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%U.loc16_9.1) [symbolic = %.loc17_21.2 (constants.%.0e9)] +// CHECK:STDOUT: %.loc17_21.3: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%U.loc16_9.1) [symbolic = %.loc17_21.3 (constants.%.0e9)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %ptr.loc16_22.1, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.1da)] -// CHECK:STDOUT: %Copy.facet.loc17_21.2: %Copy.type = facet_value %ptr.loc16_22.1, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc17_21.2 (constants.%Copy.facet.302b)] -// CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.loc17_21.2) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.884)] -// CHECK:STDOUT: %.loc17_21.3: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %Copy.facet.loc17_21.2 [symbolic = %.loc17_21.3 (constants.%.be5)] -// CHECK:STDOUT: %impl.elem0.loc17_21.2: @Y.as.A.impl.F.%.loc17_21.3 (%.be5) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc17_21.2 (constants.%impl.elem0.484)] -// CHECK:STDOUT: %specific_impl_fn.loc17_21.2: = specific_impl_function %impl.elem0.loc17_21.2, @Copy.WithSelf.Op(%Copy.facet.loc17_21.2) [symbolic = %specific_impl_fn.loc17_21.2 (constants.%specific_impl_fn.a76)] +// CHECK:STDOUT: %Copy.facet.loc17_21.3: %Copy.type = facet_value %ptr.loc16_22.1, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc17_21.3 (constants.%Copy.facet.302b)] +// CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.loc17_21.3) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.884)] +// CHECK:STDOUT: %.loc17_21.4: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %Copy.facet.loc17_21.3 [symbolic = %.loc17_21.4 (constants.%.be5)] +// CHECK:STDOUT: %impl.elem0.loc17_21.2: @Y.as.A.impl.F.%.loc17_21.4 (%.be5) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc17_21.2 (constants.%impl.elem0.484)] +// CHECK:STDOUT: %specific_impl_fn.loc17_21.2: = specific_impl_function %impl.elem0.loc17_21.2, @Copy.WithSelf.Op(%Copy.facet.loc17_21.3) [symbolic = %specific_impl_fn.loc17_21.2 (constants.%specific_impl_fn.a76)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%u.param: @Y.as.A.impl.F.%ptr.loc16_22.1 (%ptr.e8f8f9.1)) -> out %return.param: @Y.as.A.impl.F.%tuple.type.loc16 (%tuple.type.316) { // CHECK:STDOUT: !entry: @@ -482,10 +513,12 @@ fn CallIndirect() { // CHECK:STDOUT: %tuple.elem1: ref %Y = tuple_access %return.param, element1 // CHECK:STDOUT: %.loc17_18.2: init %Y to %tuple.elem1 = class_init () [concrete = constants.%Y.val] // CHECK:STDOUT: %.loc17_22.3: init %Y = converted %.loc17_18.1, %.loc17_18.2 [concrete = constants.%Y.val] -// CHECK:STDOUT: %impl.elem0.loc17_21.1: @Y.as.A.impl.F.%.loc17_21.3 (%.be5) = impl_witness_access constants.%Copy.lookup_impl_witness.1da, element0 [symbolic = %impl.elem0.loc17_21.2 (constants.%impl.elem0.484)] +// CHECK:STDOUT: %impl.elem0.loc17_21.1: @Y.as.A.impl.F.%.loc17_21.4 (%.be5) = impl_witness_access constants.%Copy.lookup_impl_witness.1da, element0 [symbolic = %impl.elem0.loc17_21.2 (constants.%impl.elem0.484)] // CHECK:STDOUT: %bound_method.loc17_21.1: = bound_method %u.ref, %impl.elem0.loc17_21.1 -// CHECK:STDOUT: %Copy.facet.loc17_21.1: %Copy.type = facet_value constants.%ptr.e8f8f9.1, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc17_21.2 (constants.%Copy.facet.302b)] -// CHECK:STDOUT: %.loc17_21.1: %Copy.type = converted constants.%ptr.e8f8f9.1, %Copy.facet.loc17_21.1 [symbolic = %Copy.facet.loc17_21.2 (constants.%Copy.facet.302b)] +// CHECK:STDOUT: %Copy.facet.loc17_21.1: %Copy.type = facet_value constants.%ptr.e8f8f9.1, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc17_21.3 (constants.%Copy.facet.302b)] +// CHECK:STDOUT: %.loc17_21.1: %Copy.type = converted constants.%ptr.e8f8f9.1, %Copy.facet.loc17_21.1 [symbolic = %Copy.facet.loc17_21.3 (constants.%Copy.facet.302b)] +// CHECK:STDOUT: %Copy.facet.loc17_21.2: %Copy.type = facet_value constants.%ptr.e8f8f9.1, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc17_21.3 (constants.%Copy.facet.302b)] +// CHECK:STDOUT: %.loc17_21.2: %Copy.type = converted constants.%ptr.e8f8f9.1, %Copy.facet.loc17_21.2 [symbolic = %Copy.facet.loc17_21.3 (constants.%Copy.facet.302b)] // CHECK:STDOUT: %specific_impl_fn.loc17_21.1: = specific_impl_function %impl.elem0.loc17_21.1, @Copy.WithSelf.Op(constants.%Copy.facet.302b) [symbolic = %specific_impl_fn.loc17_21.2 (constants.%specific_impl_fn.a76)] // CHECK:STDOUT: %bound_method.loc17_21.2: = bound_method %u.ref, %specific_impl_fn.loc17_21.1 // CHECK:STDOUT: %Copy.WithSelf.Op.call: init @Y.as.A.impl.F.%ptr.loc16_22.1 (%ptr.e8f8f9.1) = call %bound_method.loc17_21.2(%u.ref) @@ -500,8 +533,8 @@ fn CallIndirect() { // CHECK:STDOUT: fn @Call() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %u.patt: %pattern_type.34e = ref_binding_pattern u [concrete] -// CHECK:STDOUT: %u.var_patt: %pattern_type.34e = var_pattern %u.patt [concrete] +// CHECK:STDOUT: %u.patt: %pattern_type.34e = ref_binding_pattern u [concrete = constants.%u.patt.352] +// CHECK:STDOUT: %u.var_patt: %pattern_type.34e = var_pattern %u.patt [concrete = constants.%u.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %u.var: ref %Z = var %u.var_patt // CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%Z, (constants.%DefaultOrUnformed.impl_witness.e88) [concrete = constants.%DefaultOrUnformed.facet] @@ -564,6 +597,7 @@ fn CallIndirect() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @CallGeneric(%T.loc26_17.2: %facet_type) { +// CHECK:STDOUT: %T.patt.loc26_17.2: %pattern_type.871 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc26_17.2 (constants.%T.patt.c17)] // CHECK:STDOUT: %T.loc26_17.1: %facet_type = symbolic_binding T, 0 [symbolic = %T.loc26_17.1 (constants.%T.5b7)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -577,17 +611,17 @@ fn CallIndirect() { // CHECK:STDOUT: %tuple.type: type = tuple_type (constants.%X, %T.as_type.loc28_4.2, constants.%ptr.415) [symbolic = %tuple.type (constants.%tuple.type.c2a)] // CHECK:STDOUT: %require_complete: = require_complete_type %tuple.type [symbolic = %require_complete (constants.%require_complete.d14)] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %tuple.type, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness.a02)] -// CHECK:STDOUT: %Destroy.facet.loc28_12.2: %Destroy.type = facet_value %tuple.type, (%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.loc28_12.2 (constants.%Destroy.facet.2f8)] -// CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.loc28_12.2) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.2ac)] -// CHECK:STDOUT: %.loc28_12.4: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Destroy.facet.loc28_12.2 [symbolic = %.loc28_12.4 (constants.%.89c)] -// CHECK:STDOUT: %impl.elem0.loc28_12.2: @CallGeneric.%.loc28_12.4 (%.89c) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc28_12.2 (constants.%impl.elem0.a1a)] -// CHECK:STDOUT: %specific_impl_fn.loc28_12.2: = specific_impl_function %impl.elem0.loc28_12.2, @Destroy.WithSelf.Op(%Destroy.facet.loc28_12.2) [symbolic = %specific_impl_fn.loc28_12.2 (constants.%specific_impl_fn.65e)] +// CHECK:STDOUT: %Destroy.facet.loc28_12.3: %Destroy.type = facet_value %tuple.type, (%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.loc28_12.3 (constants.%Destroy.facet.2f8)] +// CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.loc28_12.3) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.2ac)] +// CHECK:STDOUT: %.loc28_12.5: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Destroy.facet.loc28_12.3 [symbolic = %.loc28_12.5 (constants.%.89c)] +// CHECK:STDOUT: %impl.elem0.loc28_12.2: @CallGeneric.%.loc28_12.5 (%.89c) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc28_12.2 (constants.%impl.elem0.a1a)] +// CHECK:STDOUT: %specific_impl_fn.loc28_12.2: = specific_impl_function %impl.elem0.loc28_12.2, @Destroy.WithSelf.Op(%Destroy.facet.loc28_12.3) [symbolic = %specific_impl_fn.loc28_12.2 (constants.%specific_impl_fn.65e)] // CHECK:STDOUT: // CHECK:STDOUT: fn() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %u.patt: %pattern_type.34e = ref_binding_pattern u [concrete] -// CHECK:STDOUT: %u.var_patt: %pattern_type.34e = var_pattern %u.patt [concrete] +// CHECK:STDOUT: %u.patt: %pattern_type.34e = ref_binding_pattern u [concrete = constants.%u.patt.352] +// CHECK:STDOUT: %u.var_patt: %pattern_type.34e = var_pattern %u.patt [concrete = constants.%u.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %u.var: ref %Z = var %u.var_patt // CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%Z, (constants.%DefaultOrUnformed.impl_witness.e88) [concrete = constants.%DefaultOrUnformed.facet] @@ -613,10 +647,12 @@ fn CallIndirect() { // CHECK:STDOUT: %.loc28_12.1: ref @CallGeneric.%tuple.type (%tuple.type.c2a) = temporary_storage // CHECK:STDOUT: %A.WithSelf.F.call: init @CallGeneric.%tuple.type (%tuple.type.c2a) to %.loc28_12.1 = call %specific_impl_fn.loc28_4.1(%addr) // CHECK:STDOUT: %.loc28_12.2: ref @CallGeneric.%tuple.type (%tuple.type.c2a) = temporary %.loc28_12.1, %A.WithSelf.F.call -// CHECK:STDOUT: %impl.elem0.loc28_12.1: @CallGeneric.%.loc28_12.4 (%.89c) = impl_witness_access constants.%Destroy.lookup_impl_witness.a02, element0 [symbolic = %impl.elem0.loc28_12.2 (constants.%impl.elem0.a1a)] +// CHECK:STDOUT: %impl.elem0.loc28_12.1: @CallGeneric.%.loc28_12.5 (%.89c) = impl_witness_access constants.%Destroy.lookup_impl_witness.a02, element0 [symbolic = %impl.elem0.loc28_12.2 (constants.%impl.elem0.a1a)] // CHECK:STDOUT: %bound_method.loc28_12.1: = bound_method %.loc28_12.2, %impl.elem0.loc28_12.1 -// CHECK:STDOUT: %Destroy.facet.loc28_12.1: %Destroy.type = facet_value constants.%tuple.type.c2a, (constants.%Destroy.lookup_impl_witness.a02) [symbolic = %Destroy.facet.loc28_12.2 (constants.%Destroy.facet.2f8)] -// CHECK:STDOUT: %.loc28_12.3: %Destroy.type = converted constants.%tuple.type.c2a, %Destroy.facet.loc28_12.1 [symbolic = %Destroy.facet.loc28_12.2 (constants.%Destroy.facet.2f8)] +// CHECK:STDOUT: %Destroy.facet.loc28_12.1: %Destroy.type = facet_value constants.%tuple.type.c2a, (constants.%Destroy.lookup_impl_witness.a02) [symbolic = %Destroy.facet.loc28_12.3 (constants.%Destroy.facet.2f8)] +// CHECK:STDOUT: %.loc28_12.3: %Destroy.type = converted constants.%tuple.type.c2a, %Destroy.facet.loc28_12.1 [symbolic = %Destroy.facet.loc28_12.3 (constants.%Destroy.facet.2f8)] +// CHECK:STDOUT: %Destroy.facet.loc28_12.2: %Destroy.type = facet_value constants.%tuple.type.c2a, (constants.%Destroy.lookup_impl_witness.a02) [symbolic = %Destroy.facet.loc28_12.3 (constants.%Destroy.facet.2f8)] +// CHECK:STDOUT: %.loc28_12.4: %Destroy.type = converted constants.%tuple.type.c2a, %Destroy.facet.loc28_12.2 [symbolic = %Destroy.facet.loc28_12.3 (constants.%Destroy.facet.2f8)] // CHECK:STDOUT: %specific_impl_fn.loc28_12.1: = specific_impl_function %impl.elem0.loc28_12.1, @Destroy.WithSelf.Op(constants.%Destroy.facet.2f8) [symbolic = %specific_impl_fn.loc28_12.2 (constants.%specific_impl_fn.65e)] // CHECK:STDOUT: %bound_method.loc28_12.2: = bound_method %.loc28_12.2, %specific_impl_fn.loc28_12.1 // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc28_12.2(%.loc28_12.2) @@ -638,15 +674,19 @@ fn CallIndirect() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A(constants.%T.67d) { +// CHECK:STDOUT: %T.patt.loc5_14.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc5_14.1 => constants.%T.67d // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A.WithSelf(constants.%T.67d, constants.%Self.49a) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @A.WithSelf.F(constants.%T.67d, constants.%Self.49a, constants.%U.4e7) { +// CHECK:STDOUT: %U.patt.loc6_9.2 => constants.%U.patt.b22 // CHECK:STDOUT: %U.loc6_9.1 => constants.%U.4e7 // CHECK:STDOUT: %ptr.loc6_22.1 => constants.%ptr.8f6 // CHECK:STDOUT: %pattern_type.loc6_19 => constants.%pattern_type.986 +// CHECK:STDOUT: %u.param_patt.loc6_19.2 => constants.%u.param_patt.a01 +// CHECK:STDOUT: %u.patt.loc6_19.2 => constants.%u.patt.c78 // CHECK:STDOUT: %T => constants.%T.67d // CHECK:STDOUT: %A.type => constants.%A.type.acd // CHECK:STDOUT: %Self => constants.%Self.49a @@ -656,9 +696,12 @@ fn CallIndirect() { // CHECK:STDOUT: %tuple.type.loc6_40.2 => constants.%tuple.type.640 // CHECK:STDOUT: %.loc6_40.1 => constants.%.f0d // CHECK:STDOUT: %pattern_type.loc6_40 => constants.%pattern_type.0d7 +// CHECK:STDOUT: %return.param_patt.loc6_40.2 => constants.%return.param_patt.9d3 +// CHECK:STDOUT: %return.patt.loc6_25.2 => constants.%return.patt.8aa // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A(constants.%X) { +// CHECK:STDOUT: %T.patt.loc5_14.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc5_14.1 => constants.%X // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -678,13 +721,18 @@ fn CallIndirect() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Y.as.A.impl.F(constants.%U.67d) { +// CHECK:STDOUT: %U.patt.loc16_9.2 => constants.%U.patt.d47 // CHECK:STDOUT: %U.loc16_9.1 => constants.%U.67d // CHECK:STDOUT: %ptr.loc16_22.1 => constants.%ptr.e8f8f9.1 // CHECK:STDOUT: %pattern_type.loc16_19 => constants.%pattern_type.4f4b84.1 +// CHECK:STDOUT: %u.param_patt.loc16_19.2 => constants.%u.param_patt.58b +// CHECK:STDOUT: %u.patt.loc16_19.2 => constants.%u.patt.542 // CHECK:STDOUT: %tuple => constants.%tuple.f57 // CHECK:STDOUT: %tuple.type.loc16 => constants.%tuple.type.316 // CHECK:STDOUT: %.loc16_37.1 => constants.%.3c1 // CHECK:STDOUT: %pattern_type.loc16_37 => constants.%pattern_type.178 +// CHECK:STDOUT: %return.param_patt.loc16_37.2 => constants.%return.param_patt.b96 +// CHECK:STDOUT: %return.patt.loc16_25.2 => constants.%return.patt.f2f // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A.WithSelf(constants.%X, constants.%A.facet.c65) { @@ -699,9 +747,12 @@ fn CallIndirect() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A.WithSelf.F(constants.%X, constants.%A.facet.c65, constants.%U.67d) { +// CHECK:STDOUT: %U.patt.loc6_9.2 => constants.%U.patt.b22 // CHECK:STDOUT: %U.loc6_9.1 => constants.%U.67d // CHECK:STDOUT: %ptr.loc6_22.1 => constants.%ptr.e8f8f9.1 // CHECK:STDOUT: %pattern_type.loc6_19 => constants.%pattern_type.4f4b84.1 +// CHECK:STDOUT: %u.param_patt.loc6_19.2 => constants.%u.param_patt.58b +// CHECK:STDOUT: %u.patt.loc6_19.2 => constants.%u.patt.542 // CHECK:STDOUT: %T => constants.%X // CHECK:STDOUT: %A.type => constants.%A.type.df0 // CHECK:STDOUT: %Self => constants.%A.facet.c65 @@ -711,31 +762,39 @@ fn CallIndirect() { // CHECK:STDOUT: %tuple.type.loc6_40.2 => constants.%tuple.type.316 // CHECK:STDOUT: %.loc6_40.1 => constants.%.3c1 // CHECK:STDOUT: %pattern_type.loc6_40 => constants.%pattern_type.178 +// CHECK:STDOUT: %return.param_patt.loc6_40.2 => constants.%return.param_patt.b96 +// CHECK:STDOUT: %return.patt.loc6_25.2 => constants.%return.patt.f2f // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Y.as.A.impl.F(constants.%Z) { +// CHECK:STDOUT: %U.patt.loc16_9.2 => constants.%U.patt.d47 // CHECK:STDOUT: %U.loc16_9.1 => constants.%Z // CHECK:STDOUT: %ptr.loc16_22.1 => constants.%ptr.415 // CHECK:STDOUT: %pattern_type.loc16_19 => constants.%pattern_type.b4b +// CHECK:STDOUT: %u.param_patt.loc16_19.2 => constants.%u.param_patt.5c1 +// CHECK:STDOUT: %u.patt.loc16_19.2 => constants.%u.patt.5b6 // CHECK:STDOUT: %tuple => constants.%tuple.8e4 // CHECK:STDOUT: %tuple.type.loc16 => constants.%tuple.type.2cd // CHECK:STDOUT: %.loc16_37.1 => constants.%.5bc // CHECK:STDOUT: %pattern_type.loc16_37 => constants.%pattern_type.b33 +// CHECK:STDOUT: %return.param_patt.loc16_37.2 => constants.%return.param_patt.75d +// CHECK:STDOUT: %return.patt.loc16_25.2 => constants.%return.patt.8bb // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc16_19 => constants.%complete_type.458 // CHECK:STDOUT: %require_complete.loc16_25 => constants.%complete_type.dec // CHECK:STDOUT: %tuple.type.loc17 => constants.%tuple.type.2c5 -// CHECK:STDOUT: %.loc17_21.2 => constants.%.072 +// CHECK:STDOUT: %.loc17_21.3 => constants.%.072 // CHECK:STDOUT: %Copy.lookup_impl_witness => constants.%Copy.impl_witness.d9a -// CHECK:STDOUT: %Copy.facet.loc17_21.2 => constants.%Copy.facet.302f +// CHECK:STDOUT: %Copy.facet.loc17_21.3 => constants.%Copy.facet.302f // CHECK:STDOUT: %Copy.WithSelf.Op.type => constants.%Copy.WithSelf.Op.type.b68 -// CHECK:STDOUT: %.loc17_21.3 => constants.%.6df +// CHECK:STDOUT: %.loc17_21.4 => constants.%.6df // CHECK:STDOUT: %impl.elem0.loc17_21.2 => constants.%ptr.as.Copy.impl.Op.ebe // CHECK:STDOUT: %specific_impl_fn.loc17_21.2 => constants.%ptr.as.Copy.impl.Op.specific_fn // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @CallGeneric(constants.%T.5b7) { +// CHECK:STDOUT: %T.patt.loc26_17.2 => constants.%T.patt.c17 // CHECK:STDOUT: %T.loc26_17.1 => constants.%T.5b7 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -762,9 +821,12 @@ fn CallIndirect() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A.WithSelf.F(constants.%X, constants.%A.facet.318, constants.%Z) { +// CHECK:STDOUT: %U.patt.loc6_9.2 => constants.%U.patt.b22 // CHECK:STDOUT: %U.loc6_9.1 => constants.%Z // CHECK:STDOUT: %ptr.loc6_22.1 => constants.%ptr.415 // CHECK:STDOUT: %pattern_type.loc6_19 => constants.%pattern_type.b4b +// CHECK:STDOUT: %u.param_patt.loc6_19.2 => constants.%u.param_patt.5c1 +// CHECK:STDOUT: %u.patt.loc6_19.2 => constants.%u.patt.5b6 // CHECK:STDOUT: %T => constants.%X // CHECK:STDOUT: %A.type => constants.%A.type.df0 // CHECK:STDOUT: %Self => constants.%A.facet.318 @@ -774,9 +836,12 @@ fn CallIndirect() { // CHECK:STDOUT: %tuple.type.loc6_40.2 => constants.%tuple.type.c2a // CHECK:STDOUT: %.loc6_40.1 => constants.%.546 // CHECK:STDOUT: %pattern_type.loc6_40 => constants.%pattern_type.0e9 +// CHECK:STDOUT: %return.param_patt.loc6_40.2 => constants.%return.param_patt.579 +// CHECK:STDOUT: %return.patt.loc6_25.2 => constants.%return.patt.62e // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @CallGeneric(constants.%facet_value) { +// CHECK:STDOUT: %T.patt.loc26_17.2 => constants.%T.patt.c17 // CHECK:STDOUT: %T.loc26_17.1 => constants.%facet_value // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -790,17 +855,20 @@ fn CallIndirect() { // CHECK:STDOUT: %tuple.type => constants.%tuple.type.2cd // CHECK:STDOUT: %require_complete => constants.%complete_type.dec // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.df9cc1.5 -// CHECK:STDOUT: %Destroy.facet.loc28_12.2 => constants.%Destroy.facet.e95 +// CHECK:STDOUT: %Destroy.facet.loc28_12.3 => constants.%Destroy.facet.e95 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.964 -// CHECK:STDOUT: %.loc28_12.4 => constants.%.41a +// CHECK:STDOUT: %.loc28_12.5 => constants.%.41a // CHECK:STDOUT: %impl.elem0.loc28_12.2 => constants.%Destroy.Op.1a2547.5 // CHECK:STDOUT: %specific_impl_fn.loc28_12.2 => constants.%Destroy.Op.1a2547.5 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A.WithSelf.F(constants.%X, constants.%A.facet.c65, constants.%Z) { +// CHECK:STDOUT: %U.patt.loc6_9.2 => constants.%U.patt.b22 // CHECK:STDOUT: %U.loc6_9.1 => constants.%Z // CHECK:STDOUT: %ptr.loc6_22.1 => constants.%ptr.415 // CHECK:STDOUT: %pattern_type.loc6_19 => constants.%pattern_type.b4b +// CHECK:STDOUT: %u.param_patt.loc6_19.2 => constants.%u.param_patt.5c1 +// CHECK:STDOUT: %u.patt.loc6_19.2 => constants.%u.patt.5b6 // CHECK:STDOUT: %T => constants.%X // CHECK:STDOUT: %A.type => constants.%A.type.df0 // CHECK:STDOUT: %Self => constants.%A.facet.c65 @@ -810,6 +878,8 @@ fn CallIndirect() { // CHECK:STDOUT: %tuple.type.loc6_40.2 => constants.%tuple.type.2cd // CHECK:STDOUT: %.loc6_40.1 => constants.%.5bc // CHECK:STDOUT: %pattern_type.loc6_40 => constants.%pattern_type.b33 +// CHECK:STDOUT: %return.param_patt.loc6_40.2 => constants.%return.param_patt.75d +// CHECK:STDOUT: %return.patt.loc6_25.2 => constants.%return.patt.8bb // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- generic_method_more_params.carbon @@ -818,20 +888,26 @@ fn CallIndirect() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.d47: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %A.type.55a: type = generic_interface_type @A [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %A.generic: %A.type.55a = struct_value () [concrete] // CHECK:STDOUT: %A.type.acd: type = facet_type <@A, @A(%T.67d)> [symbolic] // CHECK:STDOUT: %Self.49a: %A.type.acd = symbolic_binding Self, 1 [symbolic] +// CHECK:STDOUT: %U.patt.b22: %pattern_type.98f = symbolic_binding_pattern U, 2 [symbolic] // CHECK:STDOUT: %U.4e7: type = symbolic_binding U, 2 [symbolic] // CHECK:STDOUT: %pattern_type.62e: type = pattern_type %U.4e7 [symbolic] +// CHECK:STDOUT: %u.param_patt.6ef: %pattern_type.62e = value_param_pattern [symbolic] +// CHECK:STDOUT: %u.patt.8af: %pattern_type.62e = at_binding_pattern u, %u.param_patt.6ef [symbolic] // CHECK:STDOUT: %tuple.type.76f: type = tuple_type (type, %A.type.acd, type) [symbolic] // CHECK:STDOUT: %tuple.55a: %tuple.type.76f = tuple_value (%T.67d, %Self.49a, %U.4e7) [symbolic] // CHECK:STDOUT: %Self.as_type.763: type = facet_access_type %Self.49a [symbolic] // CHECK:STDOUT: %tuple.type.d73: type = tuple_type (%T.67d, %Self.as_type.763, %U.4e7) [symbolic] // CHECK:STDOUT: %.bc3: Core.Form = init_form %tuple.type.d73 [symbolic] // CHECK:STDOUT: %pattern_type.d6c: type = pattern_type %tuple.type.d73 [symbolic] +// CHECK:STDOUT: %return.param_patt.52a: %pattern_type.d6c = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.808: %pattern_type.d6c = return_slot_pattern %return.param_patt.52a, %tuple.type.d73 [symbolic] // CHECK:STDOUT: %A.WithSelf.F.type.08d: type = fn_type @A.WithSelf.F, @A.WithSelf(%T.67d, %Self.49a) [symbolic] // CHECK:STDOUT: %A.WithSelf.F.3fa: %A.WithSelf.F.type.08d = struct_value () [symbolic] // CHECK:STDOUT: %A.assoc_type.447: type = assoc_entity_type @A, @A(%T.67d) [symbolic] @@ -842,8 +918,11 @@ fn CallIndirect() { // CHECK:STDOUT: %Y1: type = class_type @Y1 [concrete] // CHECK:STDOUT: %Y2: type = class_type @Y2 [concrete] // CHECK:STDOUT: %Z: type = class_type @Z [concrete] +// CHECK:STDOUT: %V1.patt: %pattern_type.98f = symbolic_binding_pattern V1, 0 [symbolic] // CHECK:STDOUT: %V1: type = symbolic_binding V1, 0 [symbolic] +// CHECK:STDOUT: %V2.patt: %pattern_type.98f = symbolic_binding_pattern V2, 1 [symbolic] // CHECK:STDOUT: %V2: type = symbolic_binding V2, 1 [symbolic] +// CHECK:STDOUT: %W.patt: %pattern_type.98f = symbolic_binding_pattern W, 2 [symbolic] // CHECK:STDOUT: %W: type = symbolic_binding W, 2 [symbolic] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.4b9: %tuple.type.24b = tuple_value (%V1, %V2) [symbolic] @@ -856,13 +935,18 @@ fn CallIndirect() { // CHECK:STDOUT: %A.assoc_type.250: type = assoc_entity_type @A, @A(%W) [symbolic] // CHECK:STDOUT: %assoc0.6de: %A.assoc_type.250 = assoc_entity element0, @A.WithSelf.%A.WithSelf.F.decl [symbolic] // CHECK:STDOUT: %require_complete.7b2: = require_complete_type %A.type.3ad [symbolic] +// CHECK:STDOUT: %U.patt.637: %pattern_type.98f = symbolic_binding_pattern U, 3 [symbolic] // CHECK:STDOUT: %U.ce4: type = symbolic_binding U, 3 [symbolic] // CHECK:STDOUT: %pattern_type.e4a: type = pattern_type %U.ce4 [symbolic] +// CHECK:STDOUT: %u.param_patt.afe: %pattern_type.e4a = value_param_pattern [symbolic] +// CHECK:STDOUT: %u.patt.e63: %pattern_type.e4a = at_binding_pattern u, %u.param_patt.afe [symbolic] // CHECK:STDOUT: %tuple.type.11f: type = tuple_type (type, %tuple.type.24b, type) [concrete] // CHECK:STDOUT: %tuple.117: %tuple.type.11f = tuple_value (%W, %tuple.4b9, %U.ce4) [symbolic] // CHECK:STDOUT: %tuple.type.897: type = tuple_type (%W, %tuple.type.a5e, %U.ce4) [symbolic] // CHECK:STDOUT: %.f8e: Core.Form = init_form %tuple.type.897 [symbolic] // CHECK:STDOUT: %pattern_type.5cc: type = pattern_type %tuple.type.897 [symbolic] +// CHECK:STDOUT: %return.param_patt.b1c: %pattern_type.5cc = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.bad9: %pattern_type.5cc = return_slot_pattern %return.param_patt.b1c, %tuple.type.897 [symbolic] // CHECK:STDOUT: %tuple.type.as.A.impl.F.type.44a: type = fn_type @tuple.type.as.A.impl.F, @tuple.type.as.A.impl(%V1, %V2, %W) [symbolic] // CHECK:STDOUT: %tuple.type.as.A.impl.F.742: %tuple.type.as.A.impl.F.type.44a = struct_value () [symbolic] // CHECK:STDOUT: %A.facet.ab0: %A.type.3ad = facet_value %tuple.type.a5e, (%A.impl_witness.756) [symbolic] @@ -893,10 +977,14 @@ fn CallIndirect() { // CHECK:STDOUT: %.d9b: type = fn_type_with_self_type %A.WithSelf.F.type.243, %A.facet.682 [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.34e: type = pattern_type %Z [concrete] +// CHECK:STDOUT: %u.param_patt.a3e: %pattern_type.34e = value_param_pattern [concrete] +// CHECK:STDOUT: %u.patt.a51: %pattern_type.34e = at_binding_pattern u, %u.param_patt.a3e [concrete] // CHECK:STDOUT: %tuple.1a1: %tuple.type.11f = tuple_value (%X, %tuple.8db, %Z) [concrete] // CHECK:STDOUT: %tuple.type.d40: type = tuple_type (%X, %tuple.type.59f, %Z) [concrete] // CHECK:STDOUT: %.1a9: Core.Form = init_form %tuple.type.d40 [concrete] // CHECK:STDOUT: %pattern_type.6a8: type = pattern_type %tuple.type.d40 [concrete] +// CHECK:STDOUT: %return.param_patt.fb7: %pattern_type.6a8 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.badc: %pattern_type.6a8 = return_slot_pattern %return.param_patt.fb7, %tuple.type.d40 [concrete] // CHECK:STDOUT: %tuple.type.as.A.impl.F.specific_fn.981: = specific_function %tuple.type.as.A.impl.F.749, @tuple.type.as.A.impl.F(%Y1, %Y2, %X, %Z) [concrete] // CHECK:STDOUT: %Z.val: %Z = struct_value () [concrete] // CHECK:STDOUT: %.7dc: ref %Z = temporary invalid, %Z.val [concrete] @@ -925,6 +1013,7 @@ fn CallIndirect() { // CHECK:STDOUT: %type.as.BitAndWith.impl.Op.bound: = bound_method %A.type.df0, %type.as.BitAndWith.impl.Op [concrete] // CHECK:STDOUT: %facet_type: type = facet_type <@A, @A(%X) & @Destroy> [concrete] // CHECK:STDOUT: %pattern_type.871: type = pattern_type %facet_type [concrete] +// CHECK:STDOUT: %T.patt.c17: %pattern_type.871 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.5b7: %facet_type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %CallGeneric.type: type = fn_type @CallGeneric [concrete] // CHECK:STDOUT: %CallGeneric: %CallGeneric.type = struct_value () [concrete] @@ -942,6 +1031,8 @@ fn CallIndirect() { // CHECK:STDOUT: %tuple.type.036: type = tuple_type (%X, %T.as_type, %Z) [symbolic] // CHECK:STDOUT: %.772: Core.Form = init_form %tuple.type.036 [symbolic] // CHECK:STDOUT: %pattern_type.8f9: type = pattern_type %tuple.type.036 [symbolic] +// CHECK:STDOUT: %return.param_patt.cc2: %pattern_type.8f9 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.eed: %pattern_type.8f9 = return_slot_pattern %return.param_patt.cc2, %tuple.type.036 [symbolic] // CHECK:STDOUT: %specific_impl_fn.74d: = specific_impl_function %impl.elem0.1a3, @A.WithSelf.F(%X, %A.facet.318, %Z) [symbolic] // CHECK:STDOUT: %require_complete.4e1: = require_complete_type %tuple.type.036 [symbolic] // CHECK:STDOUT: %Destroy.lookup_impl_witness.8dc: = lookup_impl_witness %tuple.type.036, @Destroy [symbolic] @@ -985,7 +1076,7 @@ fn CallIndirect() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl: %A.type.55a = interface_decl @A [concrete = constants.%A.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc5_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_14.2 (constants.%T.patt.d47)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc5_17.1: type = splice_block %.loc5_17.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -998,9 +1089,9 @@ fn CallIndirect() { // CHECK:STDOUT: %Y2.decl: type = class_decl @Y2 [concrete = constants.%Y2] {} {} // CHECK:STDOUT: %Z.decl: type = class_decl @Z [concrete = constants.%Z] {} {} // CHECK:STDOUT: impl_decl @tuple.type.as.A.impl [concrete] { -// CHECK:STDOUT: %V1.patt: %pattern_type.98f = symbolic_binding_pattern V1, 0 [concrete] -// CHECK:STDOUT: %V2.patt: %pattern_type.98f = symbolic_binding_pattern V2, 1 [concrete] -// CHECK:STDOUT: %W.patt: %pattern_type.98f = symbolic_binding_pattern W, 2 [concrete] +// CHECK:STDOUT: %V1.patt.loc14_16.1: %pattern_type.98f = symbolic_binding_pattern V1, 0 [symbolic = %V1.patt.loc14_16.2 (constants.%V1.patt)] +// CHECK:STDOUT: %V2.patt.loc14_27.1: %pattern_type.98f = symbolic_binding_pattern V2, 1 [symbolic = %V2.patt.loc14_27.2 (constants.%V2.patt)] +// CHECK:STDOUT: %W.patt.loc14_37.1: %pattern_type.98f = symbolic_binding_pattern W, 2 [symbolic = %W.patt.loc14_37.2 (constants.%W.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %V1.ref: type = name_ref V1, %V1.loc14_16.2 [symbolic = %V1.loc14_16.1 (constants.%V1)] // CHECK:STDOUT: %V2.ref: type = name_ref V2, %V2.loc14_27.2 [symbolic = %V2.loc14_27.1 (constants.%V2)] @@ -1027,7 +1118,7 @@ fn CallIndirect() { // CHECK:STDOUT: } // CHECK:STDOUT: %Call.decl: %Call.type = fn_decl @Call [concrete = constants.%Call] {} {} // CHECK:STDOUT: %CallGeneric.decl: %CallGeneric.type = fn_decl @CallGeneric [concrete = constants.%CallGeneric] { -// CHECK:STDOUT: %T.patt: %pattern_type.871 = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc27_17.1: %pattern_type.871 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc27_17.2 (constants.%T.patt.c17)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc27_25.1: type = splice_block %.loc27_25.3 [concrete = constants.%facet_type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1048,6 +1139,7 @@ fn CallIndirect() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @A(%T.loc5_14.2: type) { +// CHECK:STDOUT: %T.patt.loc5_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_14.2 (constants.%T.patt.d47)] // CHECK:STDOUT: %T.loc5_14.1: type = symbolic_binding T, 0 [symbolic = %T.loc5_14.1 (constants.%T.67d)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1060,11 +1152,11 @@ fn CallIndirect() { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %A.WithSelf.F.decl: @A.WithSelf.%A.WithSelf.F.type (%A.WithSelf.F.type.08d) = fn_decl @A.WithSelf.F [symbolic = @A.WithSelf.%A.WithSelf.F (constants.%A.WithSelf.F.3fa)] { -// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 2 [concrete] -// CHECK:STDOUT: %u.param_patt: @A.WithSelf.F.%pattern_type.loc6_19 (%pattern_type.62e) = value_param_pattern [concrete] -// CHECK:STDOUT: %u.patt: @A.WithSelf.F.%pattern_type.loc6_19 (%pattern_type.62e) = at_binding_pattern u, %u.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @A.WithSelf.F.%pattern_type.loc6_38 (%pattern_type.d6c) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @A.WithSelf.F.%pattern_type.loc6_38 (%pattern_type.d6c) = return_slot_pattern %return.param_patt, %.loc6_38.4 [concrete] +// CHECK:STDOUT: %U.patt.loc6_9.1: %pattern_type.98f = symbolic_binding_pattern U, 2 [symbolic = %U.patt.loc6_9.2 (constants.%U.patt.b22)] +// CHECK:STDOUT: %u.param_patt.loc6_19.1: @A.WithSelf.F.%pattern_type.loc6_19 (%pattern_type.62e) = value_param_pattern [symbolic = %u.param_patt.loc6_19.2 (constants.%u.param_patt.6ef)] +// CHECK:STDOUT: %u.patt.loc6_19.1: @A.WithSelf.F.%pattern_type.loc6_19 (%pattern_type.62e) = at_binding_pattern u, %u.param_patt.loc6_19.1 [symbolic = %u.patt.loc6_19.2 (constants.%u.patt.8af)] +// CHECK:STDOUT: %return.param_patt.loc6_38.1: @A.WithSelf.F.%pattern_type.loc6_38 (%pattern_type.d6c) = out_param_pattern [symbolic = %return.param_patt.loc6_38.2 (constants.%return.param_patt.52a)] +// CHECK:STDOUT: %return.patt.loc6_24.1: @A.WithSelf.F.%pattern_type.loc6_38 (%pattern_type.d6c) = return_slot_pattern %return.param_patt.loc6_38.1, %.loc6_38.4 [symbolic = %return.patt.loc6_24.2 (constants.%return.patt.808)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, @A.%T.loc5_14.2 [symbolic = %T (constants.%T.67d)] // CHECK:STDOUT: %.loc6_31: @A.WithSelf.F.%A.type (%A.type.acd) = specific_constant @A.%Self.loc5_23.1, @A(constants.%T.67d) [symbolic = %Self (constants.%Self.49a)] @@ -1103,8 +1195,11 @@ fn CallIndirect() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @tuple.type.as.A.impl(%V1.loc14_16.2: type, %V2.loc14_27.2: type, %W.loc14_37.2: type) { +// CHECK:STDOUT: %V1.patt.loc14_16.2: %pattern_type.98f = symbolic_binding_pattern V1, 0 [symbolic = %V1.patt.loc14_16.2 (constants.%V1.patt)] // CHECK:STDOUT: %V1.loc14_16.1: type = symbolic_binding V1, 0 [symbolic = %V1.loc14_16.1 (constants.%V1)] +// CHECK:STDOUT: %V2.patt.loc14_27.2: %pattern_type.98f = symbolic_binding_pattern V2, 1 [symbolic = %V2.patt.loc14_27.2 (constants.%V2.patt)] // CHECK:STDOUT: %V2.loc14_27.1: type = symbolic_binding V2, 1 [symbolic = %V2.loc14_27.1 (constants.%V2)] +// CHECK:STDOUT: %W.patt.loc14_37.2: %pattern_type.98f = symbolic_binding_pattern W, 2 [symbolic = %W.patt.loc14_37.2 (constants.%W.patt)] // CHECK:STDOUT: %W.loc14_37.1: type = symbolic_binding W, 2 [symbolic = %W.loc14_37.1 (constants.%W)] // CHECK:STDOUT: %tuple: %tuple.type.24b = tuple_value (%V1.loc14_16.1, %V2.loc14_27.1) [symbolic = %tuple (constants.%tuple.4b9)] // CHECK:STDOUT: %tuple.type: type = tuple_type (%V1.loc14_16.1, %V2.loc14_27.1) [symbolic = %tuple.type (constants.%tuple.type.a5e)] @@ -1118,11 +1213,11 @@ fn CallIndirect() { // CHECK:STDOUT: // CHECK:STDOUT: impl: %.loc14_53.2 as %A.type.loc14_61.2 { // CHECK:STDOUT: %tuple.type.as.A.impl.F.decl: @tuple.type.as.A.impl.%tuple.type.as.A.impl.F.type (%tuple.type.as.A.impl.F.type.44a) = fn_decl @tuple.type.as.A.impl.F [symbolic = @tuple.type.as.A.impl.%tuple.type.as.A.impl.F (constants.%tuple.type.as.A.impl.F.742)] { -// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 3 [concrete] -// CHECK:STDOUT: %u.param_patt: @tuple.type.as.A.impl.F.%pattern_type.loc17_19 (%pattern_type.e4a) = value_param_pattern [concrete] -// CHECK:STDOUT: %u.patt: @tuple.type.as.A.impl.F.%pattern_type.loc17_19 (%pattern_type.e4a) = at_binding_pattern u, %u.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @tuple.type.as.A.impl.F.%pattern_type.loc17_42 (%pattern_type.5cc) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @tuple.type.as.A.impl.F.%pattern_type.loc17_42 (%pattern_type.5cc) = return_slot_pattern %return.param_patt, %.loc17_42.5 [concrete] +// CHECK:STDOUT: %U.patt.loc17_9.1: %pattern_type.98f = symbolic_binding_pattern U, 3 [symbolic = %U.patt.loc17_9.2 (constants.%U.patt.637)] +// CHECK:STDOUT: %u.param_patt.loc17_19.1: @tuple.type.as.A.impl.F.%pattern_type.loc17_19 (%pattern_type.e4a) = value_param_pattern [symbolic = %u.param_patt.loc17_19.2 (constants.%u.param_patt.afe)] +// CHECK:STDOUT: %u.patt.loc17_19.1: @tuple.type.as.A.impl.F.%pattern_type.loc17_19 (%pattern_type.e4a) = at_binding_pattern u, %u.param_patt.loc17_19.1 [symbolic = %u.patt.loc17_19.2 (constants.%u.patt.e63)] +// CHECK:STDOUT: %return.param_patt.loc17_42.1: @tuple.type.as.A.impl.F.%pattern_type.loc17_42 (%pattern_type.5cc) = out_param_pattern [symbolic = %return.param_patt.loc17_42.2 (constants.%return.param_patt.b1c)] +// CHECK:STDOUT: %return.patt.loc17_24.1: @tuple.type.as.A.impl.F.%pattern_type.loc17_42 (%pattern_type.5cc) = return_slot_pattern %return.param_patt.loc17_42.1, %.loc17_42.5 [symbolic = %return.patt.loc17_24.2 (constants.%return.patt.bad9)] // CHECK:STDOUT: } { // CHECK:STDOUT: %W.ref: type = name_ref W, @tuple.type.as.A.impl.%W.loc14_37.2 [symbolic = %W (constants.%W)] // CHECK:STDOUT: %V1.ref: type = name_ref V1, @tuple.type.as.A.impl.%V1.loc14_16.2 [symbolic = %V1 (constants.%V1)] @@ -1190,8 +1285,11 @@ fn CallIndirect() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @A.WithSelf.F(@A.%T.loc5_14.2: type, @A.%Self.loc5_23.1: @A.%A.type (%A.type.acd), %U.loc6_9.2: type) { +// CHECK:STDOUT: %U.patt.loc6_9.2: %pattern_type.98f = symbolic_binding_pattern U, 2 [symbolic = %U.patt.loc6_9.2 (constants.%U.patt.b22)] // CHECK:STDOUT: %U.loc6_9.1: type = symbolic_binding U, 2 [symbolic = %U.loc6_9.1 (constants.%U.4e7)] // CHECK:STDOUT: %pattern_type.loc6_19: type = pattern_type %U.loc6_9.1 [symbolic = %pattern_type.loc6_19 (constants.%pattern_type.62e)] +// CHECK:STDOUT: %u.param_patt.loc6_19.2: @A.WithSelf.F.%pattern_type.loc6_19 (%pattern_type.62e) = value_param_pattern [symbolic = %u.param_patt.loc6_19.2 (constants.%u.param_patt.6ef)] +// CHECK:STDOUT: %u.patt.loc6_19.2: @A.WithSelf.F.%pattern_type.loc6_19 (%pattern_type.62e) = at_binding_pattern u, %u.param_patt.loc6_19.2 [symbolic = %u.patt.loc6_19.2 (constants.%u.patt.8af)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T.67d)] // CHECK:STDOUT: %A.type: type = facet_type <@A, @A(%T)> [symbolic = %A.type (constants.%A.type.acd)] // CHECK:STDOUT: %Self: @A.WithSelf.F.%A.type (%A.type.acd) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self.49a)] @@ -1201,13 +1299,18 @@ fn CallIndirect() { // CHECK:STDOUT: %tuple.type.loc6_38.2: type = tuple_type (%T, %Self.as_type.loc6_38.1, %U.loc6_9.1) [symbolic = %tuple.type.loc6_38.2 (constants.%tuple.type.d73)] // CHECK:STDOUT: %.loc6_38.1: Core.Form = init_form %tuple.type.loc6_38.2 [symbolic = %.loc6_38.1 (constants.%.bc3)] // CHECK:STDOUT: %pattern_type.loc6_38: type = pattern_type %tuple.type.loc6_38.2 [symbolic = %pattern_type.loc6_38 (constants.%pattern_type.d6c)] +// CHECK:STDOUT: %return.param_patt.loc6_38.2: @A.WithSelf.F.%pattern_type.loc6_38 (%pattern_type.d6c) = out_param_pattern [symbolic = %return.param_patt.loc6_38.2 (constants.%return.param_patt.52a)] +// CHECK:STDOUT: %return.patt.loc6_24.2: @A.WithSelf.F.%pattern_type.loc6_38 (%pattern_type.d6c) = return_slot_pattern %return.param_patt.loc6_38.2, %tuple.type.loc6_38.2 [symbolic = %return.patt.loc6_24.2 (constants.%return.patt.808)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%u.param: @A.WithSelf.F.%U.loc6_9.1 (%U.4e7)) -> out %return.param: @A.WithSelf.F.%tuple.type.loc6_38.2 (%tuple.type.d73); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @tuple.type.as.A.impl.F(@tuple.type.as.A.impl.%V1.loc14_16.2: type, @tuple.type.as.A.impl.%V2.loc14_27.2: type, @tuple.type.as.A.impl.%W.loc14_37.2: type, %U.loc17_9.2: type) { +// CHECK:STDOUT: %U.patt.loc17_9.2: %pattern_type.98f = symbolic_binding_pattern U, 3 [symbolic = %U.patt.loc17_9.2 (constants.%U.patt.637)] // CHECK:STDOUT: %U.loc17_9.1: type = symbolic_binding U, 3 [symbolic = %U.loc17_9.1 (constants.%U.ce4)] // CHECK:STDOUT: %pattern_type.loc17_19: type = pattern_type %U.loc17_9.1 [symbolic = %pattern_type.loc17_19 (constants.%pattern_type.e4a)] +// CHECK:STDOUT: %u.param_patt.loc17_19.2: @tuple.type.as.A.impl.F.%pattern_type.loc17_19 (%pattern_type.e4a) = value_param_pattern [symbolic = %u.param_patt.loc17_19.2 (constants.%u.param_patt.afe)] +// CHECK:STDOUT: %u.patt.loc17_19.2: @tuple.type.as.A.impl.F.%pattern_type.loc17_19 (%pattern_type.e4a) = at_binding_pattern u, %u.param_patt.loc17_19.2 [symbolic = %u.patt.loc17_19.2 (constants.%u.patt.e63)] // CHECK:STDOUT: %W: type = symbolic_binding W, 2 [symbolic = %W (constants.%W)] // CHECK:STDOUT: %V1: type = symbolic_binding V1, 0 [symbolic = %V1 (constants.%V1)] // CHECK:STDOUT: %V2: type = symbolic_binding V2, 1 [symbolic = %V2 (constants.%V2)] @@ -1217,6 +1320,8 @@ fn CallIndirect() { // CHECK:STDOUT: %tuple.type.loc17_42.2: type = tuple_type (%W, %tuple.type.loc17_42.1, %U.loc17_9.1) [symbolic = %tuple.type.loc17_42.2 (constants.%tuple.type.897)] // CHECK:STDOUT: %.loc17_42.2: Core.Form = init_form %tuple.type.loc17_42.2 [symbolic = %.loc17_42.2 (constants.%.f8e)] // CHECK:STDOUT: %pattern_type.loc17_42: type = pattern_type %tuple.type.loc17_42.2 [symbolic = %pattern_type.loc17_42 (constants.%pattern_type.5cc)] +// CHECK:STDOUT: %return.param_patt.loc17_42.2: @tuple.type.as.A.impl.F.%pattern_type.loc17_42 (%pattern_type.5cc) = out_param_pattern [symbolic = %return.param_patt.loc17_42.2 (constants.%return.param_patt.b1c)] +// CHECK:STDOUT: %return.patt.loc17_24.2: @tuple.type.as.A.impl.F.%pattern_type.loc17_42 (%pattern_type.5cc) = return_slot_pattern %return.param_patt.loc17_42.2, %tuple.type.loc17_42.2 [symbolic = %return.patt.loc17_24.2 (constants.%return.patt.bad9)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc17_19: = require_complete_type %U.loc17_9.1 [symbolic = %require_complete.loc17_19 (constants.%require_complete.5a4)] @@ -1305,6 +1410,7 @@ fn CallIndirect() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @CallGeneric(%T.loc27_17.2: %facet_type) { +// CHECK:STDOUT: %T.patt.loc27_17.2: %pattern_type.871 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc27_17.2 (constants.%T.patt.c17)] // CHECK:STDOUT: %T.loc27_17.1: %facet_type = symbolic_binding T, 0 [symbolic = %T.loc27_17.1 (constants.%T.5b7)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1318,11 +1424,11 @@ fn CallIndirect() { // CHECK:STDOUT: %tuple.type: type = tuple_type (constants.%X, %T.as_type.loc28_4.2, constants.%Z) [symbolic = %tuple.type (constants.%tuple.type.036)] // CHECK:STDOUT: %require_complete: = require_complete_type %tuple.type [symbolic = %require_complete (constants.%require_complete.4e1)] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %tuple.type, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness.8dc)] -// CHECK:STDOUT: %Destroy.facet.loc28_12.2: %Destroy.type = facet_value %tuple.type, (%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.loc28_12.2 (constants.%Destroy.facet.fef)] -// CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.loc28_12.2) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.937)] -// CHECK:STDOUT: %.loc28_12.4: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Destroy.facet.loc28_12.2 [symbolic = %.loc28_12.4 (constants.%.93b)] -// CHECK:STDOUT: %impl.elem0.loc28_12.2: @CallGeneric.%.loc28_12.4 (%.93b) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc28_12.2 (constants.%impl.elem0.743)] -// CHECK:STDOUT: %specific_impl_fn.loc28_12.2: = specific_impl_function %impl.elem0.loc28_12.2, @Destroy.WithSelf.Op(%Destroy.facet.loc28_12.2) [symbolic = %specific_impl_fn.loc28_12.2 (constants.%specific_impl_fn.618)] +// CHECK:STDOUT: %Destroy.facet.loc28_12.3: %Destroy.type = facet_value %tuple.type, (%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.loc28_12.3 (constants.%Destroy.facet.fef)] +// CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.loc28_12.3) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.937)] +// CHECK:STDOUT: %.loc28_12.5: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Destroy.facet.loc28_12.3 [symbolic = %.loc28_12.5 (constants.%.93b)] +// CHECK:STDOUT: %impl.elem0.loc28_12.2: @CallGeneric.%.loc28_12.5 (%.93b) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc28_12.2 (constants.%impl.elem0.743)] +// CHECK:STDOUT: %specific_impl_fn.loc28_12.2: = specific_impl_function %impl.elem0.loc28_12.2, @Destroy.WithSelf.Op(%Destroy.facet.loc28_12.3) [symbolic = %specific_impl_fn.loc28_12.2 (constants.%specific_impl_fn.618)] // CHECK:STDOUT: // CHECK:STDOUT: fn() { // CHECK:STDOUT: !entry: @@ -1343,10 +1449,12 @@ fn CallIndirect() { // CHECK:STDOUT: %.loc28_11.6: %Z = acquire_value %.loc28_11.5 [concrete = constants.%Z.val] // CHECK:STDOUT: %A.WithSelf.F.call: init @CallGeneric.%tuple.type (%tuple.type.036) to %.loc28_12.1 = call %specific_impl_fn.loc28_4.1(%.loc28_11.6) // CHECK:STDOUT: %.loc28_12.2: ref @CallGeneric.%tuple.type (%tuple.type.036) = temporary %.loc28_12.1, %A.WithSelf.F.call -// CHECK:STDOUT: %impl.elem0.loc28_12.1: @CallGeneric.%.loc28_12.4 (%.93b) = impl_witness_access constants.%Destroy.lookup_impl_witness.8dc, element0 [symbolic = %impl.elem0.loc28_12.2 (constants.%impl.elem0.743)] +// CHECK:STDOUT: %impl.elem0.loc28_12.1: @CallGeneric.%.loc28_12.5 (%.93b) = impl_witness_access constants.%Destroy.lookup_impl_witness.8dc, element0 [symbolic = %impl.elem0.loc28_12.2 (constants.%impl.elem0.743)] // CHECK:STDOUT: %bound_method.loc28_12.1: = bound_method %.loc28_12.2, %impl.elem0.loc28_12.1 -// CHECK:STDOUT: %Destroy.facet.loc28_12.1: %Destroy.type = facet_value constants.%tuple.type.036, (constants.%Destroy.lookup_impl_witness.8dc) [symbolic = %Destroy.facet.loc28_12.2 (constants.%Destroy.facet.fef)] -// CHECK:STDOUT: %.loc28_12.3: %Destroy.type = converted constants.%tuple.type.036, %Destroy.facet.loc28_12.1 [symbolic = %Destroy.facet.loc28_12.2 (constants.%Destroy.facet.fef)] +// CHECK:STDOUT: %Destroy.facet.loc28_12.1: %Destroy.type = facet_value constants.%tuple.type.036, (constants.%Destroy.lookup_impl_witness.8dc) [symbolic = %Destroy.facet.loc28_12.3 (constants.%Destroy.facet.fef)] +// CHECK:STDOUT: %.loc28_12.3: %Destroy.type = converted constants.%tuple.type.036, %Destroy.facet.loc28_12.1 [symbolic = %Destroy.facet.loc28_12.3 (constants.%Destroy.facet.fef)] +// CHECK:STDOUT: %Destroy.facet.loc28_12.2: %Destroy.type = facet_value constants.%tuple.type.036, (constants.%Destroy.lookup_impl_witness.8dc) [symbolic = %Destroy.facet.loc28_12.3 (constants.%Destroy.facet.fef)] +// CHECK:STDOUT: %.loc28_12.4: %Destroy.type = converted constants.%tuple.type.036, %Destroy.facet.loc28_12.2 [symbolic = %Destroy.facet.loc28_12.3 (constants.%Destroy.facet.fef)] // CHECK:STDOUT: %specific_impl_fn.loc28_12.1: = specific_impl_function %impl.elem0.loc28_12.1, @Destroy.WithSelf.Op(constants.%Destroy.facet.fef) [symbolic = %specific_impl_fn.loc28_12.2 (constants.%specific_impl_fn.618)] // CHECK:STDOUT: %bound_method.loc28_12.2: = bound_method %.loc28_12.2, %specific_impl_fn.loc28_12.1 // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc28_12.2(%.loc28_12.2) @@ -1371,14 +1479,18 @@ fn CallIndirect() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A(constants.%T.67d) { +// CHECK:STDOUT: %T.patt.loc5_14.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc5_14.1 => constants.%T.67d // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A.WithSelf(constants.%T.67d, constants.%Self.49a) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @A.WithSelf.F(constants.%T.67d, constants.%Self.49a, constants.%U.4e7) { +// CHECK:STDOUT: %U.patt.loc6_9.2 => constants.%U.patt.b22 // CHECK:STDOUT: %U.loc6_9.1 => constants.%U.4e7 // CHECK:STDOUT: %pattern_type.loc6_19 => constants.%pattern_type.62e +// CHECK:STDOUT: %u.param_patt.loc6_19.2 => constants.%u.param_patt.6ef +// CHECK:STDOUT: %u.patt.loc6_19.2 => constants.%u.patt.8af // CHECK:STDOUT: %T => constants.%T.67d // CHECK:STDOUT: %A.type => constants.%A.type.acd // CHECK:STDOUT: %Self => constants.%Self.49a @@ -1388,9 +1500,12 @@ fn CallIndirect() { // CHECK:STDOUT: %tuple.type.loc6_38.2 => constants.%tuple.type.d73 // CHECK:STDOUT: %.loc6_38.1 => constants.%.bc3 // CHECK:STDOUT: %pattern_type.loc6_38 => constants.%pattern_type.d6c +// CHECK:STDOUT: %return.param_patt.loc6_38.2 => constants.%return.param_patt.52a +// CHECK:STDOUT: %return.patt.loc6_24.2 => constants.%return.patt.808 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A(constants.%W) { +// CHECK:STDOUT: %T.patt.loc5_14.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc5_14.1 => constants.%W // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1399,8 +1514,11 @@ fn CallIndirect() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @tuple.type.as.A.impl(constants.%V1, constants.%V2, constants.%W) { +// CHECK:STDOUT: %V1.patt.loc14_16.2 => constants.%V1.patt // CHECK:STDOUT: %V1.loc14_16.1 => constants.%V1 +// CHECK:STDOUT: %V2.patt.loc14_27.2 => constants.%V2.patt // CHECK:STDOUT: %V2.loc14_27.1 => constants.%V2 +// CHECK:STDOUT: %W.patt.loc14_37.2 => constants.%W.patt // CHECK:STDOUT: %W.loc14_37.1 => constants.%W // CHECK:STDOUT: %tuple => constants.%tuple.4b9 // CHECK:STDOUT: %tuple.type => constants.%tuple.type.a5e @@ -1425,8 +1543,11 @@ fn CallIndirect() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @tuple.type.as.A.impl.F(constants.%V1, constants.%V2, constants.%W, constants.%U.ce4) { +// CHECK:STDOUT: %U.patt.loc17_9.2 => constants.%U.patt.637 // CHECK:STDOUT: %U.loc17_9.1 => constants.%U.ce4 // CHECK:STDOUT: %pattern_type.loc17_19 => constants.%pattern_type.e4a +// CHECK:STDOUT: %u.param_patt.loc17_19.2 => constants.%u.param_patt.afe +// CHECK:STDOUT: %u.patt.loc17_19.2 => constants.%u.patt.e63 // CHECK:STDOUT: %W => constants.%W // CHECK:STDOUT: %V1 => constants.%V1 // CHECK:STDOUT: %V2 => constants.%V2 @@ -1436,6 +1557,8 @@ fn CallIndirect() { // CHECK:STDOUT: %tuple.type.loc17_42.2 => constants.%tuple.type.897 // CHECK:STDOUT: %.loc17_42.2 => constants.%.f8e // CHECK:STDOUT: %pattern_type.loc17_42 => constants.%pattern_type.5cc +// CHECK:STDOUT: %return.param_patt.loc17_42.2 => constants.%return.param_patt.b1c +// CHECK:STDOUT: %return.patt.loc17_24.2 => constants.%return.patt.bad9 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc17_19 => constants.%require_complete.5a4 @@ -1457,8 +1580,11 @@ fn CallIndirect() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A.WithSelf.F(constants.%W, constants.%A.facet.ab0, constants.%U.ce4) { +// CHECK:STDOUT: %U.patt.loc6_9.2 => constants.%U.patt.b22 // CHECK:STDOUT: %U.loc6_9.1 => constants.%U.ce4 // CHECK:STDOUT: %pattern_type.loc6_19 => constants.%pattern_type.e4a +// CHECK:STDOUT: %u.param_patt.loc6_19.2 => constants.%u.param_patt.afe +// CHECK:STDOUT: %u.patt.loc6_19.2 => constants.%u.patt.e63 // CHECK:STDOUT: %T => constants.%W // CHECK:STDOUT: %A.type => constants.%A.type.3ad // CHECK:STDOUT: %Self => constants.%A.facet.ab0 @@ -1468,9 +1594,12 @@ fn CallIndirect() { // CHECK:STDOUT: %tuple.type.loc6_38.2 => constants.%tuple.type.897 // CHECK:STDOUT: %.loc6_38.1 => constants.%.f8e // CHECK:STDOUT: %pattern_type.loc6_38 => constants.%pattern_type.5cc +// CHECK:STDOUT: %return.param_patt.loc6_38.2 => constants.%return.param_patt.b1c +// CHECK:STDOUT: %return.patt.loc6_24.2 => constants.%return.patt.bad9 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A(constants.%X) { +// CHECK:STDOUT: %T.patt.loc5_14.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc5_14.1 => constants.%X // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1479,8 +1608,11 @@ fn CallIndirect() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @tuple.type.as.A.impl(constants.%Y1, constants.%Y2, constants.%X) { +// CHECK:STDOUT: %V1.patt.loc14_16.2 => constants.%V1.patt // CHECK:STDOUT: %V1.loc14_16.1 => constants.%Y1 +// CHECK:STDOUT: %V2.patt.loc14_27.2 => constants.%V2.patt // CHECK:STDOUT: %V2.loc14_27.1 => constants.%Y2 +// CHECK:STDOUT: %W.patt.loc14_37.2 => constants.%W.patt // CHECK:STDOUT: %W.loc14_37.1 => constants.%X // CHECK:STDOUT: %tuple => constants.%tuple.8db // CHECK:STDOUT: %tuple.type => constants.%tuple.type.59f @@ -1516,8 +1648,11 @@ fn CallIndirect() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @tuple.type.as.A.impl.F(constants.%Y1, constants.%Y2, constants.%X, constants.%Z) { +// CHECK:STDOUT: %U.patt.loc17_9.2 => constants.%U.patt.637 // CHECK:STDOUT: %U.loc17_9.1 => constants.%Z // CHECK:STDOUT: %pattern_type.loc17_19 => constants.%pattern_type.34e +// CHECK:STDOUT: %u.param_patt.loc17_19.2 => constants.%u.param_patt.a3e +// CHECK:STDOUT: %u.patt.loc17_19.2 => constants.%u.patt.a51 // CHECK:STDOUT: %W => constants.%X // CHECK:STDOUT: %V1 => constants.%Y1 // CHECK:STDOUT: %V2 => constants.%Y2 @@ -1527,6 +1662,8 @@ fn CallIndirect() { // CHECK:STDOUT: %tuple.type.loc17_42.2 => constants.%tuple.type.d40 // CHECK:STDOUT: %.loc17_42.2 => constants.%.1a9 // CHECK:STDOUT: %pattern_type.loc17_42 => constants.%pattern_type.6a8 +// CHECK:STDOUT: %return.param_patt.loc17_42.2 => constants.%return.param_patt.fb7 +// CHECK:STDOUT: %return.patt.loc17_24.2 => constants.%return.patt.badc // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc17_19 => constants.%complete_type.357 @@ -1537,6 +1674,7 @@ fn CallIndirect() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @CallGeneric(constants.%T.5b7) { +// CHECK:STDOUT: %T.patt.loc27_17.2 => constants.%T.patt.c17 // CHECK:STDOUT: %T.loc27_17.1 => constants.%T.5b7 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1563,8 +1701,11 @@ fn CallIndirect() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A.WithSelf.F(constants.%X, constants.%A.facet.318, constants.%Z) { +// CHECK:STDOUT: %U.patt.loc6_9.2 => constants.%U.patt.b22 // CHECK:STDOUT: %U.loc6_9.1 => constants.%Z // CHECK:STDOUT: %pattern_type.loc6_19 => constants.%pattern_type.34e +// CHECK:STDOUT: %u.param_patt.loc6_19.2 => constants.%u.param_patt.a3e +// CHECK:STDOUT: %u.patt.loc6_19.2 => constants.%u.patt.a51 // CHECK:STDOUT: %T => constants.%X // CHECK:STDOUT: %A.type => constants.%A.type.df0 // CHECK:STDOUT: %Self => constants.%A.facet.318 @@ -1574,9 +1715,12 @@ fn CallIndirect() { // CHECK:STDOUT: %tuple.type.loc6_38.2 => constants.%tuple.type.036 // CHECK:STDOUT: %.loc6_38.1 => constants.%.772 // CHECK:STDOUT: %pattern_type.loc6_38 => constants.%pattern_type.8f9 +// CHECK:STDOUT: %return.param_patt.loc6_38.2 => constants.%return.param_patt.cc2 +// CHECK:STDOUT: %return.patt.loc6_24.2 => constants.%return.patt.eed // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @CallGeneric(constants.%facet_value) { +// CHECK:STDOUT: %T.patt.loc27_17.2 => constants.%T.patt.c17 // CHECK:STDOUT: %T.loc27_17.1 => constants.%facet_value // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1590,16 +1734,19 @@ fn CallIndirect() { // CHECK:STDOUT: %tuple.type => constants.%tuple.type.d40 // CHECK:STDOUT: %require_complete => constants.%complete_type.8f6 // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.df9cc1.7 -// CHECK:STDOUT: %Destroy.facet.loc28_12.2 => constants.%Destroy.facet.50b +// CHECK:STDOUT: %Destroy.facet.loc28_12.3 => constants.%Destroy.facet.50b // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.43f -// CHECK:STDOUT: %.loc28_12.4 => constants.%.3d3 +// CHECK:STDOUT: %.loc28_12.5 => constants.%.3d3 // CHECK:STDOUT: %impl.elem0.loc28_12.2 => constants.%Destroy.Op.1a2547.7 // CHECK:STDOUT: %specific_impl_fn.loc28_12.2 => constants.%Destroy.Op.1a2547.7 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A.WithSelf.F(constants.%X, constants.%A.facet.682, constants.%Z) { +// CHECK:STDOUT: %U.patt.loc6_9.2 => constants.%U.patt.b22 // CHECK:STDOUT: %U.loc6_9.1 => constants.%Z // CHECK:STDOUT: %pattern_type.loc6_19 => constants.%pattern_type.34e +// CHECK:STDOUT: %u.param_patt.loc6_19.2 => constants.%u.param_patt.a3e +// CHECK:STDOUT: %u.patt.loc6_19.2 => constants.%u.patt.a51 // CHECK:STDOUT: %T => constants.%X // CHECK:STDOUT: %A.type => constants.%A.type.df0 // CHECK:STDOUT: %Self => constants.%A.facet.682 @@ -1609,5 +1756,7 @@ fn CallIndirect() { // CHECK:STDOUT: %tuple.type.loc6_38.2 => constants.%tuple.type.d40 // CHECK:STDOUT: %.loc6_38.1 => constants.%.1a9 // CHECK:STDOUT: %pattern_type.loc6_38 => constants.%pattern_type.6a8 +// CHECK:STDOUT: %return.param_patt.loc6_38.2 => constants.%return.param_patt.fb7 +// CHECK:STDOUT: %return.patt.loc6_24.2 => constants.%return.patt.badc // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/generic_vs_params.carbon b/toolchain/check/testdata/interface/generic_vs_params.carbon index fc694c232d06..abe314246669 100644 --- a/toolchain/check/testdata/interface/generic_vs_params.carbon +++ b/toolchain/check/testdata/interface/generic_vs_params.carbon @@ -84,6 +84,7 @@ interface Bar[T:! type] {} // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %GenericAndParams.type.23f: type = generic_interface_type @GenericAndParams.loc6 [concrete] // CHECK:STDOUT: %GenericAndParams.generic.504: %GenericAndParams.type.23f = struct_value () [concrete] @@ -94,6 +95,7 @@ interface Bar[T:! type] {} // CHECK:STDOUT: %C.1d0: type = class_type @C, @C(%T) [symbolic] // CHECK:STDOUT: %GenericNoParams.type.3f5: type = facet_type <@GenericNoParams, @GenericNoParams(%T)> [symbolic] // CHECK:STDOUT: %Self.417: %GenericNoParams.type.3f5 = symbolic_binding Self, 1 [symbolic] +// CHECK:STDOUT: %U.patt: %pattern_type = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %U: type = symbolic_binding U, 1 [symbolic] // CHECK:STDOUT: %GenericAndParams.type.c43: type = generic_interface_type @GenericAndParams.loc10, @C(%T) [symbolic] // CHECK:STDOUT: %GenericAndParams.generic.079: %GenericAndParams.type.c43 = struct_value () [symbolic] @@ -134,7 +136,7 @@ interface Bar[T:! type] {} // CHECK:STDOUT: %NotGenericNoParams.decl: type = interface_decl @NotGenericNoParams [concrete = constants.%NotGenericNoParams.type] {} {} // CHECK:STDOUT: %NotGenericButParams.decl: %NotGenericButParams.type.2fe = interface_decl @NotGenericButParams [concrete = constants.%NotGenericButParams.generic] {} {} // CHECK:STDOUT: %GenericAndParams.decl: %GenericAndParams.type.23f = interface_decl @GenericAndParams.loc6 [concrete = constants.%GenericAndParams.generic.504] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc6_29.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_29.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6_32.1: type = splice_block %.loc6_32.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -143,7 +145,7 @@ interface Bar[T:! type] {} // CHECK:STDOUT: %T.loc6_29.2: type = symbolic_binding T, 0 [symbolic = %T.loc6_29.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc8_10.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_10.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8_13.1: type = splice_block %.loc8_13.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -210,6 +212,7 @@ interface Bar[T:! type] {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @GenericAndParams.loc6(%T.loc6_29.2: type) { +// CHECK:STDOUT: %T.patt.loc6_29.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_29.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc6_29.1: type = symbolic_binding T, 0 [symbolic = %T.loc6_29.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -247,6 +250,7 @@ interface Bar[T:! type] {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @GenericAndParams.loc10(@C.%T.loc8_10.2: type, %U.loc10_31.2: type) { +// CHECK:STDOUT: %U.patt.loc10_31.2: %pattern_type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc10_31.2 (constants.%U.patt)] // CHECK:STDOUT: %U.loc10_31.1: type = symbolic_binding U, 1 [symbolic = %U.loc10_31.1 (constants.%U)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -312,6 +316,7 @@ interface Bar[T:! type] {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc8_10.2: type) { +// CHECK:STDOUT: %T.patt.loc8_10.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_10.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc8_10.1: type = symbolic_binding T, 0 [symbolic = %T.loc8_10.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -322,7 +327,7 @@ interface Bar[T:! type] {} // CHECK:STDOUT: class { // CHECK:STDOUT: %GenericNoParams.decl: type = interface_decl @GenericNoParams [symbolic = @C.%GenericNoParams.type (constants.%GenericNoParams.type.3f5)] {} {} // CHECK:STDOUT: %GenericAndParams.decl: @C.%GenericAndParams.type (%GenericAndParams.type.c43) = interface_decl @GenericAndParams.loc10 [symbolic = @C.%GenericAndParams.generic (constants.%GenericAndParams.generic.079)] { -// CHECK:STDOUT: %U.patt: %pattern_type = symbolic_binding_pattern U, 1 [concrete] +// CHECK:STDOUT: %U.patt.loc10_31.1: %pattern_type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc10_31.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc10_34.1: type = splice_block %.loc10_34.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -357,12 +362,14 @@ interface Bar[T:! type] {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @GenericAndParams.loc6(constants.%T) { +// CHECK:STDOUT: %T.patt.loc6_29.2 => constants.%T.patt // CHECK:STDOUT: %T.loc6_29.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @GenericAndParams.WithSelf.loc6(constants.%T, constants.%Self.cda) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%T) { +// CHECK:STDOUT: %T.patt.loc8_10.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_10.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -371,6 +378,7 @@ interface Bar[T:! type] {} // CHECK:STDOUT: specific @GenericNoParams.WithSelf(constants.%T, constants.%Self.417) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @GenericAndParams.loc10(constants.%T, constants.%U) { +// CHECK:STDOUT: %U.patt.loc10_31.2 => constants.%U.patt // CHECK:STDOUT: %U.loc10_31.1 => constants.%U // CHECK:STDOUT: } // CHECK:STDOUT: @@ -385,6 +393,7 @@ interface Bar[T:! type] {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @GenericAndParams.loc6(constants.%X) { +// CHECK:STDOUT: %T.patt.loc6_29.2 => constants.%T.patt // CHECK:STDOUT: %T.loc6_29.1 => constants.%X // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -401,6 +410,7 @@ interface Bar[T:! type] {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%X) { +// CHECK:STDOUT: %T.patt.loc8_10.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_10.1 => constants.%X // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -425,6 +435,7 @@ interface Bar[T:! type] {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @GenericAndParams.loc10(constants.%X, constants.%X) { +// CHECK:STDOUT: %U.patt.loc10_31.2 => constants.%U.patt // CHECK:STDOUT: %U.loc10_31.1 => constants.%X // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -534,6 +545,7 @@ interface Bar[T:! type] {} // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Bar.type.3f0: type = generic_interface_type @Bar [concrete] // CHECK:STDOUT: %Bar.generic: %Bar.type.3f0 = struct_value () [concrete] @@ -546,7 +558,7 @@ interface Bar[T:! type] {} // CHECK:STDOUT: .Bar = %Bar.decl // CHECK:STDOUT: } // CHECK:STDOUT: %Bar.decl: %Bar.type.3f0 = interface_decl @Bar [concrete = constants.%Bar.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc8_16.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_16.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8_19.1: type = splice_block %.loc8_19.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -557,6 +569,7 @@ interface Bar[T:! type] {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Bar(%T.loc8_16.2: type) { +// CHECK:STDOUT: %T.patt.loc8_16.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_16.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc8_16.1: type = symbolic_binding T, 0 [symbolic = %T.loc8_16.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -576,6 +589,7 @@ interface Bar[T:! type] {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Bar(constants.%T) { +// CHECK:STDOUT: %T.patt.loc8_16.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_16.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/import.carbon b/toolchain/check/testdata/interface/import.carbon index 678f03af246d..6d5a11f7e263 100644 --- a/toolchain/check/testdata/interface/import.carbon +++ b/toolchain/check/testdata/interface/import.carbon @@ -73,6 +73,8 @@ var f: ForwardDeclared* = &f_ref.f; // CHECK:STDOUT: %assoc1.e3d: %ForwardDeclared.assoc_type = assoc_entity element1, @ForwardDeclared.WithSelf.%ForwardDeclared.WithSelf.F.decl [concrete] // CHECK:STDOUT: %struct_type.f: type = struct_type {.f: %ForwardDeclared.type} [concrete] // CHECK:STDOUT: %pattern_type.1c1: type = pattern_type %struct_type.f [concrete] +// CHECK:STDOUT: %f_ref.patt: %pattern_type.1c1 = ref_binding_pattern f_ref [concrete] +// CHECK:STDOUT: %f_ref.var_patt: %pattern_type.1c1 = var_pattern %f_ref.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.150: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] @@ -108,8 +110,8 @@ var f: ForwardDeclared* = &f_ref.f; // CHECK:STDOUT: %Basic.decl: type = interface_decl @Basic [concrete = constants.%Basic.type] {} {} // CHECK:STDOUT: %ForwardDeclared.decl: type = interface_decl @ForwardDeclared [concrete = constants.%ForwardDeclared.type] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %f_ref.patt: %pattern_type.1c1 = ref_binding_pattern f_ref [concrete] -// CHECK:STDOUT: %f_ref.var_patt: %pattern_type.1c1 = var_pattern %f_ref.patt [concrete] +// CHECK:STDOUT: %f_ref.patt: %pattern_type.1c1 = ref_binding_pattern f_ref [concrete = constants.%f_ref.patt] +// CHECK:STDOUT: %f_ref.var_patt: %pattern_type.1c1 = var_pattern %f_ref.patt [concrete = constants.%f_ref.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %f_ref.var: ref %struct_type.f = var %f_ref.var_patt [concrete] // CHECK:STDOUT: %.loc20: type = splice_block %struct_type.f [concrete = constants.%struct_type.f] { @@ -211,6 +213,8 @@ var f: ForwardDeclared* = &f_ref.f; // CHECK:STDOUT: %Empty.type: type = facet_type <@Empty> [concrete] // CHECK:STDOUT: %Self.4e8: %Empty.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %pattern_type.894: type = pattern_type %Empty.type [concrete] +// CHECK:STDOUT: %e.param_patt.a16: %pattern_type.894 = value_param_pattern [concrete] +// CHECK:STDOUT: %e.patt.2d7: %pattern_type.894 = at_binding_pattern e, %e.param_patt.a16 [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] @@ -218,6 +222,8 @@ var f: ForwardDeclared* = &f_ref.f; // CHECK:STDOUT: %Basic.WithSelf.F.type: type = fn_type @Basic.WithSelf.F, @Basic.WithSelf(%Self.a33) [symbolic] // CHECK:STDOUT: %Basic.WithSelf.F: %Basic.WithSelf.F.type = struct_value () [symbolic] // CHECK:STDOUT: %pattern_type.7fe: type = pattern_type %Basic.type [concrete] +// CHECK:STDOUT: %e.param_patt.7a3: %pattern_type.7fe = value_param_pattern [concrete] +// CHECK:STDOUT: %e.patt.cd2: %pattern_type.7fe = at_binding_pattern e, %e.param_patt.7a3 [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] @@ -225,6 +231,8 @@ var f: ForwardDeclared* = &f_ref.f; // CHECK:STDOUT: %ForwardDeclared.WithSelf.F.type: type = fn_type @ForwardDeclared.WithSelf.F, @ForwardDeclared.WithSelf(%Self.603) [symbolic] // CHECK:STDOUT: %ForwardDeclared.WithSelf.F: %ForwardDeclared.WithSelf.F.type = struct_value () [symbolic] // CHECK:STDOUT: %pattern_type.566: type = pattern_type %ForwardDeclared.type [concrete] +// CHECK:STDOUT: %f.param_patt: %pattern_type.566 = value_param_pattern [concrete] +// CHECK:STDOUT: %f.patt.8a1: %pattern_type.566 = at_binding_pattern f, %f.param_patt [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] @@ -235,8 +243,12 @@ var f: ForwardDeclared* = &f_ref.f; // CHECK:STDOUT: %assoc1.c68: %ForwardDeclared.assoc_type = assoc_entity element1, imports.%Main.import_ref.e95 [concrete] // CHECK:STDOUT: %ptr.b71: type = ptr_type %ForwardDeclared.type [concrete] // CHECK:STDOUT: %pattern_type.7a7: type = pattern_type %ptr.b71 [concrete] +// CHECK:STDOUT: %f.patt.752: %pattern_type.7a7 = ref_binding_pattern f [concrete] +// CHECK:STDOUT: %f.var_patt: %pattern_type.7a7 = var_pattern %f.patt.752 [concrete] // CHECK:STDOUT: %struct_type.f: type = struct_type {.f: %ForwardDeclared.type} [concrete] // CHECK:STDOUT: %pattern_type.1c1: type = pattern_type %struct_type.f [concrete] +// CHECK:STDOUT: %f_ref.patt: %pattern_type.1c1 = ref_binding_pattern f_ref [concrete] +// CHECK:STDOUT: %f_ref.var_patt: %pattern_type.1c1 = var_pattern %f_ref.patt [concrete] // CHECK:STDOUT: %.81b: ref %ForwardDeclared.type = struct_access imports.%f_ref.var, element0 [concrete] // CHECK:STDOUT: %addr: %ptr.b71 = addr_of %.81b [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -281,9 +293,7 @@ var f: ForwardDeclared* = &f_ref.f; // CHECK:STDOUT: %Main.import_ref.3c9 = import_ref Main//a, loc9_9, unloaded // CHECK:STDOUT: %Main.import_ref.643 = import_ref Main//a, loc16_8, unloaded // CHECK:STDOUT: %Main.import_ref.e95 = import_ref Main//a, loc17_9, unloaded -// CHECK:STDOUT: %f_ref.patt: %pattern_type.1c1 = ref_binding_pattern f_ref [concrete] -// CHECK:STDOUT: %f_ref.var_patt: %pattern_type.1c1 = var_pattern %f_ref.patt [concrete] -// CHECK:STDOUT: %f_ref.var: ref %struct_type.f = var %f_ref.var_patt [concrete] +// CHECK:STDOUT: %f_ref.var: ref %struct_type.f = var constants.%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.e5f: @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op.type (%ptr.as.Copy.impl.Op.type.ff5) = 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.ce9)] // CHECK:STDOUT: %Copy.impl_witness_table.4f1 = impl_witness_table (%Core.import_ref.e5f), @ptr.as.Copy.impl [concrete] @@ -308,24 +318,24 @@ var f: ForwardDeclared* = &f_ref.f; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %UseEmpty.decl: %UseEmpty.type = fn_decl @UseEmpty [concrete = constants.%UseEmpty] { -// CHECK:STDOUT: %e.param_patt: %pattern_type.894 = value_param_pattern [concrete] -// CHECK:STDOUT: %e.patt: %pattern_type.894 = at_binding_pattern e, %e.param_patt [concrete] +// CHECK:STDOUT: %e.param_patt: %pattern_type.894 = value_param_pattern [concrete = constants.%e.param_patt.a16] +// CHECK:STDOUT: %e.patt: %pattern_type.894 = at_binding_pattern e, %e.param_patt [concrete = constants.%e.patt.2d7] // 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.param_patt: %pattern_type.7fe = value_param_pattern [concrete] -// CHECK:STDOUT: %e.patt: %pattern_type.7fe = at_binding_pattern e, %e.param_patt [concrete] +// CHECK:STDOUT: %e.param_patt: %pattern_type.7fe = value_param_pattern [concrete = constants.%e.param_patt.7a3] +// CHECK:STDOUT: %e.patt: %pattern_type.7fe = at_binding_pattern e, %e.param_patt [concrete = constants.%e.patt.cd2] // 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.param_patt: %pattern_type.566 = value_param_pattern [concrete] -// CHECK:STDOUT: %f.patt: %pattern_type.566 = at_binding_pattern f, %f.param_patt [concrete] +// CHECK:STDOUT: %f.param_patt: %pattern_type.566 = value_param_pattern [concrete = constants.%f.param_patt] +// CHECK:STDOUT: %f.patt: %pattern_type.566 = at_binding_pattern f, %f.param_patt [concrete = constants.%f.patt.8a1] // 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] @@ -344,8 +354,8 @@ var f: ForwardDeclared* = &f_ref.f; // CHECK:STDOUT: %F.ref.loc14: %ForwardDeclared.assoc_type = name_ref F, imports.%Main.import_ref.86f [concrete = constants.%assoc1.c68] // CHECK:STDOUT: %UseForwardDeclaredF: %ForwardDeclared.assoc_type = alias_binding UseForwardDeclaredF, %F.ref.loc14 [concrete = constants.%assoc1.c68] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %f.patt: %pattern_type.7a7 = ref_binding_pattern f [concrete] -// CHECK:STDOUT: %f.var_patt: %pattern_type.7a7 = var_pattern %f.patt [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type.7a7 = ref_binding_pattern f [concrete = constants.%f.patt.752] +// CHECK:STDOUT: %f.var_patt: %pattern_type.7a7 = var_pattern %f.patt [concrete = constants.%f.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %f.var: ref %ptr.b71 = var %f.var_patt [concrete] // CHECK:STDOUT: %.loc16: type = splice_block %ptr [concrete = constants.%ptr.b71] { diff --git a/toolchain/check/testdata/interface/import_access.carbon b/toolchain/check/testdata/interface/import_access.carbon index 27cf1c818186..bd8a54545163 100644 --- a/toolchain/check/testdata/interface/import_access.carbon +++ b/toolchain/check/testdata/interface/import_access.carbon @@ -219,6 +219,8 @@ private interface Redecl {} // CHECK:STDOUT: %Def.type: type = facet_type <@Def> [concrete] // CHECK:STDOUT: %Self: %Def.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %pattern_type: type = pattern_type %Def.type [concrete] +// CHECK:STDOUT: %i.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %i.patt: %pattern_type = at_binding_pattern i, %i.param_patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -236,8 +238,8 @@ private interface Redecl {} // CHECK:STDOUT: %Test.import = import Test // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %i.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %i.patt: %pattern_type = at_binding_pattern i, %i.param_patt [concrete] +// CHECK:STDOUT: %i.param_patt: %pattern_type = value_param_pattern [concrete = constants.%i.param_patt] +// CHECK:STDOUT: %i.patt: %pattern_type = at_binding_pattern i, %i.param_patt [concrete = constants.%i.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %i.param: %Def.type = value_param call_param0 // CHECK:STDOUT: %Def.ref: type = name_ref Def, imports.%Test.Def [concrete = constants.%Def.type] @@ -276,8 +278,8 @@ private interface Redecl {} // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %i.param_patt: = value_param_pattern [concrete] -// CHECK:STDOUT: %i.patt: = at_binding_pattern i, %i.param_patt [concrete] +// CHECK:STDOUT: %i.param_patt: = value_param_pattern [concrete = ] +// CHECK:STDOUT: %i.patt: = at_binding_pattern i, %i.param_patt [concrete = ] // CHECK:STDOUT: } { // CHECK:STDOUT: %i.param: = value_param call_param0 // CHECK:STDOUT: %Def.ref: = name_ref Def, [concrete = ] @@ -311,8 +313,8 @@ private interface Redecl {} // CHECK:STDOUT: } // CHECK:STDOUT: %Test.import = import Test // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %i.param_patt: = value_param_pattern [concrete] -// CHECK:STDOUT: %i.patt: = at_binding_pattern i, %i.param_patt [concrete] +// CHECK:STDOUT: %i.param_patt: = value_param_pattern [concrete = ] +// CHECK:STDOUT: %i.patt: = at_binding_pattern i, %i.param_patt [concrete = ] // CHECK:STDOUT: } { // CHECK:STDOUT: %i.param: = value_param call_param0 // CHECK:STDOUT: %.1: = splice_block [concrete = ] { @@ -334,6 +336,8 @@ private interface Redecl {} // CHECK:STDOUT: %ForwardWithDef.type: type = facet_type <@ForwardWithDef> [concrete] // CHECK:STDOUT: %Self: %ForwardWithDef.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %pattern_type: type = pattern_type %ForwardWithDef.type [concrete] +// CHECK:STDOUT: %i.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %i.patt: %pattern_type = at_binding_pattern i, %i.param_patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -351,8 +355,8 @@ private interface Redecl {} // CHECK:STDOUT: %Test.import = import Test // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %i.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %i.patt: %pattern_type = at_binding_pattern i, %i.param_patt [concrete] +// CHECK:STDOUT: %i.param_patt: %pattern_type = value_param_pattern [concrete = constants.%i.param_patt] +// CHECK:STDOUT: %i.patt: %pattern_type = at_binding_pattern i, %i.param_patt [concrete = constants.%i.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %i.param: %ForwardWithDef.type = value_param call_param0 // CHECK:STDOUT: %ForwardWithDef.ref: type = name_ref ForwardWithDef, imports.%Test.ForwardWithDef [concrete = constants.%ForwardWithDef.type] @@ -391,8 +395,8 @@ private interface Redecl {} // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %i.param_patt: = value_param_pattern [concrete] -// CHECK:STDOUT: %i.patt: = at_binding_pattern i, %i.param_patt [concrete] +// CHECK:STDOUT: %i.param_patt: = value_param_pattern [concrete = ] +// CHECK:STDOUT: %i.patt: = at_binding_pattern i, %i.param_patt [concrete = ] // CHECK:STDOUT: } { // CHECK:STDOUT: %i.param: = value_param call_param0 // CHECK:STDOUT: %ForwardWithDef.ref: = name_ref ForwardWithDef, [concrete = ] @@ -426,8 +430,8 @@ private interface Redecl {} // CHECK:STDOUT: } // CHECK:STDOUT: %Test.import = import Test // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %i.param_patt: = value_param_pattern [concrete] -// CHECK:STDOUT: %i.patt: = at_binding_pattern i, %i.param_patt [concrete] +// CHECK:STDOUT: %i.param_patt: = value_param_pattern [concrete = ] +// CHECK:STDOUT: %i.patt: = at_binding_pattern i, %i.param_patt [concrete = ] // CHECK:STDOUT: } { // CHECK:STDOUT: %i.param: = value_param call_param0 // CHECK:STDOUT: %.1: = splice_block [concrete = ] { @@ -460,8 +464,8 @@ private interface Redecl {} // CHECK:STDOUT: %Test.import = import Test // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %i.param_patt: = value_param_pattern [concrete] -// CHECK:STDOUT: %i.patt: = at_binding_pattern i, %i.param_patt [concrete] +// CHECK:STDOUT: %i.param_patt: = value_param_pattern [concrete = ] +// CHECK:STDOUT: %i.patt: = at_binding_pattern i, %i.param_patt [concrete = ] // CHECK:STDOUT: } { // CHECK:STDOUT: %i.param: = value_param call_param0 // CHECK:STDOUT: %.loc11: type = splice_block %ptr [concrete = ] { @@ -505,8 +509,8 @@ private interface Redecl {} // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %i.param_patt: = value_param_pattern [concrete] -// CHECK:STDOUT: %i.patt: = at_binding_pattern i, %i.param_patt [concrete] +// CHECK:STDOUT: %i.param_patt: = value_param_pattern [concrete = ] +// CHECK:STDOUT: %i.patt: = at_binding_pattern i, %i.param_patt [concrete = ] // CHECK:STDOUT: } { // CHECK:STDOUT: %i.param: = value_param call_param0 // CHECK:STDOUT: %.loc10: type = splice_block %ptr [concrete = ] { @@ -543,8 +547,8 @@ private interface Redecl {} // CHECK:STDOUT: } // CHECK:STDOUT: %Test.import = import Test // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %i.param_patt: = value_param_pattern [concrete] -// CHECK:STDOUT: %i.patt: = at_binding_pattern i, %i.param_patt [concrete] +// CHECK:STDOUT: %i.param_patt: = value_param_pattern [concrete = ] +// CHECK:STDOUT: %i.patt: = at_binding_pattern i, %i.param_patt [concrete = ] // CHECK:STDOUT: } { // CHECK:STDOUT: %i.param: = value_param call_param0 // CHECK:STDOUT: %.loc10: type = splice_block %ptr [concrete = ] { diff --git a/toolchain/check/testdata/interface/incomplete.carbon b/toolchain/check/testdata/interface/incomplete.carbon index d509b3551e40..631251aacf31 100644 --- a/toolchain/check/testdata/interface/incomplete.carbon +++ b/toolchain/check/testdata/interface/incomplete.carbon @@ -227,9 +227,12 @@ interface A(T:! type) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.6cb: type = pattern_type %I.type [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.6cb = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %U: %I.type = symbolic_binding U, 0 [symbolic] // CHECK:STDOUT: %U.as_type: type = facet_access_type %U [symbolic] // CHECK:STDOUT: %pattern_type.b3a: type = pattern_type %U.as_type [symbolic] +// CHECK:STDOUT: %a.param_patt: %pattern_type.b3a = value_param_pattern [symbolic] +// CHECK:STDOUT: %a.patt: %pattern_type.b3a = at_binding_pattern a, %a.param_patt [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %U.as_type [symbolic] @@ -246,9 +249,9 @@ interface A(T:! type) { // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %I.decl: type = interface_decl @I [concrete = constants.%I.type] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %U.patt: %pattern_type.6cb = symbolic_binding_pattern U, 0 [concrete] -// CHECK:STDOUT: %a.param_patt: @F.%pattern_type (%pattern_type.b3a) = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: @F.%pattern_type (%pattern_type.b3a) = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %U.patt.loc9_7.1: %pattern_type.6cb = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc9_7.2 (constants.%U.patt)] +// CHECK:STDOUT: %a.param_patt.loc9_14.1: @F.%pattern_type (%pattern_type.b3a) = value_param_pattern [symbolic = %a.param_patt.loc9_14.2 (constants.%a.param_patt)] +// CHECK:STDOUT: %a.patt.loc9_14.1: @F.%pattern_type (%pattern_type.b3a) = at_binding_pattern a, %a.param_patt.loc9_14.1 [symbolic = %a.patt.loc9_14.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc9_10: type = splice_block %I.ref [concrete = constants.%I.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -287,9 +290,12 @@ interface A(T:! type) { // CHECK:STDOUT: class @C; // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%U.loc9_7.2: %I.type) { +// CHECK:STDOUT: %U.patt.loc9_7.2: %pattern_type.6cb = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc9_7.2 (constants.%U.patt)] // CHECK:STDOUT: %U.loc9_7.1: %I.type = symbolic_binding U, 0 [symbolic = %U.loc9_7.1 (constants.%U)] // CHECK:STDOUT: %U.as_type.loc9_16.1: type = facet_access_type %U.loc9_7.1 [symbolic = %U.as_type.loc9_16.1 (constants.%U.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %U.as_type.loc9_16.1 [symbolic = %pattern_type (constants.%pattern_type.b3a)] +// CHECK:STDOUT: %a.param_patt.loc9_14.2: @F.%pattern_type (%pattern_type.b3a) = value_param_pattern [symbolic = %a.param_patt.loc9_14.2 (constants.%a.param_patt)] +// CHECK:STDOUT: %a.patt.loc9_14.2: @F.%pattern_type (%pattern_type.b3a) = at_binding_pattern a, %a.param_patt.loc9_14.2 [symbolic = %a.patt.loc9_14.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %U.as_type.loc9_16.1 [symbolic = %require_complete (constants.%require_complete)] @@ -310,9 +316,12 @@ interface A(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%U) { +// CHECK:STDOUT: %U.patt.loc9_7.2 => constants.%U.patt // CHECK:STDOUT: %U.loc9_7.1 => constants.%U // CHECK:STDOUT: %U.as_type.loc9_16.1 => constants.%U.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.b3a +// CHECK:STDOUT: %a.param_patt.loc9_14.2 => constants.%a.param_patt +// CHECK:STDOUT: %a.patt.loc9_14.2 => constants.%a.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I.WithSelf(constants.%U) { @@ -408,6 +417,7 @@ interface A(T:! type) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %A.type.55a: type = generic_interface_type @A [concrete] // CHECK:STDOUT: %A.generic: %A.type.55a = struct_value () [concrete] @@ -424,7 +434,7 @@ interface A(T:! type) { // CHECK:STDOUT: .A = %A.decl // CHECK:STDOUT: } // CHECK:STDOUT: %A.decl: %A.type.55a = interface_decl @A [concrete = constants.%A.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc3_14.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc3_17.1: type = splice_block %.loc3_17.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -435,6 +445,7 @@ interface A(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @A(%T.loc3_14.2: type) { +// CHECK:STDOUT: %T.patt.loc3_14.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_14.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc3_14.1: type = symbolic_binding T, 0 [symbolic = %T.loc3_14.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -474,12 +485,14 @@ interface A(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A(constants.%T) { +// CHECK:STDOUT: %T.patt.loc3_14.2 => constants.%T.patt // CHECK:STDOUT: %T.loc3_14.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A.WithSelf(constants.%T, constants.%Self) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @A(constants.%empty_struct_type) { +// CHECK:STDOUT: %T.patt.loc3_14.2 => constants.%T.patt // CHECK:STDOUT: %T.loc3_14.1 => constants.%empty_struct_type // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/local.carbon b/toolchain/check/testdata/interface/local.carbon index cfe675625a27..4e2928a1f5d1 100644 --- a/toolchain/check/testdata/interface/local.carbon +++ b/toolchain/check/testdata/interface/local.carbon @@ -32,6 +32,8 @@ fn F() { // CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] // CHECK:STDOUT: %pattern_type.4d0: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt.199: %pattern_type.4d0 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.c38: %pattern_type.4d0 = at_binding_pattern self, %self.param_patt.199 [symbolic] // CHECK:STDOUT: %I.WithSelf.G.type.f46: type = fn_type @I.WithSelf.G, @I.WithSelf(%Self) [symbolic] // CHECK:STDOUT: %I.WithSelf.G.7b3: %I.WithSelf.G.type.f46 = struct_value () [symbolic] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] @@ -39,6 +41,8 @@ fn F() { // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness @empty_tuple.type.as.I.impl.%I.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %self.param_patt.154: %pattern_type.cb1 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.8c1: %pattern_type.cb1 = at_binding_pattern self, %self.param_patt.154 [concrete] // 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] @@ -61,8 +65,8 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %I.WithSelf.G.decl: @I.WithSelf.%I.WithSelf.G.type (%I.WithSelf.G.type.f46) = fn_decl @I.WithSelf.G [symbolic = @I.WithSelf.%I.WithSelf.G (constants.%I.WithSelf.G.7b3)] { -// CHECK:STDOUT: %self.param_patt: @I.WithSelf.G.%pattern_type (%pattern_type.4d0) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @I.WithSelf.G.%pattern_type (%pattern_type.4d0) = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc17_10.1: @I.WithSelf.G.%pattern_type (%pattern_type.4d0) = value_param_pattern [symbolic = %self.param_patt.loc17_10.2 (constants.%self.param_patt.199)] +// CHECK:STDOUT: %self.patt.loc17_10.1: @I.WithSelf.G.%pattern_type (%pattern_type.4d0) = at_binding_pattern self, %self.param_patt.loc17_10.1 [symbolic = %self.patt.loc17_10.2 (constants.%self.patt.c38)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @I.WithSelf.G.%Self.as_type.loc17_10.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc17_10.1: type = splice_block %.loc17_10.2 [symbolic = %Self.as_type.loc17_10.1 (constants.%Self.as_type)] { @@ -84,8 +88,8 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: impl @empty_tuple.type.as.I.impl: %.loc19_9.2 as %I.ref { // CHECK:STDOUT: %empty_tuple.type.as.I.impl.G.decl: %empty_tuple.type.as.I.impl.G.type = fn_decl @empty_tuple.type.as.I.impl.G [concrete = constants.%empty_tuple.type.as.I.impl.G] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.cb1 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.cb1 = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.cb1 = value_param_pattern [concrete = constants.%self.param_patt.154] +// CHECK:STDOUT: %self.patt: %pattern_type.cb1 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.8c1] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %empty_tuple.type = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @empty_tuple.type.as.I.impl.%.loc19_9.2 [concrete = constants.%empty_tuple.type] @@ -123,6 +127,8 @@ fn F() { // CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc17_10.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc17_10.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc17_10.1 [symbolic = %pattern_type (constants.%pattern_type.4d0)] +// CHECK:STDOUT: %self.param_patt.loc17_10.2: @I.WithSelf.G.%pattern_type (%pattern_type.4d0) = value_param_pattern [symbolic = %self.param_patt.loc17_10.2 (constants.%self.param_patt.199)] +// CHECK:STDOUT: %self.patt.loc17_10.2: @I.WithSelf.G.%pattern_type (%pattern_type.4d0) = at_binding_pattern self, %self.param_patt.loc17_10.2 [symbolic = %self.patt.loc17_10.2 (constants.%self.patt.c38)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @I.WithSelf.G.%Self.as_type.loc17_10.1 (%Self.as_type)); // CHECK:STDOUT: } @@ -143,6 +149,8 @@ fn F() { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc17_10.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.4d0 +// CHECK:STDOUT: %self.param_patt.loc17_10.2 => constants.%self.param_patt.199 +// CHECK:STDOUT: %self.patt.loc17_10.2 => constants.%self.patt.c38 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I.WithSelf(constants.%I.facet) { @@ -156,5 +164,7 @@ fn F() { // CHECK:STDOUT: %Self => constants.%I.facet // CHECK:STDOUT: %Self.as_type.loc17_10.1 => constants.%empty_tuple.type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.cb1 +// CHECK:STDOUT: %self.param_patt.loc17_10.2 => constants.%self.param_patt.154 +// CHECK:STDOUT: %self.patt.loc17_10.2 => constants.%self.patt.8c1 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/member_lookup.carbon b/toolchain/check/testdata/interface/member_lookup.carbon index 9bc7f1fd704b..6110b599e31c 100644 --- a/toolchain/check/testdata/interface/member_lookup.carbon +++ b/toolchain/check/testdata/interface/member_lookup.carbon @@ -59,6 +59,7 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.d47: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Interface.type.1b1: type = generic_interface_type @Interface [concrete] // CHECK:STDOUT: %Interface.generic: %Interface.type.1b1 = struct_value () [concrete] @@ -68,9 +69,12 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: %Interface.assoc_type.61f: type = assoc_entity_type @Interface, @Interface(%T.67d) [symbolic] // CHECK:STDOUT: %assoc0.199: %Interface.assoc_type.61f = assoc_entity element0, @Interface.WithSelf.%X [symbolic] // CHECK:STDOUT: %pattern_type.2c6f: type = pattern_type %Interface.type.fe8 [symbolic] +// CHECK:STDOUT: %I.patt.0cc: %pattern_type.2c6f = symbolic_binding_pattern I, 1 [symbolic] // CHECK:STDOUT: %I.63c: %Interface.type.fe8 = symbolic_binding I, 1 [symbolic] // CHECK:STDOUT: %.cb6: Core.Form = init_form %ptr.e8f [symbolic] // CHECK:STDOUT: %pattern_type.4f4: type = pattern_type %ptr.e8f [symbolic] +// CHECK:STDOUT: %return.param_patt.27f: %pattern_type.4f4 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.d67: %pattern_type.4f4 = return_slot_pattern %return.param_patt.27f, %ptr.e8f [symbolic] // CHECK:STDOUT: %AccessGeneric.type: type = fn_type @AccessGeneric [concrete] // CHECK:STDOUT: %AccessGeneric: %AccessGeneric.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.ef1: = require_complete_type %ptr.e8f [symbolic] @@ -96,10 +100,13 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Interface.type.c5f: type = facet_type <@Interface, @Interface(%i32)> [concrete] // CHECK:STDOUT: %pattern_type.3cf: type = pattern_type %Interface.type.c5f [concrete] +// CHECK:STDOUT: %I.patt.b65: %pattern_type.3cf = symbolic_binding_pattern I, 0 [symbolic] // CHECK:STDOUT: %I.e05: %Interface.type.c5f = symbolic_binding I, 0 [symbolic] // CHECK:STDOUT: %ptr.d08: type = ptr_type %i32 [concrete] // CHECK:STDOUT: %.952: Core.Form = init_form %ptr.d08 [concrete] // CHECK:STDOUT: %pattern_type.f00: type = pattern_type %ptr.d08 [concrete] +// CHECK:STDOUT: %return.param_patt.7dd: %pattern_type.f00 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.dbe: %pattern_type.f00 = return_slot_pattern %return.param_patt.7dd, %ptr.d08 [concrete] // CHECK:STDOUT: %AccessConcrete.type: type = fn_type @AccessConcrete [concrete] // CHECK:STDOUT: %AccessConcrete: %AccessConcrete.type = struct_value () [concrete] // CHECK:STDOUT: %Self.43d: %Interface.type.c5f = symbolic_binding Self, 1 [symbolic] @@ -141,7 +148,7 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Interface.decl: %Interface.type.1b1 = interface_decl @Interface [concrete = constants.%Interface.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc4_22.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_22.2 (constants.%T.patt.d47)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_25.1: type = splice_block %.loc4_25.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -150,10 +157,10 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: %T.loc4_22.2: type = symbolic_binding T, 0 [symbolic = %T.loc4_22.1 (constants.%T.67d)] // 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_29 (%pattern_type.2c6f) = symbolic_binding_pattern I, 1 [concrete] -// CHECK:STDOUT: %return.param_patt: @AccessGeneric.%pattern_type.loc8_50 (%pattern_type.4f4) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @AccessGeneric.%pattern_type.loc8_50 (%pattern_type.4f4) = return_slot_pattern %return.param_patt, %ptr.loc8_50.2 [concrete] +// CHECK:STDOUT: %T.patt.loc8_19.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_19.2 (constants.%T.patt.d47)] +// CHECK:STDOUT: %I.patt.loc8_29.1: @AccessGeneric.%pattern_type.loc8_29 (%pattern_type.2c6f) = symbolic_binding_pattern I, 1 [symbolic = %I.patt.loc8_29.2 (constants.%I.patt.0cc)] +// CHECK:STDOUT: %return.param_patt.loc8_50.1: @AccessGeneric.%pattern_type.loc8_50 (%pattern_type.4f4) = out_param_pattern [symbolic = %return.param_patt.loc8_50.2 (constants.%return.param_patt.27f)] +// CHECK:STDOUT: %return.patt.loc8_46.1: @AccessGeneric.%pattern_type.loc8_50 (%pattern_type.4f4) = return_slot_pattern %return.param_patt.loc8_50.1, %ptr.loc8_50.2 [symbolic = %return.patt.loc8_46.2 (constants.%return.patt.d67)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc8_49: type = name_ref T, %T.loc8_19.2 [symbolic = %T.loc8_19.1 (constants.%T.67d)] // CHECK:STDOUT: %ptr.loc8_50.2: type = ptr_type %T.ref.loc8_49 [symbolic = %ptr.loc8_50.1 (constants.%ptr.e8f)] @@ -174,9 +181,9 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // 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.3cf = symbolic_binding_pattern I, 0 [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.f00 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.f00 = return_slot_pattern %return.param_patt, %ptr [concrete] +// CHECK:STDOUT: %I.patt.loc12_20.1: %pattern_type.3cf = symbolic_binding_pattern I, 0 [symbolic = %I.patt.loc12_20.2 (constants.%I.patt.b65)] +// CHECK:STDOUT: %return.param_patt: %pattern_type.f00 = out_param_pattern [concrete = constants.%return.param_patt.7dd] +// CHECK:STDOUT: %return.patt: %pattern_type.f00 = return_slot_pattern %return.param_patt, %ptr [concrete = constants.%return.patt.dbe] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc12_42: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %ptr: type = ptr_type %i32.loc12_42 [concrete = constants.%ptr.d08] @@ -194,6 +201,7 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Interface(%T.loc4_22.2: type) { +// CHECK:STDOUT: %T.patt.loc4_22.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_22.2 (constants.%T.patt.d47)] // CHECK:STDOUT: %T.loc4_22.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_22.1 (constants.%T.67d)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -221,13 +229,17 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @AccessGeneric(%T.loc8_19.2: type, %I.loc8_29.2: @AccessGeneric.%Interface.type.loc8_43.1 (%Interface.type.fe8)) { +// CHECK:STDOUT: %T.patt.loc8_19.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_19.2 (constants.%T.patt.d47)] // CHECK:STDOUT: %T.loc8_19.1: type = symbolic_binding T, 0 [symbolic = %T.loc8_19.1 (constants.%T.67d)] // CHECK:STDOUT: %Interface.type.loc8_43.1: type = facet_type <@Interface, @Interface(%T.loc8_19.1)> [symbolic = %Interface.type.loc8_43.1 (constants.%Interface.type.fe8)] -// CHECK:STDOUT: %I.loc8_29.1: @AccessGeneric.%Interface.type.loc8_43.1 (%Interface.type.fe8) = symbolic_binding I, 1 [symbolic = %I.loc8_29.1 (constants.%I.63c)] // CHECK:STDOUT: %pattern_type.loc8_29: type = pattern_type %Interface.type.loc8_43.1 [symbolic = %pattern_type.loc8_29 (constants.%pattern_type.2c6f)] +// CHECK:STDOUT: %I.patt.loc8_29.2: @AccessGeneric.%pattern_type.loc8_29 (%pattern_type.2c6f) = symbolic_binding_pattern I, 1 [symbolic = %I.patt.loc8_29.2 (constants.%I.patt.0cc)] +// CHECK:STDOUT: %I.loc8_29.1: @AccessGeneric.%Interface.type.loc8_43.1 (%Interface.type.fe8) = symbolic_binding I, 1 [symbolic = %I.loc8_29.1 (constants.%I.63c)] // CHECK:STDOUT: %ptr.loc8_50.1: type = ptr_type %T.loc8_19.1 [symbolic = %ptr.loc8_50.1 (constants.%ptr.e8f)] // CHECK:STDOUT: %.loc8_50.1: Core.Form = init_form %ptr.loc8_50.1 [symbolic = %.loc8_50.1 (constants.%.cb6)] // CHECK:STDOUT: %pattern_type.loc8_50: type = pattern_type %ptr.loc8_50.1 [symbolic = %pattern_type.loc8_50 (constants.%pattern_type.4f4)] +// CHECK:STDOUT: %return.param_patt.loc8_50.2: @AccessGeneric.%pattern_type.loc8_50 (%pattern_type.4f4) = out_param_pattern [symbolic = %return.param_patt.loc8_50.2 (constants.%return.param_patt.27f)] +// CHECK:STDOUT: %return.patt.loc8_46.2: @AccessGeneric.%pattern_type.loc8_50 (%pattern_type.4f4) = return_slot_pattern %return.param_patt.loc8_50.2, %ptr.loc8_50.1 [symbolic = %return.patt.loc8_46.2 (constants.%return.patt.d67)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc8: = require_complete_type %ptr.loc8_50.1 [symbolic = %require_complete.loc8 (constants.%require_complete.ef1)] @@ -237,14 +249,14 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: %assoc0: @AccessGeneric.%Interface.assoc_type (%Interface.assoc_type.61f) = assoc_entity element0, @Interface.WithSelf.%X [symbolic = %assoc0 (constants.%assoc0.199)] // CHECK:STDOUT: %Interface.lookup_impl_witness: = lookup_impl_witness %I.loc8_29.1, @Interface, @Interface(%T.loc8_19.1) [symbolic = %Interface.lookup_impl_witness (constants.%Interface.lookup_impl_witness.ffe)] // 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.602)] -// CHECK:STDOUT: %.loc9_11.4: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.loc8_19.1) [symbolic = %.loc9_11.4 (constants.%.0e9)] +// CHECK:STDOUT: %.loc9_11.5: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.loc8_19.1) [symbolic = %.loc9_11.5 (constants.%.0e9)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %ptr.loc8_50.1, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.1da)] -// CHECK:STDOUT: %Copy.facet.loc9_11.2: %Copy.type = facet_value %ptr.loc8_50.1, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc9_11.2 (constants.%Copy.facet.302)] -// CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.loc9_11.2) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.884)] -// CHECK:STDOUT: %.loc9_11.5: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %Copy.facet.loc9_11.2 [symbolic = %.loc9_11.5 (constants.%.be5)] -// CHECK:STDOUT: %impl.elem0.loc9_11.4: @AccessGeneric.%.loc9_11.5 (%.be5) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc9_11.4 (constants.%impl.elem0.484)] +// CHECK:STDOUT: %Copy.facet.loc9_11.3: %Copy.type = facet_value %ptr.loc8_50.1, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc9_11.3 (constants.%Copy.facet.302)] +// CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.loc9_11.3) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.884)] +// CHECK:STDOUT: %.loc9_11.6: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %Copy.facet.loc9_11.3 [symbolic = %.loc9_11.6 (constants.%.be5)] +// CHECK:STDOUT: %impl.elem0.loc9_11.4: @AccessGeneric.%.loc9_11.6 (%.be5) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc9_11.4 (constants.%impl.elem0.484)] // CHECK:STDOUT: %bound_method.loc9_11.3: = bound_method %impl.elem0.loc9_11.3, %impl.elem0.loc9_11.4 [symbolic = %bound_method.loc9_11.3 (constants.%bound_method.602)] -// CHECK:STDOUT: %specific_impl_fn.loc9_11.2: = specific_impl_function %impl.elem0.loc9_11.4, @Copy.WithSelf.Op(%Copy.facet.loc9_11.2) [symbolic = %specific_impl_fn.loc9_11.2 (constants.%specific_impl_fn.a76)] +// CHECK:STDOUT: %specific_impl_fn.loc9_11.2: = specific_impl_function %impl.elem0.loc9_11.4, @Copy.WithSelf.Op(%Copy.facet.loc9_11.3) [symbolic = %specific_impl_fn.loc9_11.2 (constants.%specific_impl_fn.a76)] // CHECK:STDOUT: %bound_method.loc9_11.4: = bound_method %impl.elem0.loc9_11.3, %specific_impl_fn.loc9_11.2 [symbolic = %bound_method.loc9_11.4 (constants.%bound_method.060)] // CHECK:STDOUT: // CHECK:STDOUT: fn() -> out %return.param: @AccessGeneric.%ptr.loc8_50.1 (%ptr.e8f) { @@ -255,10 +267,12 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: %.loc9_11.2: @AccessGeneric.%Interface.assoc_type (%Interface.assoc_type.61f) = specific_constant @X.%assoc0, @Interface.WithSelf(constants.%T.67d, constants.%I.63c) [symbolic = %assoc0 (constants.%assoc0.199)] // CHECK:STDOUT: %X.ref: @AccessGeneric.%Interface.assoc_type (%Interface.assoc_type.61f) = name_ref X, %.loc9_11.2 [symbolic = %assoc0 (constants.%assoc0.199)] // CHECK:STDOUT: %impl.elem0.loc9_11.1: @AccessGeneric.%ptr.loc8_50.1 (%ptr.e8f) = impl_witness_access constants.%Interface.lookup_impl_witness.ffe, element0 [symbolic = %impl.elem0.loc9_11.3 (constants.%impl.elem0.602)] -// CHECK:STDOUT: %impl.elem0.loc9_11.2: @AccessGeneric.%.loc9_11.5 (%.be5) = impl_witness_access constants.%Copy.lookup_impl_witness.1da, element0 [symbolic = %impl.elem0.loc9_11.4 (constants.%impl.elem0.484)] +// CHECK:STDOUT: %impl.elem0.loc9_11.2: @AccessGeneric.%.loc9_11.6 (%.be5) = impl_witness_access constants.%Copy.lookup_impl_witness.1da, element0 [symbolic = %impl.elem0.loc9_11.4 (constants.%impl.elem0.484)] // CHECK:STDOUT: %bound_method.loc9_11.1: = bound_method %impl.elem0.loc9_11.1, %impl.elem0.loc9_11.2 [symbolic = %bound_method.loc9_11.3 (constants.%bound_method.602)] -// CHECK:STDOUT: %Copy.facet.loc9_11.1: %Copy.type = facet_value constants.%ptr.e8f, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc9_11.2 (constants.%Copy.facet.302)] -// CHECK:STDOUT: %.loc9_11.3: %Copy.type = converted constants.%ptr.e8f, %Copy.facet.loc9_11.1 [symbolic = %Copy.facet.loc9_11.2 (constants.%Copy.facet.302)] +// CHECK:STDOUT: %Copy.facet.loc9_11.1: %Copy.type = facet_value constants.%ptr.e8f, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc9_11.3 (constants.%Copy.facet.302)] +// CHECK:STDOUT: %.loc9_11.3: %Copy.type = converted constants.%ptr.e8f, %Copy.facet.loc9_11.1 [symbolic = %Copy.facet.loc9_11.3 (constants.%Copy.facet.302)] +// CHECK:STDOUT: %Copy.facet.loc9_11.2: %Copy.type = facet_value constants.%ptr.e8f, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc9_11.3 (constants.%Copy.facet.302)] +// CHECK:STDOUT: %.loc9_11.4: %Copy.type = converted constants.%ptr.e8f, %Copy.facet.loc9_11.2 [symbolic = %Copy.facet.loc9_11.3 (constants.%Copy.facet.302)] // CHECK:STDOUT: %specific_impl_fn.loc9_11.1: = specific_impl_function %impl.elem0.loc9_11.2, @Copy.WithSelf.Op(constants.%Copy.facet.302) [symbolic = %specific_impl_fn.loc9_11.2 (constants.%specific_impl_fn.a76)] // CHECK:STDOUT: %bound_method.loc9_11.2: = bound_method %impl.elem0.loc9_11.1, %specific_impl_fn.loc9_11.1 [symbolic = %bound_method.loc9_11.4 (constants.%bound_method.060)] // CHECK:STDOUT: %Copy.WithSelf.Op.call: init @AccessGeneric.%ptr.loc8_50.1 (%ptr.e8f) = call %bound_method.loc9_11.2(%impl.elem0.loc9_11.1) @@ -267,6 +281,7 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @AccessConcrete(%I.loc12_20.2: %Interface.type.c5f) { +// CHECK:STDOUT: %I.patt.loc12_20.2: %pattern_type.3cf = symbolic_binding_pattern I, 0 [symbolic = %I.patt.loc12_20.2 (constants.%I.patt.b65)] // CHECK:STDOUT: %I.loc12_20.1: %Interface.type.c5f = symbolic_binding I, 0 [symbolic = %I.loc12_20.1 (constants.%I.e05)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -294,6 +309,7 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Interface(constants.%T.67d) { +// CHECK:STDOUT: %T.patt.loc4_22.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc4_22.1 => constants.%T.67d // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -310,13 +326,17 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @AccessGeneric(constants.%T.67d, constants.%I.63c) { +// CHECK:STDOUT: %T.patt.loc8_19.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc8_19.1 => constants.%T.67d // CHECK:STDOUT: %Interface.type.loc8_43.1 => constants.%Interface.type.fe8 -// CHECK:STDOUT: %I.loc8_29.1 => constants.%I.63c // CHECK:STDOUT: %pattern_type.loc8_29 => constants.%pattern_type.2c6f +// CHECK:STDOUT: %I.patt.loc8_29.2 => constants.%I.patt.0cc +// CHECK:STDOUT: %I.loc8_29.1 => constants.%I.63c // CHECK:STDOUT: %ptr.loc8_50.1 => constants.%ptr.e8f // CHECK:STDOUT: %.loc8_50.1 => constants.%.cb6 // CHECK:STDOUT: %pattern_type.loc8_50 => constants.%pattern_type.4f4 +// CHECK:STDOUT: %return.param_patt.loc8_50.2 => constants.%return.param_patt.27f +// CHECK:STDOUT: %return.patt.loc8_46.2 => constants.%return.patt.d67 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Interface.WithSelf(constants.%T.67d, constants.%I.63c) { @@ -328,6 +348,7 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Interface(constants.%i32) { +// CHECK:STDOUT: %T.patt.loc4_22.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc4_22.1 => constants.%i32 // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -336,6 +357,7 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @AccessConcrete(constants.%I.e05) { +// CHECK:STDOUT: %I.patt.loc12_20.2 => constants.%I.patt.b65 // CHECK:STDOUT: %I.loc12_20.1 => constants.%I.e05 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -361,6 +383,7 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Interface.type.1b1: type = generic_interface_type @Interface [concrete] // CHECK:STDOUT: %Interface.generic: %Interface.type.1b1 = struct_value () [concrete] @@ -370,9 +393,12 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: %Interface.assoc_type.61f: type = assoc_entity_type @Interface, @Interface(%T) [symbolic] // CHECK:STDOUT: %assoc0.199: %Interface.assoc_type.61f = assoc_entity element0, @Interface.WithSelf.%X [symbolic] // CHECK:STDOUT: %pattern_type.2c6: type = pattern_type %Interface.type.fe8 [symbolic] +// CHECK:STDOUT: %I.patt.0cc: %pattern_type.2c6 = symbolic_binding_pattern I, 1 [symbolic] // CHECK:STDOUT: %I.63c: %Interface.type.fe8 = symbolic_binding I, 1 [symbolic] // CHECK:STDOUT: %.184: Core.Form = init_form %T [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %return.param_patt.41d: %pattern_type.51d = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.b39: %pattern_type.51d = return_slot_pattern %return.param_patt.41d, %T [symbolic] // CHECK:STDOUT: %AccessMissingGeneric.type: type = fn_type @AccessMissingGeneric [concrete] // CHECK:STDOUT: %AccessMissingGeneric: %AccessMissingGeneric.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.944: = require_complete_type %T [symbolic] @@ -384,9 +410,12 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Interface.type.c5f: type = facet_type <@Interface, @Interface(%i32)> [concrete] // CHECK:STDOUT: %pattern_type.3cf: type = pattern_type %Interface.type.c5f [concrete] +// CHECK:STDOUT: %I.patt.b65: %pattern_type.3cf = symbolic_binding_pattern I, 0 [symbolic] // CHECK:STDOUT: %I.e05: %Interface.type.c5f = symbolic_binding I, 0 [symbolic] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %AccessMissingConcrete.type: type = fn_type @AccessMissingConcrete [concrete] // CHECK:STDOUT: %AccessMissingConcrete: %AccessMissingConcrete.type = struct_value () [concrete] // CHECK:STDOUT: %Self.43d: %Interface.type.c5f = symbolic_binding Self, 1 [symbolic] @@ -414,7 +443,7 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Interface.decl: %Interface.type.1b1 = interface_decl @Interface [concrete = constants.%Interface.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc4_22.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_22.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_25.1: type = splice_block %.loc4_25.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -423,10 +452,10 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: %T.loc4_22.2: type = symbolic_binding T, 0 [symbolic = %T.loc4_22.1 (constants.%T)] // 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_36 (%pattern_type.2c6) = symbolic_binding_pattern I, 1 [concrete] -// CHECK:STDOUT: %return.param_patt: @AccessMissingGeneric.%pattern_type.loc8_56 (%pattern_type.51d) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @AccessMissingGeneric.%pattern_type.loc8_56 (%pattern_type.51d) = return_slot_pattern %return.param_patt, %T.ref.loc8_56 [concrete] +// CHECK:STDOUT: %T.patt.loc8_26.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_26.2 (constants.%T.patt)] +// CHECK:STDOUT: %I.patt.loc8_36.1: @AccessMissingGeneric.%pattern_type.loc8_36 (%pattern_type.2c6) = symbolic_binding_pattern I, 1 [symbolic = %I.patt.loc8_36.2 (constants.%I.patt.0cc)] +// CHECK:STDOUT: %return.param_patt.loc8_56.1: @AccessMissingGeneric.%pattern_type.loc8_56 (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt.loc8_56.2 (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt.loc8_53.1: @AccessMissingGeneric.%pattern_type.loc8_56 (%pattern_type.51d) = return_slot_pattern %return.param_patt.loc8_56.1, %T.ref.loc8_56 [symbolic = %return.patt.loc8_53.2 (constants.%return.patt.b39)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc8_56: type = name_ref T, %T.loc8_26.2 [symbolic = %T.loc8_26.1 (constants.%T)] // CHECK:STDOUT: %.loc8_56.2: Core.Form = init_form %T.ref.loc8_56 [symbolic = %.loc8_56.1 (constants.%.184)] @@ -446,9 +475,9 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: %return: ref @AccessMissingGeneric.%T.loc8_26.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.3cf = symbolic_binding_pattern I, 0 [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc16_49 [concrete] +// CHECK:STDOUT: %I.patt.loc16_27.1: %pattern_type.3cf = symbolic_binding_pattern I, 0 [symbolic = %I.patt.loc16_27.2 (constants.%I.patt.b65)] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc16_49 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc16_49: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc16_49: Core.Form = init_form %i32.loc16_49 [concrete = constants.%.795] @@ -465,6 +494,7 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Interface(%T.loc4_22.2: type) { +// CHECK:STDOUT: %T.patt.loc4_22.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_22.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_22.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_22.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -493,12 +523,16 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @AccessMissingGeneric(%T.loc8_26.2: type, %I.loc8_36.2: @AccessMissingGeneric.%Interface.type.loc8_50.1 (%Interface.type.fe8)) { +// CHECK:STDOUT: %T.patt.loc8_26.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_26.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc8_26.1: type = symbolic_binding T, 0 [symbolic = %T.loc8_26.1 (constants.%T)] // CHECK:STDOUT: %Interface.type.loc8_50.1: type = facet_type <@Interface, @Interface(%T.loc8_26.1)> [symbolic = %Interface.type.loc8_50.1 (constants.%Interface.type.fe8)] -// CHECK:STDOUT: %I.loc8_36.1: @AccessMissingGeneric.%Interface.type.loc8_50.1 (%Interface.type.fe8) = symbolic_binding I, 1 [symbolic = %I.loc8_36.1 (constants.%I.63c)] // CHECK:STDOUT: %pattern_type.loc8_36: type = pattern_type %Interface.type.loc8_50.1 [symbolic = %pattern_type.loc8_36 (constants.%pattern_type.2c6)] +// CHECK:STDOUT: %I.patt.loc8_36.2: @AccessMissingGeneric.%pattern_type.loc8_36 (%pattern_type.2c6) = symbolic_binding_pattern I, 1 [symbolic = %I.patt.loc8_36.2 (constants.%I.patt.0cc)] +// CHECK:STDOUT: %I.loc8_36.1: @AccessMissingGeneric.%Interface.type.loc8_50.1 (%Interface.type.fe8) = symbolic_binding I, 1 [symbolic = %I.loc8_36.1 (constants.%I.63c)] // CHECK:STDOUT: %.loc8_56.1: Core.Form = init_form %T.loc8_26.1 [symbolic = %.loc8_56.1 (constants.%.184)] // CHECK:STDOUT: %pattern_type.loc8_56: type = pattern_type %T.loc8_26.1 [symbolic = %pattern_type.loc8_56 (constants.%pattern_type.51d)] +// CHECK:STDOUT: %return.param_patt.loc8_56.2: @AccessMissingGeneric.%pattern_type.loc8_56 (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt.loc8_56.2 (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt.loc8_53.2: @AccessMissingGeneric.%pattern_type.loc8_56 (%pattern_type.51d) = return_slot_pattern %return.param_patt.loc8_56.2, %T.loc8_26.1 [symbolic = %return.patt.loc8_53.2 (constants.%return.patt.b39)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc8: = require_complete_type %T.loc8_26.1 [symbolic = %require_complete.loc8 (constants.%require_complete.944)] @@ -516,6 +550,7 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @AccessMissingConcrete(%I.loc16_27.2: %Interface.type.c5f) { +// CHECK:STDOUT: %I.patt.loc16_27.2: %pattern_type.3cf = symbolic_binding_pattern I, 0 [symbolic = %I.patt.loc16_27.2 (constants.%I.patt.b65)] // CHECK:STDOUT: %I.loc16_27.1: %Interface.type.c5f = symbolic_binding I, 0 [symbolic = %I.loc16_27.1 (constants.%I.e05)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -532,6 +567,7 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Interface(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_22.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_22.1 => constants.%T // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -548,12 +584,16 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @AccessMissingGeneric(constants.%T, constants.%I.63c) { +// CHECK:STDOUT: %T.patt.loc8_26.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_26.1 => constants.%T // CHECK:STDOUT: %Interface.type.loc8_50.1 => constants.%Interface.type.fe8 -// CHECK:STDOUT: %I.loc8_36.1 => constants.%I.63c // CHECK:STDOUT: %pattern_type.loc8_36 => constants.%pattern_type.2c6 +// CHECK:STDOUT: %I.patt.loc8_36.2 => constants.%I.patt.0cc +// CHECK:STDOUT: %I.loc8_36.1 => constants.%I.63c // CHECK:STDOUT: %.loc8_56.1 => constants.%.184 // CHECK:STDOUT: %pattern_type.loc8_56 => constants.%pattern_type.51d +// CHECK:STDOUT: %return.param_patt.loc8_56.2 => constants.%return.param_patt.41d +// CHECK:STDOUT: %return.patt.loc8_53.2 => constants.%return.patt.b39 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Interface.WithSelf(constants.%T, constants.%I.63c) { @@ -565,6 +605,7 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Interface(constants.%i32) { +// CHECK:STDOUT: %T.patt.loc4_22.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_22.1 => constants.%i32 // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -573,6 +614,7 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @AccessMissingConcrete(constants.%I.e05) { +// CHECK:STDOUT: %I.patt.loc16_27.2 => constants.%I.patt.b65 // CHECK:STDOUT: %I.loc16_27.1 => constants.%I.e05 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/require.carbon b/toolchain/check/testdata/interface/require.carbon index 776f1744176c..49828a24de32 100644 --- a/toolchain/check/testdata/interface/require.carbon +++ b/toolchain/check/testdata/interface/require.carbon @@ -750,6 +750,7 @@ interface Z(T:! type) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Z.type.c39: type = generic_interface_type @Z [concrete] // CHECK:STDOUT: %Z.generic: %Z.type.c39 = struct_value () [concrete] @@ -761,7 +762,7 @@ interface Z(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %Z.decl: %Z.type.c39 = interface_decl @Z [concrete = constants.%Z.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc4_14.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_17.1: type = splice_block %.loc4_17.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -772,6 +773,7 @@ interface Z(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Z(%T.loc4_14.2: type) { +// CHECK:STDOUT: %T.patt.loc4_14.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_14.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_14.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -819,12 +821,14 @@ interface Z(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Z(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_14.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_14.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Z.WithSelf(constants.%T, constants.%Self) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @Z(constants.%Self.as_type) { +// CHECK:STDOUT: %T.patt.loc4_14.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_14.1 => constants.%Self.as_type // CHECK:STDOUT: } // CHECK:STDOUT: @@ -913,6 +917,7 @@ interface Z(T:! type) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Z.type.c39: type = generic_interface_type @Z [concrete] // CHECK:STDOUT: %Z.generic: %Z.type.c39 = struct_value () [concrete] @@ -923,7 +928,7 @@ interface Z(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %Z.decl: %Z.type.c39 = interface_decl @Z [concrete = constants.%Z.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc8_14.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8_17.1: type = splice_block %.loc8_17.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -934,6 +939,7 @@ interface Z(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Z(%T.loc8_14.2: type) { +// CHECK:STDOUT: %T.patt.loc8_14.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_14.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc8_14.1: type = symbolic_binding T, 0 [symbolic = %T.loc8_14.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -977,6 +983,7 @@ interface Z(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Z(constants.%T) { +// CHECK:STDOUT: %T.patt.loc8_14.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_14.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/self.carbon b/toolchain/check/testdata/interface/self.carbon index ec869e55987e..4a99e34953b6 100644 --- a/toolchain/check/testdata/interface/self.carbon +++ b/toolchain/check/testdata/interface/self.carbon @@ -24,7 +24,11 @@ interface UseSelf { // CHECK:STDOUT: %Self: %UseSelf.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt: %pattern_type = at_binding_pattern self, %self.param_patt [symbolic] // CHECK:STDOUT: %.326: Core.Form = init_form %Self.as_type [symbolic] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %Self.as_type [symbolic] // CHECK:STDOUT: %UseSelf.WithSelf.F.type: type = fn_type @UseSelf.WithSelf.F, @UseSelf.WithSelf(%Self) [symbolic] // CHECK:STDOUT: %UseSelf.WithSelf.F: %UseSelf.WithSelf.F.type = struct_value () [symbolic] // CHECK:STDOUT: %UseSelf.assoc_type: type = assoc_entity_type @UseSelf [concrete] @@ -44,10 +48,10 @@ interface UseSelf { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %UseSelf.WithSelf.F.decl: @UseSelf.WithSelf.%UseSelf.WithSelf.F.type (%UseSelf.WithSelf.F.type) = fn_decl @UseSelf.WithSelf.F [symbolic = @UseSelf.WithSelf.%UseSelf.WithSelf.F (constants.%UseSelf.WithSelf.F)] { -// CHECK:STDOUT: %self.param_patt: @UseSelf.WithSelf.F.%pattern_type (%pattern_type) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @UseSelf.WithSelf.F.%pattern_type (%pattern_type) = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @UseSelf.WithSelf.F.%pattern_type (%pattern_type) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @UseSelf.WithSelf.F.%pattern_type (%pattern_type) = return_slot_pattern %return.param_patt, %.loc16_17.2 [concrete] +// CHECK:STDOUT: %self.param_patt.loc16_8.1: @UseSelf.WithSelf.F.%pattern_type (%pattern_type) = value_param_pattern [symbolic = %self.param_patt.loc16_8.2 (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt.loc16_8.1: @UseSelf.WithSelf.F.%pattern_type (%pattern_type) = at_binding_pattern self, %self.param_patt.loc16_8.1 [symbolic = %self.patt.loc16_8.2 (constants.%self.patt)] +// CHECK:STDOUT: %return.param_patt.loc16_17.1: @UseSelf.WithSelf.F.%pattern_type (%pattern_type) = out_param_pattern [symbolic = %return.param_patt.loc16_17.2 (constants.%return.param_patt)] +// CHECK:STDOUT: %return.patt.loc16_14.1: @UseSelf.WithSelf.F.%pattern_type (%pattern_type) = return_slot_pattern %return.param_patt.loc16_17.1, %.loc16_17.2 [symbolic = %return.patt.loc16_14.2 (constants.%return.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc16_17: %UseSelf.type = name_ref Self, @UseSelf.%Self [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc16_17: type = facet_access_type %Self.ref.loc16_17 [symbolic = %Self.as_type.loc16_8.1 (constants.%Self.as_type)] @@ -77,7 +81,11 @@ interface UseSelf { // CHECK:STDOUT: %Self: %UseSelf.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc16_8.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc16_8.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc16_8.1 [symbolic = %pattern_type (constants.%pattern_type)] +// CHECK:STDOUT: %self.param_patt.loc16_8.2: @UseSelf.WithSelf.F.%pattern_type (%pattern_type) = value_param_pattern [symbolic = %self.param_patt.loc16_8.2 (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt.loc16_8.2: @UseSelf.WithSelf.F.%pattern_type (%pattern_type) = at_binding_pattern self, %self.param_patt.loc16_8.2 [symbolic = %self.patt.loc16_8.2 (constants.%self.patt)] // CHECK:STDOUT: %.loc16_17.1: Core.Form = init_form %Self.as_type.loc16_8.1 [symbolic = %.loc16_17.1 (constants.%.326)] +// CHECK:STDOUT: %return.param_patt.loc16_17.2: @UseSelf.WithSelf.F.%pattern_type (%pattern_type) = out_param_pattern [symbolic = %return.param_patt.loc16_17.2 (constants.%return.param_patt)] +// CHECK:STDOUT: %return.patt.loc16_14.2: @UseSelf.WithSelf.F.%pattern_type (%pattern_type) = return_slot_pattern %return.param_patt.loc16_17.2, %Self.as_type.loc16_8.1 [symbolic = %return.patt.loc16_14.2 (constants.%return.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @UseSelf.WithSelf.F.%Self.as_type.loc16_8.1 (%Self.as_type)) -> out %return.param: @UseSelf.WithSelf.F.%Self.as_type.loc16_8.1 (%Self.as_type); // CHECK:STDOUT: } @@ -88,6 +96,10 @@ interface UseSelf { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc16_8.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type +// CHECK:STDOUT: %self.param_patt.loc16_8.2 => constants.%self.param_patt +// CHECK:STDOUT: %self.patt.loc16_8.2 => constants.%self.patt // CHECK:STDOUT: %.loc16_17.1 => constants.%.326 +// CHECK:STDOUT: %return.param_patt.loc16_17.2 => constants.%return.param_patt +// CHECK:STDOUT: %return.patt.loc16_14.2 => constants.%return.patt // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/syntactic_merge.carbon b/toolchain/check/testdata/interface/syntactic_merge.carbon index 60dfe2aafee8..582c4a6fdfb2 100644 --- a/toolchain/check/testdata/interface/syntactic_merge.carbon +++ b/toolchain/check/testdata/interface/syntactic_merge.carbon @@ -206,6 +206,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %a: %C = symbolic_binding a, 0 [symbolic] // CHECK:STDOUT: %Foo.type.bc6: type = generic_interface_type @Foo [concrete] // CHECK:STDOUT: %Foo.generic: %Foo.type.bc6 = struct_value () [concrete] @@ -228,7 +229,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %D: type = alias_binding D, %C.ref [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type.bc6 = interface_decl @Foo [concrete = constants.%Foo.generic] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc7_16.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_16.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc7: type = splice_block %C.ref.loc7 [concrete = constants.%C] { // CHECK:STDOUT: %.Self.loc7: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -237,7 +238,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %a.loc7_16.2: %C = symbolic_binding a, 0 [symbolic = %a.loc7_16.1 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc8: %Foo.type.bc6 = interface_decl @Foo [concrete = constants.%Foo.generic] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc7_16.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_16.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8: type = splice_block %C.ref.loc8 [concrete = constants.%C] { // CHECK:STDOUT: %.Self.loc8: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -246,7 +247,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %a.loc8: %C = symbolic_binding a, 0 [symbolic = %a.loc7_16.1 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Bar.decl.loc10: %Bar.type.3f0 = interface_decl @Bar [concrete = constants.%Bar.generic] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc10_16.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc10_16.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc10: type = splice_block %D.ref.loc10 [concrete = constants.%C] { // CHECK:STDOUT: %.Self.loc10: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -255,7 +256,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %a.loc10_16.2: %C = symbolic_binding a, 0 [symbolic = %a.loc10_16.1 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Bar.decl.loc11: %Bar.type.3f0 = interface_decl @Bar [concrete = constants.%Bar.generic] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc10_16.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc10_16.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc11: type = splice_block %D.ref.loc11 [concrete = constants.%C] { // CHECK:STDOUT: %.Self.loc11: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -266,6 +267,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Foo(%a.loc7_16.2: %C) { +// CHECK:STDOUT: %a.patt.loc7_16.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_16.2 (constants.%a.patt)] // CHECK:STDOUT: %a.loc7_16.1: %C = symbolic_binding a, 0 [symbolic = %a.loc7_16.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -285,6 +287,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Bar(%a.loc10_16.2: %C) { +// CHECK:STDOUT: %a.patt.loc10_16.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc10_16.2 (constants.%a.patt)] // CHECK:STDOUT: %a.loc10_16.1: %C = symbolic_binding a, 0 [symbolic = %a.loc10_16.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -312,12 +315,14 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo(constants.%a) { +// CHECK:STDOUT: %a.patt.loc7_16.2 => constants.%a.patt // CHECK:STDOUT: %a.loc7_16.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo.WithSelf(constants.%a, constants.%Self.a95) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @Bar(constants.%a) { +// CHECK:STDOUT: %a.patt.loc10_16.2 => constants.%a.patt // CHECK:STDOUT: %a.loc10_16.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: @@ -332,6 +337,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %a: %C = symbolic_binding a, 0 [symbolic] // CHECK:STDOUT: %Foo.type.bc6: type = generic_interface_type @Foo [concrete] // CHECK:STDOUT: %Foo.generic: %Foo.type.bc6 = struct_value () [concrete] @@ -346,7 +352,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %Foo.decl.loc6: %Foo.type.bc6 = interface_decl @Foo [concrete = constants.%Foo.generic] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc6_23.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_23.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6: type = splice_block %C.ref.loc6 [concrete = constants.%C] { // CHECK:STDOUT: %.Self.loc6: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -355,7 +361,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %a.loc6_23.2: %C = symbolic_binding a, 0 [symbolic = %a.loc6_23.1 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type.bc6 = interface_decl @Foo [concrete = constants.%Foo.generic] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc6_23.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_23.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc7: type = splice_block %C.ref.loc7 [concrete = constants.%C] { // CHECK:STDOUT: %.Self.loc7: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -366,6 +372,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Foo(%a.loc6_23.2: %C) { +// CHECK:STDOUT: %a.patt.loc6_23.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_23.2 (constants.%a.patt)] // CHECK:STDOUT: %a.loc6_23.1: %C = symbolic_binding a, 0 [symbolic = %a.loc6_23.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -393,6 +400,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo(constants.%a) { +// CHECK:STDOUT: %a.patt.loc6_23.2 => constants.%a.patt // CHECK:STDOUT: %a.loc6_23.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: @@ -407,6 +415,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %a: %C = symbolic_binding a, 0 [symbolic] // CHECK:STDOUT: %Foo.type.bc6a25.1: type = generic_interface_type @Foo.loc6 [concrete] // CHECK:STDOUT: %Foo.generic.d3ea5a.1: %Foo.type.bc6a25.1 = struct_value () [concrete] @@ -423,7 +432,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %Foo.decl.loc6: %Foo.type.bc6a25.1 = interface_decl @Foo.loc6 [concrete = constants.%Foo.generic.d3ea5a.1] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc6_16.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_16.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6: type = splice_block %C.ref [concrete = constants.%C] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -432,7 +441,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %a.loc6_16.2: %C = symbolic_binding a, 0 [symbolic = %a.loc6_16.1 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc14: %Foo.type.bc6a25.2 = interface_decl @Foo.loc14 [concrete = constants.%Foo.generic.d3ea5a.2] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc14_16.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc14_16.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc14: type = splice_block %C.ref [concrete = constants.%C] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -443,12 +452,14 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Foo.loc6(%a.loc6_16.2: %C) { +// CHECK:STDOUT: %a.patt.loc6_16.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_16.2 (constants.%a.patt)] // CHECK:STDOUT: %a.loc6_16.1: %C = symbolic_binding a, 0 [symbolic = %a.loc6_16.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: interface; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Foo.loc14(%a.loc14_16.2: %C) { +// CHECK:STDOUT: %a.patt.loc14_16.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc14_16.2 (constants.%a.patt)] // CHECK:STDOUT: %a.loc14_16.1: %C = symbolic_binding a, 0 [symbolic = %a.loc14_16.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -476,10 +487,12 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo.loc6(constants.%a) { +// CHECK:STDOUT: %a.patt.loc6_16.2 => constants.%a.patt // CHECK:STDOUT: %a.loc6_16.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo.loc14(constants.%a) { +// CHECK:STDOUT: %a.patt.loc14_16.2 => constants.%a.patt // CHECK:STDOUT: %a.loc14_16.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: @@ -494,6 +507,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %a: %C = symbolic_binding a, 0 [symbolic] // CHECK:STDOUT: %Foo.type.bc6a25.1: type = generic_interface_type @Foo.loc6 [concrete] // CHECK:STDOUT: %Foo.generic.d3ea5a.1: %Foo.type.bc6a25.1 = struct_value () [concrete] @@ -510,7 +524,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %Foo.decl.loc6: %Foo.type.bc6a25.1 = interface_decl @Foo.loc6 [concrete = constants.%Foo.generic.d3ea5a.1] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc6_16.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_16.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6: type = splice_block %C.ref [concrete = constants.%C] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -519,7 +533,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %a.loc6_16.2: %C = symbolic_binding a, 0 [symbolic = %a.loc6_16.1 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc14: %Foo.type.bc6a25.2 = interface_decl @Foo.loc14 [concrete = constants.%Foo.generic.d3ea5a.2] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc14_16.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc14_16.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc14: type = splice_block %C.ref [concrete = constants.%C] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -530,12 +544,14 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Foo.loc6(%a.loc6_16.2: %C) { +// CHECK:STDOUT: %a.patt.loc6_16.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_16.2 (constants.%a.patt)] // CHECK:STDOUT: %a.loc6_16.1: %C = symbolic_binding a, 0 [symbolic = %a.loc6_16.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: interface; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Foo.loc14(%a.loc14_16.2: %C) { +// CHECK:STDOUT: %a.patt.loc14_16.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc14_16.2 (constants.%a.patt)] // CHECK:STDOUT: %a.loc14_16.1: %C = symbolic_binding a, 0 [symbolic = %a.loc14_16.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -563,10 +579,12 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo.loc6(constants.%a) { +// CHECK:STDOUT: %a.patt.loc6_16.2 => constants.%a.patt // CHECK:STDOUT: %a.loc6_16.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo.loc14(constants.%a) { +// CHECK:STDOUT: %a.patt.loc14_16.2 => constants.%a.patt // CHECK:STDOUT: %a.loc14_16.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: @@ -581,6 +599,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %a: %C = symbolic_binding a, 0 [symbolic] // CHECK:STDOUT: %Foo.type: type = generic_interface_type @Foo [concrete] // CHECK:STDOUT: %Foo.generic: %Foo.type = struct_value () [concrete] @@ -599,7 +618,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %D: type = alias_binding D, %C.ref [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl: %Foo.type = interface_decl @Foo [concrete = constants.%Foo.generic] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc7_16.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_16.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc7: type = splice_block %C.ref [concrete = constants.%C] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -608,7 +627,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %a.loc7_16.2: %C = symbolic_binding a, 0 [symbolic = %a.loc7_16.1 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Bar.decl: %Bar.type = interface_decl @Bar [concrete = constants.%Bar.generic] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc8_16.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc8_16.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8: type = splice_block %D.ref [concrete = constants.%C] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -619,12 +638,14 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Foo(%a.loc7_16.2: %C) { +// CHECK:STDOUT: %a.patt.loc7_16.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_16.2 (constants.%a.patt)] // CHECK:STDOUT: %a.loc7_16.1: %C = symbolic_binding a, 0 [symbolic = %a.loc7_16.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: interface; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Bar(%a.loc8_16.2: %C) { +// CHECK:STDOUT: %a.patt.loc8_16.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc8_16.2 (constants.%a.patt)] // CHECK:STDOUT: %a.loc8_16.1: %C = symbolic_binding a, 0 [symbolic = %a.loc8_16.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: interface; @@ -639,10 +660,12 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo(constants.%a) { +// CHECK:STDOUT: %a.patt.loc7_16.2 => constants.%a.patt // CHECK:STDOUT: %a.loc7_16.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Bar(constants.%a) { +// CHECK:STDOUT: %a.patt.loc8_16.2 => constants.%a.patt // CHECK:STDOUT: %a.loc8_16.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: @@ -655,6 +678,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %a: %C = symbolic_binding a, 0 [symbolic] // CHECK:STDOUT: %Foo.type.bc6a25.1: type = generic_interface_type @Foo.1 [concrete] // CHECK:STDOUT: %Foo.generic.d3ea5a.1: %Foo.type.bc6a25.1 = struct_value () [concrete] @@ -691,7 +715,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %default.import.loc2_24.1 = import // CHECK:STDOUT: %default.import.loc2_24.2 = import // CHECK:STDOUT: %Foo.decl: %Foo.type.bc6a25.2 = interface_decl @Foo.loc12 [concrete = constants.%Foo.generic.d3ea5a.2] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc12_16.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc12_16.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc12: type = splice_block %C.ref [concrete = constants.%C] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -700,7 +724,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %a.loc12_16.2: %C = symbolic_binding a, 0 [symbolic = %a.loc12_16.1 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Bar.decl: %Bar.type.3f06c8.2 = interface_decl @Bar.loc21 [concrete = constants.%Bar.generic.b3011f.2] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc21_16.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc21_16.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc21: type = splice_block %D.ref [concrete = constants.%C] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -711,12 +735,14 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Foo.1(imports.%Main.import_ref.99696d.1: %C) [from "two_file.carbon"] { +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt (constants.%a.patt)] // CHECK:STDOUT: %a: %C = symbolic_binding a, 0 [symbolic = %a (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: interface; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Foo.loc12(%a.loc12_16.2: %C) { +// CHECK:STDOUT: %a.patt.loc12_16.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc12_16.2 (constants.%a.patt)] // CHECK:STDOUT: %a.loc12_16.1: %C = symbolic_binding a, 0 [symbolic = %a.loc12_16.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -736,12 +762,14 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Bar.1(imports.%Main.import_ref.99696d.2: %C) [from "two_file.carbon"] { +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt (constants.%a.patt)] // CHECK:STDOUT: %a: %C = symbolic_binding a, 0 [symbolic = %a (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: interface; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Bar.loc21(%a.loc21_16.2: %C) { +// CHECK:STDOUT: %a.patt.loc21_16.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc21_16.2 (constants.%a.patt)] // CHECK:STDOUT: %a.loc21_16.1: %C = symbolic_binding a, 0 [symbolic = %a.loc21_16.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -768,20 +796,24 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo.1(constants.%a) { +// CHECK:STDOUT: %a.patt => constants.%a.patt // CHECK:STDOUT: %a => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo.loc12(constants.%a) { +// CHECK:STDOUT: %a.patt.loc12_16.2 => constants.%a.patt // CHECK:STDOUT: %a.loc12_16.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo.WithSelf(constants.%a, constants.%Self.a95) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @Bar.1(constants.%a) { +// CHECK:STDOUT: %a.patt => constants.%a.patt // CHECK:STDOUT: %a => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Bar.loc21(constants.%a) { +// CHECK:STDOUT: %a.patt.loc21_16.2 => constants.%a.patt // CHECK:STDOUT: %a.loc21_16.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: @@ -796,9 +828,11 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %a: %C = symbolic_binding a, 0 [symbolic] // CHECK:STDOUT: %Foo.type.bc6a25.1: type = generic_interface_type @Foo.loc7 [concrete] // CHECK:STDOUT: %Foo.generic.d3ea5a.1: %Foo.type.bc6a25.1 = struct_value () [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type = symbolic_binding_pattern b, 0 [symbolic] // CHECK:STDOUT: %b: %C = symbolic_binding b, 0 [symbolic] // CHECK:STDOUT: %Foo.type.bc6a25.2: type = generic_interface_type @Foo.loc15 [concrete] // CHECK:STDOUT: %Foo.generic.d3ea5a.2: %Foo.type.bc6a25.2 = struct_value () [concrete] @@ -816,7 +850,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %D: type = alias_binding D, %C.ref [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type.bc6a25.1 = interface_decl @Foo.loc7 [concrete = constants.%Foo.generic.d3ea5a.1] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc7_16.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_16.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc7: type = splice_block %C.ref [concrete = constants.%C] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -825,7 +859,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %a.loc7_16.2: %C = symbolic_binding a, 0 [symbolic = %a.loc7_16.1 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc15: %Foo.type.bc6a25.2 = interface_decl @Foo.loc15 [concrete = constants.%Foo.generic.d3ea5a.2] { -// CHECK:STDOUT: %b.patt: %pattern_type = symbolic_binding_pattern b, 0 [concrete] +// CHECK:STDOUT: %b.patt.loc15_16.1: %pattern_type = symbolic_binding_pattern b, 0 [symbolic = %b.patt.loc15_16.2 (constants.%b.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc15: type = splice_block %D.ref [concrete = constants.%C] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -836,12 +870,14 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Foo.loc7(%a.loc7_16.2: %C) { +// CHECK:STDOUT: %a.patt.loc7_16.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_16.2 (constants.%a.patt)] // CHECK:STDOUT: %a.loc7_16.1: %C = symbolic_binding a, 0 [symbolic = %a.loc7_16.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: interface; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Foo.loc15(%b.loc15_16.2: %C) { +// CHECK:STDOUT: %b.patt.loc15_16.2: %pattern_type = symbolic_binding_pattern b, 0 [symbolic = %b.patt.loc15_16.2 (constants.%b.patt)] // CHECK:STDOUT: %b.loc15_16.1: %C = symbolic_binding b, 0 [symbolic = %b.loc15_16.1 (constants.%b)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -869,10 +905,12 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo.loc7(constants.%a) { +// CHECK:STDOUT: %a.patt.loc7_16.2 => constants.%a.patt // CHECK:STDOUT: %a.loc7_16.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo.loc15(constants.%b) { +// CHECK:STDOUT: %b.patt.loc15_16.2 => constants.%b.patt // CHECK:STDOUT: %b.loc15_16.1 => constants.%b // CHECK:STDOUT: } // CHECK:STDOUT: @@ -887,6 +925,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %a: %C = symbolic_binding a, 0 [symbolic] // CHECK:STDOUT: %Foo.type.bc6a25.1: type = generic_interface_type @Foo.loc7 [concrete] // CHECK:STDOUT: %Foo.generic.d3ea5a.1: %Foo.type.bc6a25.1 = struct_value () [concrete] @@ -906,7 +945,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %D: type = alias_binding D, %C.ref [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type.bc6a25.1 = interface_decl @Foo.loc7 [concrete = constants.%Foo.generic.d3ea5a.1] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc7_16.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_16.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc7: type = splice_block %C.ref [concrete = constants.%C] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -915,7 +954,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %a.loc7_16.2: %C = symbolic_binding a, 0 [symbolic = %a.loc7_16.1 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc15: %Foo.type.bc6a25.2 = interface_decl @Foo.loc15 [concrete = constants.%Foo.generic.d3ea5a.2] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc15_16.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc15_16.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc15: type = splice_block %D.ref [concrete = constants.%C] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -926,12 +965,14 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Foo.loc7(%a.loc7_16.2: %C) { +// CHECK:STDOUT: %a.patt.loc7_16.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_16.2 (constants.%a.patt)] // CHECK:STDOUT: %a.loc7_16.1: %C = symbolic_binding a, 0 [symbolic = %a.loc7_16.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: interface; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Foo.loc15(%a.loc15_16.2: %C) { +// CHECK:STDOUT: %a.patt.loc15_16.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc15_16.2 (constants.%a.patt)] // CHECK:STDOUT: %a.loc15_16.1: %C = symbolic_binding a, 0 [symbolic = %a.loc15_16.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -959,10 +1000,12 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo.loc7(constants.%a) { +// CHECK:STDOUT: %a.patt.loc7_16.2 => constants.%a.patt // CHECK:STDOUT: %a.loc7_16.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo.loc15(constants.%a) { +// CHECK:STDOUT: %a.patt.loc15_16.2 => constants.%a.patt // CHECK:STDOUT: %a.loc15_16.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: @@ -977,6 +1020,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %a: %C = symbolic_binding a, 0 [symbolic] // CHECK:STDOUT: %Foo.type.bc6a25.1: type = generic_interface_type @Foo.loc7 [concrete] // CHECK:STDOUT: %Foo.generic.d3ea5a.1: %Foo.type.bc6a25.1 = struct_value () [concrete] @@ -996,7 +1040,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %D: type = alias_binding D, %C.ref [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type.bc6a25.1 = interface_decl @Foo.loc7 [concrete = constants.%Foo.generic.d3ea5a.1] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc7_16.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_16.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc7: type = splice_block %C.ref [concrete = constants.%C] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1005,7 +1049,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %a.loc7_16.2: %C = symbolic_binding a, 0 [symbolic = %a.loc7_16.1 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc15: %Foo.type.bc6a25.2 = interface_decl @Foo.loc15 [concrete = constants.%Foo.generic.d3ea5a.2] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc15_16.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc15_16.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc15: type = splice_block %D.ref [concrete = constants.%C] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1016,12 +1060,14 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Foo.loc7(%a.loc7_16.2: %C) { +// CHECK:STDOUT: %a.patt.loc7_16.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_16.2 (constants.%a.patt)] // CHECK:STDOUT: %a.loc7_16.1: %C = symbolic_binding a, 0 [symbolic = %a.loc7_16.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: interface; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Foo.loc15(%a.loc15_16.2: %C) { +// CHECK:STDOUT: %a.patt.loc15_16.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc15_16.2 (constants.%a.patt)] // CHECK:STDOUT: %a.loc15_16.1: %C = symbolic_binding a, 0 [symbolic = %a.loc15_16.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1049,10 +1095,12 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo.loc7(constants.%a) { +// CHECK:STDOUT: %a.patt.loc7_16.2 => constants.%a.patt // CHECK:STDOUT: %a.loc7_16.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo.loc15(constants.%a) { +// CHECK:STDOUT: %a.patt.loc15_16.2 => constants.%a.patt // CHECK:STDOUT: %a.loc15_16.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1067,6 +1115,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %a: %C = symbolic_binding a, 0 [symbolic] // CHECK:STDOUT: %Foo.type: type = generic_interface_type @Foo [concrete] // CHECK:STDOUT: %Foo.generic: %Foo.type = struct_value () [concrete] @@ -1079,7 +1128,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %Foo.decl: %Foo.type = interface_decl @Foo [concrete = constants.%Foo.generic] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc6_16.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_16.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6: type = splice_block %C.ref [concrete = constants.%C] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1090,6 +1139,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Foo(%a.loc6_16.2: %C) { +// CHECK:STDOUT: %a.patt.loc6_16.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_16.2 (constants.%a.patt)] // CHECK:STDOUT: %a.loc6_16.1: %C = symbolic_binding a, 0 [symbolic = %a.loc6_16.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: interface; @@ -1104,6 +1154,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo(constants.%a) { +// CHECK:STDOUT: %a.patt.loc6_16.2 => constants.%a.patt // CHECK:STDOUT: %a.loc6_16.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1116,6 +1167,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %a: %C = symbolic_binding a, 0 [symbolic] // CHECK:STDOUT: %Foo.type.bc6a25.1: type = generic_interface_type @Foo.1 [concrete] // CHECK:STDOUT: %Foo.generic.d3ea5a.1: %Foo.type.bc6a25.1 = struct_value () [concrete] @@ -1144,7 +1196,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %D: type = alias_binding D, %C.ref [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl: %Foo.type.bc6a25.2 = interface_decl @Foo.loc17 [concrete = constants.%Foo.generic.d3ea5a.2] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc17_16.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc17_16.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc17: type = splice_block %D.ref [concrete = constants.%C] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1155,12 +1207,14 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Foo.1(imports.%Main.import_ref.996: %C) [from "alias_two_file.carbon"] { +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt (constants.%a.patt)] // CHECK:STDOUT: %a: %C = symbolic_binding a, 0 [symbolic = %a (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: interface; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Foo.loc17(%a.loc17_16.2: %C) { +// CHECK:STDOUT: %a.patt.loc17_16.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc17_16.2 (constants.%a.patt)] // CHECK:STDOUT: %a.loc17_16.1: %C = symbolic_binding a, 0 [symbolic = %a.loc17_16.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1187,10 +1241,12 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo.1(constants.%a) { +// CHECK:STDOUT: %a.patt => constants.%a.patt // CHECK:STDOUT: %a => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo.loc17(constants.%a) { +// CHECK:STDOUT: %a.patt.loc17_16.2 => constants.%a.patt // CHECK:STDOUT: %a.loc17_16.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1206,6 +1262,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %const: type = const_type %C [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %const [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %a: %const = symbolic_binding a, 0 [symbolic] // CHECK:STDOUT: %Foo.type.bc6a25.1: type = generic_interface_type @Foo.loc6 [concrete] // CHECK:STDOUT: %Foo.generic.d3ea5a.1: %Foo.type.bc6a25.1 = struct_value () [concrete] @@ -1222,7 +1279,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %Foo.decl.loc6: %Foo.type.bc6a25.1 = interface_decl @Foo.loc6 [concrete = constants.%Foo.generic.d3ea5a.1] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc6_16.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_16.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6: type = splice_block %const [concrete = constants.%const] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1232,7 +1289,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %a.loc6_16.2: %const = symbolic_binding a, 0 [symbolic = %a.loc6_16.1 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc18: %Foo.type.bc6a25.2 = interface_decl @Foo.loc18 [concrete = constants.%Foo.generic.d3ea5a.2] { -// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] +// CHECK:STDOUT: %a.patt.loc18_16.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc18_16.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc18: type = splice_block %const.loc18_19 [concrete = constants.%const] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -1245,12 +1302,14 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Foo.loc6(%a.loc6_16.2: %const) { +// CHECK:STDOUT: %a.patt.loc6_16.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_16.2 (constants.%a.patt)] // CHECK:STDOUT: %a.loc6_16.1: %const = symbolic_binding a, 0 [symbolic = %a.loc6_16.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: interface; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Foo.loc18(%a.loc18_16.2: %const) { +// CHECK:STDOUT: %a.patt.loc18_16.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc18_16.2 (constants.%a.patt)] // CHECK:STDOUT: %a.loc18_16.1: %const = symbolic_binding a, 0 [symbolic = %a.loc18_16.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1278,10 +1337,12 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo.loc6(constants.%a) { +// CHECK:STDOUT: %a.patt.loc6_16.2 => constants.%a.patt // CHECK:STDOUT: %a.loc6_16.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Foo.loc18(constants.%a) { +// CHECK:STDOUT: %a.patt.loc18_16.2 => constants.%a.patt // CHECK:STDOUT: %a.loc18_16.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/todo_define_not_default.carbon b/toolchain/check/testdata/interface/todo_define_not_default.carbon index 36187b535e1e..05bf2252c369 100644 --- a/toolchain/check/testdata/interface/todo_define_not_default.carbon +++ b/toolchain/check/testdata/interface/todo_define_not_default.carbon @@ -37,7 +37,13 @@ interface I { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %I.WithSelf.G.type: type = fn_type @I.WithSelf.G, @I.WithSelf(%Self.37e) [symbolic] // CHECK:STDOUT: %I.WithSelf.G: %I.WithSelf.G.type = struct_value () [symbolic] // CHECK:STDOUT: %assoc1: %I.assoc_type = assoc_entity element1, @I.WithSelf.%I.WithSelf.G.decl [concrete] @@ -95,12 +101,12 @@ interface I { // CHECK:STDOUT: %I.WithSelf.F.decl: @I.WithSelf.%I.WithSelf.F.type (%I.WithSelf.F.type) = fn_decl @I.WithSelf.F [symbolic = @I.WithSelf.%I.WithSelf.F (constants.%I.WithSelf.F)] {} {} // CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, %I.WithSelf.F.decl [concrete = constants.%assoc0.6c9] // CHECK:STDOUT: %I.WithSelf.G.decl: @I.WithSelf.%I.WithSelf.G.type (%I.WithSelf.G.type) = fn_decl @I.WithSelf.G [symbolic = @I.WithSelf.%I.WithSelf.G (constants.%I.WithSelf.G)] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc18_27 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc18_27 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc18_27: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc18: Core.Form = init_form %i32.loc18_27 [concrete = constants.%.795] diff --git a/toolchain/check/testdata/interop/cpp/basics/import/import.carbon b/toolchain/check/testdata/interop/cpp/basics/import/import.carbon index c8a67dafd919..29ce5fb67112 100644 --- a/toolchain/check/testdata/interop/cpp/basics/import/import.carbon +++ b/toolchain/check/testdata/interop/cpp/basics/import/import.carbon @@ -130,8 +130,8 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: = ref_binding_pattern x [concrete = ] +// CHECK:STDOUT: %x.var_patt: = var_pattern %x.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref = var %x.var_patt [concrete = ] // CHECK:STDOUT: assign %x.var, diff --git a/toolchain/check/testdata/interop/cpp/basics/import/indirect.carbon b/toolchain/check/testdata/interop/cpp/basics/import/indirect.carbon index 6d4c3e64ac51..6167023fa189 100644 --- a/toolchain/check/testdata/interop/cpp/basics/import/indirect.carbon +++ b/toolchain/check/testdata/interop/cpp/basics/import/indirect.carbon @@ -219,6 +219,8 @@ fn UseZ() -> Cpp.A.Z { // CHECK:STDOUT: %X: type = class_type @X [concrete] // CHECK:STDOUT: %X.elem: type = unbound_element_type %X, %i32 [concrete] // CHECK:STDOUT: %pattern_type.88a: type = pattern_type %X [concrete] +// CHECK:STDOUT: %ax.patt: %pattern_type.88a = ref_binding_pattern ax [concrete] +// CHECK:STDOUT: %ax.var_patt: %pattern_type.88a = var_pattern %ax.patt [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ptr.606: type = ptr_type %X [concrete] // CHECK:STDOUT: %X__carbon_thunk.type: type = fn_type @X__carbon_thunk [concrete] @@ -277,8 +279,8 @@ fn UseZ() -> Cpp.A.Z { // CHECK:STDOUT: fn @Use() -> out %return.param: %tuple.type.e55 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %ax.patt: %pattern_type.88a = ref_binding_pattern ax [concrete] -// CHECK:STDOUT: %ax.var_patt: %pattern_type.88a = var_pattern %ax.patt [concrete] +// CHECK:STDOUT: %ax.patt: %pattern_type.88a = ref_binding_pattern ax [concrete = constants.%ax.patt] +// CHECK:STDOUT: %ax.var_patt: %pattern_type.88a = var_pattern %ax.patt [concrete = constants.%ax.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %ax.var: ref %X = var %ax.var_patt // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] diff --git a/toolchain/check/testdata/interop/cpp/class/import/abstract.carbon b/toolchain/check/testdata/interop/cpp/class/import/abstract.carbon index 8dd9ad9ab799..a18a6055f6c4 100644 --- a/toolchain/check/testdata/interop/cpp/class/import/abstract.carbon +++ b/toolchain/check/testdata/interop/cpp/class/import/abstract.carbon @@ -107,6 +107,8 @@ fn F() -> Cpp.AbstractFinal { // CHECK:STDOUT: %AbstractFinal: type = class_type @AbstractFinal [concrete] // CHECK:STDOUT: %.dbd: Core.Form = init_form %AbstractFinal [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %AbstractFinal [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %AbstractFinal [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %AbstractFinal.f.type: type = fn_type @AbstractFinal.f [concrete] @@ -128,8 +130,8 @@ fn F() -> Cpp.AbstractFinal { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %AbstractFinal.ref [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %AbstractFinal.ref [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %AbstractFinal.ref: type = name_ref AbstractFinal, imports.%AbstractFinal.decl [concrete = constants.%AbstractFinal] diff --git a/toolchain/check/testdata/interop/cpp/class/import/access.carbon b/toolchain/check/testdata/interop/cpp/class/import/access.carbon index 0326d30babb5..5dad215bbdf8 100644 --- a/toolchain/check/testdata/interop/cpp/class/import/access.carbon +++ b/toolchain/check/testdata/interop/cpp/class/import/access.carbon @@ -1627,6 +1627,10 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %S.elem: type = unbound_element_type %S, %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %instance_data.patt: %pattern_type.6b6 = value_binding_pattern instance_data [concrete] +// CHECK:STDOUT: %static_data.patt.405: %pattern_type.6b6 = value_binding_pattern static_data [concrete] +// CHECK:STDOUT: %static_data.patt.617: %pattern_type.6b6 = ref_binding_pattern static_data [concrete] +// CHECK:STDOUT: %static_data.var_patt: %pattern_type.6b6 = var_pattern %static_data.patt.617 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -1635,15 +1639,15 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } // CHECK:STDOUT: %S.decl: type = class_decl @S [concrete = constants.%S] {} {} -// CHECK:STDOUT: %static_data.patt: %pattern_type.6b6 = ref_binding_pattern static_data [concrete] -// CHECK:STDOUT: %static_data.var_patt: %pattern_type.6b6 = var_pattern %static_data.patt [concrete] +// CHECK:STDOUT: %static_data.patt: %pattern_type.6b6 = ref_binding_pattern static_data [concrete = constants.%static_data.patt.617] +// CHECK:STDOUT: %static_data.var_patt: %pattern_type.6b6 = var_pattern %static_data.patt [concrete = constants.%static_data.var_patt] // CHECK:STDOUT: %static_data.var: ref %i32 = var %static_data.var_patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F(%s.param: %S) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %instance_data.patt: %pattern_type.6b6 = value_binding_pattern instance_data [concrete] +// CHECK:STDOUT: %instance_data.patt: %pattern_type.6b6 = value_binding_pattern instance_data [concrete = constants.%instance_data.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %s.ref: %S = name_ref s, %s // CHECK:STDOUT: %instance_data.ref: %S.elem = name_ref instance_data, @S.%.1 [concrete = @S.%.1] @@ -1652,14 +1656,14 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: %i32.loc8: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %instance_data: %i32 = value_binding instance_data, %.loc8_36.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %static_data.patt: %pattern_type.6b6 = value_binding_pattern static_data [concrete] +// CHECK:STDOUT: %static_data.patt: %pattern_type.6b6 = value_binding_pattern static_data [concrete = constants.%static_data.patt.405] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %S.ref.loc9: type = name_ref S, imports.%S.decl [concrete = constants.%S] // CHECK:STDOUT: // CHECK:STDOUT: %static_data.ref: ref %i32 = name_ref static_data, imports.%static_data.var [concrete = imports.%static_data.var] -// CHECK:STDOUT: %i32.loc9: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc9: %i32 = acquire_value %static_data.ref +// CHECK:STDOUT: %i32.loc9: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %static_data: %i32 = value_binding static_data, %.loc9 // CHECK:STDOUT: // CHECK:STDOUT: } @@ -1673,35 +1677,39 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %S.elem: type = unbound_element_type %S, %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %instance_data.patt: %pattern_type.6b6 = value_binding_pattern instance_data [concrete] +// CHECK:STDOUT: %static_data.patt.405: %pattern_type.6b6 = value_binding_pattern static_data [concrete] +// CHECK:STDOUT: %static_data.patt.617: %pattern_type.6b6 = ref_binding_pattern static_data [concrete] +// CHECK:STDOUT: %static_data.var_patt: %pattern_type.6b6 = var_pattern %static_data.patt.617 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { -// CHECK:STDOUT: %static_data.patt: %pattern_type.6b6 = ref_binding_pattern static_data [concrete] -// CHECK:STDOUT: %static_data.var_patt: %pattern_type.6b6 = var_pattern %static_data.patt [concrete] +// CHECK:STDOUT: %static_data.patt: %pattern_type.6b6 = ref_binding_pattern static_data [concrete = constants.%static_data.patt.617] +// CHECK:STDOUT: %static_data.var_patt: %pattern_type.6b6 = var_pattern %static_data.patt [concrete = constants.%static_data.var_patt] // CHECK:STDOUT: %static_data.var: ref %i32 = var %static_data.var_patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F(%d.param: %Derived) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %instance_data.patt: %pattern_type.6b6 = value_binding_pattern instance_data [concrete] +// CHECK:STDOUT: %instance_data.patt: %pattern_type.6b6 = value_binding_pattern instance_data [concrete = constants.%instance_data.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %d.ref: %Derived = name_ref d, %d // CHECK:STDOUT: %instance_data.ref: %S.elem = name_ref instance_data, @S.%.1 [concrete = @S.%.1] // CHECK:STDOUT: %.loc12_36.1: ref %S = class_element_access %d.ref, element0 // CHECK:STDOUT: %.loc12_36.2: ref %S = converted %d.ref, %.loc12_36.1 // CHECK:STDOUT: %.loc12_36.3: ref %i32 = class_element_access %.loc12_36.2, element0 -// CHECK:STDOUT: %i32.loc12: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc12_36.4: %i32 = acquire_value %.loc12_36.3 +// CHECK:STDOUT: %i32.loc12: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %instance_data: %i32 = value_binding instance_data, %.loc12_36.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %static_data.patt: %pattern_type.6b6 = value_binding_pattern static_data [concrete] +// CHECK:STDOUT: %static_data.patt: %pattern_type.6b6 = value_binding_pattern static_data [concrete = constants.%static_data.patt.405] // CHECK:STDOUT: } // CHECK:STDOUT: %Derived.ref.loc13: type = name_ref Derived, file.%Derived.decl [concrete = constants.%Derived] // CHECK:STDOUT: // CHECK:STDOUT: %static_data.ref: ref %i32 = name_ref static_data, imports.%static_data.var [concrete = imports.%static_data.var] -// CHECK:STDOUT: %i32.loc13: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc13: %i32 = acquire_value %static_data.ref +// CHECK:STDOUT: %i32.loc13: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %static_data: %i32 = value_binding static_data, %.loc13 // CHECK:STDOUT: // CHECK:STDOUT: } @@ -1715,6 +1723,12 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %instance_data.patt: %pattern_type.6b6 = value_binding_pattern instance_data [concrete] +// CHECK:STDOUT: %unqualified_static_data.patt: %pattern_type.6b6 = value_binding_pattern unqualified_static_data [concrete] +// CHECK:STDOUT: %static_data.patt: %pattern_type.6b6 = ref_binding_pattern static_data [concrete] +// CHECK:STDOUT: %static_data.var_patt: %pattern_type.6b6 = var_pattern %static_data.patt [concrete] +// CHECK:STDOUT: %derived_static_data.patt: %pattern_type.6b6 = value_binding_pattern derived_static_data [concrete] +// CHECK:STDOUT: %base_static_data.patt: %pattern_type.6b6 = value_binding_pattern base_static_data [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -1723,8 +1737,8 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} -// CHECK:STDOUT: %static_data.patt: %pattern_type.6b6 = ref_binding_pattern static_data [concrete] -// CHECK:STDOUT: %static_data.var_patt: %pattern_type.6b6 = var_pattern %static_data.patt [concrete] +// CHECK:STDOUT: %static_data.patt: %pattern_type.6b6 = ref_binding_pattern static_data [concrete = constants.%static_data.patt] +// CHECK:STDOUT: %static_data.var_patt: %pattern_type.6b6 = var_pattern %static_data.patt [concrete = constants.%static_data.var_patt] // CHECK:STDOUT: %static_data.var: ref %i32 = var %static_data.var_patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1745,40 +1759,40 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: fn @Derived.F(%self.param: %Derived) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %instance_data.patt: %pattern_type.6b6 = value_binding_pattern instance_data [concrete] +// CHECK:STDOUT: %instance_data.patt: %pattern_type.6b6 = value_binding_pattern instance_data [concrete = constants.%instance_data.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %self.ref: %Derived = name_ref self, %self // CHECK:STDOUT: %instance_data.ref: %C.elem = name_ref instance_data, @C.%.1 [concrete = @C.%.1] // CHECK:STDOUT: %.loc10_41.1: ref %C = class_element_access %self.ref, element0 // CHECK:STDOUT: %.loc10_41.2: ref %C = converted %self.ref, %.loc10_41.1 // CHECK:STDOUT: %.loc10_41.3: ref %i32 = class_element_access %.loc10_41.2, element0 -// CHECK:STDOUT: %i32.loc10: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc10_41.4: %i32 = acquire_value %.loc10_41.3 +// CHECK:STDOUT: %i32.loc10: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %instance_data: %i32 = value_binding instance_data, %.loc10_41.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %unqualified_static_data.patt: %pattern_type.6b6 = value_binding_pattern unqualified_static_data [concrete] +// CHECK:STDOUT: %unqualified_static_data.patt: %pattern_type.6b6 = value_binding_pattern unqualified_static_data [concrete = constants.%unqualified_static_data.patt] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: %static_data.ref.loc11: ref %i32 = name_ref static_data, imports.%static_data.var [concrete = imports.%static_data.var] -// CHECK:STDOUT: %i32.loc11: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc11: %i32 = acquire_value %static_data.ref.loc11 +// CHECK:STDOUT: %i32.loc11: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %unqualified_static_data: %i32 = value_binding unqualified_static_data, %.loc11 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %derived_static_data.patt: %pattern_type.6b6 = value_binding_pattern derived_static_data [concrete] +// CHECK:STDOUT: %derived_static_data.patt: %pattern_type.6b6 = value_binding_pattern derived_static_data [concrete = constants.%derived_static_data.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Derived.ref: type = name_ref Derived, file.%Derived.decl [concrete = constants.%Derived] // CHECK:STDOUT: %static_data.ref.loc12: ref %i32 = name_ref static_data, imports.%static_data.var [concrete = imports.%static_data.var] -// CHECK:STDOUT: %i32.loc12: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc12: %i32 = acquire_value %static_data.ref.loc12 +// CHECK:STDOUT: %i32.loc12: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %derived_static_data: %i32 = value_binding derived_static_data, %.loc12 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %base_static_data.patt: %pattern_type.6b6 = value_binding_pattern base_static_data [concrete] +// CHECK:STDOUT: %base_static_data.patt: %pattern_type.6b6 = value_binding_pattern base_static_data [concrete = constants.%base_static_data.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %static_data.ref.loc13: ref %i32 = name_ref static_data, imports.%static_data.var [concrete = imports.%static_data.var] -// CHECK:STDOUT: %i32.loc13: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc13: %i32 = acquire_value %static_data.ref.loc13 +// CHECK:STDOUT: %i32.loc13: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %base_static_data: %i32 = value_binding base_static_data, %.loc13 // CHECK:STDOUT: // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/interop/cpp/class/import/base.carbon b/toolchain/check/testdata/interop/cpp/class/import/base.carbon index daf0afcc7adb..cf9bd6ec71ad 100644 --- a/toolchain/check/testdata/interop/cpp/class/import/base.carbon +++ b/toolchain/check/testdata/interop/cpp/class/import/base.carbon @@ -472,10 +472,14 @@ class V { // CHECK:STDOUT: %Derived: type = class_type @Derived [concrete] // CHECK:STDOUT: %ptr.976: type = ptr_type %Derived [concrete] // CHECK:STDOUT: %pattern_type.d23: type = pattern_type %ptr.976 [concrete] +// CHECK:STDOUT: %d.param_patt.9b7: %pattern_type.d23 = value_param_pattern [concrete] +// CHECK:STDOUT: %d.patt.1fc: %pattern_type.d23 = at_binding_pattern d, %d.param_patt.9b7 [concrete] // CHECK:STDOUT: %Base: type = class_type @Base [concrete] // CHECK:STDOUT: %ptr.0e0: type = ptr_type %Base [concrete] // CHECK:STDOUT: %.866: Core.Form = init_form %ptr.0e0 [concrete] // CHECK:STDOUT: %pattern_type.cb0: type = pattern_type %ptr.0e0 [concrete] +// CHECK:STDOUT: %return.param_patt.b43: %pattern_type.cb0 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.363: %pattern_type.cb0 = return_slot_pattern %return.param_patt.b43, %ptr.0e0 [concrete] // CHECK:STDOUT: %ConvertPtr.type: type = fn_type @ConvertPtr [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %ConvertPtr: %ConvertPtr.type = struct_value () [concrete] @@ -493,6 +497,8 @@ class V { // CHECK:STDOUT: %AcceptVal.type: type = fn_type @AcceptVal [concrete] // CHECK:STDOUT: %AcceptVal: %AcceptVal.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.2f5: type = pattern_type %Derived [concrete] +// CHECK:STDOUT: %d.param_patt.0f5: %pattern_type.2f5 = value_param_pattern [concrete] +// CHECK:STDOUT: %d.patt.e5a: %pattern_type.2f5 = at_binding_pattern d, %d.param_patt.0f5 [concrete] // CHECK:STDOUT: %ConvertVal.type: type = fn_type @ConvertVal [concrete] // CHECK:STDOUT: %ConvertVal: %ConvertVal.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -511,10 +517,10 @@ class V { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %ConvertPtr.decl: %ConvertPtr.type = fn_decl @ConvertPtr [concrete = constants.%ConvertPtr] { -// CHECK:STDOUT: %d.param_patt: %pattern_type.d23 = value_param_pattern [concrete] -// CHECK:STDOUT: %d.patt: %pattern_type.d23 = at_binding_pattern d, %d.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.cb0 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.cb0 = return_slot_pattern %return.param_patt, %ptr.loc7_43 [concrete] +// CHECK:STDOUT: %d.param_patt: %pattern_type.d23 = value_param_pattern [concrete = constants.%d.param_patt.9b7] +// CHECK:STDOUT: %d.patt: %pattern_type.d23 = at_binding_pattern d, %d.param_patt [concrete = constants.%d.patt.1fc] +// CHECK:STDOUT: %return.param_patt: %pattern_type.cb0 = out_param_pattern [concrete = constants.%return.param_patt.b43] +// CHECK:STDOUT: %return.patt: %pattern_type.cb0 = return_slot_pattern %return.param_patt, %ptr.loc7_43 [concrete = constants.%return.patt.363] // CHECK:STDOUT: } { // CHECK:STDOUT: %Cpp.ref.loc7_35: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %Base.ref: type = name_ref Base, imports.%Base.decl [concrete = constants.%Base] @@ -531,8 +537,8 @@ class V { // CHECK:STDOUT: %return: ref %ptr.0e0 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %ConvertVal.decl: %ConvertVal.type = fn_decl @ConvertVal [concrete = constants.%ConvertVal] { -// CHECK:STDOUT: %d.param_patt: %pattern_type.2f5 = value_param_pattern [concrete] -// CHECK:STDOUT: %d.patt: %pattern_type.2f5 = at_binding_pattern d, %d.param_patt [concrete] +// CHECK:STDOUT: %d.param_patt: %pattern_type.2f5 = value_param_pattern [concrete = constants.%d.param_patt.0f5] +// CHECK:STDOUT: %d.patt: %pattern_type.2f5 = at_binding_pattern d, %d.param_patt [concrete = constants.%d.patt.e5a] // CHECK:STDOUT: } { // CHECK:STDOUT: %d.param: %Derived = value_param call_param0 // CHECK:STDOUT: %.loc15: type = splice_block %Derived.ref [concrete = constants.%Derived] { diff --git a/toolchain/check/testdata/interop/cpp/class/import/class.carbon b/toolchain/check/testdata/interop/cpp/class/import/class.carbon index 8e08aa7debd2..d2f3e9e27a47 100644 --- a/toolchain/check/testdata/interop/cpp/class/import/class.carbon +++ b/toolchain/check/testdata/interop/cpp/class/import/class.carbon @@ -258,6 +258,8 @@ fn GenericUse(p2: Generic(Cpp.Class1)) { // CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %Bar [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] +// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %bar.patt: %pattern_type = at_binding_pattern bar, %bar.param_patt [concrete] // CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] // CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -272,8 +274,8 @@ fn GenericUse(p2: Generic(Cpp.Class1)) { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { -// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %bar.patt: %pattern_type = at_binding_pattern bar, %bar.param_patt [concrete] +// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete = constants.%bar.param_patt] +// CHECK:STDOUT: %bar.patt: %pattern_type = at_binding_pattern bar, %bar.param_patt [concrete = constants.%bar.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr = value_param call_param0 // CHECK:STDOUT: %.loc7: type = splice_block %ptr [concrete = constants.%ptr] { @@ -293,6 +295,8 @@ fn GenericUse(p2: Generic(Cpp.Class1)) { // CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %Bar [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] +// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %bar.patt: %pattern_type = at_binding_pattern bar, %bar.param_patt [concrete] // CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] // CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -307,8 +311,8 @@ fn GenericUse(p2: Generic(Cpp.Class1)) { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { -// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %bar.patt: %pattern_type = at_binding_pattern bar, %bar.param_patt [concrete] +// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete = constants.%bar.param_patt] +// CHECK:STDOUT: %bar.patt: %pattern_type = at_binding_pattern bar, %bar.param_patt [concrete = constants.%bar.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr = value_param call_param0 // CHECK:STDOUT: %.loc7: type = splice_block %ptr [concrete = constants.%ptr] { @@ -328,6 +332,8 @@ fn GenericUse(p2: Generic(Cpp.Class1)) { // CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %Bar [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] +// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %bar.patt: %pattern_type = at_binding_pattern bar, %bar.param_patt [concrete] // CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] // CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -342,8 +348,8 @@ fn GenericUse(p2: Generic(Cpp.Class1)) { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { -// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %bar.patt: %pattern_type = at_binding_pattern bar, %bar.param_patt [concrete] +// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete = constants.%bar.param_patt] +// CHECK:STDOUT: %bar.patt: %pattern_type = at_binding_pattern bar, %bar.param_patt [concrete = constants.%bar.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr = value_param call_param0 // CHECK:STDOUT: %.loc7: type = splice_block %ptr [concrete = constants.%ptr] { @@ -393,6 +399,9 @@ fn GenericUse(p2: Generic(Cpp.Class1)) { // CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] // CHECK:STDOUT: %ptr.227: type = ptr_type %Bar [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.227 [concrete] +// CHECK:STDOUT: %bar.patt: %pattern_type = value_binding_pattern bar [concrete] +// CHECK:STDOUT: %foo.patt: %pattern_type = ref_binding_pattern foo [concrete] +// CHECK:STDOUT: %foo.var_patt: %pattern_type = var_pattern %foo.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -401,25 +410,25 @@ fn GenericUse(p2: Generic(Cpp.Class1)) { // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } // CHECK:STDOUT: %Bar.decl: type = class_decl @Bar [concrete = constants.%Bar] {} {} -// CHECK:STDOUT: %foo.patt: %pattern_type = ref_binding_pattern foo [concrete] -// CHECK:STDOUT: %foo.var_patt: %pattern_type = var_pattern %foo.patt [concrete] +// CHECK:STDOUT: %foo.patt: %pattern_type = ref_binding_pattern foo [concrete = constants.%foo.patt] +// CHECK:STDOUT: %foo.var_patt: %pattern_type = var_pattern %foo.patt [concrete = constants.%foo.var_patt] // CHECK:STDOUT: %foo.var: ref %ptr.227 = var %foo.var_patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @MyF() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %bar.patt: %pattern_type = value_binding_pattern bar [concrete] +// CHECK:STDOUT: %bar.patt: %pattern_type = value_binding_pattern bar [concrete = constants.%bar.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc8_30: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %Bar.ref.loc8_33: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] // CHECK:STDOUT: %foo.ref: ref %ptr.227 = name_ref foo, imports.%foo.var [concrete = imports.%foo.var] +// CHECK:STDOUT: %.loc8_37: %ptr.227 = acquire_value %foo.ref // CHECK:STDOUT: %.loc8_26: type = splice_block %ptr [concrete = constants.%ptr.227] { // CHECK:STDOUT: %Cpp.ref.loc8_19: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %Bar.ref.loc8_22: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] // CHECK:STDOUT: %ptr: type = ptr_type %Bar.ref.loc8_22 [concrete = constants.%ptr.227] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc8_37: %ptr.227 = acquire_value %foo.ref // CHECK:STDOUT: %bar: %ptr.227 = value_binding bar, %.loc8_37 // CHECK:STDOUT: // CHECK:STDOUT: } @@ -430,8 +439,11 @@ fn GenericUse(p2: Generic(Cpp.Class1)) { // CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] // CHECK:STDOUT: %ptr.227: type = ptr_type %Bar [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.227 [concrete] +// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %bar.patt: %pattern_type = at_binding_pattern bar, %bar.param_patt [concrete] // CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] // CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] +// CHECK:STDOUT: %foo_bar.patt: %pattern_type = value_binding_pattern foo_bar [concrete] // CHECK:STDOUT: %Bar.elem: type = unbound_element_type %Bar, %ptr.227 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -445,8 +457,8 @@ fn GenericUse(p2: Generic(Cpp.Class1)) { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { -// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %bar.patt: %pattern_type = at_binding_pattern bar, %bar.param_patt [concrete] +// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete = constants.%bar.param_patt] +// CHECK:STDOUT: %bar.patt: %pattern_type = at_binding_pattern bar, %bar.param_patt [concrete = constants.%bar.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr.227 = value_param call_param0 // CHECK:STDOUT: %.loc7: type = splice_block %ptr.loc7 [concrete = constants.%ptr.227] { @@ -461,18 +473,18 @@ fn GenericUse(p2: Generic(Cpp.Class1)) { // CHECK:STDOUT: fn @MyF(%bar.param: %ptr.227) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %foo_bar.patt: %pattern_type = value_binding_pattern foo_bar [concrete] +// CHECK:STDOUT: %foo_bar.patt: %pattern_type = value_binding_pattern foo_bar [concrete = constants.%foo_bar.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %bar.ref: %ptr.227 = name_ref bar, %bar // CHECK:STDOUT: %.loc8_37.1: ref %Bar = deref %bar.ref // CHECK:STDOUT: %foo.ref: %Bar.elem = name_ref foo, @Bar.%.1 [concrete = @Bar.%.1] // CHECK:STDOUT: %.loc8_37.2: ref %ptr.227 = class_element_access %.loc8_37.1, element0 +// CHECK:STDOUT: %.loc8_37.3: %ptr.227 = acquire_value %.loc8_37.2 // CHECK:STDOUT: %.loc8_30: type = splice_block %ptr.loc8 [concrete = constants.%ptr.227] { // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %Bar.ref.loc8: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] // CHECK:STDOUT: %ptr.loc8: type = ptr_type %Bar.ref.loc8 [concrete = constants.%ptr.227] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc8_37.3: %ptr.227 = acquire_value %.loc8_37.2 // CHECK:STDOUT: %foo_bar: %ptr.227 = value_binding foo_bar, %.loc8_37.3 // CHECK:STDOUT: return // CHECK:STDOUT: } @@ -483,6 +495,8 @@ fn GenericUse(p2: Generic(Cpp.Class1)) { // CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] // CHECK:STDOUT: %ptr.227: type = ptr_type %Bar [concrete] // CHECK:STDOUT: %pattern_type.1b6: type = pattern_type %ptr.227 [concrete] +// CHECK:STDOUT: %bar.param_patt: %pattern_type.1b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %bar.patt: %pattern_type.1b6 = at_binding_pattern bar, %bar.param_patt [concrete] // CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] @@ -508,8 +522,8 @@ fn GenericUse(p2: Generic(Cpp.Class1)) { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { -// CHECK:STDOUT: %bar.param_patt: %pattern_type.1b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %bar.patt: %pattern_type.1b6 = at_binding_pattern bar, %bar.param_patt [concrete] +// CHECK:STDOUT: %bar.param_patt: %pattern_type.1b6 = value_param_pattern [concrete = constants.%bar.param_patt] +// CHECK:STDOUT: %bar.patt: %pattern_type.1b6 = at_binding_pattern bar, %bar.param_patt [concrete = constants.%bar.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr.227 = value_param call_param0 // CHECK:STDOUT: %.loc7: type = splice_block %ptr [concrete = constants.%ptr.227] { @@ -600,6 +614,8 @@ fn GenericUse(p2: Generic(Cpp.Class1)) { // CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %Bar [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] +// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %bar.patt: %pattern_type = at_binding_pattern bar, %bar.param_patt [concrete] // CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] // CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -617,8 +633,8 @@ fn GenericUse(p2: Generic(Cpp.Class1)) { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { -// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %bar.patt: %pattern_type = at_binding_pattern bar, %bar.param_patt [concrete] +// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete = constants.%bar.param_patt] +// CHECK:STDOUT: %bar.patt: %pattern_type = at_binding_pattern bar, %bar.param_patt [concrete = constants.%bar.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr = value_param call_param0 // CHECK:STDOUT: %.loc7: type = splice_block %ptr [concrete = constants.%ptr] { diff --git a/toolchain/check/testdata/interop/cpp/class/import/constructor.carbon b/toolchain/check/testdata/interop/cpp/class/import/constructor.carbon index a8a869fe4445..0950abc74ed4 100644 --- a/toolchain/check/testdata/interop/cpp/class/import/constructor.carbon +++ b/toolchain/check/testdata/interop/cpp/class/import/constructor.carbon @@ -318,6 +318,7 @@ fn F() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %pattern_type.bbc: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.bbc = value_binding_pattern c [concrete] // CHECK:STDOUT: %C.C.cpp_overload_set.type: type = cpp_overload_set_type @C.C.cpp_overload_set [concrete] // CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete] // CHECK:STDOUT: %ptr.0a2: type = ptr_type %C [concrete] @@ -344,7 +345,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.bbc = value_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.bbc = value_binding_pattern c [concrete = constants.%c.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc8_25: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref.loc8_28: type = name_ref C, imports.%C.decl [concrete = constants.%C] @@ -353,12 +354,12 @@ fn F() { // CHECK:STDOUT: %addr: %ptr.0a2 = addr_of %.loc8_33.1 // CHECK:STDOUT: %C__carbon_thunk.call: init %empty_tuple.type = call imports.%C__carbon_thunk.decl(%addr) // CHECK:STDOUT: %.loc8_33.2: init %C to %.loc8_33.1 = mark_in_place_init %C__carbon_thunk.call +// CHECK:STDOUT: %.loc8_33.3: ref %C = temporary %.loc8_33.1, %.loc8_33.2 +// CHECK:STDOUT: %.loc8_33.4: %C = acquire_value %.loc8_33.3 // CHECK:STDOUT: %.loc8_20: type = splice_block %C.ref.loc8_20 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc8_17: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref.loc8_20: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc8_33.3: ref %C = temporary %.loc8_33.1, %.loc8_33.2 -// CHECK:STDOUT: %.loc8_33.4: %C = acquire_value %.loc8_33.3 // CHECK:STDOUT: %c: %C = value_binding c, %.loc8_33.4 // CHECK:STDOUT: %C.cpp_destructor.bound: = bound_method %.loc8_33.3, constants.%C.cpp_destructor // CHECK:STDOUT: %C.cpp_destructor.call: init %empty_tuple.type = call %C.cpp_destructor.bound(%.loc8_33.3) @@ -371,6 +372,8 @@ fn F() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %pattern_type.bbc: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.bbc = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.bbc = var_pattern %c.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %Default.type: type = facet_type <@Default> [concrete] // CHECK:STDOUT: %T.b09: %Default.type = symbolic_binding T, 0 [symbolic] @@ -399,8 +402,8 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.bbc = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.bbc = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.bbc = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type.bbc = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt // CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%C, (constants.%DefaultOrUnformed.impl_witness.7ba) [concrete = constants.%DefaultOrUnformed.facet.5f4] @@ -427,6 +430,7 @@ fn F() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %pattern_type.bbc: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.bbc = value_binding_pattern c [concrete] // CHECK:STDOUT: %C.C.cpp_overload_set.type: type = cpp_overload_set_type @C.C.cpp_overload_set [concrete] // CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete] // CHECK:STDOUT: %int_123.fff: Core.IntLiteral = int_value 123 [concrete] @@ -476,7 +480,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.bbc = value_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.bbc = value_binding_pattern c [concrete = constants.%c.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc8_25: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref.loc8_28: type = name_ref C, imports.%C.decl [concrete = constants.%C] @@ -501,12 +505,12 @@ fn F() { // CHECK:STDOUT: %addr: %ptr.0a2 = addr_of %.loc8_41.1 // CHECK:STDOUT: %C__carbon_thunk.call: init %empty_tuple.type = call imports.%C__carbon_thunk.decl(%.loc8_33.2, %.loc8_38.2, %addr) // CHECK:STDOUT: %.loc8_41.2: init %C to %.loc8_41.1 = mark_in_place_init %C__carbon_thunk.call +// CHECK:STDOUT: %.loc8_41.3: ref %C = temporary %.loc8_41.1, %.loc8_41.2 +// CHECK:STDOUT: %.loc8_41.4: %C = acquire_value %.loc8_41.3 // CHECK:STDOUT: %.loc8_20: type = splice_block %C.ref.loc8_20 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc8_17: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref.loc8_20: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc8_41.3: ref %C = temporary %.loc8_41.1, %.loc8_41.2 -// CHECK:STDOUT: %.loc8_41.4: %C = acquire_value %.loc8_41.3 // CHECK:STDOUT: %c: %C = value_binding c, %.loc8_41.4 // CHECK:STDOUT: %C.cpp_destructor.bound: = bound_method %.loc8_41.3, constants.%C.cpp_destructor // CHECK:STDOUT: %C.cpp_destructor.call: init %empty_tuple.type = call %C.cpp_destructor.bound(%.loc8_41.3) @@ -519,11 +523,13 @@ fn F() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %pattern_type.bbc: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = value_binding_pattern c1 [concrete] // CHECK:STDOUT: %C.C.cpp_overload_set.type: type = cpp_overload_set_type @C.C.cpp_overload_set [concrete] // CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete] // CHECK:STDOUT: %ptr.0a2: type = ptr_type %C [concrete] // CHECK:STDOUT: %C__carbon_thunk.type.e78457.1: type = fn_type @C__carbon_thunk.1 [concrete] // CHECK:STDOUT: %C__carbon_thunk.ca303d.1: %C__carbon_thunk.type.e78457.1 = struct_value () [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = value_binding_pattern c2 [concrete] // CHECK:STDOUT: %int_123.fff: Core.IntLiteral = int_value 123 [concrete] // CHECK:STDOUT: %int_456.010: Core.IntLiteral = int_value 456 [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] @@ -575,7 +581,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = value_binding_pattern c1 [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = value_binding_pattern c1 [concrete = constants.%c1.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc8_26: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref.loc8_29: type = name_ref C, imports.%C.decl [concrete = constants.%C] @@ -584,15 +590,15 @@ fn F() { // CHECK:STDOUT: %addr.loc8: %ptr.0a2 = addr_of %.loc8_34.1 // CHECK:STDOUT: %C__carbon_thunk.call.loc8: init %empty_tuple.type = call imports.%C__carbon_thunk.decl.abd9a2.1(%addr.loc8) // CHECK:STDOUT: %.loc8_34.2: init %C to %.loc8_34.1 = mark_in_place_init %C__carbon_thunk.call.loc8 +// CHECK:STDOUT: %.loc8_34.3: ref %C = temporary %.loc8_34.1, %.loc8_34.2 +// CHECK:STDOUT: %.loc8_34.4: %C = acquire_value %.loc8_34.3 // CHECK:STDOUT: %.loc8_21: type = splice_block %C.ref.loc8_21 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc8_18: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref.loc8_21: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc8_34.3: ref %C = temporary %.loc8_34.1, %.loc8_34.2 -// CHECK:STDOUT: %.loc8_34.4: %C = acquire_value %.loc8_34.3 // CHECK:STDOUT: %c1: %C = value_binding c1, %.loc8_34.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = value_binding_pattern c2 [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = value_binding_pattern c2 [concrete = constants.%c2.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc9_26: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref.loc9_29: type = name_ref C, imports.%C.decl [concrete = constants.%C] @@ -617,12 +623,12 @@ fn F() { // CHECK:STDOUT: %addr.loc9: %ptr.0a2 = addr_of %.loc9_42.1 // CHECK:STDOUT: %C__carbon_thunk.call.loc9: init %empty_tuple.type = call imports.%C__carbon_thunk.decl.abd9a2.2(%.loc9_34.2, %.loc9_39.2, %addr.loc9) // CHECK:STDOUT: %.loc9_42.2: init %C to %.loc9_42.1 = mark_in_place_init %C__carbon_thunk.call.loc9 +// CHECK:STDOUT: %.loc9_42.3: ref %C = temporary %.loc9_42.1, %.loc9_42.2 +// CHECK:STDOUT: %.loc9_42.4: %C = acquire_value %.loc9_42.3 // CHECK:STDOUT: %.loc9_21: type = splice_block %C.ref.loc9_21 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc9_18: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref.loc9_21: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc9_42.3: ref %C = temporary %.loc9_42.1, %.loc9_42.2 -// CHECK:STDOUT: %.loc9_42.4: %C = acquire_value %.loc9_42.3 // CHECK:STDOUT: %c2: %C = value_binding c2, %.loc9_42.4 // CHECK:STDOUT: %C.cpp_destructor.bound.loc9: = bound_method %.loc9_42.3, constants.%C.cpp_destructor // CHECK:STDOUT: %C.cpp_destructor.call.loc9: init %empty_tuple.type = call %C.cpp_destructor.bound.loc9(%.loc9_42.3) @@ -637,6 +643,7 @@ fn F() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %pattern_type.bbc: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = value_binding_pattern c1 [concrete] // CHECK:STDOUT: %C.C.cpp_overload_set.type: type = cpp_overload_set_type @C.C.cpp_overload_set [concrete] // CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete] // CHECK:STDOUT: %int_8.b85: Core.IntLiteral = int_value 8 [concrete] @@ -663,6 +670,7 @@ fn F() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.f46: = bound_method %int_9.988, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] // CHECK:STDOUT: %bound_method.9bf: = bound_method %int_9.988, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_9.056: %i32 = int_value 9 [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = value_binding_pattern c2 [concrete] // CHECK:STDOUT: %C__carbon_thunk.type.e78457.2: type = fn_type @C__carbon_thunk.2 [concrete] // CHECK:STDOUT: %C__carbon_thunk.ca303d.2: %C__carbon_thunk.type.e78457.2 = struct_value () [concrete] // CHECK:STDOUT: %C.cpp_destructor.type: type = fn_type @C.cpp_destructor [concrete] @@ -693,7 +701,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = value_binding_pattern c1 [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = value_binding_pattern c1 [concrete = constants.%c1.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc8_26: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref.loc8_29: type = name_ref C, imports.%C.decl [concrete = constants.%C] @@ -718,15 +726,15 @@ fn F() { // CHECK:STDOUT: %addr.loc8: %ptr.0a2 = addr_of %.loc8_38.1 // CHECK:STDOUT: %C__carbon_thunk.call.loc8: init %empty_tuple.type = call imports.%C__carbon_thunk.decl.abd9a2.1(%.loc8_34.2, %.loc8_37.2, %addr.loc8) // CHECK:STDOUT: %.loc8_38.2: init %C to %.loc8_38.1 = mark_in_place_init %C__carbon_thunk.call.loc8 +// CHECK:STDOUT: %.loc8_38.3: ref %C = temporary %.loc8_38.1, %.loc8_38.2 +// CHECK:STDOUT: %.loc8_38.4: %C = acquire_value %.loc8_38.3 // CHECK:STDOUT: %.loc8_21: type = splice_block %C.ref.loc8_21 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc8_18: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref.loc8_21: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc8_38.3: ref %C = temporary %.loc8_38.1, %.loc8_38.2 -// CHECK:STDOUT: %.loc8_38.4: %C = acquire_value %.loc8_38.3 // CHECK:STDOUT: %c1: %C = value_binding c1, %.loc8_38.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = value_binding_pattern c2 [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = value_binding_pattern c2 [concrete = constants.%c2.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc9_26: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref.loc9_29: type = name_ref C, imports.%C.decl [concrete = constants.%C] @@ -743,12 +751,12 @@ fn F() { // CHECK:STDOUT: %addr.loc9: %ptr.0a2 = addr_of %.loc9_35.1 // CHECK:STDOUT: %C__carbon_thunk.call.loc9: init %empty_tuple.type = call imports.%C__carbon_thunk.decl.abd9a2.2(%.loc9_34.2, %addr.loc9) // CHECK:STDOUT: %.loc9_35.2: init %C to %.loc9_35.1 = mark_in_place_init %C__carbon_thunk.call.loc9 +// CHECK:STDOUT: %.loc9_35.3: ref %C = temporary %.loc9_35.1, %.loc9_35.2 +// CHECK:STDOUT: %.loc9_35.4: %C = acquire_value %.loc9_35.3 // CHECK:STDOUT: %.loc9_21: type = splice_block %C.ref.loc9_21 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc9_18: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref.loc9_21: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc9_35.3: ref %C = temporary %.loc9_35.1, %.loc9_35.2 -// CHECK:STDOUT: %.loc9_35.4: %C = acquire_value %.loc9_35.3 // CHECK:STDOUT: %c2: %C = value_binding c2, %.loc9_35.4 // CHECK:STDOUT: %C.cpp_destructor.bound.loc9: = bound_method %.loc9_35.3, constants.%C.cpp_destructor // CHECK:STDOUT: %C.cpp_destructor.call.loc9: init %empty_tuple.type = call %C.cpp_destructor.bound.loc9(%.loc9_35.3) @@ -763,6 +771,8 @@ fn F() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %pattern_type.bbc: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = ref_binding_pattern c1 [concrete] +// CHECK:STDOUT: %c1.var_patt: %pattern_type.bbc = var_pattern %c1.patt [concrete] // CHECK:STDOUT: %C.C.cpp_overload_set.type: type = cpp_overload_set_type @C.C.cpp_overload_set [concrete] // CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete] // CHECK:STDOUT: %int_123.fff: Core.IntLiteral = int_value 123 [concrete] @@ -785,6 +795,8 @@ fn F() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39, @Core.IntLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete] // CHECK:STDOUT: %bound_method: = bound_method %int_123.fff, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_123.2bf: %i32 = int_value 123 [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = ref_binding_pattern c2 [concrete] +// CHECK:STDOUT: %c2.var_patt: %pattern_type.bbc = var_pattern %c2.patt [concrete] // CHECK:STDOUT: %true: bool = bool_literal true [concrete] // CHECK:STDOUT: %ptr.bb2: type = ptr_type bool [concrete] // CHECK:STDOUT: %C__carbon_thunk.type.e78457.2: type = fn_type @C__carbon_thunk.2 [concrete] @@ -799,6 +811,8 @@ fn F() { // CHECK:STDOUT: %bool.as.Copy.impl.Op.bound: = bound_method %true, %bool.as.Copy.impl.Op [concrete] // CHECK:STDOUT: %.e3b: ref bool = temporary invalid, %true [concrete] // CHECK:STDOUT: %addr: %ptr.bb2 = addr_of %.e3b [concrete] +// CHECK:STDOUT: %c3.patt: %pattern_type.bbc = ref_binding_pattern c3 [concrete] +// CHECK:STDOUT: %c3.var_patt: %pattern_type.bbc = var_pattern %c3.patt [concrete] // CHECK:STDOUT: %C__carbon_thunk.type.e78457.3: type = fn_type @C__carbon_thunk.3 [concrete] // CHECK:STDOUT: %C__carbon_thunk.ca303d.3: %C__carbon_thunk.type.e78457.3 = struct_value () [concrete] // CHECK:STDOUT: %C.cpp_destructor.type: type = fn_type @C.cpp_destructor [concrete] @@ -836,8 +850,8 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = ref_binding_pattern c1 [concrete] -// CHECK:STDOUT: %c1.var_patt: %pattern_type.bbc = var_pattern %c1.patt [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = ref_binding_pattern c1 [concrete = constants.%c1.patt] +// CHECK:STDOUT: %c1.var_patt: %pattern_type.bbc = var_pattern %c1.patt [concrete = constants.%c1.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c1.var: ref %C = var %c1.var_patt // CHECK:STDOUT: %Cpp.ref.loc8_19: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] @@ -862,8 +876,8 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %c1: ref %C = ref_binding c1, %c1.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = ref_binding_pattern c2 [concrete] -// CHECK:STDOUT: %c2.var_patt: %pattern_type.bbc = var_pattern %c2.patt [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = ref_binding_pattern c2 [concrete = constants.%c2.patt] +// CHECK:STDOUT: %c2.var_patt: %pattern_type.bbc = var_pattern %c2.patt [concrete = constants.%c2.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c2.var: ref %C = var %c2.var_patt // CHECK:STDOUT: %Cpp.ref.loc9_26: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] @@ -887,8 +901,8 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %c2: ref %C = ref_binding c2, %c2.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c3.patt: %pattern_type.bbc = ref_binding_pattern c3 [concrete] -// CHECK:STDOUT: %c3.var_patt: %pattern_type.bbc = var_pattern %c3.patt [concrete] +// CHECK:STDOUT: %c3.patt: %pattern_type.bbc = ref_binding_pattern c3 [concrete = constants.%c3.patt] +// CHECK:STDOUT: %c3.var_patt: %pattern_type.bbc = var_pattern %c3.patt [concrete = constants.%c3.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c3.var: ref %C = var %c3.var_patt // CHECK:STDOUT: %Cpp.ref.loc10_26: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] @@ -923,6 +937,7 @@ fn F() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %pattern_type.bbc: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = value_binding_pattern c1 [concrete] // CHECK:STDOUT: %C.C.cpp_overload_set.type: type = cpp_overload_set_type @C.C.cpp_overload_set [concrete] // CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete] // CHECK:STDOUT: %int_8.b85: Core.IntLiteral = int_value 8 [concrete] @@ -945,6 +960,7 @@ fn F() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39, @Core.IntLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete] // CHECK:STDOUT: %bound_method.01f: = bound_method %int_8.b85, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_8.9cf: %i32 = int_value 8 [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = value_binding_pattern c2 [concrete] // CHECK:STDOUT: %As.type.155: type = facet_type <@As, @As(%i32)> [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.type.c5d: type = fn_type @Core.IntLiteral.as.As.impl.Convert, @Core.IntLiteral.as.As.impl(%To) [symbolic] // CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.6ee: %Core.IntLiteral.as.As.impl.Convert.type.c5d = struct_value () [symbolic] @@ -982,7 +998,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = value_binding_pattern c1 [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = value_binding_pattern c1 [concrete = constants.%c1.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc8_26: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref.loc8_29: type = name_ref C, imports.%C.decl [concrete = constants.%C] @@ -999,15 +1015,15 @@ fn F() { // CHECK:STDOUT: %addr.loc8: %ptr.0a2 = addr_of %.loc8_35.1 // CHECK:STDOUT: %C__carbon_thunk.call.loc8: init %empty_tuple.type = call imports.%C__carbon_thunk.decl(%.loc8_34.2, %addr.loc8) // CHECK:STDOUT: %.loc8_35.2: init %C to %.loc8_35.1 = mark_in_place_init %C__carbon_thunk.call.loc8 +// CHECK:STDOUT: %.loc8_35.3: ref %C = temporary %.loc8_35.1, %.loc8_35.2 +// CHECK:STDOUT: %.loc8_35.4: %C = acquire_value %.loc8_35.3 // CHECK:STDOUT: %.loc8_21: type = splice_block %C.ref.loc8_21 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc8_18: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref.loc8_21: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc8_35.3: ref %C = temporary %.loc8_35.1, %.loc8_35.2 -// CHECK:STDOUT: %.loc8_35.4: %C = acquire_value %.loc8_35.3 // CHECK:STDOUT: %c1: %C = value_binding c1, %.loc8_35.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = value_binding_pattern c2 [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = value_binding_pattern c2 [concrete = constants.%c2.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_8.loc9: Core.IntLiteral = int_value 8 [concrete = constants.%int_8.b85] // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] @@ -1018,10 +1034,6 @@ fn F() { // CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.call: init %i32 = call %bound_method.loc9_28.2(%int_8.loc9) [concrete = constants.%int_8.9cf] // CHECK:STDOUT: %.loc9_28.1: %i32 = value_of_initializer %Core.IntLiteral.as.As.impl.Convert.call [concrete = constants.%int_8.9cf] // CHECK:STDOUT: %.loc9_28.2: %i32 = converted %int_8.loc9, %.loc9_28.1 [concrete = constants.%int_8.9cf] -// CHECK:STDOUT: %.loc9_21: type = splice_block %C.ref.loc9 [concrete = constants.%C] { -// CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc9: type = name_ref C, imports.%C.decl [concrete = constants.%C] -// CHECK:STDOUT: } // CHECK:STDOUT: %.loc9_28.3: ref %C = temporary_storage // CHECK:STDOUT: %addr.loc9: %ptr.0a2 = addr_of %.loc9_28.3 // CHECK:STDOUT: %C__carbon_thunk.call.loc9: init %empty_tuple.type = call imports.%C__carbon_thunk.decl(%.loc9_28.2, %addr.loc9) @@ -1029,6 +1041,10 @@ fn F() { // CHECK:STDOUT: %.loc9_28.5: init %C = converted %.loc9_28.2, %.loc9_28.4 // CHECK:STDOUT: %.loc9_28.6: ref %C = temporary %.loc9_28.3, %.loc9_28.5 // CHECK:STDOUT: %.loc9_28.7: %C = acquire_value %.loc9_28.6 +// CHECK:STDOUT: %.loc9_21: type = splice_block %C.ref.loc9 [concrete = constants.%C] { +// CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %C.ref.loc9: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: } // CHECK:STDOUT: %c2: %C = value_binding c2, %.loc9_28.7 // CHECK:STDOUT: %C.cpp_destructor.bound.loc9: = bound_method %.loc9_28.6, constants.%C.cpp_destructor // CHECK:STDOUT: %C.cpp_destructor.call.loc9: init %empty_tuple.type = call %C.cpp_destructor.bound.loc9(%.loc9_28.6) @@ -1043,6 +1059,7 @@ fn F() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %pattern_type.bbc: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = value_binding_pattern c1 [concrete] // CHECK:STDOUT: %C.C.cpp_overload_set.type: type = cpp_overload_set_type @C.C.cpp_overload_set [concrete] // CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete] // CHECK:STDOUT: %int_8.b85: Core.IntLiteral = int_value 8 [concrete] @@ -1069,8 +1086,10 @@ fn F() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.f46: = bound_method %int_9.988, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] // CHECK:STDOUT: %bound_method.9bf: = bound_method %int_9.988, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_9.056: %i32 = int_value 9 [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = value_binding_pattern c2 [concrete] // CHECK:STDOUT: %C__carbon_thunk.type.e78457.2: type = fn_type @C__carbon_thunk.2 [concrete] // CHECK:STDOUT: %C__carbon_thunk.ca303d.2: %C__carbon_thunk.type.e78457.2 = struct_value () [concrete] +// CHECK:STDOUT: %c3.patt: %pattern_type.bbc = value_binding_pattern c3 [concrete] // CHECK:STDOUT: %As.type.155: type = facet_type <@As, @As(%i32)> [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.type.c5d: type = fn_type @Core.IntLiteral.as.As.impl.Convert, @Core.IntLiteral.as.As.impl(%To) [symbolic] // CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.6ee: %Core.IntLiteral.as.As.impl.Convert.type.c5d = struct_value () [symbolic] @@ -1113,7 +1132,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = value_binding_pattern c1 [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = value_binding_pattern c1 [concrete = constants.%c1.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc8_26: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref.loc8_29: type = name_ref C, imports.%C.decl [concrete = constants.%C] @@ -1138,15 +1157,15 @@ fn F() { // CHECK:STDOUT: %addr.loc8: %ptr.0a2 = addr_of %.loc8_38.1 // CHECK:STDOUT: %C__carbon_thunk.call.loc8: init %empty_tuple.type = call imports.%C__carbon_thunk.decl.abd9a2.1(%.loc8_34.2, %.loc8_37.2, %addr.loc8) // CHECK:STDOUT: %.loc8_38.2: init %C to %.loc8_38.1 = mark_in_place_init %C__carbon_thunk.call.loc8 +// CHECK:STDOUT: %.loc8_38.3: ref %C = temporary %.loc8_38.1, %.loc8_38.2 +// CHECK:STDOUT: %.loc8_38.4: %C = acquire_value %.loc8_38.3 // CHECK:STDOUT: %.loc8_21: type = splice_block %C.ref.loc8_21 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc8_18: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref.loc8_21: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc8_38.3: ref %C = temporary %.loc8_38.1, %.loc8_38.2 -// CHECK:STDOUT: %.loc8_38.4: %C = acquire_value %.loc8_38.3 // CHECK:STDOUT: %c1: %C = value_binding c1, %.loc8_38.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = value_binding_pattern c2 [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = value_binding_pattern c2 [concrete = constants.%c2.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc9_26: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref.loc9_29: type = name_ref C, imports.%C.decl [concrete = constants.%C] @@ -1163,15 +1182,15 @@ fn F() { // CHECK:STDOUT: %addr.loc9: %ptr.0a2 = addr_of %.loc9_35.1 // CHECK:STDOUT: %C__carbon_thunk.call.loc9: init %empty_tuple.type = call imports.%C__carbon_thunk.decl.abd9a2.2(%.loc9_34.2, %addr.loc9) // CHECK:STDOUT: %.loc9_35.2: init %C to %.loc9_35.1 = mark_in_place_init %C__carbon_thunk.call.loc9 +// CHECK:STDOUT: %.loc9_35.3: ref %C = temporary %.loc9_35.1, %.loc9_35.2 +// CHECK:STDOUT: %.loc9_35.4: %C = acquire_value %.loc9_35.3 // CHECK:STDOUT: %.loc9_21: type = splice_block %C.ref.loc9_21 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc9_18: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref.loc9_21: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc9_35.3: ref %C = temporary %.loc9_35.1, %.loc9_35.2 -// CHECK:STDOUT: %.loc9_35.4: %C = acquire_value %.loc9_35.3 // CHECK:STDOUT: %c2: %C = value_binding c2, %.loc9_35.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c3.patt: %pattern_type.bbc = value_binding_pattern c3 [concrete] +// CHECK:STDOUT: %c3.patt: %pattern_type.bbc = value_binding_pattern c3 [concrete = constants.%c3.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_8.loc10: Core.IntLiteral = int_value 8 [concrete = constants.%int_8.b85] // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] @@ -1182,10 +1201,6 @@ fn F() { // CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.call: init %i32 = call %bound_method.loc10_28.2(%int_8.loc10) [concrete = constants.%int_8.9cf] // CHECK:STDOUT: %.loc10_28.1: %i32 = value_of_initializer %Core.IntLiteral.as.As.impl.Convert.call [concrete = constants.%int_8.9cf] // CHECK:STDOUT: %.loc10_28.2: %i32 = converted %int_8.loc10, %.loc10_28.1 [concrete = constants.%int_8.9cf] -// CHECK:STDOUT: %.loc10_21: type = splice_block %C.ref.loc10 [concrete = constants.%C] { -// CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc10: type = name_ref C, imports.%C.decl [concrete = constants.%C] -// CHECK:STDOUT: } // CHECK:STDOUT: %.loc10_28.3: ref %C = temporary_storage // CHECK:STDOUT: %addr.loc10: %ptr.0a2 = addr_of %.loc10_28.3 // CHECK:STDOUT: %C__carbon_thunk.call.loc10: init %empty_tuple.type = call imports.%C__carbon_thunk.decl.abd9a2.2(%.loc10_28.2, %addr.loc10) @@ -1193,6 +1208,10 @@ fn F() { // CHECK:STDOUT: %.loc10_28.5: init %C = converted %.loc10_28.2, %.loc10_28.4 // CHECK:STDOUT: %.loc10_28.6: ref %C = temporary %.loc10_28.3, %.loc10_28.5 // CHECK:STDOUT: %.loc10_28.7: %C = acquire_value %.loc10_28.6 +// CHECK:STDOUT: %.loc10_21: type = splice_block %C.ref.loc10 [concrete = constants.%C] { +// CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %C.ref.loc10: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: } // CHECK:STDOUT: %c3: %C = value_binding c3, %.loc10_28.7 // CHECK:STDOUT: %C.cpp_destructor.bound.loc10: = bound_method %.loc10_28.6, constants.%C.cpp_destructor // CHECK:STDOUT: %C.cpp_destructor.call.loc10: init %empty_tuple.type = call %C.cpp_destructor.bound.loc10(%.loc10_28.6) diff --git a/toolchain/check/testdata/interop/cpp/class/import/method.carbon b/toolchain/check/testdata/interop/cpp/class/import/method.carbon index bee79f542580..b25bff818ecd 100644 --- a/toolchain/check/testdata/interop/cpp/class/import/method.carbon +++ b/toolchain/check/testdata/interop/cpp/class/import/method.carbon @@ -503,12 +503,16 @@ fn Call(e: Cpp.ExplicitObjectParam, n: i32, a: Cpp.Another) { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.patt.623a16.1: %pattern_type.6b6 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt.207d5f.1: %pattern_type.6b6 = var_pattern %a.patt.623a16.1 [concrete] // CHECK:STDOUT: %NoRefQualifier.F.cpp_overload_set.type: type = cpp_overload_set_type @NoRefQualifier.F.cpp_overload_set [concrete] // CHECK:STDOUT: %NoRefQualifier.F.cpp_overload_set.value: %NoRefQualifier.F.cpp_overload_set.type = cpp_overload_set_value @NoRefQualifier.F.cpp_overload_set [concrete] // CHECK:STDOUT: %F__carbon_thunk.type.8cce43.1: type = fn_type @F__carbon_thunk.1 [concrete] // CHECK:STDOUT: %F__carbon_thunk.a92106.1: %F__carbon_thunk.type.8cce43.1 = struct_value () [concrete] // CHECK:STDOUT: %ptr.d08: type = ptr_type %i32 [concrete] // CHECK:STDOUT: %pattern_type.f00: type = pattern_type %ptr.d08 [concrete] +// CHECK:STDOUT: %b.patt.9fb99a.1: %pattern_type.f00 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt.dede8c.1: %pattern_type.f00 = var_pattern %b.patt.9fb99a.1 [concrete] // CHECK:STDOUT: %NoRefQualifier.F.type.8b6eff.2: type = fn_type @NoRefQualifier.F.2 [concrete] // CHECK:STDOUT: %NoRefQualifier.F.dbb5f5.2: %NoRefQualifier.F.type.8b6eff.2 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.1: type = fn_type @Destroy.Op.loc9 [concrete] @@ -517,10 +521,14 @@ fn Call(e: Cpp.ExplicitObjectParam, n: i32, a: Cpp.Another) { // CHECK:STDOUT: %Destroy.Op.1a2547.3: %Destroy.Op.type.1d8f74.3 = struct_value () [concrete] // CHECK:STDOUT: %WithRefQualifier: type = class_type @WithRefQualifier [concrete] // CHECK:STDOUT: %ptr.90c: type = ptr_type %WithRefQualifier [concrete] +// CHECK:STDOUT: %a.patt.623a16.2: %pattern_type.6b6 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt.207d5f.2: %pattern_type.6b6 = var_pattern %a.patt.623a16.2 [concrete] // CHECK:STDOUT: %WithRefQualifier.F.cpp_overload_set.type: type = cpp_overload_set_type @WithRefQualifier.F.cpp_overload_set [concrete] // CHECK:STDOUT: %WithRefQualifier.F.cpp_overload_set.value: %WithRefQualifier.F.cpp_overload_set.type = cpp_overload_set_value @WithRefQualifier.F.cpp_overload_set [concrete] // CHECK:STDOUT: %F__carbon_thunk.type.8cce43.2: type = fn_type @F__carbon_thunk.2 [concrete] // CHECK:STDOUT: %F__carbon_thunk.a92106.2: %F__carbon_thunk.type.8cce43.2 = struct_value () [concrete] +// CHECK:STDOUT: %b.patt.9fb99a.2: %pattern_type.f00 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt.dede8c.2: %pattern_type.f00 = var_pattern %b.patt.9fb99a.2 [concrete] // CHECK:STDOUT: %WithRefQualifier.F.type.8b6eff.2: type = fn_type @WithRefQualifier.F.2 [concrete] // CHECK:STDOUT: %WithRefQualifier.F.dbb5f5.2: %WithRefQualifier.F.type.8b6eff.2 = struct_value () [concrete] // CHECK:STDOUT: } @@ -553,8 +561,8 @@ fn Call(e: Cpp.ExplicitObjectParam, n: i32, a: Cpp.Another) { // CHECK:STDOUT: fn @CallFNoRefQualifier(%v.param: %NoRefQualifier, %p.param: %ptr.f7d) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.6b6 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = ref_binding_pattern a [concrete = constants.%a.patt.623a16.1] +// CHECK:STDOUT: %a.var_patt: %pattern_type.6b6 = var_pattern %a.patt [concrete = constants.%a.var_patt.207d5f.1] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %i32 = var %a.var_patt // CHECK:STDOUT: %v.ref: %NoRefQualifier = name_ref v, %v @@ -565,8 +573,8 @@ fn Call(e: Cpp.ExplicitObjectParam, n: i32, a: Cpp.Another) { // CHECK:STDOUT: %i32.loc8: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %a: ref %i32 = ref_binding a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.f00 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.f00 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.f00 = ref_binding_pattern b [concrete = constants.%b.patt.9fb99a.1] +// CHECK:STDOUT: %b.var_patt: %pattern_type.f00 = var_pattern %b.patt [concrete = constants.%b.var_patt.dede8c.1] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %ptr.d08 = var %b.var_patt // CHECK:STDOUT: %p.ref: %ptr.f7d = name_ref p, %p @@ -599,8 +607,8 @@ fn Call(e: Cpp.ExplicitObjectParam, n: i32, a: Cpp.Another) { // CHECK:STDOUT: fn @CallFWithRefQualifier(%v.param: %WithRefQualifier, %p.param: %ptr.90c) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.6b6 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = ref_binding_pattern a [concrete = constants.%a.patt.623a16.2] +// CHECK:STDOUT: %a.var_patt: %pattern_type.6b6 = var_pattern %a.patt [concrete = constants.%a.var_patt.207d5f.2] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %i32 = var %a.var_patt // CHECK:STDOUT: %v.ref: %WithRefQualifier = name_ref v, %v @@ -611,8 +619,8 @@ fn Call(e: Cpp.ExplicitObjectParam, n: i32, a: Cpp.Another) { // CHECK:STDOUT: %i32.loc15: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %a: ref %i32 = ref_binding a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.f00 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.f00 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.f00 = ref_binding_pattern b [concrete = constants.%b.patt.9fb99a.2] +// CHECK:STDOUT: %b.var_patt: %pattern_type.f00 = var_pattern %b.patt [concrete = constants.%b.var_patt.dede8c.2] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %ptr.d08 = var %b.var_patt // CHECK:STDOUT: %p.ref: %ptr.90c = name_ref p, %p diff --git a/toolchain/check/testdata/interop/cpp/class/import/struct.carbon b/toolchain/check/testdata/interop/cpp/class/import/struct.carbon index 586371a96436..425d1bc1fd6c 100644 --- a/toolchain/check/testdata/interop/cpp/class/import/struct.carbon +++ b/toolchain/check/testdata/interop/cpp/class/import/struct.carbon @@ -34,6 +34,8 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %Bar [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] +// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %bar.patt: %pattern_type = at_binding_pattern bar, %bar.param_patt [concrete] // CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] // CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -48,8 +50,8 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { -// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %bar.patt: %pattern_type = at_binding_pattern bar, %bar.param_patt [concrete] +// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete = constants.%bar.param_patt] +// CHECK:STDOUT: %bar.patt: %pattern_type = at_binding_pattern bar, %bar.param_patt [concrete = constants.%bar.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr = value_param call_param0 // CHECK:STDOUT: %.loc7: type = splice_block %ptr [concrete = constants.%ptr] { diff --git a/toolchain/check/testdata/interop/cpp/class/import/template.carbon b/toolchain/check/testdata/interop/cpp/class/import/template.carbon index 45cbfe17fde0..198b43306e2a 100644 --- a/toolchain/check/testdata/interop/cpp/class/import/template.carbon +++ b/toolchain/check/testdata/interop/cpp/class/import/template.carbon @@ -190,6 +190,8 @@ fn F() { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.6b6 = var_pattern %x.patt [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %ImplicitAs.type.914: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %To: Core.IntLiteral = symbolic_binding To, 0 [symbolic] @@ -206,6 +208,8 @@ fn F() { // CHECK:STDOUT: %bound_method: = bound_method %int_0.5c6, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_0.3c0: %i32 = int_value 0 [concrete] // CHECK:STDOUT: %X.c92: type = class_type @X.2 [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.6b6 = ref_binding_pattern y [concrete] +// CHECK:STDOUT: %y.var_patt: %pattern_type.6b6 = var_pattern %y.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -222,8 +226,8 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.6b6 = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.6b6 = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %i32 = var %x.var_patt [concrete] // CHECK:STDOUT: %.loc7: type = splice_block %type.ref.loc7 [concrete = constants.%i32] { @@ -234,8 +238,8 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %x: ref %i32 = ref_binding x, %x.var [concrete = %x.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %pattern_type.6b6 = ref_binding_pattern y [concrete] -// CHECK:STDOUT: %y.var_patt: %pattern_type.6b6 = var_pattern %y.patt [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.6b6 = ref_binding_pattern y [concrete = constants.%y.patt] +// CHECK:STDOUT: %y.var_patt: %pattern_type.6b6 = var_pattern %y.patt [concrete = constants.%y.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %i32 = var %y.var_patt [concrete] // CHECK:STDOUT: %.loc21: type = splice_block %type.ref.loc21 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/interop/cpp/class/import/union.carbon b/toolchain/check/testdata/interop/cpp/class/import/union.carbon index 1bf9affa4956..d5e42c8b068b 100644 --- a/toolchain/check/testdata/interop/cpp/class/import/union.carbon +++ b/toolchain/check/testdata/interop/cpp/class/import/union.carbon @@ -179,6 +179,8 @@ fn MyF(bar: Cpp.Bar(Cpp.X)*); // CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %Bar [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] +// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %bar.patt: %pattern_type = at_binding_pattern bar, %bar.param_patt [concrete] // CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] // CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -193,8 +195,8 @@ fn MyF(bar: Cpp.Bar(Cpp.X)*); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { -// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %bar.patt: %pattern_type = at_binding_pattern bar, %bar.param_patt [concrete] +// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete = constants.%bar.param_patt] +// CHECK:STDOUT: %bar.patt: %pattern_type = at_binding_pattern bar, %bar.param_patt [concrete = constants.%bar.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr = value_param call_param0 // CHECK:STDOUT: %.loc7: type = splice_block %ptr [concrete = constants.%ptr] { @@ -214,6 +216,8 @@ fn MyF(bar: Cpp.Bar(Cpp.X)*); // CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %Bar [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] +// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %bar.patt: %pattern_type = at_binding_pattern bar, %bar.param_patt [concrete] // CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] // CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -228,8 +232,8 @@ fn MyF(bar: Cpp.Bar(Cpp.X)*); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { -// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %bar.patt: %pattern_type = at_binding_pattern bar, %bar.param_patt [concrete] +// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete = constants.%bar.param_patt] +// CHECK:STDOUT: %bar.patt: %pattern_type = at_binding_pattern bar, %bar.param_patt [concrete = constants.%bar.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr = value_param call_param0 // CHECK:STDOUT: %.loc7: type = splice_block %ptr [concrete = constants.%ptr] { @@ -249,6 +253,8 @@ fn MyF(bar: Cpp.Bar(Cpp.X)*); // CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %Bar [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] +// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %bar.patt: %pattern_type = at_binding_pattern bar, %bar.param_patt [concrete] // CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] // CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -263,8 +269,8 @@ fn MyF(bar: Cpp.Bar(Cpp.X)*); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { -// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %bar.patt: %pattern_type = at_binding_pattern bar, %bar.param_patt [concrete] +// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete = constants.%bar.param_patt] +// CHECK:STDOUT: %bar.patt: %pattern_type = at_binding_pattern bar, %bar.param_patt [concrete = constants.%bar.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr = value_param call_param0 // CHECK:STDOUT: %.loc7: type = splice_block %ptr [concrete = constants.%ptr] { @@ -314,6 +320,9 @@ fn MyF(bar: Cpp.Bar(Cpp.X)*); // CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] // CHECK:STDOUT: %ptr.227: type = ptr_type %Bar [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.227 [concrete] +// CHECK:STDOUT: %bar.patt: %pattern_type = value_binding_pattern bar [concrete] +// CHECK:STDOUT: %foo.patt: %pattern_type = ref_binding_pattern foo [concrete] +// CHECK:STDOUT: %foo.var_patt: %pattern_type = var_pattern %foo.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -322,25 +331,25 @@ fn MyF(bar: Cpp.Bar(Cpp.X)*); // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } // CHECK:STDOUT: %Bar.decl: type = class_decl @Bar [concrete = constants.%Bar] {} {} -// CHECK:STDOUT: %foo.patt: %pattern_type = ref_binding_pattern foo [concrete] -// CHECK:STDOUT: %foo.var_patt: %pattern_type = var_pattern %foo.patt [concrete] +// CHECK:STDOUT: %foo.patt: %pattern_type = ref_binding_pattern foo [concrete = constants.%foo.patt] +// CHECK:STDOUT: %foo.var_patt: %pattern_type = var_pattern %foo.patt [concrete = constants.%foo.var_patt] // CHECK:STDOUT: %foo.var: ref %ptr.227 = var %foo.var_patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @MyF() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %bar.patt: %pattern_type = value_binding_pattern bar [concrete] +// CHECK:STDOUT: %bar.patt: %pattern_type = value_binding_pattern bar [concrete = constants.%bar.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc8_30: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %Bar.ref.loc8_33: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] // CHECK:STDOUT: %foo.ref: ref %ptr.227 = name_ref foo, imports.%foo.var [concrete = imports.%foo.var] +// CHECK:STDOUT: %.loc8_37: %ptr.227 = acquire_value %foo.ref // CHECK:STDOUT: %.loc8_26: type = splice_block %ptr [concrete = constants.%ptr.227] { // CHECK:STDOUT: %Cpp.ref.loc8_19: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %Bar.ref.loc8_22: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] // CHECK:STDOUT: %ptr: type = ptr_type %Bar.ref.loc8_22 [concrete = constants.%ptr.227] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc8_37: %ptr.227 = acquire_value %foo.ref // CHECK:STDOUT: %bar: %ptr.227 = value_binding bar, %.loc8_37 // CHECK:STDOUT: // CHECK:STDOUT: } @@ -351,8 +360,11 @@ fn MyF(bar: Cpp.Bar(Cpp.X)*); // CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] // CHECK:STDOUT: %ptr.227: type = ptr_type %Bar [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.227 [concrete] +// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %bar.patt: %pattern_type = at_binding_pattern bar, %bar.param_patt [concrete] // CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] // CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] +// CHECK:STDOUT: %foo_bar.patt: %pattern_type = value_binding_pattern foo_bar [concrete] // CHECK:STDOUT: %Bar.elem: type = unbound_element_type %Bar, %ptr.227 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -366,8 +378,8 @@ fn MyF(bar: Cpp.Bar(Cpp.X)*); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { -// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %bar.patt: %pattern_type = at_binding_pattern bar, %bar.param_patt [concrete] +// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete = constants.%bar.param_patt] +// CHECK:STDOUT: %bar.patt: %pattern_type = at_binding_pattern bar, %bar.param_patt [concrete = constants.%bar.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr.227 = value_param call_param0 // CHECK:STDOUT: %.loc7: type = splice_block %ptr.loc7 [concrete = constants.%ptr.227] { @@ -382,18 +394,18 @@ fn MyF(bar: Cpp.Bar(Cpp.X)*); // CHECK:STDOUT: fn @MyF(%bar.param: %ptr.227) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %foo_bar.patt: %pattern_type = value_binding_pattern foo_bar [concrete] +// CHECK:STDOUT: %foo_bar.patt: %pattern_type = value_binding_pattern foo_bar [concrete = constants.%foo_bar.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %bar.ref: %ptr.227 = name_ref bar, %bar // CHECK:STDOUT: %.loc8_37.1: ref %Bar = deref %bar.ref // CHECK:STDOUT: %foo.ref: %Bar.elem = name_ref foo, @Bar.%.1 [concrete = @Bar.%.1] // CHECK:STDOUT: %.loc8_37.2: ref %ptr.227 = class_element_access %.loc8_37.1, element0 +// CHECK:STDOUT: %.loc8_37.3: %ptr.227 = acquire_value %.loc8_37.2 // CHECK:STDOUT: %.loc8_30: type = splice_block %ptr.loc8 [concrete = constants.%ptr.227] { // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %Bar.ref.loc8: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] // CHECK:STDOUT: %ptr.loc8: type = ptr_type %Bar.ref.loc8 [concrete = constants.%ptr.227] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc8_37.3: %ptr.227 = acquire_value %.loc8_37.2 // CHECK:STDOUT: %foo_bar: %ptr.227 = value_binding foo_bar, %.loc8_37.3 // CHECK:STDOUT: return // CHECK:STDOUT: } @@ -407,6 +419,8 @@ fn MyF(bar: Cpp.Bar(Cpp.X)*); // CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %Bar [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] +// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %bar.patt: %pattern_type = at_binding_pattern bar, %bar.param_patt [concrete] // CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] // CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -424,8 +438,8 @@ fn MyF(bar: Cpp.Bar(Cpp.X)*); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { -// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %bar.patt: %pattern_type = at_binding_pattern bar, %bar.param_patt [concrete] +// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete = constants.%bar.param_patt] +// CHECK:STDOUT: %bar.patt: %pattern_type = at_binding_pattern bar, %bar.param_patt [concrete = constants.%bar.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr = value_param call_param0 // CHECK:STDOUT: %.loc7: type = splice_block %ptr [concrete = constants.%ptr] { diff --git a/toolchain/check/testdata/interop/cpp/enum/convert.carbon b/toolchain/check/testdata/interop/cpp/enum/convert.carbon index 1f28680ad458..f152963cdd1f 100644 --- a/toolchain/check/testdata/interop/cpp/enum/convert.carbon +++ b/toolchain/check/testdata/interop/cpp/enum/convert.carbon @@ -93,10 +93,12 @@ fn F() { // CHECK:STDOUT: %int_16: Core.IntLiteral = int_value 16 [concrete] // CHECK:STDOUT: %i16: type = class_type @Int, @Int(%int_16) [concrete] // CHECK:STDOUT: %pattern_type.203: type = pattern_type %i16 [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.203 = value_binding_pattern a [concrete] // CHECK:STDOUT: %Enum: type = class_type @Enum [concrete] // CHECK:STDOUT: %int_0.822: %Enum = int_value 0 [concrete] // CHECK:STDOUT: %int_0.a8d: %i16 = int_value 0 [concrete] // CHECK:STDOUT: %pattern_type.926: type = pattern_type %Enum [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.926 = value_binding_pattern b [concrete] // CHECK:STDOUT: %int_42.20e: Core.IntLiteral = int_value 42 [concrete] // CHECK:STDOUT: %As.type.6f1: type = facet_type <@As, @As(%i16)> [concrete] // CHECK:STDOUT: %To: Core.IntLiteral = symbolic_binding To, 0 [symbolic] @@ -115,6 +117,7 @@ fn F() { // CHECK:STDOUT: %int_42.4c2: %Enum = int_value 42 [concrete] // CHECK:STDOUT: %Other: type = class_type @Other [concrete] // CHECK:STDOUT: %pattern_type.d91: type = pattern_type %Other [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.d91 = value_binding_pattern c [concrete] // CHECK:STDOUT: %int_0.10a: %Other = int_value 0 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -139,7 +142,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.203 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.203 = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %Enum.ref.loc8: type = name_ref Enum, imports.%Enum.decl [concrete = constants.%Enum] @@ -150,7 +153,7 @@ fn F() { // CHECK:STDOUT: %i16.loc8_17: type = type_literal constants.%i16 [concrete = constants.%i16] // CHECK:STDOUT: %a: %i16 = value_binding a, %.loc8_34.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.926 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.926 = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_42: Core.IntLiteral = int_value 42 [concrete = constants.%int_42.20e] // CHECK:STDOUT: %i16.loc9: type = type_literal constants.%i16 [concrete = constants.%i16] @@ -171,7 +174,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %b: %Enum = value_binding b, %.loc9_40.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.d91 = value_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.d91 = value_binding_pattern c [concrete = constants.%c.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc10_29: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %a.ref.loc10: %Enum = name_ref a, imports.%int_0 [concrete = constants.%int_0.822] diff --git a/toolchain/check/testdata/interop/cpp/enum/copy.carbon b/toolchain/check/testdata/interop/cpp/enum/copy.carbon index 61e8fa087aae..1b6bb7ae305e 100644 --- a/toolchain/check/testdata/interop/cpp/enum/copy.carbon +++ b/toolchain/check/testdata/interop/cpp/enum/copy.carbon @@ -36,6 +36,8 @@ fn F() { // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %Enum: type = class_type @Enum [concrete] // CHECK:STDOUT: %pattern_type.926: type = pattern_type %Enum [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.926 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.926 = var_pattern %a.patt [concrete] // CHECK:STDOUT: %int_0: %Enum = int_value 0 [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %Enum.Op.type: type = fn_type @Enum.Op [concrete] @@ -68,8 +70,8 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.926 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.926 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.926 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.926 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %Enum = var %a.var_patt // CHECK:STDOUT: %Cpp.ref.loc8_21: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] diff --git a/toolchain/check/testdata/interop/cpp/enum/fixed.carbon b/toolchain/check/testdata/interop/cpp/enum/fixed.carbon index 353bd5529343..506e32054777 100644 --- a/toolchain/check/testdata/interop/cpp/enum/fixed.carbon +++ b/toolchain/check/testdata/interop/cpp/enum/fixed.carbon @@ -34,7 +34,9 @@ fn F() { // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %Enum: type = class_type @Enum [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %Enum [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = value_binding_pattern a [concrete] // CHECK:STDOUT: %int_0: %Enum = int_value 0 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type = value_binding_pattern b [concrete] // CHECK:STDOUT: %int_1: %Enum = int_value 1 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -56,7 +58,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc8_28: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %Enum.ref.loc8_31: type = name_ref Enum, imports.%Enum.decl [concrete = constants.%Enum] @@ -67,7 +69,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %a: %Enum = value_binding a, %a.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc9_28: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %b.ref: %Enum = name_ref b, imports.%int_1 [concrete = constants.%int_1] diff --git a/toolchain/check/testdata/interop/cpp/enum/incomplete.carbon b/toolchain/check/testdata/interop/cpp/enum/incomplete.carbon index a3fde2d218db..26594c9e83ab 100644 --- a/toolchain/check/testdata/interop/cpp/enum/incomplete.carbon +++ b/toolchain/check/testdata/interop/cpp/enum/incomplete.carbon @@ -62,6 +62,8 @@ fn MyF() { // CHECK:STDOUT: constants { // CHECK:STDOUT: %UnsizedEnum: type = class_type @UnsizedEnum [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %UnsizedEnum [concrete] +// CHECK:STDOUT: %e.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type = at_binding_pattern e, %e.param_patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -76,8 +78,8 @@ fn MyF() { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %e.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %e.patt: %pattern_type = at_binding_pattern e, %e.param_patt [concrete] +// CHECK:STDOUT: %e.param_patt: %pattern_type = value_param_pattern [concrete = constants.%e.param_patt] +// CHECK:STDOUT: %e.patt: %pattern_type = at_binding_pattern e, %e.param_patt [concrete = constants.%e.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %e.param: %UnsizedEnum = value_param call_param0 // CHECK:STDOUT: %.loc12: type = splice_block %UnsizedEnum.ref [concrete = constants.%UnsizedEnum] { diff --git a/toolchain/check/testdata/interop/cpp/enum/member.carbon b/toolchain/check/testdata/interop/cpp/enum/member.carbon index fe9752348a6c..c83cba9d546e 100644 --- a/toolchain/check/testdata/interop/cpp/enum/member.carbon +++ b/toolchain/check/testdata/interop/cpp/enum/member.carbon @@ -38,7 +38,9 @@ fn F() { // CHECK:STDOUT: %A: type = class_type @A [concrete] // CHECK:STDOUT: %E: type = class_type @E [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %E [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = value_binding_pattern a [concrete] // CHECK:STDOUT: %int_0: %E = int_value 0 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type = value_binding_pattern b [concrete] // CHECK:STDOUT: %int_1: %E = int_value 1 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -60,7 +62,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc8_27: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %A.ref.loc8_30: type = name_ref A, imports.%A.decl [concrete = constants.%A] @@ -72,7 +74,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %a: %E = value_binding a, %a.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc9_27: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %A.ref.loc9_30: type = name_ref A, imports.%A.decl [concrete = constants.%A] diff --git a/toolchain/check/testdata/interop/cpp/enum/scoped.carbon b/toolchain/check/testdata/interop/cpp/enum/scoped.carbon index 65ad00dd087e..77e576aa49c3 100644 --- a/toolchain/check/testdata/interop/cpp/enum/scoped.carbon +++ b/toolchain/check/testdata/interop/cpp/enum/scoped.carbon @@ -47,6 +47,7 @@ fn F() { // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %Enum: type = class_type @Enum [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %Enum [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = value_binding_pattern a [concrete] // CHECK:STDOUT: %int_0: %Enum = int_value 0 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -66,7 +67,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc8_28: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %Enum.ref.loc8_31: type = name_ref Enum, imports.%Enum.decl [concrete = constants.%Enum] diff --git a/toolchain/check/testdata/interop/cpp/enum/unscoped.carbon b/toolchain/check/testdata/interop/cpp/enum/unscoped.carbon index 498f0ec1cb33..2f4f2e8b2e36 100644 --- a/toolchain/check/testdata/interop/cpp/enum/unscoped.carbon +++ b/toolchain/check/testdata/interop/cpp/enum/unscoped.carbon @@ -76,7 +76,9 @@ fn F() { // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %Enum: type = class_type @Enum [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %Enum [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = value_binding_pattern a [concrete] // CHECK:STDOUT: %int_0: %Enum = int_value 0 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type = value_binding_pattern b [concrete] // CHECK:STDOUT: %int_1: %Enum = int_value 1 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -98,7 +100,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc8_28: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %Enum.ref.loc8_31: type = name_ref Enum, imports.%Enum.decl [concrete = constants.%Enum] @@ -109,7 +111,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %a: %Enum = value_binding a, %a.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc9_28: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %b.ref: %Enum = name_ref b, imports.%int_1 [concrete = constants.%int_1] diff --git a/toolchain/check/testdata/interop/cpp/enum/using.carbon b/toolchain/check/testdata/interop/cpp/enum/using.carbon index a80a36cd942e..9c9b5eb27368 100644 --- a/toolchain/check/testdata/interop/cpp/enum/using.carbon +++ b/toolchain/check/testdata/interop/cpp/enum/using.carbon @@ -56,12 +56,16 @@ fn F() { // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %Color: type = class_type @Color [concrete] // CHECK:STDOUT: %pattern_type.732: type = pattern_type %Color [concrete] +// CHECK:STDOUT: %col.patt: %pattern_type.732 = value_binding_pattern col [concrete] // CHECK:STDOUT: %int_0.59e: %Color = int_value 0 [concrete] +// CHECK:STDOUT: %colb.patt: %pattern_type.732 = value_binding_pattern colb [concrete] // CHECK:STDOUT: %int_1.b76: %Color = int_value 1 [concrete] // CHECK:STDOUT: %Zoo: type = class_type @Zoo [concrete] // CHECK:STDOUT: %Animal: type = class_type @Animal [concrete] // CHECK:STDOUT: %pattern_type.8cd: type = pattern_type %Animal [concrete] +// CHECK:STDOUT: %pet.patt: %pattern_type.8cd = value_binding_pattern pet [concrete] // CHECK:STDOUT: %int_0.648: %Animal = int_value 0 [concrete] +// CHECK:STDOUT: %pet2.patt: %pattern_type.8cd = value_binding_pattern pet2 [concrete] // CHECK:STDOUT: %int_1.e7b: %Animal = int_value 1 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -89,7 +93,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %col.patt: %pattern_type.732 = value_binding_pattern col [concrete] +// CHECK:STDOUT: %col.patt: %pattern_type.732 = value_binding_pattern col [concrete = constants.%col.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc18_32: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %Color.ref.loc18_35: type = name_ref Color, imports.%Color.decl [concrete = constants.%Color] @@ -100,7 +104,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %col: %Color = value_binding col, %Red.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %colb.patt: %pattern_type.732 = value_binding_pattern colb [concrete] +// CHECK:STDOUT: %colb.patt: %pattern_type.732 = value_binding_pattern colb [concrete = constants.%colb.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc19_33: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %Blue.ref: %Color = name_ref Blue, imports.%int_1.b76 [concrete = constants.%int_1.b76] @@ -110,7 +114,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %colb: %Color = value_binding colb, %Blue.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %pet.patt: %pattern_type.8cd = value_binding_pattern pet [concrete] +// CHECK:STDOUT: %pet.patt: %pattern_type.8cd = value_binding_pattern pet [concrete = constants.%pet.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc20_37: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %Zoo.ref.loc20_40: type = name_ref Zoo, imports.%Zoo.decl [concrete = constants.%Zoo] @@ -123,7 +127,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %pet: %Animal = value_binding pet, %Cat.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %pet2.patt: %pattern_type.8cd = value_binding_pattern pet2 [concrete] +// CHECK:STDOUT: %pet2.patt: %pattern_type.8cd = value_binding_pattern pet2 [concrete = constants.%pet2.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc21_38: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %Dog.ref: %Animal = name_ref Dog, imports.%int_1.e7b [concrete = constants.%int_1.e7b] diff --git a/toolchain/check/testdata/interop/cpp/function/import/arithmetic_types_bridged.carbon b/toolchain/check/testdata/interop/cpp/function/import/arithmetic_types_bridged.carbon index 096b14b18535..32138aec04b1 100644 --- a/toolchain/check/testdata/interop/cpp/function/import/arithmetic_types_bridged.carbon +++ b/toolchain/check/testdata/interop/cpp/function/import/arithmetic_types_bridged.carbon @@ -2173,6 +2173,7 @@ fn F() { // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.831 = value_binding_pattern x [concrete] // CHECK:STDOUT: %foo_bool.cpp_overload_set.type: type = cpp_overload_set_type @foo_bool.cpp_overload_set [concrete] // CHECK:STDOUT: %foo_bool.cpp_overload_set.value: %foo_bool.cpp_overload_set.type = cpp_overload_set_value @foo_bool.cpp_overload_set [concrete] // CHECK:STDOUT: %ptr: type = ptr_type bool [concrete] @@ -2198,7 +2199,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.831 = value_binding_pattern x [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.831 = value_binding_pattern x [concrete = constants.%x.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %foo_bool.ref: %foo_bool.cpp_overload_set.type = name_ref foo_bool, imports.%foo_bool.cpp_overload_set.value [concrete = constants.%foo_bool.cpp_overload_set.value] @@ -2206,9 +2207,9 @@ fn F() { // CHECK:STDOUT: %addr: %ptr = addr_of %.loc8_37.1 // CHECK:STDOUT: %foo_bool__carbon_thunk.call: init %empty_tuple.type = call imports.%foo_bool__carbon_thunk.decl(%addr) // CHECK:STDOUT: %.loc8_37.2: init bool to %.loc8_37.1 = mark_in_place_init %foo_bool__carbon_thunk.call -// CHECK:STDOUT: %.loc8_17: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc8_37.3: ref bool = temporary %.loc8_37.1, %.loc8_37.2 // CHECK:STDOUT: %.loc8_37.4: bool = acquire_value %.loc8_37.3 +// CHECK:STDOUT: %.loc8_17: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %x: bool = value_binding x, %.loc8_37.4 // CHECK:STDOUT: %Destroy.Op.bound: = bound_method %.loc8_37.3, constants.%Destroy.Op // CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%.loc8_37.3) @@ -2225,6 +2226,7 @@ fn F() { // CHECK:STDOUT: %i16: type = class_type @Int, @Int(%int_16) [concrete] // CHECK:STDOUT: %i16.builtin: type = int_type signed, %int_16 [concrete] // CHECK:STDOUT: %pattern_type.203: type = pattern_type %i16 [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.203 = value_binding_pattern x [concrete] // CHECK:STDOUT: %foo_short.cpp_overload_set.type: type = cpp_overload_set_type @foo_short.cpp_overload_set [concrete] // CHECK:STDOUT: %foo_short.cpp_overload_set.value: %foo_short.cpp_overload_set.type = cpp_overload_set_value @foo_short.cpp_overload_set [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %i16 [concrete] @@ -2250,7 +2252,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.203 = value_binding_pattern x [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.203 = value_binding_pattern x [concrete = constants.%x.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %foo_short.ref: %foo_short.cpp_overload_set.type = name_ref foo_short, imports.%foo_short.cpp_overload_set.value [concrete = constants.%foo_short.cpp_overload_set.value] @@ -2258,9 +2260,9 @@ fn F() { // CHECK:STDOUT: %addr: %ptr = addr_of %.loc8_37.1 // CHECK:STDOUT: %foo_short__carbon_thunk.call: init %empty_tuple.type = call imports.%foo_short__carbon_thunk.decl(%addr) // CHECK:STDOUT: %.loc8_37.2: init %i16 to %.loc8_37.1 = mark_in_place_init %foo_short__carbon_thunk.call -// CHECK:STDOUT: %i16: type = type_literal constants.%i16 [concrete = constants.%i16] // CHECK:STDOUT: %.loc8_37.3: ref %i16 = temporary %.loc8_37.1, %.loc8_37.2 // CHECK:STDOUT: %.loc8_37.4: %i16 = acquire_value %.loc8_37.3 +// CHECK:STDOUT: %i16: type = type_literal constants.%i16 [concrete = constants.%i16] // CHECK:STDOUT: %x: %i16 = value_binding x, %.loc8_37.4 // CHECK:STDOUT: %Destroy.Op.bound: = bound_method %.loc8_37.3, constants.%Destroy.Op.1a2547.2 // CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%.loc8_37.3) @@ -2306,6 +2308,7 @@ fn F() { // CHECK:STDOUT: %f64.dc1: type = class_type @Float, @Float(%int_64) [concrete] // CHECK:STDOUT: %f64.794: type = float_type %int_64, f64 [concrete] // CHECK:STDOUT: %pattern_type.fb7: type = pattern_type %f64.dc1 [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.fb7 = value_binding_pattern x [concrete] // CHECK:STDOUT: %foo_double.cpp_overload_set.type: type = cpp_overload_set_type @foo_double.cpp_overload_set [concrete] // CHECK:STDOUT: %foo_double.cpp_overload_set.value: %foo_double.cpp_overload_set.type = cpp_overload_set_value @foo_double.cpp_overload_set [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %f64.dc1 [concrete] @@ -2331,7 +2334,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.fb7 = value_binding_pattern x [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.fb7 = value_binding_pattern x [concrete = constants.%x.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %foo_double.ref: %foo_double.cpp_overload_set.type = name_ref foo_double, imports.%foo_double.cpp_overload_set.value [concrete = constants.%foo_double.cpp_overload_set.value] @@ -2339,9 +2342,9 @@ fn F() { // CHECK:STDOUT: %addr: %ptr = addr_of %.loc8_38.1 // CHECK:STDOUT: %foo_double__carbon_thunk.call: init %empty_tuple.type = call imports.%foo_double__carbon_thunk.decl(%addr) // CHECK:STDOUT: %.loc8_38.2: init %f64.dc1 to %.loc8_38.1 = mark_in_place_init %foo_double__carbon_thunk.call -// CHECK:STDOUT: %f64: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %.loc8_38.3: ref %f64.dc1 = temporary %.loc8_38.1, %.loc8_38.2 // CHECK:STDOUT: %.loc8_38.4: %f64.dc1 = acquire_value %.loc8_38.3 +// CHECK:STDOUT: %f64: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %x: %f64.dc1 = value_binding x, %.loc8_38.4 // CHECK:STDOUT: %Destroy.Op.bound: = bound_method %.loc8_38.3, constants.%Destroy.Op.1a2547.2 // CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%.loc8_38.3) diff --git a/toolchain/check/testdata/interop/cpp/function/import/class.carbon b/toolchain/check/testdata/interop/cpp/function/import/class.carbon index 274e5cd49167..72a1b836e46f 100644 --- a/toolchain/check/testdata/interop/cpp/function/import/class.carbon +++ b/toolchain/check/testdata/interop/cpp/function/import/class.carbon @@ -808,6 +808,8 @@ fn F() { // CHECK:STDOUT: %ptr.f8b: type = ptr_type %C [concrete] // CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] // CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.7cb = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.7cb = var_pattern %x.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %Default.type: type = facet_type <@Default> [concrete] // CHECK:STDOUT: %T.b09: %Default.type = symbolic_binding T, 0 [symbolic] @@ -853,8 +855,8 @@ fn F() { // CHECK:STDOUT: %addr: %ptr.f8b = addr_of %.loc8 // CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr) // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.7cb = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.7cb = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.7cb = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.7cb = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %C = var %x.var_patt // CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%C, (constants.%DefaultOrUnformed.impl_witness.8f7) [concrete = constants.%DefaultOrUnformed.facet] @@ -935,6 +937,8 @@ fn F() { // CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] // CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.6eb: type = pattern_type %O [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.6eb = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.6eb = var_pattern %x.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %Default.type: type = facet_type <@Default> [concrete] // CHECK:STDOUT: %T.b09: %Default.type = symbolic_binding T, 0 [symbolic] @@ -976,8 +980,8 @@ fn F() { // CHECK:STDOUT: %addr: %ptr.39f = addr_of %.loc8 // CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr) // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.6eb = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.6eb = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.6eb = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.6eb = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %O = var %x.var_patt // CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%O, (constants.%DefaultOrUnformed.impl_witness.3bc) [concrete = constants.%DefaultOrUnformed.facet] diff --git a/toolchain/check/testdata/interop/cpp/function/import/decayed_param.carbon b/toolchain/check/testdata/interop/cpp/function/import/decayed_param.carbon index 41555e2b8f88..efbe02832b53 100644 --- a/toolchain/check/testdata/interop/cpp/function/import/decayed_param.carbon +++ b/toolchain/check/testdata/interop/cpp/function/import/decayed_param.carbon @@ -85,6 +85,8 @@ fn F() { // CHECK:STDOUT: %array_type.d58: type = array_type %int_42, %i32 [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %pattern_type.c07: type = pattern_type %array_type.d58 [concrete] +// CHECK:STDOUT: %n.patt.dac: %pattern_type.c07 = ref_binding_pattern n [concrete] +// CHECK:STDOUT: %n.var_patt: %pattern_type.c07 = var_pattern %n.patt.dac [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %UnformedInit.type: type = facet_type <@UnformedInit> [concrete] // CHECK:STDOUT: %T.fef: %UnformedInit.type = symbolic_binding T, 0 [symbolic] @@ -207,8 +209,8 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import_ref.eb9: @U.as_type.as.ImplicitAs.impl.167.%U.as_type.as.ImplicitAs.impl.Convert.type (%U.as_type.as.ImplicitAs.impl.Convert.type.ad5) = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, loaded [symbolic = @U.as_type.as.ImplicitAs.impl.167.%U.as_type.as.ImplicitAs.impl.Convert (constants.%U.as_type.as.ImplicitAs.impl.Convert.331)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.cf7 = impl_witness_table (%Core.import_ref.eb9), @U.as_type.as.ImplicitAs.impl.167 [concrete] -// CHECK:STDOUT: %Core.import_ref.017d: @T.as_type.as.OptionalAs.impl.%T.as_type.as.OptionalAs.impl.Convert.type (%T.as_type.as.OptionalAs.impl.Convert.type.774) = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.OptionalAs.impl.%T.as_type.as.OptionalAs.impl.Convert (constants.%T.as_type.as.OptionalAs.impl.Convert.5f9)] -// CHECK:STDOUT: %OptionalAs.impl_witness_table.efa = impl_witness_table (%Core.import_ref.017d), @T.as_type.as.OptionalAs.impl [concrete] +// CHECK:STDOUT: %Core.import_ref.017d8: @T.as_type.as.OptionalAs.impl.%T.as_type.as.OptionalAs.impl.Convert.type (%T.as_type.as.OptionalAs.impl.Convert.type.774) = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.OptionalAs.impl.%T.as_type.as.OptionalAs.impl.Convert (constants.%T.as_type.as.OptionalAs.impl.Convert.5f9)] +// CHECK:STDOUT: %OptionalAs.impl_witness_table.efa = impl_witness_table (%Core.import_ref.017d8), @T.as_type.as.OptionalAs.impl [concrete] // CHECK:STDOUT: %Core.import_ref.599: @Cpp.nullptr_t.as.ImplicitAs.impl.%Cpp.nullptr_t.as.ImplicitAs.impl.Convert.type (%Cpp.nullptr_t.as.ImplicitAs.impl.Convert.type.99b) = import_ref Core//prelude/types/cpp/nullptr, loc{{\d+_\d+}}, loaded [symbolic = @Cpp.nullptr_t.as.ImplicitAs.impl.%Cpp.nullptr_t.as.ImplicitAs.impl.Convert (constants.%Cpp.nullptr_t.as.ImplicitAs.impl.Convert.63e)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.1ed = impl_witness_table (%Core.import_ref.599), @Cpp.nullptr_t.as.ImplicitAs.impl [concrete] // CHECK:STDOUT: } @@ -216,8 +218,8 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: %pattern_type.c07 = ref_binding_pattern n [concrete] -// CHECK:STDOUT: %n.var_patt: %pattern_type.c07 = var_pattern %n.patt [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.c07 = ref_binding_pattern n [concrete = constants.%n.patt.dac] +// CHECK:STDOUT: %n.var_patt: %pattern_type.c07 = var_pattern %n.patt [concrete = constants.%n.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %n.var: ref %array_type.d58 = var %n.var_patt // CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%array_type.d58, (constants.%DefaultOrUnformed.impl_witness.800) [concrete = constants.%DefaultOrUnformed.facet] @@ -324,6 +326,8 @@ fn F() { // CHECK:STDOUT: %array_type.d58: type = array_type %int_42, %i32 [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %pattern_type.c07: type = pattern_type %array_type.d58 [concrete] +// CHECK:STDOUT: %n.patt.dac: %pattern_type.c07 = ref_binding_pattern n [concrete] +// CHECK:STDOUT: %n.var_patt: %pattern_type.c07 = var_pattern %n.patt.dac [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %UnformedInit.type: type = facet_type <@UnformedInit> [concrete] // CHECK:STDOUT: %T.fef: %UnformedInit.type = symbolic_binding T, 0 [symbolic] @@ -384,8 +388,8 @@ fn F() { // CHECK:STDOUT: %Cpp.ref.loc20_21: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %Function.ref: %Function.cpp_overload_set.type = name_ref Function, imports.%Function.cpp_overload_set.value [concrete = constants.%Function.cpp_overload_set.value] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: %pattern_type.c07 = ref_binding_pattern n [concrete] -// CHECK:STDOUT: %n.var_patt: %pattern_type.c07 = var_pattern %n.patt [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.c07 = ref_binding_pattern n [concrete = constants.%n.patt.dac] +// CHECK:STDOUT: %n.var_patt: %pattern_type.c07 = var_pattern %n.patt [concrete = constants.%n.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %n.var: ref %array_type.d58 = var %n.var_patt // CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%array_type.d58, (constants.%DefaultOrUnformed.impl_witness.800) [concrete = constants.%DefaultOrUnformed.facet] diff --git a/toolchain/check/testdata/interop/cpp/function/import/default_arg.carbon b/toolchain/check/testdata/interop/cpp/function/import/default_arg.carbon index ac4170ef048b..523ac4e5e624 100644 --- a/toolchain/check/testdata/interop/cpp/function/import/default_arg.carbon +++ b/toolchain/check/testdata/interop/cpp/function/import/default_arg.carbon @@ -173,6 +173,7 @@ fn Call() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.aad: = bound_method %int_4.0c1, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] // CHECK:STDOUT: %bound_method.b7a: = bound_method %int_4.0c1, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_4.4eb: %i32 = int_value 4 [concrete] +// CHECK:STDOUT: %value.patt: %pattern_type.6b6 = value_binding_pattern value [concrete] // CHECK:STDOUT: %GlobalReturnInt.cpp_overload_set.type: type = cpp_overload_set_type @GlobalReturnInt.cpp_overload_set [concrete] // CHECK:STDOUT: %GlobalReturnInt.cpp_overload_set.value: %GlobalReturnInt.cpp_overload_set.type = cpp_overload_set_value @GlobalReturnInt.cpp_overload_set [concrete] // CHECK:STDOUT: %GlobalReturnInt.type: type = fn_type @GlobalReturnInt [concrete] @@ -286,7 +287,7 @@ fn Call() { // CHECK:STDOUT: %.loc8_31.2: %i32 = converted %int_4.loc8, %.loc8_31.1 [concrete = constants.%int_4.4eb] // CHECK:STDOUT: %GlobalNoReturn.call: init %empty_tuple.type = call imports.%GlobalNoReturn.decl(%.loc8_22.2, %.loc8_25.2, %.loc8_28.2, %.loc8_31.2) // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %value.patt: %pattern_type.6b6 = value_binding_pattern value [concrete] +// CHECK:STDOUT: %value.patt: %pattern_type.6b6 = value_binding_pattern value [concrete = constants.%value.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %GlobalReturnInt.ref: %GlobalReturnInt.cpp_overload_set.type = name_ref GlobalReturnInt, imports.%GlobalReturnInt.cpp_overload_set.value [concrete = constants.%GlobalReturnInt.cpp_overload_set.value] @@ -323,9 +324,9 @@ fn Call() { // CHECK:STDOUT: %.loc9_56.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc9_56 [concrete = constants.%int_4.4eb] // CHECK:STDOUT: %.loc9_56.2: %i32 = converted %int_4.loc9, %.loc9_56.1 [concrete = constants.%int_4.4eb] // CHECK:STDOUT: %GlobalReturnInt.call: init %i32 = call imports.%GlobalReturnInt.decl(%.loc9_47.2, %.loc9_50.2, %.loc9_53.2, %.loc9_56.2) -// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc9_57.1: %i32 = value_of_initializer %GlobalReturnInt.call // CHECK:STDOUT: %.loc9_57.2: %i32 = converted %GlobalReturnInt.call, %.loc9_57.1 +// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %value: %i32 = value_binding value, %.loc9_57.2 // CHECK:STDOUT: %.loc10_5.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] // CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] @@ -424,6 +425,10 @@ fn Call() { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete] // CHECK:STDOUT: %GlobalNoReturn__carbon_thunk.type.b46fe2.1: type = fn_type @GlobalNoReturn__carbon_thunk.1 [concrete] // CHECK:STDOUT: %GlobalNoReturn__carbon_thunk.4bc5a6.1: %GlobalNoReturn__carbon_thunk.type.b46fe2.1 = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] @@ -439,17 +444,22 @@ fn Call() { // CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.type.740: type = fn_type @ImplicitAs.WithSelf.Convert, @ImplicitAs.WithSelf(%i32, %ImplicitAs.facet) [concrete] // CHECK:STDOUT: %.1c5: type = fn_type_with_self_type %ImplicitAs.WithSelf.Convert.type.740, %ImplicitAs.facet [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.094: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39, @Core.IntLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete] // CHECK:STDOUT: %bound_method.953: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_1.0c6: %i32 = int_value 1 [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.9f3: = bound_method %int_2.ecc, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] // CHECK:STDOUT: %bound_method.3cb: = bound_method %int_2.ecc, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_2.295: %i32 = int_value 2 [concrete] +// CHECK:STDOUT: %value.patt: %pattern_type.6b6 = value_binding_pattern value [concrete] // CHECK:STDOUT: %GlobalReturnInt.cpp_overload_set.type: type = cpp_overload_set_type @GlobalReturnInt.cpp_overload_set [concrete] // CHECK:STDOUT: %GlobalReturnInt.cpp_overload_set.value: %GlobalReturnInt.cpp_overload_set.type = cpp_overload_set_value @GlobalReturnInt.cpp_overload_set [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %GlobalReturnInt__carbon_thunk.type: type = fn_type @GlobalReturnInt__carbon_thunk [concrete] // CHECK:STDOUT: %GlobalReturnInt__carbon_thunk: %GlobalReturnInt__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] +// CHECK:STDOUT: %c.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.6b6 = at_binding_pattern c, %c.param_patt [concrete] // CHECK:STDOUT: %GlobalNoReturn__carbon_thunk.type.b46fe2.2: type = fn_type @GlobalNoReturn__carbon_thunk.2 [concrete] // CHECK:STDOUT: %GlobalNoReturn__carbon_thunk.4bc5a6.2: %GlobalNoReturn__carbon_thunk.type.b46fe2.2 = struct_value () [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.485: = bound_method %int_3.1ba, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] @@ -465,6 +475,8 @@ fn Call() { // CHECK:STDOUT: %X.B.cpp_overload_set.value: %X.B.cpp_overload_set.type = cpp_overload_set_value @X.B.cpp_overload_set [concrete] // CHECK:STDOUT: %bound_method.f8c: = bound_method %.414, %X.B.cpp_overload_set.value [concrete] // CHECK:STDOUT: %pattern_type.fa7: type = pattern_type %X [concrete] +// CHECK:STDOUT: %this.param_patt: %pattern_type.fa7 = value_param_pattern [concrete] +// CHECK:STDOUT: %this.patt: %pattern_type.fa7 = at_binding_pattern this, %this.param_patt [concrete] // CHECK:STDOUT: %B__carbon_thunk.type: type = fn_type @B__carbon_thunk [concrete] // CHECK:STDOUT: %B__carbon_thunk: %B__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %X.C.cpp_overload_set.type: type = cpp_overload_set_type @X.C.cpp_overload_set [concrete] @@ -476,12 +488,16 @@ fn Call() { // CHECK:STDOUT: %bound_method.9a8: = bound_method %.414, %X.D.cpp_overload_set.value [concrete] // CHECK:STDOUT: %ptr.ca1: type = ptr_type %X [concrete] // CHECK:STDOUT: %pattern_type.cf1: type = pattern_type %ptr.ca1 [concrete] +// CHECK:STDOUT: %_.param_patt: %pattern_type.cf1 = value_param_pattern [concrete] +// CHECK:STDOUT: %_.patt: %pattern_type.cf1 = at_binding_pattern _, %_.param_patt [concrete] // CHECK:STDOUT: %D__carbon_thunk.type: type = fn_type @D__carbon_thunk [concrete] // CHECK:STDOUT: %D__carbon_thunk: %D__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Self.0e7: %Destroy.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.d3e: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Self.0e7) [symbolic] // CHECK:STDOUT: %Destroy.WithSelf.Op.42b: %Destroy.WithSelf.Op.type.d3e = struct_value () [symbolic] +// CHECK:STDOUT: %self.param_patt.a14: %pattern_type.fa7 = ref_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.37b: %pattern_type.fa7 = at_binding_pattern self, %self.param_patt.a14 [concrete] // CHECK:STDOUT: %X.cpp_destructor.type: type = fn_type @X.cpp_destructor [concrete] // CHECK:STDOUT: %X.cpp_destructor: %X.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.c5a: = custom_witness (), @Destroy [concrete] @@ -507,10 +523,10 @@ fn Call() { // CHECK:STDOUT: %GlobalNoReturn.cpp_overload_set.value: %GlobalNoReturn.cpp_overload_set.type = cpp_overload_set_value @GlobalNoReturn.cpp_overload_set [concrete = constants.%GlobalNoReturn.cpp_overload_set.value] // CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: %GlobalNoReturn__carbon_thunk.decl.04a738.1: %GlobalNoReturn__carbon_thunk.type.b46fe2.1 = fn_decl @GlobalNoReturn__carbon_thunk.1 [concrete = constants.%GlobalNoReturn__carbon_thunk.4bc5a6.1] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %i32 = value_param call_param0 // CHECK:STDOUT: %.1: type = splice_block %i32.4 [concrete = constants.%i32] { @@ -532,12 +548,12 @@ fn Call() { // CHECK:STDOUT: %ImplicitAs.impl_witness_table.b3c = impl_witness_table (%Core.import_ref.edf), @Core.IntLiteral.as.ImplicitAs.impl [concrete] // CHECK:STDOUT: %GlobalReturnInt.cpp_overload_set.value: %GlobalReturnInt.cpp_overload_set.type = cpp_overload_set_value @GlobalReturnInt.cpp_overload_set [concrete = constants.%GlobalReturnInt.cpp_overload_set.value] // CHECK:STDOUT: %GlobalReturnInt__carbon_thunk.decl: %GlobalReturnInt__carbon_thunk.type = fn_decl @GlobalReturnInt__carbon_thunk [concrete = constants.%GlobalReturnInt__carbon_thunk] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.2 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.2 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.1: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.1: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -560,12 +576,12 @@ fn Call() { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %GlobalNoReturn__carbon_thunk.decl.04a738.2: %GlobalNoReturn__carbon_thunk.type.b46fe2.2 = fn_decl @GlobalNoReturn__carbon_thunk.2 [concrete = constants.%GlobalNoReturn__carbon_thunk.4bc5a6.2] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %c.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.6b6 = at_binding_pattern c, %c.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] +// CHECK:STDOUT: %c.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%c.param_patt] +// CHECK:STDOUT: %c.patt: %pattern_type.6b6 = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %i32 = value_param call_param0 // CHECK:STDOUT: %.1: type = splice_block %i32.6 [concrete = constants.%i32] { @@ -592,10 +608,10 @@ fn Call() { // CHECK:STDOUT: %X.decl: type = class_decl @X [concrete = constants.%X] {} {} // CHECK:STDOUT: %X.B.cpp_overload_set.value: %X.B.cpp_overload_set.type = cpp_overload_set_value @X.B.cpp_overload_set [concrete = constants.%X.B.cpp_overload_set.value] // CHECK:STDOUT: %B__carbon_thunk.decl: %B__carbon_thunk.type = fn_decl @B__carbon_thunk [concrete = constants.%B__carbon_thunk] { -// CHECK:STDOUT: %this.param_patt: %pattern_type.fa7 = value_param_pattern [concrete] -// CHECK:STDOUT: %this.patt: %pattern_type.fa7 = at_binding_pattern this, %this.param_patt [concrete] -// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %this.param_patt: %pattern_type.fa7 = value_param_pattern [concrete = constants.%this.param_patt] +// CHECK:STDOUT: %this.patt: %pattern_type.fa7 = at_binding_pattern this, %this.param_patt [concrete = constants.%this.patt] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %this.param: %X = value_param call_param0 // CHECK:STDOUT: %this: %X = value_binding this, %this.param @@ -609,8 +625,8 @@ fn Call() { // CHECK:STDOUT: } // CHECK:STDOUT: %X.C.cpp_overload_set.value: %X.C.cpp_overload_set.type = cpp_overload_set_value @X.C.cpp_overload_set [concrete = constants.%X.C.cpp_overload_set.value] // CHECK:STDOUT: %C__carbon_thunk.decl: %C__carbon_thunk.type = fn_decl @C__carbon_thunk [concrete = constants.%C__carbon_thunk] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %i32 = value_param call_param0 // CHECK:STDOUT: %.1: type = splice_block %i32.2 [concrete = constants.%i32] { @@ -622,10 +638,10 @@ fn Call() { // CHECK:STDOUT: } // CHECK:STDOUT: %X.D.cpp_overload_set.value: %X.D.cpp_overload_set.type = cpp_overload_set_value @X.D.cpp_overload_set [concrete = constants.%X.D.cpp_overload_set.value] // CHECK:STDOUT: %D__carbon_thunk.decl: %D__carbon_thunk.type = fn_decl @D__carbon_thunk [concrete = constants.%D__carbon_thunk] { -// CHECK:STDOUT: %_.param_patt: %pattern_type.cf1 = value_param_pattern [concrete] -// CHECK:STDOUT: %_.patt: %pattern_type.cf1 = at_binding_pattern _, %_.param_patt [concrete] -// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %_.param_patt: %pattern_type.cf1 = value_param_pattern [concrete = constants.%_.param_patt] +// CHECK:STDOUT: %_.patt: %pattern_type.cf1 = at_binding_pattern _, %_.param_patt [concrete = constants.%_.patt] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %_.param: %ptr.ca1 = value_param call_param0 // CHECK:STDOUT: %_: %ptr.ca1 = value_binding _, %_.param @@ -640,8 +656,8 @@ fn Call() { // CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Destroy.WithSelf.Op.decl: %Destroy.WithSelf.Op.type.d3e = fn_decl @Destroy.WithSelf.Op [symbolic = @Destroy.WithSelf.%Destroy.WithSelf.Op (constants.%Destroy.WithSelf.Op.42b)] {} {} // CHECK:STDOUT: %X.cpp_destructor.decl: %X.cpp_destructor.type = fn_decl @X.cpp_destructor [concrete = constants.%X.cpp_destructor] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.fa7 = ref_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.fa7 = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.fa7 = ref_param_pattern [concrete = constants.%self.param_patt.a14] +// CHECK:STDOUT: %self.patt: %pattern_type.fa7 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.37b] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %X = ref_param call_param0 // CHECK:STDOUT: %self: ref %X = ref_binding self, %self.param @@ -695,7 +711,7 @@ fn Call() { // CHECK:STDOUT: %.loc8_25.2: %i32 = converted %int_2.loc8, %.loc8_25.1 [concrete = constants.%int_2.295] // CHECK:STDOUT: %GlobalNoReturn__carbon_thunk.call.loc8: init %empty_tuple.type = call imports.%GlobalNoReturn__carbon_thunk.decl.04a738.1(%.loc8_22.2, %.loc8_25.2) // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %value.patt: %pattern_type.6b6 = value_binding_pattern value [concrete] +// CHECK:STDOUT: %value.patt: %pattern_type.6b6 = value_binding_pattern value [concrete = constants.%value.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %GlobalReturnInt.ref: %GlobalReturnInt.cpp_overload_set.type = name_ref GlobalReturnInt, imports.%GlobalReturnInt.cpp_overload_set.value [concrete = constants.%GlobalReturnInt.cpp_overload_set.value] @@ -716,9 +732,9 @@ fn Call() { // CHECK:STDOUT: %.loc9_50.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc9_50 [concrete = constants.%int_2.295] // CHECK:STDOUT: %.loc9_50.2: %i32 = converted %int_2.loc9, %.loc9_50.1 [concrete = constants.%int_2.295] // CHECK:STDOUT: %GlobalReturnInt__carbon_thunk.call: init %i32 = call imports.%GlobalReturnInt__carbon_thunk.decl(%.loc9_47.2, %.loc9_50.2) -// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc9_51.1: %i32 = value_of_initializer %GlobalReturnInt__carbon_thunk.call // CHECK:STDOUT: %.loc9_51.2: %i32 = converted %GlobalReturnInt__carbon_thunk.call, %.loc9_51.1 +// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %value: %i32 = value_binding value, %.loc9_51.2 // CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %GlobalNoReturn.ref.loc10: %GlobalNoReturn.cpp_overload_set.type = name_ref GlobalNoReturn, imports.%GlobalNoReturn.cpp_overload_set.value [concrete = constants.%GlobalNoReturn.cpp_overload_set.value] @@ -800,8 +816,8 @@ fn Call() { // CHECK:STDOUT: %addr: %ptr.ca1 = addr_of %.loc13_7.4 // CHECK:STDOUT: %D__carbon_thunk.call: init %empty_tuple.type = call imports.%D__carbon_thunk.decl(%addr, %.loc13_19.2) // CHECK:STDOUT: %X.Op.decl: %X.Op.type = fn_decl @X.Op [concrete = constants.%X.Op] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.fa7 = ref_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.fa7 = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %.1: %pattern_type.fa7 = specific_constant constants.%self.param_patt.a14, @Destroy.WithSelf.Op(constants.%Destroy.facet.761) [concrete = constants.%self.param_patt.a14] +// CHECK:STDOUT: %self.patt: %pattern_type.fa7 = at_binding_pattern self, %.1 [concrete = constants.%self.patt.37b] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %X = ref_param call_param0 // CHECK:STDOUT: %self: ref %X = ref_binding self, %self.param diff --git a/toolchain/check/testdata/interop/cpp/function/import/extern_c.carbon b/toolchain/check/testdata/interop/cpp/function/import/extern_c.carbon index 1738ba3806d0..95380f79d6d9 100644 --- a/toolchain/check/testdata/interop/cpp/function/import/extern_c.carbon +++ b/toolchain/check/testdata/interop/cpp/function/import/extern_c.carbon @@ -167,6 +167,8 @@ fn MyF(a: Cpp.X, b: Cpp.X) -> Cpp.X { // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %foo.patt: %pattern_type.6b6 = ref_binding_pattern foo [concrete] +// CHECK:STDOUT: %foo.var_patt: %pattern_type.6b6 = var_pattern %foo.patt [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.ac8: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N) [symbolic] // CHECK:STDOUT: %Int.as.Copy.impl.Op.5e0: %Int.as.Copy.impl.Op.type.ac8 = struct_value () [symbolic] @@ -184,8 +186,8 @@ fn MyF(a: Cpp.X, b: Cpp.X) -> Cpp.X { // CHECK:STDOUT: .foo = %foo.var // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %foo.patt: %pattern_type.6b6 = ref_binding_pattern foo [concrete] -// CHECK:STDOUT: %foo.var_patt: %pattern_type.6b6 = var_pattern %foo.patt [concrete] +// CHECK:STDOUT: %foo.patt: %pattern_type.6b6 = ref_binding_pattern foo [concrete = constants.%foo.patt] +// CHECK:STDOUT: %foo.var_patt: %pattern_type.6b6 = var_pattern %foo.patt [concrete = constants.%foo.var_patt] // CHECK:STDOUT: %foo.var: ref %i32 = var %foo.var_patt [concrete] // CHECK:STDOUT: %Core.import_ref.cd6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.ac8) = import_ref Core//prelude/parts/int, loc{{\d+_\d+}}, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.5e0)] // CHECK:STDOUT: %Copy.impl_witness_table.367 = impl_witness_table (%Core.import_ref.cd6), @Int.as.Copy.impl [concrete] diff --git a/toolchain/check/testdata/interop/cpp/function/import/full_semir.carbon b/toolchain/check/testdata/interop/cpp/function/import/full_semir.carbon index fd6e69905608..7f8f8c71a621 100644 --- a/toolchain/check/testdata/interop/cpp/function/import/full_semir.carbon +++ b/toolchain/check/testdata/interop/cpp/function/import/full_semir.carbon @@ -98,6 +98,8 @@ fn F() { // CHECK:STDOUT: %int_1.d17: %i16 = int_value 1 [concrete] // CHECK:STDOUT: %ptr.686: type = ptr_type %i16 [concrete] // CHECK:STDOUT: %pattern_type.f71: type = pattern_type %ptr.686 [concrete] +// CHECK:STDOUT: %a.param_patt.58a: %pattern_type.f71 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt.da1: %pattern_type.f71 = at_binding_pattern a, %a.param_patt.58a [concrete] // CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] // CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -139,8 +141,8 @@ fn F() { // CHECK:STDOUT: %Core.import_ref.64b: @Core.IntLiteral.as.As.impl.%Core.IntLiteral.as.As.impl.Convert.type (%Core.IntLiteral.as.As.impl.Convert.type.c5d) = import_ref Core//prelude/parts/int, loc{{\d+_\d+}}, loaded [symbolic = @Core.IntLiteral.as.As.impl.%Core.IntLiteral.as.As.impl.Convert (constants.%Core.IntLiteral.as.As.impl.Convert.6ee)] // CHECK:STDOUT: %As.impl_witness_table.1c5 = impl_witness_table (%Core.import_ref.64b), @Core.IntLiteral.as.As.impl [concrete] // CHECK:STDOUT: %foo__carbon_thunk.decl: %foo__carbon_thunk.type = fn_decl @foo__carbon_thunk [concrete = constants.%foo__carbon_thunk] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.f71 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.f71 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.f71 = value_param_pattern [concrete = constants.%a.param_patt.58a] +// CHECK:STDOUT: %a.patt: %pattern_type.f71 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt.da1] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %ptr.686 = value_param call_param0 // CHECK:STDOUT: %.1: type = splice_block constants.%ptr.686 [concrete = constants.%ptr.686] { @@ -220,6 +222,8 @@ fn F() { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] // CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] @@ -254,8 +258,8 @@ fn F() { // CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] // CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %i32 = value_param call_param0 // CHECK:STDOUT: %.1: type = splice_block %i32.2 [concrete = constants.%i32] { @@ -313,10 +317,13 @@ fn F() { // CHECK:STDOUT: %i16: type = class_type @Int, @Int(%int_16) [concrete] // CHECK:STDOUT: %i16.builtin: type = int_type signed, %int_16 [concrete] // CHECK:STDOUT: %pattern_type.203: type = pattern_type %i16 [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.203 = value_binding_pattern x [concrete] // CHECK:STDOUT: %foo_short.cpp_overload_set.type: type = cpp_overload_set_type @foo_short.cpp_overload_set [concrete] // CHECK:STDOUT: %foo_short.cpp_overload_set.value: %foo_short.cpp_overload_set.type = cpp_overload_set_value @foo_short.cpp_overload_set [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %i16 [concrete] // CHECK:STDOUT: %pattern_type.f71: type = pattern_type %ptr [concrete] +// CHECK:STDOUT: %return.param_patt.667: %pattern_type.f71 = value_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.4ab: %pattern_type.f71 = at_binding_pattern r#return, %return.param_patt.667 [concrete] // CHECK:STDOUT: %foo_short__carbon_thunk.type: type = fn_type @foo_short__carbon_thunk [concrete] // CHECK:STDOUT: %foo_short__carbon_thunk: %foo_short__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] @@ -338,8 +345,8 @@ fn F() { // CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: %foo_short.cpp_overload_set.value: %foo_short.cpp_overload_set.type = cpp_overload_set_value @foo_short.cpp_overload_set [concrete = constants.%foo_short.cpp_overload_set.value] // CHECK:STDOUT: %foo_short__carbon_thunk.decl: %foo_short__carbon_thunk.type = fn_decl @foo_short__carbon_thunk [concrete = constants.%foo_short__carbon_thunk] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.f71 = value_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.f71 = at_binding_pattern r#return, %return.param_patt [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.f71 = value_param_pattern [concrete = constants.%return.param_patt.667] +// CHECK:STDOUT: %return.patt: %pattern_type.f71 = at_binding_pattern r#return, %return.param_patt [concrete = constants.%return.patt.4ab] // CHECK:STDOUT: } { // CHECK:STDOUT: %return.param: %ptr = value_param call_param0 // CHECK:STDOUT: %.1: type = splice_block constants.%ptr [concrete = constants.%ptr] { @@ -368,7 +375,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.203 = value_binding_pattern x [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.203 = value_binding_pattern x [concrete = constants.%x.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %foo_short.ref: %foo_short.cpp_overload_set.type = name_ref foo_short, imports.%foo_short.cpp_overload_set.value [concrete = constants.%foo_short.cpp_overload_set.value] @@ -376,9 +383,9 @@ fn F() { // CHECK:STDOUT: %addr: %ptr = addr_of %.loc7_37.1 // CHECK:STDOUT: %foo_short__carbon_thunk.call: init %empty_tuple.type = call imports.%foo_short__carbon_thunk.decl(%addr) // CHECK:STDOUT: %.loc7_37.2: init %i16 to %.loc7_37.1 = mark_in_place_init %foo_short__carbon_thunk.call -// CHECK:STDOUT: %i16: type = type_literal constants.%i16 [concrete = constants.%i16] // CHECK:STDOUT: %.loc7_37.3: ref %i16 = temporary %.loc7_37.1, %.loc7_37.2 // CHECK:STDOUT: %.loc7_37.4: %i16 = acquire_value %.loc7_37.3 +// CHECK:STDOUT: %i16: type = type_literal constants.%i16 [concrete = constants.%i16] // CHECK:STDOUT: %x: %i16 = value_binding x, %.loc7_37.4 // CHECK:STDOUT: %Destroy.Op.bound: = bound_method %.loc7_37.3, constants.%Destroy.Op.1a2547.2 // CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%.loc7_37.3) diff --git a/toolchain/check/testdata/interop/cpp/function/import/inline.carbon b/toolchain/check/testdata/interop/cpp/function/import/inline.carbon index 9cfbf1efcc40..d5daf1a326e5 100644 --- a/toolchain/check/testdata/interop/cpp/function/import/inline.carbon +++ b/toolchain/check/testdata/interop/cpp/function/import/inline.carbon @@ -151,6 +151,7 @@ fn MyF() { // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %r1.patt: %pattern_type.6b6 = value_binding_pattern r1 [concrete] // CHECK:STDOUT: %WithoutThunk.cpp_overload_set.type: type = cpp_overload_set_type @WithoutThunk.cpp_overload_set [concrete] // CHECK:STDOUT: %WithoutThunk.cpp_overload_set.value: %WithoutThunk.cpp_overload_set.type = cpp_overload_set_value @WithoutThunk.cpp_overload_set [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] @@ -170,6 +171,7 @@ fn MyF() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn.571: = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39, @Core.IntLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete] // CHECK:STDOUT: %bound_method.953: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn.571 [concrete] // CHECK:STDOUT: %int_1.0c6: %i32 = int_value 1 [concrete] +// CHECK:STDOUT: %r2.patt: %pattern_type.6b6 = value_binding_pattern r2 [concrete] // CHECK:STDOUT: %ThunkOnArg.cpp_overload_set.type: type = cpp_overload_set_type @ThunkOnArg.cpp_overload_set [concrete] // CHECK:STDOUT: %ThunkOnArg.cpp_overload_set.value: %ThunkOnArg.cpp_overload_set.type = cpp_overload_set_value @ThunkOnArg.cpp_overload_set [concrete] // CHECK:STDOUT: %int_16: Core.IntLiteral = int_value 16 [concrete] @@ -204,10 +206,12 @@ fn MyF() { // CHECK:STDOUT: %bound_method.47b: = bound_method %int_1.d17, %Int.as.Copy.impl.Op.specific_fn [concrete] // CHECK:STDOUT: %.597: ref %i16 = temporary invalid, %int_1.d17 [concrete] // CHECK:STDOUT: %addr: %ptr.686 = addr_of %.597 [concrete] +// CHECK:STDOUT: %r3.patt: %pattern_type.203 = value_binding_pattern r3 [concrete] // CHECK:STDOUT: %ThunkOnReturn.cpp_overload_set.type: type = cpp_overload_set_type @ThunkOnReturn.cpp_overload_set [concrete] // CHECK:STDOUT: %ThunkOnReturn.cpp_overload_set.value: %ThunkOnReturn.cpp_overload_set.type = cpp_overload_set_value @ThunkOnReturn.cpp_overload_set [concrete] // CHECK:STDOUT: %ThunkOnReturn__carbon_thunk.type: type = fn_type @ThunkOnReturn__carbon_thunk [concrete] // CHECK:STDOUT: %ThunkOnReturn__carbon_thunk: %ThunkOnReturn__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %r4.patt: %pattern_type.203 = value_binding_pattern r4 [concrete] // CHECK:STDOUT: %ThunkOnBoth.cpp_overload_set.type: type = cpp_overload_set_type @ThunkOnBoth.cpp_overload_set [concrete] // CHECK:STDOUT: %ThunkOnBoth.cpp_overload_set.value: %ThunkOnBoth.cpp_overload_set.type = cpp_overload_set_value @ThunkOnBoth.cpp_overload_set [concrete] // CHECK:STDOUT: %ThunkOnBoth__carbon_thunk.type: type = fn_type @ThunkOnBoth__carbon_thunk [concrete] @@ -258,7 +262,7 @@ fn MyF() { // CHECK:STDOUT: fn @MyF() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %r1.patt: %pattern_type.6b6 = value_binding_pattern r1 [concrete] +// CHECK:STDOUT: %r1.patt: %pattern_type.6b6 = value_binding_pattern r1 [concrete = constants.%r1.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc13: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %WithoutThunk.ref: %WithoutThunk.cpp_overload_set.type = name_ref WithoutThunk, imports.%WithoutThunk.cpp_overload_set.value [concrete = constants.%WithoutThunk.cpp_overload_set.value] @@ -271,12 +275,12 @@ fn MyF() { // CHECK:STDOUT: %.loc13_41.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc13 [concrete = constants.%int_1.0c6] // CHECK:STDOUT: %.loc13_41.2: %i32 = converted %int_1.loc13, %.loc13_41.1 [concrete = constants.%int_1.0c6] // CHECK:STDOUT: %WithoutThunk.call: init %i32 = call imports.%WithoutThunk.decl(%.loc13_41.2) -// CHECK:STDOUT: %i32.loc13: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc13_42.1: %i32 = value_of_initializer %WithoutThunk.call // CHECK:STDOUT: %.loc13_42.2: %i32 = converted %WithoutThunk.call, %.loc13_42.1 +// CHECK:STDOUT: %i32.loc13: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %r1: %i32 = value_binding r1, %.loc13_42.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %r2.patt: %pattern_type.6b6 = value_binding_pattern r2 [concrete] +// CHECK:STDOUT: %r2.patt: %pattern_type.6b6 = value_binding_pattern r2 [concrete = constants.%r2.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc14: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %ThunkOnArg.ref: %ThunkOnArg.cpp_overload_set.type = name_ref ThunkOnArg, imports.%ThunkOnArg.cpp_overload_set.value [concrete = constants.%ThunkOnArg.cpp_overload_set.value] @@ -297,12 +301,12 @@ fn MyF() { // CHECK:STDOUT: %.loc14_39.4: ref %i16 = temporary %.loc14_39.3, %Int.as.Copy.impl.Op.call.loc14 [concrete = constants.%.597] // CHECK:STDOUT: %addr.loc14: %ptr.686 = addr_of %.loc14_39.4 [concrete = constants.%addr] // CHECK:STDOUT: %ThunkOnArg__carbon_thunk.call: init %i32 = call imports.%ThunkOnArg__carbon_thunk.decl(%addr.loc14) -// CHECK:STDOUT: %i32.loc14: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc14_40.1: %i32 = value_of_initializer %ThunkOnArg__carbon_thunk.call // CHECK:STDOUT: %.loc14_40.2: %i32 = converted %ThunkOnArg__carbon_thunk.call, %.loc14_40.1 +// CHECK:STDOUT: %i32.loc14: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %r2: %i32 = value_binding r2, %.loc14_40.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %r3.patt: %pattern_type.203 = value_binding_pattern r3 [concrete] +// CHECK:STDOUT: %r3.patt: %pattern_type.203 = value_binding_pattern r3 [concrete = constants.%r3.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc15: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %ThunkOnReturn.ref: %ThunkOnReturn.cpp_overload_set.type = name_ref ThunkOnReturn, imports.%ThunkOnReturn.cpp_overload_set.value [concrete = constants.%ThunkOnReturn.cpp_overload_set.value] @@ -318,12 +322,12 @@ fn MyF() { // CHECK:STDOUT: %addr.loc15: %ptr.686 = addr_of %.loc15_43.1 // CHECK:STDOUT: %ThunkOnReturn__carbon_thunk.call: init %empty_tuple.type = call imports.%ThunkOnReturn__carbon_thunk.decl(%.loc15_42.2, %addr.loc15) // CHECK:STDOUT: %.loc15_43.2: init %i16 to %.loc15_43.1 = mark_in_place_init %ThunkOnReturn__carbon_thunk.call -// CHECK:STDOUT: %i16.loc15: type = type_literal constants.%i16 [concrete = constants.%i16] // CHECK:STDOUT: %.loc15_43.3: ref %i16 = temporary %.loc15_43.1, %.loc15_43.2 // CHECK:STDOUT: %.loc15_43.4: %i16 = acquire_value %.loc15_43.3 +// CHECK:STDOUT: %i16.loc15: type = type_literal constants.%i16 [concrete = constants.%i16] // CHECK:STDOUT: %r3: %i16 = value_binding r3, %.loc15_43.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %r4.patt: %pattern_type.203 = value_binding_pattern r4 [concrete] +// CHECK:STDOUT: %r4.patt: %pattern_type.203 = value_binding_pattern r4 [concrete = constants.%r4.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc16: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %ThunkOnBoth.ref: %ThunkOnBoth.cpp_overload_set.type = name_ref ThunkOnBoth, imports.%ThunkOnBoth.cpp_overload_set.value [concrete = constants.%ThunkOnBoth.cpp_overload_set.value] @@ -347,9 +351,9 @@ fn MyF() { // CHECK:STDOUT: %addr.loc16_41.2: %ptr.686 = addr_of %.loc16_41.1 // CHECK:STDOUT: %ThunkOnBoth__carbon_thunk.call: init %empty_tuple.type = call imports.%ThunkOnBoth__carbon_thunk.decl(%addr.loc16_41.1, %addr.loc16_41.2) // CHECK:STDOUT: %.loc16_41.2: init %i16 to %.loc16_41.1 = mark_in_place_init %ThunkOnBoth__carbon_thunk.call -// CHECK:STDOUT: %i16.loc16: type = type_literal constants.%i16 [concrete = constants.%i16] // CHECK:STDOUT: %.loc16_41.3: ref %i16 = temporary %.loc16_41.1, %.loc16_41.2 // CHECK:STDOUT: %.loc16_41.4: %i16 = acquire_value %.loc16_41.3 +// CHECK:STDOUT: %i16.loc16: type = type_literal constants.%i16 [concrete = constants.%i16] // CHECK:STDOUT: %r4: %i16 = value_binding r4, %.loc16_41.4 // CHECK:STDOUT: %Destroy.Op.bound.loc16: = bound_method %.loc16_41.3, constants.%Destroy.Op.1a2547.2 // CHECK:STDOUT: %Destroy.Op.call.loc16_41: init %empty_tuple.type = call %Destroy.Op.bound.loc16(%.loc16_41.3) diff --git a/toolchain/check/testdata/interop/cpp/function/import/overloads.carbon b/toolchain/check/testdata/interop/cpp/function/import/overloads.carbon index 76b8de103eb1..3d7b19004ed8 100644 --- a/toolchain/check/testdata/interop/cpp/function/import/overloads.carbon +++ b/toolchain/check/testdata/interop/cpp/function/import/overloads.carbon @@ -823,6 +823,8 @@ fn F() { // CHECK:STDOUT: %int_1.d17: %i16 = int_value 1 [concrete] // CHECK:STDOUT: %ptr.686: type = ptr_type %i16 [concrete] // CHECK:STDOUT: %pattern_type.f71: type = pattern_type %ptr.686 [concrete] +// CHECK:STDOUT: %a.param_patt.58a: %pattern_type.f71 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt.da1: %pattern_type.f71 = at_binding_pattern a, %a.param_patt.58a [concrete] // CHECK:STDOUT: %bar__carbon_thunk.type: type = fn_type @bar__carbon_thunk [concrete] // CHECK:STDOUT: %bar__carbon_thunk: %bar__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -864,8 +866,8 @@ fn F() { // CHECK:STDOUT: %Core.import_ref.64b: @Core.IntLiteral.as.As.impl.%Core.IntLiteral.as.As.impl.Convert.type (%Core.IntLiteral.as.As.impl.Convert.type.c5d) = import_ref Core//prelude/parts/int, loc{{\d+_\d+}}, loaded [symbolic = @Core.IntLiteral.as.As.impl.%Core.IntLiteral.as.As.impl.Convert (constants.%Core.IntLiteral.as.As.impl.Convert.6ee)] // CHECK:STDOUT: %As.impl_witness_table.1c5 = impl_witness_table (%Core.import_ref.64b), @Core.IntLiteral.as.As.impl [concrete] // CHECK:STDOUT: %bar__carbon_thunk.decl: %bar__carbon_thunk.type = fn_decl @bar__carbon_thunk [concrete = constants.%bar__carbon_thunk] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.f71 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.f71 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.f71 = value_param_pattern [concrete = constants.%a.param_patt.58a] +// CHECK:STDOUT: %a.patt: %pattern_type.f71 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt.da1] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %ptr.686 = value_param call_param0 // CHECK:STDOUT: %.1: type = splice_block constants.%ptr.686 [concrete = constants.%ptr.686] { @@ -961,6 +963,8 @@ fn F() { // CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.specific_fn: = specific_function %Core.IntLiteral.as.As.impl.Convert.8a4, @Core.IntLiteral.as.As.impl.Convert(%int_32) [concrete] // CHECK:STDOUT: %bound_method: = bound_method %int_1.5b8, %Core.IntLiteral.as.As.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_1.0c6: %i32 = int_value 1 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] // CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -982,8 +986,8 @@ fn F() { // CHECK:STDOUT: %Core.import_ref.64b: @Core.IntLiteral.as.As.impl.%Core.IntLiteral.as.As.impl.Convert.type (%Core.IntLiteral.as.As.impl.Convert.type.c5d) = import_ref Core//prelude/parts/int, loc{{\d+_\d+}}, loaded [symbolic = @Core.IntLiteral.as.As.impl.%Core.IntLiteral.as.As.impl.Convert (constants.%Core.IntLiteral.as.As.impl.Convert.6ee)] // CHECK:STDOUT: %As.impl_witness_table.1c5 = impl_witness_table (%Core.import_ref.64b), @Core.IntLiteral.as.As.impl [concrete] // CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %i32 = value_param call_param0 // CHECK:STDOUT: %.1: type = splice_block %i32.2 [concrete = constants.%i32] { @@ -1058,6 +1062,8 @@ fn F() { // CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.specific_fn.923: = specific_function %Core.IntLiteral.as.As.impl.Convert.8a4, @Core.IntLiteral.as.As.impl.Convert(%int_32) [concrete] // CHECK:STDOUT: %bound_method.18b: = bound_method %int_1.5b8, %Core.IntLiteral.as.As.impl.Convert.specific_fn.923 [concrete] // CHECK:STDOUT: %int_1.0c6: %i32 = int_value 1 [concrete] +// CHECK:STDOUT: %a.param_patt.93f: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt.28e: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt.93f [concrete] // CHECK:STDOUT: %foo.type.6d9caa.1: type = fn_type @foo.1 [concrete] // CHECK:STDOUT: %foo.627376.1: %foo.type.6d9caa.1 = struct_value () [concrete] // CHECK:STDOUT: %int_16: Core.IntLiteral = int_value 16 [concrete] @@ -1076,6 +1082,8 @@ fn F() { // CHECK:STDOUT: %int_1.d17: %i16 = int_value 1 [concrete] // CHECK:STDOUT: %ptr.686: type = ptr_type %i16 [concrete] // CHECK:STDOUT: %pattern_type.f71: type = pattern_type %ptr.686 [concrete] +// CHECK:STDOUT: %a.param_patt.58a: %pattern_type.f71 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt.da1: %pattern_type.f71 = at_binding_pattern a, %a.param_patt.58a [concrete] // CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] // CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -1117,8 +1125,8 @@ fn F() { // CHECK:STDOUT: %Core.import_ref.64b: @Core.IntLiteral.as.As.impl.%Core.IntLiteral.as.As.impl.Convert.type (%Core.IntLiteral.as.As.impl.Convert.type.c5d) = import_ref Core//prelude/parts/int, loc{{\d+_\d+}}, loaded [symbolic = @Core.IntLiteral.as.As.impl.%Core.IntLiteral.as.As.impl.Convert (constants.%Core.IntLiteral.as.As.impl.Convert.6ee)] // CHECK:STDOUT: %As.impl_witness_table.1c5 = impl_witness_table (%Core.import_ref.64b), @Core.IntLiteral.as.As.impl [concrete] // CHECK:STDOUT: %foo.decl.6431a3.1: %foo.type.6d9caa.1 = fn_decl @foo.1 [concrete = constants.%foo.627376.1] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%a.param_patt.93f] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt.28e] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %i32 = value_param call_param0 // CHECK:STDOUT: %.1: type = splice_block %i32.2 [concrete = constants.%i32] { @@ -1129,8 +1137,8 @@ fn F() { // CHECK:STDOUT: %a: %i32 = value_binding a, %a.param // CHECK:STDOUT: } // CHECK:STDOUT: %foo__carbon_thunk.decl: %foo__carbon_thunk.type = fn_decl @foo__carbon_thunk [concrete = constants.%foo__carbon_thunk] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.f71 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.f71 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.f71 = value_param_pattern [concrete = constants.%a.param_patt.58a] +// CHECK:STDOUT: %a.patt: %pattern_type.f71 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt.da1] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %ptr.686 = value_param call_param0 // CHECK:STDOUT: %.1: type = splice_block constants.%ptr.686 [concrete = constants.%ptr.686] { @@ -1240,6 +1248,8 @@ fn F() { // CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.specific_fn: = specific_function %Core.IntLiteral.as.As.impl.Convert.8a4, @Core.IntLiteral.as.As.impl.Convert(%int_32) [concrete] // CHECK:STDOUT: %bound_method: = bound_method %int_1.5b8, %Core.IntLiteral.as.As.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_1.0c6: %i32 = int_value 1 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] // CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] // CHECK:STDOUT: %bar.cpp_overload_set.type: type = cpp_overload_set_type @bar.cpp_overload_set [concrete] @@ -1266,8 +1276,8 @@ fn F() { // CHECK:STDOUT: %Core.import_ref.64b: @Core.IntLiteral.as.As.impl.%Core.IntLiteral.as.As.impl.Convert.type (%Core.IntLiteral.as.As.impl.Convert.type.c5d) = import_ref Core//prelude/parts/int, loc{{\d+_\d+}}, loaded [symbolic = @Core.IntLiteral.as.As.impl.%Core.IntLiteral.as.As.impl.Convert (constants.%Core.IntLiteral.as.As.impl.Convert.6ee)] // CHECK:STDOUT: %As.impl_witness_table.1c5 = impl_witness_table (%Core.import_ref.64b), @Core.IntLiteral.as.As.impl [concrete] // CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %i32 = value_param call_param0 // CHECK:STDOUT: %.1: type = splice_block %i32.2 [concrete = constants.%i32] { @@ -1279,8 +1289,8 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %bar.cpp_overload_set.value: %bar.cpp_overload_set.type = cpp_overload_set_value @bar.cpp_overload_set [concrete = constants.%bar.cpp_overload_set.value] // CHECK:STDOUT: %bar.decl: %bar.type = fn_decl @bar [concrete = constants.%bar] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %i32 = value_param call_param0 // CHECK:STDOUT: %.1: type = splice_block %i32.2 [concrete = constants.%i32] { @@ -1350,9 +1360,14 @@ fn F() { // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.patt.bb2: %pattern_type.6b6 = value_binding_pattern a [concrete] // CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] // CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] // CHECK:STDOUT: %int_2147483647.d89: Core.IntLiteral = int_value 2147483647 [concrete] +// CHECK:STDOUT: %a.param_patt.93f: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt.28e: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt.93f [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %foo.type.6d9caa.1: type = fn_type @foo.1 [concrete] // CHECK:STDOUT: %foo.627376.1: %foo.type.6d9caa.1 = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] @@ -1374,7 +1389,12 @@ fn F() { // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %i64: type = class_type @Int, @Int(%int_64) [concrete] // CHECK:STDOUT: %pattern_type.f57: type = pattern_type %i64 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.f57 = value_binding_pattern b [concrete] // CHECK:STDOUT: %int_2147483648.1db: Core.IntLiteral = int_value 2147483648 [concrete] +// CHECK:STDOUT: %a.param_patt.089: %pattern_type.f57 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt.71e: %pattern_type.f57 = at_binding_pattern a, %a.param_patt.089 [concrete] +// CHECK:STDOUT: %return.param_patt.cfc: %pattern_type.f57 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.178: %pattern_type.f57 = return_slot_pattern %return.param_patt.cfc, %i64 [concrete] // CHECK:STDOUT: %foo.type.6d9caa.2: type = fn_type @foo.2 [concrete] // CHECK:STDOUT: %foo.627376.2: %foo.type.6d9caa.2 = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.221: type = facet_type <@ImplicitAs, @ImplicitAs(%i64)> [concrete] @@ -1388,6 +1408,9 @@ fn F() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn.f33: = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.a1b, @Core.IntLiteral.as.ImplicitAs.impl.Convert(%int_64) [concrete] // CHECK:STDOUT: %bound_method.2c2: = bound_method %int_2147483648.1db, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn.f33 [concrete] // CHECK:STDOUT: %int_2147483648.f59: %i64 = int_value 2147483648 [concrete] +// CHECK:STDOUT: %b_hexa.patt: %pattern_type.f57 = value_binding_pattern b_hexa [concrete] +// CHECK:STDOUT: %b_binary.patt: %pattern_type.f57 = value_binding_pattern b_binary [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.f57 = value_binding_pattern c [concrete] // CHECK:STDOUT: %int_9223372036854775807.e6f: Core.IntLiteral = int_value 9223372036854775807 [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.fc8: = bound_method %int_9223372036854775807.e6f, %Core.IntLiteral.as.ImplicitAs.impl.Convert.a1b [concrete] // CHECK:STDOUT: %bound_method.e30: = bound_method %int_9223372036854775807.e6f, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn.f33 [concrete] @@ -1396,9 +1419,14 @@ fn F() { // CHECK:STDOUT: %i128: type = class_type @Int, @Int(%int_128) [concrete] // CHECK:STDOUT: %i128.builtin: type = int_type signed, %int_128 [concrete] // CHECK:STDOUT: %pattern_type.97f: type = pattern_type %i128 [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.97f = value_binding_pattern d [concrete] // CHECK:STDOUT: %int_9223372036854775808.293: Core.IntLiteral = int_value 9223372036854775808 [concrete] // CHECK:STDOUT: %ptr.19c: type = ptr_type %i128 [concrete] // CHECK:STDOUT: %pattern_type.c1e: type = pattern_type %ptr.19c [concrete] +// CHECK:STDOUT: %a.param_patt.aed: %pattern_type.c1e = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt.26e: %pattern_type.c1e = at_binding_pattern a, %a.param_patt.aed [concrete] +// CHECK:STDOUT: %return.param_patt.513: %pattern_type.c1e = value_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.a21: %pattern_type.c1e = at_binding_pattern r#return, %return.param_patt.513 [concrete] // CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] // CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.be8: type = facet_type <@ImplicitAs, @ImplicitAs(%i128)> [concrete] @@ -1426,6 +1454,7 @@ fn F() { // CHECK:STDOUT: %bound_method.ddb: = bound_method %int_9223372036854775808.c39, %Int.as.Copy.impl.Op.specific_fn [concrete] // CHECK:STDOUT: %.e05: ref %i128 = temporary invalid, %int_9223372036854775808.c39 [concrete] // CHECK:STDOUT: %addr.ac7: %ptr.19c = addr_of %.e05 [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type.97f = value_binding_pattern e [concrete] // CHECK:STDOUT: %int_18446744073709551615.5ec: Core.IntLiteral = int_value 18446744073709551615 [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.8ee: = bound_method %int_18446744073709551615.5ec, %Core.IntLiteral.as.ImplicitAs.impl.Convert.c6b [concrete] // CHECK:STDOUT: %bound_method.5ac: = bound_method %int_18446744073709551615.5ec, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn.be8 [concrete] @@ -1434,6 +1463,7 @@ fn F() { // CHECK:STDOUT: %bound_method.181: = bound_method %int_18446744073709551615.278, %Int.as.Copy.impl.Op.specific_fn [concrete] // CHECK:STDOUT: %.6dc: ref %i128 = temporary invalid, %int_18446744073709551615.278 [concrete] // CHECK:STDOUT: %addr.fb9: %ptr.19c = addr_of %.6dc [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type.97f = value_binding_pattern f [concrete] // CHECK:STDOUT: %int_18446744073709551616.1ee: Core.IntLiteral = int_value 18446744073709551616 [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.f7c: = bound_method %int_18446744073709551616.1ee, %Core.IntLiteral.as.ImplicitAs.impl.Convert.c6b [concrete] // CHECK:STDOUT: %bound_method.e5e: = bound_method %int_18446744073709551616.1ee, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn.be8 [concrete] @@ -1442,6 +1472,7 @@ fn F() { // CHECK:STDOUT: %bound_method.b9e: = bound_method %int_18446744073709551616.9ff, %Int.as.Copy.impl.Op.specific_fn [concrete] // CHECK:STDOUT: %.579: ref %i128 = temporary invalid, %int_18446744073709551616.9ff [concrete] // CHECK:STDOUT: %addr.cbf: %ptr.19c = addr_of %.579 [concrete] +// CHECK:STDOUT: %g.patt: %pattern_type.97f = value_binding_pattern g [concrete] // CHECK:STDOUT: %int_170141183460469231731687303715884105727.fea: Core.IntLiteral = int_value 170141183460469231731687303715884105727 [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.6a6: = bound_method %int_170141183460469231731687303715884105727.fea, %Core.IntLiteral.as.ImplicitAs.impl.Convert.c6b [concrete] // CHECK:STDOUT: %bound_method.537: = bound_method %int_170141183460469231731687303715884105727.fea, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn.be8 [concrete] @@ -1475,10 +1506,10 @@ fn F() { // CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] // CHECK:STDOUT: %foo.decl.6431a3.1: %foo.type.6d9caa.1 = fn_decl @foo.1 [concrete = constants.%foo.627376.1] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.2 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%a.param_patt.93f] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt.28e] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.2 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.1: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.1: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -1497,10 +1528,10 @@ fn F() { // CHECK:STDOUT: %Core.import_ref.edf: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.e74) = 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.845)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.b3c = impl_witness_table (%Core.import_ref.edf), @Core.IntLiteral.as.ImplicitAs.impl [concrete] // CHECK:STDOUT: %foo.decl.6431a3.2: %foo.type.6d9caa.2 = fn_decl @foo.2 [concrete = constants.%foo.627376.2] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.f57 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.f57 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.f57 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.f57 = return_slot_pattern %return.param_patt, %i64.2 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.f57 = value_param_pattern [concrete = constants.%a.param_patt.089] +// CHECK:STDOUT: %a.patt: %pattern_type.f57 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt.71e] +// CHECK:STDOUT: %return.param_patt: %pattern_type.f57 = out_param_pattern [concrete = constants.%return.param_patt.cfc] +// CHECK:STDOUT: %return.patt: %pattern_type.f57 = return_slot_pattern %return.param_patt, %i64.2 [concrete = constants.%return.patt.178] // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64.1: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %i64.1: type = class_type @Int, @Int(constants.%int_64) [concrete = constants.%i64] @@ -1516,10 +1547,10 @@ fn F() { // CHECK:STDOUT: %return: ref %i64 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %foo__carbon_thunk.decl: %foo__carbon_thunk.type = fn_decl @foo__carbon_thunk [concrete = constants.%foo__carbon_thunk] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.c1e = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.c1e = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.c1e = value_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.c1e = at_binding_pattern r#return, %return.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.c1e = value_param_pattern [concrete = constants.%a.param_patt.aed] +// CHECK:STDOUT: %a.patt: %pattern_type.c1e = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt.26e] +// CHECK:STDOUT: %return.param_patt: %pattern_type.c1e = value_param_pattern [concrete = constants.%return.param_patt.513] +// CHECK:STDOUT: %return.patt: %pattern_type.c1e = at_binding_pattern r#return, %return.param_patt [concrete = constants.%return.patt.a21] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %ptr.19c = value_param call_param0 // CHECK:STDOUT: %.1: type = splice_block constants.%ptr.19c [concrete = constants.%ptr.19c] { @@ -1558,7 +1589,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = value_binding_pattern a [concrete = constants.%a.patt.bb2] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %foo.ref.loc8: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] @@ -1571,12 +1602,12 @@ fn F() { // CHECK:STDOUT: %.loc8_31.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc8 [concrete = constants.%int_2147483647.a0e] // CHECK:STDOUT: %.loc8_31.2: %i32 = converted %int_2147483647, %.loc8_31.1 [concrete = constants.%int_2147483647.a0e] // CHECK:STDOUT: %foo.call.loc8: init %i32 = call imports.%foo.decl.6431a3.1(%.loc8_31.2) -// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc8_41.1: %i32 = value_of_initializer %foo.call.loc8 // CHECK:STDOUT: %.loc8_41.2: %i32 = converted %foo.call.loc8, %.loc8_41.1 +// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %a: %i32 = value_binding a, %.loc8_41.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.f57 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.f57 = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc13: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %foo.ref.loc13: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] @@ -1589,12 +1620,12 @@ fn F() { // CHECK:STDOUT: %.loc13_31.1: %i64 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc13 [concrete = constants.%int_2147483648.f59] // CHECK:STDOUT: %.loc13_31.2: %i64 = converted %int_2147483648.loc13, %.loc13_31.1 [concrete = constants.%int_2147483648.f59] // CHECK:STDOUT: %foo.call.loc13: init %i64 = call imports.%foo.decl.6431a3.2(%.loc13_31.2) -// CHECK:STDOUT: %i64.loc13: type = type_literal constants.%i64 [concrete = constants.%i64] // CHECK:STDOUT: %.loc13_41.1: %i64 = value_of_initializer %foo.call.loc13 // CHECK:STDOUT: %.loc13_41.2: %i64 = converted %foo.call.loc13, %.loc13_41.1 +// CHECK:STDOUT: %i64.loc13: type = type_literal constants.%i64 [concrete = constants.%i64] // CHECK:STDOUT: %b: %i64 = value_binding b, %.loc13_41.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b_hexa.patt: %pattern_type.f57 = value_binding_pattern b_hexa [concrete] +// CHECK:STDOUT: %b_hexa.patt: %pattern_type.f57 = value_binding_pattern b_hexa [concrete = constants.%b_hexa.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc14: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %foo.ref.loc14: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] @@ -1607,12 +1638,12 @@ fn F() { // CHECK:STDOUT: %.loc14_36.1: %i64 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc14 [concrete = constants.%int_2147483648.f59] // CHECK:STDOUT: %.loc14_36.2: %i64 = converted %int_2147483648.loc14, %.loc14_36.1 [concrete = constants.%int_2147483648.f59] // CHECK:STDOUT: %foo.call.loc14: init %i64 = call imports.%foo.decl.6431a3.2(%.loc14_36.2) -// CHECK:STDOUT: %i64.loc14: type = type_literal constants.%i64 [concrete = constants.%i64] // CHECK:STDOUT: %.loc14_47.1: %i64 = value_of_initializer %foo.call.loc14 // CHECK:STDOUT: %.loc14_47.2: %i64 = converted %foo.call.loc14, %.loc14_47.1 +// CHECK:STDOUT: %i64.loc14: type = type_literal constants.%i64 [concrete = constants.%i64] // CHECK:STDOUT: %b_hexa: %i64 = value_binding b_hexa, %.loc14_47.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b_binary.patt: %pattern_type.f57 = value_binding_pattern b_binary [concrete] +// CHECK:STDOUT: %b_binary.patt: %pattern_type.f57 = value_binding_pattern b_binary [concrete = constants.%b_binary.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc15: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %foo.ref.loc15: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] @@ -1625,12 +1656,12 @@ fn F() { // CHECK:STDOUT: %.loc15_38.1: %i64 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc15 [concrete = constants.%int_2147483648.f59] // CHECK:STDOUT: %.loc15_38.2: %i64 = converted %int_2147483648.loc15, %.loc15_38.1 [concrete = constants.%int_2147483648.f59] // CHECK:STDOUT: %foo.call.loc15: init %i64 = call imports.%foo.decl.6431a3.2(%.loc15_38.2) -// CHECK:STDOUT: %i64.loc15: type = type_literal constants.%i64 [concrete = constants.%i64] // CHECK:STDOUT: %.loc15_79.1: %i64 = value_of_initializer %foo.call.loc15 // CHECK:STDOUT: %.loc15_79.2: %i64 = converted %foo.call.loc15, %.loc15_79.1 +// CHECK:STDOUT: %i64.loc15: type = type_literal constants.%i64 [concrete = constants.%i64] // CHECK:STDOUT: %b_binary: %i64 = value_binding b_binary, %.loc15_79.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.f57 = value_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.f57 = value_binding_pattern c [concrete = constants.%c.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc18: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %foo.ref.loc18: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] @@ -1643,12 +1674,12 @@ fn F() { // CHECK:STDOUT: %.loc18_31.1: %i64 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc18 [concrete = constants.%int_9223372036854775807.045] // CHECK:STDOUT: %.loc18_31.2: %i64 = converted %int_9223372036854775807, %.loc18_31.1 [concrete = constants.%int_9223372036854775807.045] // CHECK:STDOUT: %foo.call.loc18: init %i64 = call imports.%foo.decl.6431a3.2(%.loc18_31.2) -// CHECK:STDOUT: %i64.loc18: type = type_literal constants.%i64 [concrete = constants.%i64] // CHECK:STDOUT: %.loc18_50.1: %i64 = value_of_initializer %foo.call.loc18 // CHECK:STDOUT: %.loc18_50.2: %i64 = converted %foo.call.loc18, %.loc18_50.1 +// CHECK:STDOUT: %i64.loc18: type = type_literal constants.%i64 [concrete = constants.%i64] // CHECK:STDOUT: %c: %i64 = value_binding c, %.loc18_50.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.97f = value_binding_pattern d [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.97f = value_binding_pattern d [concrete = constants.%d.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc22: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %foo.ref.loc22: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] @@ -1672,12 +1703,12 @@ fn F() { // CHECK:STDOUT: %addr.loc22_51.2: %ptr.19c = addr_of %.loc22_51.1 // CHECK:STDOUT: %foo__carbon_thunk.call.loc22: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr.loc22_51.1, %addr.loc22_51.2) // CHECK:STDOUT: %.loc22_51.2: init %i128 to %.loc22_51.1 = mark_in_place_init %foo__carbon_thunk.call.loc22 -// CHECK:STDOUT: %i128.loc22: type = type_literal constants.%i128 [concrete = constants.%i128] // CHECK:STDOUT: %.loc22_51.3: ref %i128 = temporary %.loc22_51.1, %.loc22_51.2 // CHECK:STDOUT: %.loc22_51.4: %i128 = acquire_value %.loc22_51.3 +// CHECK:STDOUT: %i128.loc22: type = type_literal constants.%i128 [concrete = constants.%i128] // CHECK:STDOUT: %d: %i128 = value_binding d, %.loc22_51.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %e.patt: %pattern_type.97f = value_binding_pattern e [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type.97f = value_binding_pattern e [concrete = constants.%e.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc25: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %foo.ref.loc25: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] @@ -1701,12 +1732,12 @@ fn F() { // CHECK:STDOUT: %addr.loc25_52.2: %ptr.19c = addr_of %.loc25_52.1 // CHECK:STDOUT: %foo__carbon_thunk.call.loc25: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr.loc25_52.1, %addr.loc25_52.2) // CHECK:STDOUT: %.loc25_52.2: init %i128 to %.loc25_52.1 = mark_in_place_init %foo__carbon_thunk.call.loc25 -// CHECK:STDOUT: %i128.loc25: type = type_literal constants.%i128 [concrete = constants.%i128] // CHECK:STDOUT: %.loc25_52.3: ref %i128 = temporary %.loc25_52.1, %.loc25_52.2 // CHECK:STDOUT: %.loc25_52.4: %i128 = acquire_value %.loc25_52.3 +// CHECK:STDOUT: %i128.loc25: type = type_literal constants.%i128 [concrete = constants.%i128] // CHECK:STDOUT: %e: %i128 = value_binding e, %.loc25_52.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %f.patt: %pattern_type.97f = value_binding_pattern f [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type.97f = value_binding_pattern f [concrete = constants.%f.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc28: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %foo.ref.loc28: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] @@ -1730,12 +1761,12 @@ fn F() { // CHECK:STDOUT: %addr.loc28_52.2: %ptr.19c = addr_of %.loc28_52.1 // CHECK:STDOUT: %foo__carbon_thunk.call.loc28: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr.loc28_52.1, %addr.loc28_52.2) // CHECK:STDOUT: %.loc28_52.2: init %i128 to %.loc28_52.1 = mark_in_place_init %foo__carbon_thunk.call.loc28 -// CHECK:STDOUT: %i128.loc28: type = type_literal constants.%i128 [concrete = constants.%i128] // CHECK:STDOUT: %.loc28_52.3: ref %i128 = temporary %.loc28_52.1, %.loc28_52.2 // CHECK:STDOUT: %.loc28_52.4: %i128 = acquire_value %.loc28_52.3 +// CHECK:STDOUT: %i128.loc28: type = type_literal constants.%i128 [concrete = constants.%i128] // CHECK:STDOUT: %f: %i128 = value_binding f, %.loc28_52.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %g.patt: %pattern_type.97f = value_binding_pattern g [concrete] +// CHECK:STDOUT: %g.patt: %pattern_type.97f = value_binding_pattern g [concrete = constants.%g.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc31: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %foo.ref.loc31: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] @@ -1759,9 +1790,9 @@ fn F() { // CHECK:STDOUT: %addr.loc31_71.2: %ptr.19c = addr_of %.loc31_71.1 // CHECK:STDOUT: %foo__carbon_thunk.call.loc31: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr.loc31_71.1, %addr.loc31_71.2) // CHECK:STDOUT: %.loc31_71.2: init %i128 to %.loc31_71.1 = mark_in_place_init %foo__carbon_thunk.call.loc31 -// CHECK:STDOUT: %i128.loc31: type = type_literal constants.%i128 [concrete = constants.%i128] // CHECK:STDOUT: %.loc31_71.3: ref %i128 = temporary %.loc31_71.1, %.loc31_71.2 // CHECK:STDOUT: %.loc31_71.4: %i128 = acquire_value %.loc31_71.3 +// CHECK:STDOUT: %i128.loc31: type = type_literal constants.%i128 [concrete = constants.%i128] // CHECK:STDOUT: %g: %i128 = value_binding g, %.loc31_71.4 // CHECK:STDOUT: %Destroy.Op.bound.loc31: = bound_method %.loc31_71.3, constants.%Destroy.Op.1a2547.2 // CHECK:STDOUT: %Destroy.Op.call.loc31_71: init %empty_tuple.type = call %Destroy.Op.bound.loc31(%.loc31_71.3) @@ -1803,6 +1834,7 @@ fn F() { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i128: type = class_type @Int, @Int(%int_128) [concrete] // CHECK:STDOUT: %pattern_type.97f: type = pattern_type %i128 [concrete] +// CHECK:STDOUT: %h.patt: %pattern_type.97f = value_binding_pattern h [concrete] // CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] // CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] // CHECK:STDOUT: %int_170141183460469231731687303715884105728: Core.IntLiteral = int_value 170141183460469231731687303715884105728 [concrete] @@ -1838,7 +1870,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %h.patt: %pattern_type.97f = value_binding_pattern h [concrete] +// CHECK:STDOUT: %h.patt: %pattern_type.97f = value_binding_pattern h [concrete = constants.%h.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] @@ -1871,6 +1903,8 @@ fn F() { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] // CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] @@ -1910,8 +1944,8 @@ fn F() { // CHECK:STDOUT: %Negate.impl_witness_table = impl_witness_table (%Core.import_ref.abd, %Core.import_ref.9c3), @Core.IntLiteral.as.Negate.impl [concrete] // CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %i32 = value_param call_param0 // CHECK:STDOUT: %.1: type = splice_block %i32.2 [concrete = constants.%i32] { @@ -1985,6 +2019,8 @@ fn F() { // CHECK:STDOUT: %UInt.generic: %UInt.type = struct_value () [concrete] // CHECK:STDOUT: %u32: type = class_type @UInt, @UInt(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.668: type = pattern_type %u32 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.668 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.668 = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] // CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] @@ -2024,8 +2060,8 @@ fn F() { // CHECK:STDOUT: %Negate.impl_witness_table = impl_witness_table (%Core.import_ref.abd, %Core.import_ref.9c3), @Core.IntLiteral.as.Negate.impl [concrete] // CHECK:STDOUT: %Core.UInt: %UInt.type = import_ref Core//prelude/parts/uint, UInt, loaded [concrete = constants.%UInt.generic] // CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.668 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.668 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.668 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.668 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %u32 = value_param call_param0 // CHECK:STDOUT: %.1: type = splice_block %u32.2 [concrete = constants.%u32] { @@ -2089,11 +2125,16 @@ fn F() { // CHECK:STDOUT: %f64.dc1: type = class_type @Float, @Float(%int_64) [concrete] // CHECK:STDOUT: %f64.794: type = float_type %int_64, f64 [concrete] // CHECK:STDOUT: %pattern_type.fb7: type = pattern_type %f64.dc1 [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.fb7 = value_binding_pattern d [concrete] // CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] // CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] // CHECK:STDOUT: %float.6da: Core.FloatLiteral = float_literal_value 10e-1 [concrete] // CHECK:STDOUT: %ptr.749: type = ptr_type %f64.dc1 [concrete] // CHECK:STDOUT: %pattern_type.a3b: type = pattern_type %ptr.749 [concrete] +// CHECK:STDOUT: %a.param_patt.1c1: %pattern_type.a3b = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt.421: %pattern_type.a3b = at_binding_pattern a, %a.param_patt.1c1 [concrete] +// CHECK:STDOUT: %return.param_patt.0c1: %pattern_type.a3b = value_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.998: %pattern_type.a3b = at_binding_pattern r#return, %return.param_patt.0c1 [concrete] // CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] // CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] @@ -2148,10 +2189,10 @@ fn F() { // CHECK:STDOUT: %Core.Float: %Float.type = import_ref Core//prelude/parts/float, Float, loaded [concrete = constants.%Float.generic] // CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] // CHECK:STDOUT: %foo__carbon_thunk.decl: %foo__carbon_thunk.type = fn_decl @foo__carbon_thunk [concrete = constants.%foo__carbon_thunk] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.a3b = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.a3b = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.a3b = value_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.a3b = at_binding_pattern r#return, %return.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.a3b = value_param_pattern [concrete = constants.%a.param_patt.1c1] +// CHECK:STDOUT: %a.patt: %pattern_type.a3b = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt.421] +// CHECK:STDOUT: %return.param_patt: %pattern_type.a3b = value_param_pattern [concrete = constants.%return.param_patt.0c1] +// CHECK:STDOUT: %return.patt: %pattern_type.a3b = at_binding_pattern r#return, %return.param_patt [concrete = constants.%return.patt.998] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %ptr.749 = value_param call_param0 // CHECK:STDOUT: %.1: type = splice_block constants.%ptr.749 [concrete = constants.%ptr.749] { @@ -2193,7 +2234,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.fb7 = value_binding_pattern d [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.fb7 = value_binding_pattern d [concrete = constants.%d.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] @@ -2217,9 +2258,9 @@ fn F() { // CHECK:STDOUT: %addr.loc7_34.2: %ptr.749 = addr_of %.loc7_34.1 // CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr.loc7_34.1, %addr.loc7_34.2) // CHECK:STDOUT: %.loc7_34.2: init %f64.dc1 to %.loc7_34.1 = mark_in_place_init %foo__carbon_thunk.call -// CHECK:STDOUT: %f64: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %.loc7_34.3: ref %f64.dc1 = temporary %.loc7_34.1, %.loc7_34.2 // CHECK:STDOUT: %.loc7_34.4: %f64.dc1 = acquire_value %.loc7_34.3 +// CHECK:STDOUT: %f64: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %d: %f64.dc1 = value_binding d, %.loc7_34.4 // CHECK:STDOUT: %Destroy.Op.bound: = bound_method %.loc7_34.3, constants.%Destroy.Op.1a2547.2 // CHECK:STDOUT: %Destroy.Op.call.loc7_34: init %empty_tuple.type = call %Destroy.Op.bound(%.loc7_34.3) @@ -2254,6 +2295,10 @@ fn F() { // CHECK:STDOUT: %f64.dc1: type = class_type @Float, @Float(%int_64) [concrete] // CHECK:STDOUT: %ptr.749: type = ptr_type %f64.dc1 [concrete] // CHECK:STDOUT: %pattern_type.a3b: type = pattern_type %ptr.749 [concrete] +// CHECK:STDOUT: %a.param_patt.1c1: %pattern_type.a3b = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt.421: %pattern_type.a3b = at_binding_pattern a, %a.param_patt.1c1 [concrete] +// CHECK:STDOUT: %return.param_patt.0c1: %pattern_type.a3b = value_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.998: %pattern_type.a3b = at_binding_pattern r#return, %return.param_patt.0c1 [concrete] // CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] // CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %f64.794: type = float_type %int_64, f64 [concrete] @@ -2303,10 +2348,10 @@ fn F() { // CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] // CHECK:STDOUT: %Core.Float: %Float.type = import_ref Core//prelude/parts/float, Float, loaded [concrete = constants.%Float.generic] // CHECK:STDOUT: %foo__carbon_thunk.decl: %foo__carbon_thunk.type = fn_decl @foo__carbon_thunk [concrete = constants.%foo__carbon_thunk] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.a3b = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.a3b = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.a3b = value_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.a3b = at_binding_pattern r#return, %return.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.a3b = value_param_pattern [concrete = constants.%a.param_patt.1c1] +// CHECK:STDOUT: %a.patt: %pattern_type.a3b = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt.421] +// CHECK:STDOUT: %return.param_patt: %pattern_type.a3b = value_param_pattern [concrete = constants.%return.param_patt.0c1] +// CHECK:STDOUT: %return.patt: %pattern_type.a3b = at_binding_pattern r#return, %return.param_patt [concrete = constants.%return.patt.998] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %ptr.749 = value_param call_param0 // CHECK:STDOUT: %.1: type = splice_block constants.%ptr.749 [concrete = constants.%ptr.749] { @@ -2394,8 +2439,14 @@ fn F() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %.469: Core.Form = init_form %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.a96: type = pattern_type %empty_struct_type [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.a96 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type.a96 = return_slot_pattern %return.param_patt, %empty_struct_type [concrete] // CHECK:STDOUT: %MakeEmpty.type: type = fn_type @MakeEmpty [concrete] // CHECK:STDOUT: %MakeEmpty: %MakeEmpty.type = struct_value () [concrete] +// CHECK:STDOUT: %value.param_patt: %pattern_type.a96 = value_param_pattern [concrete] +// CHECK:STDOUT: %value.patt: %pattern_type.a96 = at_binding_pattern value, %value.param_patt [concrete] +// CHECK:STDOUT: %reference.param_patt: %pattern_type.a96 = ref_param_pattern [concrete] +// CHECK:STDOUT: %reference.patt: %pattern_type.a96 = at_binding_pattern reference, %reference.param_patt [concrete] // CHECK:STDOUT: %Empty.type: type = fn_type @Empty [concrete] // CHECK:STDOUT: %Empty: %Empty.type = struct_value () [concrete] // CHECK:STDOUT: %PassNoFields.cpp_overload_set.type: type = cpp_overload_set_type @PassNoFields.cpp_overload_set [concrete] @@ -2403,6 +2454,8 @@ fn F() { // CHECK:STDOUT: %NoFields: type = class_type @NoFields [concrete] // CHECK:STDOUT: %ptr.027: type = ptr_type %NoFields [concrete] // CHECK:STDOUT: %pattern_type.80e: type = pattern_type %ptr.027 [concrete] +// CHECK:STDOUT: %s.param_patt.5f3: %pattern_type.80e = value_param_pattern [concrete] +// CHECK:STDOUT: %s.patt.b99: %pattern_type.80e = at_binding_pattern s, %s.param_patt.5f3 [concrete] // CHECK:STDOUT: %PassNoFields__carbon_thunk.type: type = fn_type @PassNoFields__carbon_thunk [concrete] // CHECK:STDOUT: %PassNoFields__carbon_thunk: %PassNoFields__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] @@ -2425,8 +2478,8 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %PassNoFields.cpp_overload_set.value: %PassNoFields.cpp_overload_set.type = cpp_overload_set_value @PassNoFields.cpp_overload_set [concrete = constants.%PassNoFields.cpp_overload_set.value] // CHECK:STDOUT: %PassNoFields__carbon_thunk.decl: %PassNoFields__carbon_thunk.type = fn_decl @PassNoFields__carbon_thunk [concrete = constants.%PassNoFields__carbon_thunk] { -// CHECK:STDOUT: %s.param_patt: %pattern_type.80e = value_param_pattern [concrete] -// CHECK:STDOUT: %s.patt: %pattern_type.80e = at_binding_pattern s, %s.param_patt [concrete] +// CHECK:STDOUT: %s.param_patt: %pattern_type.80e = value_param_pattern [concrete = constants.%s.param_patt.5f3] +// CHECK:STDOUT: %s.patt: %pattern_type.80e = at_binding_pattern s, %s.param_patt [concrete = constants.%s.patt.b99] // CHECK:STDOUT: } { // CHECK:STDOUT: %s.param: %ptr.027 = value_param call_param0 // CHECK:STDOUT: %s: %ptr.027 = value_binding s, %s.param @@ -2446,8 +2499,8 @@ fn F() { // CHECK:STDOUT: import Cpp "struct_init.h" // CHECK:STDOUT: } // CHECK:STDOUT: %MakeEmpty.decl: %MakeEmpty.type = fn_decl @MakeEmpty [concrete = constants.%MakeEmpty] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.a96 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.a96 = return_slot_pattern %return.param_patt, %.loc6_20.2 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.a96 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.a96 = return_slot_pattern %return.param_patt, %.loc6_20.2 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6_20.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] // CHECK:STDOUT: %.loc6_20.2: type = converted %.loc6_20.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type] @@ -2456,10 +2509,10 @@ fn F() { // CHECK:STDOUT: %return: ref %empty_struct_type = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Empty.decl: %Empty.type = fn_decl @Empty [concrete = constants.%Empty] { -// CHECK:STDOUT: %value.param_patt: %pattern_type.a96 = value_param_pattern [concrete] -// CHECK:STDOUT: %value.patt: %pattern_type.a96 = at_binding_pattern value, %value.param_patt [concrete] -// CHECK:STDOUT: %reference.param_patt: %pattern_type.a96 = ref_param_pattern [concrete] -// CHECK:STDOUT: %reference.patt: %pattern_type.a96 = at_binding_pattern reference, %reference.param_patt [concrete] +// CHECK:STDOUT: %value.param_patt: %pattern_type.a96 = value_param_pattern [concrete = constants.%value.param_patt] +// CHECK:STDOUT: %value.patt: %pattern_type.a96 = at_binding_pattern value, %value.param_patt [concrete = constants.%value.patt] +// CHECK:STDOUT: %reference.param_patt: %pattern_type.a96 = ref_param_pattern [concrete = constants.%reference.param_patt] +// CHECK:STDOUT: %reference.patt: %pattern_type.a96 = at_binding_pattern reference, %reference.param_patt [concrete = constants.%reference.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %value.param: %empty_struct_type = value_param call_param0 // CHECK:STDOUT: %.loc8_18.1: type = splice_block %.loc8_18.3 [concrete = constants.%empty_struct_type] { @@ -2560,8 +2613,14 @@ fn F() { // CHECK:STDOUT: %struct_type.a.b.c.fde: type = struct_type {.a: %i32, .b: %i32, .c: %i32} [concrete] // CHECK:STDOUT: %.5b5: Core.Form = init_form %struct_type.a.b.c.fde [concrete] // CHECK:STDOUT: %pattern_type.9c3: type = pattern_type %struct_type.a.b.c.fde [concrete] +// CHECK:STDOUT: %return.param_patt.e20: %pattern_type.9c3 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.94b: %pattern_type.9c3 = return_slot_pattern %return.param_patt.e20, %struct_type.a.b.c.fde [concrete] // CHECK:STDOUT: %MakeThreeFields.type: type = fn_type @MakeThreeFields [concrete] // CHECK:STDOUT: %MakeThreeFields: %MakeThreeFields.type = struct_value () [concrete] +// CHECK:STDOUT: %value.param_patt: %pattern_type.9c3 = value_param_pattern [concrete] +// CHECK:STDOUT: %value.patt: %pattern_type.9c3 = at_binding_pattern value, %value.param_patt [concrete] +// CHECK:STDOUT: %reference.param_patt: %pattern_type.9c3 = ref_param_pattern [concrete] +// CHECK:STDOUT: %reference.patt: %pattern_type.9c3 = at_binding_pattern reference, %reference.param_patt [concrete] // CHECK:STDOUT: %ThreeFields.type: type = fn_type @ThreeFields.loc8 [concrete] // CHECK:STDOUT: %ThreeFields.16d: %ThreeFields.type = struct_value () [concrete] // CHECK:STDOUT: %PassThreeFields.cpp_overload_set.type: type = cpp_overload_set_type @PassThreeFields.cpp_overload_set [concrete] @@ -2574,6 +2633,8 @@ fn F() { // CHECK:STDOUT: %ThreeFields.1b4: type = class_type @ThreeFields.1 [concrete] // CHECK:STDOUT: %ptr.6c3: type = ptr_type %ThreeFields.1b4 [concrete] // CHECK:STDOUT: %pattern_type.ecf: type = pattern_type %ptr.6c3 [concrete] +// CHECK:STDOUT: %t.param_patt.f34: %pattern_type.ecf = value_param_pattern [concrete] +// CHECK:STDOUT: %t.patt.81a: %pattern_type.ecf = at_binding_pattern t, %t.param_patt.f34 [concrete] // CHECK:STDOUT: %PassThreeFields__carbon_thunk.type: type = fn_type @PassThreeFields__carbon_thunk [concrete] // CHECK:STDOUT: %PassThreeFields__carbon_thunk: %PassThreeFields__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %ThreeFields.elem: type = unbound_element_type %ThreeFields.1b4, %i32 [concrete] @@ -2599,8 +2660,8 @@ fn F() { // CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: %PassThreeFields.cpp_overload_set.value: %PassThreeFields.cpp_overload_set.type = cpp_overload_set_value @PassThreeFields.cpp_overload_set [concrete = constants.%PassThreeFields.cpp_overload_set.value] // CHECK:STDOUT: %PassThreeFields__carbon_thunk.decl: %PassThreeFields__carbon_thunk.type = fn_decl @PassThreeFields__carbon_thunk [concrete = constants.%PassThreeFields__carbon_thunk] { -// CHECK:STDOUT: %t.param_patt: %pattern_type.ecf = value_param_pattern [concrete] -// CHECK:STDOUT: %t.patt: %pattern_type.ecf = at_binding_pattern t, %t.param_patt [concrete] +// CHECK:STDOUT: %t.param_patt: %pattern_type.ecf = value_param_pattern [concrete = constants.%t.param_patt.f34] +// CHECK:STDOUT: %t.patt: %pattern_type.ecf = at_binding_pattern t, %t.param_patt [concrete = constants.%t.patt.81a] // CHECK:STDOUT: } { // CHECK:STDOUT: %t.param: %ptr.6c3 = value_param call_param0 // CHECK:STDOUT: %t: %ptr.6c3 = value_binding t, %t.param @@ -2620,8 +2681,8 @@ fn F() { // CHECK:STDOUT: import Cpp "struct_init.h" // CHECK:STDOUT: } // CHECK:STDOUT: %MakeThreeFields.decl: %MakeThreeFields.type = fn_decl @MakeThreeFields [concrete = constants.%MakeThreeFields] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.9c3 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.9c3 = return_slot_pattern %return.param_patt, %struct_type.a.b.c [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.9c3 = out_param_pattern [concrete = constants.%return.param_patt.e20] +// CHECK:STDOUT: %return.patt: %pattern_type.9c3 = return_slot_pattern %return.param_patt, %struct_type.a.b.c [concrete = constants.%return.patt.94b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc6_30: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %i32.loc6_39: type = type_literal constants.%i32 [concrete = constants.%i32] @@ -2632,10 +2693,10 @@ fn F() { // CHECK:STDOUT: %return: ref %struct_type.a.b.c.fde = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %ThreeFields.decl: %ThreeFields.type = fn_decl @ThreeFields.loc8 [concrete = constants.%ThreeFields.16d] { -// CHECK:STDOUT: %value.param_patt: %pattern_type.9c3 = value_param_pattern [concrete] -// CHECK:STDOUT: %value.patt: %pattern_type.9c3 = at_binding_pattern value, %value.param_patt [concrete] -// CHECK:STDOUT: %reference.param_patt: %pattern_type.9c3 = ref_param_pattern [concrete] -// CHECK:STDOUT: %reference.patt: %pattern_type.9c3 = at_binding_pattern reference, %reference.param_patt [concrete] +// CHECK:STDOUT: %value.param_patt: %pattern_type.9c3 = value_param_pattern [concrete = constants.%value.param_patt] +// CHECK:STDOUT: %value.patt: %pattern_type.9c3 = at_binding_pattern value, %value.param_patt [concrete = constants.%value.patt] +// CHECK:STDOUT: %reference.param_patt: %pattern_type.9c3 = ref_param_pattern [concrete = constants.%reference.param_patt] +// CHECK:STDOUT: %reference.patt: %pattern_type.9c3 = at_binding_pattern reference, %reference.param_patt [concrete = constants.%reference.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %value.param: %struct_type.a.b.c.fde = value_param call_param0 // CHECK:STDOUT: %.loc8_49: type = splice_block %struct_type.a.b.c.loc8_49 [concrete = constants.%struct_type.a.b.c.fde] { @@ -2839,8 +2900,14 @@ fn F() { // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %.262: Core.Form = init_form %empty_tuple.type [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %return.param_patt.900: %pattern_type.cb1 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.427: %pattern_type.cb1 = return_slot_pattern %return.param_patt.900, %empty_tuple.type [concrete] // CHECK:STDOUT: %MakeEmpty.type: type = fn_type @MakeEmpty [concrete] // CHECK:STDOUT: %MakeEmpty: %MakeEmpty.type = struct_value () [concrete] +// CHECK:STDOUT: %value.param_patt.df1: %pattern_type.cb1 = value_param_pattern [concrete] +// CHECK:STDOUT: %value.patt.0a7: %pattern_type.cb1 = at_binding_pattern value, %value.param_patt.df1 [concrete] +// CHECK:STDOUT: %reference.param_patt.0e3: %pattern_type.cb1 = ref_param_pattern [concrete] +// CHECK:STDOUT: %reference.patt.231: %pattern_type.cb1 = at_binding_pattern reference, %reference.param_patt.0e3 [concrete] // CHECK:STDOUT: %Empty.type: type = fn_type @Empty [concrete] // CHECK:STDOUT: %Empty: %Empty.type = struct_value () [concrete] // CHECK:STDOUT: %PassNoFields.cpp_overload_set.type: type = cpp_overload_set_type @PassNoFields.cpp_overload_set [concrete] @@ -2848,6 +2915,8 @@ fn F() { // CHECK:STDOUT: %NoFields: type = class_type @NoFields [concrete] // CHECK:STDOUT: %ptr.027: type = ptr_type %NoFields [concrete] // CHECK:STDOUT: %pattern_type.80e: type = pattern_type %ptr.027 [concrete] +// CHECK:STDOUT: %s.param_patt.5f3: %pattern_type.80e = value_param_pattern [concrete] +// CHECK:STDOUT: %s.patt.b99: %pattern_type.80e = at_binding_pattern s, %s.param_patt.5f3 [concrete] // CHECK:STDOUT: %PassNoFields__carbon_thunk.type: type = fn_type @PassNoFields__carbon_thunk [concrete] // CHECK:STDOUT: %PassNoFields__carbon_thunk: %PassNoFields__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] @@ -2863,8 +2932,14 @@ fn F() { // CHECK:STDOUT: %tuple.type.555: type = tuple_type (%i32, %i32, %i32) [concrete] // CHECK:STDOUT: %.718: Core.Form = init_form %tuple.type.555 [concrete] // CHECK:STDOUT: %pattern_type.777: type = pattern_type %tuple.type.555 [concrete] +// CHECK:STDOUT: %return.param_patt.789: %pattern_type.777 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e16: %pattern_type.777 = return_slot_pattern %return.param_patt.789, %tuple.type.555 [concrete] // CHECK:STDOUT: %MakeThreeFields.type: type = fn_type @MakeThreeFields [concrete] // CHECK:STDOUT: %MakeThreeFields: %MakeThreeFields.type = struct_value () [concrete] +// CHECK:STDOUT: %value.param_patt.9bf: %pattern_type.777 = value_param_pattern [concrete] +// CHECK:STDOUT: %value.patt.0a5: %pattern_type.777 = at_binding_pattern value, %value.param_patt.9bf [concrete] +// CHECK:STDOUT: %reference.param_patt.795: %pattern_type.777 = ref_param_pattern [concrete] +// CHECK:STDOUT: %reference.patt.f1c: %pattern_type.777 = at_binding_pattern reference, %reference.param_patt.795 [concrete] // CHECK:STDOUT: %ThreeFields.type: type = fn_type @ThreeFields.loc67 [concrete] // CHECK:STDOUT: %ThreeFields.16d: %ThreeFields.type = struct_value () [concrete] // CHECK:STDOUT: %PassThreeFields.cpp_overload_set.type: type = cpp_overload_set_type @PassThreeFields.cpp_overload_set [concrete] @@ -2877,6 +2952,8 @@ fn F() { // CHECK:STDOUT: %ThreeFields.1b4: type = class_type @ThreeFields.1 [concrete] // CHECK:STDOUT: %ptr.6c3: type = ptr_type %ThreeFields.1b4 [concrete] // CHECK:STDOUT: %pattern_type.ecf: type = pattern_type %ptr.6c3 [concrete] +// CHECK:STDOUT: %t.param_patt.f34: %pattern_type.ecf = value_param_pattern [concrete] +// CHECK:STDOUT: %t.patt.81a: %pattern_type.ecf = at_binding_pattern t, %t.param_patt.f34 [concrete] // CHECK:STDOUT: %PassThreeFields__carbon_thunk.type: type = fn_type @PassThreeFields__carbon_thunk [concrete] // CHECK:STDOUT: %PassThreeFields__carbon_thunk: %PassThreeFields__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %ThreeFields.elem: type = unbound_element_type %ThreeFields.1b4, %i32 [concrete] @@ -2898,8 +2975,8 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %PassNoFields.cpp_overload_set.value: %PassNoFields.cpp_overload_set.type = cpp_overload_set_value @PassNoFields.cpp_overload_set [concrete = constants.%PassNoFields.cpp_overload_set.value] // CHECK:STDOUT: %PassNoFields__carbon_thunk.decl: %PassNoFields__carbon_thunk.type = fn_decl @PassNoFields__carbon_thunk [concrete = constants.%PassNoFields__carbon_thunk] { -// CHECK:STDOUT: %s.param_patt: %pattern_type.80e = value_param_pattern [concrete] -// CHECK:STDOUT: %s.patt: %pattern_type.80e = at_binding_pattern s, %s.param_patt [concrete] +// CHECK:STDOUT: %s.param_patt: %pattern_type.80e = value_param_pattern [concrete = constants.%s.param_patt.5f3] +// CHECK:STDOUT: %s.patt: %pattern_type.80e = at_binding_pattern s, %s.param_patt [concrete = constants.%s.patt.b99] // CHECK:STDOUT: } { // CHECK:STDOUT: %s.param: %ptr.027 = value_param call_param0 // CHECK:STDOUT: %s: %ptr.027 = value_binding s, %s.param @@ -2908,8 +2985,8 @@ fn F() { // CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: %PassThreeFields.cpp_overload_set.value: %PassThreeFields.cpp_overload_set.type = cpp_overload_set_value @PassThreeFields.cpp_overload_set [concrete = constants.%PassThreeFields.cpp_overload_set.value] // CHECK:STDOUT: %PassThreeFields__carbon_thunk.decl: %PassThreeFields__carbon_thunk.type = fn_decl @PassThreeFields__carbon_thunk [concrete = constants.%PassThreeFields__carbon_thunk] { -// CHECK:STDOUT: %t.param_patt: %pattern_type.ecf = value_param_pattern [concrete] -// CHECK:STDOUT: %t.patt: %pattern_type.ecf = at_binding_pattern t, %t.param_patt [concrete] +// CHECK:STDOUT: %t.param_patt: %pattern_type.ecf = value_param_pattern [concrete = constants.%t.param_patt.f34] +// CHECK:STDOUT: %t.patt: %pattern_type.ecf = at_binding_pattern t, %t.param_patt [concrete = constants.%t.patt.81a] // CHECK:STDOUT: } { // CHECK:STDOUT: %t.param: %ptr.6c3 = value_param call_param0 // CHECK:STDOUT: %t: %ptr.6c3 = value_binding t, %t.param @@ -2930,8 +3007,8 @@ fn F() { // CHECK:STDOUT: import Cpp "struct_init.h" // CHECK:STDOUT: } // CHECK:STDOUT: %MakeEmpty.decl: %MakeEmpty.type = fn_decl @MakeEmpty [concrete = constants.%MakeEmpty] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern %return.param_patt, %.loc9_20.2 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern [concrete = constants.%return.param_patt.900] +// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern %return.param_patt, %.loc9_20.2 [concrete = constants.%return.patt.427] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc9_20.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc9_20.2: type = converted %.loc9_20.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -2940,10 +3017,10 @@ fn F() { // CHECK:STDOUT: %return: ref %empty_tuple.type = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Empty.decl: %Empty.type = fn_decl @Empty [concrete = constants.%Empty] { -// CHECK:STDOUT: %value.param_patt: %pattern_type.cb1 = value_param_pattern [concrete] -// CHECK:STDOUT: %value.patt: %pattern_type.cb1 = at_binding_pattern value, %value.param_patt [concrete] -// CHECK:STDOUT: %reference.param_patt: %pattern_type.cb1 = ref_param_pattern [concrete] -// CHECK:STDOUT: %reference.patt: %pattern_type.cb1 = at_binding_pattern reference, %reference.param_patt [concrete] +// CHECK:STDOUT: %value.param_patt: %pattern_type.cb1 = value_param_pattern [concrete = constants.%value.param_patt.df1] +// CHECK:STDOUT: %value.patt: %pattern_type.cb1 = at_binding_pattern value, %value.param_patt [concrete = constants.%value.patt.0a7] +// CHECK:STDOUT: %reference.param_patt: %pattern_type.cb1 = ref_param_pattern [concrete = constants.%reference.param_patt.0e3] +// CHECK:STDOUT: %reference.patt: %pattern_type.cb1 = at_binding_pattern reference, %reference.param_patt [concrete = constants.%reference.patt.231] // CHECK:STDOUT: } { // CHECK:STDOUT: %value.param: %empty_tuple.type = value_param call_param0 // CHECK:STDOUT: %.loc11_18.1: type = splice_block %.loc11_18.3 [concrete = constants.%empty_tuple.type] { @@ -2959,8 +3036,8 @@ fn F() { // CHECK:STDOUT: %reference: ref %empty_tuple.type = ref_binding reference, %reference.param // CHECK:STDOUT: } // CHECK:STDOUT: %MakeThreeFields.decl: %MakeThreeFields.type = fn_decl @MakeThreeFields [concrete = constants.%MakeThreeFields] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.777 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.777 = return_slot_pattern %return.param_patt, %.loc65_39.2 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.777 = out_param_pattern [concrete = constants.%return.param_patt.789] +// CHECK:STDOUT: %return.patt: %pattern_type.777 = return_slot_pattern %return.param_patt, %.loc65_39.2 [concrete = constants.%return.patt.e16] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc65_26: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %i32.loc65_31: type = type_literal constants.%i32 [concrete = constants.%i32] @@ -2972,10 +3049,10 @@ fn F() { // CHECK:STDOUT: %return: ref %tuple.type.555 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %ThreeFields.decl: %ThreeFields.type = fn_decl @ThreeFields.loc67 [concrete = constants.%ThreeFields.16d] { -// CHECK:STDOUT: %value.param_patt: %pattern_type.777 = value_param_pattern [concrete] -// CHECK:STDOUT: %value.patt: %pattern_type.777 = at_binding_pattern value, %value.param_patt [concrete] -// CHECK:STDOUT: %reference.param_patt: %pattern_type.777 = ref_param_pattern [concrete] -// CHECK:STDOUT: %reference.patt: %pattern_type.777 = at_binding_pattern reference, %reference.param_patt [concrete] +// CHECK:STDOUT: %value.param_patt: %pattern_type.777 = value_param_pattern [concrete = constants.%value.param_patt.9bf] +// CHECK:STDOUT: %value.patt: %pattern_type.777 = at_binding_pattern value, %value.param_patt [concrete = constants.%value.patt.0a5] +// CHECK:STDOUT: %reference.param_patt: %pattern_type.777 = ref_param_pattern [concrete = constants.%reference.param_patt.795] +// CHECK:STDOUT: %reference.patt: %pattern_type.777 = at_binding_pattern reference, %reference.param_patt [concrete = constants.%reference.patt.f1c] // CHECK:STDOUT: } { // CHECK:STDOUT: %value.param: %tuple.type.555 = value_param call_param0 // CHECK:STDOUT: %.loc67_37.1: type = splice_block %.loc67_37.3 [concrete = constants.%tuple.type.555] { @@ -3119,6 +3196,8 @@ fn F() { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete] // CHECK:STDOUT: %PassInt.type: type = fn_type @PassInt [concrete] // CHECK:STDOUT: %PassInt: %PassInt.type = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] @@ -3140,8 +3219,8 @@ fn F() { // CHECK:STDOUT: %PassInt.cpp_overload_set.value: %PassInt.cpp_overload_set.type = cpp_overload_set_value @PassInt.cpp_overload_set [concrete = constants.%PassInt.cpp_overload_set.value] // CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: %PassInt.decl: %PassInt.type = fn_decl @PassInt [concrete = constants.%PassInt] { -// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%n.param_patt] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete = constants.%n.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %n.param: %i32 = value_param call_param0 // CHECK:STDOUT: %.1: type = splice_block %i32.2 [concrete = constants.%i32] { @@ -3199,6 +3278,8 @@ fn F() { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete] // CHECK:STDOUT: %PassOverloaded.type: type = fn_type @PassOverloaded [concrete] // CHECK:STDOUT: %PassOverloaded: %PassOverloaded.type = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] @@ -3220,8 +3301,8 @@ fn F() { // CHECK:STDOUT: %PassOverloaded.cpp_overload_set.value: %PassOverloaded.cpp_overload_set.type = cpp_overload_set_value @PassOverloaded.cpp_overload_set [concrete = constants.%PassOverloaded.cpp_overload_set.value] // CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: %PassOverloaded.decl: %PassOverloaded.type = fn_decl @PassOverloaded [concrete = constants.%PassOverloaded] { -// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%n.param_patt] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete = constants.%n.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %n.param: %i32 = value_param call_param0 // CHECK:STDOUT: %.1: type = splice_block %i32.2 [concrete = constants.%i32] { @@ -3335,6 +3416,8 @@ fn F() { // CHECK:STDOUT: %B: type = class_type @B [concrete] // CHECK:STDOUT: %ptr.dc0: type = ptr_type %B [concrete] // CHECK:STDOUT: %pattern_type.733: type = pattern_type %ptr.dc0 [concrete] +// CHECK:STDOUT: %_.param_patt.710: %pattern_type.733 = value_param_pattern [concrete] +// CHECK:STDOUT: %_.patt.025: %pattern_type.733 = at_binding_pattern _, %_.param_patt.710 [concrete] // CHECK:STDOUT: %TakeB__carbon_thunk.type: type = fn_type @TakeB__carbon_thunk [concrete] // CHECK:STDOUT: %TakeB__carbon_thunk: %TakeB__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %A: type = class_type @A [concrete] @@ -3366,8 +3449,8 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %TakeB.cpp_overload_set.value: %TakeB.cpp_overload_set.type = cpp_overload_set_value @TakeB.cpp_overload_set [concrete = constants.%TakeB.cpp_overload_set.value] // CHECK:STDOUT: %TakeB__carbon_thunk.decl: %TakeB__carbon_thunk.type = fn_decl @TakeB__carbon_thunk [concrete = constants.%TakeB__carbon_thunk] { -// CHECK:STDOUT: %_.param_patt: %pattern_type.733 = value_param_pattern [concrete] -// CHECK:STDOUT: %_.patt: %pattern_type.733 = at_binding_pattern _, %_.param_patt [concrete] +// CHECK:STDOUT: %_.param_patt: %pattern_type.733 = value_param_pattern [concrete = constants.%_.param_patt.710] +// CHECK:STDOUT: %_.patt: %pattern_type.733 = at_binding_pattern _, %_.param_patt [concrete = constants.%_.patt.025] // CHECK:STDOUT: } { // CHECK:STDOUT: %_.param: %ptr.dc0 = value_param call_param0 // CHECK:STDOUT: %_: %ptr.dc0 = value_binding _, %_.param @@ -3471,6 +3554,8 @@ fn F() { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] // CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] @@ -3495,8 +3580,8 @@ fn F() { // CHECK:STDOUT: %Core.import_ref.64b: @Core.IntLiteral.as.As.impl.%Core.IntLiteral.as.As.impl.Convert.type (%Core.IntLiteral.as.As.impl.Convert.type.c5d) = import_ref Core//prelude/parts/int, loc{{\d+_\d+}}, loaded [symbolic = @Core.IntLiteral.as.As.impl.%Core.IntLiteral.as.As.impl.Convert (constants.%Core.IntLiteral.as.As.impl.Convert.6ee)] // CHECK:STDOUT: %As.impl_witness_table.1c5 = impl_witness_table (%Core.import_ref.64b), @Core.IntLiteral.as.As.impl [concrete] // CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %i32 = value_param call_param0 // CHECK:STDOUT: %.1: type = splice_block %i32.2 [concrete = constants.%i32] { @@ -3575,6 +3660,8 @@ fn F() { // CHECK:STDOUT: %i16: type = class_type @Int, @Int(%int_16) [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %i16 [concrete] // CHECK:STDOUT: %pattern_type.f71: type = pattern_type %ptr [concrete] +// CHECK:STDOUT: %a.param_patt.58a: %pattern_type.f71 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt.da1: %pattern_type.f71 = at_binding_pattern a, %a.param_patt.58a [concrete] // CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] // CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] @@ -3599,8 +3686,8 @@ fn F() { // CHECK:STDOUT: %Core.import_ref.64b: @Core.IntLiteral.as.As.impl.%Core.IntLiteral.as.As.impl.Convert.type (%Core.IntLiteral.as.As.impl.Convert.type.c5d) = import_ref Core//prelude/parts/int, loc{{\d+_\d+}}, loaded [symbolic = @Core.IntLiteral.as.As.impl.%Core.IntLiteral.as.As.impl.Convert (constants.%Core.IntLiteral.as.As.impl.Convert.6ee)] // CHECK:STDOUT: %As.impl_witness_table.1c5 = impl_witness_table (%Core.import_ref.64b), @Core.IntLiteral.as.As.impl [concrete] // CHECK:STDOUT: %foo__carbon_thunk.decl: %foo__carbon_thunk.type = fn_decl @foo__carbon_thunk [concrete = constants.%foo__carbon_thunk] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.f71 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.f71 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.f71 = value_param_pattern [concrete = constants.%a.param_patt.58a] +// CHECK:STDOUT: %a.patt: %pattern_type.f71 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt.da1] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %ptr = value_param call_param0 // CHECK:STDOUT: %.1: type = splice_block constants.%ptr [concrete = constants.%ptr] { @@ -3888,9 +3975,11 @@ fn F() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.6cb: type = pattern_type %I.type [concrete] +// CHECK:STDOUT: %ValueT.patt: %pattern_type.6cb = symbolic_binding_pattern ValueT, 0 [symbolic] // CHECK:STDOUT: %ValueT: %I.type = symbolic_binding ValueT, 0 [symbolic] // CHECK:STDOUT: %ValueT.as_type: type = facet_access_type %ValueT [symbolic] // CHECK:STDOUT: %pattern_type.b3a: type = pattern_type %ValueT.as_type [symbolic] +// CHECK:STDOUT: %value.patt: %pattern_type.b3a = symbolic_binding_pattern value, 1 [symbolic] // CHECK:STDOUT: %value: %ValueT.as_type = symbolic_binding value, 1 [symbolic] // CHECK:STDOUT: %EchoValue.type: type = fn_type @EchoValue [concrete] // CHECK:STDOUT: %EchoValue: %EchoValue.type = struct_value () [concrete] @@ -3926,8 +4015,8 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %I.decl: type = interface_decl @I [concrete = constants.%I.type] {} {} // CHECK:STDOUT: %EchoValue.decl: %EchoValue.type = fn_decl @EchoValue [concrete = constants.%EchoValue] { -// CHECK:STDOUT: %ValueT.patt: %pattern_type.6cb = symbolic_binding_pattern ValueT, 0 [concrete] -// CHECK:STDOUT: %value.patt: @EchoValue.%pattern_type (%pattern_type.b3a) = symbolic_binding_pattern value, 1 [concrete] +// CHECK:STDOUT: %ValueT.patt.loc10_20.1: %pattern_type.6cb = symbolic_binding_pattern ValueT, 0 [symbolic = %ValueT.patt.loc10_20.2 (constants.%ValueT.patt)] +// CHECK:STDOUT: %value.patt.loc10_38.1: @EchoValue.%pattern_type (%pattern_type.b3a) = symbolic_binding_pattern value, 1 [symbolic = %value.patt.loc10_38.2 (constants.%value.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc10_23: type = splice_block %I.ref [concrete = constants.%I.type] { // CHECK:STDOUT: %.Self.loc10_20: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -3957,10 +4046,12 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @EchoValue(%ValueT.loc10_20.2: %I.type, %value.loc10_38.2: @EchoValue.%ValueT.as_type.loc10_41.1 (%ValueT.as_type)) { +// CHECK:STDOUT: %ValueT.patt.loc10_20.2: %pattern_type.6cb = symbolic_binding_pattern ValueT, 0 [symbolic = %ValueT.patt.loc10_20.2 (constants.%ValueT.patt)] // CHECK:STDOUT: %ValueT.loc10_20.1: %I.type = symbolic_binding ValueT, 0 [symbolic = %ValueT.loc10_20.1 (constants.%ValueT)] // CHECK:STDOUT: %ValueT.as_type.loc10_41.1: type = facet_access_type %ValueT.loc10_20.1 [symbolic = %ValueT.as_type.loc10_41.1 (constants.%ValueT.as_type)] -// CHECK:STDOUT: %value.loc10_38.1: @EchoValue.%ValueT.as_type.loc10_41.1 (%ValueT.as_type) = symbolic_binding value, 1 [symbolic = %value.loc10_38.1 (constants.%value)] // CHECK:STDOUT: %pattern_type: type = pattern_type %ValueT.as_type.loc10_41.1 [symbolic = %pattern_type (constants.%pattern_type.b3a)] +// CHECK:STDOUT: %value.patt.loc10_38.2: @EchoValue.%pattern_type (%pattern_type.b3a) = symbolic_binding_pattern value, 1 [symbolic = %value.patt.loc10_38.2 (constants.%value.patt)] +// CHECK:STDOUT: %value.loc10_38.1: @EchoValue.%ValueT.as_type.loc10_41.1 (%ValueT.as_type) = symbolic_binding value, 1 [symbolic = %value.loc10_38.1 (constants.%value)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -3983,9 +4074,11 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @EchoValue(constants.%ValueT, constants.%value) { +// CHECK:STDOUT: %ValueT.patt.loc10_20.2 => constants.%ValueT.patt // CHECK:STDOUT: %ValueT.loc10_20.1 => constants.%ValueT // CHECK:STDOUT: %ValueT.as_type.loc10_41.1 => constants.%ValueT.as_type -// CHECK:STDOUT: %value.loc10_38.1 => constants.%value // CHECK:STDOUT: %pattern_type => constants.%pattern_type.b3a +// CHECK:STDOUT: %value.patt.loc10_38.2 => constants.%value.patt +// CHECK:STDOUT: %value.loc10_38.1 => constants.%value // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/function/import/pointer.carbon b/toolchain/check/testdata/interop/cpp/function/import/pointer.carbon index f85bb8bbf8ee..6cf497300a94 100644 --- a/toolchain/check/testdata/interop/cpp/function/import/pointer.carbon +++ b/toolchain/check/testdata/interop/cpp/function/import/pointer.carbon @@ -434,6 +434,8 @@ fn F() { // CHECK:STDOUT: %S: type = class_type @S [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %pattern_type.0f5: type = pattern_type %S [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete] +// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %S.val: %S = struct_value () [concrete] // CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] @@ -463,8 +465,8 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete] -// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete = constants.%s.patt] +// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete = constants.%s.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %s.var: ref %S = var %s.var_patt // CHECK:STDOUT: %.loc8_19.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] @@ -496,6 +498,8 @@ fn F() { // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.282 = ref_binding_pattern p [concrete] +// CHECK:STDOUT: %p.var_patt: %pattern_type.282 = var_pattern %p.patt [concrete] // CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] // CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] // CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] @@ -522,8 +526,8 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: %pattern_type.282 = ref_binding_pattern p [concrete] -// CHECK:STDOUT: %p.var_patt: %pattern_type.282 = var_pattern %p.patt [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.282 = ref_binding_pattern p [concrete = constants.%p.patt] +// CHECK:STDOUT: %p.var_patt: %pattern_type.282 = var_pattern %p.patt [concrete = constants.%p.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %p.var: ref %const = var %p.var_patt // CHECK:STDOUT: %G.ref: %G.type = name_ref G, file.%G.decl [concrete = constants.%G] @@ -562,10 +566,14 @@ fn F() { // CHECK:STDOUT: %S: type = class_type @S [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %pattern_type.0f5: type = pattern_type %S [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete] +// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %S.val: %S = struct_value () [concrete] // CHECK:STDOUT: %ptr.037: type = ptr_type %S [concrete] // CHECK:STDOUT: %pattern_type.de6: type = pattern_type %ptr.037 [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.de6 = ref_binding_pattern p [concrete] +// CHECK:STDOUT: %p.var_patt: %pattern_type.de6 = var_pattern %p.patt [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.type.ff5: type = fn_type @ptr.as.Copy.impl.Op, @ptr.as.Copy.impl(%T.67d) [symbolic] @@ -608,8 +616,8 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete] -// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete = constants.%s.patt] +// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete = constants.%s.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %s.var: ref %S = var %s.var_patt // CHECK:STDOUT: %.loc8_19.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] @@ -622,8 +630,8 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %s: ref %S = ref_binding s, %s.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: %pattern_type.de6 = ref_binding_pattern p [concrete] -// CHECK:STDOUT: %p.var_patt: %pattern_type.de6 = var_pattern %p.patt [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.de6 = ref_binding_pattern p [concrete = constants.%p.patt] +// CHECK:STDOUT: %p.var_patt: %pattern_type.de6 = var_pattern %p.patt [concrete = constants.%p.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %p.var: ref %ptr.037 = var %p.var_patt // CHECK:STDOUT: %s.ref: ref %S = name_ref s, %s @@ -663,6 +671,8 @@ fn F() { // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.914 = ref_binding_pattern s [concrete] +// CHECK:STDOUT: %s.var_patt: %pattern_type.914 = var_pattern %s.patt [concrete] // CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] // CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] // CHECK:STDOUT: %ptr.711: type = ptr_type %const [concrete] @@ -690,8 +700,8 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %s.patt: %pattern_type.914 = ref_binding_pattern s [concrete] -// CHECK:STDOUT: %s.var_patt: %pattern_type.914 = var_pattern %s.patt [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.914 = ref_binding_pattern s [concrete = constants.%s.patt] +// CHECK:STDOUT: %s.var_patt: %pattern_type.914 = var_pattern %s.patt [concrete = constants.%s.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %s.var: ref %const = var %s.var_patt // CHECK:STDOUT: %G.ref: %G.type = name_ref G, file.%G.decl [concrete = constants.%G] @@ -727,6 +737,8 @@ fn F() { // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete] +// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete] // CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] // CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] // CHECK:STDOUT: %ptr.037: type = ptr_type %S [concrete] @@ -756,8 +768,8 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete] -// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete = constants.%s.patt] +// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete = constants.%s.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %s.var: ref %S = var %s.var_patt // CHECK:STDOUT: %G.ref: %G.type = name_ref G, file.%G.decl [concrete = constants.%G] @@ -791,6 +803,8 @@ fn F() { // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.282 = ref_binding_pattern p [concrete] +// CHECK:STDOUT: %p.var_patt: %pattern_type.282 = var_pattern %p.patt [concrete] // CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] // CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] // CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] @@ -817,8 +831,8 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: %pattern_type.282 = ref_binding_pattern p [concrete] -// CHECK:STDOUT: %p.var_patt: %pattern_type.282 = var_pattern %p.patt [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.282 = ref_binding_pattern p [concrete = constants.%p.patt] +// CHECK:STDOUT: %p.var_patt: %pattern_type.282 = var_pattern %p.patt [concrete = constants.%p.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %p.var: ref %const = var %p.var_patt // CHECK:STDOUT: %G.ref: %G.type = name_ref G, file.%G.decl [concrete = constants.%G] @@ -859,6 +873,8 @@ fn F() { // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.de6 = ref_binding_pattern p [concrete] +// CHECK:STDOUT: %p.var_patt: %pattern_type.de6 = var_pattern %p.patt [concrete] // CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] // CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] // CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] @@ -885,8 +901,8 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: %pattern_type.de6 = ref_binding_pattern p [concrete] -// CHECK:STDOUT: %p.var_patt: %pattern_type.de6 = var_pattern %p.patt [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.de6 = ref_binding_pattern p [concrete = constants.%p.patt] +// CHECK:STDOUT: %p.var_patt: %pattern_type.de6 = var_pattern %p.patt [concrete = constants.%p.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %p.var: ref %ptr = var %p.var_patt // CHECK:STDOUT: %G.ref: %G.type = name_ref G, file.%G.decl [concrete = constants.%G] @@ -920,6 +936,8 @@ fn F() { // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.282 = ref_binding_pattern p [concrete] +// CHECK:STDOUT: %p.var_patt: %pattern_type.282 = var_pattern %p.patt [concrete] // CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] // CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] // CHECK:STDOUT: %OptionalStorage.type: type = facet_type <@OptionalStorage> [concrete] @@ -1002,15 +1020,15 @@ fn F() { // CHECK:STDOUT: %ImplicitAs.impl_witness_table.b0d = impl_witness_table (%Core.import_ref.a74), @const.as.ImplicitAs.impl [concrete] // CHECK:STDOUT: %Core.import_ref.eb9: @U.as_type.as.ImplicitAs.impl.167.%U.as_type.as.ImplicitAs.impl.Convert.type (%U.as_type.as.ImplicitAs.impl.Convert.type.ad5) = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, loaded [symbolic = @U.as_type.as.ImplicitAs.impl.167.%U.as_type.as.ImplicitAs.impl.Convert (constants.%U.as_type.as.ImplicitAs.impl.Convert.331)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.cf7 = impl_witness_table (%Core.import_ref.eb9), @U.as_type.as.ImplicitAs.impl.167 [concrete] -// CHECK:STDOUT: %Core.import_ref.017: @T.as_type.as.OptionalAs.impl.%T.as_type.as.OptionalAs.impl.Convert.type (%T.as_type.as.OptionalAs.impl.Convert.type.774) = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.OptionalAs.impl.%T.as_type.as.OptionalAs.impl.Convert (constants.%T.as_type.as.OptionalAs.impl.Convert.5f9)] -// CHECK:STDOUT: %OptionalAs.impl_witness_table.efa = impl_witness_table (%Core.import_ref.017), @T.as_type.as.OptionalAs.impl [concrete] +// CHECK:STDOUT: %Core.import_ref.017d8: @T.as_type.as.OptionalAs.impl.%T.as_type.as.OptionalAs.impl.Convert.type (%T.as_type.as.OptionalAs.impl.Convert.type.774) = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.OptionalAs.impl.%T.as_type.as.OptionalAs.impl.Convert (constants.%T.as_type.as.OptionalAs.impl.Convert.5f9)] +// CHECK:STDOUT: %OptionalAs.impl_witness_table.efa = impl_witness_table (%Core.import_ref.017d8), @T.as_type.as.OptionalAs.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: %pattern_type.282 = ref_binding_pattern p [concrete] -// CHECK:STDOUT: %p.var_patt: %pattern_type.282 = var_pattern %p.patt [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.282 = ref_binding_pattern p [concrete = constants.%p.patt] +// CHECK:STDOUT: %p.var_patt: %pattern_type.282 = var_pattern %p.patt [concrete = constants.%p.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %p.var: ref %const.f96 = var %p.var_patt // CHECK:STDOUT: %G.ref: %G.type = name_ref G, file.%G.decl [concrete = constants.%G] @@ -1073,6 +1091,8 @@ fn F() { // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.de6 = ref_binding_pattern p [concrete] +// CHECK:STDOUT: %p.var_patt: %pattern_type.de6 = var_pattern %p.patt [concrete] // CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] // CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] // CHECK:STDOUT: %OptionalStorage.type: type = facet_type <@OptionalStorage> [concrete] @@ -1145,15 +1165,15 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import_ref.eb9: @U.as_type.as.ImplicitAs.impl.167.%U.as_type.as.ImplicitAs.impl.Convert.type (%U.as_type.as.ImplicitAs.impl.Convert.type.ad5) = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, loaded [symbolic = @U.as_type.as.ImplicitAs.impl.167.%U.as_type.as.ImplicitAs.impl.Convert (constants.%U.as_type.as.ImplicitAs.impl.Convert.331)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.cf7 = impl_witness_table (%Core.import_ref.eb9), @U.as_type.as.ImplicitAs.impl.167 [concrete] -// CHECK:STDOUT: %Core.import_ref.017: @T.as_type.as.OptionalAs.impl.%T.as_type.as.OptionalAs.impl.Convert.type (%T.as_type.as.OptionalAs.impl.Convert.type.774) = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.OptionalAs.impl.%T.as_type.as.OptionalAs.impl.Convert (constants.%T.as_type.as.OptionalAs.impl.Convert.5f9)] -// CHECK:STDOUT: %OptionalAs.impl_witness_table.efa = impl_witness_table (%Core.import_ref.017), @T.as_type.as.OptionalAs.impl [concrete] +// CHECK:STDOUT: %Core.import_ref.017d8: @T.as_type.as.OptionalAs.impl.%T.as_type.as.OptionalAs.impl.Convert.type (%T.as_type.as.OptionalAs.impl.Convert.type.774) = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.OptionalAs.impl.%T.as_type.as.OptionalAs.impl.Convert (constants.%T.as_type.as.OptionalAs.impl.Convert.5f9)] +// CHECK:STDOUT: %OptionalAs.impl_witness_table.efa = impl_witness_table (%Core.import_ref.017d8), @T.as_type.as.OptionalAs.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: %pattern_type.de6 = ref_binding_pattern p [concrete] -// CHECK:STDOUT: %p.var_patt: %pattern_type.de6 = var_pattern %p.patt [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.de6 = ref_binding_pattern p [concrete = constants.%p.patt] +// CHECK:STDOUT: %p.var_patt: %pattern_type.de6 = var_pattern %p.patt [concrete = constants.%p.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %p.var: ref %ptr.037 = var %p.var_patt // CHECK:STDOUT: %G.ref: %G.type = name_ref G, file.%G.decl [concrete = constants.%G] @@ -1342,6 +1362,8 @@ fn F() { // CHECK:STDOUT: %S: type = class_type @S [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %pattern_type.0f5: type = pattern_type %S [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete] +// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %S.val: %S = struct_value () [concrete] // CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] @@ -1419,15 +1441,15 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import_ref.eb9: @U.as_type.as.ImplicitAs.impl.167.%U.as_type.as.ImplicitAs.impl.Convert.type (%U.as_type.as.ImplicitAs.impl.Convert.type.ad5) = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, loaded [symbolic = @U.as_type.as.ImplicitAs.impl.167.%U.as_type.as.ImplicitAs.impl.Convert (constants.%U.as_type.as.ImplicitAs.impl.Convert.331)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.cf7 = impl_witness_table (%Core.import_ref.eb9), @U.as_type.as.ImplicitAs.impl.167 [concrete] -// CHECK:STDOUT: %Core.import_ref.017: @T.as_type.as.OptionalAs.impl.%T.as_type.as.OptionalAs.impl.Convert.type (%T.as_type.as.OptionalAs.impl.Convert.type.774) = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.OptionalAs.impl.%T.as_type.as.OptionalAs.impl.Convert (constants.%T.as_type.as.OptionalAs.impl.Convert.5f9)] -// CHECK:STDOUT: %OptionalAs.impl_witness_table.efa = impl_witness_table (%Core.import_ref.017), @T.as_type.as.OptionalAs.impl [concrete] +// CHECK:STDOUT: %Core.import_ref.017d8: @T.as_type.as.OptionalAs.impl.%T.as_type.as.OptionalAs.impl.Convert.type (%T.as_type.as.OptionalAs.impl.Convert.type.774) = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.OptionalAs.impl.%T.as_type.as.OptionalAs.impl.Convert (constants.%T.as_type.as.OptionalAs.impl.Convert.5f9)] +// CHECK:STDOUT: %OptionalAs.impl_witness_table.efa = impl_witness_table (%Core.import_ref.017d8), @T.as_type.as.OptionalAs.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete] -// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete = constants.%s.patt] +// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete = constants.%s.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %s.var: ref %S = var %s.var_patt // CHECK:STDOUT: %.loc8_19.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] @@ -1599,6 +1621,8 @@ fn F() { // CHECK:STDOUT: %S: type = class_type @S [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %pattern_type.0f5: type = pattern_type %S [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete] +// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %S.val: %S = struct_value () [concrete] // CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] @@ -1678,8 +1702,8 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete] -// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete = constants.%s.patt] +// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete = constants.%s.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %s.var: ref %S = var %s.var_patt // CHECK:STDOUT: %.loc8_19.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] @@ -1705,16 +1729,18 @@ fn F() { // CHECK:STDOUT: %Some.ref: %Optional.Some.type.004 = name_ref Some, %.loc9_32 [concrete = constants.%Optional.Some.9ba] // CHECK:STDOUT: %s.ref: ref %S = name_ref s, %s // CHECK:STDOUT: %addr: %ptr.037 = addr_of %s.ref -// CHECK:STDOUT: %OptionalStorage.facet.loc9_40: %OptionalStorage.type = facet_value constants.%ptr.037, (constants.%OptionalStorage.impl_witness.582) [concrete = constants.%OptionalStorage.facet] -// CHECK:STDOUT: %.loc9_40.1: %OptionalStorage.type = converted constants.%ptr.037, %OptionalStorage.facet.loc9_40 [concrete = constants.%OptionalStorage.facet] +// CHECK:STDOUT: %OptionalStorage.facet.loc9_40.1: %OptionalStorage.type = facet_value constants.%ptr.037, (constants.%OptionalStorage.impl_witness.582) [concrete = constants.%OptionalStorage.facet] +// CHECK:STDOUT: %.loc9_40.1: %OptionalStorage.type = converted constants.%ptr.037, %OptionalStorage.facet.loc9_40.1 [concrete = constants.%OptionalStorage.facet] +// CHECK:STDOUT: %OptionalStorage.facet.loc9_40.2: %OptionalStorage.type = facet_value constants.%ptr.037, (constants.%OptionalStorage.impl_witness.582) [concrete = constants.%OptionalStorage.facet] +// CHECK:STDOUT: %.loc9_40.2: %OptionalStorage.type = converted constants.%ptr.037, %OptionalStorage.facet.loc9_40.2 [concrete = constants.%OptionalStorage.facet] // CHECK:STDOUT: %Optional.Some.specific_fn: = specific_function %Some.ref, @Optional.Some(constants.%OptionalStorage.facet) [concrete = constants.%Optional.Some.specific_fn] // CHECK:STDOUT: %Optional.Some.call: init %Optional.659 = call %Optional.Some.specific_fn(%addr) -// CHECK:STDOUT: %.loc9_40.2: ref %Optional.659 = temporary_storage -// CHECK:STDOUT: %.loc9_40.3: ref %Optional.659 = temporary %.loc9_40.2, %Optional.Some.call -// CHECK:STDOUT: %.loc9_40.4: %Optional.659 = acquire_value %.loc9_40.3 -// CHECK:STDOUT: %foo.call: init %empty_tuple.type = call imports.%foo.decl(%.loc9_40.4) -// CHECK:STDOUT: %Destroy.Op.bound: = bound_method %.loc9_40.3, constants.%Destroy.Op.1a2547.4 -// CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%.loc9_40.3) +// CHECK:STDOUT: %.loc9_40.3: ref %Optional.659 = temporary_storage +// CHECK:STDOUT: %.loc9_40.4: ref %Optional.659 = temporary %.loc9_40.3, %Optional.Some.call +// CHECK:STDOUT: %.loc9_40.5: %Optional.659 = acquire_value %.loc9_40.4 +// CHECK:STDOUT: %foo.call: init %empty_tuple.type = call imports.%foo.decl(%.loc9_40.5) +// CHECK:STDOUT: %Destroy.Op.bound: = bound_method %.loc9_40.4, constants.%Destroy.Op.1a2547.4 +// CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%.loc9_40.4) // CHECK:STDOUT: %S.cpp_destructor.bound: = bound_method %s.var, constants.%S.cpp_destructor // CHECK:STDOUT: %S.cpp_destructor.call: init %empty_tuple.type = call %S.cpp_destructor.bound(%s.var) // CHECK:STDOUT: @@ -1843,10 +1869,13 @@ fn F() { // CHECK:STDOUT: %S: type = class_type @S [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %pattern_type.0f5: type = pattern_type %S [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete] +// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %S.val: %S = struct_value () [concrete] // CHECK:STDOUT: %ptr.037: type = ptr_type %S [concrete] // CHECK:STDOUT: %pattern_type.de6: type = pattern_type %ptr.037 [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.de6 = value_binding_pattern p [concrete] // CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] // CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] // CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] @@ -1873,8 +1902,8 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete] -// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete = constants.%s.patt] +// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete = constants.%s.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %s.var: ref %S = var %s.var_patt // CHECK:STDOUT: %.loc8_19.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] @@ -1887,20 +1916,20 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %s: ref %S = ref_binding s, %s.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: %pattern_type.de6 = value_binding_pattern p [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.de6 = value_binding_pattern p [concrete = constants.%p.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc13_26: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] // CHECK:STDOUT: %s.ref: ref %S = name_ref s, %s // CHECK:STDOUT: %addr: %ptr.037 = addr_of %s.ref // CHECK:STDOUT: %foo.call: init %ptr.037 = call imports.%foo.decl(%addr) +// CHECK:STDOUT: %.loc13_36.1: %ptr.037 = value_of_initializer %foo.call +// CHECK:STDOUT: %.loc13_36.2: %ptr.037 = converted %foo.call, %.loc13_36.1 // CHECK:STDOUT: %.loc13_22: type = splice_block %ptr [concrete = constants.%ptr.037] { // CHECK:STDOUT: %Cpp.ref.loc13_17: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %S.ref.loc13: type = name_ref S, imports.%S.decl [concrete = constants.%S] // CHECK:STDOUT: %ptr: type = ptr_type %S.ref.loc13 [concrete = constants.%ptr.037] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc13_36.1: %ptr.037 = value_of_initializer %foo.call -// CHECK:STDOUT: %.loc13_36.2: %ptr.037 = converted %foo.call, %.loc13_36.1 // CHECK:STDOUT: %p: %ptr.037 = value_binding p, %.loc13_36.2 // CHECK:STDOUT: %S.cpp_destructor.bound: = bound_method %s.var, constants.%S.cpp_destructor // CHECK:STDOUT: %S.cpp_destructor.call: init %empty_tuple.type = call %S.cpp_destructor.bound(%s.var) @@ -1914,6 +1943,8 @@ fn F() { // CHECK:STDOUT: %S: type = class_type @S [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %pattern_type.0f5: type = pattern_type %S [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete] +// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %S.val: %S = struct_value () [concrete] // CHECK:STDOUT: %Direct.cpp_overload_set.type: type = cpp_overload_set_type @Direct.cpp_overload_set [concrete] @@ -1962,6 +1993,7 @@ fn F() { // CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.type.c92: type = fn_type @ImplicitAs.WithSelf.Convert, @ImplicitAs.WithSelf(%Optional.659, %ImplicitAs.facet.21e) [concrete] // CHECK:STDOUT: %.c09: type = fn_type_with_self_type %ImplicitAs.WithSelf.Convert.type.c92, %ImplicitAs.facet.21e [concrete] // CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %U.as_type.as.ImplicitAs.impl.Convert.8f4, @U.as_type.as.ImplicitAs.impl.Convert.2(%OptionalStorage.facet.0ce, %OptionalAs.facet) [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.9f4 = value_binding_pattern a [concrete] // CHECK:STDOUT: %Indirect.cpp_overload_set.type: type = cpp_overload_set_type @Indirect.cpp_overload_set [concrete] // CHECK:STDOUT: %Indirect.cpp_overload_set.value: %Indirect.cpp_overload_set.type = cpp_overload_set_value @Indirect.cpp_overload_set [concrete] // CHECK:STDOUT: %Indirect__carbon_thunk.type: type = fn_type @Indirect__carbon_thunk [concrete] @@ -2014,8 +2046,8 @@ fn F() { // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.0ff = import_ref Core//prelude/operators/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.eb9: @U.as_type.as.ImplicitAs.impl.167.%U.as_type.as.ImplicitAs.impl.Convert.type (%U.as_type.as.ImplicitAs.impl.Convert.type.ad5) = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, loaded [symbolic = @U.as_type.as.ImplicitAs.impl.167.%U.as_type.as.ImplicitAs.impl.Convert (constants.%U.as_type.as.ImplicitAs.impl.Convert.331)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.cf7 = impl_witness_table (%Core.import_ref.eb9), @U.as_type.as.ImplicitAs.impl.167 [concrete] -// CHECK:STDOUT: %Core.import_ref.017: @T.as_type.as.OptionalAs.impl.%T.as_type.as.OptionalAs.impl.Convert.type (%T.as_type.as.OptionalAs.impl.Convert.type.774) = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.OptionalAs.impl.%T.as_type.as.OptionalAs.impl.Convert (constants.%T.as_type.as.OptionalAs.impl.Convert.5f9)] -// CHECK:STDOUT: %OptionalAs.impl_witness_table.efa = impl_witness_table (%Core.import_ref.017), @T.as_type.as.OptionalAs.impl [concrete] +// CHECK:STDOUT: %Core.import_ref.017d8: @T.as_type.as.OptionalAs.impl.%T.as_type.as.OptionalAs.impl.Convert.type (%T.as_type.as.OptionalAs.impl.Convert.type.774) = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.OptionalAs.impl.%T.as_type.as.OptionalAs.impl.Convert (constants.%T.as_type.as.OptionalAs.impl.Convert.5f9)] +// CHECK:STDOUT: %OptionalAs.impl_witness_table.efa = impl_witness_table (%Core.import_ref.017d8), @T.as_type.as.OptionalAs.impl [concrete] // CHECK:STDOUT: %Indirect.cpp_overload_set.value: %Indirect.cpp_overload_set.type = cpp_overload_set_value @Indirect.cpp_overload_set [concrete = constants.%Indirect.cpp_overload_set.value] // CHECK:STDOUT: %Indirect__carbon_thunk.decl: %Indirect__carbon_thunk.type = fn_decl @Indirect__carbon_thunk [concrete = constants.%Indirect__carbon_thunk] { // CHECK:STDOUT: @@ -2031,8 +2063,8 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete] -// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete = constants.%s.patt] +// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete = constants.%s.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %s.var: ref %S = var %s.var_patt // CHECK:STDOUT: %.loc10_19.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] @@ -2059,7 +2091,7 @@ fn F() { // CHECK:STDOUT: %.loc11_14.4: %Optional.659 = acquire_value %.loc11_14.3 // CHECK:STDOUT: %Direct.call: init %Optional.659 = call imports.%Direct.decl(%.loc11_14.4) // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.9f4 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.9f4 = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc13_41: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %Indirect.ref: %Indirect.cpp_overload_set.type = name_ref Indirect, imports.%Indirect.cpp_overload_set.value [concrete = constants.%Indirect.cpp_overload_set.value] @@ -2074,6 +2106,9 @@ fn F() { // CHECK:STDOUT: %.loc13_57.4: ref %S = value_as_ref %.loc13_57.3 // CHECK:STDOUT: %addr.loc13: %ptr.037 = addr_of %.loc13_57.4 // CHECK:STDOUT: %Indirect__carbon_thunk.call: init %Optional.659 = call imports.%Indirect__carbon_thunk.decl(%addr.loc13) +// CHECK:STDOUT: %.loc13_65.1: ref %Optional.659 = temporary_storage +// CHECK:STDOUT: %.loc13_65.2: ref %Optional.659 = temporary %.loc13_65.1, %Indirect__carbon_thunk.call +// CHECK:STDOUT: %.loc13_65.3: %Optional.659 = acquire_value %.loc13_65.2 // CHECK:STDOUT: %.loc13_37.1: type = splice_block %Optional [concrete = constants.%Optional.659] { // CHECK:STDOUT: %Core.ref: = name_ref Core, imports.%Core [concrete = imports.%Core] // CHECK:STDOUT: %Optional.ref: %Optional.type = name_ref Optional, imports.%Core.Optional [concrete = constants.%Optional.generic] @@ -2084,9 +2119,6 @@ fn F() { // CHECK:STDOUT: %.loc13_37.2: %OptionalStorage.type = converted %ptr, %OptionalStorage.facet [concrete = constants.%OptionalStorage.facet.0ce] // CHECK:STDOUT: %Optional: type = class_type @Optional, @Optional(constants.%OptionalStorage.facet.0ce) [concrete = constants.%Optional.659] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc13_65.1: ref %Optional.659 = temporary_storage -// CHECK:STDOUT: %.loc13_65.2: ref %Optional.659 = temporary %.loc13_65.1, %Indirect__carbon_thunk.call -// CHECK:STDOUT: %.loc13_65.3: %Optional.659 = acquire_value %.loc13_65.2 // CHECK:STDOUT: %a: %Optional.659 = value_binding a, %.loc13_65.3 // CHECK:STDOUT: %Destroy.Op.bound.loc13: = bound_method %.loc13_65.2, constants.%Destroy.Op.1a2547.4 // CHECK:STDOUT: %Destroy.Op.call.loc13: init %empty_tuple.type = call %Destroy.Op.bound.loc13(%.loc13_65.2) diff --git a/toolchain/check/testdata/interop/cpp/function/import/qualified_param.carbon b/toolchain/check/testdata/interop/cpp/function/import/qualified_param.carbon index fbc04a6763e3..37403711b098 100644 --- a/toolchain/check/testdata/interop/cpp/function/import/qualified_param.carbon +++ b/toolchain/check/testdata/interop/cpp/function/import/qualified_param.carbon @@ -61,6 +61,8 @@ fn F() { // CHECK:STDOUT: %S: type = class_type @S [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %pattern_type.0f5: type = pattern_type %S [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete] +// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %S.val: %S = struct_value () [concrete] // CHECK:STDOUT: %TakesConstS.cpp_overload_set.type: type = cpp_overload_set_type @TakesConstS.cpp_overload_set [concrete] @@ -112,8 +114,8 @@ fn F() { // CHECK:STDOUT: %.loc8_21.2: %i32 = converted %int_42, %.loc8_21.1 [concrete = constants.%int_42.ac4] // CHECK:STDOUT: %TakesConstInt.call: init %empty_tuple.type = call imports.%TakesConstInt.decl(%.loc8_21.2) // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete] -// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete = constants.%s.patt] +// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete = constants.%s.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %s.var: ref %S = var %s.var_patt // CHECK:STDOUT: %.loc10_19.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] diff --git a/toolchain/check/testdata/interop/cpp/function/import/reference.carbon b/toolchain/check/testdata/interop/cpp/function/import/reference.carbon index ae7b835c0be9..834f9c3af5c9 100644 --- a/toolchain/check/testdata/interop/cpp/function/import/reference.carbon +++ b/toolchain/check/testdata/interop/cpp/function/import/reference.carbon @@ -489,6 +489,8 @@ fn PassConstRef(ref x: const X) { // CHECK:STDOUT: %S: type = class_type @S [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %pattern_type.0f5: type = pattern_type %S [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete] +// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %S.val: %S = struct_value () [concrete] // CHECK:STDOUT: %TakesLValue.cpp_overload_set.type: type = cpp_overload_set_type @TakesLValue.cpp_overload_set [concrete] @@ -517,8 +519,8 @@ fn PassConstRef(ref x: const X) { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete] -// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete = constants.%s.patt] +// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete = constants.%s.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %s.var: ref %S = var %s.var_patt // CHECK:STDOUT: %.loc8_19.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] @@ -546,6 +548,8 @@ fn PassConstRef(ref x: const X) { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %S: type = class_type @S [concrete] // CHECK:STDOUT: %pattern_type.0f5: type = pattern_type %S [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.0f5 = ref_binding_pattern v [concrete] +// CHECK:STDOUT: %v.var_patt: %pattern_type.0f5 = var_pattern %v.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %Default.type: type = facet_type <@Default> [concrete] // CHECK:STDOUT: %T.b09: %Default.type = symbolic_binding T, 0 [symbolic] @@ -557,17 +561,22 @@ fn PassConstRef(ref x: const X) { // CHECK:STDOUT: %Default.facet.f3a: %Default.type = facet_value %S, (%custom_witness.9b40fb.1) [concrete] // CHECK:STDOUT: %DefaultOrUnformed.impl_witness.eff: = impl_witness imports.%DefaultOrUnformed.impl_witness_table.670, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.f3a) [concrete] // CHECK:STDOUT: %DefaultOrUnformed.facet.176: %DefaultOrUnformed.type = facet_value %S, (%DefaultOrUnformed.impl_witness.eff) [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = value_binding_pattern s [concrete] // CHECK:STDOUT: %TakesLValue.cpp_overload_set.type: type = cpp_overload_set_type @TakesLValue.cpp_overload_set [concrete] // CHECK:STDOUT: %TakesLValue.cpp_overload_set.value: %TakesLValue.cpp_overload_set.type = cpp_overload_set_value @TakesLValue.cpp_overload_set [concrete] // CHECK:STDOUT: %const: type = const_type %S [concrete] // CHECK:STDOUT: %T.ed0: type = class_type @T [concrete] // CHECK:STDOUT: %pattern_type.5f6: type = pattern_type %T.ed0 [concrete] +// CHECK:STDOUT: %t.patt: %pattern_type.5f6 = ref_binding_pattern t [concrete] +// CHECK:STDOUT: %t.var_patt: %pattern_type.5f6 = var_pattern %t.patt [concrete] // CHECK:STDOUT: %T.Op.type: type = fn_type @T.Op [concrete] // CHECK:STDOUT: %T.Op: %T.Op.type = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.9b40fb.2: = custom_witness (%T.Op), @Default [concrete] // CHECK:STDOUT: %Default.facet.d67: %Default.type = facet_value %T.ed0, (%custom_witness.9b40fb.2) [concrete] // CHECK:STDOUT: %DefaultOrUnformed.impl_witness.537: = impl_witness imports.%DefaultOrUnformed.impl_witness_table.670, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.d67) [concrete] // CHECK:STDOUT: %DefaultOrUnformed.facet.e0e: %DefaultOrUnformed.type = facet_value %T.ed0, (%DefaultOrUnformed.impl_witness.537) [concrete] +// CHECK:STDOUT: %u.patt: %pattern_type.0f5 = ref_binding_pattern u [concrete] +// CHECK:STDOUT: %u.var_patt: %pattern_type.0f5 = var_pattern %u.patt [concrete] // CHECK:STDOUT: %S.cpp_destructor.type: type = fn_type @S.cpp_destructor [concrete] // CHECK:STDOUT: %S.cpp_destructor: %S.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: %T.cpp_destructor.type: type = fn_type @T.cpp_destructor [concrete] @@ -591,8 +600,8 @@ fn PassConstRef(ref x: const X) { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %pattern_type.0f5 = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: %pattern_type.0f5 = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.0f5 = ref_binding_pattern v [concrete = constants.%v.patt] +// CHECK:STDOUT: %v.var_patt: %pattern_type.0f5 = var_pattern %v.patt [concrete = constants.%v.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %S = var %v.var_patt // CHECK:STDOUT: %DefaultOrUnformed.facet.loc8: %DefaultOrUnformed.type = facet_value constants.%S, (constants.%DefaultOrUnformed.impl_witness.eff) [concrete = constants.%DefaultOrUnformed.facet.176] @@ -609,14 +618,14 @@ fn PassConstRef(ref x: const X) { // CHECK:STDOUT: } // CHECK:STDOUT: %v: ref %S = ref_binding v, %v.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = value_binding_pattern s [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = value_binding_pattern s [concrete = constants.%s.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %v.ref: ref %S = name_ref v, %v +// CHECK:STDOUT: %.loc9_18: %S = acquire_value %v.ref // CHECK:STDOUT: %.loc9_13: type = splice_block %S.ref.loc9 [concrete = constants.%S] { // CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %S.ref.loc9: type = name_ref S, imports.%S.decl [concrete = constants.%S] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc9_18: %S = acquire_value %v.ref // CHECK:STDOUT: %s: %S = value_binding s, %.loc9_18 // CHECK:STDOUT: %Cpp.ref.loc18: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %TakesLValue.ref.loc18: %TakesLValue.cpp_overload_set.type = name_ref TakesLValue, imports.%TakesLValue.cpp_overload_set.value [concrete = constants.%TakesLValue.cpp_overload_set.value] @@ -630,8 +639,8 @@ fn PassConstRef(ref x: const X) { // CHECK:STDOUT: %.loc28_21.1: %const = as_compatible %s.ref.loc28 // CHECK:STDOUT: %.loc28_21.2: %const = converted %s.ref.loc28, %.loc28_21.1 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %t.patt: %pattern_type.5f6 = ref_binding_pattern t [concrete] -// CHECK:STDOUT: %t.var_patt: %pattern_type.5f6 = var_pattern %t.patt [concrete] +// CHECK:STDOUT: %t.patt: %pattern_type.5f6 = ref_binding_pattern t [concrete = constants.%t.patt] +// CHECK:STDOUT: %t.var_patt: %pattern_type.5f6 = var_pattern %t.patt [concrete = constants.%t.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %t.var: ref %T.ed0 = var %t.var_patt // CHECK:STDOUT: %DefaultOrUnformed.facet.loc30: %DefaultOrUnformed.type = facet_value constants.%T.ed0, (constants.%DefaultOrUnformed.impl_witness.537) [concrete = constants.%DefaultOrUnformed.facet.e0e] @@ -651,8 +660,8 @@ fn PassConstRef(ref x: const X) { // CHECK:STDOUT: %TakesLValue.ref.loc39: %TakesLValue.cpp_overload_set.type = name_ref TakesLValue, imports.%TakesLValue.cpp_overload_set.value [concrete = constants.%TakesLValue.cpp_overload_set.value] // CHECK:STDOUT: %t.ref: ref %T.ed0 = name_ref t, %t // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %u.patt: %pattern_type.0f5 = ref_binding_pattern u [concrete] -// CHECK:STDOUT: %u.var_patt: %pattern_type.0f5 = var_pattern %u.patt [concrete] +// CHECK:STDOUT: %u.patt: %pattern_type.0f5 = ref_binding_pattern u [concrete = constants.%u.patt] +// CHECK:STDOUT: %u.var_patt: %pattern_type.0f5 = var_pattern %u.patt [concrete = constants.%u.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %u.var: ref %S = var %u.var_patt // CHECK:STDOUT: %DefaultOrUnformed.facet.loc41: %DefaultOrUnformed.type = facet_value constants.%S, (constants.%DefaultOrUnformed.impl_witness.eff) [concrete = constants.%DefaultOrUnformed.facet.176] @@ -738,6 +747,8 @@ fn PassConstRef(ref x: const X) { // CHECK:STDOUT: %S: type = class_type @S [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %pattern_type.0f5: type = pattern_type %S [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete] +// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %Default.type: type = facet_type <@Default> [concrete] // CHECK:STDOUT: %T.b09: %Default.type = symbolic_binding T, 0 [symbolic] @@ -753,6 +764,8 @@ fn PassConstRef(ref x: const X) { // CHECK:STDOUT: %TakesRValue.cpp_overload_set.value: %TakesRValue.cpp_overload_set.type = cpp_overload_set_value @TakesRValue.cpp_overload_set [concrete] // CHECK:STDOUT: %T.ed0: type = class_type @T [concrete] // CHECK:STDOUT: %pattern_type.5f6: type = pattern_type %T.ed0 [concrete] +// CHECK:STDOUT: %t.patt: %pattern_type.5f6 = ref_binding_pattern t [concrete] +// CHECK:STDOUT: %t.var_patt: %pattern_type.5f6 = var_pattern %t.patt [concrete] // CHECK:STDOUT: %T.Op.type: type = fn_type @T.Op [concrete] // CHECK:STDOUT: %T.Op: %T.Op.type = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.9b40fb.2: = custom_witness (%T.Op), @Default [concrete] @@ -786,8 +799,8 @@ fn PassConstRef(ref x: const X) { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete] -// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete = constants.%s.patt] +// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete = constants.%s.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %s.var: ref %S = var %s.var_patt // CHECK:STDOUT: %DefaultOrUnformed.facet.loc8: %DefaultOrUnformed.type = facet_value constants.%S, (constants.%DefaultOrUnformed.impl_witness.eff) [concrete = constants.%DefaultOrUnformed.facet.176] @@ -807,8 +820,8 @@ fn PassConstRef(ref x: const X) { // CHECK:STDOUT: %TakesRValue.ref.loc17: %TakesRValue.cpp_overload_set.type = name_ref TakesRValue, imports.%TakesRValue.cpp_overload_set.value [concrete = constants.%TakesRValue.cpp_overload_set.value] // CHECK:STDOUT: %s.ref: ref %S = name_ref s, %s // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %t.patt: %pattern_type.5f6 = ref_binding_pattern t [concrete] -// CHECK:STDOUT: %t.var_patt: %pattern_type.5f6 = var_pattern %t.patt [concrete] +// CHECK:STDOUT: %t.patt: %pattern_type.5f6 = ref_binding_pattern t [concrete = constants.%t.patt] +// CHECK:STDOUT: %t.var_patt: %pattern_type.5f6 = var_pattern %t.patt [concrete = constants.%t.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %t.var: ref %T.ed0 = var %t.var_patt // CHECK:STDOUT: %DefaultOrUnformed.facet.loc19: %DefaultOrUnformed.type = facet_value constants.%T.ed0, (constants.%DefaultOrUnformed.impl_witness.537) [concrete = constants.%DefaultOrUnformed.facet.e0e] @@ -854,6 +867,8 @@ fn PassConstRef(ref x: const X) { // CHECK:STDOUT: %S: type = class_type @S [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %pattern_type.0f5: type = pattern_type %S [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete] +// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %S.val: %S = struct_value () [concrete] // CHECK:STDOUT: %TakesConstLValue.cpp_overload_set.type: type = cpp_overload_set_type @TakesConstLValue.cpp_overload_set [concrete] @@ -885,8 +900,8 @@ fn PassConstRef(ref x: const X) { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete] -// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete = constants.%s.patt] +// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete = constants.%s.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %s.var: ref %S = var %s.var_patt // CHECK:STDOUT: %.loc8_19.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] @@ -935,6 +950,7 @@ fn PassConstRef(ref x: const X) { // CHECK:STDOUT: %S: type = class_type @S [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %pattern_type.0f5: type = pattern_type %S [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = value_binding_pattern s [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %S.val: %S = struct_value () [concrete] // CHECK:STDOUT: %.a94: ref %S = temporary invalid, %S.val [concrete] @@ -965,18 +981,18 @@ fn PassConstRef(ref x: const X) { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = value_binding_pattern s [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = value_binding_pattern s [concrete = constants.%s.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc8_19.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] -// CHECK:STDOUT: %.loc8_13: type = splice_block %S.ref.loc8 [concrete = constants.%S] { -// CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %S.ref.loc8: type = name_ref S, imports.%S.decl [concrete = constants.%S] -// CHECK:STDOUT: } // CHECK:STDOUT: %.loc8_19.2: ref %S = temporary_storage // CHECK:STDOUT: %.loc8_19.3: init %S to %.loc8_19.2 = class_init () [concrete = constants.%S.val] // CHECK:STDOUT: %.loc8_19.4: init %S = converted %.loc8_19.1, %.loc8_19.3 [concrete = constants.%S.val] // CHECK:STDOUT: %.loc8_19.5: ref %S = temporary %.loc8_19.2, %.loc8_19.4 [concrete = constants.%.a94] // CHECK:STDOUT: %.loc8_19.6: %S = acquire_value %.loc8_19.5 [concrete = constants.%S.val] +// CHECK:STDOUT: %.loc8_13: type = splice_block %S.ref.loc8 [concrete = constants.%S] { +// CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %S.ref.loc8: type = name_ref S, imports.%S.decl [concrete = constants.%S] +// CHECK:STDOUT: } // CHECK:STDOUT: %s: %S = value_binding s, %.loc8_19.6 // CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %TakesConstLValue.ref.loc9: %TakesConstLValue.cpp_overload_set.type = name_ref TakesConstLValue, imports.%TakesConstLValue.cpp_overload_set.value [concrete = constants.%TakesConstLValue.cpp_overload_set.value] @@ -1062,6 +1078,8 @@ fn PassConstRef(ref x: const X) { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %S: type = class_type @S [concrete] // CHECK:STDOUT: %pattern_type.0f5: type = pattern_type %S [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete] +// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %Default.type: type = facet_type <@Default> [concrete] // CHECK:STDOUT: %T.b09: %Default.type = symbolic_binding T, 0 [symbolic] @@ -1077,6 +1095,8 @@ fn PassConstRef(ref x: const X) { // CHECK:STDOUT: %TakesConstRValue.cpp_overload_set.value: %TakesConstRValue.cpp_overload_set.type = cpp_overload_set_value @TakesConstRValue.cpp_overload_set [concrete] // CHECK:STDOUT: %T.ed0: type = class_type @T [concrete] // CHECK:STDOUT: %pattern_type.5f6: type = pattern_type %T.ed0 [concrete] +// CHECK:STDOUT: %t.patt: %pattern_type.5f6 = ref_binding_pattern t [concrete] +// CHECK:STDOUT: %t.var_patt: %pattern_type.5f6 = var_pattern %t.patt [concrete] // CHECK:STDOUT: %T.Op.type: type = fn_type @T.Op [concrete] // CHECK:STDOUT: %T.Op: %T.Op.type = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.9b40fb.2: = custom_witness (%T.Op), @Default [concrete] @@ -1106,8 +1126,8 @@ fn PassConstRef(ref x: const X) { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete] -// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete = constants.%s.patt] +// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete = constants.%s.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %s.var: ref %S = var %s.var_patt // CHECK:STDOUT: %DefaultOrUnformed.facet.loc8: %DefaultOrUnformed.type = facet_value constants.%S, (constants.%DefaultOrUnformed.impl_witness.eff) [concrete = constants.%DefaultOrUnformed.facet.176] @@ -1127,8 +1147,8 @@ fn PassConstRef(ref x: const X) { // CHECK:STDOUT: %TakesConstRValue.ref.loc17: %TakesConstRValue.cpp_overload_set.type = name_ref TakesConstRValue, imports.%TakesConstRValue.cpp_overload_set.value [concrete = constants.%TakesConstRValue.cpp_overload_set.value] // CHECK:STDOUT: %s.ref: ref %S = name_ref s, %s // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %t.patt: %pattern_type.5f6 = ref_binding_pattern t [concrete] -// CHECK:STDOUT: %t.var_patt: %pattern_type.5f6 = var_pattern %t.patt [concrete] +// CHECK:STDOUT: %t.patt: %pattern_type.5f6 = ref_binding_pattern t [concrete = constants.%t.patt] +// CHECK:STDOUT: %t.var_patt: %pattern_type.5f6 = var_pattern %t.patt [concrete = constants.%t.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %t.var: ref %T.ed0 = var %t.var_patt // CHECK:STDOUT: %DefaultOrUnformed.facet.loc19: %DefaultOrUnformed.type = facet_value constants.%T.ed0, (constants.%DefaultOrUnformed.impl_witness.537) [concrete = constants.%DefaultOrUnformed.facet.e0e] @@ -1159,6 +1179,7 @@ fn PassConstRef(ref x: const X) { // CHECK:STDOUT: constants { // CHECK:STDOUT: %S: type = class_type @S [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %S [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type = ref_binding_pattern s [concrete] // CHECK:STDOUT: %ReturnsLValue.cpp_overload_set.type: type = cpp_overload_set_type @ReturnsLValue.cpp_overload_set [concrete] // CHECK:STDOUT: %ReturnsLValue.cpp_overload_set.value: %ReturnsLValue.cpp_overload_set.type = cpp_overload_set_value @ReturnsLValue.cpp_overload_set [concrete] // CHECK:STDOUT: %ReturnsLValue.type: type = fn_type @ReturnsLValue [concrete] @@ -1179,7 +1200,7 @@ fn PassConstRef(ref x: const X) { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %s.patt: %pattern_type = ref_binding_pattern s [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type = ref_binding_pattern s [concrete = constants.%s.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc8_29: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %ReturnsLValue.ref: %ReturnsLValue.cpp_overload_set.type = name_ref ReturnsLValue, imports.%ReturnsLValue.cpp_overload_set.value [concrete = constants.%ReturnsLValue.cpp_overload_set.value] @@ -1197,6 +1218,7 @@ fn PassConstRef(ref x: const X) { // CHECK:STDOUT: constants { // CHECK:STDOUT: %S: type = class_type @S [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %S [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type = ref_binding_pattern s [concrete] // CHECK:STDOUT: %ReturnsRValue.cpp_overload_set.type: type = cpp_overload_set_type @ReturnsRValue.cpp_overload_set [concrete] // CHECK:STDOUT: %ReturnsRValue.cpp_overload_set.value: %ReturnsRValue.cpp_overload_set.type = cpp_overload_set_value @ReturnsRValue.cpp_overload_set [concrete] // CHECK:STDOUT: %ReturnsRValue.type: type = fn_type @ReturnsRValue [concrete] @@ -1217,7 +1239,7 @@ fn PassConstRef(ref x: const X) { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %s.patt: %pattern_type = ref_binding_pattern s [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type = ref_binding_pattern s [concrete = constants.%s.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc8_29: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %ReturnsRValue.ref: %ReturnsRValue.cpp_overload_set.type = name_ref ReturnsRValue, imports.%ReturnsRValue.cpp_overload_set.value [concrete = constants.%ReturnsRValue.cpp_overload_set.value] @@ -1236,6 +1258,7 @@ fn PassConstRef(ref x: const X) { // CHECK:STDOUT: %S: type = class_type @S [concrete] // CHECK:STDOUT: %const: type = const_type %S [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %const [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type = ref_binding_pattern s [concrete] // CHECK:STDOUT: %ReturnConstLValue.cpp_overload_set.type: type = cpp_overload_set_type @ReturnConstLValue.cpp_overload_set [concrete] // CHECK:STDOUT: %ReturnConstLValue.cpp_overload_set.value: %ReturnConstLValue.cpp_overload_set.type = cpp_overload_set_value @ReturnConstLValue.cpp_overload_set [concrete] // CHECK:STDOUT: %ReturnConstLValue.type: type = fn_type @ReturnConstLValue [concrete] @@ -1256,7 +1279,7 @@ fn PassConstRef(ref x: const X) { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %s.patt: %pattern_type = ref_binding_pattern s [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type = ref_binding_pattern s [concrete = constants.%s.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc8_35: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %ReturnConstLValue.ref: %ReturnConstLValue.cpp_overload_set.type = name_ref ReturnConstLValue, imports.%ReturnConstLValue.cpp_overload_set.value [concrete = constants.%ReturnConstLValue.cpp_overload_set.value] diff --git a/toolchain/check/testdata/interop/cpp/function/import/return.carbon b/toolchain/check/testdata/interop/cpp/function/import/return.carbon index df243a610754..7a70930cb887 100644 --- a/toolchain/check/testdata/interop/cpp/function/import/return.carbon +++ b/toolchain/check/testdata/interop/cpp/function/import/return.carbon @@ -196,6 +196,8 @@ fn Var() { // CHECK:STDOUT: %MaybeUnformed.399: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.49e) [concrete] // CHECK:STDOUT: %.a7d: type = maybe_unformed_type %ptr.00a [concrete] // CHECK:STDOUT: %pattern_type.af6: type = pattern_type %Cpp.nullptr_t [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.af6 = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.af6 = var_pattern %c.patt [concrete] // CHECK:STDOUT: %ReturnNullPtr.cpp_overload_set.type: type = cpp_overload_set_type @ReturnNullPtr.cpp_overload_set [concrete] // CHECK:STDOUT: %ReturnNullPtr.cpp_overload_set.value: %ReturnNullPtr.cpp_overload_set.type = cpp_overload_set_value @ReturnNullPtr.cpp_overload_set [concrete] // CHECK:STDOUT: %ptr.ab6: type = ptr_type %Cpp.nullptr_t [concrete] @@ -222,8 +224,8 @@ fn Var() { // CHECK:STDOUT: fn @InitializeFromReturn() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.af6 = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.af6 = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.af6 = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type.af6 = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %Cpp.nullptr_t = var %c.var_patt // CHECK:STDOUT: %Cpp.ref.loc11_33: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] @@ -270,12 +272,16 @@ fn Var() { // CHECK:STDOUT: %u8: type = class_type @UInt, @UInt(%int_8) [concrete] // CHECK:STDOUT: %.1e3: Core.Form = init_form %u8 [concrete] // CHECK:STDOUT: %pattern_type.186: type = pattern_type %u8 [concrete] +// CHECK:STDOUT: %return.param_patt.4c9: %pattern_type.186 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.c50: %pattern_type.186 = return_slot_pattern %return.param_patt.4c9, %u8 [concrete] // CHECK:STDOUT: %GetU8.type: type = fn_type @GetU8 [concrete] // CHECK:STDOUT: %GetU8: %GetU8.type = struct_value () [concrete] // CHECK:STDOUT: %ReturnU8.cpp_overload_set.type: type = cpp_overload_set_type @ReturnU8.cpp_overload_set [concrete] // CHECK:STDOUT: %ReturnU8.cpp_overload_set.value: %ReturnU8.cpp_overload_set.type = cpp_overload_set_value @ReturnU8.cpp_overload_set [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %u8 [concrete] // CHECK:STDOUT: %pattern_type.015: type = pattern_type %ptr [concrete] +// CHECK:STDOUT: %return.param_patt.d05: %pattern_type.015 = value_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.cb2: %pattern_type.015 = at_binding_pattern r#return, %return.param_patt.d05 [concrete] // CHECK:STDOUT: %ReturnU8__carbon_thunk.type: type = fn_type @ReturnU8__carbon_thunk [concrete] // CHECK:STDOUT: %ReturnU8__carbon_thunk: %ReturnU8__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -293,8 +299,8 @@ fn Var() { // CHECK:STDOUT: %Core.UInt: %UInt.type = import_ref Core//prelude/types/uint, UInt, loaded [concrete = constants.%UInt.generic] // CHECK:STDOUT: %ReturnU8.cpp_overload_set.value: %ReturnU8.cpp_overload_set.type = cpp_overload_set_value @ReturnU8.cpp_overload_set [concrete = constants.%ReturnU8.cpp_overload_set.value] // CHECK:STDOUT: %ReturnU8__carbon_thunk.decl: %ReturnU8__carbon_thunk.type = fn_decl @ReturnU8__carbon_thunk [concrete = constants.%ReturnU8__carbon_thunk] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.015 = value_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.015 = at_binding_pattern r#return, %return.param_patt [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.015 = value_param_pattern [concrete = constants.%return.param_patt.d05] +// CHECK:STDOUT: %return.patt: %pattern_type.015 = at_binding_pattern r#return, %return.param_patt [concrete = constants.%return.patt.cb2] // CHECK:STDOUT: } { // CHECK:STDOUT: %return.param: %ptr = value_param call_param0 // CHECK:STDOUT: %.1: type = splice_block constants.%ptr [concrete = constants.%ptr] { @@ -317,8 +323,8 @@ fn Var() { // CHECK:STDOUT: import Cpp inline // CHECK:STDOUT: } // CHECK:STDOUT: %GetU8.decl: %GetU8.type = fn_decl @GetU8 [concrete = constants.%GetU8] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.186 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.186 = return_slot_pattern %return.param_patt, %u8 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.186 = out_param_pattern [concrete = constants.%return.param_patt.4c9] +// CHECK:STDOUT: %return.patt: %pattern_type.186 = return_slot_pattern %return.param_patt, %u8 [concrete = constants.%return.patt.c50] // CHECK:STDOUT: } { // CHECK:STDOUT: %u8: type = type_literal constants.%u8 [concrete = constants.%u8] // CHECK:STDOUT: %.loc8_15: Core.Form = init_form %u8 [concrete = constants.%.1e3] @@ -354,8 +360,12 @@ fn Var() { // CHECK:STDOUT: %u32: type = class_type @UInt, @UInt(%int_32) [concrete] // CHECK:STDOUT: %u32.builtin: type = int_type unsigned, %int_32 [concrete] // CHECK:STDOUT: %pattern_type.668: type = pattern_type %u32 [concrete] +// CHECK:STDOUT: %my_u32.patt: %pattern_type.668 = ref_binding_pattern my_u32 [concrete] +// CHECK:STDOUT: %my_u32.var_patt: %pattern_type.668 = var_pattern %my_u32.patt [concrete] // CHECK:STDOUT: %ReturnU32.cpp_overload_set.type: type = cpp_overload_set_type @ReturnU32.cpp_overload_set [concrete] // CHECK:STDOUT: %ReturnU32.cpp_overload_set.value: %ReturnU32.cpp_overload_set.type = cpp_overload_set_value @ReturnU32.cpp_overload_set [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.668 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type.668 = return_slot_pattern %return.param_patt, %u32 [concrete] // CHECK:STDOUT: %ReturnU32.type: type = fn_type @ReturnU32 [concrete] // CHECK:STDOUT: %ReturnU32: %ReturnU32.type = struct_value () [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] @@ -377,8 +387,8 @@ fn Var() { // CHECK:STDOUT: %Core.UInt: %UInt.type = import_ref Core//prelude/types/uint, UInt, loaded [concrete = constants.%UInt.generic] // CHECK:STDOUT: %ReturnU32.cpp_overload_set.value: %ReturnU32.cpp_overload_set.type = cpp_overload_set_value @ReturnU32.cpp_overload_set [concrete = constants.%ReturnU32.cpp_overload_set.value] // CHECK:STDOUT: %ReturnU32.decl: %ReturnU32.type = fn_decl @ReturnU32 [concrete = constants.%ReturnU32] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.668 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.668 = return_slot_pattern %return.param_patt, %u32.2 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.668 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.668 = return_slot_pattern %return.param_patt, %u32.2 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %u32.1: type = class_type @UInt, @UInt(constants.%int_32) [concrete = constants.%u32] @@ -405,8 +415,8 @@ fn Var() { // CHECK:STDOUT: fn @Var() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %my_u32.patt: %pattern_type.668 = ref_binding_pattern my_u32 [concrete] -// CHECK:STDOUT: %my_u32.var_patt: %pattern_type.668 = var_pattern %my_u32.patt [concrete] +// CHECK:STDOUT: %my_u32.patt: %pattern_type.668 = ref_binding_pattern my_u32 [concrete = constants.%my_u32.patt] +// CHECK:STDOUT: %my_u32.var_patt: %pattern_type.668 = var_pattern %my_u32.patt [concrete = constants.%my_u32.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %my_u32.var: ref %u32 = var %my_u32.var_patt // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] diff --git a/toolchain/check/testdata/interop/cpp/function/import/struct.carbon b/toolchain/check/testdata/interop/cpp/function/import/struct.carbon index 3498187214c8..3bde6aba4b77 100644 --- a/toolchain/check/testdata/interop/cpp/function/import/struct.carbon +++ b/toolchain/check/testdata/interop/cpp/function/import/struct.carbon @@ -651,6 +651,8 @@ fn F() { // CHECK:STDOUT: %ptr.237: type = ptr_type %S [concrete] // CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] // CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.bc1 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.bc1 = var_pattern %x.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %Default.type: type = facet_type <@Default> [concrete] // CHECK:STDOUT: %T.b09: %Default.type = symbolic_binding T, 0 [symbolic] @@ -696,8 +698,8 @@ fn F() { // CHECK:STDOUT: %addr: %ptr.237 = addr_of %.loc8 // CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr) // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.bc1 = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.bc1 = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.bc1 = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.bc1 = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %S = var %x.var_patt // CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%S, (constants.%DefaultOrUnformed.impl_witness.a26) [concrete = constants.%DefaultOrUnformed.facet] @@ -778,6 +780,8 @@ fn F() { // CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] // CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.6eb: type = pattern_type %O [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.6eb = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.6eb = var_pattern %x.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %Default.type: type = facet_type <@Default> [concrete] // CHECK:STDOUT: %T.b09: %Default.type = symbolic_binding T, 0 [symbolic] @@ -819,8 +823,8 @@ fn F() { // CHECK:STDOUT: %addr: %ptr.ad4 = addr_of %.loc8 // CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr) // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.6eb = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.6eb = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.6eb = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.6eb = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %O = var %x.var_patt // CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%O, (constants.%DefaultOrUnformed.impl_witness.3bc) [concrete = constants.%DefaultOrUnformed.facet] diff --git a/toolchain/check/testdata/interop/cpp/function/import/union.carbon b/toolchain/check/testdata/interop/cpp/function/import/union.carbon index c912ab07c5a1..0f7d7008779e 100644 --- a/toolchain/check/testdata/interop/cpp/function/import/union.carbon +++ b/toolchain/check/testdata/interop/cpp/function/import/union.carbon @@ -576,6 +576,8 @@ fn F() { // CHECK:STDOUT: %ptr.d0c: type = ptr_type %U [concrete] // CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] // CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.04d = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.04d = var_pattern %x.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %Default.type: type = facet_type <@Default> [concrete] // CHECK:STDOUT: %T.b09: %Default.type = symbolic_binding T, 0 [symbolic] @@ -621,8 +623,8 @@ fn F() { // CHECK:STDOUT: %addr: %ptr.d0c = addr_of %.loc8 // CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr) // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.04d = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.04d = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.04d = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.04d = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %U = var %x.var_patt // CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%U, (constants.%DefaultOrUnformed.impl_witness.147) [concrete = constants.%DefaultOrUnformed.facet] @@ -703,6 +705,8 @@ fn F() { // CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] // CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.6eb: type = pattern_type %O [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.6eb = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.6eb = var_pattern %x.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %Default.type: type = facet_type <@Default> [concrete] // CHECK:STDOUT: %T.b09: %Default.type = symbolic_binding T, 0 [symbolic] @@ -744,8 +748,8 @@ fn F() { // CHECK:STDOUT: %addr: %ptr.fea = addr_of %.loc8 // CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr) // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.6eb = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.6eb = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.6eb = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.6eb = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %O = var %x.var_patt // CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%O, (constants.%DefaultOrUnformed.impl_witness.3bc) [concrete = constants.%DefaultOrUnformed.facet] diff --git a/toolchain/check/testdata/interop/cpp/function/import/void_pointer.carbon b/toolchain/check/testdata/interop/cpp/function/import/void_pointer.carbon index b82fd8a54e4b..d1e8226dabfc 100644 --- a/toolchain/check/testdata/interop/cpp/function/import/void_pointer.carbon +++ b/toolchain/check/testdata/interop/cpp/function/import/void_pointer.carbon @@ -153,6 +153,7 @@ fn F() { // CHECK:STDOUT: %Cpp.void: type = class_type @VoidBase [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %Cpp.void [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] +// CHECK:STDOUT: %output.patt: %pattern_type = value_binding_pattern output [concrete] // CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] // CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] // CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] @@ -176,18 +177,18 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %output.patt: %pattern_type = value_binding_pattern output [concrete] +// CHECK:STDOUT: %output.patt: %pattern_type = value_binding_pattern output [concrete = constants.%output.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc10_34: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] // CHECK:STDOUT: %foo.call: init %ptr = call imports.%foo.decl() +// CHECK:STDOUT: %.loc10_42.1: %ptr = value_of_initializer %foo.call +// CHECK:STDOUT: %.loc10_42.2: %ptr = converted %foo.call, %.loc10_42.1 // CHECK:STDOUT: %.loc10_30: type = splice_block %ptr [concrete = constants.%ptr] { // CHECK:STDOUT: %Cpp.ref.loc10_22: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %void.ref: type = name_ref void, constants.%Cpp.void [concrete = constants.%Cpp.void] // CHECK:STDOUT: %ptr: type = ptr_type %void.ref [concrete = constants.%ptr] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc10_42.1: %ptr = value_of_initializer %foo.call -// CHECK:STDOUT: %.loc10_42.2: %ptr = converted %foo.call, %.loc10_42.1 // CHECK:STDOUT: %output: %ptr = value_binding output, %.loc10_42.2 // CHECK:STDOUT: // CHECK:STDOUT: } @@ -269,8 +270,8 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import_ref.eb9: @U.as_type.as.ImplicitAs.impl.167.%U.as_type.as.ImplicitAs.impl.Convert.type (%U.as_type.as.ImplicitAs.impl.Convert.type.ad5) = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, loaded [symbolic = @U.as_type.as.ImplicitAs.impl.167.%U.as_type.as.ImplicitAs.impl.Convert (constants.%U.as_type.as.ImplicitAs.impl.Convert.331)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.cf7 = impl_witness_table (%Core.import_ref.eb9), @U.as_type.as.ImplicitAs.impl.167 [concrete] -// CHECK:STDOUT: %Core.import_ref.017: @T.as_type.as.OptionalAs.impl.%T.as_type.as.OptionalAs.impl.Convert.type (%T.as_type.as.OptionalAs.impl.Convert.type.774) = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.OptionalAs.impl.%T.as_type.as.OptionalAs.impl.Convert (constants.%T.as_type.as.OptionalAs.impl.Convert.5f9)] -// CHECK:STDOUT: %OptionalAs.impl_witness_table.efa = impl_witness_table (%Core.import_ref.017), @T.as_type.as.OptionalAs.impl [concrete] +// CHECK:STDOUT: %Core.import_ref.017d8: @T.as_type.as.OptionalAs.impl.%T.as_type.as.OptionalAs.impl.Convert.type (%T.as_type.as.OptionalAs.impl.Convert.type.774) = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.OptionalAs.impl.%T.as_type.as.OptionalAs.impl.Convert (constants.%T.as_type.as.OptionalAs.impl.Convert.5f9)] +// CHECK:STDOUT: %OptionalAs.impl_witness_table.efa = impl_witness_table (%Core.import_ref.017d8), @T.as_type.as.OptionalAs.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F(%input.param: %ptr.00a) { @@ -457,6 +458,7 @@ fn F() { // CHECK:STDOUT: %OptionalStorage.facet: %OptionalStorage.type = facet_value %ptr.00a, (%OptionalStorage.impl_witness.570) [concrete] // CHECK:STDOUT: %Optional.752: type = class_type @Optional, @Optional(%OptionalStorage.facet) [concrete] // CHECK:STDOUT: %pattern_type.d62: type = pattern_type %Optional.752 [concrete] +// CHECK:STDOUT: %output.patt: %pattern_type.d62 = value_binding_pattern output [concrete] // CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] // CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] // CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] @@ -508,11 +510,14 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %output.patt: %pattern_type.d62 = value_binding_pattern output [concrete] +// CHECK:STDOUT: %output.patt: %pattern_type.d62 = value_binding_pattern output [concrete = constants.%output.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc10_49: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] // CHECK:STDOUT: %foo.call: init %Optional.752 = call imports.%foo.decl() +// CHECK:STDOUT: %.loc10_57.1: ref %Optional.752 = temporary_storage +// CHECK:STDOUT: %.loc10_57.2: ref %Optional.752 = temporary %.loc10_57.1, %foo.call +// CHECK:STDOUT: %.loc10_57.3: %Optional.752 = acquire_value %.loc10_57.2 // CHECK:STDOUT: %.loc10_45.1: type = splice_block %Optional [concrete = constants.%Optional.752] { // CHECK:STDOUT: %Core.ref: = name_ref Core, imports.%Core [concrete = imports.%Core] // CHECK:STDOUT: %Optional.ref: %Optional.type = name_ref Optional, imports.%Core.Optional [concrete = constants.%Optional.generic] @@ -523,9 +528,6 @@ fn F() { // CHECK:STDOUT: %.loc10_45.2: %OptionalStorage.type = converted %ptr, %OptionalStorage.facet [concrete = constants.%OptionalStorage.facet] // CHECK:STDOUT: %Optional: type = class_type @Optional, @Optional(constants.%OptionalStorage.facet) [concrete = constants.%Optional.752] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc10_57.1: ref %Optional.752 = temporary_storage -// CHECK:STDOUT: %.loc10_57.2: ref %Optional.752 = temporary %.loc10_57.1, %foo.call -// CHECK:STDOUT: %.loc10_57.3: %Optional.752 = acquire_value %.loc10_57.2 // CHECK:STDOUT: %output: %Optional.752 = value_binding output, %.loc10_57.3 // CHECK:STDOUT: %Destroy.Op.bound: = bound_method %.loc10_57.2, constants.%Destroy.Op.1a2547.4 // CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%.loc10_57.2) @@ -555,6 +557,8 @@ fn F() { // CHECK:STDOUT: %ptr.00a: type = ptr_type %Cpp.void [concrete] // CHECK:STDOUT: %ptr.6f9: type = ptr_type %ptr.00a [concrete] // CHECK:STDOUT: %pattern_type.c1e: type = pattern_type %ptr.6f9 [concrete] +// CHECK:STDOUT: %non_nullable_pointer.patt: %pattern_type.c1e = ref_binding_pattern non_nullable_pointer [concrete] +// CHECK:STDOUT: %non_nullable_pointer.var_patt: %pattern_type.c1e = var_pattern %non_nullable_pointer.patt [concrete] // CHECK:STDOUT: %Return.cpp_overload_set.type: type = cpp_overload_set_type @Return.cpp_overload_set [concrete] // CHECK:STDOUT: %Return.cpp_overload_set.value: %Return.cpp_overload_set.type = cpp_overload_set_value @Return.cpp_overload_set [concrete] // CHECK:STDOUT: %Return.type: type = fn_type @Return [concrete] @@ -591,8 +595,8 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %non_nullable_pointer.patt: %pattern_type.c1e = ref_binding_pattern non_nullable_pointer [concrete] -// CHECK:STDOUT: %non_nullable_pointer.var_patt: %pattern_type.c1e = var_pattern %non_nullable_pointer.patt [concrete] +// CHECK:STDOUT: %non_nullable_pointer.patt: %pattern_type.c1e = ref_binding_pattern non_nullable_pointer [concrete = constants.%non_nullable_pointer.patt] +// CHECK:STDOUT: %non_nullable_pointer.var_patt: %pattern_type.c1e = var_pattern %non_nullable_pointer.patt [concrete = constants.%non_nullable_pointer.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %non_nullable_pointer.var: ref %ptr.6f9 = var %non_nullable_pointer.var_patt // CHECK:STDOUT: %Cpp.ref.loc11_42: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] @@ -626,6 +630,8 @@ fn F() { // CHECK:STDOUT: %const: type = const_type %Cpp.void [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %const [concrete] // CHECK:STDOUT: %pattern_type.c83: type = pattern_type %ptr [concrete] +// CHECK:STDOUT: %const_void_pointer.patt: %pattern_type.c83 = ref_binding_pattern const_void_pointer [concrete] +// CHECK:STDOUT: %const_void_pointer.var_patt: %pattern_type.c83 = var_pattern %const_void_pointer.patt [concrete] // CHECK:STDOUT: %Return.cpp_overload_set.type: type = cpp_overload_set_type @Return.cpp_overload_set [concrete] // CHECK:STDOUT: %Return.cpp_overload_set.value: %Return.cpp_overload_set.type = cpp_overload_set_value @Return.cpp_overload_set [concrete] // CHECK:STDOUT: %Return.type: type = fn_type @Return [concrete] @@ -662,8 +668,8 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %const_void_pointer.patt: %pattern_type.c83 = ref_binding_pattern const_void_pointer [concrete] -// CHECK:STDOUT: %const_void_pointer.var_patt: %pattern_type.c83 = var_pattern %const_void_pointer.patt [concrete] +// CHECK:STDOUT: %const_void_pointer.patt: %pattern_type.c83 = ref_binding_pattern const_void_pointer [concrete = constants.%const_void_pointer.patt] +// CHECK:STDOUT: %const_void_pointer.var_patt: %pattern_type.c83 = var_pattern %const_void_pointer.patt [concrete = constants.%const_void_pointer.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %const_void_pointer.var: ref %ptr = var %const_void_pointer.var_patt // CHECK:STDOUT: %Cpp.ref.loc11_45: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] diff --git a/toolchain/check/testdata/interop/cpp/impls/as.carbon b/toolchain/check/testdata/interop/cpp/impls/as.carbon index b87040e506c0..2af6030f9093 100644 --- a/toolchain/check/testdata/interop/cpp/impls/as.carbon +++ b/toolchain/check/testdata/interop/cpp/impls/as.carbon @@ -305,6 +305,7 @@ fn ConversionExplicit(s: Cpp.ConditionallyExplicitFalse) { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %ConditionallyExplicit.3cd: type = class_type @ConditionallyExplicit.1 [concrete] // CHECK:STDOUT: %pattern_type.be2: type = pattern_type %ConditionallyExplicit.3cd [concrete] +// CHECK:STDOUT: %_.patt.3ad: %pattern_type.be2 = value_binding_pattern _ [concrete] // CHECK:STDOUT: %ptr.5f6: type = ptr_type %Source [concrete] // CHECK:STDOUT: %ptr.bb5: type = ptr_type %ConditionallyExplicit.3cd [concrete] // CHECK:STDOUT: %ConditionallyExplicit__carbon_thunk.type.c9ab94.1: type = fn_type @ConditionallyExplicit__carbon_thunk.1 [concrete] @@ -323,6 +324,7 @@ fn ConversionExplicit(s: Cpp.ConditionallyExplicitFalse) { // CHECK:STDOUT: %ConditionallyExplicit.Op.4dca31.2: %ConditionallyExplicit.Op.type.83af6e.2 = struct_value () [concrete] // CHECK:STDOUT: %Dest: type = class_type @Dest [concrete] // CHECK:STDOUT: %pattern_type.b72: type = pattern_type %Dest [concrete] +// CHECK:STDOUT: %_.patt.664: %pattern_type.b72 = value_binding_pattern _ [concrete] // CHECK:STDOUT: %ptr.ca8: type = ptr_type %Dest [concrete] // CHECK:STDOUT: %Dest__carbon_thunk.type: type = fn_type @Dest__carbon_thunk [concrete] // CHECK:STDOUT: %Dest__carbon_thunk: %Dest__carbon_thunk.type = struct_value () [concrete] @@ -379,13 +381,9 @@ fn ConversionExplicit(s: Cpp.ConditionallyExplicitFalse) { // CHECK:STDOUT: fn @ConstructorNotExplicit(%s.param: %Source) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt: %pattern_type.be2 = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt: %pattern_type.be2 = value_binding_pattern _ [concrete = constants.%_.patt.3ad] // CHECK:STDOUT: } // CHECK:STDOUT: %s.ref.loc8: %Source = name_ref s, %s -// CHECK:STDOUT: %.loc8_13: type = splice_block %ConditionallyExplicitFalse.ref.loc8 [concrete = constants.%ConditionallyExplicit.3cd] { -// CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %ConditionallyExplicitFalse.ref.loc8: type = name_ref ConditionallyExplicitFalse, imports.%ConditionallyExplicit.decl.996 [concrete = constants.%ConditionallyExplicit.3cd] -// CHECK:STDOUT: } // CHECK:STDOUT: %.loc8_43.1: ref %ConditionallyExplicit.3cd = temporary_storage // CHECK:STDOUT: %.loc8_43.2: ref %Source = value_as_ref %s.ref.loc8 // CHECK:STDOUT: %addr.loc8_43.1: %ptr.5f6 = addr_of %.loc8_43.2 @@ -395,6 +393,10 @@ fn ConversionExplicit(s: Cpp.ConditionallyExplicitFalse) { // CHECK:STDOUT: %.loc8_43.4: init %ConditionallyExplicit.3cd = converted %s.ref.loc8, %.loc8_43.3 // CHECK:STDOUT: %.loc8_43.5: ref %ConditionallyExplicit.3cd = temporary %.loc8_43.1, %.loc8_43.4 // CHECK:STDOUT: %.loc8_43.6: %ConditionallyExplicit.3cd = acquire_value %.loc8_43.5 +// CHECK:STDOUT: %.loc8_13: type = splice_block %ConditionallyExplicitFalse.ref.loc8 [concrete = constants.%ConditionallyExplicit.3cd] { +// CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %ConditionallyExplicitFalse.ref.loc8: type = name_ref ConditionallyExplicitFalse, imports.%ConditionallyExplicit.decl.996 [concrete = constants.%ConditionallyExplicit.3cd] +// CHECK:STDOUT: } // CHECK:STDOUT: %_: %ConditionallyExplicit.3cd = value_binding _, %.loc8_43.6 // CHECK:STDOUT: %s.ref.loc9: %Source = name_ref s, %s // CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] @@ -443,13 +445,9 @@ fn ConversionExplicit(s: Cpp.ConditionallyExplicitFalse) { // CHECK:STDOUT: fn @ConversionNotExplicit(%s.param: %ConditionallyExplicit.3cd) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt: %pattern_type.b72 = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt: %pattern_type.b72 = value_binding_pattern _ [concrete = constants.%_.patt.664] // CHECK:STDOUT: } // CHECK:STDOUT: %s.ref.loc21: %ConditionallyExplicit.3cd = name_ref s, %s -// CHECK:STDOUT: %.loc21_13: type = splice_block %Dest.ref.loc21 [concrete = constants.%Dest] { -// CHECK:STDOUT: %Cpp.ref.loc21: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %Dest.ref.loc21: type = name_ref Dest, imports.%Dest.decl [concrete = constants.%Dest] -// CHECK:STDOUT: } // CHECK:STDOUT: %.loc21_21.1: ref %Dest = temporary_storage // CHECK:STDOUT: %addr.loc21: %ptr.ca8 = addr_of %.loc21_21.1 // CHECK:STDOUT: %Dest__carbon_thunk.call.loc21: init %empty_tuple.type = call imports.%Dest__carbon_thunk.decl(%s.ref.loc21, %addr.loc21) @@ -457,6 +455,10 @@ fn ConversionExplicit(s: Cpp.ConditionallyExplicitFalse) { // CHECK:STDOUT: %.loc21_21.3: init %Dest = converted %s.ref.loc21, %.loc21_21.2 // CHECK:STDOUT: %.loc21_21.4: ref %Dest = temporary %.loc21_21.1, %.loc21_21.3 // CHECK:STDOUT: %.loc21_21.5: %Dest = acquire_value %.loc21_21.4 +// CHECK:STDOUT: %.loc21_13: type = splice_block %Dest.ref.loc21 [concrete = constants.%Dest] { +// CHECK:STDOUT: %Cpp.ref.loc21: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %Dest.ref.loc21: type = name_ref Dest, imports.%Dest.decl [concrete = constants.%Dest] +// CHECK:STDOUT: } // CHECK:STDOUT: %_: %Dest = value_binding _, %.loc21_21.5 // CHECK:STDOUT: %s.ref.loc22: %ConditionallyExplicit.3cd = name_ref s, %s // CHECK:STDOUT: %Cpp.ref.loc22: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] @@ -504,9 +506,11 @@ fn ConversionExplicit(s: Cpp.ConditionallyExplicitFalse) { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %ConditionallyExplicit.9d4: type = class_type @ConditionallyExplicit.1 [concrete] // CHECK:STDOUT: %pattern_type.04c: type = pattern_type %ConditionallyExplicit.9d4 [concrete] +// CHECK:STDOUT: %_.patt.d67: %pattern_type.04c = value_binding_pattern _ [concrete] // CHECK:STDOUT: %ConditionallyExplicit.3cd: type = class_type @ConditionallyExplicit.2 [concrete] // CHECK:STDOUT: %Dest.980: type = class_type @Dest [concrete] // CHECK:STDOUT: %pattern_type.b72: type = pattern_type %Dest.980 [concrete] +// CHECK:STDOUT: %_.patt.664: %pattern_type.b72 = value_binding_pattern _ [concrete] // CHECK:STDOUT: %ptr.ca8: type = ptr_type %Dest.980 [concrete] // CHECK:STDOUT: %Dest__carbon_thunk.type: type = fn_type @Dest__carbon_thunk [concrete] // CHECK:STDOUT: %Dest__carbon_thunk: %Dest__carbon_thunk.type = struct_value () [concrete] @@ -543,14 +547,14 @@ fn ConversionExplicit(s: Cpp.ConditionallyExplicitFalse) { // CHECK:STDOUT: fn @ConstructorExplicit(%s.param: %Source) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt: %pattern_type.04c = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt: %pattern_type.04c = value_binding_pattern _ [concrete = constants.%_.patt.d67] // CHECK:STDOUT: } // CHECK:STDOUT: %s.ref: %Source = name_ref s, %s +// CHECK:STDOUT: %.loc15_42: %ConditionallyExplicit.9d4 = converted %s.ref, [concrete = ] // CHECK:STDOUT: %.loc15_13: type = splice_block %ConditionallyExplicitTrue.ref [concrete = constants.%ConditionallyExplicit.9d4] { // CHECK:STDOUT: %Cpp.ref.loc15: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %ConditionallyExplicitTrue.ref: type = name_ref ConditionallyExplicitTrue, imports.%ConditionallyExplicit.decl.6ab [concrete = constants.%ConditionallyExplicit.9d4] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc15_42: %ConditionallyExplicit.9d4 = converted %s.ref, [concrete = ] // CHECK:STDOUT: %_: %ConditionallyExplicit.9d4 = value_binding _, [concrete = ] // CHECK:STDOUT: // CHECK:STDOUT: } @@ -558,13 +562,9 @@ fn ConversionExplicit(s: Cpp.ConditionallyExplicitFalse) { // CHECK:STDOUT: fn @ConversionExplicit(%s.param: %ConditionallyExplicit.3cd) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt: %pattern_type.b72 = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt: %pattern_type.b72 = value_binding_pattern _ [concrete = constants.%_.patt.664] // CHECK:STDOUT: } // CHECK:STDOUT: %s.ref: %ConditionallyExplicit.3cd = name_ref s, %s -// CHECK:STDOUT: %.loc21_13: type = splice_block %Dest.ref [concrete = constants.%Dest.980] { -// CHECK:STDOUT: %Cpp.ref.loc21: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %Dest.ref: type = name_ref Dest, imports.%Dest.decl [concrete = constants.%Dest.980] -// CHECK:STDOUT: } // CHECK:STDOUT: %.loc21_21.1: ref %Dest.980 = temporary_storage // CHECK:STDOUT: %addr: %ptr.ca8 = addr_of %.loc21_21.1 // CHECK:STDOUT: %Dest__carbon_thunk.call: init %empty_tuple.type = call imports.%Dest__carbon_thunk.decl(%s.ref, %addr) @@ -572,6 +572,10 @@ fn ConversionExplicit(s: Cpp.ConditionallyExplicitFalse) { // CHECK:STDOUT: %.loc21_21.3: init %Dest.980 = converted %s.ref, %.loc21_21.2 // CHECK:STDOUT: %.loc21_21.4: ref %Dest.980 = temporary %.loc21_21.1, %.loc21_21.3 // CHECK:STDOUT: %.loc21_21.5: %Dest.980 = acquire_value %.loc21_21.4 +// CHECK:STDOUT: %.loc21_13: type = splice_block %Dest.ref [concrete = constants.%Dest.980] { +// CHECK:STDOUT: %Cpp.ref.loc21: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %Dest.ref: type = name_ref Dest, imports.%Dest.decl [concrete = constants.%Dest.980] +// CHECK:STDOUT: } // CHECK:STDOUT: %_: %Dest.980 = value_binding _, %.loc21_21.5 // CHECK:STDOUT: // CHECK:STDOUT: %Dest.Op.bound: = bound_method %.loc21_21.4, constants.%Dest.Op diff --git a/toolchain/check/testdata/interop/cpp/impls/copy.carbon b/toolchain/check/testdata/interop/cpp/impls/copy.carbon index 0754eb499c8f..dc25704db06a 100644 --- a/toolchain/check/testdata/interop/cpp/impls/copy.carbon +++ b/toolchain/check/testdata/interop/cpp/impls/copy.carbon @@ -324,8 +324,10 @@ fn EqualWitnesses(p: Wrap(Cpp.Copyable)*) -> Wrap(Cpp.Copyable)* { // CHECK:STDOUT: %Copy.ref: %Copy.type.705 = name_ref Copy, file.%Copy.decl [concrete = constants.%Copy] // CHECK:STDOUT: %c.ref: %Copyable = name_ref c, %c // CHECK:STDOUT: -// CHECK:STDOUT: %Copy.facet: %Copy.type.bd0 = facet_value constants.%Copyable, (constants.%custom_witness.d0d) [concrete = constants.%Copy.facet.07e] -// CHECK:STDOUT: %.loc12: %Copy.type.bd0 = converted constants.%Copyable, %Copy.facet [concrete = constants.%Copy.facet.07e] +// CHECK:STDOUT: %Copy.facet.loc12_16.1: %Copy.type.bd0 = facet_value constants.%Copyable, (constants.%custom_witness.d0d) [concrete = constants.%Copy.facet.07e] +// CHECK:STDOUT: %.loc12_16.1: %Copy.type.bd0 = converted constants.%Copyable, %Copy.facet.loc12_16.1 [concrete = constants.%Copy.facet.07e] +// CHECK:STDOUT: %Copy.facet.loc12_16.2: %Copy.type.bd0 = facet_value constants.%Copyable, (constants.%custom_witness.d0d) [concrete = constants.%Copy.facet.07e] +// CHECK:STDOUT: %.loc12_16.2: %Copy.type.bd0 = converted constants.%Copyable, %Copy.facet.loc12_16.2 [concrete = constants.%Copy.facet.07e] // CHECK:STDOUT: %Copy.specific_fn: = specific_function %Copy.ref, @Copy.loc6(constants.%Copy.facet.07e) [concrete = constants.%Copy.specific_fn] // CHECK:STDOUT: // CHECK:STDOUT: %Copy.call: init %Copyable to %.loc10_34.1 = call %Copy.specific_fn(%c.ref) diff --git a/toolchain/check/testdata/interop/cpp/impls/destroy.carbon b/toolchain/check/testdata/interop/cpp/impls/destroy.carbon index 85f89f9fc3d3..b492d5a1fd33 100644 --- a/toolchain/check/testdata/interop/cpp/impls/destroy.carbon +++ b/toolchain/check/testdata/interop/cpp/impls/destroy.carbon @@ -234,6 +234,8 @@ fn F() { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.bdc: type = pattern_type %PublicDestructor [concrete] +// CHECK:STDOUT: %a.patt.e26: %pattern_type.bdc = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt.17b: %pattern_type.bdc = var_pattern %a.patt.e26 [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %PublicDestructor.val: %PublicDestructor = struct_value () [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] @@ -247,7 +249,11 @@ fn F() { // CHECK:STDOUT: %TrivialDestroy: %TrivialDestroy.type = struct_value () [concrete] // CHECK:STDOUT: %TrivialDestructor: type = class_type @TrivialDestructor [concrete] // CHECK:STDOUT: %pattern_type.a12: type = pattern_type %TrivialDestructor [concrete] +// CHECK:STDOUT: %a.patt.b64: %pattern_type.a12 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt.d25: %pattern_type.a12 = var_pattern %a.patt.b64 [concrete] // CHECK:STDOUT: %TrivialDestructor.val: %TrivialDestructor = struct_value () [concrete] +// CHECK:STDOUT: %self.param_patt.e73: %pattern_type.a12 = ref_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.b81: %pattern_type.a12 = at_binding_pattern self, %self.param_patt.e73 [concrete] // CHECK:STDOUT: %TrivialDestructor.cpp_destructor.type: type = fn_type @TrivialDestructor.cpp_destructor [concrete] // CHECK:STDOUT: %TrivialDestructor.cpp_destructor: %TrivialDestructor.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: %Destroy.facet.c09: %Destroy.type = facet_value %TrivialDestructor, (%custom_witness.c5a) [concrete] @@ -271,8 +277,8 @@ fn F() { // CHECK:STDOUT: %Destroy.WithSelf.Op.decl: %Destroy.WithSelf.Op.type.d3e = fn_decl @Destroy.WithSelf.Op [symbolic = @Destroy.WithSelf.%Destroy.WithSelf.Op (constants.%Destroy.WithSelf.Op.42b)] {} {} // CHECK:STDOUT: %TrivialDestructor.decl: type = class_decl @TrivialDestructor [concrete = constants.%TrivialDestructor] {} {} // CHECK:STDOUT: %TrivialDestructor.cpp_destructor.decl: %TrivialDestructor.cpp_destructor.type = fn_decl @TrivialDestructor.cpp_destructor [concrete = constants.%TrivialDestructor.cpp_destructor] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.a12 = ref_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.a12 = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.a12 = ref_param_pattern [concrete = constants.%self.param_patt.e73] +// CHECK:STDOUT: %self.patt: %pattern_type.a12 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.b81] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %TrivialDestructor = ref_param call_param0 // CHECK:STDOUT: %self: ref %TrivialDestructor = ref_binding self, %self.param @@ -315,8 +321,8 @@ fn F() { // CHECK:STDOUT: fn @PublicDestroy() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.bdc = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.bdc = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.bdc = ref_binding_pattern a [concrete = constants.%a.patt.e26] +// CHECK:STDOUT: %a.var_patt: %pattern_type.bdc = var_pattern %a.patt [concrete = constants.%a.var_patt.17b] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %PublicDestructor = var %a.var_patt // CHECK:STDOUT: %.loc11_41.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] @@ -338,8 +344,8 @@ fn F() { // CHECK:STDOUT: fn @TrivialDestroy() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.a12 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.a12 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.a12 = ref_binding_pattern a [concrete = constants.%a.patt.b64] +// CHECK:STDOUT: %a.var_patt: %pattern_type.a12 = var_pattern %a.patt [concrete = constants.%a.var_patt.d25] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %TrivialDestructor = var %a.var_patt // CHECK:STDOUT: %.loc15_42.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] @@ -352,8 +358,8 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %TrivialDestructor = ref_binding a, %a.var // CHECK:STDOUT: %TrivialDestructor.Op.decl: %TrivialDestructor.Op.type = fn_decl @TrivialDestructor.Op [concrete = constants.%TrivialDestructor.Op] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.a12 = ref_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.a12 = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %.1: %pattern_type.a12 = specific_constant constants.%self.param_patt.e73, @Destroy.WithSelf.Op(constants.%Destroy.facet.c09) [concrete = constants.%self.param_patt.e73] +// CHECK:STDOUT: %self.patt: %pattern_type.a12 = at_binding_pattern self, %.1 [concrete = constants.%self.patt.b81] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %TrivialDestructor = ref_param call_param0 // CHECK:STDOUT: %self: ref %TrivialDestructor = ref_binding self, %self.param @@ -384,6 +390,8 @@ fn F() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %struct_type.base.454: type = struct_type {.base: %ProtectedDestructor} [concrete] // CHECK:STDOUT: %pattern_type.746: type = pattern_type %Derived [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.746 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.746 = var_pattern %a.patt [concrete] // CHECK:STDOUT: %empty_struct.a40: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.f5e: type = struct_type {.base: %empty_struct_type} [concrete] // CHECK:STDOUT: %struct: %struct_type.base.f5e = struct_value (%empty_struct.a40) [concrete] @@ -398,8 +406,8 @@ fn F() { // CHECK:STDOUT: fn @DestroyClassWithProtectedBaseDestructor() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.746 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.746 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.746 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.746 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %Derived = var %a.var_patt // CHECK:STDOUT: %.loc20_37.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct.a40] @@ -437,6 +445,8 @@ fn F() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %struct_type.base.9aa: type = struct_type {.base: %PrivateDestructor} [concrete] // CHECK:STDOUT: %pattern_type.746: type = pattern_type %Derived [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.746 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.746 = var_pattern %a.patt [concrete] // CHECK:STDOUT: %empty_struct.a40: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.f5e: type = struct_type {.base: %empty_struct_type} [concrete] // CHECK:STDOUT: %struct: %struct_type.base.f5e = struct_value (%empty_struct.a40) [concrete] @@ -451,8 +461,8 @@ fn F() { // CHECK:STDOUT: fn @DestroyClassWithPrivateBaseDestructor() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.746 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.746 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.746 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.746 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %Derived = var %a.var_patt // CHECK:STDOUT: %.loc21_37.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct.a40] diff --git a/toolchain/check/testdata/interop/cpp/impls/implicit_as.carbon b/toolchain/check/testdata/interop/cpp/impls/implicit_as.carbon index 12533f31efa4..ac015fc2ed1f 100644 --- a/toolchain/check/testdata/interop/cpp/impls/implicit_as.carbon +++ b/toolchain/check/testdata/interop/cpp/impls/implicit_as.carbon @@ -418,6 +418,7 @@ fn InitFromStruct() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Dest: type = class_type @Dest [concrete] // CHECK:STDOUT: %pattern_type.b72: type = pattern_type %Dest [concrete] +// CHECK:STDOUT: %_.patt.664: %pattern_type.b72 = value_binding_pattern _ [concrete] // CHECK:STDOUT: %ptr.ca8: type = ptr_type %Dest [concrete] // CHECK:STDOUT: %Dest__carbon_thunk.type.eb4c5e.1: type = fn_type @Dest__carbon_thunk.1 [concrete] // CHECK:STDOUT: %Dest__carbon_thunk.c8e433.1: %Dest__carbon_thunk.type.eb4c5e.1 = struct_value () [concrete] @@ -431,6 +432,7 @@ fn InitFromStruct() { // CHECK:STDOUT: %Source2: type = class_type @Source2 [concrete] // CHECK:STDOUT: %Dest2: type = class_type @Dest2 [concrete] // CHECK:STDOUT: %pattern_type.a68: type = pattern_type %Dest2 [concrete] +// CHECK:STDOUT: %_.patt.ff1: %pattern_type.a68 = value_binding_pattern _ [concrete] // CHECK:STDOUT: %ptr.0db: type = ptr_type %Source2 [concrete] // CHECK:STDOUT: %ptr.802: type = ptr_type %Dest2 [concrete] // CHECK:STDOUT: %Dest2__carbon_thunk.type: type = fn_type @Dest2__carbon_thunk [concrete] @@ -485,13 +487,9 @@ fn InitFromStruct() { // CHECK:STDOUT: fn @UserConversion(%s.param: %Source) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt: %pattern_type.b72 = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt: %pattern_type.b72 = value_binding_pattern _ [concrete = constants.%_.patt.664] // CHECK:STDOUT: } // CHECK:STDOUT: %s.ref: %Source = name_ref s, %s -// CHECK:STDOUT: %.loc8_13: type = splice_block %Dest.ref [concrete = constants.%Dest] { -// CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %Dest.ref: type = name_ref Dest, imports.%Dest.decl [concrete = constants.%Dest] -// CHECK:STDOUT: } // CHECK:STDOUT: %.loc8_21.1: ref %Dest = temporary_storage // CHECK:STDOUT: %addr: %ptr.ca8 = addr_of %.loc8_21.1 // CHECK:STDOUT: %Dest__carbon_thunk.call: init %empty_tuple.type = call imports.%Dest__carbon_thunk.decl.a8fbc1.1(%s.ref, %addr) @@ -499,6 +497,10 @@ fn InitFromStruct() { // CHECK:STDOUT: %.loc8_21.3: init %Dest = converted %s.ref, %.loc8_21.2 // CHECK:STDOUT: %.loc8_21.4: ref %Dest = temporary %.loc8_21.1, %.loc8_21.3 // CHECK:STDOUT: %.loc8_21.5: %Dest = acquire_value %.loc8_21.4 +// CHECK:STDOUT: %.loc8_13: type = splice_block %Dest.ref [concrete = constants.%Dest] { +// CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %Dest.ref: type = name_ref Dest, imports.%Dest.decl [concrete = constants.%Dest] +// CHECK:STDOUT: } // CHECK:STDOUT: %_: %Dest = value_binding _, %.loc8_21.5 // CHECK:STDOUT: // CHECK:STDOUT: %Dest.Op.bound: = bound_method %.loc8_21.4, constants.%Dest.Op @@ -511,13 +513,9 @@ fn InitFromStruct() { // CHECK:STDOUT: fn @NonConstConversion.loc12(%s.param: ref %NonConstConversion.689) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt: %pattern_type.b72 = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt: %pattern_type.b72 = value_binding_pattern _ [concrete = constants.%_.patt.664] // CHECK:STDOUT: } // CHECK:STDOUT: %s.ref: ref %NonConstConversion.689 = name_ref s, %s -// CHECK:STDOUT: %.loc14_13: type = splice_block %Dest.ref [concrete = constants.%Dest] { -// CHECK:STDOUT: %Cpp.ref.loc14: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %Dest.ref: type = name_ref Dest, imports.%Dest.decl [concrete = constants.%Dest] -// CHECK:STDOUT: } // CHECK:STDOUT: %.loc14_21.1: ref %Dest = temporary_storage // CHECK:STDOUT: %addr: %ptr.ca8 = addr_of %.loc14_21.1 // CHECK:STDOUT: %Dest__carbon_thunk.call: init %empty_tuple.type = call imports.%Dest__carbon_thunk.decl.a8fbc1.2(%s.ref, %addr) @@ -525,6 +523,10 @@ fn InitFromStruct() { // CHECK:STDOUT: %.loc14_21.3: init %Dest = converted %s.ref, %.loc14_21.2 // CHECK:STDOUT: %.loc14_21.4: ref %Dest = temporary %.loc14_21.1, %.loc14_21.3 // CHECK:STDOUT: %.loc14_21.5: %Dest = acquire_value %.loc14_21.4 +// CHECK:STDOUT: %.loc14_13: type = splice_block %Dest.ref [concrete = constants.%Dest] { +// CHECK:STDOUT: %Cpp.ref.loc14: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %Dest.ref: type = name_ref Dest, imports.%Dest.decl [concrete = constants.%Dest] +// CHECK:STDOUT: } // CHECK:STDOUT: %_: %Dest = value_binding _, %.loc14_21.5 // CHECK:STDOUT: %Dest.Op.bound: = bound_method %.loc14_21.4, constants.%Dest.Op // CHECK:STDOUT: %Op.ref: %Dest.cpp_destructor.type = name_ref Op, imports.%Dest.cpp_destructor.decl [concrete = constants.%Dest.cpp_destructor] @@ -536,13 +538,9 @@ fn InitFromStruct() { // CHECK:STDOUT: fn @ConstructorConversion(%s.param: %Source2) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt: %pattern_type.a68 = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt: %pattern_type.a68 = value_binding_pattern _ [concrete = constants.%_.patt.ff1] // CHECK:STDOUT: } // CHECK:STDOUT: %s.ref: %Source2 = name_ref s, %s -// CHECK:STDOUT: %.loc20_13: type = splice_block %Dest2.ref [concrete = constants.%Dest2] { -// CHECK:STDOUT: %Cpp.ref.loc20: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %Dest2.ref: type = name_ref Dest2, imports.%Dest2.decl [concrete = constants.%Dest2] -// CHECK:STDOUT: } // CHECK:STDOUT: %.loc20_22.1: ref %Dest2 = temporary_storage // CHECK:STDOUT: %.loc20_22.2: ref %Source2 = value_as_ref %s.ref // CHECK:STDOUT: %addr.loc20_22.1: %ptr.0db = addr_of %.loc20_22.2 @@ -552,6 +550,10 @@ fn InitFromStruct() { // CHECK:STDOUT: %.loc20_22.4: init %Dest2 = converted %s.ref, %.loc20_22.3 // CHECK:STDOUT: %.loc20_22.5: ref %Dest2 = temporary %.loc20_22.1, %.loc20_22.4 // CHECK:STDOUT: %.loc20_22.6: %Dest2 = acquire_value %.loc20_22.5 +// CHECK:STDOUT: %.loc20_13: type = splice_block %Dest2.ref [concrete = constants.%Dest2] { +// CHECK:STDOUT: %Cpp.ref.loc20: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %Dest2.ref: type = name_ref Dest2, imports.%Dest2.decl [concrete = constants.%Dest2] +// CHECK:STDOUT: } // CHECK:STDOUT: %_: %Dest2 = value_binding _, %.loc20_22.6 // CHECK:STDOUT: // CHECK:STDOUT: %Dest2.Op.bound: = bound_method %.loc20_22.5, constants.%Dest2.Op @@ -567,6 +569,7 @@ fn InitFromStruct() { // CHECK:STDOUT: %NonConstConversion: type = class_type @NonConstConversion [concrete] // CHECK:STDOUT: %Dest.980: type = class_type @Dest [concrete] // CHECK:STDOUT: %pattern_type.b72: type = pattern_type %Dest.980 [concrete] +// CHECK:STDOUT: %_.patt: %pattern_type.b72 = value_binding_pattern _ [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -582,14 +585,14 @@ fn InitFromStruct() { // CHECK:STDOUT: fn @NonConstConversionTest(%s.param: %NonConstConversion) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt: %pattern_type.b72 = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt: %pattern_type.b72 = value_binding_pattern _ [concrete = constants.%_.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %s.ref: %NonConstConversion = name_ref s, %s +// CHECK:STDOUT: %.loc15_21: %Dest.980 = converted %s.ref, [concrete = ] // CHECK:STDOUT: %.loc15_13: type = splice_block %Dest.ref [concrete = constants.%Dest.980] { // CHECK:STDOUT: %Cpp.ref.loc15: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, imports.%Dest.decl [concrete = constants.%Dest.980] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc15_21: %Dest.980 = converted %s.ref, [concrete = ] // CHECK:STDOUT: %_: %Dest.980 = value_binding _, [concrete = ] // CHECK:STDOUT: // CHECK:STDOUT: } @@ -601,6 +604,7 @@ fn InitFromStruct() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %InaccessibleConstructor: type = class_type @InaccessibleConstructor [concrete] // CHECK:STDOUT: %pattern_type.824: type = pattern_type %InaccessibleConstructor [concrete] +// CHECK:STDOUT: %_.patt.f1f: %pattern_type.824 = value_binding_pattern _ [concrete] // CHECK:STDOUT: %ptr.5f6: type = ptr_type %Source [concrete] // CHECK:STDOUT: %ptr.859: type = ptr_type %InaccessibleConstructor [concrete] // CHECK:STDOUT: %InaccessibleConstructor__carbon_thunk.type: type = fn_type @InaccessibleConstructor__carbon_thunk [concrete] @@ -612,6 +616,7 @@ fn InitFromStruct() { // CHECK:STDOUT: %InaccessibleConversion: type = class_type @InaccessibleConversion [concrete] // CHECK:STDOUT: %Dest: type = class_type @Dest [concrete] // CHECK:STDOUT: %pattern_type.b72: type = pattern_type %Dest [concrete] +// CHECK:STDOUT: %_.patt.664: %pattern_type.b72 = value_binding_pattern _ [concrete] // CHECK:STDOUT: %ptr.ca8: type = ptr_type %Dest [concrete] // CHECK:STDOUT: %Dest__carbon_thunk.type: type = fn_type @Dest__carbon_thunk [concrete] // CHECK:STDOUT: %Dest__carbon_thunk: %Dest__carbon_thunk.type = struct_value () [concrete] @@ -658,13 +663,9 @@ fn InitFromStruct() { // CHECK:STDOUT: fn @InaccessibleConstructorTest(%s.param: %Source) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt: %pattern_type.824 = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt: %pattern_type.824 = value_binding_pattern _ [concrete = constants.%_.patt.f1f] // CHECK:STDOUT: } // CHECK:STDOUT: %s.ref: %Source = name_ref s, %s -// CHECK:STDOUT: %.loc16_13: type = splice_block %InaccessibleConstructor.ref [concrete = constants.%InaccessibleConstructor] { -// CHECK:STDOUT: %Cpp.ref.loc16: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %InaccessibleConstructor.ref: type = name_ref InaccessibleConstructor, imports.%InaccessibleConstructor.decl [concrete = constants.%InaccessibleConstructor] -// CHECK:STDOUT: } // CHECK:STDOUT: %.loc16_40.1: ref %InaccessibleConstructor = temporary_storage // CHECK:STDOUT: %.loc16_40.2: ref %Source = value_as_ref %s.ref // CHECK:STDOUT: %addr.loc16_40.1: %ptr.5f6 = addr_of %.loc16_40.2 @@ -674,6 +675,10 @@ fn InitFromStruct() { // CHECK:STDOUT: %.loc16_40.4: init %InaccessibleConstructor = converted %s.ref, %.loc16_40.3 // CHECK:STDOUT: %.loc16_40.5: ref %InaccessibleConstructor = temporary %.loc16_40.1, %.loc16_40.4 // CHECK:STDOUT: %.loc16_40.6: %InaccessibleConstructor = acquire_value %.loc16_40.5 +// CHECK:STDOUT: %.loc16_13: type = splice_block %InaccessibleConstructor.ref [concrete = constants.%InaccessibleConstructor] { +// CHECK:STDOUT: %Cpp.ref.loc16: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %InaccessibleConstructor.ref: type = name_ref InaccessibleConstructor, imports.%InaccessibleConstructor.decl [concrete = constants.%InaccessibleConstructor] +// CHECK:STDOUT: } // CHECK:STDOUT: %_: %InaccessibleConstructor = value_binding _, %.loc16_40.6 // CHECK:STDOUT: // CHECK:STDOUT: %InaccessibleConstructor.Op.bound: = bound_method %.loc16_40.5, constants.%InaccessibleConstructor.Op @@ -686,13 +691,9 @@ fn InitFromStruct() { // CHECK:STDOUT: fn @InaccessibleConversionTest(%s.param: %InaccessibleConversion) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt: %pattern_type.b72 = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt: %pattern_type.b72 = value_binding_pattern _ [concrete = constants.%_.patt.664] // CHECK:STDOUT: } // CHECK:STDOUT: %s.ref: %InaccessibleConversion = name_ref s, %s -// CHECK:STDOUT: %.loc30_13: type = splice_block %Dest.ref [concrete = constants.%Dest] { -// CHECK:STDOUT: %Cpp.ref.loc30: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %Dest.ref: type = name_ref Dest, imports.%Dest.decl [concrete = constants.%Dest] -// CHECK:STDOUT: } // CHECK:STDOUT: %.loc30_21.1: ref %Dest = temporary_storage // CHECK:STDOUT: %addr: %ptr.ca8 = addr_of %.loc30_21.1 // CHECK:STDOUT: %Dest__carbon_thunk.call: init %empty_tuple.type = call imports.%Dest__carbon_thunk.decl(%s.ref, %addr) @@ -700,6 +701,10 @@ fn InitFromStruct() { // CHECK:STDOUT: %.loc30_21.3: init %Dest = converted %s.ref, %.loc30_21.2 // CHECK:STDOUT: %.loc30_21.4: ref %Dest = temporary %.loc30_21.1, %.loc30_21.3 // CHECK:STDOUT: %.loc30_21.5: %Dest = acquire_value %.loc30_21.4 +// CHECK:STDOUT: %.loc30_13: type = splice_block %Dest.ref [concrete = constants.%Dest] { +// CHECK:STDOUT: %Cpp.ref.loc30: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %Dest.ref: type = name_ref Dest, imports.%Dest.decl [concrete = constants.%Dest] +// CHECK:STDOUT: } // CHECK:STDOUT: %_: %Dest = value_binding _, %.loc30_21.5 // CHECK:STDOUT: // CHECK:STDOUT: %Dest.Op.bound: = bound_method %.loc30_21.4, constants.%Dest.Op @@ -715,9 +720,11 @@ fn InitFromStruct() { // CHECK:STDOUT: %Source: type = class_type @Source [concrete] // CHECK:STDOUT: %DeletedConstructor: type = class_type @DeletedConstructor [concrete] // CHECK:STDOUT: %pattern_type.937: type = pattern_type %DeletedConstructor [concrete] +// CHECK:STDOUT: %_.patt.a57: %pattern_type.937 = value_binding_pattern _ [concrete] // CHECK:STDOUT: %DeletedConversion: type = class_type @DeletedConversion [concrete] // CHECK:STDOUT: %Dest.980: type = class_type @Dest [concrete] // CHECK:STDOUT: %pattern_type.b72: type = pattern_type %Dest.980 [concrete] +// CHECK:STDOUT: %_.patt.664: %pattern_type.b72 = value_binding_pattern _ [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -737,14 +744,14 @@ fn InitFromStruct() { // CHECK:STDOUT: fn @DeletedConstructorTest(%s.param: %Source) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt: %pattern_type.937 = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt: %pattern_type.937 = value_binding_pattern _ [concrete = constants.%_.patt.a57] // CHECK:STDOUT: } // CHECK:STDOUT: %s.ref: %Source = name_ref s, %s +// CHECK:STDOUT: %.loc15_35: %DeletedConstructor = converted %s.ref, [concrete = ] // CHECK:STDOUT: %.loc15_13: type = splice_block %DeletedConstructor.ref [concrete = constants.%DeletedConstructor] { // CHECK:STDOUT: %Cpp.ref.loc15: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %DeletedConstructor.ref: type = name_ref DeletedConstructor, imports.%DeletedConstructor.decl [concrete = constants.%DeletedConstructor] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc15_35: %DeletedConstructor = converted %s.ref, [concrete = ] // CHECK:STDOUT: %_: %DeletedConstructor = value_binding _, [concrete = ] // CHECK:STDOUT: // CHECK:STDOUT: } @@ -752,14 +759,14 @@ fn InitFromStruct() { // CHECK:STDOUT: fn @DeletedConversionTest(%s.param: %DeletedConversion) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt: %pattern_type.b72 = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt: %pattern_type.b72 = value_binding_pattern _ [concrete = constants.%_.patt.664] // CHECK:STDOUT: } // CHECK:STDOUT: %s.ref: %DeletedConversion = name_ref s, %s +// CHECK:STDOUT: %.loc28_21: %Dest.980 = converted %s.ref, [concrete = ] // CHECK:STDOUT: %.loc28_13: type = splice_block %Dest.ref [concrete = constants.%Dest.980] { // CHECK:STDOUT: %Cpp.ref.loc28: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, imports.%Dest.decl [concrete = constants.%Dest.980] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc28_21: %Dest.980 = converted %s.ref, [concrete = ] // CHECK:STDOUT: %_: %Dest.980 = value_binding _, [concrete = ] // CHECK:STDOUT: // CHECK:STDOUT: } @@ -770,9 +777,11 @@ fn InitFromStruct() { // CHECK:STDOUT: %Source: type = class_type @Source [concrete] // CHECK:STDOUT: %ExplicitConstructor: type = class_type @ExplicitConstructor [concrete] // CHECK:STDOUT: %pattern_type.eae: type = pattern_type %ExplicitConstructor [concrete] +// CHECK:STDOUT: %_.patt.411: %pattern_type.eae = value_binding_pattern _ [concrete] // CHECK:STDOUT: %ExplicitConversion: type = class_type @ExplicitConversion [concrete] // CHECK:STDOUT: %Dest.980: type = class_type @Dest [concrete] // CHECK:STDOUT: %pattern_type.b72: type = pattern_type %Dest.980 [concrete] +// CHECK:STDOUT: %_.patt.664: %pattern_type.b72 = value_binding_pattern _ [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -792,14 +801,14 @@ fn InitFromStruct() { // CHECK:STDOUT: fn @ExplicitConstructorTest(%s.param: %Source) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt: %pattern_type.eae = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt: %pattern_type.eae = value_binding_pattern _ [concrete = constants.%_.patt.411] // CHECK:STDOUT: } // CHECK:STDOUT: %s.ref: %Source = name_ref s, %s +// CHECK:STDOUT: %.loc15_36: %ExplicitConstructor = converted %s.ref, [concrete = ] // CHECK:STDOUT: %.loc15_13: type = splice_block %ExplicitConstructor.ref [concrete = constants.%ExplicitConstructor] { // CHECK:STDOUT: %Cpp.ref.loc15: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %ExplicitConstructor.ref: type = name_ref ExplicitConstructor, imports.%ExplicitConstructor.decl [concrete = constants.%ExplicitConstructor] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc15_36: %ExplicitConstructor = converted %s.ref, [concrete = ] // CHECK:STDOUT: %_: %ExplicitConstructor = value_binding _, [concrete = ] // CHECK:STDOUT: // CHECK:STDOUT: } @@ -807,14 +816,14 @@ fn InitFromStruct() { // CHECK:STDOUT: fn @ExplicitConversionTest(%s.param: %ExplicitConversion) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt: %pattern_type.b72 = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt: %pattern_type.b72 = value_binding_pattern _ [concrete = constants.%_.patt.664] // CHECK:STDOUT: } // CHECK:STDOUT: %s.ref: %ExplicitConversion = name_ref s, %s +// CHECK:STDOUT: %.loc28_21: %Dest.980 = converted %s.ref, [concrete = ] // CHECK:STDOUT: %.loc28_13: type = splice_block %Dest.ref [concrete = constants.%Dest.980] { // CHECK:STDOUT: %Cpp.ref.loc28: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, imports.%Dest.decl [concrete = constants.%Dest.980] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc28_21: %Dest.980 = converted %s.ref, [concrete = ] // CHECK:STDOUT: %_: %Dest.980 = value_binding _, [concrete = ] // CHECK:STDOUT: // CHECK:STDOUT: } @@ -827,6 +836,7 @@ fn InitFromStruct() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %IntConstructor.372: type = class_type @IntConstructor.1 [concrete] // CHECK:STDOUT: %pattern_type.c4e: type = pattern_type %IntConstructor.372 [concrete] +// CHECK:STDOUT: %_.patt.151: %pattern_type.c4e = value_binding_pattern _ [concrete] // CHECK:STDOUT: %ptr.100: type = ptr_type %IntConstructor.372 [concrete] // CHECK:STDOUT: %IntConstructor__carbon_thunk.type: type = fn_type @IntConstructor__carbon_thunk [concrete] // CHECK:STDOUT: %IntConstructor__carbon_thunk: %IntConstructor__carbon_thunk.type = struct_value () [concrete] @@ -857,13 +867,9 @@ fn InitFromStruct() { // CHECK:STDOUT: fn @IntConstructor.loc6(%i.param: %i32) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt: %pattern_type.c4e = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt: %pattern_type.c4e = value_binding_pattern _ [concrete = constants.%_.patt.151] // CHECK:STDOUT: } // CHECK:STDOUT: %i.ref: %i32 = name_ref i, %i -// CHECK:STDOUT: %.loc8_13: type = splice_block %IntConstructor.ref [concrete = constants.%IntConstructor.372] { -// CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %IntConstructor.ref: type = name_ref IntConstructor, imports.%IntConstructor.decl [concrete = constants.%IntConstructor.372] -// CHECK:STDOUT: } // CHECK:STDOUT: %.loc8_31.1: ref %IntConstructor.372 = temporary_storage // CHECK:STDOUT: %addr: %ptr.100 = addr_of %.loc8_31.1 // CHECK:STDOUT: %IntConstructor__carbon_thunk.call: init %empty_tuple.type = call imports.%IntConstructor__carbon_thunk.decl(%i.ref, %addr) @@ -871,6 +877,10 @@ fn InitFromStruct() { // CHECK:STDOUT: %.loc8_31.3: init %IntConstructor.372 = converted %i.ref, %.loc8_31.2 // CHECK:STDOUT: %.loc8_31.4: ref %IntConstructor.372 = temporary %.loc8_31.1, %.loc8_31.3 // CHECK:STDOUT: %.loc8_31.5: %IntConstructor.372 = acquire_value %.loc8_31.4 +// CHECK:STDOUT: %.loc8_13: type = splice_block %IntConstructor.ref [concrete = constants.%IntConstructor.372] { +// CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %IntConstructor.ref: type = name_ref IntConstructor, imports.%IntConstructor.decl [concrete = constants.%IntConstructor.372] +// CHECK:STDOUT: } // CHECK:STDOUT: %_: %IntConstructor.372 = value_binding _, %.loc8_31.5 // CHECK:STDOUT: // CHECK:STDOUT: %IntConstructor.Op.bound: = bound_method %.loc8_31.4, constants.%IntConstructor.Op @@ -888,6 +898,7 @@ fn InitFromStruct() { // CHECK:STDOUT: %u32: type = class_type @UInt, @UInt(%int_32) [concrete] // CHECK:STDOUT: %IntConstructor: type = class_type @IntConstructor [concrete] // CHECK:STDOUT: %pattern_type.c4e: type = pattern_type %IntConstructor [concrete] +// CHECK:STDOUT: %_.patt.151: %pattern_type.c4e = value_binding_pattern _ [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %ptr.100: type = ptr_type %IntConstructor [concrete] // CHECK:STDOUT: %IntConstructor__carbon_thunk.type: type = fn_type @IntConstructor__carbon_thunk [concrete] @@ -919,13 +930,9 @@ fn InitFromStruct() { // CHECK:STDOUT: fn @IntConstructorTest(%u.param: %u32) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt: %pattern_type.c4e = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt: %pattern_type.c4e = value_binding_pattern _ [concrete = constants.%_.patt.151] // CHECK:STDOUT: } // CHECK:STDOUT: %u.ref: %u32 = name_ref u, %u -// CHECK:STDOUT: %.loc19_13: type = splice_block %IntConstructor.ref [concrete = constants.%IntConstructor] { -// CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %IntConstructor.ref: type = name_ref IntConstructor, imports.%IntConstructor.decl [concrete = constants.%IntConstructor] -// CHECK:STDOUT: } // CHECK:STDOUT: %.loc19_31.1: ref %IntConstructor = temporary_storage // CHECK:STDOUT: %.loc19_31.2: %i32 = converted %u.ref, [concrete = ] // CHECK:STDOUT: %addr: %ptr.100 = addr_of %.loc19_31.1 @@ -934,6 +941,10 @@ fn InitFromStruct() { // CHECK:STDOUT: %.loc19_31.4: init %IntConstructor = converted %u.ref, %.loc19_31.3 // CHECK:STDOUT: %.loc19_31.5: ref %IntConstructor = temporary %.loc19_31.1, %.loc19_31.4 // CHECK:STDOUT: %.loc19_31.6: %IntConstructor = acquire_value %.loc19_31.5 +// CHECK:STDOUT: %.loc19_13: type = splice_block %IntConstructor.ref [concrete = constants.%IntConstructor] { +// CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %IntConstructor.ref: type = name_ref IntConstructor, imports.%IntConstructor.decl [concrete = constants.%IntConstructor] +// CHECK:STDOUT: } // CHECK:STDOUT: %_: %IntConstructor = value_binding _, %.loc19_31.6 // CHECK:STDOUT: // CHECK:STDOUT: %IntConstructor.Op.bound: = bound_method %.loc19_31.5, constants.%IntConstructor.Op @@ -949,6 +960,7 @@ fn InitFromStruct() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %DefaultConstructor: type = class_type @DefaultConstructor [concrete] // CHECK:STDOUT: %pattern_type.be4: type = pattern_type %DefaultConstructor [concrete] +// CHECK:STDOUT: %_.patt: %pattern_type.be4 = value_binding_pattern _ [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %ptr.c09: type = ptr_type %DefaultConstructor [concrete] // CHECK:STDOUT: %DefaultConstructor__carbon_thunk.type: type = fn_type @DefaultConstructor__carbon_thunk [concrete] @@ -980,13 +992,9 @@ fn InitFromStruct() { // CHECK:STDOUT: fn @DefaultConstructorTest() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt: %pattern_type.be4 = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt: %pattern_type.be4 = value_binding_pattern _ [concrete = constants.%_.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc9_36.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc9_13: type = splice_block %DefaultConstructor.ref [concrete = constants.%DefaultConstructor] { -// CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %DefaultConstructor.ref: type = name_ref DefaultConstructor, imports.%DefaultConstructor.decl [concrete = constants.%DefaultConstructor] -// CHECK:STDOUT: } // CHECK:STDOUT: %.loc9_36.2: ref %DefaultConstructor = temporary_storage // CHECK:STDOUT: %addr: %ptr.c09 = addr_of %.loc9_36.2 // CHECK:STDOUT: %DefaultConstructor__carbon_thunk.call: init %empty_tuple.type = call imports.%DefaultConstructor__carbon_thunk.decl(%addr) @@ -994,6 +1002,10 @@ fn InitFromStruct() { // CHECK:STDOUT: %.loc9_36.4: init %DefaultConstructor = converted %.loc9_36.1, %.loc9_36.3 // CHECK:STDOUT: %.loc9_36.5: ref %DefaultConstructor = temporary %.loc9_36.2, %.loc9_36.4 // CHECK:STDOUT: %.loc9_36.6: %DefaultConstructor = acquire_value %.loc9_36.5 +// CHECK:STDOUT: %.loc9_13: type = splice_block %DefaultConstructor.ref [concrete = constants.%DefaultConstructor] { +// CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %DefaultConstructor.ref: type = name_ref DefaultConstructor, imports.%DefaultConstructor.decl [concrete = constants.%DefaultConstructor] +// CHECK:STDOUT: } // CHECK:STDOUT: %_: %DefaultConstructor = value_binding _, %.loc9_36.6 // CHECK:STDOUT: // CHECK:STDOUT: %DefaultConstructor.Op.bound: = bound_method %.loc9_36.5, constants.%DefaultConstructor.Op @@ -1009,6 +1021,7 @@ fn InitFromStruct() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Two: type = class_type @Two [concrete] // CHECK:STDOUT: %pattern_type.586: type = pattern_type %Two [concrete] +// CHECK:STDOUT: %_.patt.44e: %pattern_type.586 = value_binding_pattern _ [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %tuple.type.f94: type = tuple_type (Core.IntLiteral, Core.IntLiteral) [concrete] @@ -1037,6 +1050,7 @@ fn InitFromStruct() { // CHECK:STDOUT: %int_2.295: %i32 = int_value 2 [concrete] // CHECK:STDOUT: %ThreeWithDefault: type = class_type @ThreeWithDefault [concrete] // CHECK:STDOUT: %pattern_type.248: type = pattern_type %ThreeWithDefault [concrete] +// CHECK:STDOUT: %_.patt.368: %pattern_type.248 = value_binding_pattern _ [concrete] // CHECK:STDOUT: %ptr.3ae: type = ptr_type %ThreeWithDefault [concrete] // CHECK:STDOUT: %ThreeWithDefault__carbon_thunk.type.0fdb2f.1: type = fn_type @ThreeWithDefault__carbon_thunk.1 [concrete] // CHECK:STDOUT: %ThreeWithDefault__carbon_thunk.d9686c.1: %ThreeWithDefault__carbon_thunk.type.0fdb2f.1 = struct_value () [concrete] @@ -1098,15 +1112,11 @@ fn InitFromStruct() { // CHECK:STDOUT: fn @ImplicitConvert() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt.loc8: %pattern_type.586 = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt.loc8: %pattern_type.586 = value_binding_pattern _ [concrete = constants.%_.patt.44e] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1.loc8: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %int_2.loc8: Core.IntLiteral = int_value 2 [concrete = constants.%int_2.ecc] // CHECK:STDOUT: %.loc8_25.1: %tuple.type.f94 = tuple_literal (%int_1.loc8, %int_2.loc8) [concrete = constants.%tuple.ad8] -// CHECK:STDOUT: %.loc8_13: type = splice_block %Two.ref [concrete = constants.%Two] { -// CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %Two.ref: type = name_ref Two, imports.%Two.decl [concrete = constants.%Two] -// CHECK:STDOUT: } // CHECK:STDOUT: %.loc8_25.2: ref %Two = temporary_storage // CHECK:STDOUT: %impl.elem0.loc8_21: %.1c5 = impl_witness_access constants.%ImplicitAs.impl_witness.a23, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] // CHECK:STDOUT: %bound_method.loc8_21.1: = bound_method %int_1.loc8, %impl.elem0.loc8_21 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.094] @@ -1128,17 +1138,17 @@ fn InitFromStruct() { // CHECK:STDOUT: %.loc8_25.4: init %Two = converted %.loc8_25.1, %.loc8_25.3 // CHECK:STDOUT: %.loc8_25.5: ref %Two = temporary %.loc8_25.2, %.loc8_25.4 // CHECK:STDOUT: %.loc8_25.6: %Two = acquire_value %.loc8_25.5 +// CHECK:STDOUT: %.loc8_13: type = splice_block %Two.ref [concrete = constants.%Two] { +// CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %Two.ref: type = name_ref Two, imports.%Two.decl [concrete = constants.%Two] +// CHECK:STDOUT: } // CHECK:STDOUT: %_.loc8: %Two = value_binding _, %.loc8_25.6 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt.loc10: %pattern_type.248 = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt.loc10: %pattern_type.248 = value_binding_pattern _ [concrete = constants.%_.patt.368] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1.loc10: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %int_2.loc10: Core.IntLiteral = int_value 2 [concrete = constants.%int_2.ecc] // CHECK:STDOUT: %.loc10_38.1: %tuple.type.f94 = tuple_literal (%int_1.loc10, %int_2.loc10) [concrete = constants.%tuple.ad8] -// CHECK:STDOUT: %.loc10_13: type = splice_block %ThreeWithDefault.ref.loc10 [concrete = constants.%ThreeWithDefault] { -// CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %ThreeWithDefault.ref.loc10: type = name_ref ThreeWithDefault, imports.%ThreeWithDefault.decl [concrete = constants.%ThreeWithDefault] -// CHECK:STDOUT: } // CHECK:STDOUT: %.loc10_38.2: ref %ThreeWithDefault = temporary_storage // CHECK:STDOUT: %impl.elem0.loc10_34: %.1c5 = impl_witness_access constants.%ImplicitAs.impl_witness.a23, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] // CHECK:STDOUT: %bound_method.loc10_34.1: = bound_method %int_1.loc10, %impl.elem0.loc10_34 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.094] @@ -1160,18 +1170,18 @@ fn InitFromStruct() { // CHECK:STDOUT: %.loc10_38.4: init %ThreeWithDefault = converted %.loc10_38.1, %.loc10_38.3 // CHECK:STDOUT: %.loc10_38.5: ref %ThreeWithDefault = temporary %.loc10_38.2, %.loc10_38.4 // CHECK:STDOUT: %.loc10_38.6: %ThreeWithDefault = acquire_value %.loc10_38.5 +// CHECK:STDOUT: %.loc10_13: type = splice_block %ThreeWithDefault.ref.loc10 [concrete = constants.%ThreeWithDefault] { +// CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %ThreeWithDefault.ref.loc10: type = name_ref ThreeWithDefault, imports.%ThreeWithDefault.decl [concrete = constants.%ThreeWithDefault] +// CHECK:STDOUT: } // CHECK:STDOUT: %_.loc10: %ThreeWithDefault = value_binding _, %.loc10_38.6 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt.loc12: %pattern_type.248 = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt.loc12: %pattern_type.248 = value_binding_pattern _ [concrete = constants.%_.patt.368] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1.loc12: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %int_2.loc12: Core.IntLiteral = int_value 2 [concrete = constants.%int_2.ecc] // CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete = constants.%int_3.1ba] // CHECK:STDOUT: %.loc12_41.1: %tuple.type.37f = tuple_literal (%int_1.loc12, %int_2.loc12, %int_3) [concrete = constants.%tuple.2d5] -// CHECK:STDOUT: %.loc12_13: type = splice_block %ThreeWithDefault.ref.loc12 [concrete = constants.%ThreeWithDefault] { -// CHECK:STDOUT: %Cpp.ref.loc12: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %ThreeWithDefault.ref.loc12: type = name_ref ThreeWithDefault, imports.%ThreeWithDefault.decl [concrete = constants.%ThreeWithDefault] -// CHECK:STDOUT: } // CHECK:STDOUT: %.loc12_41.2: ref %ThreeWithDefault = temporary_storage // CHECK:STDOUT: %impl.elem0.loc12_34: %.1c5 = impl_witness_access constants.%ImplicitAs.impl_witness.a23, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] // CHECK:STDOUT: %bound_method.loc12_34.1: = bound_method %int_1.loc12, %impl.elem0.loc12_34 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.094] @@ -1200,6 +1210,10 @@ fn InitFromStruct() { // CHECK:STDOUT: %.loc12_41.4: init %ThreeWithDefault = converted %.loc12_41.1, %.loc12_41.3 // CHECK:STDOUT: %.loc12_41.5: ref %ThreeWithDefault = temporary %.loc12_41.2, %.loc12_41.4 // CHECK:STDOUT: %.loc12_41.6: %ThreeWithDefault = acquire_value %.loc12_41.5 +// CHECK:STDOUT: %.loc12_13: type = splice_block %ThreeWithDefault.ref.loc12 [concrete = constants.%ThreeWithDefault] { +// CHECK:STDOUT: %Cpp.ref.loc12: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %ThreeWithDefault.ref.loc12: type = name_ref ThreeWithDefault, imports.%ThreeWithDefault.decl [concrete = constants.%ThreeWithDefault] +// CHECK:STDOUT: } // CHECK:STDOUT: %_.loc12: %ThreeWithDefault = value_binding _, %.loc12_41.6 // CHECK:STDOUT: // CHECK:STDOUT: %ThreeWithDefault.Op.bound.loc12: = bound_method %.loc12_41.5, constants.%ThreeWithDefault.Op @@ -1224,6 +1238,7 @@ fn InitFromStruct() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Aggregate: type = class_type @Aggregate [concrete] // CHECK:STDOUT: %pattern_type.5dc: type = pattern_type %Aggregate [concrete] +// CHECK:STDOUT: %_.patt: %pattern_type.5dc = value_binding_pattern _ [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %tuple.type.985: type = tuple_type (Core.IntLiteral) [concrete] @@ -1244,37 +1259,37 @@ fn InitFromStruct() { // CHECK:STDOUT: fn @InitFromTuple() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt.loc15: %pattern_type.5dc = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt.loc15: %pattern_type.5dc = value_binding_pattern _ [concrete = constants.%_.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc15_27.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc15_27.2: %Aggregate = converted %.loc15_27.1, [concrete = ] // CHECK:STDOUT: %.loc15_13: type = splice_block %Aggregate.ref.loc15 [concrete = constants.%Aggregate] { // CHECK:STDOUT: %Cpp.ref.loc15: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %Aggregate.ref.loc15: type = name_ref Aggregate, imports.%Aggregate.decl [concrete = constants.%Aggregate] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc15_27.2: %Aggregate = converted %.loc15_27.1, [concrete = ] // CHECK:STDOUT: %_.loc15: %Aggregate = value_binding _, [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt.loc23: %pattern_type.5dc = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt.loc23: %pattern_type.5dc = value_binding_pattern _ [concrete = constants.%_.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1.loc23: Core.IntLiteral = int_value 1 [concrete = constants.%int_1] // CHECK:STDOUT: %.loc23_29.1: %tuple.type.985 = tuple_literal (%int_1.loc23) [concrete = constants.%tuple.378] +// CHECK:STDOUT: %.loc23_29.2: %Aggregate = converted %.loc23_29.1, [concrete = ] // CHECK:STDOUT: %.loc23_13: type = splice_block %Aggregate.ref.loc23 [concrete = constants.%Aggregate] { // CHECK:STDOUT: %Cpp.ref.loc23: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %Aggregate.ref.loc23: type = name_ref Aggregate, imports.%Aggregate.decl [concrete = constants.%Aggregate] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc23_29.2: %Aggregate = converted %.loc23_29.1, [concrete = ] // CHECK:STDOUT: %_.loc23: %Aggregate = value_binding _, [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt.loc31: %pattern_type.5dc = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt.loc31: %pattern_type.5dc = value_binding_pattern _ [concrete = constants.%_.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1.loc31: Core.IntLiteral = int_value 1 [concrete = constants.%int_1] // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2] // CHECK:STDOUT: %.loc31_31.1: %tuple.type.f94 = tuple_literal (%int_1.loc31, %int_2) [concrete = constants.%tuple.ad8] +// CHECK:STDOUT: %.loc31_31.2: %Aggregate = converted %.loc31_31.1, [concrete = ] // CHECK:STDOUT: %.loc31_13: type = splice_block %Aggregate.ref.loc31 [concrete = constants.%Aggregate] { // CHECK:STDOUT: %Cpp.ref.loc31: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %Aggregate.ref.loc31: type = name_ref Aggregate, imports.%Aggregate.decl [concrete = constants.%Aggregate] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc31_31.2: %Aggregate = converted %.loc31_31.1, [concrete = ] // CHECK:STDOUT: %_.loc31: %Aggregate = value_binding _, [concrete = ] // CHECK:STDOUT: // CHECK:STDOUT: } @@ -1284,6 +1299,7 @@ fn InitFromStruct() { // CHECK:STDOUT: constants { // CHECK:STDOUT: %Aggregate: type = class_type @Aggregate [concrete] // CHECK:STDOUT: %pattern_type.5dc: type = pattern_type %Aggregate [concrete] +// CHECK:STDOUT: %_.patt: %pattern_type.5dc = value_binding_pattern _ [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] @@ -1305,37 +1321,37 @@ fn InitFromStruct() { // CHECK:STDOUT: fn @InitFromStruct() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt.loc15: %pattern_type.5dc = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt.loc15: %pattern_type.5dc = value_binding_pattern _ [concrete = constants.%_.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc15_27.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc15_27.2: %Aggregate = converted %.loc15_27.1, [concrete = ] // CHECK:STDOUT: %.loc15_13: type = splice_block %Aggregate.ref.loc15 [concrete = constants.%Aggregate] { // CHECK:STDOUT: %Cpp.ref.loc15: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %Aggregate.ref.loc15: type = name_ref Aggregate, imports.%Aggregate.decl [concrete = constants.%Aggregate] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc15_27.2: %Aggregate = converted %.loc15_27.1, [concrete = ] // CHECK:STDOUT: %_.loc15: %Aggregate = value_binding _, [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt.loc23: %pattern_type.5dc = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt.loc23: %pattern_type.5dc = value_binding_pattern _ [concrete = constants.%_.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1.loc23: Core.IntLiteral = int_value 1 [concrete = constants.%int_1] // CHECK:STDOUT: %.loc23_33.1: %struct_type.x = struct_literal (%int_1.loc23) [concrete = constants.%struct.147] +// CHECK:STDOUT: %.loc23_33.2: %Aggregate = converted %.loc23_33.1, [concrete = ] // CHECK:STDOUT: %.loc23_13: type = splice_block %Aggregate.ref.loc23 [concrete = constants.%Aggregate] { // CHECK:STDOUT: %Cpp.ref.loc23: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %Aggregate.ref.loc23: type = name_ref Aggregate, imports.%Aggregate.decl [concrete = constants.%Aggregate] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc23_33.2: %Aggregate = converted %.loc23_33.1, [concrete = ] // CHECK:STDOUT: %_.loc23: %Aggregate = value_binding _, [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt.loc31: %pattern_type.5dc = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt.loc31: %pattern_type.5dc = value_binding_pattern _ [concrete = constants.%_.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1.loc31: Core.IntLiteral = int_value 1 [concrete = constants.%int_1] // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2] // CHECK:STDOUT: %.loc31_41.1: %struct_type.x.y = struct_literal (%int_1.loc31, %int_2) [concrete = constants.%struct.004] +// CHECK:STDOUT: %.loc31_41.2: %Aggregate = converted %.loc31_41.1, [concrete = ] // CHECK:STDOUT: %.loc31_13: type = splice_block %Aggregate.ref.loc31 [concrete = constants.%Aggregate] { // CHECK:STDOUT: %Cpp.ref.loc31: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %Aggregate.ref.loc31: type = name_ref Aggregate, imports.%Aggregate.decl [concrete = constants.%Aggregate] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc31_41.2: %Aggregate = converted %.loc31_41.1, [concrete = ] // CHECK:STDOUT: %_.loc31: %Aggregate = value_binding _, [concrete = ] // CHECK:STDOUT: // CHECK:STDOUT: } @@ -1346,6 +1362,7 @@ fn InitFromStruct() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %NonAggregate: type = class_type @NonAggregate [concrete] // CHECK:STDOUT: %pattern_type.273: type = pattern_type %NonAggregate [concrete] +// CHECK:STDOUT: %_.patt: %pattern_type.273 = value_binding_pattern _ [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %ptr.f81: type = ptr_type %NonAggregate [concrete] // CHECK:STDOUT: %NonAggregate__carbon_thunk.type.841a40.1: type = fn_type @NonAggregate__carbon_thunk.1 [concrete] @@ -1418,13 +1435,9 @@ fn InitFromStruct() { // CHECK:STDOUT: fn @InitFromStruct() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt.loc8: %pattern_type.273 = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt.loc8: %pattern_type.273 = value_binding_pattern _ [concrete = constants.%_.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc8_30.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc8_13: type = splice_block %NonAggregate.ref.loc8 [concrete = constants.%NonAggregate] { -// CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %NonAggregate.ref.loc8: type = name_ref NonAggregate, imports.%NonAggregate.decl [concrete = constants.%NonAggregate] -// CHECK:STDOUT: } // CHECK:STDOUT: %.loc8_30.2: ref %NonAggregate = temporary_storage // CHECK:STDOUT: %addr.loc8: %ptr.f81 = addr_of %.loc8_30.2 // CHECK:STDOUT: %NonAggregate__carbon_thunk.call.loc8: init %empty_tuple.type = call imports.%NonAggregate__carbon_thunk.decl.356ec9.1(%addr.loc8) @@ -1432,16 +1445,16 @@ fn InitFromStruct() { // CHECK:STDOUT: %.loc8_30.4: init %NonAggregate = converted %.loc8_30.1, %.loc8_30.3 // CHECK:STDOUT: %.loc8_30.5: ref %NonAggregate = temporary %.loc8_30.2, %.loc8_30.4 // CHECK:STDOUT: %.loc8_30.6: %NonAggregate = acquire_value %.loc8_30.5 +// CHECK:STDOUT: %.loc8_13: type = splice_block %NonAggregate.ref.loc8 [concrete = constants.%NonAggregate] { +// CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %NonAggregate.ref.loc8: type = name_ref NonAggregate, imports.%NonAggregate.decl [concrete = constants.%NonAggregate] +// CHECK:STDOUT: } // CHECK:STDOUT: %_.loc8: %NonAggregate = value_binding _, %.loc8_30.6 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt.loc9: %pattern_type.273 = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt.loc9: %pattern_type.273 = value_binding_pattern _ [concrete = constants.%_.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1.loc9: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %.loc9_32.1: %tuple.type.985 = tuple_literal (%int_1.loc9) [concrete = constants.%tuple.378] -// CHECK:STDOUT: %.loc9_13: type = splice_block %NonAggregate.ref.loc9 [concrete = constants.%NonAggregate] { -// CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %NonAggregate.ref.loc9: type = name_ref NonAggregate, imports.%NonAggregate.decl [concrete = constants.%NonAggregate] -// CHECK:STDOUT: } // CHECK:STDOUT: %.loc9_32.2: ref %NonAggregate = temporary_storage // CHECK:STDOUT: %impl.elem0.loc9: %.1c5 = impl_witness_access constants.%ImplicitAs.impl_witness.a23, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] // CHECK:STDOUT: %bound_method.loc9_30.1: = bound_method %int_1.loc9, %impl.elem0.loc9 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.094] @@ -1456,17 +1469,17 @@ fn InitFromStruct() { // CHECK:STDOUT: %.loc9_32.4: init %NonAggregate = converted %.loc9_32.1, %.loc9_32.3 // CHECK:STDOUT: %.loc9_32.5: ref %NonAggregate = temporary %.loc9_32.2, %.loc9_32.4 // CHECK:STDOUT: %.loc9_32.6: %NonAggregate = acquire_value %.loc9_32.5 +// CHECK:STDOUT: %.loc9_13: type = splice_block %NonAggregate.ref.loc9 [concrete = constants.%NonAggregate] { +// CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %NonAggregate.ref.loc9: type = name_ref NonAggregate, imports.%NonAggregate.decl [concrete = constants.%NonAggregate] +// CHECK:STDOUT: } // CHECK:STDOUT: %_.loc9: %NonAggregate = value_binding _, %.loc9_32.6 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt.loc10: %pattern_type.273 = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt.loc10: %pattern_type.273 = value_binding_pattern _ [concrete = constants.%_.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1.loc10: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2.ecc] // CHECK:STDOUT: %.loc10_34.1: %tuple.type.f94 = tuple_literal (%int_1.loc10, %int_2) [concrete = constants.%tuple.ad8] -// CHECK:STDOUT: %.loc10_13: type = splice_block %NonAggregate.ref.loc10 [concrete = constants.%NonAggregate] { -// CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %NonAggregate.ref.loc10: type = name_ref NonAggregate, imports.%NonAggregate.decl [concrete = constants.%NonAggregate] -// CHECK:STDOUT: } // CHECK:STDOUT: %.loc10_34.2: ref %NonAggregate = temporary_storage // CHECK:STDOUT: %impl.elem0.loc10_30: %.1c5 = impl_witness_access constants.%ImplicitAs.impl_witness.a23, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] // CHECK:STDOUT: %bound_method.loc10_30.1: = bound_method %int_1.loc10, %impl.elem0.loc10_30 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.094] @@ -1488,6 +1501,10 @@ fn InitFromStruct() { // CHECK:STDOUT: %.loc10_34.4: init %NonAggregate = converted %.loc10_34.1, %.loc10_34.3 // CHECK:STDOUT: %.loc10_34.5: ref %NonAggregate = temporary %.loc10_34.2, %.loc10_34.4 // CHECK:STDOUT: %.loc10_34.6: %NonAggregate = acquire_value %.loc10_34.5 +// CHECK:STDOUT: %.loc10_13: type = splice_block %NonAggregate.ref.loc10 [concrete = constants.%NonAggregate] { +// CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %NonAggregate.ref.loc10: type = name_ref NonAggregate, imports.%NonAggregate.decl [concrete = constants.%NonAggregate] +// CHECK:STDOUT: } // CHECK:STDOUT: %_.loc10: %NonAggregate = value_binding _, %.loc10_34.6 // CHECK:STDOUT: // CHECK:STDOUT: %NonAggregate.Op.bound.loc10: = bound_method %.loc10_34.5, constants.%NonAggregate.Op @@ -1510,6 +1527,7 @@ fn InitFromStruct() { // CHECK:STDOUT: constants { // CHECK:STDOUT: %NonAggregate: type = class_type @NonAggregate [concrete] // CHECK:STDOUT: %pattern_type.273: type = pattern_type %NonAggregate [concrete] +// CHECK:STDOUT: %_.patt: %pattern_type.273 = value_binding_pattern _ [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] @@ -1531,37 +1549,37 @@ fn InitFromStruct() { // CHECK:STDOUT: fn @InitFromStruct() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt.loc15: %pattern_type.273 = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt.loc15: %pattern_type.273 = value_binding_pattern _ [concrete = constants.%_.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc15_30.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc15_30.2: %NonAggregate = converted %.loc15_30.1, [concrete = ] // CHECK:STDOUT: %.loc15_13: type = splice_block %NonAggregate.ref.loc15 [concrete = constants.%NonAggregate] { // CHECK:STDOUT: %Cpp.ref.loc15: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %NonAggregate.ref.loc15: type = name_ref NonAggregate, imports.%NonAggregate.decl [concrete = constants.%NonAggregate] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc15_30.2: %NonAggregate = converted %.loc15_30.1, [concrete = ] // CHECK:STDOUT: %_.loc15: %NonAggregate = value_binding _, [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt.loc23: %pattern_type.273 = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt.loc23: %pattern_type.273 = value_binding_pattern _ [concrete = constants.%_.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1.loc23: Core.IntLiteral = int_value 1 [concrete = constants.%int_1] // CHECK:STDOUT: %.loc23_36.1: %struct_type.x = struct_literal (%int_1.loc23) [concrete = constants.%struct.147] +// CHECK:STDOUT: %.loc23_36.2: %NonAggregate = converted %.loc23_36.1, [concrete = ] // CHECK:STDOUT: %.loc23_13: type = splice_block %NonAggregate.ref.loc23 [concrete = constants.%NonAggregate] { // CHECK:STDOUT: %Cpp.ref.loc23: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %NonAggregate.ref.loc23: type = name_ref NonAggregate, imports.%NonAggregate.decl [concrete = constants.%NonAggregate] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc23_36.2: %NonAggregate = converted %.loc23_36.1, [concrete = ] // CHECK:STDOUT: %_.loc23: %NonAggregate = value_binding _, [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt.loc31: %pattern_type.273 = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt.loc31: %pattern_type.273 = value_binding_pattern _ [concrete = constants.%_.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1.loc31: Core.IntLiteral = int_value 1 [concrete = constants.%int_1] // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2] // CHECK:STDOUT: %.loc31_44.1: %struct_type.x.y = struct_literal (%int_1.loc31, %int_2) [concrete = constants.%struct.004] +// CHECK:STDOUT: %.loc31_44.2: %NonAggregate = converted %.loc31_44.1, [concrete = ] // CHECK:STDOUT: %.loc31_13: type = splice_block %NonAggregate.ref.loc31 [concrete = constants.%NonAggregate] { // CHECK:STDOUT: %Cpp.ref.loc31: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %NonAggregate.ref.loc31: type = name_ref NonAggregate, imports.%NonAggregate.decl [concrete = constants.%NonAggregate] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc31_44.2: %NonAggregate = converted %.loc31_44.1, [concrete = ] // CHECK:STDOUT: %_.loc31: %NonAggregate = value_binding _, [concrete = ] // CHECK:STDOUT: // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/interop/cpp/macros/macros.carbon b/toolchain/check/testdata/interop/cpp/macros/macros.carbon index 7c1d11498c44..a1dd1cf8bf3f 100644 --- a/toolchain/check/testdata/interop/cpp/macros/macros.carbon +++ b/toolchain/check/testdata/interop/cpp/macros/macros.carbon @@ -977,16 +977,22 @@ fn F() { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = value_binding_pattern a [concrete] // CHECK:STDOUT: %int_42.ac4: %i32 = int_value 42 [concrete] // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %i64: type = class_type @Int, @Int(%int_64) [concrete] // CHECK:STDOUT: %pattern_type.f57: type = pattern_type %i64 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.f57 = value_binding_pattern b [concrete] // CHECK:STDOUT: %int_42.b15: %i64 = int_value 42 [concrete] // CHECK:STDOUT: %u32: type = class_type @UInt, @UInt(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.668: type = pattern_type %u32 [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.668 = value_binding_pattern c [concrete] // CHECK:STDOUT: %int_42.869: %u32 = int_value 42 [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.6b6 = value_binding_pattern d [concrete] // CHECK:STDOUT: %int_255: %i32 = int_value 255 [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type.6b6 = value_binding_pattern e [concrete] // CHECK:STDOUT: %int_8: %i32 = int_value 8 [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type.6b6 = value_binding_pattern f [concrete] // CHECK:STDOUT: %int_5: %i32 = int_value 5 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1005,7 +1011,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: @@ -1013,7 +1019,7 @@ fn F() { // CHECK:STDOUT: %i32.loc8: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %a: %i32 = value_binding a, %CONFIG_VALUE.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.f57 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.f57 = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: @@ -1021,7 +1027,7 @@ fn F() { // CHECK:STDOUT: %i64.loc9: type = type_literal constants.%i64 [concrete = constants.%i64] // CHECK:STDOUT: %b: %i64 = value_binding b, %CONFIG_VALUE_LONG.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.668 = value_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.668 = value_binding_pattern c [concrete = constants.%c.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: @@ -1029,7 +1035,7 @@ fn F() { // CHECK:STDOUT: %u32.loc10: type = type_literal constants.%u32 [concrete = constants.%u32] // CHECK:STDOUT: %c: %u32 = value_binding c, %CONFIG_VALUE_UNSIGNED.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.6b6 = value_binding_pattern d [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.6b6 = value_binding_pattern d [concrete = constants.%d.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: @@ -1037,7 +1043,7 @@ fn F() { // CHECK:STDOUT: %i32.loc11: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %d: %i32 = value_binding d, %CONFIG_VALUE_HEXA.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %e.patt: %pattern_type.6b6 = value_binding_pattern e [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type.6b6 = value_binding_pattern e [concrete = constants.%e.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc12: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: @@ -1045,7 +1051,7 @@ fn F() { // CHECK:STDOUT: %i32.loc12: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %e: %i32 = value_binding e, %CONFIG_VALUE_OCTAL.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %f.patt: %pattern_type.6b6 = value_binding_pattern f [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type.6b6 = value_binding_pattern f [concrete = constants.%f.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc13: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: @@ -1081,6 +1087,8 @@ fn F() { // CHECK:STDOUT: %array_type: type = array_type %int_1.5b8, %f32.c73 [concrete] // CHECK:STDOUT: %f32.9b3: type = float_type %int_32, f32 [concrete] // CHECK:STDOUT: %pattern_type.18b: type = pattern_type %array_type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.18b = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.18b = var_pattern %a.patt [concrete] // CHECK:STDOUT: %float.6da: Core.FloatLiteral = float_literal_value 10e-1 [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (Core.FloatLiteral) [concrete] // CHECK:STDOUT: %tuple: %tuple.type = tuple_value (%float.6da) [concrete] @@ -1100,6 +1108,9 @@ fn F() { // CHECK:STDOUT: %bound_method.3e4: = bound_method %float.6da, %Core.FloatLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %float.943: %f32.c73 = float_value 1 [concrete] // CHECK:STDOUT: %array: %array_type = tuple_value (%float.943) [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.240 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.240 = ref_binding_pattern n [concrete] +// CHECK:STDOUT: %n.var_patt: %pattern_type.240 = var_pattern %n.patt [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.3: type = fn_type @Destroy.Op.loc10_3.3 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.3: %Destroy.Op.type.1d8f74.3 = struct_value () [concrete] // CHECK:STDOUT: } @@ -1118,16 +1129,16 @@ fn F() { // CHECK:STDOUT: .n = %n.var // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %n.patt: %pattern_type.240 = ref_binding_pattern n [concrete] -// CHECK:STDOUT: %n.var_patt: %pattern_type.240 = var_pattern %n.patt [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.240 = ref_binding_pattern n [concrete = constants.%n.patt] +// CHECK:STDOUT: %n.var_patt: %pattern_type.240 = var_pattern %n.patt [concrete = constants.%n.var_patt] // CHECK:STDOUT: %n.var: ref %f32.c73 = var %n.var_patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.18b = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.18b = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.18b = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.18b = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type = var %a.var_patt // CHECK:STDOUT: %float: Core.FloatLiteral = float_literal_value 10e-1 [concrete = constants.%float.6da] @@ -1160,14 +1171,14 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %array_type = ref_binding a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.240 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.240 = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc12: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %X.ref: = name_ref X, imports.%X [concrete = imports.%X] // CHECK:STDOUT: // CHECK:STDOUT: %n.ref.loc12: ref %f32.c73 = name_ref n, imports.%n.var [concrete = imports.%n.var] -// CHECK:STDOUT: %f32.loc12: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %.loc12: %f32.c73 = acquire_value %n.ref.loc12 +// CHECK:STDOUT: %f32.loc12: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %b: %f32.c73 = value_binding b, %.loc12 // CHECK:STDOUT: %Destroy.Op.bound: = bound_method %a.var, constants.%Destroy.Op.1a2547.3 // CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%a.var) @@ -1192,6 +1203,7 @@ fn F() { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = value_binding_pattern a [concrete] // CHECK:STDOUT: %int_-1: %i32 = int_value -1 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1205,7 +1217,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: @@ -1221,6 +1233,7 @@ fn F() { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = value_binding_pattern a [concrete] // CHECK:STDOUT: %int_3: %i32 = int_value 3 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1234,7 +1247,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: @@ -1250,11 +1263,15 @@ fn F() { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %u32: type = class_type @UInt, @UInt(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.668: type = pattern_type %u32 [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.668 = value_binding_pattern a [concrete] // CHECK:STDOUT: %int_1.92d: %u32 = int_value 1 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = value_binding_pattern b [concrete] // CHECK:STDOUT: %int_100: %i32 = int_value 100 [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.6b6 = value_binding_pattern c [concrete] // CHECK:STDOUT: %int_99: %i32 = int_value 99 [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.6b6 = value_binding_pattern d [concrete] // CHECK:STDOUT: %int_1.0c6: %i32 = int_value 1 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1271,7 +1288,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.668 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.668 = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: @@ -1279,7 +1296,7 @@ fn F() { // CHECK:STDOUT: %u32.loc8: type = type_literal constants.%u32 [concrete = constants.%u32] // CHECK:STDOUT: %a: %u32 = value_binding a, %CAST_UNSIGNED.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: @@ -1287,7 +1304,7 @@ fn F() { // CHECK:STDOUT: %i32.loc9: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %b: %i32 = value_binding b, %CAST_STATIC.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.6b6 = value_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.6b6 = value_binding_pattern c [concrete = constants.%c.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: @@ -1295,7 +1312,7 @@ fn F() { // CHECK:STDOUT: %i32.loc10: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %c: %i32 = value_binding c, %CAST_FUNCTIONAL.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.6b6 = value_binding_pattern d [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.6b6 = value_binding_pattern d [concrete = constants.%d.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: @@ -1311,6 +1328,7 @@ fn F() { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = value_binding_pattern a [concrete] // CHECK:STDOUT: %int_1: %i32 = int_value 1 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1324,7 +1342,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: @@ -1343,23 +1361,30 @@ fn F() { // CHECK:STDOUT: %char: type = class_type @Char [concrete] // CHECK:STDOUT: %ptr.b46: type = ptr_type %char [concrete] // CHECK:STDOUT: %pattern_type.adf: type = pattern_type %str.3d4 [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.adf = value_binding_pattern a [concrete] // CHECK:STDOUT: %str.d76: %ptr.b46 = string_literal "abc" [concrete] // CHECK:STDOUT: %int_3: %u64 = int_value 3 [concrete] // CHECK:STDOUT: %String.val.6e1: %str.3d4 = struct_value (%str.d76, %int_3) [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.adf = value_binding_pattern b [concrete] // CHECK:STDOUT: %str.3d5: %ptr.b46 = string_literal "" [concrete] // CHECK:STDOUT: %int_0: %u64 = int_value 0 [concrete] // CHECK:STDOUT: %String.val.9fd: %str.3d4 = struct_value (%str.3d5, %int_0) [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.adf = value_binding_pattern c [concrete] // CHECK:STDOUT: %str.4fa: %ptr.b46 = string_literal " \t " [concrete] // CHECK:STDOUT: %String.val.86a: %str.3d4 = struct_value (%str.4fa, %int_3) [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.adf = value_binding_pattern d [concrete] // CHECK:STDOUT: %str.475: %ptr.b46 = string_literal "ab" [concrete] // CHECK:STDOUT: %int_2: %u64 = int_value 2 [concrete] // CHECK:STDOUT: %String.val.efd: %str.3d4 = struct_value (%str.475, %int_2) [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type.adf = value_binding_pattern e [concrete] // CHECK:STDOUT: %str.434: %ptr.b46 = string_literal " foo: \"bar\" { 123 } " [concrete] // CHECK:STDOUT: %int_20: %u64 = int_value 20 [concrete] // CHECK:STDOUT: %String.val.70a: %str.3d4 = struct_value (%str.434, %int_20) [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type.adf = value_binding_pattern f [concrete] // CHECK:STDOUT: %str.fa3: %ptr.b46 = string_literal "\xD0\xB0\xD0\xB1\xD0\xB2" [concrete] // CHECK:STDOUT: %int_6: %u64 = int_value 6 [concrete] // CHECK:STDOUT: %String.val.711: %str.3d4 = struct_value (%str.fa3, %int_6) [concrete] +// CHECK:STDOUT: %g.patt: %pattern_type.adf = value_binding_pattern g [concrete] // CHECK:STDOUT: %str.618: %ptr.b46 = string_literal "xy" [concrete] // CHECK:STDOUT: %String.val.fce: %str.3d4 = struct_value (%str.618, %int_2) [concrete] // CHECK:STDOUT: } @@ -1380,7 +1405,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.adf = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.adf = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: @@ -1388,7 +1413,7 @@ fn F() { // CHECK:STDOUT: %str.loc8: type = type_literal constants.%str.3d4 [concrete = constants.%str.3d4] // CHECK:STDOUT: %a: %str.3d4 = value_binding a, %SimpleString.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.adf = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.adf = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: @@ -1396,7 +1421,7 @@ fn F() { // CHECK:STDOUT: %str.loc9: type = type_literal constants.%str.3d4 [concrete = constants.%str.3d4] // CHECK:STDOUT: %b: %str.3d4 = value_binding b, %EmptyString.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.adf = value_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.adf = value_binding_pattern c [concrete = constants.%c.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: @@ -1404,7 +1429,7 @@ fn F() { // CHECK:STDOUT: %str.loc10: type = type_literal constants.%str.3d4 [concrete = constants.%str.3d4] // CHECK:STDOUT: %c: %str.3d4 = value_binding c, %EscapeCharacter.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.adf = value_binding_pattern d [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.adf = value_binding_pattern d [concrete = constants.%d.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: @@ -1412,7 +1437,7 @@ fn F() { // CHECK:STDOUT: %str.loc11: type = type_literal constants.%str.3d4 [concrete = constants.%str.3d4] // CHECK:STDOUT: %d: %str.3d4 = value_binding d, %Concatenated.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %e.patt: %pattern_type.adf = value_binding_pattern e [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type.adf = value_binding_pattern e [concrete = constants.%e.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc12: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: @@ -1420,7 +1445,7 @@ fn F() { // CHECK:STDOUT: %str.loc12: type = type_literal constants.%str.3d4 [concrete = constants.%str.3d4] // CHECK:STDOUT: %e: %str.3d4 = value_binding e, %RawString.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %f.patt: %pattern_type.adf = value_binding_pattern f [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type.adf = value_binding_pattern f [concrete = constants.%f.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc13: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: @@ -1428,7 +1453,7 @@ fn F() { // CHECK:STDOUT: %str.loc13: type = type_literal constants.%str.3d4 [concrete = constants.%str.3d4] // CHECK:STDOUT: %f: %str.3d4 = value_binding f, %Utf8String.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %g.patt: %pattern_type.adf = value_binding_pattern g [concrete] +// CHECK:STDOUT: %g.patt: %pattern_type.adf = value_binding_pattern g [concrete = constants.%g.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc14: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: @@ -1444,11 +1469,14 @@ fn F() { // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %f64.dc1: type = class_type @Float, @Float(%int_64) [concrete] // CHECK:STDOUT: %pattern_type.fb7: type = pattern_type %f64.dc1 [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.fb7 = value_binding_pattern a [concrete] // CHECK:STDOUT: %float.3b9: %f64.dc1 = float_value 1 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.fb7 = value_binding_pattern b [concrete] // CHECK:STDOUT: %float.17a: %f64.dc1 = float_value 100 [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %f32.c73: type = class_type @Float, @Float(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.240: type = pattern_type %f32.c73 [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.240 = value_binding_pattern c [concrete] // CHECK:STDOUT: %float.943: %f32.c73 = float_value 1 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1464,7 +1492,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.fb7 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.fb7 = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: @@ -1472,7 +1500,7 @@ fn F() { // CHECK:STDOUT: %f64.loc8: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %a: %f64.dc1 = value_binding a, %MyDouble.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.fb7 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.fb7 = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: @@ -1480,7 +1508,7 @@ fn F() { // CHECK:STDOUT: %f64.loc9: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %b: %f64.dc1 = value_binding b, %MyDoubleE.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.240 = value_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.240 = value_binding_pattern c [concrete = constants.%c.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: @@ -1495,11 +1523,17 @@ fn F() { // CHECK:STDOUT: constants { // CHECK:STDOUT: %char: type = class_type @Char [concrete] // CHECK:STDOUT: %pattern_type.2ff: type = pattern_type %char [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.2ff = value_binding_pattern a [concrete] // CHECK:STDOUT: %int_97: %char = int_value 97 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.2ff = value_binding_pattern b [concrete] // CHECK:STDOUT: %int_65: %char = int_value 65 [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.2ff = value_binding_pattern c [concrete] // CHECK:STDOUT: %int_49: %char = int_value 49 [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.2ff = value_binding_pattern d [concrete] // CHECK:STDOUT: %int_32: %char = int_value 32 [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type.2ff = value_binding_pattern e [concrete] // CHECK:STDOUT: %int_9: %char = int_value 9 [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type.2ff = value_binding_pattern f [concrete] // CHECK:STDOUT: %int_88: %char = int_value 88 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1518,7 +1552,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.2ff = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.2ff = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: @@ -1526,7 +1560,7 @@ fn F() { // CHECK:STDOUT: %char.loc8: type = type_literal constants.%char [concrete = constants.%char] // CHECK:STDOUT: %a: %char = value_binding a, %M_LOWERCASE.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.2ff = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.2ff = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: @@ -1534,7 +1568,7 @@ fn F() { // CHECK:STDOUT: %char.loc9: type = type_literal constants.%char [concrete = constants.%char] // CHECK:STDOUT: %b: %char = value_binding b, %M_UPPERCASE.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.2ff = value_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.2ff = value_binding_pattern c [concrete = constants.%c.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: @@ -1542,7 +1576,7 @@ fn F() { // CHECK:STDOUT: %char.loc10: type = type_literal constants.%char [concrete = constants.%char] // CHECK:STDOUT: %c: %char = value_binding c, %M_DIGIT.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.2ff = value_binding_pattern d [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.2ff = value_binding_pattern d [concrete = constants.%d.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: @@ -1550,7 +1584,7 @@ fn F() { // CHECK:STDOUT: %char.loc11: type = type_literal constants.%char [concrete = constants.%char] // CHECK:STDOUT: %d: %char = value_binding d, %M_SPACE.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %e.patt: %pattern_type.2ff = value_binding_pattern e [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type.2ff = value_binding_pattern e [concrete = constants.%e.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc12: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: @@ -1558,7 +1592,7 @@ fn F() { // CHECK:STDOUT: %char.loc12: type = type_literal constants.%char [concrete = constants.%char] // CHECK:STDOUT: %e: %char = value_binding e, %M_TAB.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %f.patt: %pattern_type.2ff = value_binding_pattern f [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type.2ff = value_binding_pattern f [concrete = constants.%f.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc13: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: @@ -1573,12 +1607,15 @@ fn F() { // CHECK:STDOUT: constants { // CHECK:STDOUT: %char: type = class_type @Char [concrete] // CHECK:STDOUT: %pattern_type.2ff: type = pattern_type %char [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.2ff = value_binding_pattern a [concrete] // CHECK:STDOUT: %int_97: %char = int_value 97 [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = value_binding_pattern b [concrete] // CHECK:STDOUT: %int_98: %i32 = int_value 98 [concrete] // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.831 = value_binding_pattern c [concrete] // CHECK:STDOUT: %true: bool = bool_literal true [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1594,7 +1631,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.2ff = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.2ff = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: @@ -1602,7 +1639,7 @@ fn F() { // CHECK:STDOUT: %char.loc8: type = type_literal constants.%char [concrete = constants.%char] // CHECK:STDOUT: %a: %char = value_binding a, %M_CONDITIONAL.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: @@ -1610,7 +1647,7 @@ fn F() { // CHECK:STDOUT: %i32.loc9: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %b: %i32 = value_binding b, %M_A_PLUS_ONE.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.831 = value_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.831 = value_binding_pattern c [concrete = constants.%c.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %M_A_EQUAL.ref: bool = name_ref M_A_EQUAL, constants.%true [concrete = constants.%true] @@ -1623,12 +1660,23 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.831 = value_binding_pattern a [concrete] // CHECK:STDOUT: %true: bool = bool_literal true [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.831 = value_binding_pattern b [concrete] // CHECK:STDOUT: %false: bool = bool_literal false [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.831 = value_binding_pattern c [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.831 = value_binding_pattern d [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type.831 = value_binding_pattern e [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type.831 = value_binding_pattern f [concrete] +// CHECK:STDOUT: %g.patt: %pattern_type.831 = value_binding_pattern g [concrete] +// CHECK:STDOUT: %h.patt: %pattern_type.831 = value_binding_pattern h [concrete] +// CHECK:STDOUT: %i.patt: %pattern_type.831 = value_binding_pattern i [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %j.patt: %pattern_type.6b6 = value_binding_pattern j [concrete] // CHECK:STDOUT: %int_1: %i32 = int_value 1 [concrete] +// CHECK:STDOUT: %k.patt: %pattern_type.6b6 = value_binding_pattern k [concrete] // CHECK:STDOUT: %int_0: %i32 = int_value 0 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1652,70 +1700,70 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.831 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.831 = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %M_TRUE.ref: bool = name_ref M_TRUE, constants.%true [concrete = constants.%true] // CHECK:STDOUT: %.loc8: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %a: bool = value_binding a, %M_TRUE.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.831 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.831 = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %M_FALSE.ref: bool = name_ref M_FALSE, constants.%false [concrete = constants.%false] // CHECK:STDOUT: %.loc9: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %b: bool = value_binding b, %M_FALSE.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.831 = value_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.831 = value_binding_pattern c [concrete = constants.%c.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %M_NOT_TRUE.ref: bool = name_ref M_NOT_TRUE, constants.%false [concrete = constants.%false] // CHECK:STDOUT: %.loc10: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %c: bool = value_binding c, %M_NOT_TRUE.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.831 = value_binding_pattern d [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.831 = value_binding_pattern d [concrete = constants.%d.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %M_NOT_ZERO.ref: bool = name_ref M_NOT_ZERO, constants.%true [concrete = constants.%true] // CHECK:STDOUT: %.loc11: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %d: bool = value_binding d, %M_NOT_ZERO.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %e.patt: %pattern_type.831 = value_binding_pattern e [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type.831 = value_binding_pattern e [concrete = constants.%e.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc12: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %M_ONE_EQ_ONE.ref: bool = name_ref M_ONE_EQ_ONE, constants.%true [concrete = constants.%true] // CHECK:STDOUT: %.loc12: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %e: bool = value_binding e, %M_ONE_EQ_ONE.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %f.patt: %pattern_type.831 = value_binding_pattern f [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type.831 = value_binding_pattern f [concrete = constants.%f.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc13: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %M_ONE_NEQ_ONE.ref: bool = name_ref M_ONE_NEQ_ONE, constants.%false [concrete = constants.%false] // CHECK:STDOUT: %.loc13: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %f: bool = value_binding f, %M_ONE_NEQ_ONE.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %g.patt: %pattern_type.831 = value_binding_pattern g [concrete] +// CHECK:STDOUT: %g.patt: %pattern_type.831 = value_binding_pattern g [concrete = constants.%g.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc14: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %M_AND.ref: bool = name_ref M_AND, constants.%true [concrete = constants.%true] // CHECK:STDOUT: %.loc14: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %g: bool = value_binding g, %M_AND.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %h.patt: %pattern_type.831 = value_binding_pattern h [concrete] +// CHECK:STDOUT: %h.patt: %pattern_type.831 = value_binding_pattern h [concrete = constants.%h.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc15: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %M_OR.ref: bool = name_ref M_OR, constants.%true [concrete = constants.%true] // CHECK:STDOUT: %.loc15: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %h: bool = value_binding h, %M_OR.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %i.patt: %pattern_type.831 = value_binding_pattern i [concrete] +// CHECK:STDOUT: %i.patt: %pattern_type.831 = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc16: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %M_COMPLEX.ref: bool = name_ref M_COMPLEX, constants.%true [concrete = constants.%true] // CHECK:STDOUT: %.loc16: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %i: bool = value_binding i, %M_COMPLEX.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %j.patt: %pattern_type.6b6 = value_binding_pattern j [concrete] +// CHECK:STDOUT: %j.patt: %pattern_type.6b6 = value_binding_pattern j [concrete = constants.%j.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc18: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: @@ -1723,7 +1771,7 @@ fn F() { // CHECK:STDOUT: %i32.loc18: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %j: %i32 = value_binding j, %M_ONE.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %k.patt: %pattern_type.6b6 = value_binding_pattern k [concrete] +// CHECK:STDOUT: %k.patt: %pattern_type.6b6 = value_binding_pattern k [concrete = constants.%k.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc19: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: @@ -1852,6 +1900,7 @@ fn F() { // CHECK:STDOUT: constants { // CHECK:STDOUT: %A: type = class_type @A [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %A [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = value_binding_pattern a [concrete] // CHECK:STDOUT: %int_1: %A = int_value 1 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1867,7 +1916,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc11_25: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %M_A.ref: %A = name_ref M_A, constants.%int_1 [concrete = constants.%int_1] @@ -1885,8 +1934,11 @@ fn F() { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.patt.bb2: %pattern_type.6b6 = value_binding_pattern a [concrete] // CHECK:STDOUT: %const: type = const_type %i32 [concrete] // CHECK:STDOUT: %pattern_type.ed1: type = pattern_type %const [concrete] +// CHECK:STDOUT: %a.patt.85b: %pattern_type.ed1 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.ed1 = var_pattern %a.patt.85b [concrete] // CHECK:STDOUT: %a.var: ref %i32 = var imports.%a.var_patt [concrete] // CHECK:STDOUT: %int_1: %i32 = int_value 1 [concrete] // CHECK:STDOUT: } @@ -1896,24 +1948,24 @@ fn F() { // CHECK:STDOUT: .M_CONSTEXPR_INT = %a.var // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %a.patt: %pattern_type.ed1 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.ed1 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.ed1 = ref_binding_pattern a [concrete = constants.%a.patt.85b] +// CHECK:STDOUT: %a.var_patt: %pattern_type.ed1 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: %a.var: ref %const = var %a.var_patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = value_binding_pattern a [concrete = constants.%a.patt.bb2] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: // CHECK:STDOUT: %M_CONSTEXPR_INT.ref: ref %const = name_ref M_CONSTEXPR_INT, imports.%a.var [concrete = imports.%a.var] -// CHECK:STDOUT: %i32.loc11: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc11_26.1: ref %i32 = as_compatible %M_CONSTEXPR_INT.ref [concrete = constants.%a.var] // CHECK:STDOUT: %.loc11_26.2: ref %i32 = converted %M_CONSTEXPR_INT.ref, %.loc11_26.1 [concrete = constants.%a.var] // CHECK:STDOUT: // CHECK:STDOUT: %.loc11_26.3: %i32 = acquire_value %.loc11_26.2 [concrete = constants.%int_1] +// CHECK:STDOUT: %i32.loc11: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %a: %i32 = value_binding a, %.loc11_26.3 // CHECK:STDOUT: // CHECK:STDOUT: } @@ -1926,7 +1978,10 @@ fn F() { // CHECK:STDOUT: %const: type = const_type %i32 [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %const [concrete] // CHECK:STDOUT: %pattern_type.8c1: type = pattern_type %ptr [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.8c1 = value_binding_pattern p [concrete] // CHECK:STDOUT: %pattern_type.ed1: type = pattern_type %const [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.ed1 = ref_binding_pattern n [concrete] +// CHECK:STDOUT: %n.var_patt: %pattern_type.ed1 = var_pattern %n.patt [concrete] // CHECK:STDOUT: %addr: %ptr = addr_of imports.%n.var [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1935,14 +1990,14 @@ fn F() { // CHECK:STDOUT: .N = %n.var // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %n.patt: %pattern_type.ed1 = ref_binding_pattern n [concrete] -// CHECK:STDOUT: %n.var_patt: %pattern_type.ed1 = var_pattern %n.patt [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.ed1 = ref_binding_pattern n [concrete = constants.%n.patt] +// CHECK:STDOUT: %n.var_patt: %pattern_type.ed1 = var_pattern %n.patt [concrete = constants.%n.var_patt] // CHECK:STDOUT: %n.var: ref %const = var %n.var_patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: %pattern_type.8c1 = value_binding_pattern p [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.8c1 = value_binding_pattern p [concrete = constants.%p.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc10: type = splice_block %ptr [concrete = constants.%ptr] { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] @@ -1967,6 +2022,7 @@ fn F() { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %i.patt: %pattern_type.6b6 = value_binding_pattern i [concrete] // CHECK:STDOUT: %int_7: %i32 = int_value 7 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1980,7 +2036,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %i.patt: %pattern_type.6b6 = value_binding_pattern i [concrete] +// CHECK:STDOUT: %i.patt: %pattern_type.6b6 = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: @@ -1996,6 +2052,7 @@ fn F() { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = value_binding_pattern a [concrete] // CHECK:STDOUT: %int_2: %i32 = int_value 2 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -2009,7 +2066,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: @@ -2025,6 +2082,7 @@ fn F() { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = value_binding_pattern a [concrete] // CHECK:STDOUT: %int_2: %i32 = int_value 2 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -2038,7 +2096,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: @@ -2054,6 +2112,8 @@ fn F() { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.6b6 = ref_binding_pattern v [concrete] +// CHECK:STDOUT: %v.var_patt: %pattern_type.6b6 = var_pattern %v.patt [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %ImplicitAs.type.914: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %To: Core.IntLiteral = symbolic_binding To, 0 [symbolic] @@ -2076,8 +2136,8 @@ fn F() { // CHECK:STDOUT: .m = %v.var // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %v.patt: %pattern_type.6b6 = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: %pattern_type.6b6 = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.6b6 = ref_binding_pattern v [concrete = constants.%v.patt] +// CHECK:STDOUT: %v.var_patt: %pattern_type.6b6 = var_pattern %v.patt [concrete = constants.%v.var_patt] // CHECK:STDOUT: %v.var: ref %i32 = var %v.var_patt [concrete] // CHECK:STDOUT: %Core.import_ref.edf: @Core.IntLiteral.as.ImplicitAs.impl.0e9.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.e74) = import_ref Core//prelude/types/int, loc{{\d+_\d+}}, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.0e9.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.845)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.b3c = impl_witness_table (%Core.import_ref.edf), @Core.IntLiteral.as.ImplicitAs.impl.0e9 [concrete] @@ -2106,6 +2166,8 @@ fn F() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %A: type = class_type @A [concrete] // CHECK:STDOUT: %pattern_type.3fa: type = pattern_type %A [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.3fa = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.3fa = var_pattern %a.patt [concrete] // CHECK:STDOUT: %B: type = class_type @B [concrete] // CHECK:STDOUT: %A.elem: type = unbound_element_type %A, %B [concrete] // CHECK:STDOUT: %B.elem: type = unbound_element_type %B, %i32 [concrete] @@ -2133,8 +2195,8 @@ fn F() { // CHECK:STDOUT: .m = constants.%.47b // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %a.patt: %pattern_type.3fa = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.3fa = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.3fa = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.3fa = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: %a.var: ref %A = var %a.var_patt [concrete] // CHECK:STDOUT: %Core.import_ref.edf: @Core.IntLiteral.as.ImplicitAs.impl.0e9.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.e74) = import_ref Core//prelude/types/int, loc{{\d+_\d+}}, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.0e9.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.845)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.b3c = impl_witness_table (%Core.import_ref.edf), @Core.IntLiteral.as.ImplicitAs.impl.0e9 [concrete] diff --git a/toolchain/check/testdata/interop/cpp/operators/arithmetic_operators.carbon b/toolchain/check/testdata/interop/cpp/operators/arithmetic_operators.carbon index d5e413e266a5..10eaadd0be4a 100644 --- a/toolchain/check/testdata/interop/cpp/operators/arithmetic_operators.carbon +++ b/toolchain/check/testdata/interop/cpp/operators/arithmetic_operators.carbon @@ -310,11 +310,15 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %pattern_type.429: type = pattern_type %Destroy.type [concrete] +// CHECK:STDOUT: %Result.patt: %pattern_type.429 = symbolic_binding_pattern Result, 0 [symbolic] // CHECK:STDOUT: %Result: %Destroy.type = symbolic_binding Result, 0 [symbolic] +// CHECK:STDOUT: %U.patt.7a2: %pattern_type.429 = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %U.f40: %Destroy.type = symbolic_binding U, 1 [symbolic] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Other: type = symbolic_binding Other, 0 [symbolic] // CHECK:STDOUT: %AddWith.type.7e9: type = facet_type <@AddWith.1, @AddWith.1(%Other)> [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %Self.96a: %AddWith.type.7e9 = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %AddWith.assoc_type.588: type = assoc_entity_type @AddWith.1, @AddWith.1(%Other) [symbolic] // CHECK:STDOUT: %AddWith.WithSelf.Op.type.28e: type = fn_type @AddWith.WithSelf.Op, @AddWith.WithSelf(%Other, %Self.96a) [symbolic] @@ -333,11 +337,18 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %Result.as_type: type = facet_access_type %Result [symbolic] // CHECK:STDOUT: %facet_type.096: type = facet_type <@Destroy & @AddWith.1, @AddWith.1(%U.as_type.b61) where %impl.elem0.8bb = %Result.as_type> [symbolic] // CHECK:STDOUT: %pattern_type.3fb: type = pattern_type %facet_type.096 [symbolic] +// CHECK:STDOUT: %T.patt.c80: %pattern_type.3fb = symbolic_binding_pattern T, 2 [symbolic] // CHECK:STDOUT: %T.200: %facet_type.096 = symbolic_binding T, 2 [symbolic] // CHECK:STDOUT: %pattern_type.f4e485.2: type = pattern_type %Result.as_type [symbolic] +// CHECK:STDOUT: %result.param_patt.6ba: %pattern_type.f4e485.2 = value_param_pattern [symbolic] +// CHECK:STDOUT: %result.patt.748373.1: %pattern_type.f4e485.2 = at_binding_pattern result, %result.param_patt.6ba [symbolic] // CHECK:STDOUT: %T.as_type.606: type = facet_access_type %T.200 [symbolic] // CHECK:STDOUT: %pattern_type.82c: type = pattern_type %T.as_type.606 [symbolic] +// CHECK:STDOUT: %x.param_patt.4c4: %pattern_type.82c = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.eac: %pattern_type.82c = at_binding_pattern x, %x.param_patt.4c4 [symbolic] // CHECK:STDOUT: %pattern_type.753: type = pattern_type %U.as_type.b61 [symbolic] +// CHECK:STDOUT: %y.param_patt.740: %pattern_type.753 = value_param_pattern [symbolic] +// CHECK:STDOUT: %y.patt.4ae: %pattern_type.753 = at_binding_pattern y, %y.param_patt.740 [symbolic] // CHECK:STDOUT: %require_complete.15e: = require_complete_type %AddWith.type.9da [symbolic] // CHECK:STDOUT: %assoc1.57d: %AddWith.assoc_type.588 = assoc_entity element1, imports.%Core.import_ref.9768 [symbolic] // CHECK:STDOUT: %AddWith.lookup_impl_witness.8b3: = lookup_impl_witness %T.200, @AddWith.1, @AddWith.1(%U.as_type.b61) [symbolic] @@ -368,9 +379,12 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.0fb: type = impl_witness_access %SubWith.lookup_impl_witness.ce5, element0 [symbolic] // CHECK:STDOUT: %facet_type.5a5: type = facet_type <@Destroy & @SubWith.1, @SubWith.1(%U.as_type.b61) where %impl.elem0.0fb = %Result.as_type> [symbolic] // CHECK:STDOUT: %pattern_type.156: type = pattern_type %facet_type.5a5 [symbolic] +// CHECK:STDOUT: %T.patt.53c: %pattern_type.156 = symbolic_binding_pattern T, 2 [symbolic] // CHECK:STDOUT: %T.967: %facet_type.5a5 = symbolic_binding T, 2 [symbolic] // CHECK:STDOUT: %T.as_type.b22: type = facet_access_type %T.967 [symbolic] // CHECK:STDOUT: %pattern_type.000: type = pattern_type %T.as_type.b22 [symbolic] +// CHECK:STDOUT: %x.param_patt.408: %pattern_type.000 = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.a66: %pattern_type.000 = at_binding_pattern x, %x.param_patt.408 [symbolic] // CHECK:STDOUT: %require_complete.6ff: = require_complete_type %SubWith.type.b5d [symbolic] // CHECK:STDOUT: %assoc1.178: %SubWith.assoc_type.b0b = assoc_entity element1, imports.%Core.import_ref.b59 [symbolic] // CHECK:STDOUT: %SubWith.lookup_impl_witness.07c: = lookup_impl_witness %T.967, @SubWith.1, @SubWith.1(%U.as_type.b61) [symbolic] @@ -396,9 +410,12 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.10f: type = impl_witness_access %MulWith.lookup_impl_witness.0d7, element0 [symbolic] // CHECK:STDOUT: %facet_type.c32: type = facet_type <@Destroy & @MulWith.1, @MulWith.1(%U.as_type.b61) where %impl.elem0.10f = %Result.as_type> [symbolic] // CHECK:STDOUT: %pattern_type.d38: type = pattern_type %facet_type.c32 [symbolic] +// CHECK:STDOUT: %T.patt.881: %pattern_type.d38 = symbolic_binding_pattern T, 2 [symbolic] // CHECK:STDOUT: %T.546: %facet_type.c32 = symbolic_binding T, 2 [symbolic] // CHECK:STDOUT: %T.as_type.427: type = facet_access_type %T.546 [symbolic] // CHECK:STDOUT: %pattern_type.d10: type = pattern_type %T.as_type.427 [symbolic] +// CHECK:STDOUT: %x.param_patt.df8: %pattern_type.d10 = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.32c: %pattern_type.d10 = at_binding_pattern x, %x.param_patt.df8 [symbolic] // CHECK:STDOUT: %require_complete.861: = require_complete_type %MulWith.type.f02 [symbolic] // CHECK:STDOUT: %assoc1.8f7: %MulWith.assoc_type.7b2 = assoc_entity element1, imports.%Core.import_ref.955 [symbolic] // CHECK:STDOUT: %MulWith.lookup_impl_witness.a55: = lookup_impl_witness %T.546, @MulWith.1, @MulWith.1(%U.as_type.b61) [symbolic] @@ -424,9 +441,12 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.df8: type = impl_witness_access %DivWith.lookup_impl_witness.d63, element0 [symbolic] // CHECK:STDOUT: %facet_type.2f8: type = facet_type <@Destroy & @DivWith.1, @DivWith.1(%U.as_type.b61) where %impl.elem0.df8 = %Result.as_type> [symbolic] // CHECK:STDOUT: %pattern_type.297: type = pattern_type %facet_type.2f8 [symbolic] +// CHECK:STDOUT: %T.patt.7ab: %pattern_type.297 = symbolic_binding_pattern T, 2 [symbolic] // CHECK:STDOUT: %T.040: %facet_type.2f8 = symbolic_binding T, 2 [symbolic] // CHECK:STDOUT: %T.as_type.a31: type = facet_access_type %T.040 [symbolic] // CHECK:STDOUT: %pattern_type.126: type = pattern_type %T.as_type.a31 [symbolic] +// CHECK:STDOUT: %x.param_patt.422: %pattern_type.126 = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.bed: %pattern_type.126 = at_binding_pattern x, %x.param_patt.422 [symbolic] // CHECK:STDOUT: %require_complete.026: = require_complete_type %DivWith.type.523 [symbolic] // CHECK:STDOUT: %assoc1.7b1: %DivWith.assoc_type.d8b = assoc_entity element1, imports.%Core.import_ref.8b6 [symbolic] // CHECK:STDOUT: %DivWith.lookup_impl_witness.df2: = lookup_impl_witness %T.040, @DivWith.1, @DivWith.1(%U.as_type.b61) [symbolic] @@ -452,9 +472,12 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.36b: type = impl_witness_access %ModWith.lookup_impl_witness.4a2, element0 [symbolic] // CHECK:STDOUT: %facet_type.9a0: type = facet_type <@Destroy & @ModWith.1, @ModWith.1(%U.as_type.b61) where %impl.elem0.36b = %Result.as_type> [symbolic] // CHECK:STDOUT: %pattern_type.82f: type = pattern_type %facet_type.9a0 [symbolic] +// CHECK:STDOUT: %T.patt.74f: %pattern_type.82f = symbolic_binding_pattern T, 2 [symbolic] // CHECK:STDOUT: %T.095: %facet_type.9a0 = symbolic_binding T, 2 [symbolic] // CHECK:STDOUT: %T.as_type.fcd: type = facet_access_type %T.095 [symbolic] // CHECK:STDOUT: %pattern_type.2e7: type = pattern_type %T.as_type.fcd [symbolic] +// CHECK:STDOUT: %x.param_patt.a0f: %pattern_type.2e7 = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.d43: %pattern_type.2e7 = at_binding_pattern x, %x.param_patt.a0f [symbolic] // CHECK:STDOUT: %require_complete.a4a: = require_complete_type %ModWith.type.937 [symbolic] // CHECK:STDOUT: %assoc1.132: %ModWith.assoc_type.316 = assoc_entity element1, imports.%Core.import_ref.33c [symbolic] // CHECK:STDOUT: %ModWith.lookup_impl_witness.054: = lookup_impl_witness %T.095, @ModWith.1, @ModWith.1(%U.as_type.b61) [symbolic] @@ -472,6 +495,8 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %int_16: Core.IntLiteral = int_value 16 [concrete] // CHECK:STDOUT: %i16: type = class_type @Int, @Int(%int_16) [concrete] // CHECK:STDOUT: %pattern_type.203: type = pattern_type %i16 [concrete] +// CHECK:STDOUT: %x.param_patt.676: %pattern_type.203 = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.26e: %pattern_type.203 = at_binding_pattern x, %x.param_patt.676 [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %i16.builtin: type = int_type signed, %int_16 [concrete] @@ -500,6 +525,11 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %complete_type.a82: = complete_type_witness %facet_type.297 [concrete] // CHECK:STDOUT: %.Self.as_type.9c7: type = facet_access_type %.Self.120 [symbolic_self] // CHECK:STDOUT: %pattern_type.48e: type = pattern_type %facet_type.376 [concrete] +// CHECK:STDOUT: %T.patt.5cc: %pattern_type.48e = symbolic_binding_pattern T, 2 [symbolic] +// CHECK:STDOUT: %result.param_patt.be6: %pattern_type.785 = value_param_pattern [concrete] +// CHECK:STDOUT: %result.patt.488: %pattern_type.785 = at_binding_pattern result, %result.param_patt.be6 [concrete] +// CHECK:STDOUT: %y.param_patt.418: %pattern_type.785 = value_param_pattern [concrete] +// CHECK:STDOUT: %y.patt.4e6: %pattern_type.785 = at_binding_pattern y, %y.param_patt.418 [concrete] // CHECK:STDOUT: %facet_type.b15: type = facet_type <@Destroy & @SubWith.1, @SubWith.1(%Int16)> [concrete] // CHECK:STDOUT: %.Self.4e4: %facet_type.b15 = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %SubWith.lookup_impl_witness.780: = lookup_impl_witness %.Self.4e4, @SubWith.1, @SubWith.1(%Int16) [symbolic_self] @@ -516,6 +546,7 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %complete_type.647: = complete_type_witness %facet_type.b15 [concrete] // CHECK:STDOUT: %.Self.as_type.bcf: type = facet_access_type %.Self.4e4 [symbolic_self] // CHECK:STDOUT: %pattern_type.943: type = pattern_type %facet_type.2e5 [concrete] +// CHECK:STDOUT: %T.patt.bc1: %pattern_type.943 = symbolic_binding_pattern T, 2 [symbolic] // CHECK:STDOUT: %facet_type.a64: type = facet_type <@Destroy & @MulWith.1, @MulWith.1(%Int16)> [concrete] // CHECK:STDOUT: %.Self.c25: %facet_type.a64 = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %MulWith.lookup_impl_witness.e32: = lookup_impl_witness %.Self.c25, @MulWith.1, @MulWith.1(%Int16) [symbolic_self] @@ -532,6 +563,7 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %complete_type.4d3: = complete_type_witness %facet_type.a64 [concrete] // CHECK:STDOUT: %.Self.as_type.354: type = facet_access_type %.Self.c25 [symbolic_self] // CHECK:STDOUT: %pattern_type.b79: type = pattern_type %facet_type.e71 [concrete] +// CHECK:STDOUT: %T.patt.544: %pattern_type.b79 = symbolic_binding_pattern T, 2 [symbolic] // CHECK:STDOUT: %facet_type.0b4: type = facet_type <@Destroy & @DivWith.1, @DivWith.1(%Int16)> [concrete] // CHECK:STDOUT: %.Self.927: %facet_type.0b4 = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %DivWith.lookup_impl_witness.ac4: = lookup_impl_witness %.Self.927, @DivWith.1, @DivWith.1(%Int16) [symbolic_self] @@ -548,6 +580,7 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %complete_type.acc: = complete_type_witness %facet_type.0b4 [concrete] // CHECK:STDOUT: %.Self.as_type.87a: type = facet_access_type %.Self.927 [symbolic_self] // CHECK:STDOUT: %pattern_type.abe: type = pattern_type %facet_type.84f [concrete] +// CHECK:STDOUT: %T.patt.15c: %pattern_type.abe = symbolic_binding_pattern T, 2 [symbolic] // CHECK:STDOUT: %facet_type.ee8: type = facet_type <@Destroy & @ModWith.1, @ModWith.1(%Int16)> [concrete] // CHECK:STDOUT: %.Self.a1e: %facet_type.ee8 = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %ModWith.lookup_impl_witness.c0b: = lookup_impl_witness %.Self.a1e, @ModWith.1, @ModWith.1(%Int16) [symbolic_self] @@ -564,6 +597,7 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %complete_type.8fc: = complete_type_witness %facet_type.ee8 [concrete] // CHECK:STDOUT: %.Self.as_type.1da: type = facet_access_type %.Self.a1e [symbolic_self] // CHECK:STDOUT: %pattern_type.45b: type = pattern_type %facet_type.1b7 [concrete] +// CHECK:STDOUT: %T.patt.a2e: %pattern_type.45b = symbolic_binding_pattern T, 2 [symbolic] // CHECK:STDOUT: %facet_type.1cc: type = facet_type <@Destroy & @AddWith.1, @AddWith.1(%i16)> [concrete] // CHECK:STDOUT: %.Self.b3b: %facet_type.1cc = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %AddWith.lookup_impl_witness.fc6: = lookup_impl_witness %.Self.b3b, @AddWith.1, @AddWith.1(%i16) [symbolic_self] @@ -580,6 +614,11 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %complete_type.5a6: = complete_type_witness %facet_type.1cc [concrete] // CHECK:STDOUT: %.Self.as_type.552: type = facet_access_type %.Self.b3b [symbolic_self] // CHECK:STDOUT: %pattern_type.9c1: type = pattern_type %facet_type.3ae [concrete] +// CHECK:STDOUT: %T.patt.ec4: %pattern_type.9c1 = symbolic_binding_pattern T, 2 [symbolic] +// CHECK:STDOUT: %x.param_patt.3b0: %pattern_type.785 = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.b76: %pattern_type.785 = at_binding_pattern x, %x.param_patt.3b0 [concrete] +// CHECK:STDOUT: %y.param_patt.4b4: %pattern_type.203 = value_param_pattern [concrete] +// CHECK:STDOUT: %y.patt.dd3: %pattern_type.203 = at_binding_pattern y, %y.param_patt.4b4 [concrete] // CHECK:STDOUT: %facet_type.cb2: type = facet_type <@Destroy & @SubWith.1, @SubWith.1(%i16)> [concrete] // CHECK:STDOUT: %.Self.408: %facet_type.cb2 = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %SubWith.lookup_impl_witness.8c9: = lookup_impl_witness %.Self.408, @SubWith.1, @SubWith.1(%i16) [symbolic_self] @@ -596,6 +635,7 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %complete_type.090: = complete_type_witness %facet_type.cb2 [concrete] // CHECK:STDOUT: %.Self.as_type.d2a: type = facet_access_type %.Self.408 [symbolic_self] // CHECK:STDOUT: %pattern_type.612: type = pattern_type %facet_type.a54 [concrete] +// CHECK:STDOUT: %T.patt.c74: %pattern_type.612 = symbolic_binding_pattern T, 2 [symbolic] // CHECK:STDOUT: %facet_type.67c: type = facet_type <@Destroy & @MulWith.1, @MulWith.1(%i16)> [concrete] // CHECK:STDOUT: %.Self.3be: %facet_type.67c = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %MulWith.lookup_impl_witness.446: = lookup_impl_witness %.Self.3be, @MulWith.1, @MulWith.1(%i16) [symbolic_self] @@ -612,6 +652,7 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %complete_type.a8b: = complete_type_witness %facet_type.67c [concrete] // CHECK:STDOUT: %.Self.as_type.523: type = facet_access_type %.Self.3be [symbolic_self] // CHECK:STDOUT: %pattern_type.fc4: type = pattern_type %facet_type.d1d [concrete] +// CHECK:STDOUT: %T.patt.ce4: %pattern_type.fc4 = symbolic_binding_pattern T, 2 [symbolic] // CHECK:STDOUT: %facet_type.86c8: type = facet_type <@Destroy & @DivWith.1, @DivWith.1(%i16)> [concrete] // CHECK:STDOUT: %.Self.2ad: %facet_type.86c8 = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %DivWith.lookup_impl_witness.2b4: = lookup_impl_witness %.Self.2ad, @DivWith.1, @DivWith.1(%i16) [symbolic_self] @@ -628,6 +669,7 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %complete_type.1cb: = complete_type_witness %facet_type.86c8 [concrete] // CHECK:STDOUT: %.Self.as_type.445: type = facet_access_type %.Self.2ad [symbolic_self] // CHECK:STDOUT: %pattern_type.b62: type = pattern_type %facet_type.bdc [concrete] +// CHECK:STDOUT: %T.patt.596: %pattern_type.b62 = symbolic_binding_pattern T, 2 [symbolic] // CHECK:STDOUT: %facet_type.afdb: type = facet_type <@Destroy & @ModWith.1, @ModWith.1(%i16)> [concrete] // CHECK:STDOUT: %.Self.ceb: %facet_type.afdb = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %ModWith.lookup_impl_witness.af5: = lookup_impl_witness %.Self.ceb, @ModWith.1, @ModWith.1(%i16) [symbolic_self] @@ -644,6 +686,7 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %complete_type.1f9: = complete_type_witness %facet_type.afdb [concrete] // CHECK:STDOUT: %.Self.as_type.1c1: type = facet_access_type %.Self.ceb [symbolic_self] // CHECK:STDOUT: %pattern_type.9c7: type = pattern_type %facet_type.dde [concrete] +// CHECK:STDOUT: %T.patt.b55: %pattern_type.9c7 = symbolic_binding_pattern T, 2 [symbolic] // CHECK:STDOUT: %Int32.Op.type.83af6e.1: type = fn_type @Int32.Op.1 [concrete] // CHECK:STDOUT: %Int32.Op.4dca31.1: %Int32.Op.type.83af6e.1 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.e7a31c.2: = custom_witness (%Int32.Op.4dca31.1), @Destroy [concrete] @@ -664,6 +707,11 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %complete_type.224: = complete_type_witness %facet_type.698 [concrete] // CHECK:STDOUT: %.Self.as_type.cbd: type = facet_access_type %.Self.1bc [symbolic_self] // CHECK:STDOUT: %pattern_type.44d: type = pattern_type %facet_type.cf0 [concrete] +// CHECK:STDOUT: %T.patt.fb1: %pattern_type.44d = symbolic_binding_pattern T, 2 [symbolic] +// CHECK:STDOUT: %result.param_patt.e81: %pattern_type.8b4 = value_param_pattern [concrete] +// CHECK:STDOUT: %result.patt.830: %pattern_type.8b4 = at_binding_pattern result, %result.param_patt.e81 [concrete] +// CHECK:STDOUT: %y.param_patt.e0c: %pattern_type.8b4 = value_param_pattern [concrete] +// CHECK:STDOUT: %y.patt.0a3: %pattern_type.8b4 = at_binding_pattern y, %y.param_patt.e0c [concrete] // CHECK:STDOUT: %facet_type.44e: type = facet_type <@Destroy & @SubWith.1, @SubWith.1(%Int32)> [concrete] // CHECK:STDOUT: %.Self.4d7: %facet_type.44e = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %SubWith.lookup_impl_witness.566: = lookup_impl_witness %.Self.4d7, @SubWith.1, @SubWith.1(%Int32) [symbolic_self] @@ -680,6 +728,7 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %complete_type.63f: = complete_type_witness %facet_type.44e [concrete] // CHECK:STDOUT: %.Self.as_type.07c: type = facet_access_type %.Self.4d7 [symbolic_self] // CHECK:STDOUT: %pattern_type.9624: type = pattern_type %facet_type.0f8 [concrete] +// CHECK:STDOUT: %T.patt.bd6: %pattern_type.9624 = symbolic_binding_pattern T, 2 [symbolic] // CHECK:STDOUT: %facet_type.ff6: type = facet_type <@Destroy & @MulWith.1, @MulWith.1(%Int32)> [concrete] // CHECK:STDOUT: %.Self.a5b: %facet_type.ff6 = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %MulWith.lookup_impl_witness.a28: = lookup_impl_witness %.Self.a5b, @MulWith.1, @MulWith.1(%Int32) [symbolic_self] @@ -696,6 +745,7 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %complete_type.3fe: = complete_type_witness %facet_type.ff6 [concrete] // CHECK:STDOUT: %.Self.as_type.646: type = facet_access_type %.Self.a5b [symbolic_self] // CHECK:STDOUT: %pattern_type.08b: type = pattern_type %facet_type.cf6 [concrete] +// CHECK:STDOUT: %T.patt.1f7: %pattern_type.08b = symbolic_binding_pattern T, 2 [symbolic] // CHECK:STDOUT: %facet_type.d41: type = facet_type <@Destroy & @DivWith.1, @DivWith.1(%Int32)> [concrete] // CHECK:STDOUT: %.Self.d8c: %facet_type.d41 = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %DivWith.lookup_impl_witness.d3c: = lookup_impl_witness %.Self.d8c, @DivWith.1, @DivWith.1(%Int32) [symbolic_self] @@ -712,6 +762,7 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %complete_type.11b: = complete_type_witness %facet_type.d41 [concrete] // CHECK:STDOUT: %.Self.as_type.30d: type = facet_access_type %.Self.d8c [symbolic_self] // CHECK:STDOUT: %pattern_type.379: type = pattern_type %facet_type.639 [concrete] +// CHECK:STDOUT: %T.patt.2d3: %pattern_type.379 = symbolic_binding_pattern T, 2 [symbolic] // CHECK:STDOUT: %facet_type.ea8: type = facet_type <@Destroy & @ModWith.1, @ModWith.1(%Int32)> [concrete] // CHECK:STDOUT: %.Self.46e: %facet_type.ea8 = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %ModWith.lookup_impl_witness.b37: = lookup_impl_witness %.Self.46e, @ModWith.1, @ModWith.1(%Int32) [symbolic_self] @@ -728,36 +779,44 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %complete_type.2aa: = complete_type_witness %facet_type.ea8 [concrete] // CHECK:STDOUT: %.Self.as_type.7e4: type = facet_access_type %.Self.46e [symbolic_self] // CHECK:STDOUT: %pattern_type.e4f: type = pattern_type %facet_type.cac [concrete] +// CHECK:STDOUT: %T.patt.786: %pattern_type.e4f = symbolic_binding_pattern T, 2 [symbolic] // CHECK:STDOUT: %facet_type.2c6: type = facet_type <@Destroy & @AddWith.1, @AddWith.1(%Int16) where %impl.elem0.7e0 = %Int32> [concrete] // CHECK:STDOUT: %Int32.Op.type.83af6e.2: type = fn_type @Int32.Op.2 [concrete] // CHECK:STDOUT: %Int32.Op.4dca31.2: %Int32.Op.type.83af6e.2 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.15f: = custom_witness (%Int32, %Int32.Op.4dca31.2), @AddWith.1, @AddWith.1(%Int16) [concrete] // CHECK:STDOUT: %facet_value.aa2: %facet_type.2c6 = facet_value %Int32, (%custom_witness.e7a31c.2, %custom_witness.15f) [concrete] // CHECK:STDOUT: %pattern_type.96f: type = pattern_type %facet_type.2c6 [concrete] +// CHECK:STDOUT: %T.patt.bd3: %pattern_type.96f = symbolic_binding_pattern T, 2 [symbolic] +// CHECK:STDOUT: %x.param_patt.27c: %pattern_type.8b4 = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.4c9: %pattern_type.8b4 = at_binding_pattern x, %x.param_patt.27c [concrete] // CHECK:STDOUT: %facet_type.076: type = facet_type <@Destroy & @SubWith.1, @SubWith.1(%Int16) where %impl.elem0.104 = %Int32> [concrete] // CHECK:STDOUT: %Int32.Op.type.83af6e.3: type = fn_type @Int32.Op.3 [concrete] // CHECK:STDOUT: %Int32.Op.4dca31.3: %Int32.Op.type.83af6e.3 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.bb4: = custom_witness (%Int32, %Int32.Op.4dca31.3), @SubWith.1, @SubWith.1(%Int16) [concrete] // CHECK:STDOUT: %facet_value.577: %facet_type.076 = facet_value %Int32, (%custom_witness.e7a31c.2, %custom_witness.bb4) [concrete] // CHECK:STDOUT: %pattern_type.05c: type = pattern_type %facet_type.076 [concrete] +// CHECK:STDOUT: %T.patt.f98: %pattern_type.05c = symbolic_binding_pattern T, 2 [symbolic] // CHECK:STDOUT: %facet_type.163: type = facet_type <@Destroy & @MulWith.1, @MulWith.1(%Int16) where %impl.elem0.472 = %Int32> [concrete] // CHECK:STDOUT: %Int32.Op.type.83af6e.4: type = fn_type @Int32.Op.4 [concrete] // CHECK:STDOUT: %Int32.Op.4dca31.4: %Int32.Op.type.83af6e.4 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.0ab: = custom_witness (%Int32, %Int32.Op.4dca31.4), @MulWith.1, @MulWith.1(%Int16) [concrete] // CHECK:STDOUT: %facet_value.0f9: %facet_type.163 = facet_value %Int32, (%custom_witness.e7a31c.2, %custom_witness.0ab) [concrete] // CHECK:STDOUT: %pattern_type.59d: type = pattern_type %facet_type.163 [concrete] +// CHECK:STDOUT: %T.patt.e40: %pattern_type.59d = symbolic_binding_pattern T, 2 [symbolic] // CHECK:STDOUT: %facet_type.f1f: type = facet_type <@Destroy & @DivWith.1, @DivWith.1(%Int16) where %impl.elem0.6aa = %Int32> [concrete] // CHECK:STDOUT: %Int32.Op.type.83af6e.5: type = fn_type @Int32.Op.5 [concrete] // CHECK:STDOUT: %Int32.Op.4dca31.5: %Int32.Op.type.83af6e.5 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.3ec: = custom_witness (%Int32, %Int32.Op.4dca31.5), @DivWith.1, @DivWith.1(%Int16) [concrete] // CHECK:STDOUT: %facet_value.53b: %facet_type.f1f = facet_value %Int32, (%custom_witness.e7a31c.2, %custom_witness.3ec) [concrete] // CHECK:STDOUT: %pattern_type.c6c: type = pattern_type %facet_type.f1f [concrete] +// CHECK:STDOUT: %T.patt.361: %pattern_type.c6c = symbolic_binding_pattern T, 2 [symbolic] // CHECK:STDOUT: %facet_type.3eb: type = facet_type <@Destroy & @ModWith.1, @ModWith.1(%Int16) where %impl.elem0.dae = %Int32> [concrete] // CHECK:STDOUT: %Int32.Op.type.83af6e.6: type = fn_type @Int32.Op.6 [concrete] // CHECK:STDOUT: %Int32.Op.4dca31.6: %Int32.Op.type.83af6e.6 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.de0: = custom_witness (%Int32, %Int32.Op.4dca31.6), @ModWith.1, @ModWith.1(%Int16) [concrete] // CHECK:STDOUT: %facet_value.b75a: %facet_type.3eb = facet_value %Int32, (%custom_witness.e7a31c.2, %custom_witness.de0) [concrete] // CHECK:STDOUT: %pattern_type.205: type = pattern_type %facet_type.3eb [concrete] +// CHECK:STDOUT: %T.patt.1df: %pattern_type.205 = symbolic_binding_pattern T, 2 [symbolic] // CHECK:STDOUT: %Int32.Op.type.83af6e.7: type = fn_type @Int32.Op.7 [concrete] // CHECK:STDOUT: %Int32.Op.4dca31.7: %Int32.Op.type.83af6e.7 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.e02e0c.2: = custom_witness (%Int32, %Int32.Op.4dca31.7), @AddWith.1, @AddWith.1(%Int32) [concrete] @@ -787,6 +846,8 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %AddWith.lookup_impl_witness.dd9: = lookup_impl_witness %.Self.52f, @AddWith.1, @AddWith.1(%Int64) [symbolic_self] // CHECK:STDOUT: %impl.elem0.325: type = impl_witness_access %AddWith.lookup_impl_witness.dd9, element0 [symbolic_self] // CHECK:STDOUT: %facet_type.466: type = facet_type <@Destroy & @AddWith.1, @AddWith.1(%Int64) where %impl.elem0.325 = %Int64> [concrete] +// CHECK:STDOUT: %y.param_patt.a08: %pattern_type.4aa = value_param_pattern [concrete] +// CHECK:STDOUT: %y.patt.63b: %pattern_type.4aa = at_binding_pattern y, %y.param_patt.a08 [concrete] // CHECK:STDOUT: %AddWith.type.b5b: type = facet_type <@AddWith.1, @AddWith.1(%Int64)> [concrete] // CHECK:STDOUT: %AddWith.assoc_type.0c5: type = assoc_entity_type @AddWith.1, @AddWith.1(%Int64) [concrete] // CHECK:STDOUT: %assoc0.947: %AddWith.assoc_type.0c5 = assoc_entity element0, imports.%Core.import_ref.91f8 [concrete] @@ -798,6 +859,9 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %complete_type.412: = complete_type_witness %facet_type.afd1 [concrete] // CHECK:STDOUT: %.Self.as_type.7a8: type = facet_access_type %.Self.52f [symbolic_self] // CHECK:STDOUT: %pattern_type.a1a: type = pattern_type %facet_type.466 [concrete] +// CHECK:STDOUT: %T.patt.7de: %pattern_type.a1a = symbolic_binding_pattern T, 2 [symbolic] +// CHECK:STDOUT: %result.param_patt.1e1: %pattern_type.4aa = value_param_pattern [concrete] +// CHECK:STDOUT: %result.patt.41f: %pattern_type.4aa = at_binding_pattern result, %result.param_patt.1e1 [concrete] // CHECK:STDOUT: %facet_type.502: type = facet_type <@Destroy & @SubWith.1, @SubWith.1(%Int64)> [concrete] // CHECK:STDOUT: %.Self.26a: %facet_type.502 = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %SubWith.lookup_impl_witness.61b: = lookup_impl_witness %.Self.26a, @SubWith.1, @SubWith.1(%Int64) [symbolic_self] @@ -814,6 +878,7 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %complete_type.181: = complete_type_witness %facet_type.502 [concrete] // CHECK:STDOUT: %.Self.as_type.5b8: type = facet_access_type %.Self.26a [symbolic_self] // CHECK:STDOUT: %pattern_type.84a: type = pattern_type %facet_type.b42 [concrete] +// CHECK:STDOUT: %T.patt.726: %pattern_type.84a = symbolic_binding_pattern T, 2 [symbolic] // CHECK:STDOUT: %facet_type.770: type = facet_type <@Destroy & @MulWith.1, @MulWith.1(%Int64)> [concrete] // CHECK:STDOUT: %.Self.700: %facet_type.770 = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %MulWith.lookup_impl_witness.6cf: = lookup_impl_witness %.Self.700, @MulWith.1, @MulWith.1(%Int64) [symbolic_self] @@ -830,6 +895,7 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %complete_type.16e: = complete_type_witness %facet_type.770 [concrete] // CHECK:STDOUT: %.Self.as_type.356: type = facet_access_type %.Self.700 [symbolic_self] // CHECK:STDOUT: %pattern_type.1fe: type = pattern_type %facet_type.5ef [concrete] +// CHECK:STDOUT: %T.patt.cb4: %pattern_type.1fe = symbolic_binding_pattern T, 2 [symbolic] // CHECK:STDOUT: %facet_type.c98: type = facet_type <@Destroy & @DivWith.1, @DivWith.1(%Int64)> [concrete] // CHECK:STDOUT: %.Self.837: %facet_type.c98 = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %DivWith.lookup_impl_witness.7a8: = lookup_impl_witness %.Self.837, @DivWith.1, @DivWith.1(%Int64) [symbolic_self] @@ -846,6 +912,7 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %complete_type.621: = complete_type_witness %facet_type.c98 [concrete] // CHECK:STDOUT: %.Self.as_type.6a2: type = facet_access_type %.Self.837 [symbolic_self] // CHECK:STDOUT: %pattern_type.2d9: type = pattern_type %facet_type.be3 [concrete] +// CHECK:STDOUT: %T.patt.219: %pattern_type.2d9 = symbolic_binding_pattern T, 2 [symbolic] // CHECK:STDOUT: %facet_type.f26: type = facet_type <@Destroy & @ModWith.1, @ModWith.1(%Int64)> [concrete] // CHECK:STDOUT: %.Self.767: %facet_type.f26 = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %ModWith.lookup_impl_witness.e0f: = lookup_impl_witness %.Self.767, @ModWith.1, @ModWith.1(%Int64) [symbolic_self] @@ -862,42 +929,51 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %complete_type.359: = complete_type_witness %facet_type.f26 [concrete] // CHECK:STDOUT: %.Self.as_type.1a7: type = facet_access_type %.Self.767 [symbolic_self] // CHECK:STDOUT: %pattern_type.41c: type = pattern_type %facet_type.74d [concrete] +// CHECK:STDOUT: %T.patt.078: %pattern_type.41c = symbolic_binding_pattern T, 2 [symbolic] // CHECK:STDOUT: %facet_type.fdd: type = facet_type <@Destroy & @AddWith.1, @AddWith.1(%Int32) where %impl.elem0.899 = %Int64> [concrete] // CHECK:STDOUT: %Op.type.442b68.11: type = fn_type @Op.11 [concrete] // CHECK:STDOUT: %Op.72717c.11: %Op.type.442b68.11 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.98f: = custom_witness (%Int64, %Op.72717c.11), @AddWith.1, @AddWith.1(%Int32) [concrete] // CHECK:STDOUT: %facet_value.7d0: %facet_type.fdd = facet_value %Int64, (%custom_witness.e7a31c.3, %custom_witness.98f) [concrete] // CHECK:STDOUT: %pattern_type.5b4: type = pattern_type %facet_type.fdd [concrete] +// CHECK:STDOUT: %T.patt.688: %pattern_type.5b4 = symbolic_binding_pattern T, 2 [symbolic] +// CHECK:STDOUT: %x.param_patt.e68: %pattern_type.4aa = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.52a: %pattern_type.4aa = at_binding_pattern x, %x.param_patt.e68 [concrete] // CHECK:STDOUT: %facet_type.2c4: type = facet_type <@Destroy & @SubWith.1, @SubWith.1(%Int32) where %impl.elem0.ee1 = %Int64> [concrete] // CHECK:STDOUT: %Op.type.442b68.12: type = fn_type @Op.12 [concrete] // CHECK:STDOUT: %Op.72717c.12: %Op.type.442b68.12 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.5c3: = custom_witness (%Int64, %Op.72717c.12), @SubWith.1, @SubWith.1(%Int32) [concrete] // CHECK:STDOUT: %facet_value.51b: %facet_type.2c4 = facet_value %Int64, (%custom_witness.e7a31c.3, %custom_witness.5c3) [concrete] // CHECK:STDOUT: %pattern_type.515: type = pattern_type %facet_type.2c4 [concrete] +// CHECK:STDOUT: %T.patt.080: %pattern_type.515 = symbolic_binding_pattern T, 2 [symbolic] // CHECK:STDOUT: %facet_type.99c: type = facet_type <@Destroy & @MulWith.1, @MulWith.1(%Int32) where %impl.elem0.d19 = %Int64> [concrete] // CHECK:STDOUT: %Op.type.442b68.13: type = fn_type @Op.13 [concrete] // CHECK:STDOUT: %Op.72717c.13: %Op.type.442b68.13 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.ac0: = custom_witness (%Int64, %Op.72717c.13), @MulWith.1, @MulWith.1(%Int32) [concrete] // CHECK:STDOUT: %facet_value.738: %facet_type.99c = facet_value %Int64, (%custom_witness.e7a31c.3, %custom_witness.ac0) [concrete] // CHECK:STDOUT: %pattern_type.bb6: type = pattern_type %facet_type.99c [concrete] +// CHECK:STDOUT: %T.patt.03e: %pattern_type.bb6 = symbolic_binding_pattern T, 2 [symbolic] // CHECK:STDOUT: %facet_type.7ce: type = facet_type <@Destroy & @DivWith.1, @DivWith.1(%Int32) where %impl.elem0.282 = %Int64> [concrete] // CHECK:STDOUT: %Op.type.442b68.14: type = fn_type @Op.14 [concrete] // CHECK:STDOUT: %Op.72717c.14: %Op.type.442b68.14 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.c98: = custom_witness (%Int64, %Op.72717c.14), @DivWith.1, @DivWith.1(%Int32) [concrete] // CHECK:STDOUT: %facet_value.c2b: %facet_type.7ce = facet_value %Int64, (%custom_witness.e7a31c.3, %custom_witness.c98) [concrete] // CHECK:STDOUT: %pattern_type.59a: type = pattern_type %facet_type.7ce [concrete] +// CHECK:STDOUT: %T.patt.161: %pattern_type.59a = symbolic_binding_pattern T, 2 [symbolic] // CHECK:STDOUT: %facet_type.c2e: type = facet_type <@Destroy & @ModWith.1, @ModWith.1(%Int32) where %impl.elem0.32c = %Int64> [concrete] // CHECK:STDOUT: %Op.type.442b68.15: type = fn_type @Op.15 [concrete] // CHECK:STDOUT: %Op.72717c.15: %Op.type.442b68.15 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.e66: = custom_witness (%Int64, %Op.72717c.15), @ModWith.1, @ModWith.1(%Int32) [concrete] // CHECK:STDOUT: %facet_value.606: %facet_type.c2e = facet_value %Int64, (%custom_witness.e7a31c.3, %custom_witness.e66) [concrete] // CHECK:STDOUT: %pattern_type.af40: type = pattern_type %facet_type.c2e [concrete] +// CHECK:STDOUT: %T.patt.cb9: %pattern_type.af40 = symbolic_binding_pattern T, 2 [symbolic] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.c2c: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.191) [concrete] // CHECK:STDOUT: %.c2e: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.c2c, %Destroy.facet.191 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.b76: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.099) [concrete] // CHECK:STDOUT: %.043: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.b76, %Destroy.facet.099 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.9d5: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.2cc) [concrete] // CHECK:STDOUT: %.6da: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.9d5, %Destroy.facet.2cc [concrete] +// CHECK:STDOUT: %U.patt.d47: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %U.67d: type = symbolic_binding U, 0 [symbolic] // CHECK:STDOUT: %AddAssignWith.type.2c8890.1: type = facet_type <@AddAssignWith.1, @AddAssignWith.1(%Other)> [symbolic] // CHECK:STDOUT: %Self.792732.1: %AddAssignWith.type.2c8890.1 = symbolic_binding Self, 1 [symbolic] @@ -906,12 +982,17 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %AddAssignWith.WithSelf.Op.106889.1: %AddAssignWith.WithSelf.Op.type.cd574e.1 = struct_value () [symbolic] // CHECK:STDOUT: %AddAssignWith.type.2c8890.2: type = facet_type <@AddAssignWith.1, @AddAssignWith.1(%U.67d)> [symbolic] // CHECK:STDOUT: %pattern_type.82d: type = pattern_type %AddAssignWith.type.2c8890.2 [symbolic] +// CHECK:STDOUT: %T.patt.a22: %pattern_type.82d = symbolic_binding_pattern T, 1 [symbolic] // CHECK:STDOUT: %T.792: %AddAssignWith.type.2c8890.2 = symbolic_binding T, 1 [symbolic] // CHECK:STDOUT: %AddAssignWith.assoc_type.8ddaf4.2: type = assoc_entity_type @AddAssignWith.1, @AddAssignWith.1(%U.67d) [symbolic] // CHECK:STDOUT: %assoc0.8c5739.2: %AddAssignWith.assoc_type.8ddaf4.2 = assoc_entity element0, imports.%Core.import_ref.3b2 [symbolic] // CHECK:STDOUT: %T.as_type.50c: type = facet_access_type %T.792 [symbolic] // CHECK:STDOUT: %pattern_type.643306.2: type = pattern_type %T.as_type.50c [symbolic] +// CHECK:STDOUT: %x.patt.227: %pattern_type.643306.2 = ref_binding_pattern x [symbolic] +// CHECK:STDOUT: %x.param_patt.343: %pattern_type.643306.2 = var_param_pattern %x.patt.227 [symbolic] // CHECK:STDOUT: %pattern_type.51d1c4.4: type = pattern_type %U.67d [symbolic] +// CHECK:STDOUT: %y.param_patt.be3: %pattern_type.51d1c4.4 = value_param_pattern [symbolic] +// CHECK:STDOUT: %y.patt.b85: %pattern_type.51d1c4.4 = at_binding_pattern y, %y.param_patt.be3 [symbolic] // CHECK:STDOUT: %require_complete.2a8: = require_complete_type %AddAssignWith.type.2c8890.2 [symbolic] // CHECK:STDOUT: %assoc0.86d: %AddAssignWith.assoc_type.8ddaf4.1 = assoc_entity element0, imports.%Core.import_ref.87e [symbolic] // CHECK:STDOUT: %AddAssignWith.lookup_impl_witness: = lookup_impl_witness %T.792, @AddAssignWith.1, @AddAssignWith.1(%U.67d) [symbolic] @@ -926,11 +1007,14 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %SubAssignWith.WithSelf.Op.25af21.1: %SubAssignWith.WithSelf.Op.type.42f7cc.1 = struct_value () [symbolic] // CHECK:STDOUT: %SubAssignWith.type.7e53cf.2: type = facet_type <@SubAssignWith.1, @SubAssignWith.1(%U.67d)> [symbolic] // CHECK:STDOUT: %pattern_type.260: type = pattern_type %SubAssignWith.type.7e53cf.2 [symbolic] +// CHECK:STDOUT: %T.patt.f45: %pattern_type.260 = symbolic_binding_pattern T, 1 [symbolic] // CHECK:STDOUT: %T.f6c: %SubAssignWith.type.7e53cf.2 = symbolic_binding T, 1 [symbolic] // CHECK:STDOUT: %SubAssignWith.assoc_type.6e3877.2: type = assoc_entity_type @SubAssignWith.1, @SubAssignWith.1(%U.67d) [symbolic] // CHECK:STDOUT: %assoc0.701e5f.2: %SubAssignWith.assoc_type.6e3877.2 = assoc_entity element0, imports.%Core.import_ref.8f2 [symbolic] // CHECK:STDOUT: %T.as_type.3ff: type = facet_access_type %T.f6c [symbolic] // CHECK:STDOUT: %pattern_type.f08ed5.2: type = pattern_type %T.as_type.3ff [symbolic] +// CHECK:STDOUT: %x.patt.95a: %pattern_type.f08ed5.2 = ref_binding_pattern x [symbolic] +// CHECK:STDOUT: %x.param_patt.a45: %pattern_type.f08ed5.2 = var_param_pattern %x.patt.95a [symbolic] // CHECK:STDOUT: %require_complete.862: = require_complete_type %SubAssignWith.type.7e53cf.2 [symbolic] // CHECK:STDOUT: %assoc0.b8e: %SubAssignWith.assoc_type.6e3877.1 = assoc_entity element0, imports.%Core.import_ref.e7f [symbolic] // CHECK:STDOUT: %SubAssignWith.lookup_impl_witness: = lookup_impl_witness %T.f6c, @SubAssignWith.1, @SubAssignWith.1(%U.67d) [symbolic] @@ -945,11 +1029,14 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %MulAssignWith.WithSelf.Op.ee0eda.1: %MulAssignWith.WithSelf.Op.type.5df5bd.1 = struct_value () [symbolic] // CHECK:STDOUT: %MulAssignWith.type.3a0e4d.2: type = facet_type <@MulAssignWith.1, @MulAssignWith.1(%U.67d)> [symbolic] // CHECK:STDOUT: %pattern_type.8c2: type = pattern_type %MulAssignWith.type.3a0e4d.2 [symbolic] +// CHECK:STDOUT: %T.patt.db5: %pattern_type.8c2 = symbolic_binding_pattern T, 1 [symbolic] // CHECK:STDOUT: %T.64d: %MulAssignWith.type.3a0e4d.2 = symbolic_binding T, 1 [symbolic] // CHECK:STDOUT: %MulAssignWith.assoc_type.9aa18f.2: type = assoc_entity_type @MulAssignWith.1, @MulAssignWith.1(%U.67d) [symbolic] // CHECK:STDOUT: %assoc0.22264a.2: %MulAssignWith.assoc_type.9aa18f.2 = assoc_entity element0, imports.%Core.import_ref.ba3 [symbolic] // CHECK:STDOUT: %T.as_type.1de: type = facet_access_type %T.64d [symbolic] // CHECK:STDOUT: %pattern_type.8bf366.2: type = pattern_type %T.as_type.1de [symbolic] +// CHECK:STDOUT: %x.patt.4e9: %pattern_type.8bf366.2 = ref_binding_pattern x [symbolic] +// CHECK:STDOUT: %x.param_patt.6c8: %pattern_type.8bf366.2 = var_param_pattern %x.patt.4e9 [symbolic] // CHECK:STDOUT: %require_complete.6b1: = require_complete_type %MulAssignWith.type.3a0e4d.2 [symbolic] // CHECK:STDOUT: %assoc0.2ec: %MulAssignWith.assoc_type.9aa18f.1 = assoc_entity element0, imports.%Core.import_ref.408 [symbolic] // CHECK:STDOUT: %MulAssignWith.lookup_impl_witness: = lookup_impl_witness %T.64d, @MulAssignWith.1, @MulAssignWith.1(%U.67d) [symbolic] @@ -964,11 +1051,14 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %DivAssignWith.WithSelf.Op.91e0ff.1: %DivAssignWith.WithSelf.Op.type.ff5775.1 = struct_value () [symbolic] // CHECK:STDOUT: %DivAssignWith.type.7e58ca.2: type = facet_type <@DivAssignWith.1, @DivAssignWith.1(%U.67d)> [symbolic] // CHECK:STDOUT: %pattern_type.f74: type = pattern_type %DivAssignWith.type.7e58ca.2 [symbolic] +// CHECK:STDOUT: %T.patt.9a5: %pattern_type.f74 = symbolic_binding_pattern T, 1 [symbolic] // CHECK:STDOUT: %T.c33: %DivAssignWith.type.7e58ca.2 = symbolic_binding T, 1 [symbolic] // CHECK:STDOUT: %DivAssignWith.assoc_type.bb68ec.2: type = assoc_entity_type @DivAssignWith.1, @DivAssignWith.1(%U.67d) [symbolic] // CHECK:STDOUT: %assoc0.32f100.2: %DivAssignWith.assoc_type.bb68ec.2 = assoc_entity element0, imports.%Core.import_ref.a5d [symbolic] // CHECK:STDOUT: %T.as_type.e57: type = facet_access_type %T.c33 [symbolic] // CHECK:STDOUT: %pattern_type.da303b.2: type = pattern_type %T.as_type.e57 [symbolic] +// CHECK:STDOUT: %x.patt.cf6: %pattern_type.da303b.2 = ref_binding_pattern x [symbolic] +// CHECK:STDOUT: %x.param_patt.660: %pattern_type.da303b.2 = var_param_pattern %x.patt.cf6 [symbolic] // CHECK:STDOUT: %require_complete.c5c: = require_complete_type %DivAssignWith.type.7e58ca.2 [symbolic] // CHECK:STDOUT: %assoc0.de1: %DivAssignWith.assoc_type.bb68ec.1 = assoc_entity element0, imports.%Core.import_ref.df2 [symbolic] // CHECK:STDOUT: %DivAssignWith.lookup_impl_witness: = lookup_impl_witness %T.c33, @DivAssignWith.1, @DivAssignWith.1(%U.67d) [symbolic] @@ -983,11 +1073,14 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %ModAssignWith.WithSelf.Op.ac45fc.1: %ModAssignWith.WithSelf.Op.type.ec4109.1 = struct_value () [symbolic] // CHECK:STDOUT: %ModAssignWith.type.778d68.2: type = facet_type <@ModAssignWith.1, @ModAssignWith.1(%U.67d)> [symbolic] // CHECK:STDOUT: %pattern_type.fb8: type = pattern_type %ModAssignWith.type.778d68.2 [symbolic] +// CHECK:STDOUT: %T.patt.c29: %pattern_type.fb8 = symbolic_binding_pattern T, 1 [symbolic] // CHECK:STDOUT: %T.bca: %ModAssignWith.type.778d68.2 = symbolic_binding T, 1 [symbolic] // CHECK:STDOUT: %ModAssignWith.assoc_type.bc79ec.2: type = assoc_entity_type @ModAssignWith.1, @ModAssignWith.1(%U.67d) [symbolic] // CHECK:STDOUT: %assoc0.8c0719.2: %ModAssignWith.assoc_type.bc79ec.2 = assoc_entity element0, imports.%Core.import_ref.cf6 [symbolic] // CHECK:STDOUT: %T.as_type.ce6: type = facet_access_type %T.bca [symbolic] // CHECK:STDOUT: %pattern_type.1d5f30.2: type = pattern_type %T.as_type.ce6 [symbolic] +// CHECK:STDOUT: %x.patt.fa4: %pattern_type.1d5f30.2 = ref_binding_pattern x [symbolic] +// CHECK:STDOUT: %x.param_patt.749: %pattern_type.1d5f30.2 = var_param_pattern %x.patt.fa4 [symbolic] // CHECK:STDOUT: %require_complete.680: = require_complete_type %ModAssignWith.type.778d68.2 [symbolic] // CHECK:STDOUT: %assoc0.0f3: %ModAssignWith.assoc_type.bc79ec.1 = assoc_entity element0, imports.%Core.import_ref.d29 [symbolic] // CHECK:STDOUT: %ModAssignWith.lookup_impl_witness: = lookup_impl_witness %T.bca, @ModAssignWith.1, @ModAssignWith.1(%U.67d) [symbolic] @@ -1003,6 +1096,9 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %custom_witness.6a0: = custom_witness (%Int16.Op.4dca31.13), @AddAssignWith.1, @AddAssignWith.1(%i16) [concrete] // CHECK:STDOUT: %AddAssignWith.facet.e34: %AddAssignWith.type.2a0 = facet_value %Int16, (%custom_witness.6a0) [concrete] // CHECK:STDOUT: %pattern_type.b256: type = pattern_type %AddAssignWith.type.2a0 [concrete] +// CHECK:STDOUT: %T.patt.d2a: %pattern_type.b256 = symbolic_binding_pattern T, 1 [symbolic] +// CHECK:STDOUT: %x.patt.49e: %pattern_type.785 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.param_patt.69a: %pattern_type.785 = var_param_pattern %x.patt.49e [concrete] // CHECK:STDOUT: %SubAssignWith.type.e8b: type = facet_type <@SubAssignWith.1, @SubAssignWith.1(%i16)> [concrete] // CHECK:STDOUT: %SubAssignWith.assoc_type.e13: type = assoc_entity_type @SubAssignWith.1, @SubAssignWith.1(%i16) [concrete] // CHECK:STDOUT: %assoc0.47c: %SubAssignWith.assoc_type.e13 = assoc_entity element0, imports.%Core.import_ref.8f2 [concrete] @@ -1011,6 +1107,7 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %custom_witness.722: = custom_witness (%Int16.Op.4dca31.14), @SubAssignWith.1, @SubAssignWith.1(%i16) [concrete] // CHECK:STDOUT: %SubAssignWith.facet.a52: %SubAssignWith.type.e8b = facet_value %Int16, (%custom_witness.722) [concrete] // CHECK:STDOUT: %pattern_type.c22: type = pattern_type %SubAssignWith.type.e8b [concrete] +// CHECK:STDOUT: %T.patt.0f1: %pattern_type.c22 = symbolic_binding_pattern T, 1 [symbolic] // CHECK:STDOUT: %MulAssignWith.type.7d4: type = facet_type <@MulAssignWith.1, @MulAssignWith.1(%i16)> [concrete] // CHECK:STDOUT: %MulAssignWith.assoc_type.aa8: type = assoc_entity_type @MulAssignWith.1, @MulAssignWith.1(%i16) [concrete] // CHECK:STDOUT: %assoc0.137: %MulAssignWith.assoc_type.aa8 = assoc_entity element0, imports.%Core.import_ref.ba3 [concrete] @@ -1019,6 +1116,7 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %custom_witness.c67: = custom_witness (%Int16.Op.4dca31.15), @MulAssignWith.1, @MulAssignWith.1(%i16) [concrete] // CHECK:STDOUT: %MulAssignWith.facet.201: %MulAssignWith.type.7d4 = facet_value %Int16, (%custom_witness.c67) [concrete] // CHECK:STDOUT: %pattern_type.a24: type = pattern_type %MulAssignWith.type.7d4 [concrete] +// CHECK:STDOUT: %T.patt.f71: %pattern_type.a24 = symbolic_binding_pattern T, 1 [symbolic] // CHECK:STDOUT: %DivAssignWith.type.081: type = facet_type <@DivAssignWith.1, @DivAssignWith.1(%i16)> [concrete] // CHECK:STDOUT: %DivAssignWith.assoc_type.791: type = assoc_entity_type @DivAssignWith.1, @DivAssignWith.1(%i16) [concrete] // CHECK:STDOUT: %assoc0.a3b: %DivAssignWith.assoc_type.791 = assoc_entity element0, imports.%Core.import_ref.a5d [concrete] @@ -1027,6 +1125,7 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %custom_witness.91d: = custom_witness (%Int16.Op.4dca31.16), @DivAssignWith.1, @DivAssignWith.1(%i16) [concrete] // CHECK:STDOUT: %DivAssignWith.facet.a72: %DivAssignWith.type.081 = facet_value %Int16, (%custom_witness.91d) [concrete] // CHECK:STDOUT: %pattern_type.c97: type = pattern_type %DivAssignWith.type.081 [concrete] +// CHECK:STDOUT: %T.patt.35e: %pattern_type.c97 = symbolic_binding_pattern T, 1 [symbolic] // CHECK:STDOUT: %ModAssignWith.type.1ea: type = facet_type <@ModAssignWith.1, @ModAssignWith.1(%i16)> [concrete] // CHECK:STDOUT: %ModAssignWith.assoc_type.91d: type = assoc_entity_type @ModAssignWith.1, @ModAssignWith.1(%i16) [concrete] // CHECK:STDOUT: %assoc0.b7f: %ModAssignWith.assoc_type.91d = assoc_entity element0, imports.%Core.import_ref.cf6 [concrete] @@ -1035,6 +1134,7 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %custom_witness.17b: = custom_witness (%Int16.Op.4dca31.17), @ModAssignWith.1, @ModAssignWith.1(%i16) [concrete] // CHECK:STDOUT: %ModAssignWith.facet.4a2: %ModAssignWith.type.1ea = facet_value %Int16, (%custom_witness.17b) [concrete] // CHECK:STDOUT: %pattern_type.6ef: type = pattern_type %ModAssignWith.type.1ea [concrete] +// CHECK:STDOUT: %T.patt.dbe: %pattern_type.6ef = symbolic_binding_pattern T, 1 [symbolic] // CHECK:STDOUT: %AddAssignWith.type.23a: type = facet_type <@AddAssignWith.1, @AddAssignWith.1(%Int32)> [concrete] // CHECK:STDOUT: %AddAssignWith.assoc_type.4c7: type = assoc_entity_type @AddAssignWith.1, @AddAssignWith.1(%Int32) [concrete] // CHECK:STDOUT: %assoc0.114: %AddAssignWith.assoc_type.4c7 = assoc_entity element0, imports.%Core.import_ref.3b2 [concrete] @@ -1043,6 +1143,9 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %custom_witness.ebf67a.1: = custom_witness (%Int32.Op.4dca31.12), @AddAssignWith.1, @AddAssignWith.1(%Int32) [concrete] // CHECK:STDOUT: %AddAssignWith.facet.348: %AddAssignWith.type.23a = facet_value %Int32, (%custom_witness.ebf67a.1) [concrete] // CHECK:STDOUT: %pattern_type.5ad: type = pattern_type %AddAssignWith.type.23a [concrete] +// CHECK:STDOUT: %T.patt.96c: %pattern_type.5ad = symbolic_binding_pattern T, 1 [symbolic] +// CHECK:STDOUT: %x.patt.d79: %pattern_type.8b4 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.param_patt.0c7: %pattern_type.8b4 = var_param_pattern %x.patt.d79 [concrete] // CHECK:STDOUT: %SubAssignWith.type.4fc: type = facet_type <@SubAssignWith.1, @SubAssignWith.1(%Int32)> [concrete] // CHECK:STDOUT: %SubAssignWith.assoc_type.ac6: type = assoc_entity_type @SubAssignWith.1, @SubAssignWith.1(%Int32) [concrete] // CHECK:STDOUT: %assoc0.c2a: %SubAssignWith.assoc_type.ac6 = assoc_entity element0, imports.%Core.import_ref.8f2 [concrete] @@ -1051,6 +1154,7 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %custom_witness.c2b241.1: = custom_witness (%Int32.Op.4dca31.14), @SubAssignWith.1, @SubAssignWith.1(%Int32) [concrete] // CHECK:STDOUT: %SubAssignWith.facet.e0e: %SubAssignWith.type.4fc = facet_value %Int32, (%custom_witness.c2b241.1) [concrete] // CHECK:STDOUT: %pattern_type.190: type = pattern_type %SubAssignWith.type.4fc [concrete] +// CHECK:STDOUT: %T.patt.a39: %pattern_type.190 = symbolic_binding_pattern T, 1 [symbolic] // CHECK:STDOUT: %MulAssignWith.type.5fb: type = facet_type <@MulAssignWith.1, @MulAssignWith.1(%Int32)> [concrete] // CHECK:STDOUT: %MulAssignWith.assoc_type.c04: type = assoc_entity_type @MulAssignWith.1, @MulAssignWith.1(%Int32) [concrete] // CHECK:STDOUT: %assoc0.2db: %MulAssignWith.assoc_type.c04 = assoc_entity element0, imports.%Core.import_ref.ba3 [concrete] @@ -1059,6 +1163,7 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %custom_witness.ec9760.1: = custom_witness (%Int32.Op.4dca31.15), @MulAssignWith.1, @MulAssignWith.1(%Int32) [concrete] // CHECK:STDOUT: %MulAssignWith.facet.13c: %MulAssignWith.type.5fb = facet_value %Int32, (%custom_witness.ec9760.1) [concrete] // CHECK:STDOUT: %pattern_type.f3b: type = pattern_type %MulAssignWith.type.5fb [concrete] +// CHECK:STDOUT: %T.patt.f66: %pattern_type.f3b = symbolic_binding_pattern T, 1 [symbolic] // CHECK:STDOUT: %DivAssignWith.type.3ea: type = facet_type <@DivAssignWith.1, @DivAssignWith.1(%Int32)> [concrete] // CHECK:STDOUT: %DivAssignWith.assoc_type.ccd: type = assoc_entity_type @DivAssignWith.1, @DivAssignWith.1(%Int32) [concrete] // CHECK:STDOUT: %assoc0.d23: %DivAssignWith.assoc_type.ccd = assoc_entity element0, imports.%Core.import_ref.a5d [concrete] @@ -1067,6 +1172,7 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %custom_witness.9697f7.1: = custom_witness (%Int32.Op.4dca31.16), @DivAssignWith.1, @DivAssignWith.1(%Int32) [concrete] // CHECK:STDOUT: %DivAssignWith.facet.e59: %DivAssignWith.type.3ea = facet_value %Int32, (%custom_witness.9697f7.1) [concrete] // CHECK:STDOUT: %pattern_type.8f3: type = pattern_type %DivAssignWith.type.3ea [concrete] +// CHECK:STDOUT: %T.patt.316: %pattern_type.8f3 = symbolic_binding_pattern T, 1 [symbolic] // CHECK:STDOUT: %ModAssignWith.type.567: type = facet_type <@ModAssignWith.1, @ModAssignWith.1(%Int32)> [concrete] // CHECK:STDOUT: %ModAssignWith.assoc_type.fc5: type = assoc_entity_type @ModAssignWith.1, @ModAssignWith.1(%Int32) [concrete] // CHECK:STDOUT: %assoc0.1c63: %ModAssignWith.assoc_type.fc5 = assoc_entity element0, imports.%Core.import_ref.cf6 [concrete] @@ -1075,10 +1181,13 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %custom_witness.df8f2f.1: = custom_witness (%Int32.Op.4dca31.17), @ModAssignWith.1, @ModAssignWith.1(%Int32) [concrete] // CHECK:STDOUT: %ModAssignWith.facet.dac: %ModAssignWith.type.567 = facet_value %Int32, (%custom_witness.df8f2f.1) [concrete] // CHECK:STDOUT: %pattern_type.9ff: type = pattern_type %ModAssignWith.type.567 [concrete] +// CHECK:STDOUT: %T.patt.6f1: %pattern_type.9ff = symbolic_binding_pattern T, 1 [symbolic] // CHECK:STDOUT: %Int64.Op.type.83af6e.2: type = fn_type @Int64.Op.2 [concrete] // CHECK:STDOUT: %Int64.Op.4dca31.2: %Int64.Op.type.83af6e.2 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.ebf67a.2: = custom_witness (%Int64.Op.4dca31.2), @AddAssignWith.1, @AddAssignWith.1(%Int32) [concrete] // CHECK:STDOUT: %AddAssignWith.facet.144: %AddAssignWith.type.23a = facet_value %Int64, (%custom_witness.ebf67a.2) [concrete] +// CHECK:STDOUT: %x.patt.ace: %pattern_type.4aa = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.param_patt.b33: %pattern_type.4aa = var_param_pattern %x.patt.ace [concrete] // CHECK:STDOUT: %Int64.Op.type.83af6e.4: type = fn_type @Int64.Op.4 [concrete] // CHECK:STDOUT: %Int64.Op.4dca31.4: %Int64.Op.type.83af6e.4 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.c2b241.2: = custom_witness (%Int64.Op.4dca31.4), @SubAssignWith.1, @SubAssignWith.1(%Int32) [concrete] @@ -1096,18 +1205,26 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %custom_witness.df8f2f.2: = custom_witness (%Int64.Op.4dca31.7), @ModAssignWith.1, @ModAssignWith.1(%Int32) [concrete] // CHECK:STDOUT: %ModAssignWith.facet.342: %ModAssignWith.type.567 = facet_value %Int64, (%custom_witness.df8f2f.2) [concrete] // CHECK:STDOUT: %Inc.type: type = facet_type <@Inc> [concrete] +// CHECK:STDOUT: %pattern_type.8c1: type = pattern_type %Inc.type [concrete] +// CHECK:STDOUT: %T.patt.eab: %pattern_type.8c1 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.8f3: %Inc.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.232: type = facet_access_type %T.8f3 [symbolic] // CHECK:STDOUT: %pattern_type.427bfc.2: type = pattern_type %T.as_type.232 [symbolic] +// CHECK:STDOUT: %x.patt.a75: %pattern_type.427bfc.2 = ref_binding_pattern x [symbolic] +// CHECK:STDOUT: %x.param_patt.5da: %pattern_type.427bfc.2 = var_param_pattern %x.patt.a75 [symbolic] // CHECK:STDOUT: %Inc.lookup_impl_witness: = lookup_impl_witness %T.8f3, @Inc [symbolic] // CHECK:STDOUT: %Inc.WithSelf.Op.type.e10ef6.2: type = fn_type @Inc.WithSelf.Op, @Inc.WithSelf(%T.8f3) [symbolic] // CHECK:STDOUT: %.a08: type = fn_type_with_self_type %Inc.WithSelf.Op.type.e10ef6.2, %T.8f3 [symbolic] // CHECK:STDOUT: %impl.elem0.b92: %.a08 = impl_witness_access %Inc.lookup_impl_witness, element0 [symbolic] // CHECK:STDOUT: %specific_impl_fn.855: = specific_impl_function %impl.elem0.b92, @Inc.WithSelf.Op(%T.8f3) [symbolic] // CHECK:STDOUT: %Dec.type: type = facet_type <@Dec> [concrete] +// CHECK:STDOUT: %pattern_type.72a: type = pattern_type %Dec.type [concrete] +// CHECK:STDOUT: %T.patt.de9: %pattern_type.72a = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.e8e: %Dec.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.c32: type = facet_access_type %T.e8e [symbolic] // CHECK:STDOUT: %pattern_type.2754f0.2: type = pattern_type %T.as_type.c32 [symbolic] +// CHECK:STDOUT: %x.patt.08b: %pattern_type.2754f0.2 = ref_binding_pattern x [symbolic] +// CHECK:STDOUT: %x.param_patt.678: %pattern_type.2754f0.2 = var_param_pattern %x.patt.08b [symbolic] // CHECK:STDOUT: %Dec.lookup_impl_witness: = lookup_impl_witness %T.e8e, @Dec [symbolic] // CHECK:STDOUT: %Dec.WithSelf.Op.type.bfa830.2: type = fn_type @Dec.WithSelf.Op, @Dec.WithSelf(%T.e8e) [symbolic] // CHECK:STDOUT: %.aae: type = fn_type_with_self_type %Dec.WithSelf.Op.type.bfa830.2, %T.e8e [symbolic] @@ -1120,9 +1237,14 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.f9d: type = impl_witness_access %Negate.lookup_impl_witness.159, element0 [symbolic_self] // CHECK:STDOUT: %facet_type.b1d: type = facet_type <@Destroy & @Negate where %impl.elem0.f9d = %Result.as_type> [symbolic] // CHECK:STDOUT: %pattern_type.540: type = pattern_type %facet_type.b1d [symbolic] +// CHECK:STDOUT: %T.patt.e96: %pattern_type.540 = symbolic_binding_pattern T, 1 [symbolic] // CHECK:STDOUT: %T.a9d: %facet_type.b1d = symbolic_binding T, 1 [symbolic] +// CHECK:STDOUT: %y.param_patt.023: %pattern_type.f4e485.2 = value_param_pattern [symbolic] +// CHECK:STDOUT: %y.patt.053: %pattern_type.f4e485.2 = at_binding_pattern y, %y.param_patt.023 [symbolic] // CHECK:STDOUT: %T.as_type.a98: type = facet_access_type %T.a9d [symbolic] // CHECK:STDOUT: %pattern_type.962a: type = pattern_type %T.as_type.a98 [symbolic] +// CHECK:STDOUT: %x.param_patt.4f4: %pattern_type.962a = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.31e: %pattern_type.962a = at_binding_pattern x, %x.param_patt.4f4 [symbolic] // CHECK:STDOUT: %Negate.lookup_impl_witness.48a: = lookup_impl_witness %T.a9d, @Negate [symbolic] // CHECK:STDOUT: %Negate.facet.f2f: %Negate.type = facet_value %T.as_type.a98, (%Negate.lookup_impl_witness.48a) [symbolic] // CHECK:STDOUT: %Negate.WithSelf.Op.type.803: type = fn_type @Negate.WithSelf.Op, @Negate.WithSelf(%Negate.facet.f2f) [symbolic] @@ -1143,12 +1265,14 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %custom_witness.100: = custom_witness (%Int64, %Int16.Op.4dca31.18), @Negate [concrete] // CHECK:STDOUT: %facet_value.750: %facet_type.76b = facet_value %Int16, (%custom_witness.e7a31c.1, %custom_witness.100) [concrete] // CHECK:STDOUT: %pattern_type.61c: type = pattern_type %facet_type.76b [concrete] +// CHECK:STDOUT: %T.patt.fd6: %pattern_type.61c = symbolic_binding_pattern T, 1 [symbolic] // CHECK:STDOUT: %facet_type.49d: type = facet_type <@Destroy & @Negate where %impl.elem0.f9d = %Int32> [concrete] // CHECK:STDOUT: %Int32.Op.type.83af6e.20: type = fn_type @Int32.Op.20 [concrete] // CHECK:STDOUT: %Int32.Op.4dca31.20: %Int32.Op.type.83af6e.20 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.a85: = custom_witness (%Int32, %Int32.Op.4dca31.20), @Negate [concrete] // CHECK:STDOUT: %facet_value.42d: %facet_type.49d = facet_value %Int32, (%custom_witness.e7a31c.2, %custom_witness.a85) [concrete] // CHECK:STDOUT: %pattern_type.57c: type = pattern_type %facet_type.49d [concrete] +// CHECK:STDOUT: %T.patt.4fa: %pattern_type.57c = symbolic_binding_pattern T, 1 [symbolic] // CHECK:STDOUT: %complete_type.7a6: = complete_type_witness %AddWith.type.b62 [concrete] // CHECK:STDOUT: %AddWith.facet.ff0: %AddWith.type.b62 = facet_value %i16, (%custom_witness.248) [concrete] // CHECK:STDOUT: %AddWith.WithSelf.Op.type.e1f: type = fn_type @AddWith.WithSelf.Op, @AddWith.WithSelf(%Int16, %AddWith.facet.ff0) [concrete] @@ -1379,13 +1503,13 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %AddWith.lookup_impl_witness.loc126: = lookup_impl_witness %T.loc123_4.1, @AddWith.1, @AddWith.1(%U.as_type.loc123_36.1) [symbolic = %AddWith.lookup_impl_witness.loc126 (constants.%AddWith.lookup_impl_witness.8b3)] // CHECK:STDOUT: %AddWith.facet: @AddWith.loc124.%AddWith.type.loc123_36.1 (%AddWith.type.9da) = facet_value %T.as_type.loc124_29.1, (%AddWith.lookup_impl_witness.loc126) [symbolic = %AddWith.facet (constants.%AddWith.facet.fc9)] // CHECK:STDOUT: %AddWith.WithSelf.Op.type: type = fn_type @AddWith.WithSelf.Op, @AddWith.WithSelf(%U.as_type.loc123_36.1, %AddWith.facet) [symbolic = %AddWith.WithSelf.Op.type (constants.%AddWith.WithSelf.Op.type.eb7)] -// CHECK:STDOUT: %.loc126_5.5: type = fn_type_with_self_type %AddWith.WithSelf.Op.type, %AddWith.facet [symbolic = %.loc126_5.5 (constants.%.012e)] -// CHECK:STDOUT: %impl.elem1.loc126_5.2: @AddWith.loc124.%.loc126_5.5 (%.012e) = impl_witness_access %AddWith.lookup_impl_witness.loc126, element1 [symbolic = %impl.elem1.loc126_5.2 (constants.%impl.elem1.0c1)] +// CHECK:STDOUT: %.loc126_5.6: type = fn_type_with_self_type %AddWith.WithSelf.Op.type, %AddWith.facet [symbolic = %.loc126_5.6 (constants.%.012e)] +// CHECK:STDOUT: %impl.elem1.loc126_5.2: @AddWith.loc124.%.loc126_5.6 (%.012e) = impl_witness_access %AddWith.lookup_impl_witness.loc126, element1 [symbolic = %impl.elem1.loc126_5.2 (constants.%impl.elem1.0c1)] // CHECK:STDOUT: %specific_impl_fn.loc126_5.3: = specific_impl_function %impl.elem1.loc126_5.2, @AddWith.WithSelf.Op(%U.as_type.loc123_36.1, %AddWith.facet) [symbolic = %specific_impl_fn.loc126_5.3 (constants.%specific_impl_fn.95a)] // CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Result.loc121_9.1) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.d3ece9.2)] -// CHECK:STDOUT: %.loc126_5.6: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Result.loc121_9.1 [symbolic = %.loc126_5.6 (constants.%.53a)] +// CHECK:STDOUT: %.loc126_5.7: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Result.loc121_9.1 [symbolic = %.loc126_5.7 (constants.%.53a)] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %Result.loc121_9.1, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness)] -// CHECK:STDOUT: %impl.elem0.loc126_5.2: @AddWith.loc124.%.loc126_5.6 (%.53a) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc126_5.2 (constants.%impl.elem0.0f9)] +// CHECK:STDOUT: %impl.elem0.loc126_5.2: @AddWith.loc124.%.loc126_5.7 (%.53a) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc126_5.2 (constants.%impl.elem0.0f9)] // CHECK:STDOUT: %specific_impl_fn.loc126_5.4: = specific_impl_function %impl.elem0.loc126_5.2, @Destroy.WithSelf.Op(%Result.loc121_9.1) [symbolic = %specific_impl_fn.loc126_5.4 (constants.%specific_impl_fn.afc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%result.param: @AddWith.loc124.%Result.as_type.loc123_54.1 (%Result.as_type), %x.param: @AddWith.loc124.%T.as_type.loc124_29.1 (%T.as_type.606), %y.param: @AddWith.loc124.%U.as_type.loc123_36.1 (%U.as_type.b61)) { @@ -1395,16 +1519,17 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %AddWith.type.loc126: type = facet_type <@AddWith.1, @AddWith.1(constants.%U.as_type.b61)> [symbolic = %AddWith.type.loc123_36.1 (constants.%AddWith.type.9da)] // CHECK:STDOUT: %.loc126_5.1: @AddWith.loc124.%AddWith.assoc_type (%AddWith.assoc_type.bc8) = specific_constant imports.%Core.import_ref.5a1, @AddWith.WithSelf(constants.%U.as_type.b61, constants.%Self.96a) [symbolic = %assoc1 (constants.%assoc1.13e)] // CHECK:STDOUT: %Op.ref: @AddWith.loc124.%AddWith.assoc_type (%AddWith.assoc_type.bc8) = name_ref Op, %.loc126_5.1 [symbolic = %assoc1 (constants.%assoc1.13e)] -// CHECK:STDOUT: %impl.elem1.loc126_5.1: @AddWith.loc124.%.loc126_5.5 (%.012e) = impl_witness_access constants.%AddWith.lookup_impl_witness.8b3, element1 [symbolic = %impl.elem1.loc126_5.2 (constants.%impl.elem1.0c1)] +// CHECK:STDOUT: %impl.elem1.loc126_5.1: @AddWith.loc124.%.loc126_5.6 (%.012e) = impl_witness_access constants.%AddWith.lookup_impl_witness.8b3, element1 [symbolic = %impl.elem1.loc126_5.2 (constants.%impl.elem1.0c1)] // CHECK:STDOUT: %bound_method.loc126_5.1: = bound_method %x.ref, %impl.elem1.loc126_5.1 // CHECK:STDOUT: %specific_impl_fn.loc126_5.1: = specific_impl_function %impl.elem1.loc126_5.1, @AddWith.WithSelf.Op(constants.%U.as_type.b61, constants.%AddWith.facet.fc9) [symbolic = %specific_impl_fn.loc126_5.3 (constants.%specific_impl_fn.95a)] // CHECK:STDOUT: %bound_method.loc126_5.2: = bound_method %x.ref, %specific_impl_fn.loc126_5.1 // CHECK:STDOUT: %.loc126_5.2: ref @AddWith.loc124.%Result.as_type.loc123_54.1 (%Result.as_type) = temporary_storage // CHECK:STDOUT: %AddWith.WithSelf.Op.call: init @AddWith.loc124.%Result.as_type.loc123_54.1 (%Result.as_type) to %.loc126_5.2 = call %bound_method.loc126_5.2(%x.ref, %y.ref) // CHECK:STDOUT: %.loc126_5.3: ref @AddWith.loc124.%Result.as_type.loc123_54.1 (%Result.as_type) = temporary %.loc126_5.2, %AddWith.WithSelf.Op.call -// CHECK:STDOUT: %impl.elem0.loc126_5.1: @AddWith.loc124.%.loc126_5.6 (%.53a) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc126_5.2 (constants.%impl.elem0.0f9)] +// CHECK:STDOUT: %impl.elem0.loc126_5.1: @AddWith.loc124.%.loc126_5.7 (%.53a) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc126_5.2 (constants.%impl.elem0.0f9)] // CHECK:STDOUT: %bound_method.loc126_5.3: = bound_method %.loc126_5.3, %impl.elem0.loc126_5.1 // CHECK:STDOUT: %.loc126_5.4: %Destroy.type = converted constants.%Result.as_type, constants.%Result [symbolic = %Result.loc121_9.1 (constants.%Result)] +// CHECK:STDOUT: %.loc126_5.5: %Destroy.type = converted constants.%Result.as_type, constants.%Result [symbolic = %Result.loc121_9.1 (constants.%Result)] // CHECK:STDOUT: %specific_impl_fn.loc126_5.2: = specific_impl_function %impl.elem0.loc126_5.1, @Destroy.WithSelf.Op(constants.%Result) [symbolic = %specific_impl_fn.loc126_5.4 (constants.%specific_impl_fn.afc)] // CHECK:STDOUT: %bound_method.loc126_5.4: = bound_method %.loc126_5.3, %specific_impl_fn.loc126_5.2 // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc126_5.4(%.loc126_5.3) @@ -1422,13 +1547,13 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %SubWith.lookup_impl_witness.loc137: = lookup_impl_witness %T.loc134_4.1, @SubWith.1, @SubWith.1(%U.as_type.loc134_36.1) [symbolic = %SubWith.lookup_impl_witness.loc137 (constants.%SubWith.lookup_impl_witness.07c)] // CHECK:STDOUT: %SubWith.facet: @SubWith.loc135.%SubWith.type.loc134_36.1 (%SubWith.type.b5d) = facet_value %T.as_type.loc135_29.1, (%SubWith.lookup_impl_witness.loc137) [symbolic = %SubWith.facet (constants.%SubWith.facet.44a)] // CHECK:STDOUT: %SubWith.WithSelf.Op.type: type = fn_type @SubWith.WithSelf.Op, @SubWith.WithSelf(%U.as_type.loc134_36.1, %SubWith.facet) [symbolic = %SubWith.WithSelf.Op.type (constants.%SubWith.WithSelf.Op.type.1fe)] -// CHECK:STDOUT: %.loc137_5.5: type = fn_type_with_self_type %SubWith.WithSelf.Op.type, %SubWith.facet [symbolic = %.loc137_5.5 (constants.%.fa2)] -// CHECK:STDOUT: %impl.elem1.loc137_5.2: @SubWith.loc135.%.loc137_5.5 (%.fa2) = impl_witness_access %SubWith.lookup_impl_witness.loc137, element1 [symbolic = %impl.elem1.loc137_5.2 (constants.%impl.elem1.fc7)] +// CHECK:STDOUT: %.loc137_5.6: type = fn_type_with_self_type %SubWith.WithSelf.Op.type, %SubWith.facet [symbolic = %.loc137_5.6 (constants.%.fa2)] +// CHECK:STDOUT: %impl.elem1.loc137_5.2: @SubWith.loc135.%.loc137_5.6 (%.fa2) = impl_witness_access %SubWith.lookup_impl_witness.loc137, element1 [symbolic = %impl.elem1.loc137_5.2 (constants.%impl.elem1.fc7)] // CHECK:STDOUT: %specific_impl_fn.loc137_5.3: = specific_impl_function %impl.elem1.loc137_5.2, @SubWith.WithSelf.Op(%U.as_type.loc134_36.1, %SubWith.facet) [symbolic = %specific_impl_fn.loc137_5.3 (constants.%specific_impl_fn.3fc)] // CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Result.loc132_9.1) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.d3ece9.2)] -// CHECK:STDOUT: %.loc137_5.6: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Result.loc132_9.1 [symbolic = %.loc137_5.6 (constants.%.53a)] +// CHECK:STDOUT: %.loc137_5.7: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Result.loc132_9.1 [symbolic = %.loc137_5.7 (constants.%.53a)] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %Result.loc132_9.1, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness)] -// CHECK:STDOUT: %impl.elem0.loc137_5.2: @SubWith.loc135.%.loc137_5.6 (%.53a) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc137_5.2 (constants.%impl.elem0.0f9)] +// CHECK:STDOUT: %impl.elem0.loc137_5.2: @SubWith.loc135.%.loc137_5.7 (%.53a) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc137_5.2 (constants.%impl.elem0.0f9)] // CHECK:STDOUT: %specific_impl_fn.loc137_5.4: = specific_impl_function %impl.elem0.loc137_5.2, @Destroy.WithSelf.Op(%Result.loc132_9.1) [symbolic = %specific_impl_fn.loc137_5.4 (constants.%specific_impl_fn.afc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%result.param: @SubWith.loc135.%Result.as_type.loc134_54.1 (%Result.as_type), %x.param: @SubWith.loc135.%T.as_type.loc135_29.1 (%T.as_type.b22), %y.param: @SubWith.loc135.%U.as_type.loc134_36.1 (%U.as_type.b61)) { @@ -1438,16 +1563,17 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %SubWith.type.loc137: type = facet_type <@SubWith.1, @SubWith.1(constants.%U.as_type.b61)> [symbolic = %SubWith.type.loc134_36.1 (constants.%SubWith.type.b5d)] // CHECK:STDOUT: %.loc137_5.1: @SubWith.loc135.%SubWith.assoc_type (%SubWith.assoc_type.3a1) = specific_constant imports.%Core.import_ref.0f3, @SubWith.WithSelf(constants.%U.as_type.b61, constants.%Self.d6b) [symbolic = %assoc1 (constants.%assoc1.8fd)] // CHECK:STDOUT: %Op.ref: @SubWith.loc135.%SubWith.assoc_type (%SubWith.assoc_type.3a1) = name_ref Op, %.loc137_5.1 [symbolic = %assoc1 (constants.%assoc1.8fd)] -// CHECK:STDOUT: %impl.elem1.loc137_5.1: @SubWith.loc135.%.loc137_5.5 (%.fa2) = impl_witness_access constants.%SubWith.lookup_impl_witness.07c, element1 [symbolic = %impl.elem1.loc137_5.2 (constants.%impl.elem1.fc7)] +// CHECK:STDOUT: %impl.elem1.loc137_5.1: @SubWith.loc135.%.loc137_5.6 (%.fa2) = impl_witness_access constants.%SubWith.lookup_impl_witness.07c, element1 [symbolic = %impl.elem1.loc137_5.2 (constants.%impl.elem1.fc7)] // CHECK:STDOUT: %bound_method.loc137_5.1: = bound_method %x.ref, %impl.elem1.loc137_5.1 // CHECK:STDOUT: %specific_impl_fn.loc137_5.1: = specific_impl_function %impl.elem1.loc137_5.1, @SubWith.WithSelf.Op(constants.%U.as_type.b61, constants.%SubWith.facet.44a) [symbolic = %specific_impl_fn.loc137_5.3 (constants.%specific_impl_fn.3fc)] // CHECK:STDOUT: %bound_method.loc137_5.2: = bound_method %x.ref, %specific_impl_fn.loc137_5.1 // CHECK:STDOUT: %.loc137_5.2: ref @SubWith.loc135.%Result.as_type.loc134_54.1 (%Result.as_type) = temporary_storage // CHECK:STDOUT: %SubWith.WithSelf.Op.call: init @SubWith.loc135.%Result.as_type.loc134_54.1 (%Result.as_type) to %.loc137_5.2 = call %bound_method.loc137_5.2(%x.ref, %y.ref) // CHECK:STDOUT: %.loc137_5.3: ref @SubWith.loc135.%Result.as_type.loc134_54.1 (%Result.as_type) = temporary %.loc137_5.2, %SubWith.WithSelf.Op.call -// CHECK:STDOUT: %impl.elem0.loc137_5.1: @SubWith.loc135.%.loc137_5.6 (%.53a) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc137_5.2 (constants.%impl.elem0.0f9)] +// CHECK:STDOUT: %impl.elem0.loc137_5.1: @SubWith.loc135.%.loc137_5.7 (%.53a) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc137_5.2 (constants.%impl.elem0.0f9)] // CHECK:STDOUT: %bound_method.loc137_5.3: = bound_method %.loc137_5.3, %impl.elem0.loc137_5.1 // CHECK:STDOUT: %.loc137_5.4: %Destroy.type = converted constants.%Result.as_type, constants.%Result [symbolic = %Result.loc132_9.1 (constants.%Result)] +// CHECK:STDOUT: %.loc137_5.5: %Destroy.type = converted constants.%Result.as_type, constants.%Result [symbolic = %Result.loc132_9.1 (constants.%Result)] // CHECK:STDOUT: %specific_impl_fn.loc137_5.2: = specific_impl_function %impl.elem0.loc137_5.1, @Destroy.WithSelf.Op(constants.%Result) [symbolic = %specific_impl_fn.loc137_5.4 (constants.%specific_impl_fn.afc)] // CHECK:STDOUT: %bound_method.loc137_5.4: = bound_method %.loc137_5.3, %specific_impl_fn.loc137_5.2 // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc137_5.4(%.loc137_5.3) @@ -1465,13 +1591,13 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %MulWith.lookup_impl_witness.loc148: = lookup_impl_witness %T.loc145_4.1, @MulWith.1, @MulWith.1(%U.as_type.loc145_36.1) [symbolic = %MulWith.lookup_impl_witness.loc148 (constants.%MulWith.lookup_impl_witness.a55)] // CHECK:STDOUT: %MulWith.facet: @MulWith.loc146.%MulWith.type.loc145_36.1 (%MulWith.type.f02) = facet_value %T.as_type.loc146_29.1, (%MulWith.lookup_impl_witness.loc148) [symbolic = %MulWith.facet (constants.%MulWith.facet.5c8)] // CHECK:STDOUT: %MulWith.WithSelf.Op.type: type = fn_type @MulWith.WithSelf.Op, @MulWith.WithSelf(%U.as_type.loc145_36.1, %MulWith.facet) [symbolic = %MulWith.WithSelf.Op.type (constants.%MulWith.WithSelf.Op.type.7b0)] -// CHECK:STDOUT: %.loc148_5.5: type = fn_type_with_self_type %MulWith.WithSelf.Op.type, %MulWith.facet [symbolic = %.loc148_5.5 (constants.%.476)] -// CHECK:STDOUT: %impl.elem1.loc148_5.2: @MulWith.loc146.%.loc148_5.5 (%.476) = impl_witness_access %MulWith.lookup_impl_witness.loc148, element1 [symbolic = %impl.elem1.loc148_5.2 (constants.%impl.elem1.7c4)] +// CHECK:STDOUT: %.loc148_5.6: type = fn_type_with_self_type %MulWith.WithSelf.Op.type, %MulWith.facet [symbolic = %.loc148_5.6 (constants.%.476)] +// CHECK:STDOUT: %impl.elem1.loc148_5.2: @MulWith.loc146.%.loc148_5.6 (%.476) = impl_witness_access %MulWith.lookup_impl_witness.loc148, element1 [symbolic = %impl.elem1.loc148_5.2 (constants.%impl.elem1.7c4)] // CHECK:STDOUT: %specific_impl_fn.loc148_5.3: = specific_impl_function %impl.elem1.loc148_5.2, @MulWith.WithSelf.Op(%U.as_type.loc145_36.1, %MulWith.facet) [symbolic = %specific_impl_fn.loc148_5.3 (constants.%specific_impl_fn.57f)] // CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Result.loc143_9.1) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.d3ece9.2)] -// CHECK:STDOUT: %.loc148_5.6: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Result.loc143_9.1 [symbolic = %.loc148_5.6 (constants.%.53a)] +// CHECK:STDOUT: %.loc148_5.7: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Result.loc143_9.1 [symbolic = %.loc148_5.7 (constants.%.53a)] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %Result.loc143_9.1, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness)] -// CHECK:STDOUT: %impl.elem0.loc148_5.2: @MulWith.loc146.%.loc148_5.6 (%.53a) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc148_5.2 (constants.%impl.elem0.0f9)] +// CHECK:STDOUT: %impl.elem0.loc148_5.2: @MulWith.loc146.%.loc148_5.7 (%.53a) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc148_5.2 (constants.%impl.elem0.0f9)] // CHECK:STDOUT: %specific_impl_fn.loc148_5.4: = specific_impl_function %impl.elem0.loc148_5.2, @Destroy.WithSelf.Op(%Result.loc143_9.1) [symbolic = %specific_impl_fn.loc148_5.4 (constants.%specific_impl_fn.afc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%result.param: @MulWith.loc146.%Result.as_type.loc145_54.1 (%Result.as_type), %x.param: @MulWith.loc146.%T.as_type.loc146_29.1 (%T.as_type.427), %y.param: @MulWith.loc146.%U.as_type.loc145_36.1 (%U.as_type.b61)) { @@ -1481,16 +1607,17 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %MulWith.type.loc148: type = facet_type <@MulWith.1, @MulWith.1(constants.%U.as_type.b61)> [symbolic = %MulWith.type.loc145_36.1 (constants.%MulWith.type.f02)] // CHECK:STDOUT: %.loc148_5.1: @MulWith.loc146.%MulWith.assoc_type (%MulWith.assoc_type.a12) = specific_constant imports.%Core.import_ref.8c1, @MulWith.WithSelf(constants.%U.as_type.b61, constants.%Self.941) [symbolic = %assoc1 (constants.%assoc1.a0f)] // CHECK:STDOUT: %Op.ref: @MulWith.loc146.%MulWith.assoc_type (%MulWith.assoc_type.a12) = name_ref Op, %.loc148_5.1 [symbolic = %assoc1 (constants.%assoc1.a0f)] -// CHECK:STDOUT: %impl.elem1.loc148_5.1: @MulWith.loc146.%.loc148_5.5 (%.476) = impl_witness_access constants.%MulWith.lookup_impl_witness.a55, element1 [symbolic = %impl.elem1.loc148_5.2 (constants.%impl.elem1.7c4)] +// CHECK:STDOUT: %impl.elem1.loc148_5.1: @MulWith.loc146.%.loc148_5.6 (%.476) = impl_witness_access constants.%MulWith.lookup_impl_witness.a55, element1 [symbolic = %impl.elem1.loc148_5.2 (constants.%impl.elem1.7c4)] // CHECK:STDOUT: %bound_method.loc148_5.1: = bound_method %x.ref, %impl.elem1.loc148_5.1 // CHECK:STDOUT: %specific_impl_fn.loc148_5.1: = specific_impl_function %impl.elem1.loc148_5.1, @MulWith.WithSelf.Op(constants.%U.as_type.b61, constants.%MulWith.facet.5c8) [symbolic = %specific_impl_fn.loc148_5.3 (constants.%specific_impl_fn.57f)] // CHECK:STDOUT: %bound_method.loc148_5.2: = bound_method %x.ref, %specific_impl_fn.loc148_5.1 // CHECK:STDOUT: %.loc148_5.2: ref @MulWith.loc146.%Result.as_type.loc145_54.1 (%Result.as_type) = temporary_storage // CHECK:STDOUT: %MulWith.WithSelf.Op.call: init @MulWith.loc146.%Result.as_type.loc145_54.1 (%Result.as_type) to %.loc148_5.2 = call %bound_method.loc148_5.2(%x.ref, %y.ref) // CHECK:STDOUT: %.loc148_5.3: ref @MulWith.loc146.%Result.as_type.loc145_54.1 (%Result.as_type) = temporary %.loc148_5.2, %MulWith.WithSelf.Op.call -// CHECK:STDOUT: %impl.elem0.loc148_5.1: @MulWith.loc146.%.loc148_5.6 (%.53a) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc148_5.2 (constants.%impl.elem0.0f9)] +// CHECK:STDOUT: %impl.elem0.loc148_5.1: @MulWith.loc146.%.loc148_5.7 (%.53a) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc148_5.2 (constants.%impl.elem0.0f9)] // CHECK:STDOUT: %bound_method.loc148_5.3: = bound_method %.loc148_5.3, %impl.elem0.loc148_5.1 // CHECK:STDOUT: %.loc148_5.4: %Destroy.type = converted constants.%Result.as_type, constants.%Result [symbolic = %Result.loc143_9.1 (constants.%Result)] +// CHECK:STDOUT: %.loc148_5.5: %Destroy.type = converted constants.%Result.as_type, constants.%Result [symbolic = %Result.loc143_9.1 (constants.%Result)] // CHECK:STDOUT: %specific_impl_fn.loc148_5.2: = specific_impl_function %impl.elem0.loc148_5.1, @Destroy.WithSelf.Op(constants.%Result) [symbolic = %specific_impl_fn.loc148_5.4 (constants.%specific_impl_fn.afc)] // CHECK:STDOUT: %bound_method.loc148_5.4: = bound_method %.loc148_5.3, %specific_impl_fn.loc148_5.2 // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc148_5.4(%.loc148_5.3) @@ -1508,13 +1635,13 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %DivWith.lookup_impl_witness.loc159: = lookup_impl_witness %T.loc156_4.1, @DivWith.1, @DivWith.1(%U.as_type.loc156_36.1) [symbolic = %DivWith.lookup_impl_witness.loc159 (constants.%DivWith.lookup_impl_witness.df2)] // CHECK:STDOUT: %DivWith.facet: @DivWith.loc157.%DivWith.type.loc156_36.1 (%DivWith.type.523) = facet_value %T.as_type.loc157_29.1, (%DivWith.lookup_impl_witness.loc159) [symbolic = %DivWith.facet (constants.%DivWith.facet.ac1)] // CHECK:STDOUT: %DivWith.WithSelf.Op.type: type = fn_type @DivWith.WithSelf.Op, @DivWith.WithSelf(%U.as_type.loc156_36.1, %DivWith.facet) [symbolic = %DivWith.WithSelf.Op.type (constants.%DivWith.WithSelf.Op.type.cb2)] -// CHECK:STDOUT: %.loc159_5.5: type = fn_type_with_self_type %DivWith.WithSelf.Op.type, %DivWith.facet [symbolic = %.loc159_5.5 (constants.%.2d3)] -// CHECK:STDOUT: %impl.elem1.loc159_5.2: @DivWith.loc157.%.loc159_5.5 (%.2d3) = impl_witness_access %DivWith.lookup_impl_witness.loc159, element1 [symbolic = %impl.elem1.loc159_5.2 (constants.%impl.elem1.254)] +// CHECK:STDOUT: %.loc159_5.6: type = fn_type_with_self_type %DivWith.WithSelf.Op.type, %DivWith.facet [symbolic = %.loc159_5.6 (constants.%.2d3)] +// CHECK:STDOUT: %impl.elem1.loc159_5.2: @DivWith.loc157.%.loc159_5.6 (%.2d3) = impl_witness_access %DivWith.lookup_impl_witness.loc159, element1 [symbolic = %impl.elem1.loc159_5.2 (constants.%impl.elem1.254)] // CHECK:STDOUT: %specific_impl_fn.loc159_5.3: = specific_impl_function %impl.elem1.loc159_5.2, @DivWith.WithSelf.Op(%U.as_type.loc156_36.1, %DivWith.facet) [symbolic = %specific_impl_fn.loc159_5.3 (constants.%specific_impl_fn.518)] // CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Result.loc154_9.1) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.d3ece9.2)] -// CHECK:STDOUT: %.loc159_5.6: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Result.loc154_9.1 [symbolic = %.loc159_5.6 (constants.%.53a)] +// CHECK:STDOUT: %.loc159_5.7: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Result.loc154_9.1 [symbolic = %.loc159_5.7 (constants.%.53a)] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %Result.loc154_9.1, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness)] -// CHECK:STDOUT: %impl.elem0.loc159_5.2: @DivWith.loc157.%.loc159_5.6 (%.53a) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc159_5.2 (constants.%impl.elem0.0f9)] +// CHECK:STDOUT: %impl.elem0.loc159_5.2: @DivWith.loc157.%.loc159_5.7 (%.53a) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc159_5.2 (constants.%impl.elem0.0f9)] // CHECK:STDOUT: %specific_impl_fn.loc159_5.4: = specific_impl_function %impl.elem0.loc159_5.2, @Destroy.WithSelf.Op(%Result.loc154_9.1) [symbolic = %specific_impl_fn.loc159_5.4 (constants.%specific_impl_fn.afc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%result.param: @DivWith.loc157.%Result.as_type.loc156_54.1 (%Result.as_type), %x.param: @DivWith.loc157.%T.as_type.loc157_29.1 (%T.as_type.a31), %y.param: @DivWith.loc157.%U.as_type.loc156_36.1 (%U.as_type.b61)) { @@ -1524,16 +1651,17 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %DivWith.type.loc159: type = facet_type <@DivWith.1, @DivWith.1(constants.%U.as_type.b61)> [symbolic = %DivWith.type.loc156_36.1 (constants.%DivWith.type.523)] // CHECK:STDOUT: %.loc159_5.1: @DivWith.loc157.%DivWith.assoc_type (%DivWith.assoc_type.cf4) = specific_constant imports.%Core.import_ref.ca2, @DivWith.WithSelf(constants.%U.as_type.b61, constants.%Self.16a) [symbolic = %assoc1 (constants.%assoc1.4eb)] // CHECK:STDOUT: %Op.ref: @DivWith.loc157.%DivWith.assoc_type (%DivWith.assoc_type.cf4) = name_ref Op, %.loc159_5.1 [symbolic = %assoc1 (constants.%assoc1.4eb)] -// CHECK:STDOUT: %impl.elem1.loc159_5.1: @DivWith.loc157.%.loc159_5.5 (%.2d3) = impl_witness_access constants.%DivWith.lookup_impl_witness.df2, element1 [symbolic = %impl.elem1.loc159_5.2 (constants.%impl.elem1.254)] +// CHECK:STDOUT: %impl.elem1.loc159_5.1: @DivWith.loc157.%.loc159_5.6 (%.2d3) = impl_witness_access constants.%DivWith.lookup_impl_witness.df2, element1 [symbolic = %impl.elem1.loc159_5.2 (constants.%impl.elem1.254)] // CHECK:STDOUT: %bound_method.loc159_5.1: = bound_method %x.ref, %impl.elem1.loc159_5.1 // CHECK:STDOUT: %specific_impl_fn.loc159_5.1: = specific_impl_function %impl.elem1.loc159_5.1, @DivWith.WithSelf.Op(constants.%U.as_type.b61, constants.%DivWith.facet.ac1) [symbolic = %specific_impl_fn.loc159_5.3 (constants.%specific_impl_fn.518)] // CHECK:STDOUT: %bound_method.loc159_5.2: = bound_method %x.ref, %specific_impl_fn.loc159_5.1 // CHECK:STDOUT: %.loc159_5.2: ref @DivWith.loc157.%Result.as_type.loc156_54.1 (%Result.as_type) = temporary_storage // CHECK:STDOUT: %DivWith.WithSelf.Op.call: init @DivWith.loc157.%Result.as_type.loc156_54.1 (%Result.as_type) to %.loc159_5.2 = call %bound_method.loc159_5.2(%x.ref, %y.ref) // CHECK:STDOUT: %.loc159_5.3: ref @DivWith.loc157.%Result.as_type.loc156_54.1 (%Result.as_type) = temporary %.loc159_5.2, %DivWith.WithSelf.Op.call -// CHECK:STDOUT: %impl.elem0.loc159_5.1: @DivWith.loc157.%.loc159_5.6 (%.53a) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc159_5.2 (constants.%impl.elem0.0f9)] +// CHECK:STDOUT: %impl.elem0.loc159_5.1: @DivWith.loc157.%.loc159_5.7 (%.53a) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc159_5.2 (constants.%impl.elem0.0f9)] // CHECK:STDOUT: %bound_method.loc159_5.3: = bound_method %.loc159_5.3, %impl.elem0.loc159_5.1 // CHECK:STDOUT: %.loc159_5.4: %Destroy.type = converted constants.%Result.as_type, constants.%Result [symbolic = %Result.loc154_9.1 (constants.%Result)] +// CHECK:STDOUT: %.loc159_5.5: %Destroy.type = converted constants.%Result.as_type, constants.%Result [symbolic = %Result.loc154_9.1 (constants.%Result)] // CHECK:STDOUT: %specific_impl_fn.loc159_5.2: = specific_impl_function %impl.elem0.loc159_5.1, @Destroy.WithSelf.Op(constants.%Result) [symbolic = %specific_impl_fn.loc159_5.4 (constants.%specific_impl_fn.afc)] // CHECK:STDOUT: %bound_method.loc159_5.4: = bound_method %.loc159_5.3, %specific_impl_fn.loc159_5.2 // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc159_5.4(%.loc159_5.3) @@ -1551,13 +1679,13 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %ModWith.lookup_impl_witness.loc170: = lookup_impl_witness %T.loc167_4.1, @ModWith.1, @ModWith.1(%U.as_type.loc167_36.1) [symbolic = %ModWith.lookup_impl_witness.loc170 (constants.%ModWith.lookup_impl_witness.054)] // CHECK:STDOUT: %ModWith.facet: @ModWith.loc168.%ModWith.type.loc167_36.1 (%ModWith.type.937) = facet_value %T.as_type.loc168_29.1, (%ModWith.lookup_impl_witness.loc170) [symbolic = %ModWith.facet (constants.%ModWith.facet.555)] // CHECK:STDOUT: %ModWith.WithSelf.Op.type: type = fn_type @ModWith.WithSelf.Op, @ModWith.WithSelf(%U.as_type.loc167_36.1, %ModWith.facet) [symbolic = %ModWith.WithSelf.Op.type (constants.%ModWith.WithSelf.Op.type.cfa)] -// CHECK:STDOUT: %.loc170_5.5: type = fn_type_with_self_type %ModWith.WithSelf.Op.type, %ModWith.facet [symbolic = %.loc170_5.5 (constants.%.973)] -// CHECK:STDOUT: %impl.elem1.loc170_5.2: @ModWith.loc168.%.loc170_5.5 (%.973) = impl_witness_access %ModWith.lookup_impl_witness.loc170, element1 [symbolic = %impl.elem1.loc170_5.2 (constants.%impl.elem1.f20)] +// CHECK:STDOUT: %.loc170_5.6: type = fn_type_with_self_type %ModWith.WithSelf.Op.type, %ModWith.facet [symbolic = %.loc170_5.6 (constants.%.973)] +// CHECK:STDOUT: %impl.elem1.loc170_5.2: @ModWith.loc168.%.loc170_5.6 (%.973) = impl_witness_access %ModWith.lookup_impl_witness.loc170, element1 [symbolic = %impl.elem1.loc170_5.2 (constants.%impl.elem1.f20)] // CHECK:STDOUT: %specific_impl_fn.loc170_5.3: = specific_impl_function %impl.elem1.loc170_5.2, @ModWith.WithSelf.Op(%U.as_type.loc167_36.1, %ModWith.facet) [symbolic = %specific_impl_fn.loc170_5.3 (constants.%specific_impl_fn.37e)] // CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Result.loc165_9.1) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.d3ece9.2)] -// CHECK:STDOUT: %.loc170_5.6: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Result.loc165_9.1 [symbolic = %.loc170_5.6 (constants.%.53a)] +// CHECK:STDOUT: %.loc170_5.7: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Result.loc165_9.1 [symbolic = %.loc170_5.7 (constants.%.53a)] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %Result.loc165_9.1, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness)] -// CHECK:STDOUT: %impl.elem0.loc170_5.2: @ModWith.loc168.%.loc170_5.6 (%.53a) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc170_5.2 (constants.%impl.elem0.0f9)] +// CHECK:STDOUT: %impl.elem0.loc170_5.2: @ModWith.loc168.%.loc170_5.7 (%.53a) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc170_5.2 (constants.%impl.elem0.0f9)] // CHECK:STDOUT: %specific_impl_fn.loc170_5.4: = specific_impl_function %impl.elem0.loc170_5.2, @Destroy.WithSelf.Op(%Result.loc165_9.1) [symbolic = %specific_impl_fn.loc170_5.4 (constants.%specific_impl_fn.afc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%result.param: @ModWith.loc168.%Result.as_type.loc167_54.1 (%Result.as_type), %x.param: @ModWith.loc168.%T.as_type.loc168_29.1 (%T.as_type.fcd), %y.param: @ModWith.loc168.%U.as_type.loc167_36.1 (%U.as_type.b61)) { @@ -1567,16 +1695,17 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %ModWith.type.loc170: type = facet_type <@ModWith.1, @ModWith.1(constants.%U.as_type.b61)> [symbolic = %ModWith.type.loc167_36.1 (constants.%ModWith.type.937)] // CHECK:STDOUT: %.loc170_5.1: @ModWith.loc168.%ModWith.assoc_type (%ModWith.assoc_type.626) = specific_constant imports.%Core.import_ref.ffe, @ModWith.WithSelf(constants.%U.as_type.b61, constants.%Self.0ef) [symbolic = %assoc1 (constants.%assoc1.6d1)] // CHECK:STDOUT: %Op.ref: @ModWith.loc168.%ModWith.assoc_type (%ModWith.assoc_type.626) = name_ref Op, %.loc170_5.1 [symbolic = %assoc1 (constants.%assoc1.6d1)] -// CHECK:STDOUT: %impl.elem1.loc170_5.1: @ModWith.loc168.%.loc170_5.5 (%.973) = impl_witness_access constants.%ModWith.lookup_impl_witness.054, element1 [symbolic = %impl.elem1.loc170_5.2 (constants.%impl.elem1.f20)] +// CHECK:STDOUT: %impl.elem1.loc170_5.1: @ModWith.loc168.%.loc170_5.6 (%.973) = impl_witness_access constants.%ModWith.lookup_impl_witness.054, element1 [symbolic = %impl.elem1.loc170_5.2 (constants.%impl.elem1.f20)] // CHECK:STDOUT: %bound_method.loc170_5.1: = bound_method %x.ref, %impl.elem1.loc170_5.1 // CHECK:STDOUT: %specific_impl_fn.loc170_5.1: = specific_impl_function %impl.elem1.loc170_5.1, @ModWith.WithSelf.Op(constants.%U.as_type.b61, constants.%ModWith.facet.555) [symbolic = %specific_impl_fn.loc170_5.3 (constants.%specific_impl_fn.37e)] // CHECK:STDOUT: %bound_method.loc170_5.2: = bound_method %x.ref, %specific_impl_fn.loc170_5.1 // CHECK:STDOUT: %.loc170_5.2: ref @ModWith.loc168.%Result.as_type.loc167_54.1 (%Result.as_type) = temporary_storage // CHECK:STDOUT: %ModWith.WithSelf.Op.call: init @ModWith.loc168.%Result.as_type.loc167_54.1 (%Result.as_type) to %.loc170_5.2 = call %bound_method.loc170_5.2(%x.ref, %y.ref) // CHECK:STDOUT: %.loc170_5.3: ref @ModWith.loc168.%Result.as_type.loc167_54.1 (%Result.as_type) = temporary %.loc170_5.2, %ModWith.WithSelf.Op.call -// CHECK:STDOUT: %impl.elem0.loc170_5.1: @ModWith.loc168.%.loc170_5.6 (%.53a) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc170_5.2 (constants.%impl.elem0.0f9)] +// CHECK:STDOUT: %impl.elem0.loc170_5.1: @ModWith.loc168.%.loc170_5.7 (%.53a) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc170_5.2 (constants.%impl.elem0.0f9)] // CHECK:STDOUT: %bound_method.loc170_5.3: = bound_method %.loc170_5.3, %impl.elem0.loc170_5.1 // CHECK:STDOUT: %.loc170_5.4: %Destroy.type = converted constants.%Result.as_type, constants.%Result [symbolic = %Result.loc165_9.1 (constants.%Result)] +// CHECK:STDOUT: %.loc170_5.5: %Destroy.type = converted constants.%Result.as_type, constants.%Result [symbolic = %Result.loc165_9.1 (constants.%Result)] // CHECK:STDOUT: %specific_impl_fn.loc170_5.2: = specific_impl_function %impl.elem0.loc170_5.1, @Destroy.WithSelf.Op(constants.%Result) [symbolic = %specific_impl_fn.loc170_5.4 (constants.%specific_impl_fn.afc)] // CHECK:STDOUT: %bound_method.loc170_5.4: = bound_method %.loc170_5.3, %specific_impl_fn.loc170_5.2 // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc170_5.4(%.loc170_5.3) @@ -1740,17 +1869,18 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: %Inc.WithSelf.Op.type: type = fn_type @Inc.WithSelf.Op, @Inc.WithSelf(%T.loc278_13.1) [symbolic = %Inc.WithSelf.Op.type (constants.%Inc.WithSelf.Op.type.e10ef6.2)] -// CHECK:STDOUT: %.loc280_3.2: type = fn_type_with_self_type %Inc.WithSelf.Op.type, %T.loc278_13.1 [symbolic = %.loc280_3.2 (constants.%.a08)] +// CHECK:STDOUT: %.loc280_3.3: type = fn_type_with_self_type %Inc.WithSelf.Op.type, %T.loc278_13.1 [symbolic = %.loc280_3.3 (constants.%.a08)] // CHECK:STDOUT: %Inc.lookup_impl_witness: = lookup_impl_witness %T.loc278_13.1, @Inc [symbolic = %Inc.lookup_impl_witness (constants.%Inc.lookup_impl_witness)] -// CHECK:STDOUT: %impl.elem0.loc280_3.2: @TestInc.%.loc280_3.2 (%.a08) = impl_witness_access %Inc.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc280_3.2 (constants.%impl.elem0.b92)] +// CHECK:STDOUT: %impl.elem0.loc280_3.2: @TestInc.%.loc280_3.3 (%.a08) = impl_witness_access %Inc.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc280_3.2 (constants.%impl.elem0.b92)] // CHECK:STDOUT: %specific_impl_fn.loc280_3.2: = specific_impl_function %impl.elem0.loc280_3.2, @Inc.WithSelf.Op(%T.loc278_13.1) [symbolic = %specific_impl_fn.loc280_3.2 (constants.%specific_impl_fn.855)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%x.param: ref @TestInc.%T.as_type.loc278_33.1 (%T.as_type.232)) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %x.ref: ref @TestInc.%T.as_type.loc278_33.1 (%T.as_type.232) = name_ref x, %x -// CHECK:STDOUT: %impl.elem0.loc280_3.1: @TestInc.%.loc280_3.2 (%.a08) = impl_witness_access constants.%Inc.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc280_3.2 (constants.%impl.elem0.b92)] +// CHECK:STDOUT: %impl.elem0.loc280_3.1: @TestInc.%.loc280_3.3 (%.a08) = impl_witness_access constants.%Inc.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc280_3.2 (constants.%impl.elem0.b92)] // CHECK:STDOUT: %bound_method.loc280_3.1: = bound_method %x.ref, %impl.elem0.loc280_3.1 // CHECK:STDOUT: %.loc280_3.1: %Inc.type = converted constants.%T.as_type.232, constants.%T.8f3 [symbolic = %T.loc278_13.1 (constants.%T.8f3)] +// CHECK:STDOUT: %.loc280_3.2: %Inc.type = converted constants.%T.as_type.232, constants.%T.8f3 [symbolic = %T.loc278_13.1 (constants.%T.8f3)] // CHECK:STDOUT: %specific_impl_fn.loc280_3.1: = specific_impl_function %impl.elem0.loc280_3.1, @Inc.WithSelf.Op(constants.%T.8f3) [symbolic = %specific_impl_fn.loc280_3.2 (constants.%specific_impl_fn.855)] // CHECK:STDOUT: %bound_method.loc280_3.2: = bound_method %x.ref, %specific_impl_fn.loc280_3.1 // CHECK:STDOUT: %Inc.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc280_3.2(%x.ref) @@ -1764,17 +1894,18 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: %Dec.WithSelf.Op.type: type = fn_type @Dec.WithSelf.Op, @Dec.WithSelf(%T.loc284_13.1) [symbolic = %Dec.WithSelf.Op.type (constants.%Dec.WithSelf.Op.type.bfa830.2)] -// CHECK:STDOUT: %.loc286_3.2: type = fn_type_with_self_type %Dec.WithSelf.Op.type, %T.loc284_13.1 [symbolic = %.loc286_3.2 (constants.%.aae)] +// CHECK:STDOUT: %.loc286_3.3: type = fn_type_with_self_type %Dec.WithSelf.Op.type, %T.loc284_13.1 [symbolic = %.loc286_3.3 (constants.%.aae)] // CHECK:STDOUT: %Dec.lookup_impl_witness: = lookup_impl_witness %T.loc284_13.1, @Dec [symbolic = %Dec.lookup_impl_witness (constants.%Dec.lookup_impl_witness)] -// CHECK:STDOUT: %impl.elem0.loc286_3.2: @TestDec.%.loc286_3.2 (%.aae) = impl_witness_access %Dec.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc286_3.2 (constants.%impl.elem0.950)] +// CHECK:STDOUT: %impl.elem0.loc286_3.2: @TestDec.%.loc286_3.3 (%.aae) = impl_witness_access %Dec.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc286_3.2 (constants.%impl.elem0.950)] // CHECK:STDOUT: %specific_impl_fn.loc286_3.2: = specific_impl_function %impl.elem0.loc286_3.2, @Dec.WithSelf.Op(%T.loc284_13.1) [symbolic = %specific_impl_fn.loc286_3.2 (constants.%specific_impl_fn.539)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%x.param: ref @TestDec.%T.as_type.loc284_33.1 (%T.as_type.c32)) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %x.ref: ref @TestDec.%T.as_type.loc284_33.1 (%T.as_type.c32) = name_ref x, %x -// CHECK:STDOUT: %impl.elem0.loc286_3.1: @TestDec.%.loc286_3.2 (%.aae) = impl_witness_access constants.%Dec.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc286_3.2 (constants.%impl.elem0.950)] +// CHECK:STDOUT: %impl.elem0.loc286_3.1: @TestDec.%.loc286_3.3 (%.aae) = impl_witness_access constants.%Dec.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc286_3.2 (constants.%impl.elem0.950)] // CHECK:STDOUT: %bound_method.loc286_3.1: = bound_method %x.ref, %impl.elem0.loc286_3.1 // CHECK:STDOUT: %.loc286_3.1: %Dec.type = converted constants.%T.as_type.c32, constants.%T.e8e [symbolic = %T.loc284_13.1 (constants.%T.e8e)] +// CHECK:STDOUT: %.loc286_3.2: %Dec.type = converted constants.%T.as_type.c32, constants.%T.e8e [symbolic = %T.loc284_13.1 (constants.%T.e8e)] // CHECK:STDOUT: %specific_impl_fn.loc286_3.1: = specific_impl_function %impl.elem0.loc286_3.1, @Dec.WithSelf.Op(constants.%T.e8e) [symbolic = %specific_impl_fn.loc286_3.2 (constants.%specific_impl_fn.539)] // CHECK:STDOUT: %bound_method.loc286_3.2: = bound_method %x.ref, %specific_impl_fn.loc286_3.1 // CHECK:STDOUT: %Dec.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc286_3.2(%x.ref) @@ -1788,41 +1919,46 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: %Negate.lookup_impl_witness: = lookup_impl_witness %T.loc293_4.1, @Negate [symbolic = %Negate.lookup_impl_witness (constants.%Negate.lookup_impl_witness.48a)] -// CHECK:STDOUT: %Negate.facet.loc296_3.2: %Negate.type = facet_value %T.as_type.loc294_24.1, (%Negate.lookup_impl_witness) [symbolic = %Negate.facet.loc296_3.2 (constants.%Negate.facet.f2f)] -// CHECK:STDOUT: %Negate.WithSelf.Op.type: type = fn_type @Negate.WithSelf.Op, @Negate.WithSelf(%Negate.facet.loc296_3.2) [symbolic = %Negate.WithSelf.Op.type (constants.%Negate.WithSelf.Op.type.803)] -// CHECK:STDOUT: %.loc296_3.5: type = fn_type_with_self_type %Negate.WithSelf.Op.type, %Negate.facet.loc296_3.2 [symbolic = %.loc296_3.5 (constants.%.c6c)] -// CHECK:STDOUT: %impl.elem1.loc296_3.2: @TestNegate.%.loc296_3.5 (%.c6c) = impl_witness_access %Negate.lookup_impl_witness, element1 [symbolic = %impl.elem1.loc296_3.2 (constants.%impl.elem1.9a8)] -// CHECK:STDOUT: %specific_impl_fn.loc296_3.3: = specific_impl_function %impl.elem1.loc296_3.2, @Negate.WithSelf.Op(%Negate.facet.loc296_3.2) [symbolic = %specific_impl_fn.loc296_3.3 (constants.%specific_impl_fn.c5a)] +// CHECK:STDOUT: %Negate.facet.loc296_3.3: %Negate.type = facet_value %T.as_type.loc294_24.1, (%Negate.lookup_impl_witness) [symbolic = %Negate.facet.loc296_3.3 (constants.%Negate.facet.f2f)] +// CHECK:STDOUT: %Negate.WithSelf.Op.type: type = fn_type @Negate.WithSelf.Op, @Negate.WithSelf(%Negate.facet.loc296_3.3) [symbolic = %Negate.WithSelf.Op.type (constants.%Negate.WithSelf.Op.type.803)] +// CHECK:STDOUT: %.loc296_3.7: type = fn_type_with_self_type %Negate.WithSelf.Op.type, %Negate.facet.loc296_3.3 [symbolic = %.loc296_3.7 (constants.%.c6c)] +// CHECK:STDOUT: %impl.elem1.loc296_3.2: @TestNegate.%.loc296_3.7 (%.c6c) = impl_witness_access %Negate.lookup_impl_witness, element1 [symbolic = %impl.elem1.loc296_3.2 (constants.%impl.elem1.9a8)] +// CHECK:STDOUT: %specific_impl_fn.loc296_3.3: = specific_impl_function %impl.elem1.loc296_3.2, @Negate.WithSelf.Op(%Negate.facet.loc296_3.3) [symbolic = %specific_impl_fn.loc296_3.3 (constants.%specific_impl_fn.c5a)] // CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Result.loc292_9.1) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.d3ece9.2)] -// CHECK:STDOUT: %.loc296_3.6: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Result.loc292_9.1 [symbolic = %.loc296_3.6 (constants.%.53a)] +// CHECK:STDOUT: %.loc296_3.8: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Result.loc292_9.1 [symbolic = %.loc296_3.8 (constants.%.53a)] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %Result.loc292_9.1, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness)] -// CHECK:STDOUT: %impl.elem0.loc296_3.2: @TestNegate.%.loc296_3.6 (%.53a) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc296_3.2 (constants.%impl.elem0.0f9)] +// CHECK:STDOUT: %impl.elem0.loc296_3.2: @TestNegate.%.loc296_3.8 (%.53a) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc296_3.2 (constants.%impl.elem0.0f9)] // CHECK:STDOUT: %specific_impl_fn.loc296_3.4: = specific_impl_function %impl.elem0.loc296_3.2, @Destroy.WithSelf.Op(%Result.loc292_9.1) [symbolic = %specific_impl_fn.loc296_3.4 (constants.%specific_impl_fn.afc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%y.param: @TestNegate.%Result.as_type.loc293_50.1 (%Result.as_type), %x.param: @TestNegate.%T.as_type.loc294_24.1 (%T.as_type.a98)) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %x.ref: @TestNegate.%T.as_type.loc294_24.1 (%T.as_type.a98) = name_ref x, %x -// CHECK:STDOUT: %impl.elem1.loc296_3.1: @TestNegate.%.loc296_3.5 (%.c6c) = impl_witness_access constants.%Negate.lookup_impl_witness.48a, element1 [symbolic = %impl.elem1.loc296_3.2 (constants.%impl.elem1.9a8)] +// CHECK:STDOUT: %impl.elem1.loc296_3.1: @TestNegate.%.loc296_3.7 (%.c6c) = impl_witness_access constants.%Negate.lookup_impl_witness.48a, element1 [symbolic = %impl.elem1.loc296_3.2 (constants.%impl.elem1.9a8)] // CHECK:STDOUT: %bound_method.loc296_3.1: = bound_method %x.ref, %impl.elem1.loc296_3.1 -// CHECK:STDOUT: %Negate.facet.loc296_3.1: %Negate.type = facet_value constants.%T.as_type.a98, (constants.%Negate.lookup_impl_witness.48a) [symbolic = %Negate.facet.loc296_3.2 (constants.%Negate.facet.f2f)] -// CHECK:STDOUT: %.loc296_3.1: %Negate.type = converted constants.%T.as_type.a98, %Negate.facet.loc296_3.1 [symbolic = %Negate.facet.loc296_3.2 (constants.%Negate.facet.f2f)] +// CHECK:STDOUT: %Negate.facet.loc296_3.1: %Negate.type = facet_value constants.%T.as_type.a98, (constants.%Negate.lookup_impl_witness.48a) [symbolic = %Negate.facet.loc296_3.3 (constants.%Negate.facet.f2f)] +// CHECK:STDOUT: %.loc296_3.1: %Negate.type = converted constants.%T.as_type.a98, %Negate.facet.loc296_3.1 [symbolic = %Negate.facet.loc296_3.3 (constants.%Negate.facet.f2f)] +// CHECK:STDOUT: %Negate.facet.loc296_3.2: %Negate.type = facet_value constants.%T.as_type.a98, (constants.%Negate.lookup_impl_witness.48a) [symbolic = %Negate.facet.loc296_3.3 (constants.%Negate.facet.f2f)] +// CHECK:STDOUT: %.loc296_3.2: %Negate.type = converted constants.%T.as_type.a98, %Negate.facet.loc296_3.2 [symbolic = %Negate.facet.loc296_3.3 (constants.%Negate.facet.f2f)] // CHECK:STDOUT: %specific_impl_fn.loc296_3.1: = specific_impl_function %impl.elem1.loc296_3.1, @Negate.WithSelf.Op(constants.%Negate.facet.f2f) [symbolic = %specific_impl_fn.loc296_3.3 (constants.%specific_impl_fn.c5a)] // CHECK:STDOUT: %bound_method.loc296_3.2: = bound_method %x.ref, %specific_impl_fn.loc296_3.1 -// CHECK:STDOUT: %.loc296_3.2: ref @TestNegate.%Result.as_type.loc293_50.1 (%Result.as_type) = temporary_storage -// CHECK:STDOUT: %Negate.WithSelf.Op.call: init @TestNegate.%Result.as_type.loc293_50.1 (%Result.as_type) to %.loc296_3.2 = call %bound_method.loc296_3.2(%x.ref) -// CHECK:STDOUT: %.loc296_3.3: ref @TestNegate.%Result.as_type.loc293_50.1 (%Result.as_type) = temporary %.loc296_3.2, %Negate.WithSelf.Op.call -// CHECK:STDOUT: %impl.elem0.loc296_3.1: @TestNegate.%.loc296_3.6 (%.53a) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc296_3.2 (constants.%impl.elem0.0f9)] -// CHECK:STDOUT: %bound_method.loc296_3.3: = bound_method %.loc296_3.3, %impl.elem0.loc296_3.1 -// CHECK:STDOUT: %.loc296_3.4: %Destroy.type = converted constants.%Result.as_type, constants.%Result [symbolic = %Result.loc292_9.1 (constants.%Result)] +// CHECK:STDOUT: %.loc296_3.3: ref @TestNegate.%Result.as_type.loc293_50.1 (%Result.as_type) = temporary_storage +// CHECK:STDOUT: %Negate.WithSelf.Op.call: init @TestNegate.%Result.as_type.loc293_50.1 (%Result.as_type) to %.loc296_3.3 = call %bound_method.loc296_3.2(%x.ref) +// CHECK:STDOUT: %.loc296_3.4: ref @TestNegate.%Result.as_type.loc293_50.1 (%Result.as_type) = temporary %.loc296_3.3, %Negate.WithSelf.Op.call +// CHECK:STDOUT: %impl.elem0.loc296_3.1: @TestNegate.%.loc296_3.8 (%.53a) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc296_3.2 (constants.%impl.elem0.0f9)] +// CHECK:STDOUT: %bound_method.loc296_3.3: = bound_method %.loc296_3.4, %impl.elem0.loc296_3.1 +// CHECK:STDOUT: %.loc296_3.5: %Destroy.type = converted constants.%Result.as_type, constants.%Result [symbolic = %Result.loc292_9.1 (constants.%Result)] +// CHECK:STDOUT: %.loc296_3.6: %Destroy.type = converted constants.%Result.as_type, constants.%Result [symbolic = %Result.loc292_9.1 (constants.%Result)] // CHECK:STDOUT: %specific_impl_fn.loc296_3.2: = specific_impl_function %impl.elem0.loc296_3.1, @Destroy.WithSelf.Op(constants.%Result) [symbolic = %specific_impl_fn.loc296_3.4 (constants.%specific_impl_fn.afc)] -// CHECK:STDOUT: %bound_method.loc296_3.4: = bound_method %.loc296_3.3, %specific_impl_fn.loc296_3.2 -// CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc296_3.4(%.loc296_3.3) +// CHECK:STDOUT: %bound_method.loc296_3.4: = bound_method %.loc296_3.4, %specific_impl_fn.loc296_3.2 +// CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc296_3.4(%.loc296_3.4) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @AddWith.loc124(constants.%Result, constants.%U.f40, constants.%T.200) { +// CHECK:STDOUT: %Result.patt.loc121_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc121_9.1 => constants.%Result +// CHECK:STDOUT: %U.patt.loc122_4.2 => constants.%U.patt.7a2 // CHECK:STDOUT: %U.loc122_4.1 => constants.%U.f40 // CHECK:STDOUT: %U.as_type.loc123_36.1 => constants.%U.as_type.b61 // CHECK:STDOUT: %AddWith.type.loc123_36.1 => constants.%AddWith.type.9da @@ -1836,16 +1972,25 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.loc123_44.1 => constants.%impl.elem0.8bb // CHECK:STDOUT: %Result.as_type.loc123_54.1 => constants.%Result.as_type // CHECK:STDOUT: %facet_type.loc123_38 => constants.%facet_type.096 -// CHECK:STDOUT: %T.loc123_4.1 => constants.%T.200 // CHECK:STDOUT: %pattern_type.loc123 => constants.%pattern_type.3fb +// CHECK:STDOUT: %T.patt.loc123_4.2 => constants.%T.patt.c80 +// CHECK:STDOUT: %T.loc123_4.1 => constants.%T.200 // CHECK:STDOUT: %pattern_type.loc124_16 => constants.%pattern_type.f4e485.2 +// CHECK:STDOUT: %result.param_patt.loc124_16.2 => constants.%result.param_patt.6ba +// CHECK:STDOUT: %result.patt.loc124_16.2 => constants.%result.patt.748373.1 // CHECK:STDOUT: %T.as_type.loc124_29.1 => constants.%T.as_type.606 // CHECK:STDOUT: %pattern_type.loc124_27 => constants.%pattern_type.82c +// CHECK:STDOUT: %x.param_patt.loc124_27.2 => constants.%x.param_patt.4c4 +// CHECK:STDOUT: %x.patt.loc124_27.2 => constants.%x.patt.eac // CHECK:STDOUT: %pattern_type.loc124_33 => constants.%pattern_type.753 +// CHECK:STDOUT: %y.param_patt.loc124_33.2 => constants.%y.param_patt.740 +// CHECK:STDOUT: %y.patt.loc124_33.2 => constants.%y.patt.4ae // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @SubWith.loc135(constants.%Result, constants.%U.f40, constants.%T.967) { +// CHECK:STDOUT: %Result.patt.loc132_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc132_9.1 => constants.%Result +// CHECK:STDOUT: %U.patt.loc133_4.2 => constants.%U.patt.7a2 // CHECK:STDOUT: %U.loc133_4.1 => constants.%U.f40 // CHECK:STDOUT: %U.as_type.loc134_36.1 => constants.%U.as_type.b61 // CHECK:STDOUT: %SubWith.type.loc134_36.1 => constants.%SubWith.type.b5d @@ -1859,16 +2004,25 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.loc134_44.1 => constants.%impl.elem0.0fb // CHECK:STDOUT: %Result.as_type.loc134_54.1 => constants.%Result.as_type // CHECK:STDOUT: %facet_type.loc134_38 => constants.%facet_type.5a5 -// CHECK:STDOUT: %T.loc134_4.1 => constants.%T.967 // CHECK:STDOUT: %pattern_type.loc134 => constants.%pattern_type.156 +// CHECK:STDOUT: %T.patt.loc134_4.2 => constants.%T.patt.53c +// CHECK:STDOUT: %T.loc134_4.1 => constants.%T.967 // CHECK:STDOUT: %pattern_type.loc135_16 => constants.%pattern_type.f4e485.2 +// CHECK:STDOUT: %result.param_patt.loc135_16.2 => constants.%result.param_patt.6ba +// CHECK:STDOUT: %result.patt.loc135_16.2 => constants.%result.patt.748373.1 // CHECK:STDOUT: %T.as_type.loc135_29.1 => constants.%T.as_type.b22 // CHECK:STDOUT: %pattern_type.loc135_27 => constants.%pattern_type.000 +// CHECK:STDOUT: %x.param_patt.loc135_27.2 => constants.%x.param_patt.408 +// CHECK:STDOUT: %x.patt.loc135_27.2 => constants.%x.patt.a66 // CHECK:STDOUT: %pattern_type.loc135_33 => constants.%pattern_type.753 +// CHECK:STDOUT: %y.param_patt.loc135_33.2 => constants.%y.param_patt.740 +// CHECK:STDOUT: %y.patt.loc135_33.2 => constants.%y.patt.4ae // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @MulWith.loc146(constants.%Result, constants.%U.f40, constants.%T.546) { +// CHECK:STDOUT: %Result.patt.loc143_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc143_9.1 => constants.%Result +// CHECK:STDOUT: %U.patt.loc144_4.2 => constants.%U.patt.7a2 // CHECK:STDOUT: %U.loc144_4.1 => constants.%U.f40 // CHECK:STDOUT: %U.as_type.loc145_36.1 => constants.%U.as_type.b61 // CHECK:STDOUT: %MulWith.type.loc145_36.1 => constants.%MulWith.type.f02 @@ -1882,16 +2036,25 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.loc145_44.1 => constants.%impl.elem0.10f // CHECK:STDOUT: %Result.as_type.loc145_54.1 => constants.%Result.as_type // CHECK:STDOUT: %facet_type.loc145_38 => constants.%facet_type.c32 -// CHECK:STDOUT: %T.loc145_4.1 => constants.%T.546 // CHECK:STDOUT: %pattern_type.loc145 => constants.%pattern_type.d38 +// CHECK:STDOUT: %T.patt.loc145_4.2 => constants.%T.patt.881 +// CHECK:STDOUT: %T.loc145_4.1 => constants.%T.546 // CHECK:STDOUT: %pattern_type.loc146_16 => constants.%pattern_type.f4e485.2 +// CHECK:STDOUT: %result.param_patt.loc146_16.2 => constants.%result.param_patt.6ba +// CHECK:STDOUT: %result.patt.loc146_16.2 => constants.%result.patt.748373.1 // CHECK:STDOUT: %T.as_type.loc146_29.1 => constants.%T.as_type.427 // CHECK:STDOUT: %pattern_type.loc146_27 => constants.%pattern_type.d10 +// CHECK:STDOUT: %x.param_patt.loc146_27.2 => constants.%x.param_patt.df8 +// CHECK:STDOUT: %x.patt.loc146_27.2 => constants.%x.patt.32c // CHECK:STDOUT: %pattern_type.loc146_33 => constants.%pattern_type.753 +// CHECK:STDOUT: %y.param_patt.loc146_33.2 => constants.%y.param_patt.740 +// CHECK:STDOUT: %y.patt.loc146_33.2 => constants.%y.patt.4ae // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @DivWith.loc157(constants.%Result, constants.%U.f40, constants.%T.040) { +// CHECK:STDOUT: %Result.patt.loc154_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc154_9.1 => constants.%Result +// CHECK:STDOUT: %U.patt.loc155_4.2 => constants.%U.patt.7a2 // CHECK:STDOUT: %U.loc155_4.1 => constants.%U.f40 // CHECK:STDOUT: %U.as_type.loc156_36.1 => constants.%U.as_type.b61 // CHECK:STDOUT: %DivWith.type.loc156_36.1 => constants.%DivWith.type.523 @@ -1905,16 +2068,25 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.loc156_44.1 => constants.%impl.elem0.df8 // CHECK:STDOUT: %Result.as_type.loc156_54.1 => constants.%Result.as_type // CHECK:STDOUT: %facet_type.loc156_38 => constants.%facet_type.2f8 -// CHECK:STDOUT: %T.loc156_4.1 => constants.%T.040 // CHECK:STDOUT: %pattern_type.loc156 => constants.%pattern_type.297 +// CHECK:STDOUT: %T.patt.loc156_4.2 => constants.%T.patt.7ab +// CHECK:STDOUT: %T.loc156_4.1 => constants.%T.040 // CHECK:STDOUT: %pattern_type.loc157_16 => constants.%pattern_type.f4e485.2 +// CHECK:STDOUT: %result.param_patt.loc157_16.2 => constants.%result.param_patt.6ba +// CHECK:STDOUT: %result.patt.loc157_16.2 => constants.%result.patt.748373.1 // CHECK:STDOUT: %T.as_type.loc157_29.1 => constants.%T.as_type.a31 // CHECK:STDOUT: %pattern_type.loc157_27 => constants.%pattern_type.126 +// CHECK:STDOUT: %x.param_patt.loc157_27.2 => constants.%x.param_patt.422 +// CHECK:STDOUT: %x.patt.loc157_27.2 => constants.%x.patt.bed // CHECK:STDOUT: %pattern_type.loc157_33 => constants.%pattern_type.753 +// CHECK:STDOUT: %y.param_patt.loc157_33.2 => constants.%y.param_patt.740 +// CHECK:STDOUT: %y.patt.loc157_33.2 => constants.%y.patt.4ae // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ModWith.loc168(constants.%Result, constants.%U.f40, constants.%T.095) { +// CHECK:STDOUT: %Result.patt.loc165_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc165_9.1 => constants.%Result +// CHECK:STDOUT: %U.patt.loc166_4.2 => constants.%U.patt.7a2 // CHECK:STDOUT: %U.loc166_4.1 => constants.%U.f40 // CHECK:STDOUT: %U.as_type.loc167_36.1 => constants.%U.as_type.b61 // CHECK:STDOUT: %ModWith.type.loc167_36.1 => constants.%ModWith.type.937 @@ -1928,16 +2100,25 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.loc167_44.1 => constants.%impl.elem0.36b // CHECK:STDOUT: %Result.as_type.loc167_54.1 => constants.%Result.as_type // CHECK:STDOUT: %facet_type.loc167_38 => constants.%facet_type.9a0 -// CHECK:STDOUT: %T.loc167_4.1 => constants.%T.095 // CHECK:STDOUT: %pattern_type.loc167 => constants.%pattern_type.82f +// CHECK:STDOUT: %T.patt.loc167_4.2 => constants.%T.patt.74f +// CHECK:STDOUT: %T.loc167_4.1 => constants.%T.095 // CHECK:STDOUT: %pattern_type.loc168_16 => constants.%pattern_type.f4e485.2 +// CHECK:STDOUT: %result.param_patt.loc168_16.2 => constants.%result.param_patt.6ba +// CHECK:STDOUT: %result.patt.loc168_16.2 => constants.%result.patt.748373.1 // CHECK:STDOUT: %T.as_type.loc168_29.1 => constants.%T.as_type.fcd // CHECK:STDOUT: %pattern_type.loc168_27 => constants.%pattern_type.2e7 +// CHECK:STDOUT: %x.param_patt.loc168_27.2 => constants.%x.param_patt.a0f +// CHECK:STDOUT: %x.patt.loc168_27.2 => constants.%x.patt.d43 // CHECK:STDOUT: %pattern_type.loc168_33 => constants.%pattern_type.753 +// CHECK:STDOUT: %y.param_patt.loc168_33.2 => constants.%y.param_patt.740 +// CHECK:STDOUT: %y.patt.loc168_33.2 => constants.%y.patt.4ae // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @AddWith.loc124(constants.%Destroy.facet.2cc, constants.%Destroy.facet.2cc, constants.%facet_value.b750) { +// CHECK:STDOUT: %Result.patt.loc121_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc121_9.1 => constants.%Destroy.facet.2cc +// CHECK:STDOUT: %U.patt.loc122_4.2 => constants.%U.patt.7a2 // CHECK:STDOUT: %U.loc122_4.1 => constants.%Destroy.facet.2cc // CHECK:STDOUT: %U.as_type.loc123_36.1 => constants.%Int16 // CHECK:STDOUT: %AddWith.type.loc123_36.1 => constants.%AddWith.type.b62 @@ -1951,12 +2132,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.loc123_44.1 => constants.%impl.elem0.7e0 // CHECK:STDOUT: %Result.as_type.loc123_54.1 => constants.%Int16 // CHECK:STDOUT: %facet_type.loc123_38 => constants.%facet_type.376 -// CHECK:STDOUT: %T.loc123_4.1 => constants.%facet_value.b750 // CHECK:STDOUT: %pattern_type.loc123 => constants.%pattern_type.48e +// CHECK:STDOUT: %T.patt.loc123_4.2 => constants.%T.patt.5cc +// CHECK:STDOUT: %T.loc123_4.1 => constants.%facet_value.b750 // CHECK:STDOUT: %pattern_type.loc124_16 => constants.%pattern_type.785 +// CHECK:STDOUT: %result.param_patt.loc124_16.2 => constants.%result.param_patt.be6 +// CHECK:STDOUT: %result.patt.loc124_16.2 => constants.%result.patt.488 // CHECK:STDOUT: %T.as_type.loc124_29.1 => constants.%i16 // CHECK:STDOUT: %pattern_type.loc124_27 => constants.%pattern_type.203 +// CHECK:STDOUT: %x.param_patt.loc124_27.2 => constants.%x.param_patt.676 +// CHECK:STDOUT: %x.patt.loc124_27.2 => constants.%x.patt.26e // CHECK:STDOUT: %pattern_type.loc124_33 => constants.%pattern_type.785 +// CHECK:STDOUT: %y.param_patt.loc124_33.2 => constants.%y.param_patt.418 +// CHECK:STDOUT: %y.patt.loc124_33.2 => constants.%y.patt.4e6 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc124_16 => constants.%complete_type.357 @@ -1967,18 +2155,20 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %AddWith.lookup_impl_witness.loc126 => constants.%custom_witness.248 // CHECK:STDOUT: %AddWith.facet => constants.%AddWith.facet.ff0 // CHECK:STDOUT: %AddWith.WithSelf.Op.type => constants.%AddWith.WithSelf.Op.type.e1f -// CHECK:STDOUT: %.loc126_5.5 => constants.%.2c3 +// CHECK:STDOUT: %.loc126_5.6 => constants.%.2c3 // CHECK:STDOUT: %impl.elem1.loc126_5.2 => constants.%Op.72717c.1 // CHECK:STDOUT: %specific_impl_fn.loc126_5.3 => constants.%Op.72717c.1 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.9d5 -// CHECK:STDOUT: %.loc126_5.6 => constants.%.6da +// CHECK:STDOUT: %.loc126_5.7 => constants.%.6da // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.e7a31c.1 // CHECK:STDOUT: %impl.elem0.loc126_5.2 => constants.%Int16.Op.4dca31.1 // CHECK:STDOUT: %specific_impl_fn.loc126_5.4 => constants.%Int16.Op.4dca31.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @SubWith.loc135(constants.%Destroy.facet.2cc, constants.%Destroy.facet.2cc, constants.%facet_value.9fa) { +// CHECK:STDOUT: %Result.patt.loc132_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc132_9.1 => constants.%Destroy.facet.2cc +// CHECK:STDOUT: %U.patt.loc133_4.2 => constants.%U.patt.7a2 // CHECK:STDOUT: %U.loc133_4.1 => constants.%Destroy.facet.2cc // CHECK:STDOUT: %U.as_type.loc134_36.1 => constants.%Int16 // CHECK:STDOUT: %SubWith.type.loc134_36.1 => constants.%SubWith.type.b12 @@ -1992,12 +2182,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.loc134_44.1 => constants.%impl.elem0.104 // CHECK:STDOUT: %Result.as_type.loc134_54.1 => constants.%Int16 // CHECK:STDOUT: %facet_type.loc134_38 => constants.%facet_type.2e5 -// CHECK:STDOUT: %T.loc134_4.1 => constants.%facet_value.9fa // CHECK:STDOUT: %pattern_type.loc134 => constants.%pattern_type.943 +// CHECK:STDOUT: %T.patt.loc134_4.2 => constants.%T.patt.bc1 +// CHECK:STDOUT: %T.loc134_4.1 => constants.%facet_value.9fa // CHECK:STDOUT: %pattern_type.loc135_16 => constants.%pattern_type.785 +// CHECK:STDOUT: %result.param_patt.loc135_16.2 => constants.%result.param_patt.be6 +// CHECK:STDOUT: %result.patt.loc135_16.2 => constants.%result.patt.488 // CHECK:STDOUT: %T.as_type.loc135_29.1 => constants.%i16 // CHECK:STDOUT: %pattern_type.loc135_27 => constants.%pattern_type.203 +// CHECK:STDOUT: %x.param_patt.loc135_27.2 => constants.%x.param_patt.676 +// CHECK:STDOUT: %x.patt.loc135_27.2 => constants.%x.patt.26e // CHECK:STDOUT: %pattern_type.loc135_33 => constants.%pattern_type.785 +// CHECK:STDOUT: %y.param_patt.loc135_33.2 => constants.%y.param_patt.418 +// CHECK:STDOUT: %y.patt.loc135_33.2 => constants.%y.patt.4e6 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc135_16 => constants.%complete_type.357 @@ -2008,18 +2205,20 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %SubWith.lookup_impl_witness.loc137 => constants.%custom_witness.f14 // CHECK:STDOUT: %SubWith.facet => constants.%SubWith.facet.49f // CHECK:STDOUT: %SubWith.WithSelf.Op.type => constants.%SubWith.WithSelf.Op.type.843 -// CHECK:STDOUT: %.loc137_5.5 => constants.%.00a +// CHECK:STDOUT: %.loc137_5.6 => constants.%.00a // CHECK:STDOUT: %impl.elem1.loc137_5.2 => constants.%Op.72717c.2 // CHECK:STDOUT: %specific_impl_fn.loc137_5.3 => constants.%Op.72717c.2 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.9d5 -// CHECK:STDOUT: %.loc137_5.6 => constants.%.6da +// CHECK:STDOUT: %.loc137_5.7 => constants.%.6da // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.e7a31c.1 // CHECK:STDOUT: %impl.elem0.loc137_5.2 => constants.%Int16.Op.4dca31.1 // CHECK:STDOUT: %specific_impl_fn.loc137_5.4 => constants.%Int16.Op.4dca31.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @MulWith.loc146(constants.%Destroy.facet.2cc, constants.%Destroy.facet.2cc, constants.%facet_value.074) { +// CHECK:STDOUT: %Result.patt.loc143_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc143_9.1 => constants.%Destroy.facet.2cc +// CHECK:STDOUT: %U.patt.loc144_4.2 => constants.%U.patt.7a2 // CHECK:STDOUT: %U.loc144_4.1 => constants.%Destroy.facet.2cc // CHECK:STDOUT: %U.as_type.loc145_36.1 => constants.%Int16 // CHECK:STDOUT: %MulWith.type.loc145_36.1 => constants.%MulWith.type.c18 @@ -2033,12 +2232,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.loc145_44.1 => constants.%impl.elem0.472 // CHECK:STDOUT: %Result.as_type.loc145_54.1 => constants.%Int16 // CHECK:STDOUT: %facet_type.loc145_38 => constants.%facet_type.e71 -// CHECK:STDOUT: %T.loc145_4.1 => constants.%facet_value.074 // CHECK:STDOUT: %pattern_type.loc145 => constants.%pattern_type.b79 +// CHECK:STDOUT: %T.patt.loc145_4.2 => constants.%T.patt.544 +// CHECK:STDOUT: %T.loc145_4.1 => constants.%facet_value.074 // CHECK:STDOUT: %pattern_type.loc146_16 => constants.%pattern_type.785 +// CHECK:STDOUT: %result.param_patt.loc146_16.2 => constants.%result.param_patt.be6 +// CHECK:STDOUT: %result.patt.loc146_16.2 => constants.%result.patt.488 // CHECK:STDOUT: %T.as_type.loc146_29.1 => constants.%i16 // CHECK:STDOUT: %pattern_type.loc146_27 => constants.%pattern_type.203 +// CHECK:STDOUT: %x.param_patt.loc146_27.2 => constants.%x.param_patt.676 +// CHECK:STDOUT: %x.patt.loc146_27.2 => constants.%x.patt.26e // CHECK:STDOUT: %pattern_type.loc146_33 => constants.%pattern_type.785 +// CHECK:STDOUT: %y.param_patt.loc146_33.2 => constants.%y.param_patt.418 +// CHECK:STDOUT: %y.patt.loc146_33.2 => constants.%y.patt.4e6 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc146_16 => constants.%complete_type.357 @@ -2049,18 +2255,20 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %MulWith.lookup_impl_witness.loc148 => constants.%custom_witness.6bd // CHECK:STDOUT: %MulWith.facet => constants.%MulWith.facet.d6e // CHECK:STDOUT: %MulWith.WithSelf.Op.type => constants.%MulWith.WithSelf.Op.type.f9f -// CHECK:STDOUT: %.loc148_5.5 => constants.%.0ed +// CHECK:STDOUT: %.loc148_5.6 => constants.%.0ed // CHECK:STDOUT: %impl.elem1.loc148_5.2 => constants.%Op.72717c.3 // CHECK:STDOUT: %specific_impl_fn.loc148_5.3 => constants.%Op.72717c.3 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.9d5 -// CHECK:STDOUT: %.loc148_5.6 => constants.%.6da +// CHECK:STDOUT: %.loc148_5.7 => constants.%.6da // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.e7a31c.1 // CHECK:STDOUT: %impl.elem0.loc148_5.2 => constants.%Int16.Op.4dca31.1 // CHECK:STDOUT: %specific_impl_fn.loc148_5.4 => constants.%Int16.Op.4dca31.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @DivWith.loc157(constants.%Destroy.facet.2cc, constants.%Destroy.facet.2cc, constants.%facet_value.c41) { +// CHECK:STDOUT: %Result.patt.loc154_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc154_9.1 => constants.%Destroy.facet.2cc +// CHECK:STDOUT: %U.patt.loc155_4.2 => constants.%U.patt.7a2 // CHECK:STDOUT: %U.loc155_4.1 => constants.%Destroy.facet.2cc // CHECK:STDOUT: %U.as_type.loc156_36.1 => constants.%Int16 // CHECK:STDOUT: %DivWith.type.loc156_36.1 => constants.%DivWith.type.6f9 @@ -2074,12 +2282,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.loc156_44.1 => constants.%impl.elem0.6aa // CHECK:STDOUT: %Result.as_type.loc156_54.1 => constants.%Int16 // CHECK:STDOUT: %facet_type.loc156_38 => constants.%facet_type.84f -// CHECK:STDOUT: %T.loc156_4.1 => constants.%facet_value.c41 // CHECK:STDOUT: %pattern_type.loc156 => constants.%pattern_type.abe +// CHECK:STDOUT: %T.patt.loc156_4.2 => constants.%T.patt.15c +// CHECK:STDOUT: %T.loc156_4.1 => constants.%facet_value.c41 // CHECK:STDOUT: %pattern_type.loc157_16 => constants.%pattern_type.785 +// CHECK:STDOUT: %result.param_patt.loc157_16.2 => constants.%result.param_patt.be6 +// CHECK:STDOUT: %result.patt.loc157_16.2 => constants.%result.patt.488 // CHECK:STDOUT: %T.as_type.loc157_29.1 => constants.%i16 // CHECK:STDOUT: %pattern_type.loc157_27 => constants.%pattern_type.203 +// CHECK:STDOUT: %x.param_patt.loc157_27.2 => constants.%x.param_patt.676 +// CHECK:STDOUT: %x.patt.loc157_27.2 => constants.%x.patt.26e // CHECK:STDOUT: %pattern_type.loc157_33 => constants.%pattern_type.785 +// CHECK:STDOUT: %y.param_patt.loc157_33.2 => constants.%y.param_patt.418 +// CHECK:STDOUT: %y.patt.loc157_33.2 => constants.%y.patt.4e6 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc157_16 => constants.%complete_type.357 @@ -2090,18 +2305,20 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %DivWith.lookup_impl_witness.loc159 => constants.%custom_witness.22c // CHECK:STDOUT: %DivWith.facet => constants.%DivWith.facet.437 // CHECK:STDOUT: %DivWith.WithSelf.Op.type => constants.%DivWith.WithSelf.Op.type.51a -// CHECK:STDOUT: %.loc159_5.5 => constants.%.316 +// CHECK:STDOUT: %.loc159_5.6 => constants.%.316 // CHECK:STDOUT: %impl.elem1.loc159_5.2 => constants.%Op.72717c.4 // CHECK:STDOUT: %specific_impl_fn.loc159_5.3 => constants.%Op.72717c.4 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.9d5 -// CHECK:STDOUT: %.loc159_5.6 => constants.%.6da +// CHECK:STDOUT: %.loc159_5.7 => constants.%.6da // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.e7a31c.1 // CHECK:STDOUT: %impl.elem0.loc159_5.2 => constants.%Int16.Op.4dca31.1 // CHECK:STDOUT: %specific_impl_fn.loc159_5.4 => constants.%Int16.Op.4dca31.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ModWith.loc168(constants.%Destroy.facet.2cc, constants.%Destroy.facet.2cc, constants.%facet_value.849) { +// CHECK:STDOUT: %Result.patt.loc165_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc165_9.1 => constants.%Destroy.facet.2cc +// CHECK:STDOUT: %U.patt.loc166_4.2 => constants.%U.patt.7a2 // CHECK:STDOUT: %U.loc166_4.1 => constants.%Destroy.facet.2cc // CHECK:STDOUT: %U.as_type.loc167_36.1 => constants.%Int16 // CHECK:STDOUT: %ModWith.type.loc167_36.1 => constants.%ModWith.type.763 @@ -2115,12 +2332,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.loc167_44.1 => constants.%impl.elem0.dae // CHECK:STDOUT: %Result.as_type.loc167_54.1 => constants.%Int16 // CHECK:STDOUT: %facet_type.loc167_38 => constants.%facet_type.1b7 -// CHECK:STDOUT: %T.loc167_4.1 => constants.%facet_value.849 // CHECK:STDOUT: %pattern_type.loc167 => constants.%pattern_type.45b +// CHECK:STDOUT: %T.patt.loc167_4.2 => constants.%T.patt.a2e +// CHECK:STDOUT: %T.loc167_4.1 => constants.%facet_value.849 // CHECK:STDOUT: %pattern_type.loc168_16 => constants.%pattern_type.785 +// CHECK:STDOUT: %result.param_patt.loc168_16.2 => constants.%result.param_patt.be6 +// CHECK:STDOUT: %result.patt.loc168_16.2 => constants.%result.patt.488 // CHECK:STDOUT: %T.as_type.loc168_29.1 => constants.%i16 // CHECK:STDOUT: %pattern_type.loc168_27 => constants.%pattern_type.203 +// CHECK:STDOUT: %x.param_patt.loc168_27.2 => constants.%x.param_patt.676 +// CHECK:STDOUT: %x.patt.loc168_27.2 => constants.%x.patt.26e // CHECK:STDOUT: %pattern_type.loc168_33 => constants.%pattern_type.785 +// CHECK:STDOUT: %y.param_patt.loc168_33.2 => constants.%y.param_patt.418 +// CHECK:STDOUT: %y.patt.loc168_33.2 => constants.%y.patt.4e6 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc168_16 => constants.%complete_type.357 @@ -2131,18 +2355,20 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %ModWith.lookup_impl_witness.loc170 => constants.%custom_witness.9e6 // CHECK:STDOUT: %ModWith.facet => constants.%ModWith.facet.251 // CHECK:STDOUT: %ModWith.WithSelf.Op.type => constants.%ModWith.WithSelf.Op.type.62d -// CHECK:STDOUT: %.loc170_5.5 => constants.%.9b3 +// CHECK:STDOUT: %.loc170_5.6 => constants.%.9b3 // CHECK:STDOUT: %impl.elem1.loc170_5.2 => constants.%Op.72717c.5 // CHECK:STDOUT: %specific_impl_fn.loc170_5.3 => constants.%Op.72717c.5 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.9d5 -// CHECK:STDOUT: %.loc170_5.6 => constants.%.6da +// CHECK:STDOUT: %.loc170_5.7 => constants.%.6da // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.e7a31c.1 // CHECK:STDOUT: %impl.elem0.loc170_5.2 => constants.%Int16.Op.4dca31.1 // CHECK:STDOUT: %specific_impl_fn.loc170_5.4 => constants.%Int16.Op.4dca31.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @AddWith.loc124(constants.%Destroy.facet.2cc, constants.%Destroy.facet.e5c, constants.%facet_value.dbc) { +// CHECK:STDOUT: %Result.patt.loc121_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc121_9.1 => constants.%Destroy.facet.2cc +// CHECK:STDOUT: %U.patt.loc122_4.2 => constants.%U.patt.7a2 // CHECK:STDOUT: %U.loc122_4.1 => constants.%Destroy.facet.e5c // CHECK:STDOUT: %U.as_type.loc123_36.1 => constants.%i16 // CHECK:STDOUT: %AddWith.type.loc123_36.1 => constants.%AddWith.type.a36 @@ -2156,12 +2382,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.loc123_44.1 => constants.%impl.elem0.46e // CHECK:STDOUT: %Result.as_type.loc123_54.1 => constants.%Int16 // CHECK:STDOUT: %facet_type.loc123_38 => constants.%facet_type.3ae -// CHECK:STDOUT: %T.loc123_4.1 => constants.%facet_value.dbc // CHECK:STDOUT: %pattern_type.loc123 => constants.%pattern_type.9c1 +// CHECK:STDOUT: %T.patt.loc123_4.2 => constants.%T.patt.ec4 +// CHECK:STDOUT: %T.loc123_4.1 => constants.%facet_value.dbc // CHECK:STDOUT: %pattern_type.loc124_16 => constants.%pattern_type.785 +// CHECK:STDOUT: %result.param_patt.loc124_16.2 => constants.%result.param_patt.be6 +// CHECK:STDOUT: %result.patt.loc124_16.2 => constants.%result.patt.488 // CHECK:STDOUT: %T.as_type.loc124_29.1 => constants.%Int16 // CHECK:STDOUT: %pattern_type.loc124_27 => constants.%pattern_type.785 +// CHECK:STDOUT: %x.param_patt.loc124_27.2 => constants.%x.param_patt.3b0 +// CHECK:STDOUT: %x.patt.loc124_27.2 => constants.%x.patt.b76 // CHECK:STDOUT: %pattern_type.loc124_33 => constants.%pattern_type.203 +// CHECK:STDOUT: %y.param_patt.loc124_33.2 => constants.%y.param_patt.4b4 +// CHECK:STDOUT: %y.patt.loc124_33.2 => constants.%y.patt.dd3 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc124_16 => constants.%complete_type.357 @@ -2172,18 +2405,20 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %AddWith.lookup_impl_witness.loc126 => constants.%custom_witness.b17 // CHECK:STDOUT: %AddWith.facet => constants.%AddWith.facet.b59 // CHECK:STDOUT: %AddWith.WithSelf.Op.type => constants.%AddWith.WithSelf.Op.type.de7 -// CHECK:STDOUT: %.loc126_5.5 => constants.%.c9e +// CHECK:STDOUT: %.loc126_5.6 => constants.%.c9e // CHECK:STDOUT: %impl.elem1.loc126_5.2 => constants.%Int16.Op.4dca31.3 // CHECK:STDOUT: %specific_impl_fn.loc126_5.3 => constants.%Int16.Op.4dca31.3 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.9d5 -// CHECK:STDOUT: %.loc126_5.6 => constants.%.6da +// CHECK:STDOUT: %.loc126_5.7 => constants.%.6da // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.e7a31c.1 // CHECK:STDOUT: %impl.elem0.loc126_5.2 => constants.%Int16.Op.4dca31.1 // CHECK:STDOUT: %specific_impl_fn.loc126_5.4 => constants.%Int16.Op.4dca31.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @SubWith.loc135(constants.%Destroy.facet.2cc, constants.%Destroy.facet.e5c, constants.%facet_value.5c8) { +// CHECK:STDOUT: %Result.patt.loc132_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc132_9.1 => constants.%Destroy.facet.2cc +// CHECK:STDOUT: %U.patt.loc133_4.2 => constants.%U.patt.7a2 // CHECK:STDOUT: %U.loc133_4.1 => constants.%Destroy.facet.e5c // CHECK:STDOUT: %U.as_type.loc134_36.1 => constants.%i16 // CHECK:STDOUT: %SubWith.type.loc134_36.1 => constants.%SubWith.type.08b @@ -2197,12 +2432,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.loc134_44.1 => constants.%impl.elem0.727 // CHECK:STDOUT: %Result.as_type.loc134_54.1 => constants.%Int16 // CHECK:STDOUT: %facet_type.loc134_38 => constants.%facet_type.a54 -// CHECK:STDOUT: %T.loc134_4.1 => constants.%facet_value.5c8 // CHECK:STDOUT: %pattern_type.loc134 => constants.%pattern_type.612 +// CHECK:STDOUT: %T.patt.loc134_4.2 => constants.%T.patt.c74 +// CHECK:STDOUT: %T.loc134_4.1 => constants.%facet_value.5c8 // CHECK:STDOUT: %pattern_type.loc135_16 => constants.%pattern_type.785 +// CHECK:STDOUT: %result.param_patt.loc135_16.2 => constants.%result.param_patt.be6 +// CHECK:STDOUT: %result.patt.loc135_16.2 => constants.%result.patt.488 // CHECK:STDOUT: %T.as_type.loc135_29.1 => constants.%Int16 // CHECK:STDOUT: %pattern_type.loc135_27 => constants.%pattern_type.785 +// CHECK:STDOUT: %x.param_patt.loc135_27.2 => constants.%x.param_patt.3b0 +// CHECK:STDOUT: %x.patt.loc135_27.2 => constants.%x.patt.b76 // CHECK:STDOUT: %pattern_type.loc135_33 => constants.%pattern_type.203 +// CHECK:STDOUT: %y.param_patt.loc135_33.2 => constants.%y.param_patt.4b4 +// CHECK:STDOUT: %y.patt.loc135_33.2 => constants.%y.patt.dd3 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc135_16 => constants.%complete_type.357 @@ -2213,18 +2455,20 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %SubWith.lookup_impl_witness.loc137 => constants.%custom_witness.b07 // CHECK:STDOUT: %SubWith.facet => constants.%SubWith.facet.ef4 // CHECK:STDOUT: %SubWith.WithSelf.Op.type => constants.%SubWith.WithSelf.Op.type.723 -// CHECK:STDOUT: %.loc137_5.5 => constants.%.6f3 +// CHECK:STDOUT: %.loc137_5.6 => constants.%.6f3 // CHECK:STDOUT: %impl.elem1.loc137_5.2 => constants.%Int16.Op.4dca31.4 // CHECK:STDOUT: %specific_impl_fn.loc137_5.3 => constants.%Int16.Op.4dca31.4 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.9d5 -// CHECK:STDOUT: %.loc137_5.6 => constants.%.6da +// CHECK:STDOUT: %.loc137_5.7 => constants.%.6da // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.e7a31c.1 // CHECK:STDOUT: %impl.elem0.loc137_5.2 => constants.%Int16.Op.4dca31.1 // CHECK:STDOUT: %specific_impl_fn.loc137_5.4 => constants.%Int16.Op.4dca31.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @MulWith.loc146(constants.%Destroy.facet.2cc, constants.%Destroy.facet.e5c, constants.%facet_value.158) { +// CHECK:STDOUT: %Result.patt.loc143_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc143_9.1 => constants.%Destroy.facet.2cc +// CHECK:STDOUT: %U.patt.loc144_4.2 => constants.%U.patt.7a2 // CHECK:STDOUT: %U.loc144_4.1 => constants.%Destroy.facet.e5c // CHECK:STDOUT: %U.as_type.loc145_36.1 => constants.%i16 // CHECK:STDOUT: %MulWith.type.loc145_36.1 => constants.%MulWith.type.55d @@ -2238,12 +2482,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.loc145_44.1 => constants.%impl.elem0.192 // CHECK:STDOUT: %Result.as_type.loc145_54.1 => constants.%Int16 // CHECK:STDOUT: %facet_type.loc145_38 => constants.%facet_type.d1d -// CHECK:STDOUT: %T.loc145_4.1 => constants.%facet_value.158 // CHECK:STDOUT: %pattern_type.loc145 => constants.%pattern_type.fc4 +// CHECK:STDOUT: %T.patt.loc145_4.2 => constants.%T.patt.ce4 +// CHECK:STDOUT: %T.loc145_4.1 => constants.%facet_value.158 // CHECK:STDOUT: %pattern_type.loc146_16 => constants.%pattern_type.785 +// CHECK:STDOUT: %result.param_patt.loc146_16.2 => constants.%result.param_patt.be6 +// CHECK:STDOUT: %result.patt.loc146_16.2 => constants.%result.patt.488 // CHECK:STDOUT: %T.as_type.loc146_29.1 => constants.%Int16 // CHECK:STDOUT: %pattern_type.loc146_27 => constants.%pattern_type.785 +// CHECK:STDOUT: %x.param_patt.loc146_27.2 => constants.%x.param_patt.3b0 +// CHECK:STDOUT: %x.patt.loc146_27.2 => constants.%x.patt.b76 // CHECK:STDOUT: %pattern_type.loc146_33 => constants.%pattern_type.203 +// CHECK:STDOUT: %y.param_patt.loc146_33.2 => constants.%y.param_patt.4b4 +// CHECK:STDOUT: %y.patt.loc146_33.2 => constants.%y.patt.dd3 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc146_16 => constants.%complete_type.357 @@ -2254,18 +2505,20 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %MulWith.lookup_impl_witness.loc148 => constants.%custom_witness.8bd // CHECK:STDOUT: %MulWith.facet => constants.%MulWith.facet.19a // CHECK:STDOUT: %MulWith.WithSelf.Op.type => constants.%MulWith.WithSelf.Op.type.7b1 -// CHECK:STDOUT: %.loc148_5.5 => constants.%.d82 +// CHECK:STDOUT: %.loc148_5.6 => constants.%.d82 // CHECK:STDOUT: %impl.elem1.loc148_5.2 => constants.%Int16.Op.4dca31.5 // CHECK:STDOUT: %specific_impl_fn.loc148_5.3 => constants.%Int16.Op.4dca31.5 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.9d5 -// CHECK:STDOUT: %.loc148_5.6 => constants.%.6da +// CHECK:STDOUT: %.loc148_5.7 => constants.%.6da // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.e7a31c.1 // CHECK:STDOUT: %impl.elem0.loc148_5.2 => constants.%Int16.Op.4dca31.1 // CHECK:STDOUT: %specific_impl_fn.loc148_5.4 => constants.%Int16.Op.4dca31.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @DivWith.loc157(constants.%Destroy.facet.2cc, constants.%Destroy.facet.e5c, constants.%facet_value.8dc) { +// CHECK:STDOUT: %Result.patt.loc154_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc154_9.1 => constants.%Destroy.facet.2cc +// CHECK:STDOUT: %U.patt.loc155_4.2 => constants.%U.patt.7a2 // CHECK:STDOUT: %U.loc155_4.1 => constants.%Destroy.facet.e5c // CHECK:STDOUT: %U.as_type.loc156_36.1 => constants.%i16 // CHECK:STDOUT: %DivWith.type.loc156_36.1 => constants.%DivWith.type.ab0 @@ -2279,12 +2532,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.loc156_44.1 => constants.%impl.elem0.7e7 // CHECK:STDOUT: %Result.as_type.loc156_54.1 => constants.%Int16 // CHECK:STDOUT: %facet_type.loc156_38 => constants.%facet_type.bdc -// CHECK:STDOUT: %T.loc156_4.1 => constants.%facet_value.8dc // CHECK:STDOUT: %pattern_type.loc156 => constants.%pattern_type.b62 +// CHECK:STDOUT: %T.patt.loc156_4.2 => constants.%T.patt.596 +// CHECK:STDOUT: %T.loc156_4.1 => constants.%facet_value.8dc // CHECK:STDOUT: %pattern_type.loc157_16 => constants.%pattern_type.785 +// CHECK:STDOUT: %result.param_patt.loc157_16.2 => constants.%result.param_patt.be6 +// CHECK:STDOUT: %result.patt.loc157_16.2 => constants.%result.patt.488 // CHECK:STDOUT: %T.as_type.loc157_29.1 => constants.%Int16 // CHECK:STDOUT: %pattern_type.loc157_27 => constants.%pattern_type.785 +// CHECK:STDOUT: %x.param_patt.loc157_27.2 => constants.%x.param_patt.3b0 +// CHECK:STDOUT: %x.patt.loc157_27.2 => constants.%x.patt.b76 // CHECK:STDOUT: %pattern_type.loc157_33 => constants.%pattern_type.203 +// CHECK:STDOUT: %y.param_patt.loc157_33.2 => constants.%y.param_patt.4b4 +// CHECK:STDOUT: %y.patt.loc157_33.2 => constants.%y.patt.dd3 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc157_16 => constants.%complete_type.357 @@ -2295,18 +2555,20 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %DivWith.lookup_impl_witness.loc159 => constants.%custom_witness.963 // CHECK:STDOUT: %DivWith.facet => constants.%DivWith.facet.115 // CHECK:STDOUT: %DivWith.WithSelf.Op.type => constants.%DivWith.WithSelf.Op.type.a49 -// CHECK:STDOUT: %.loc159_5.5 => constants.%.251 +// CHECK:STDOUT: %.loc159_5.6 => constants.%.251 // CHECK:STDOUT: %impl.elem1.loc159_5.2 => constants.%Int16.Op.4dca31.6 // CHECK:STDOUT: %specific_impl_fn.loc159_5.3 => constants.%Int16.Op.4dca31.6 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.9d5 -// CHECK:STDOUT: %.loc159_5.6 => constants.%.6da +// CHECK:STDOUT: %.loc159_5.7 => constants.%.6da // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.e7a31c.1 // CHECK:STDOUT: %impl.elem0.loc159_5.2 => constants.%Int16.Op.4dca31.1 // CHECK:STDOUT: %specific_impl_fn.loc159_5.4 => constants.%Int16.Op.4dca31.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ModWith.loc168(constants.%Destroy.facet.2cc, constants.%Destroy.facet.e5c, constants.%facet_value.8657) { +// CHECK:STDOUT: %Result.patt.loc165_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc165_9.1 => constants.%Destroy.facet.2cc +// CHECK:STDOUT: %U.patt.loc166_4.2 => constants.%U.patt.7a2 // CHECK:STDOUT: %U.loc166_4.1 => constants.%Destroy.facet.e5c // CHECK:STDOUT: %U.as_type.loc167_36.1 => constants.%i16 // CHECK:STDOUT: %ModWith.type.loc167_36.1 => constants.%ModWith.type.0b2 @@ -2320,12 +2582,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.loc167_44.1 => constants.%impl.elem0.4a6 // CHECK:STDOUT: %Result.as_type.loc167_54.1 => constants.%Int16 // CHECK:STDOUT: %facet_type.loc167_38 => constants.%facet_type.dde -// CHECK:STDOUT: %T.loc167_4.1 => constants.%facet_value.8657 // CHECK:STDOUT: %pattern_type.loc167 => constants.%pattern_type.9c7 +// CHECK:STDOUT: %T.patt.loc167_4.2 => constants.%T.patt.b55 +// CHECK:STDOUT: %T.loc167_4.1 => constants.%facet_value.8657 // CHECK:STDOUT: %pattern_type.loc168_16 => constants.%pattern_type.785 +// CHECK:STDOUT: %result.param_patt.loc168_16.2 => constants.%result.param_patt.be6 +// CHECK:STDOUT: %result.patt.loc168_16.2 => constants.%result.patt.488 // CHECK:STDOUT: %T.as_type.loc168_29.1 => constants.%Int16 // CHECK:STDOUT: %pattern_type.loc168_27 => constants.%pattern_type.785 +// CHECK:STDOUT: %x.param_patt.loc168_27.2 => constants.%x.param_patt.3b0 +// CHECK:STDOUT: %x.patt.loc168_27.2 => constants.%x.patt.b76 // CHECK:STDOUT: %pattern_type.loc168_33 => constants.%pattern_type.203 +// CHECK:STDOUT: %y.param_patt.loc168_33.2 => constants.%y.param_patt.4b4 +// CHECK:STDOUT: %y.patt.loc168_33.2 => constants.%y.patt.dd3 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc168_16 => constants.%complete_type.357 @@ -2336,18 +2605,20 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %ModWith.lookup_impl_witness.loc170 => constants.%custom_witness.8f4 // CHECK:STDOUT: %ModWith.facet => constants.%ModWith.facet.925 // CHECK:STDOUT: %ModWith.WithSelf.Op.type => constants.%ModWith.WithSelf.Op.type.519 -// CHECK:STDOUT: %.loc170_5.5 => constants.%.66e2 +// CHECK:STDOUT: %.loc170_5.6 => constants.%.66e2 // CHECK:STDOUT: %impl.elem1.loc170_5.2 => constants.%Int16.Op.4dca31.7 // CHECK:STDOUT: %specific_impl_fn.loc170_5.3 => constants.%Int16.Op.4dca31.7 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.9d5 -// CHECK:STDOUT: %.loc170_5.6 => constants.%.6da +// CHECK:STDOUT: %.loc170_5.7 => constants.%.6da // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.e7a31c.1 // CHECK:STDOUT: %impl.elem0.loc170_5.2 => constants.%Int16.Op.4dca31.1 // CHECK:STDOUT: %specific_impl_fn.loc170_5.4 => constants.%Int16.Op.4dca31.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @AddWith.loc124(constants.%Destroy.facet.099, constants.%Destroy.facet.099, constants.%facet_value.5c0) { +// CHECK:STDOUT: %Result.patt.loc121_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc121_9.1 => constants.%Destroy.facet.099 +// CHECK:STDOUT: %U.patt.loc122_4.2 => constants.%U.patt.7a2 // CHECK:STDOUT: %U.loc122_4.1 => constants.%Destroy.facet.099 // CHECK:STDOUT: %U.as_type.loc123_36.1 => constants.%Int32 // CHECK:STDOUT: %AddWith.type.loc123_36.1 => constants.%AddWith.type.c71 @@ -2361,12 +2632,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.loc123_44.1 => constants.%impl.elem0.899 // CHECK:STDOUT: %Result.as_type.loc123_54.1 => constants.%Int32 // CHECK:STDOUT: %facet_type.loc123_38 => constants.%facet_type.cf0 -// CHECK:STDOUT: %T.loc123_4.1 => constants.%facet_value.5c0 // CHECK:STDOUT: %pattern_type.loc123 => constants.%pattern_type.44d +// CHECK:STDOUT: %T.patt.loc123_4.2 => constants.%T.patt.fb1 +// CHECK:STDOUT: %T.loc123_4.1 => constants.%facet_value.5c0 // CHECK:STDOUT: %pattern_type.loc124_16 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %result.param_patt.loc124_16.2 => constants.%result.param_patt.e81 +// CHECK:STDOUT: %result.patt.loc124_16.2 => constants.%result.patt.830 // CHECK:STDOUT: %T.as_type.loc124_29.1 => constants.%Int16 // CHECK:STDOUT: %pattern_type.loc124_27 => constants.%pattern_type.785 +// CHECK:STDOUT: %x.param_patt.loc124_27.2 => constants.%x.param_patt.3b0 +// CHECK:STDOUT: %x.patt.loc124_27.2 => constants.%x.patt.b76 // CHECK:STDOUT: %pattern_type.loc124_33 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %y.param_patt.loc124_33.2 => constants.%y.param_patt.e0c +// CHECK:STDOUT: %y.patt.loc124_33.2 => constants.%y.patt.0a3 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc124_16 => constants.%complete_type.357 @@ -2377,18 +2655,20 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %AddWith.lookup_impl_witness.loc126 => constants.%custom_witness.e02e0c.1 // CHECK:STDOUT: %AddWith.facet => constants.%AddWith.facet.007 // CHECK:STDOUT: %AddWith.WithSelf.Op.type => constants.%AddWith.WithSelf.Op.type.dc4 -// CHECK:STDOUT: %.loc126_5.5 => constants.%.dbb +// CHECK:STDOUT: %.loc126_5.6 => constants.%.dbb // CHECK:STDOUT: %impl.elem1.loc126_5.2 => constants.%Int16.Op.4dca31.8 // CHECK:STDOUT: %specific_impl_fn.loc126_5.3 => constants.%Int16.Op.4dca31.8 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.b76 -// CHECK:STDOUT: %.loc126_5.6 => constants.%.043 +// CHECK:STDOUT: %.loc126_5.7 => constants.%.043 // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.e7a31c.2 // CHECK:STDOUT: %impl.elem0.loc126_5.2 => constants.%Int32.Op.4dca31.1 // CHECK:STDOUT: %specific_impl_fn.loc126_5.4 => constants.%Int32.Op.4dca31.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @SubWith.loc135(constants.%Destroy.facet.099, constants.%Destroy.facet.099, constants.%facet_value.a20) { +// CHECK:STDOUT: %Result.patt.loc132_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc132_9.1 => constants.%Destroy.facet.099 +// CHECK:STDOUT: %U.patt.loc133_4.2 => constants.%U.patt.7a2 // CHECK:STDOUT: %U.loc133_4.1 => constants.%Destroy.facet.099 // CHECK:STDOUT: %U.as_type.loc134_36.1 => constants.%Int32 // CHECK:STDOUT: %SubWith.type.loc134_36.1 => constants.%SubWith.type.c81 @@ -2402,12 +2682,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.loc134_44.1 => constants.%impl.elem0.ee1 // CHECK:STDOUT: %Result.as_type.loc134_54.1 => constants.%Int32 // CHECK:STDOUT: %facet_type.loc134_38 => constants.%facet_type.0f8 -// CHECK:STDOUT: %T.loc134_4.1 => constants.%facet_value.a20 // CHECK:STDOUT: %pattern_type.loc134 => constants.%pattern_type.9624 +// CHECK:STDOUT: %T.patt.loc134_4.2 => constants.%T.patt.bd6 +// CHECK:STDOUT: %T.loc134_4.1 => constants.%facet_value.a20 // CHECK:STDOUT: %pattern_type.loc135_16 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %result.param_patt.loc135_16.2 => constants.%result.param_patt.e81 +// CHECK:STDOUT: %result.patt.loc135_16.2 => constants.%result.patt.830 // CHECK:STDOUT: %T.as_type.loc135_29.1 => constants.%Int16 // CHECK:STDOUT: %pattern_type.loc135_27 => constants.%pattern_type.785 +// CHECK:STDOUT: %x.param_patt.loc135_27.2 => constants.%x.param_patt.3b0 +// CHECK:STDOUT: %x.patt.loc135_27.2 => constants.%x.patt.b76 // CHECK:STDOUT: %pattern_type.loc135_33 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %y.param_patt.loc135_33.2 => constants.%y.param_patt.e0c +// CHECK:STDOUT: %y.patt.loc135_33.2 => constants.%y.patt.0a3 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc135_16 => constants.%complete_type.357 @@ -2418,18 +2705,20 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %SubWith.lookup_impl_witness.loc137 => constants.%custom_witness.4dea15.1 // CHECK:STDOUT: %SubWith.facet => constants.%SubWith.facet.703 // CHECK:STDOUT: %SubWith.WithSelf.Op.type => constants.%SubWith.WithSelf.Op.type.6eb -// CHECK:STDOUT: %.loc137_5.5 => constants.%.114 +// CHECK:STDOUT: %.loc137_5.6 => constants.%.114 // CHECK:STDOUT: %impl.elem1.loc137_5.2 => constants.%Int16.Op.4dca31.9 // CHECK:STDOUT: %specific_impl_fn.loc137_5.3 => constants.%Int16.Op.4dca31.9 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.b76 -// CHECK:STDOUT: %.loc137_5.6 => constants.%.043 +// CHECK:STDOUT: %.loc137_5.7 => constants.%.043 // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.e7a31c.2 // CHECK:STDOUT: %impl.elem0.loc137_5.2 => constants.%Int32.Op.4dca31.1 // CHECK:STDOUT: %specific_impl_fn.loc137_5.4 => constants.%Int32.Op.4dca31.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @MulWith.loc146(constants.%Destroy.facet.099, constants.%Destroy.facet.099, constants.%facet_value.f68) { +// CHECK:STDOUT: %Result.patt.loc143_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc143_9.1 => constants.%Destroy.facet.099 +// CHECK:STDOUT: %U.patt.loc144_4.2 => constants.%U.patt.7a2 // CHECK:STDOUT: %U.loc144_4.1 => constants.%Destroy.facet.099 // CHECK:STDOUT: %U.as_type.loc145_36.1 => constants.%Int32 // CHECK:STDOUT: %MulWith.type.loc145_36.1 => constants.%MulWith.type.eeb @@ -2443,12 +2732,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.loc145_44.1 => constants.%impl.elem0.d19 // CHECK:STDOUT: %Result.as_type.loc145_54.1 => constants.%Int32 // CHECK:STDOUT: %facet_type.loc145_38 => constants.%facet_type.cf6 -// CHECK:STDOUT: %T.loc145_4.1 => constants.%facet_value.f68 // CHECK:STDOUT: %pattern_type.loc145 => constants.%pattern_type.08b +// CHECK:STDOUT: %T.patt.loc145_4.2 => constants.%T.patt.1f7 +// CHECK:STDOUT: %T.loc145_4.1 => constants.%facet_value.f68 // CHECK:STDOUT: %pattern_type.loc146_16 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %result.param_patt.loc146_16.2 => constants.%result.param_patt.e81 +// CHECK:STDOUT: %result.patt.loc146_16.2 => constants.%result.patt.830 // CHECK:STDOUT: %T.as_type.loc146_29.1 => constants.%Int16 // CHECK:STDOUT: %pattern_type.loc146_27 => constants.%pattern_type.785 +// CHECK:STDOUT: %x.param_patt.loc146_27.2 => constants.%x.param_patt.3b0 +// CHECK:STDOUT: %x.patt.loc146_27.2 => constants.%x.patt.b76 // CHECK:STDOUT: %pattern_type.loc146_33 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %y.param_patt.loc146_33.2 => constants.%y.param_patt.e0c +// CHECK:STDOUT: %y.patt.loc146_33.2 => constants.%y.patt.0a3 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc146_16 => constants.%complete_type.357 @@ -2459,18 +2755,20 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %MulWith.lookup_impl_witness.loc148 => constants.%custom_witness.337c88.1 // CHECK:STDOUT: %MulWith.facet => constants.%MulWith.facet.fcd // CHECK:STDOUT: %MulWith.WithSelf.Op.type => constants.%MulWith.WithSelf.Op.type.99f -// CHECK:STDOUT: %.loc148_5.5 => constants.%.c1c +// CHECK:STDOUT: %.loc148_5.6 => constants.%.c1c // CHECK:STDOUT: %impl.elem1.loc148_5.2 => constants.%Int16.Op.4dca31.10 // CHECK:STDOUT: %specific_impl_fn.loc148_5.3 => constants.%Int16.Op.4dca31.10 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.b76 -// CHECK:STDOUT: %.loc148_5.6 => constants.%.043 +// CHECK:STDOUT: %.loc148_5.7 => constants.%.043 // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.e7a31c.2 // CHECK:STDOUT: %impl.elem0.loc148_5.2 => constants.%Int32.Op.4dca31.1 // CHECK:STDOUT: %specific_impl_fn.loc148_5.4 => constants.%Int32.Op.4dca31.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @DivWith.loc157(constants.%Destroy.facet.099, constants.%Destroy.facet.099, constants.%facet_value.6d0) { +// CHECK:STDOUT: %Result.patt.loc154_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc154_9.1 => constants.%Destroy.facet.099 +// CHECK:STDOUT: %U.patt.loc155_4.2 => constants.%U.patt.7a2 // CHECK:STDOUT: %U.loc155_4.1 => constants.%Destroy.facet.099 // CHECK:STDOUT: %U.as_type.loc156_36.1 => constants.%Int32 // CHECK:STDOUT: %DivWith.type.loc156_36.1 => constants.%DivWith.type.fb1 @@ -2484,12 +2782,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.loc156_44.1 => constants.%impl.elem0.282 // CHECK:STDOUT: %Result.as_type.loc156_54.1 => constants.%Int32 // CHECK:STDOUT: %facet_type.loc156_38 => constants.%facet_type.639 -// CHECK:STDOUT: %T.loc156_4.1 => constants.%facet_value.6d0 // CHECK:STDOUT: %pattern_type.loc156 => constants.%pattern_type.379 +// CHECK:STDOUT: %T.patt.loc156_4.2 => constants.%T.patt.2d3 +// CHECK:STDOUT: %T.loc156_4.1 => constants.%facet_value.6d0 // CHECK:STDOUT: %pattern_type.loc157_16 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %result.param_patt.loc157_16.2 => constants.%result.param_patt.e81 +// CHECK:STDOUT: %result.patt.loc157_16.2 => constants.%result.patt.830 // CHECK:STDOUT: %T.as_type.loc157_29.1 => constants.%Int16 // CHECK:STDOUT: %pattern_type.loc157_27 => constants.%pattern_type.785 +// CHECK:STDOUT: %x.param_patt.loc157_27.2 => constants.%x.param_patt.3b0 +// CHECK:STDOUT: %x.patt.loc157_27.2 => constants.%x.patt.b76 // CHECK:STDOUT: %pattern_type.loc157_33 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %y.param_patt.loc157_33.2 => constants.%y.param_patt.e0c +// CHECK:STDOUT: %y.patt.loc157_33.2 => constants.%y.patt.0a3 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc157_16 => constants.%complete_type.357 @@ -2500,18 +2805,20 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %DivWith.lookup_impl_witness.loc159 => constants.%custom_witness.3eb227.1 // CHECK:STDOUT: %DivWith.facet => constants.%DivWith.facet.3bd // CHECK:STDOUT: %DivWith.WithSelf.Op.type => constants.%DivWith.WithSelf.Op.type.500 -// CHECK:STDOUT: %.loc159_5.5 => constants.%.ebc +// CHECK:STDOUT: %.loc159_5.6 => constants.%.ebc // CHECK:STDOUT: %impl.elem1.loc159_5.2 => constants.%Int16.Op.4dca31.11 // CHECK:STDOUT: %specific_impl_fn.loc159_5.3 => constants.%Int16.Op.4dca31.11 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.b76 -// CHECK:STDOUT: %.loc159_5.6 => constants.%.043 +// CHECK:STDOUT: %.loc159_5.7 => constants.%.043 // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.e7a31c.2 // CHECK:STDOUT: %impl.elem0.loc159_5.2 => constants.%Int32.Op.4dca31.1 // CHECK:STDOUT: %specific_impl_fn.loc159_5.4 => constants.%Int32.Op.4dca31.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ModWith.loc168(constants.%Destroy.facet.099, constants.%Destroy.facet.099, constants.%facet_value.72f) { +// CHECK:STDOUT: %Result.patt.loc165_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc165_9.1 => constants.%Destroy.facet.099 +// CHECK:STDOUT: %U.patt.loc166_4.2 => constants.%U.patt.7a2 // CHECK:STDOUT: %U.loc166_4.1 => constants.%Destroy.facet.099 // CHECK:STDOUT: %U.as_type.loc167_36.1 => constants.%Int32 // CHECK:STDOUT: %ModWith.type.loc167_36.1 => constants.%ModWith.type.253 @@ -2525,12 +2832,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.loc167_44.1 => constants.%impl.elem0.32c // CHECK:STDOUT: %Result.as_type.loc167_54.1 => constants.%Int32 // CHECK:STDOUT: %facet_type.loc167_38 => constants.%facet_type.cac -// CHECK:STDOUT: %T.loc167_4.1 => constants.%facet_value.72f // CHECK:STDOUT: %pattern_type.loc167 => constants.%pattern_type.e4f +// CHECK:STDOUT: %T.patt.loc167_4.2 => constants.%T.patt.786 +// CHECK:STDOUT: %T.loc167_4.1 => constants.%facet_value.72f // CHECK:STDOUT: %pattern_type.loc168_16 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %result.param_patt.loc168_16.2 => constants.%result.param_patt.e81 +// CHECK:STDOUT: %result.patt.loc168_16.2 => constants.%result.patt.830 // CHECK:STDOUT: %T.as_type.loc168_29.1 => constants.%Int16 // CHECK:STDOUT: %pattern_type.loc168_27 => constants.%pattern_type.785 +// CHECK:STDOUT: %x.param_patt.loc168_27.2 => constants.%x.param_patt.3b0 +// CHECK:STDOUT: %x.patt.loc168_27.2 => constants.%x.patt.b76 // CHECK:STDOUT: %pattern_type.loc168_33 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %y.param_patt.loc168_33.2 => constants.%y.param_patt.e0c +// CHECK:STDOUT: %y.patt.loc168_33.2 => constants.%y.patt.0a3 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc168_16 => constants.%complete_type.357 @@ -2541,18 +2855,20 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %ModWith.lookup_impl_witness.loc170 => constants.%custom_witness.501c6d.1 // CHECK:STDOUT: %ModWith.facet => constants.%ModWith.facet.a29 // CHECK:STDOUT: %ModWith.WithSelf.Op.type => constants.%ModWith.WithSelf.Op.type.d03 -// CHECK:STDOUT: %.loc170_5.5 => constants.%.839 +// CHECK:STDOUT: %.loc170_5.6 => constants.%.839 // CHECK:STDOUT: %impl.elem1.loc170_5.2 => constants.%Int16.Op.4dca31.12 // CHECK:STDOUT: %specific_impl_fn.loc170_5.3 => constants.%Int16.Op.4dca31.12 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.b76 -// CHECK:STDOUT: %.loc170_5.6 => constants.%.043 +// CHECK:STDOUT: %.loc170_5.7 => constants.%.043 // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.e7a31c.2 // CHECK:STDOUT: %impl.elem0.loc170_5.2 => constants.%Int32.Op.4dca31.1 // CHECK:STDOUT: %specific_impl_fn.loc170_5.4 => constants.%Int32.Op.4dca31.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @AddWith.loc124(constants.%Destroy.facet.099, constants.%Destroy.facet.2cc, constants.%facet_value.aa2) { +// CHECK:STDOUT: %Result.patt.loc121_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc121_9.1 => constants.%Destroy.facet.099 +// CHECK:STDOUT: %U.patt.loc122_4.2 => constants.%U.patt.7a2 // CHECK:STDOUT: %U.loc122_4.1 => constants.%Destroy.facet.2cc // CHECK:STDOUT: %U.as_type.loc123_36.1 => constants.%Int16 // CHECK:STDOUT: %AddWith.type.loc123_36.1 => constants.%AddWith.type.b62 @@ -2566,12 +2882,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.loc123_44.1 => constants.%impl.elem0.7e0 // CHECK:STDOUT: %Result.as_type.loc123_54.1 => constants.%Int32 // CHECK:STDOUT: %facet_type.loc123_38 => constants.%facet_type.2c6 -// CHECK:STDOUT: %T.loc123_4.1 => constants.%facet_value.aa2 // CHECK:STDOUT: %pattern_type.loc123 => constants.%pattern_type.96f +// CHECK:STDOUT: %T.patt.loc123_4.2 => constants.%T.patt.bd3 +// CHECK:STDOUT: %T.loc123_4.1 => constants.%facet_value.aa2 // CHECK:STDOUT: %pattern_type.loc124_16 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %result.param_patt.loc124_16.2 => constants.%result.param_patt.e81 +// CHECK:STDOUT: %result.patt.loc124_16.2 => constants.%result.patt.830 // CHECK:STDOUT: %T.as_type.loc124_29.1 => constants.%Int32 // CHECK:STDOUT: %pattern_type.loc124_27 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %x.param_patt.loc124_27.2 => constants.%x.param_patt.27c +// CHECK:STDOUT: %x.patt.loc124_27.2 => constants.%x.patt.4c9 // CHECK:STDOUT: %pattern_type.loc124_33 => constants.%pattern_type.785 +// CHECK:STDOUT: %y.param_patt.loc124_33.2 => constants.%y.param_patt.418 +// CHECK:STDOUT: %y.patt.loc124_33.2 => constants.%y.patt.4e6 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc124_16 => constants.%complete_type.357 @@ -2582,18 +2905,20 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %AddWith.lookup_impl_witness.loc126 => constants.%custom_witness.15f // CHECK:STDOUT: %AddWith.facet => constants.%AddWith.facet.35b // CHECK:STDOUT: %AddWith.WithSelf.Op.type => constants.%AddWith.WithSelf.Op.type.29e -// CHECK:STDOUT: %.loc126_5.5 => constants.%.45e +// CHECK:STDOUT: %.loc126_5.6 => constants.%.45e // CHECK:STDOUT: %impl.elem1.loc126_5.2 => constants.%Int32.Op.4dca31.2 // CHECK:STDOUT: %specific_impl_fn.loc126_5.3 => constants.%Int32.Op.4dca31.2 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.b76 -// CHECK:STDOUT: %.loc126_5.6 => constants.%.043 +// CHECK:STDOUT: %.loc126_5.7 => constants.%.043 // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.e7a31c.2 // CHECK:STDOUT: %impl.elem0.loc126_5.2 => constants.%Int32.Op.4dca31.1 // CHECK:STDOUT: %specific_impl_fn.loc126_5.4 => constants.%Int32.Op.4dca31.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @SubWith.loc135(constants.%Destroy.facet.099, constants.%Destroy.facet.2cc, constants.%facet_value.577) { +// CHECK:STDOUT: %Result.patt.loc132_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc132_9.1 => constants.%Destroy.facet.099 +// CHECK:STDOUT: %U.patt.loc133_4.2 => constants.%U.patt.7a2 // CHECK:STDOUT: %U.loc133_4.1 => constants.%Destroy.facet.2cc // CHECK:STDOUT: %U.as_type.loc134_36.1 => constants.%Int16 // CHECK:STDOUT: %SubWith.type.loc134_36.1 => constants.%SubWith.type.b12 @@ -2607,12 +2932,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.loc134_44.1 => constants.%impl.elem0.104 // CHECK:STDOUT: %Result.as_type.loc134_54.1 => constants.%Int32 // CHECK:STDOUT: %facet_type.loc134_38 => constants.%facet_type.076 -// CHECK:STDOUT: %T.loc134_4.1 => constants.%facet_value.577 // CHECK:STDOUT: %pattern_type.loc134 => constants.%pattern_type.05c +// CHECK:STDOUT: %T.patt.loc134_4.2 => constants.%T.patt.f98 +// CHECK:STDOUT: %T.loc134_4.1 => constants.%facet_value.577 // CHECK:STDOUT: %pattern_type.loc135_16 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %result.param_patt.loc135_16.2 => constants.%result.param_patt.e81 +// CHECK:STDOUT: %result.patt.loc135_16.2 => constants.%result.patt.830 // CHECK:STDOUT: %T.as_type.loc135_29.1 => constants.%Int32 // CHECK:STDOUT: %pattern_type.loc135_27 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %x.param_patt.loc135_27.2 => constants.%x.param_patt.27c +// CHECK:STDOUT: %x.patt.loc135_27.2 => constants.%x.patt.4c9 // CHECK:STDOUT: %pattern_type.loc135_33 => constants.%pattern_type.785 +// CHECK:STDOUT: %y.param_patt.loc135_33.2 => constants.%y.param_patt.418 +// CHECK:STDOUT: %y.patt.loc135_33.2 => constants.%y.patt.4e6 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc135_16 => constants.%complete_type.357 @@ -2623,18 +2955,20 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %SubWith.lookup_impl_witness.loc137 => constants.%custom_witness.bb4 // CHECK:STDOUT: %SubWith.facet => constants.%SubWith.facet.8da // CHECK:STDOUT: %SubWith.WithSelf.Op.type => constants.%SubWith.WithSelf.Op.type.85b -// CHECK:STDOUT: %.loc137_5.5 => constants.%.db9 +// CHECK:STDOUT: %.loc137_5.6 => constants.%.db9 // CHECK:STDOUT: %impl.elem1.loc137_5.2 => constants.%Int32.Op.4dca31.3 // CHECK:STDOUT: %specific_impl_fn.loc137_5.3 => constants.%Int32.Op.4dca31.3 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.b76 -// CHECK:STDOUT: %.loc137_5.6 => constants.%.043 +// CHECK:STDOUT: %.loc137_5.7 => constants.%.043 // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.e7a31c.2 // CHECK:STDOUT: %impl.elem0.loc137_5.2 => constants.%Int32.Op.4dca31.1 // CHECK:STDOUT: %specific_impl_fn.loc137_5.4 => constants.%Int32.Op.4dca31.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @MulWith.loc146(constants.%Destroy.facet.099, constants.%Destroy.facet.2cc, constants.%facet_value.0f9) { +// CHECK:STDOUT: %Result.patt.loc143_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc143_9.1 => constants.%Destroy.facet.099 +// CHECK:STDOUT: %U.patt.loc144_4.2 => constants.%U.patt.7a2 // CHECK:STDOUT: %U.loc144_4.1 => constants.%Destroy.facet.2cc // CHECK:STDOUT: %U.as_type.loc145_36.1 => constants.%Int16 // CHECK:STDOUT: %MulWith.type.loc145_36.1 => constants.%MulWith.type.c18 @@ -2648,12 +2982,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.loc145_44.1 => constants.%impl.elem0.472 // CHECK:STDOUT: %Result.as_type.loc145_54.1 => constants.%Int32 // CHECK:STDOUT: %facet_type.loc145_38 => constants.%facet_type.163 -// CHECK:STDOUT: %T.loc145_4.1 => constants.%facet_value.0f9 // CHECK:STDOUT: %pattern_type.loc145 => constants.%pattern_type.59d +// CHECK:STDOUT: %T.patt.loc145_4.2 => constants.%T.patt.e40 +// CHECK:STDOUT: %T.loc145_4.1 => constants.%facet_value.0f9 // CHECK:STDOUT: %pattern_type.loc146_16 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %result.param_patt.loc146_16.2 => constants.%result.param_patt.e81 +// CHECK:STDOUT: %result.patt.loc146_16.2 => constants.%result.patt.830 // CHECK:STDOUT: %T.as_type.loc146_29.1 => constants.%Int32 // CHECK:STDOUT: %pattern_type.loc146_27 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %x.param_patt.loc146_27.2 => constants.%x.param_patt.27c +// CHECK:STDOUT: %x.patt.loc146_27.2 => constants.%x.patt.4c9 // CHECK:STDOUT: %pattern_type.loc146_33 => constants.%pattern_type.785 +// CHECK:STDOUT: %y.param_patt.loc146_33.2 => constants.%y.param_patt.418 +// CHECK:STDOUT: %y.patt.loc146_33.2 => constants.%y.patt.4e6 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc146_16 => constants.%complete_type.357 @@ -2664,18 +3005,20 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %MulWith.lookup_impl_witness.loc148 => constants.%custom_witness.0ab // CHECK:STDOUT: %MulWith.facet => constants.%MulWith.facet.920 // CHECK:STDOUT: %MulWith.WithSelf.Op.type => constants.%MulWith.WithSelf.Op.type.545 -// CHECK:STDOUT: %.loc148_5.5 => constants.%.c5e +// CHECK:STDOUT: %.loc148_5.6 => constants.%.c5e // CHECK:STDOUT: %impl.elem1.loc148_5.2 => constants.%Int32.Op.4dca31.4 // CHECK:STDOUT: %specific_impl_fn.loc148_5.3 => constants.%Int32.Op.4dca31.4 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.b76 -// CHECK:STDOUT: %.loc148_5.6 => constants.%.043 +// CHECK:STDOUT: %.loc148_5.7 => constants.%.043 // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.e7a31c.2 // CHECK:STDOUT: %impl.elem0.loc148_5.2 => constants.%Int32.Op.4dca31.1 // CHECK:STDOUT: %specific_impl_fn.loc148_5.4 => constants.%Int32.Op.4dca31.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @DivWith.loc157(constants.%Destroy.facet.099, constants.%Destroy.facet.2cc, constants.%facet_value.53b) { +// CHECK:STDOUT: %Result.patt.loc154_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc154_9.1 => constants.%Destroy.facet.099 +// CHECK:STDOUT: %U.patt.loc155_4.2 => constants.%U.patt.7a2 // CHECK:STDOUT: %U.loc155_4.1 => constants.%Destroy.facet.2cc // CHECK:STDOUT: %U.as_type.loc156_36.1 => constants.%Int16 // CHECK:STDOUT: %DivWith.type.loc156_36.1 => constants.%DivWith.type.6f9 @@ -2689,12 +3032,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.loc156_44.1 => constants.%impl.elem0.6aa // CHECK:STDOUT: %Result.as_type.loc156_54.1 => constants.%Int32 // CHECK:STDOUT: %facet_type.loc156_38 => constants.%facet_type.f1f -// CHECK:STDOUT: %T.loc156_4.1 => constants.%facet_value.53b // CHECK:STDOUT: %pattern_type.loc156 => constants.%pattern_type.c6c +// CHECK:STDOUT: %T.patt.loc156_4.2 => constants.%T.patt.361 +// CHECK:STDOUT: %T.loc156_4.1 => constants.%facet_value.53b // CHECK:STDOUT: %pattern_type.loc157_16 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %result.param_patt.loc157_16.2 => constants.%result.param_patt.e81 +// CHECK:STDOUT: %result.patt.loc157_16.2 => constants.%result.patt.830 // CHECK:STDOUT: %T.as_type.loc157_29.1 => constants.%Int32 // CHECK:STDOUT: %pattern_type.loc157_27 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %x.param_patt.loc157_27.2 => constants.%x.param_patt.27c +// CHECK:STDOUT: %x.patt.loc157_27.2 => constants.%x.patt.4c9 // CHECK:STDOUT: %pattern_type.loc157_33 => constants.%pattern_type.785 +// CHECK:STDOUT: %y.param_patt.loc157_33.2 => constants.%y.param_patt.418 +// CHECK:STDOUT: %y.patt.loc157_33.2 => constants.%y.patt.4e6 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc157_16 => constants.%complete_type.357 @@ -2705,18 +3055,20 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %DivWith.lookup_impl_witness.loc159 => constants.%custom_witness.3ec // CHECK:STDOUT: %DivWith.facet => constants.%DivWith.facet.c79 // CHECK:STDOUT: %DivWith.WithSelf.Op.type => constants.%DivWith.WithSelf.Op.type.a6b -// CHECK:STDOUT: %.loc159_5.5 => constants.%.558 +// CHECK:STDOUT: %.loc159_5.6 => constants.%.558 // CHECK:STDOUT: %impl.elem1.loc159_5.2 => constants.%Int32.Op.4dca31.5 // CHECK:STDOUT: %specific_impl_fn.loc159_5.3 => constants.%Int32.Op.4dca31.5 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.b76 -// CHECK:STDOUT: %.loc159_5.6 => constants.%.043 +// CHECK:STDOUT: %.loc159_5.7 => constants.%.043 // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.e7a31c.2 // CHECK:STDOUT: %impl.elem0.loc159_5.2 => constants.%Int32.Op.4dca31.1 // CHECK:STDOUT: %specific_impl_fn.loc159_5.4 => constants.%Int32.Op.4dca31.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ModWith.loc168(constants.%Destroy.facet.099, constants.%Destroy.facet.2cc, constants.%facet_value.b75a) { +// CHECK:STDOUT: %Result.patt.loc165_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc165_9.1 => constants.%Destroy.facet.099 +// CHECK:STDOUT: %U.patt.loc166_4.2 => constants.%U.patt.7a2 // CHECK:STDOUT: %U.loc166_4.1 => constants.%Destroy.facet.2cc // CHECK:STDOUT: %U.as_type.loc167_36.1 => constants.%Int16 // CHECK:STDOUT: %ModWith.type.loc167_36.1 => constants.%ModWith.type.763 @@ -2730,12 +3082,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.loc167_44.1 => constants.%impl.elem0.dae // CHECK:STDOUT: %Result.as_type.loc167_54.1 => constants.%Int32 // CHECK:STDOUT: %facet_type.loc167_38 => constants.%facet_type.3eb -// CHECK:STDOUT: %T.loc167_4.1 => constants.%facet_value.b75a // CHECK:STDOUT: %pattern_type.loc167 => constants.%pattern_type.205 +// CHECK:STDOUT: %T.patt.loc167_4.2 => constants.%T.patt.1df +// CHECK:STDOUT: %T.loc167_4.1 => constants.%facet_value.b75a // CHECK:STDOUT: %pattern_type.loc168_16 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %result.param_patt.loc168_16.2 => constants.%result.param_patt.e81 +// CHECK:STDOUT: %result.patt.loc168_16.2 => constants.%result.patt.830 // CHECK:STDOUT: %T.as_type.loc168_29.1 => constants.%Int32 // CHECK:STDOUT: %pattern_type.loc168_27 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %x.param_patt.loc168_27.2 => constants.%x.param_patt.27c +// CHECK:STDOUT: %x.patt.loc168_27.2 => constants.%x.patt.4c9 // CHECK:STDOUT: %pattern_type.loc168_33 => constants.%pattern_type.785 +// CHECK:STDOUT: %y.param_patt.loc168_33.2 => constants.%y.param_patt.418 +// CHECK:STDOUT: %y.patt.loc168_33.2 => constants.%y.patt.4e6 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc168_16 => constants.%complete_type.357 @@ -2746,18 +3105,20 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %ModWith.lookup_impl_witness.loc170 => constants.%custom_witness.de0 // CHECK:STDOUT: %ModWith.facet => constants.%ModWith.facet.bef // CHECK:STDOUT: %ModWith.WithSelf.Op.type => constants.%ModWith.WithSelf.Op.type.d54 -// CHECK:STDOUT: %.loc170_5.5 => constants.%.8c0 +// CHECK:STDOUT: %.loc170_5.6 => constants.%.8c0 // CHECK:STDOUT: %impl.elem1.loc170_5.2 => constants.%Int32.Op.4dca31.6 // CHECK:STDOUT: %specific_impl_fn.loc170_5.3 => constants.%Int32.Op.4dca31.6 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.b76 -// CHECK:STDOUT: %.loc170_5.6 => constants.%.043 +// CHECK:STDOUT: %.loc170_5.7 => constants.%.043 // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.e7a31c.2 // CHECK:STDOUT: %impl.elem0.loc170_5.2 => constants.%Int32.Op.4dca31.1 // CHECK:STDOUT: %specific_impl_fn.loc170_5.4 => constants.%Int32.Op.4dca31.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @AddWith.loc124(constants.%Destroy.facet.099, constants.%Destroy.facet.099, constants.%facet_value.8ac) { +// CHECK:STDOUT: %Result.patt.loc121_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc121_9.1 => constants.%Destroy.facet.099 +// CHECK:STDOUT: %U.patt.loc122_4.2 => constants.%U.patt.7a2 // CHECK:STDOUT: %U.loc122_4.1 => constants.%Destroy.facet.099 // CHECK:STDOUT: %U.as_type.loc123_36.1 => constants.%Int32 // CHECK:STDOUT: %AddWith.type.loc123_36.1 => constants.%AddWith.type.c71 @@ -2771,12 +3132,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.loc123_44.1 => constants.%impl.elem0.899 // CHECK:STDOUT: %Result.as_type.loc123_54.1 => constants.%Int32 // CHECK:STDOUT: %facet_type.loc123_38 => constants.%facet_type.cf0 -// CHECK:STDOUT: %T.loc123_4.1 => constants.%facet_value.8ac // CHECK:STDOUT: %pattern_type.loc123 => constants.%pattern_type.44d +// CHECK:STDOUT: %T.patt.loc123_4.2 => constants.%T.patt.fb1 +// CHECK:STDOUT: %T.loc123_4.1 => constants.%facet_value.8ac // CHECK:STDOUT: %pattern_type.loc124_16 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %result.param_patt.loc124_16.2 => constants.%result.param_patt.e81 +// CHECK:STDOUT: %result.patt.loc124_16.2 => constants.%result.patt.830 // CHECK:STDOUT: %T.as_type.loc124_29.1 => constants.%Int32 // CHECK:STDOUT: %pattern_type.loc124_27 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %x.param_patt.loc124_27.2 => constants.%x.param_patt.27c +// CHECK:STDOUT: %x.patt.loc124_27.2 => constants.%x.patt.4c9 // CHECK:STDOUT: %pattern_type.loc124_33 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %y.param_patt.loc124_33.2 => constants.%y.param_patt.e0c +// CHECK:STDOUT: %y.patt.loc124_33.2 => constants.%y.patt.0a3 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc124_16 => constants.%complete_type.357 @@ -2787,18 +3155,20 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %AddWith.lookup_impl_witness.loc126 => constants.%custom_witness.e02e0c.2 // CHECK:STDOUT: %AddWith.facet => constants.%AddWith.facet.ee1 // CHECK:STDOUT: %AddWith.WithSelf.Op.type => constants.%AddWith.WithSelf.Op.type.5a5 -// CHECK:STDOUT: %.loc126_5.5 => constants.%.dcb +// CHECK:STDOUT: %.loc126_5.6 => constants.%.dcb // CHECK:STDOUT: %impl.elem1.loc126_5.2 => constants.%Int32.Op.4dca31.7 // CHECK:STDOUT: %specific_impl_fn.loc126_5.3 => constants.%Int32.Op.4dca31.7 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.b76 -// CHECK:STDOUT: %.loc126_5.6 => constants.%.043 +// CHECK:STDOUT: %.loc126_5.7 => constants.%.043 // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.e7a31c.2 // CHECK:STDOUT: %impl.elem0.loc126_5.2 => constants.%Int32.Op.4dca31.1 // CHECK:STDOUT: %specific_impl_fn.loc126_5.4 => constants.%Int32.Op.4dca31.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @SubWith.loc135(constants.%Destroy.facet.099, constants.%Destroy.facet.099, constants.%facet_value.e83) { +// CHECK:STDOUT: %Result.patt.loc132_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc132_9.1 => constants.%Destroy.facet.099 +// CHECK:STDOUT: %U.patt.loc133_4.2 => constants.%U.patt.7a2 // CHECK:STDOUT: %U.loc133_4.1 => constants.%Destroy.facet.099 // CHECK:STDOUT: %U.as_type.loc134_36.1 => constants.%Int32 // CHECK:STDOUT: %SubWith.type.loc134_36.1 => constants.%SubWith.type.c81 @@ -2812,12 +3182,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.loc134_44.1 => constants.%impl.elem0.ee1 // CHECK:STDOUT: %Result.as_type.loc134_54.1 => constants.%Int32 // CHECK:STDOUT: %facet_type.loc134_38 => constants.%facet_type.0f8 -// CHECK:STDOUT: %T.loc134_4.1 => constants.%facet_value.e83 // CHECK:STDOUT: %pattern_type.loc134 => constants.%pattern_type.9624 +// CHECK:STDOUT: %T.patt.loc134_4.2 => constants.%T.patt.bd6 +// CHECK:STDOUT: %T.loc134_4.1 => constants.%facet_value.e83 // CHECK:STDOUT: %pattern_type.loc135_16 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %result.param_patt.loc135_16.2 => constants.%result.param_patt.e81 +// CHECK:STDOUT: %result.patt.loc135_16.2 => constants.%result.patt.830 // CHECK:STDOUT: %T.as_type.loc135_29.1 => constants.%Int32 // CHECK:STDOUT: %pattern_type.loc135_27 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %x.param_patt.loc135_27.2 => constants.%x.param_patt.27c +// CHECK:STDOUT: %x.patt.loc135_27.2 => constants.%x.patt.4c9 // CHECK:STDOUT: %pattern_type.loc135_33 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %y.param_patt.loc135_33.2 => constants.%y.param_patt.e0c +// CHECK:STDOUT: %y.patt.loc135_33.2 => constants.%y.patt.0a3 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc135_16 => constants.%complete_type.357 @@ -2828,18 +3205,20 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %SubWith.lookup_impl_witness.loc137 => constants.%custom_witness.4dea15.2 // CHECK:STDOUT: %SubWith.facet => constants.%SubWith.facet.3dd // CHECK:STDOUT: %SubWith.WithSelf.Op.type => constants.%SubWith.WithSelf.Op.type.ccc -// CHECK:STDOUT: %.loc137_5.5 => constants.%.237 +// CHECK:STDOUT: %.loc137_5.6 => constants.%.237 // CHECK:STDOUT: %impl.elem1.loc137_5.2 => constants.%Int32.Op.4dca31.8 // CHECK:STDOUT: %specific_impl_fn.loc137_5.3 => constants.%Int32.Op.4dca31.8 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.b76 -// CHECK:STDOUT: %.loc137_5.6 => constants.%.043 +// CHECK:STDOUT: %.loc137_5.7 => constants.%.043 // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.e7a31c.2 // CHECK:STDOUT: %impl.elem0.loc137_5.2 => constants.%Int32.Op.4dca31.1 // CHECK:STDOUT: %specific_impl_fn.loc137_5.4 => constants.%Int32.Op.4dca31.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @MulWith.loc146(constants.%Destroy.facet.099, constants.%Destroy.facet.099, constants.%facet_value.4a1) { +// CHECK:STDOUT: %Result.patt.loc143_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc143_9.1 => constants.%Destroy.facet.099 +// CHECK:STDOUT: %U.patt.loc144_4.2 => constants.%U.patt.7a2 // CHECK:STDOUT: %U.loc144_4.1 => constants.%Destroy.facet.099 // CHECK:STDOUT: %U.as_type.loc145_36.1 => constants.%Int32 // CHECK:STDOUT: %MulWith.type.loc145_36.1 => constants.%MulWith.type.eeb @@ -2853,12 +3232,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.loc145_44.1 => constants.%impl.elem0.d19 // CHECK:STDOUT: %Result.as_type.loc145_54.1 => constants.%Int32 // CHECK:STDOUT: %facet_type.loc145_38 => constants.%facet_type.cf6 -// CHECK:STDOUT: %T.loc145_4.1 => constants.%facet_value.4a1 // CHECK:STDOUT: %pattern_type.loc145 => constants.%pattern_type.08b +// CHECK:STDOUT: %T.patt.loc145_4.2 => constants.%T.patt.1f7 +// CHECK:STDOUT: %T.loc145_4.1 => constants.%facet_value.4a1 // CHECK:STDOUT: %pattern_type.loc146_16 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %result.param_patt.loc146_16.2 => constants.%result.param_patt.e81 +// CHECK:STDOUT: %result.patt.loc146_16.2 => constants.%result.patt.830 // CHECK:STDOUT: %T.as_type.loc146_29.1 => constants.%Int32 // CHECK:STDOUT: %pattern_type.loc146_27 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %x.param_patt.loc146_27.2 => constants.%x.param_patt.27c +// CHECK:STDOUT: %x.patt.loc146_27.2 => constants.%x.patt.4c9 // CHECK:STDOUT: %pattern_type.loc146_33 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %y.param_patt.loc146_33.2 => constants.%y.param_patt.e0c +// CHECK:STDOUT: %y.patt.loc146_33.2 => constants.%y.patt.0a3 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc146_16 => constants.%complete_type.357 @@ -2869,18 +3255,20 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %MulWith.lookup_impl_witness.loc148 => constants.%custom_witness.337c88.2 // CHECK:STDOUT: %MulWith.facet => constants.%MulWith.facet.4d3 // CHECK:STDOUT: %MulWith.WithSelf.Op.type => constants.%MulWith.WithSelf.Op.type.843 -// CHECK:STDOUT: %.loc148_5.5 => constants.%.8c9 +// CHECK:STDOUT: %.loc148_5.6 => constants.%.8c9 // CHECK:STDOUT: %impl.elem1.loc148_5.2 => constants.%Int32.Op.4dca31.9 // CHECK:STDOUT: %specific_impl_fn.loc148_5.3 => constants.%Int32.Op.4dca31.9 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.b76 -// CHECK:STDOUT: %.loc148_5.6 => constants.%.043 +// CHECK:STDOUT: %.loc148_5.7 => constants.%.043 // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.e7a31c.2 // CHECK:STDOUT: %impl.elem0.loc148_5.2 => constants.%Int32.Op.4dca31.1 // CHECK:STDOUT: %specific_impl_fn.loc148_5.4 => constants.%Int32.Op.4dca31.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @DivWith.loc157(constants.%Destroy.facet.099, constants.%Destroy.facet.099, constants.%facet_value.0bb) { +// CHECK:STDOUT: %Result.patt.loc154_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc154_9.1 => constants.%Destroy.facet.099 +// CHECK:STDOUT: %U.patt.loc155_4.2 => constants.%U.patt.7a2 // CHECK:STDOUT: %U.loc155_4.1 => constants.%Destroy.facet.099 // CHECK:STDOUT: %U.as_type.loc156_36.1 => constants.%Int32 // CHECK:STDOUT: %DivWith.type.loc156_36.1 => constants.%DivWith.type.fb1 @@ -2894,12 +3282,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.loc156_44.1 => constants.%impl.elem0.282 // CHECK:STDOUT: %Result.as_type.loc156_54.1 => constants.%Int32 // CHECK:STDOUT: %facet_type.loc156_38 => constants.%facet_type.639 -// CHECK:STDOUT: %T.loc156_4.1 => constants.%facet_value.0bb // CHECK:STDOUT: %pattern_type.loc156 => constants.%pattern_type.379 +// CHECK:STDOUT: %T.patt.loc156_4.2 => constants.%T.patt.2d3 +// CHECK:STDOUT: %T.loc156_4.1 => constants.%facet_value.0bb // CHECK:STDOUT: %pattern_type.loc157_16 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %result.param_patt.loc157_16.2 => constants.%result.param_patt.e81 +// CHECK:STDOUT: %result.patt.loc157_16.2 => constants.%result.patt.830 // CHECK:STDOUT: %T.as_type.loc157_29.1 => constants.%Int32 // CHECK:STDOUT: %pattern_type.loc157_27 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %x.param_patt.loc157_27.2 => constants.%x.param_patt.27c +// CHECK:STDOUT: %x.patt.loc157_27.2 => constants.%x.patt.4c9 // CHECK:STDOUT: %pattern_type.loc157_33 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %y.param_patt.loc157_33.2 => constants.%y.param_patt.e0c +// CHECK:STDOUT: %y.patt.loc157_33.2 => constants.%y.patt.0a3 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc157_16 => constants.%complete_type.357 @@ -2910,18 +3305,20 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %DivWith.lookup_impl_witness.loc159 => constants.%custom_witness.3eb227.2 // CHECK:STDOUT: %DivWith.facet => constants.%DivWith.facet.4fe // CHECK:STDOUT: %DivWith.WithSelf.Op.type => constants.%DivWith.WithSelf.Op.type.24e -// CHECK:STDOUT: %.loc159_5.5 => constants.%.450 +// CHECK:STDOUT: %.loc159_5.6 => constants.%.450 // CHECK:STDOUT: %impl.elem1.loc159_5.2 => constants.%Int32.Op.4dca31.10 // CHECK:STDOUT: %specific_impl_fn.loc159_5.3 => constants.%Int32.Op.4dca31.10 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.b76 -// CHECK:STDOUT: %.loc159_5.6 => constants.%.043 +// CHECK:STDOUT: %.loc159_5.7 => constants.%.043 // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.e7a31c.2 // CHECK:STDOUT: %impl.elem0.loc159_5.2 => constants.%Int32.Op.4dca31.1 // CHECK:STDOUT: %specific_impl_fn.loc159_5.4 => constants.%Int32.Op.4dca31.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ModWith.loc168(constants.%Destroy.facet.099, constants.%Destroy.facet.099, constants.%facet_value.081) { +// CHECK:STDOUT: %Result.patt.loc165_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc165_9.1 => constants.%Destroy.facet.099 +// CHECK:STDOUT: %U.patt.loc166_4.2 => constants.%U.patt.7a2 // CHECK:STDOUT: %U.loc166_4.1 => constants.%Destroy.facet.099 // CHECK:STDOUT: %U.as_type.loc167_36.1 => constants.%Int32 // CHECK:STDOUT: %ModWith.type.loc167_36.1 => constants.%ModWith.type.253 @@ -2935,12 +3332,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.loc167_44.1 => constants.%impl.elem0.32c // CHECK:STDOUT: %Result.as_type.loc167_54.1 => constants.%Int32 // CHECK:STDOUT: %facet_type.loc167_38 => constants.%facet_type.cac -// CHECK:STDOUT: %T.loc167_4.1 => constants.%facet_value.081 // CHECK:STDOUT: %pattern_type.loc167 => constants.%pattern_type.e4f +// CHECK:STDOUT: %T.patt.loc167_4.2 => constants.%T.patt.786 +// CHECK:STDOUT: %T.loc167_4.1 => constants.%facet_value.081 // CHECK:STDOUT: %pattern_type.loc168_16 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %result.param_patt.loc168_16.2 => constants.%result.param_patt.e81 +// CHECK:STDOUT: %result.patt.loc168_16.2 => constants.%result.patt.830 // CHECK:STDOUT: %T.as_type.loc168_29.1 => constants.%Int32 // CHECK:STDOUT: %pattern_type.loc168_27 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %x.param_patt.loc168_27.2 => constants.%x.param_patt.27c +// CHECK:STDOUT: %x.patt.loc168_27.2 => constants.%x.patt.4c9 // CHECK:STDOUT: %pattern_type.loc168_33 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %y.param_patt.loc168_33.2 => constants.%y.param_patt.e0c +// CHECK:STDOUT: %y.patt.loc168_33.2 => constants.%y.patt.0a3 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc168_16 => constants.%complete_type.357 @@ -2951,18 +3355,20 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %ModWith.lookup_impl_witness.loc170 => constants.%custom_witness.501c6d.2 // CHECK:STDOUT: %ModWith.facet => constants.%ModWith.facet.60c // CHECK:STDOUT: %ModWith.WithSelf.Op.type => constants.%ModWith.WithSelf.Op.type.bed -// CHECK:STDOUT: %.loc170_5.5 => constants.%.382 +// CHECK:STDOUT: %.loc170_5.6 => constants.%.382 // CHECK:STDOUT: %impl.elem1.loc170_5.2 => constants.%Int32.Op.4dca31.11 // CHECK:STDOUT: %specific_impl_fn.loc170_5.3 => constants.%Int32.Op.4dca31.11 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.b76 -// CHECK:STDOUT: %.loc170_5.6 => constants.%.043 +// CHECK:STDOUT: %.loc170_5.7 => constants.%.043 // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.e7a31c.2 // CHECK:STDOUT: %impl.elem0.loc170_5.2 => constants.%Int32.Op.4dca31.1 // CHECK:STDOUT: %specific_impl_fn.loc170_5.4 => constants.%Int32.Op.4dca31.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @AddWith.loc124(constants.%Destroy.facet.191, constants.%Destroy.facet.191, constants.%facet_value.aa8) { +// CHECK:STDOUT: %Result.patt.loc121_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc121_9.1 => constants.%Destroy.facet.191 +// CHECK:STDOUT: %U.patt.loc122_4.2 => constants.%U.patt.7a2 // CHECK:STDOUT: %U.loc122_4.1 => constants.%Destroy.facet.191 // CHECK:STDOUT: %U.as_type.loc123_36.1 => constants.%Int64 // CHECK:STDOUT: %AddWith.type.loc123_36.1 => constants.%AddWith.type.b5b @@ -2976,12 +3382,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.loc123_44.1 => constants.%impl.elem0.325 // CHECK:STDOUT: %Result.as_type.loc123_54.1 => constants.%Int64 // CHECK:STDOUT: %facet_type.loc123_38 => constants.%facet_type.466 -// CHECK:STDOUT: %T.loc123_4.1 => constants.%facet_value.aa8 // CHECK:STDOUT: %pattern_type.loc123 => constants.%pattern_type.a1a +// CHECK:STDOUT: %T.patt.loc123_4.2 => constants.%T.patt.7de +// CHECK:STDOUT: %T.loc123_4.1 => constants.%facet_value.aa8 // CHECK:STDOUT: %pattern_type.loc124_16 => constants.%pattern_type.4aa +// CHECK:STDOUT: %result.param_patt.loc124_16.2 => constants.%result.param_patt.1e1 +// CHECK:STDOUT: %result.patt.loc124_16.2 => constants.%result.patt.41f // CHECK:STDOUT: %T.as_type.loc124_29.1 => constants.%Int32 // CHECK:STDOUT: %pattern_type.loc124_27 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %x.param_patt.loc124_27.2 => constants.%x.param_patt.27c +// CHECK:STDOUT: %x.patt.loc124_27.2 => constants.%x.patt.4c9 // CHECK:STDOUT: %pattern_type.loc124_33 => constants.%pattern_type.4aa +// CHECK:STDOUT: %y.param_patt.loc124_33.2 => constants.%y.param_patt.a08 +// CHECK:STDOUT: %y.patt.loc124_33.2 => constants.%y.patt.63b // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc124_16 => constants.%complete_type.357 @@ -2992,18 +3405,20 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %AddWith.lookup_impl_witness.loc126 => constants.%custom_witness.68d // CHECK:STDOUT: %AddWith.facet => constants.%AddWith.facet.45c // CHECK:STDOUT: %AddWith.WithSelf.Op.type => constants.%AddWith.WithSelf.Op.type.6ad -// CHECK:STDOUT: %.loc126_5.5 => constants.%.b22 +// CHECK:STDOUT: %.loc126_5.6 => constants.%.b22 // CHECK:STDOUT: %impl.elem1.loc126_5.2 => constants.%Op.72717c.6 // CHECK:STDOUT: %specific_impl_fn.loc126_5.3 => constants.%Op.72717c.6 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.c2c -// CHECK:STDOUT: %.loc126_5.6 => constants.%.c2e +// CHECK:STDOUT: %.loc126_5.7 => constants.%.c2e // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.e7a31c.3 // CHECK:STDOUT: %impl.elem0.loc126_5.2 => constants.%Int64.Op.4dca31.1 // CHECK:STDOUT: %specific_impl_fn.loc126_5.4 => constants.%Int64.Op.4dca31.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @SubWith.loc135(constants.%Destroy.facet.191, constants.%Destroy.facet.191, constants.%facet_value.f7c) { +// CHECK:STDOUT: %Result.patt.loc132_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc132_9.1 => constants.%Destroy.facet.191 +// CHECK:STDOUT: %U.patt.loc133_4.2 => constants.%U.patt.7a2 // CHECK:STDOUT: %U.loc133_4.1 => constants.%Destroy.facet.191 // CHECK:STDOUT: %U.as_type.loc134_36.1 => constants.%Int64 // CHECK:STDOUT: %SubWith.type.loc134_36.1 => constants.%SubWith.type.a46 @@ -3017,12 +3432,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.loc134_44.1 => constants.%impl.elem0.80a // CHECK:STDOUT: %Result.as_type.loc134_54.1 => constants.%Int64 // CHECK:STDOUT: %facet_type.loc134_38 => constants.%facet_type.b42 -// CHECK:STDOUT: %T.loc134_4.1 => constants.%facet_value.f7c // CHECK:STDOUT: %pattern_type.loc134 => constants.%pattern_type.84a +// CHECK:STDOUT: %T.patt.loc134_4.2 => constants.%T.patt.726 +// CHECK:STDOUT: %T.loc134_4.1 => constants.%facet_value.f7c // CHECK:STDOUT: %pattern_type.loc135_16 => constants.%pattern_type.4aa +// CHECK:STDOUT: %result.param_patt.loc135_16.2 => constants.%result.param_patt.1e1 +// CHECK:STDOUT: %result.patt.loc135_16.2 => constants.%result.patt.41f // CHECK:STDOUT: %T.as_type.loc135_29.1 => constants.%Int32 // CHECK:STDOUT: %pattern_type.loc135_27 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %x.param_patt.loc135_27.2 => constants.%x.param_patt.27c +// CHECK:STDOUT: %x.patt.loc135_27.2 => constants.%x.patt.4c9 // CHECK:STDOUT: %pattern_type.loc135_33 => constants.%pattern_type.4aa +// CHECK:STDOUT: %y.param_patt.loc135_33.2 => constants.%y.param_patt.a08 +// CHECK:STDOUT: %y.patt.loc135_33.2 => constants.%y.patt.63b // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc135_16 => constants.%complete_type.357 @@ -3033,18 +3455,20 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %SubWith.lookup_impl_witness.loc137 => constants.%custom_witness.1fa // CHECK:STDOUT: %SubWith.facet => constants.%SubWith.facet.3c0 // CHECK:STDOUT: %SubWith.WithSelf.Op.type => constants.%SubWith.WithSelf.Op.type.bdd -// CHECK:STDOUT: %.loc137_5.5 => constants.%.c3d +// CHECK:STDOUT: %.loc137_5.6 => constants.%.c3d // CHECK:STDOUT: %impl.elem1.loc137_5.2 => constants.%Op.72717c.7 // CHECK:STDOUT: %specific_impl_fn.loc137_5.3 => constants.%Op.72717c.7 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.c2c -// CHECK:STDOUT: %.loc137_5.6 => constants.%.c2e +// CHECK:STDOUT: %.loc137_5.7 => constants.%.c2e // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.e7a31c.3 // CHECK:STDOUT: %impl.elem0.loc137_5.2 => constants.%Int64.Op.4dca31.1 // CHECK:STDOUT: %specific_impl_fn.loc137_5.4 => constants.%Int64.Op.4dca31.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @MulWith.loc146(constants.%Destroy.facet.191, constants.%Destroy.facet.191, constants.%facet_value.4d0) { +// CHECK:STDOUT: %Result.patt.loc143_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc143_9.1 => constants.%Destroy.facet.191 +// CHECK:STDOUT: %U.patt.loc144_4.2 => constants.%U.patt.7a2 // CHECK:STDOUT: %U.loc144_4.1 => constants.%Destroy.facet.191 // CHECK:STDOUT: %U.as_type.loc145_36.1 => constants.%Int64 // CHECK:STDOUT: %MulWith.type.loc145_36.1 => constants.%MulWith.type.76f @@ -3058,12 +3482,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.loc145_44.1 => constants.%impl.elem0.aad // CHECK:STDOUT: %Result.as_type.loc145_54.1 => constants.%Int64 // CHECK:STDOUT: %facet_type.loc145_38 => constants.%facet_type.5ef -// CHECK:STDOUT: %T.loc145_4.1 => constants.%facet_value.4d0 // CHECK:STDOUT: %pattern_type.loc145 => constants.%pattern_type.1fe +// CHECK:STDOUT: %T.patt.loc145_4.2 => constants.%T.patt.cb4 +// CHECK:STDOUT: %T.loc145_4.1 => constants.%facet_value.4d0 // CHECK:STDOUT: %pattern_type.loc146_16 => constants.%pattern_type.4aa +// CHECK:STDOUT: %result.param_patt.loc146_16.2 => constants.%result.param_patt.1e1 +// CHECK:STDOUT: %result.patt.loc146_16.2 => constants.%result.patt.41f // CHECK:STDOUT: %T.as_type.loc146_29.1 => constants.%Int32 // CHECK:STDOUT: %pattern_type.loc146_27 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %x.param_patt.loc146_27.2 => constants.%x.param_patt.27c +// CHECK:STDOUT: %x.patt.loc146_27.2 => constants.%x.patt.4c9 // CHECK:STDOUT: %pattern_type.loc146_33 => constants.%pattern_type.4aa +// CHECK:STDOUT: %y.param_patt.loc146_33.2 => constants.%y.param_patt.a08 +// CHECK:STDOUT: %y.patt.loc146_33.2 => constants.%y.patt.63b // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc146_16 => constants.%complete_type.357 @@ -3074,18 +3505,20 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %MulWith.lookup_impl_witness.loc148 => constants.%custom_witness.99d // CHECK:STDOUT: %MulWith.facet => constants.%MulWith.facet.dbd // CHECK:STDOUT: %MulWith.WithSelf.Op.type => constants.%MulWith.WithSelf.Op.type.cc8 -// CHECK:STDOUT: %.loc148_5.5 => constants.%.921 +// CHECK:STDOUT: %.loc148_5.6 => constants.%.921 // CHECK:STDOUT: %impl.elem1.loc148_5.2 => constants.%Op.72717c.8 // CHECK:STDOUT: %specific_impl_fn.loc148_5.3 => constants.%Op.72717c.8 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.c2c -// CHECK:STDOUT: %.loc148_5.6 => constants.%.c2e +// CHECK:STDOUT: %.loc148_5.7 => constants.%.c2e // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.e7a31c.3 // CHECK:STDOUT: %impl.elem0.loc148_5.2 => constants.%Int64.Op.4dca31.1 // CHECK:STDOUT: %specific_impl_fn.loc148_5.4 => constants.%Int64.Op.4dca31.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @DivWith.loc157(constants.%Destroy.facet.191, constants.%Destroy.facet.191, constants.%facet_value.7d4) { +// CHECK:STDOUT: %Result.patt.loc154_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc154_9.1 => constants.%Destroy.facet.191 +// CHECK:STDOUT: %U.patt.loc155_4.2 => constants.%U.patt.7a2 // CHECK:STDOUT: %U.loc155_4.1 => constants.%Destroy.facet.191 // CHECK:STDOUT: %U.as_type.loc156_36.1 => constants.%Int64 // CHECK:STDOUT: %DivWith.type.loc156_36.1 => constants.%DivWith.type.095 @@ -3099,12 +3532,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.loc156_44.1 => constants.%impl.elem0.a9d // CHECK:STDOUT: %Result.as_type.loc156_54.1 => constants.%Int64 // CHECK:STDOUT: %facet_type.loc156_38 => constants.%facet_type.be3 -// CHECK:STDOUT: %T.loc156_4.1 => constants.%facet_value.7d4 // CHECK:STDOUT: %pattern_type.loc156 => constants.%pattern_type.2d9 +// CHECK:STDOUT: %T.patt.loc156_4.2 => constants.%T.patt.219 +// CHECK:STDOUT: %T.loc156_4.1 => constants.%facet_value.7d4 // CHECK:STDOUT: %pattern_type.loc157_16 => constants.%pattern_type.4aa +// CHECK:STDOUT: %result.param_patt.loc157_16.2 => constants.%result.param_patt.1e1 +// CHECK:STDOUT: %result.patt.loc157_16.2 => constants.%result.patt.41f // CHECK:STDOUT: %T.as_type.loc157_29.1 => constants.%Int32 // CHECK:STDOUT: %pattern_type.loc157_27 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %x.param_patt.loc157_27.2 => constants.%x.param_patt.27c +// CHECK:STDOUT: %x.patt.loc157_27.2 => constants.%x.patt.4c9 // CHECK:STDOUT: %pattern_type.loc157_33 => constants.%pattern_type.4aa +// CHECK:STDOUT: %y.param_patt.loc157_33.2 => constants.%y.param_patt.a08 +// CHECK:STDOUT: %y.patt.loc157_33.2 => constants.%y.patt.63b // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc157_16 => constants.%complete_type.357 @@ -3115,18 +3555,20 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %DivWith.lookup_impl_witness.loc159 => constants.%custom_witness.a8f // CHECK:STDOUT: %DivWith.facet => constants.%DivWith.facet.91e // CHECK:STDOUT: %DivWith.WithSelf.Op.type => constants.%DivWith.WithSelf.Op.type.dd6 -// CHECK:STDOUT: %.loc159_5.5 => constants.%.26f +// CHECK:STDOUT: %.loc159_5.6 => constants.%.26f // CHECK:STDOUT: %impl.elem1.loc159_5.2 => constants.%Op.72717c.9 // CHECK:STDOUT: %specific_impl_fn.loc159_5.3 => constants.%Op.72717c.9 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.c2c -// CHECK:STDOUT: %.loc159_5.6 => constants.%.c2e +// CHECK:STDOUT: %.loc159_5.7 => constants.%.c2e // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.e7a31c.3 // CHECK:STDOUT: %impl.elem0.loc159_5.2 => constants.%Int64.Op.4dca31.1 // CHECK:STDOUT: %specific_impl_fn.loc159_5.4 => constants.%Int64.Op.4dca31.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ModWith.loc168(constants.%Destroy.facet.191, constants.%Destroy.facet.191, constants.%facet_value.774) { +// CHECK:STDOUT: %Result.patt.loc165_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc165_9.1 => constants.%Destroy.facet.191 +// CHECK:STDOUT: %U.patt.loc166_4.2 => constants.%U.patt.7a2 // CHECK:STDOUT: %U.loc166_4.1 => constants.%Destroy.facet.191 // CHECK:STDOUT: %U.as_type.loc167_36.1 => constants.%Int64 // CHECK:STDOUT: %ModWith.type.loc167_36.1 => constants.%ModWith.type.204 @@ -3140,12 +3582,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.loc167_44.1 => constants.%impl.elem0.5f0 // CHECK:STDOUT: %Result.as_type.loc167_54.1 => constants.%Int64 // CHECK:STDOUT: %facet_type.loc167_38 => constants.%facet_type.74d -// CHECK:STDOUT: %T.loc167_4.1 => constants.%facet_value.774 // CHECK:STDOUT: %pattern_type.loc167 => constants.%pattern_type.41c +// CHECK:STDOUT: %T.patt.loc167_4.2 => constants.%T.patt.078 +// CHECK:STDOUT: %T.loc167_4.1 => constants.%facet_value.774 // CHECK:STDOUT: %pattern_type.loc168_16 => constants.%pattern_type.4aa +// CHECK:STDOUT: %result.param_patt.loc168_16.2 => constants.%result.param_patt.1e1 +// CHECK:STDOUT: %result.patt.loc168_16.2 => constants.%result.patt.41f // CHECK:STDOUT: %T.as_type.loc168_29.1 => constants.%Int32 // CHECK:STDOUT: %pattern_type.loc168_27 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %x.param_patt.loc168_27.2 => constants.%x.param_patt.27c +// CHECK:STDOUT: %x.patt.loc168_27.2 => constants.%x.patt.4c9 // CHECK:STDOUT: %pattern_type.loc168_33 => constants.%pattern_type.4aa +// CHECK:STDOUT: %y.param_patt.loc168_33.2 => constants.%y.param_patt.a08 +// CHECK:STDOUT: %y.patt.loc168_33.2 => constants.%y.patt.63b // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc168_16 => constants.%complete_type.357 @@ -3156,18 +3605,20 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %ModWith.lookup_impl_witness.loc170 => constants.%custom_witness.972 // CHECK:STDOUT: %ModWith.facet => constants.%ModWith.facet.c38 // CHECK:STDOUT: %ModWith.WithSelf.Op.type => constants.%ModWith.WithSelf.Op.type.663 -// CHECK:STDOUT: %.loc170_5.5 => constants.%.ed0 +// CHECK:STDOUT: %.loc170_5.6 => constants.%.ed0 // CHECK:STDOUT: %impl.elem1.loc170_5.2 => constants.%Op.72717c.10 // CHECK:STDOUT: %specific_impl_fn.loc170_5.3 => constants.%Op.72717c.10 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.c2c -// CHECK:STDOUT: %.loc170_5.6 => constants.%.c2e +// CHECK:STDOUT: %.loc170_5.7 => constants.%.c2e // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.e7a31c.3 // CHECK:STDOUT: %impl.elem0.loc170_5.2 => constants.%Int64.Op.4dca31.1 // CHECK:STDOUT: %specific_impl_fn.loc170_5.4 => constants.%Int64.Op.4dca31.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @AddWith.loc124(constants.%Destroy.facet.191, constants.%Destroy.facet.099, constants.%facet_value.7d0) { +// CHECK:STDOUT: %Result.patt.loc121_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc121_9.1 => constants.%Destroy.facet.191 +// CHECK:STDOUT: %U.patt.loc122_4.2 => constants.%U.patt.7a2 // CHECK:STDOUT: %U.loc122_4.1 => constants.%Destroy.facet.099 // CHECK:STDOUT: %U.as_type.loc123_36.1 => constants.%Int32 // CHECK:STDOUT: %AddWith.type.loc123_36.1 => constants.%AddWith.type.c71 @@ -3181,12 +3632,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.loc123_44.1 => constants.%impl.elem0.899 // CHECK:STDOUT: %Result.as_type.loc123_54.1 => constants.%Int64 // CHECK:STDOUT: %facet_type.loc123_38 => constants.%facet_type.fdd -// CHECK:STDOUT: %T.loc123_4.1 => constants.%facet_value.7d0 // CHECK:STDOUT: %pattern_type.loc123 => constants.%pattern_type.5b4 +// CHECK:STDOUT: %T.patt.loc123_4.2 => constants.%T.patt.688 +// CHECK:STDOUT: %T.loc123_4.1 => constants.%facet_value.7d0 // CHECK:STDOUT: %pattern_type.loc124_16 => constants.%pattern_type.4aa +// CHECK:STDOUT: %result.param_patt.loc124_16.2 => constants.%result.param_patt.1e1 +// CHECK:STDOUT: %result.patt.loc124_16.2 => constants.%result.patt.41f // CHECK:STDOUT: %T.as_type.loc124_29.1 => constants.%Int64 // CHECK:STDOUT: %pattern_type.loc124_27 => constants.%pattern_type.4aa +// CHECK:STDOUT: %x.param_patt.loc124_27.2 => constants.%x.param_patt.e68 +// CHECK:STDOUT: %x.patt.loc124_27.2 => constants.%x.patt.52a // CHECK:STDOUT: %pattern_type.loc124_33 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %y.param_patt.loc124_33.2 => constants.%y.param_patt.e0c +// CHECK:STDOUT: %y.patt.loc124_33.2 => constants.%y.patt.0a3 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc124_16 => constants.%complete_type.357 @@ -3197,18 +3655,20 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %AddWith.lookup_impl_witness.loc126 => constants.%custom_witness.98f // CHECK:STDOUT: %AddWith.facet => constants.%AddWith.facet.3de // CHECK:STDOUT: %AddWith.WithSelf.Op.type => constants.%AddWith.WithSelf.Op.type.1c0 -// CHECK:STDOUT: %.loc126_5.5 => constants.%.df7 +// CHECK:STDOUT: %.loc126_5.6 => constants.%.df7 // CHECK:STDOUT: %impl.elem1.loc126_5.2 => constants.%Op.72717c.11 // CHECK:STDOUT: %specific_impl_fn.loc126_5.3 => constants.%Op.72717c.11 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.c2c -// CHECK:STDOUT: %.loc126_5.6 => constants.%.c2e +// CHECK:STDOUT: %.loc126_5.7 => constants.%.c2e // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.e7a31c.3 // CHECK:STDOUT: %impl.elem0.loc126_5.2 => constants.%Int64.Op.4dca31.1 // CHECK:STDOUT: %specific_impl_fn.loc126_5.4 => constants.%Int64.Op.4dca31.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @SubWith.loc135(constants.%Destroy.facet.191, constants.%Destroy.facet.099, constants.%facet_value.51b) { +// CHECK:STDOUT: %Result.patt.loc132_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc132_9.1 => constants.%Destroy.facet.191 +// CHECK:STDOUT: %U.patt.loc133_4.2 => constants.%U.patt.7a2 // CHECK:STDOUT: %U.loc133_4.1 => constants.%Destroy.facet.099 // CHECK:STDOUT: %U.as_type.loc134_36.1 => constants.%Int32 // CHECK:STDOUT: %SubWith.type.loc134_36.1 => constants.%SubWith.type.c81 @@ -3222,12 +3682,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.loc134_44.1 => constants.%impl.elem0.ee1 // CHECK:STDOUT: %Result.as_type.loc134_54.1 => constants.%Int64 // CHECK:STDOUT: %facet_type.loc134_38 => constants.%facet_type.2c4 -// CHECK:STDOUT: %T.loc134_4.1 => constants.%facet_value.51b // CHECK:STDOUT: %pattern_type.loc134 => constants.%pattern_type.515 +// CHECK:STDOUT: %T.patt.loc134_4.2 => constants.%T.patt.080 +// CHECK:STDOUT: %T.loc134_4.1 => constants.%facet_value.51b // CHECK:STDOUT: %pattern_type.loc135_16 => constants.%pattern_type.4aa +// CHECK:STDOUT: %result.param_patt.loc135_16.2 => constants.%result.param_patt.1e1 +// CHECK:STDOUT: %result.patt.loc135_16.2 => constants.%result.patt.41f // CHECK:STDOUT: %T.as_type.loc135_29.1 => constants.%Int64 // CHECK:STDOUT: %pattern_type.loc135_27 => constants.%pattern_type.4aa +// CHECK:STDOUT: %x.param_patt.loc135_27.2 => constants.%x.param_patt.e68 +// CHECK:STDOUT: %x.patt.loc135_27.2 => constants.%x.patt.52a // CHECK:STDOUT: %pattern_type.loc135_33 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %y.param_patt.loc135_33.2 => constants.%y.param_patt.e0c +// CHECK:STDOUT: %y.patt.loc135_33.2 => constants.%y.patt.0a3 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc135_16 => constants.%complete_type.357 @@ -3238,18 +3705,20 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %SubWith.lookup_impl_witness.loc137 => constants.%custom_witness.5c3 // CHECK:STDOUT: %SubWith.facet => constants.%SubWith.facet.320 // CHECK:STDOUT: %SubWith.WithSelf.Op.type => constants.%SubWith.WithSelf.Op.type.8fd -// CHECK:STDOUT: %.loc137_5.5 => constants.%.ad9 +// CHECK:STDOUT: %.loc137_5.6 => constants.%.ad9 // CHECK:STDOUT: %impl.elem1.loc137_5.2 => constants.%Op.72717c.12 // CHECK:STDOUT: %specific_impl_fn.loc137_5.3 => constants.%Op.72717c.12 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.c2c -// CHECK:STDOUT: %.loc137_5.6 => constants.%.c2e +// CHECK:STDOUT: %.loc137_5.7 => constants.%.c2e // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.e7a31c.3 // CHECK:STDOUT: %impl.elem0.loc137_5.2 => constants.%Int64.Op.4dca31.1 // CHECK:STDOUT: %specific_impl_fn.loc137_5.4 => constants.%Int64.Op.4dca31.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @MulWith.loc146(constants.%Destroy.facet.191, constants.%Destroy.facet.099, constants.%facet_value.738) { +// CHECK:STDOUT: %Result.patt.loc143_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc143_9.1 => constants.%Destroy.facet.191 +// CHECK:STDOUT: %U.patt.loc144_4.2 => constants.%U.patt.7a2 // CHECK:STDOUT: %U.loc144_4.1 => constants.%Destroy.facet.099 // CHECK:STDOUT: %U.as_type.loc145_36.1 => constants.%Int32 // CHECK:STDOUT: %MulWith.type.loc145_36.1 => constants.%MulWith.type.eeb @@ -3263,12 +3732,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.loc145_44.1 => constants.%impl.elem0.d19 // CHECK:STDOUT: %Result.as_type.loc145_54.1 => constants.%Int64 // CHECK:STDOUT: %facet_type.loc145_38 => constants.%facet_type.99c -// CHECK:STDOUT: %T.loc145_4.1 => constants.%facet_value.738 // CHECK:STDOUT: %pattern_type.loc145 => constants.%pattern_type.bb6 +// CHECK:STDOUT: %T.patt.loc145_4.2 => constants.%T.patt.03e +// CHECK:STDOUT: %T.loc145_4.1 => constants.%facet_value.738 // CHECK:STDOUT: %pattern_type.loc146_16 => constants.%pattern_type.4aa +// CHECK:STDOUT: %result.param_patt.loc146_16.2 => constants.%result.param_patt.1e1 +// CHECK:STDOUT: %result.patt.loc146_16.2 => constants.%result.patt.41f // CHECK:STDOUT: %T.as_type.loc146_29.1 => constants.%Int64 // CHECK:STDOUT: %pattern_type.loc146_27 => constants.%pattern_type.4aa +// CHECK:STDOUT: %x.param_patt.loc146_27.2 => constants.%x.param_patt.e68 +// CHECK:STDOUT: %x.patt.loc146_27.2 => constants.%x.patt.52a // CHECK:STDOUT: %pattern_type.loc146_33 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %y.param_patt.loc146_33.2 => constants.%y.param_patt.e0c +// CHECK:STDOUT: %y.patt.loc146_33.2 => constants.%y.patt.0a3 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc146_16 => constants.%complete_type.357 @@ -3279,18 +3755,20 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %MulWith.lookup_impl_witness.loc148 => constants.%custom_witness.ac0 // CHECK:STDOUT: %MulWith.facet => constants.%MulWith.facet.d72 // CHECK:STDOUT: %MulWith.WithSelf.Op.type => constants.%MulWith.WithSelf.Op.type.10e -// CHECK:STDOUT: %.loc148_5.5 => constants.%.be6 +// CHECK:STDOUT: %.loc148_5.6 => constants.%.be6 // CHECK:STDOUT: %impl.elem1.loc148_5.2 => constants.%Op.72717c.13 // CHECK:STDOUT: %specific_impl_fn.loc148_5.3 => constants.%Op.72717c.13 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.c2c -// CHECK:STDOUT: %.loc148_5.6 => constants.%.c2e +// CHECK:STDOUT: %.loc148_5.7 => constants.%.c2e // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.e7a31c.3 // CHECK:STDOUT: %impl.elem0.loc148_5.2 => constants.%Int64.Op.4dca31.1 // CHECK:STDOUT: %specific_impl_fn.loc148_5.4 => constants.%Int64.Op.4dca31.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @DivWith.loc157(constants.%Destroy.facet.191, constants.%Destroy.facet.099, constants.%facet_value.c2b) { +// CHECK:STDOUT: %Result.patt.loc154_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc154_9.1 => constants.%Destroy.facet.191 +// CHECK:STDOUT: %U.patt.loc155_4.2 => constants.%U.patt.7a2 // CHECK:STDOUT: %U.loc155_4.1 => constants.%Destroy.facet.099 // CHECK:STDOUT: %U.as_type.loc156_36.1 => constants.%Int32 // CHECK:STDOUT: %DivWith.type.loc156_36.1 => constants.%DivWith.type.fb1 @@ -3304,12 +3782,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.loc156_44.1 => constants.%impl.elem0.282 // CHECK:STDOUT: %Result.as_type.loc156_54.1 => constants.%Int64 // CHECK:STDOUT: %facet_type.loc156_38 => constants.%facet_type.7ce -// CHECK:STDOUT: %T.loc156_4.1 => constants.%facet_value.c2b // CHECK:STDOUT: %pattern_type.loc156 => constants.%pattern_type.59a +// CHECK:STDOUT: %T.patt.loc156_4.2 => constants.%T.patt.161 +// CHECK:STDOUT: %T.loc156_4.1 => constants.%facet_value.c2b // CHECK:STDOUT: %pattern_type.loc157_16 => constants.%pattern_type.4aa +// CHECK:STDOUT: %result.param_patt.loc157_16.2 => constants.%result.param_patt.1e1 +// CHECK:STDOUT: %result.patt.loc157_16.2 => constants.%result.patt.41f // CHECK:STDOUT: %T.as_type.loc157_29.1 => constants.%Int64 // CHECK:STDOUT: %pattern_type.loc157_27 => constants.%pattern_type.4aa +// CHECK:STDOUT: %x.param_patt.loc157_27.2 => constants.%x.param_patt.e68 +// CHECK:STDOUT: %x.patt.loc157_27.2 => constants.%x.patt.52a // CHECK:STDOUT: %pattern_type.loc157_33 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %y.param_patt.loc157_33.2 => constants.%y.param_patt.e0c +// CHECK:STDOUT: %y.patt.loc157_33.2 => constants.%y.patt.0a3 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc157_16 => constants.%complete_type.357 @@ -3320,18 +3805,20 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %DivWith.lookup_impl_witness.loc159 => constants.%custom_witness.c98 // CHECK:STDOUT: %DivWith.facet => constants.%DivWith.facet.4d9 // CHECK:STDOUT: %DivWith.WithSelf.Op.type => constants.%DivWith.WithSelf.Op.type.354 -// CHECK:STDOUT: %.loc159_5.5 => constants.%.436 +// CHECK:STDOUT: %.loc159_5.6 => constants.%.436 // CHECK:STDOUT: %impl.elem1.loc159_5.2 => constants.%Op.72717c.14 // CHECK:STDOUT: %specific_impl_fn.loc159_5.3 => constants.%Op.72717c.14 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.c2c -// CHECK:STDOUT: %.loc159_5.6 => constants.%.c2e +// CHECK:STDOUT: %.loc159_5.7 => constants.%.c2e // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.e7a31c.3 // CHECK:STDOUT: %impl.elem0.loc159_5.2 => constants.%Int64.Op.4dca31.1 // CHECK:STDOUT: %specific_impl_fn.loc159_5.4 => constants.%Int64.Op.4dca31.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ModWith.loc168(constants.%Destroy.facet.191, constants.%Destroy.facet.099, constants.%facet_value.606) { +// CHECK:STDOUT: %Result.patt.loc165_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc165_9.1 => constants.%Destroy.facet.191 +// CHECK:STDOUT: %U.patt.loc166_4.2 => constants.%U.patt.7a2 // CHECK:STDOUT: %U.loc166_4.1 => constants.%Destroy.facet.099 // CHECK:STDOUT: %U.as_type.loc167_36.1 => constants.%Int32 // CHECK:STDOUT: %ModWith.type.loc167_36.1 => constants.%ModWith.type.253 @@ -3345,12 +3832,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %impl.elem0.loc167_44.1 => constants.%impl.elem0.32c // CHECK:STDOUT: %Result.as_type.loc167_54.1 => constants.%Int64 // CHECK:STDOUT: %facet_type.loc167_38 => constants.%facet_type.c2e -// CHECK:STDOUT: %T.loc167_4.1 => constants.%facet_value.606 // CHECK:STDOUT: %pattern_type.loc167 => constants.%pattern_type.af40 +// CHECK:STDOUT: %T.patt.loc167_4.2 => constants.%T.patt.cb9 +// CHECK:STDOUT: %T.loc167_4.1 => constants.%facet_value.606 // CHECK:STDOUT: %pattern_type.loc168_16 => constants.%pattern_type.4aa +// CHECK:STDOUT: %result.param_patt.loc168_16.2 => constants.%result.param_patt.1e1 +// CHECK:STDOUT: %result.patt.loc168_16.2 => constants.%result.patt.41f // CHECK:STDOUT: %T.as_type.loc168_29.1 => constants.%Int64 // CHECK:STDOUT: %pattern_type.loc168_27 => constants.%pattern_type.4aa +// CHECK:STDOUT: %x.param_patt.loc168_27.2 => constants.%x.param_patt.e68 +// CHECK:STDOUT: %x.patt.loc168_27.2 => constants.%x.patt.52a // CHECK:STDOUT: %pattern_type.loc168_33 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %y.param_patt.loc168_33.2 => constants.%y.param_patt.e0c +// CHECK:STDOUT: %y.patt.loc168_33.2 => constants.%y.patt.0a3 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc168_16 => constants.%complete_type.357 @@ -3361,74 +3855,110 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: %ModWith.lookup_impl_witness.loc170 => constants.%custom_witness.e66 // CHECK:STDOUT: %ModWith.facet => constants.%ModWith.facet.ca3 // CHECK:STDOUT: %ModWith.WithSelf.Op.type => constants.%ModWith.WithSelf.Op.type.dcc -// CHECK:STDOUT: %.loc170_5.5 => constants.%.66e6 +// CHECK:STDOUT: %.loc170_5.6 => constants.%.66e6 // CHECK:STDOUT: %impl.elem1.loc170_5.2 => constants.%Op.72717c.15 // CHECK:STDOUT: %specific_impl_fn.loc170_5.3 => constants.%Op.72717c.15 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.c2c -// CHECK:STDOUT: %.loc170_5.6 => constants.%.c2e +// CHECK:STDOUT: %.loc170_5.7 => constants.%.c2e // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.e7a31c.3 // CHECK:STDOUT: %impl.elem0.loc170_5.2 => constants.%Int64.Op.4dca31.1 // CHECK:STDOUT: %specific_impl_fn.loc170_5.4 => constants.%Int64.Op.4dca31.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @AddAssignWith.loc225(constants.%U.67d, constants.%T.792) { +// CHECK:STDOUT: %U.patt.loc225_19.2 => constants.%U.patt.d47 // CHECK:STDOUT: %U.loc225_19.1 => constants.%U.67d // CHECK:STDOUT: %AddAssignWith.type.loc225_52.1 => constants.%AddAssignWith.type.2c8890.2 -// CHECK:STDOUT: %T.loc225_29.1 => constants.%T.792 // CHECK:STDOUT: %pattern_type.loc225_29 => constants.%pattern_type.82d +// CHECK:STDOUT: %T.patt.loc225_29.2 => constants.%T.patt.a22 +// CHECK:STDOUT: %T.loc225_29.1 => constants.%T.792 // CHECK:STDOUT: %T.as_type.loc225_62.1 => constants.%T.as_type.50c // CHECK:STDOUT: %pattern_type.loc225_60 => constants.%pattern_type.643306.2 +// CHECK:STDOUT: %x.patt.loc225_60.2 => constants.%x.patt.227 +// CHECK:STDOUT: %x.param_patt.loc225_55.2 => constants.%x.param_patt.343 // CHECK:STDOUT: %pattern_type.loc225_66 => constants.%pattern_type.51d1c4.4 +// CHECK:STDOUT: %y.param_patt.loc225_66.2 => constants.%y.param_patt.be3 +// CHECK:STDOUT: %y.patt.loc225_66.2 => constants.%y.patt.b85 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @SubAssignWith.loc231(constants.%U.67d, constants.%T.f6c) { +// CHECK:STDOUT: %U.patt.loc231_19.2 => constants.%U.patt.d47 // CHECK:STDOUT: %U.loc231_19.1 => constants.%U.67d // CHECK:STDOUT: %SubAssignWith.type.loc231_52.1 => constants.%SubAssignWith.type.7e53cf.2 -// CHECK:STDOUT: %T.loc231_29.1 => constants.%T.f6c // CHECK:STDOUT: %pattern_type.loc231_29 => constants.%pattern_type.260 +// CHECK:STDOUT: %T.patt.loc231_29.2 => constants.%T.patt.f45 +// CHECK:STDOUT: %T.loc231_29.1 => constants.%T.f6c // CHECK:STDOUT: %T.as_type.loc231_62.1 => constants.%T.as_type.3ff // CHECK:STDOUT: %pattern_type.loc231_60 => constants.%pattern_type.f08ed5.2 +// CHECK:STDOUT: %x.patt.loc231_60.2 => constants.%x.patt.95a +// CHECK:STDOUT: %x.param_patt.loc231_55.2 => constants.%x.param_patt.a45 // CHECK:STDOUT: %pattern_type.loc231_66 => constants.%pattern_type.51d1c4.4 +// CHECK:STDOUT: %y.param_patt.loc231_66.2 => constants.%y.param_patt.be3 +// CHECK:STDOUT: %y.patt.loc231_66.2 => constants.%y.patt.b85 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @MulAssignWith.loc237(constants.%U.67d, constants.%T.64d) { +// CHECK:STDOUT: %U.patt.loc237_19.2 => constants.%U.patt.d47 // CHECK:STDOUT: %U.loc237_19.1 => constants.%U.67d // CHECK:STDOUT: %MulAssignWith.type.loc237_52.1 => constants.%MulAssignWith.type.3a0e4d.2 -// CHECK:STDOUT: %T.loc237_29.1 => constants.%T.64d // CHECK:STDOUT: %pattern_type.loc237_29 => constants.%pattern_type.8c2 +// CHECK:STDOUT: %T.patt.loc237_29.2 => constants.%T.patt.db5 +// CHECK:STDOUT: %T.loc237_29.1 => constants.%T.64d // CHECK:STDOUT: %T.as_type.loc237_62.1 => constants.%T.as_type.1de // CHECK:STDOUT: %pattern_type.loc237_60 => constants.%pattern_type.8bf366.2 +// CHECK:STDOUT: %x.patt.loc237_60.2 => constants.%x.patt.4e9 +// CHECK:STDOUT: %x.param_patt.loc237_55.2 => constants.%x.param_patt.6c8 // CHECK:STDOUT: %pattern_type.loc237_66 => constants.%pattern_type.51d1c4.4 +// CHECK:STDOUT: %y.param_patt.loc237_66.2 => constants.%y.param_patt.be3 +// CHECK:STDOUT: %y.patt.loc237_66.2 => constants.%y.patt.b85 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @DivAssignWith.loc243(constants.%U.67d, constants.%T.c33) { +// CHECK:STDOUT: %U.patt.loc243_19.2 => constants.%U.patt.d47 // CHECK:STDOUT: %U.loc243_19.1 => constants.%U.67d // CHECK:STDOUT: %DivAssignWith.type.loc243_52.1 => constants.%DivAssignWith.type.7e58ca.2 -// CHECK:STDOUT: %T.loc243_29.1 => constants.%T.c33 // CHECK:STDOUT: %pattern_type.loc243_29 => constants.%pattern_type.f74 +// CHECK:STDOUT: %T.patt.loc243_29.2 => constants.%T.patt.9a5 +// CHECK:STDOUT: %T.loc243_29.1 => constants.%T.c33 // CHECK:STDOUT: %T.as_type.loc243_62.1 => constants.%T.as_type.e57 // CHECK:STDOUT: %pattern_type.loc243_60 => constants.%pattern_type.da303b.2 +// CHECK:STDOUT: %x.patt.loc243_60.2 => constants.%x.patt.cf6 +// CHECK:STDOUT: %x.param_patt.loc243_55.2 => constants.%x.param_patt.660 // CHECK:STDOUT: %pattern_type.loc243_66 => constants.%pattern_type.51d1c4.4 +// CHECK:STDOUT: %y.param_patt.loc243_66.2 => constants.%y.param_patt.be3 +// CHECK:STDOUT: %y.patt.loc243_66.2 => constants.%y.patt.b85 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ModAssignWith.loc249(constants.%U.67d, constants.%T.bca) { +// CHECK:STDOUT: %U.patt.loc249_19.2 => constants.%U.patt.d47 // CHECK:STDOUT: %U.loc249_19.1 => constants.%U.67d // CHECK:STDOUT: %ModAssignWith.type.loc249_52.1 => constants.%ModAssignWith.type.778d68.2 -// CHECK:STDOUT: %T.loc249_29.1 => constants.%T.bca // CHECK:STDOUT: %pattern_type.loc249_29 => constants.%pattern_type.fb8 +// CHECK:STDOUT: %T.patt.loc249_29.2 => constants.%T.patt.c29 +// CHECK:STDOUT: %T.loc249_29.1 => constants.%T.bca // CHECK:STDOUT: %T.as_type.loc249_62.1 => constants.%T.as_type.ce6 // CHECK:STDOUT: %pattern_type.loc249_60 => constants.%pattern_type.1d5f30.2 +// CHECK:STDOUT: %x.patt.loc249_60.2 => constants.%x.patt.fa4 +// CHECK:STDOUT: %x.param_patt.loc249_55.2 => constants.%x.param_patt.749 // CHECK:STDOUT: %pattern_type.loc249_66 => constants.%pattern_type.51d1c4.4 +// CHECK:STDOUT: %y.param_patt.loc249_66.2 => constants.%y.param_patt.be3 +// CHECK:STDOUT: %y.patt.loc249_66.2 => constants.%y.patt.b85 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @AddAssignWith.loc225(constants.%i16, constants.%AddAssignWith.facet.e34) { +// CHECK:STDOUT: %U.patt.loc225_19.2 => constants.%U.patt.d47 // CHECK:STDOUT: %U.loc225_19.1 => constants.%i16 // CHECK:STDOUT: %AddAssignWith.type.loc225_52.1 => constants.%AddAssignWith.type.2a0 -// CHECK:STDOUT: %T.loc225_29.1 => constants.%AddAssignWith.facet.e34 // CHECK:STDOUT: %pattern_type.loc225_29 => constants.%pattern_type.b256 +// CHECK:STDOUT: %T.patt.loc225_29.2 => constants.%T.patt.d2a +// CHECK:STDOUT: %T.loc225_29.1 => constants.%AddAssignWith.facet.e34 // CHECK:STDOUT: %T.as_type.loc225_62.1 => constants.%Int16 // CHECK:STDOUT: %pattern_type.loc225_60 => constants.%pattern_type.785 +// CHECK:STDOUT: %x.patt.loc225_60.2 => constants.%x.patt.49e +// CHECK:STDOUT: %x.param_patt.loc225_55.2 => constants.%x.param_patt.69a // CHECK:STDOUT: %pattern_type.loc225_66 => constants.%pattern_type.203 +// CHECK:STDOUT: %y.param_patt.loc225_66.2 => constants.%y.param_patt.4b4 +// CHECK:STDOUT: %y.patt.loc225_66.2 => constants.%y.patt.dd3 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc225_55 => constants.%complete_type.357 @@ -3444,13 +3974,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @SubAssignWith.loc231(constants.%i16, constants.%SubAssignWith.facet.a52) { +// CHECK:STDOUT: %U.patt.loc231_19.2 => constants.%U.patt.d47 // CHECK:STDOUT: %U.loc231_19.1 => constants.%i16 // CHECK:STDOUT: %SubAssignWith.type.loc231_52.1 => constants.%SubAssignWith.type.e8b -// CHECK:STDOUT: %T.loc231_29.1 => constants.%SubAssignWith.facet.a52 // CHECK:STDOUT: %pattern_type.loc231_29 => constants.%pattern_type.c22 +// CHECK:STDOUT: %T.patt.loc231_29.2 => constants.%T.patt.0f1 +// CHECK:STDOUT: %T.loc231_29.1 => constants.%SubAssignWith.facet.a52 // CHECK:STDOUT: %T.as_type.loc231_62.1 => constants.%Int16 // CHECK:STDOUT: %pattern_type.loc231_60 => constants.%pattern_type.785 +// CHECK:STDOUT: %x.patt.loc231_60.2 => constants.%x.patt.49e +// CHECK:STDOUT: %x.param_patt.loc231_55.2 => constants.%x.param_patt.69a // CHECK:STDOUT: %pattern_type.loc231_66 => constants.%pattern_type.203 +// CHECK:STDOUT: %y.param_patt.loc231_66.2 => constants.%y.param_patt.4b4 +// CHECK:STDOUT: %y.patt.loc231_66.2 => constants.%y.patt.dd3 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc231_55 => constants.%complete_type.357 @@ -3466,13 +4002,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @MulAssignWith.loc237(constants.%i16, constants.%MulAssignWith.facet.201) { +// CHECK:STDOUT: %U.patt.loc237_19.2 => constants.%U.patt.d47 // CHECK:STDOUT: %U.loc237_19.1 => constants.%i16 // CHECK:STDOUT: %MulAssignWith.type.loc237_52.1 => constants.%MulAssignWith.type.7d4 -// CHECK:STDOUT: %T.loc237_29.1 => constants.%MulAssignWith.facet.201 // CHECK:STDOUT: %pattern_type.loc237_29 => constants.%pattern_type.a24 +// CHECK:STDOUT: %T.patt.loc237_29.2 => constants.%T.patt.f71 +// CHECK:STDOUT: %T.loc237_29.1 => constants.%MulAssignWith.facet.201 // CHECK:STDOUT: %T.as_type.loc237_62.1 => constants.%Int16 // CHECK:STDOUT: %pattern_type.loc237_60 => constants.%pattern_type.785 +// CHECK:STDOUT: %x.patt.loc237_60.2 => constants.%x.patt.49e +// CHECK:STDOUT: %x.param_patt.loc237_55.2 => constants.%x.param_patt.69a // CHECK:STDOUT: %pattern_type.loc237_66 => constants.%pattern_type.203 +// CHECK:STDOUT: %y.param_patt.loc237_66.2 => constants.%y.param_patt.4b4 +// CHECK:STDOUT: %y.patt.loc237_66.2 => constants.%y.patt.dd3 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc237_55 => constants.%complete_type.357 @@ -3488,13 +4030,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @DivAssignWith.loc243(constants.%i16, constants.%DivAssignWith.facet.a72) { +// CHECK:STDOUT: %U.patt.loc243_19.2 => constants.%U.patt.d47 // CHECK:STDOUT: %U.loc243_19.1 => constants.%i16 // CHECK:STDOUT: %DivAssignWith.type.loc243_52.1 => constants.%DivAssignWith.type.081 -// CHECK:STDOUT: %T.loc243_29.1 => constants.%DivAssignWith.facet.a72 // CHECK:STDOUT: %pattern_type.loc243_29 => constants.%pattern_type.c97 +// CHECK:STDOUT: %T.patt.loc243_29.2 => constants.%T.patt.35e +// CHECK:STDOUT: %T.loc243_29.1 => constants.%DivAssignWith.facet.a72 // CHECK:STDOUT: %T.as_type.loc243_62.1 => constants.%Int16 // CHECK:STDOUT: %pattern_type.loc243_60 => constants.%pattern_type.785 +// CHECK:STDOUT: %x.patt.loc243_60.2 => constants.%x.patt.49e +// CHECK:STDOUT: %x.param_patt.loc243_55.2 => constants.%x.param_patt.69a // CHECK:STDOUT: %pattern_type.loc243_66 => constants.%pattern_type.203 +// CHECK:STDOUT: %y.param_patt.loc243_66.2 => constants.%y.param_patt.4b4 +// CHECK:STDOUT: %y.patt.loc243_66.2 => constants.%y.patt.dd3 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc243_55 => constants.%complete_type.357 @@ -3510,13 +4058,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ModAssignWith.loc249(constants.%i16, constants.%ModAssignWith.facet.4a2) { +// CHECK:STDOUT: %U.patt.loc249_19.2 => constants.%U.patt.d47 // CHECK:STDOUT: %U.loc249_19.1 => constants.%i16 // CHECK:STDOUT: %ModAssignWith.type.loc249_52.1 => constants.%ModAssignWith.type.1ea -// CHECK:STDOUT: %T.loc249_29.1 => constants.%ModAssignWith.facet.4a2 // CHECK:STDOUT: %pattern_type.loc249_29 => constants.%pattern_type.6ef +// CHECK:STDOUT: %T.patt.loc249_29.2 => constants.%T.patt.dbe +// CHECK:STDOUT: %T.loc249_29.1 => constants.%ModAssignWith.facet.4a2 // CHECK:STDOUT: %T.as_type.loc249_62.1 => constants.%Int16 // CHECK:STDOUT: %pattern_type.loc249_60 => constants.%pattern_type.785 +// CHECK:STDOUT: %x.patt.loc249_60.2 => constants.%x.patt.49e +// CHECK:STDOUT: %x.param_patt.loc249_55.2 => constants.%x.param_patt.69a // CHECK:STDOUT: %pattern_type.loc249_66 => constants.%pattern_type.203 +// CHECK:STDOUT: %y.param_patt.loc249_66.2 => constants.%y.param_patt.4b4 +// CHECK:STDOUT: %y.patt.loc249_66.2 => constants.%y.patt.dd3 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc249_55 => constants.%complete_type.357 @@ -3532,13 +4086,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @AddAssignWith.loc225(constants.%Int32, constants.%AddAssignWith.facet.348) { +// CHECK:STDOUT: %U.patt.loc225_19.2 => constants.%U.patt.d47 // CHECK:STDOUT: %U.loc225_19.1 => constants.%Int32 // CHECK:STDOUT: %AddAssignWith.type.loc225_52.1 => constants.%AddAssignWith.type.23a -// CHECK:STDOUT: %T.loc225_29.1 => constants.%AddAssignWith.facet.348 // CHECK:STDOUT: %pattern_type.loc225_29 => constants.%pattern_type.5ad +// CHECK:STDOUT: %T.patt.loc225_29.2 => constants.%T.patt.96c +// CHECK:STDOUT: %T.loc225_29.1 => constants.%AddAssignWith.facet.348 // CHECK:STDOUT: %T.as_type.loc225_62.1 => constants.%Int32 // CHECK:STDOUT: %pattern_type.loc225_60 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %x.patt.loc225_60.2 => constants.%x.patt.d79 +// CHECK:STDOUT: %x.param_patt.loc225_55.2 => constants.%x.param_patt.0c7 // CHECK:STDOUT: %pattern_type.loc225_66 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %y.param_patt.loc225_66.2 => constants.%y.param_patt.e0c +// CHECK:STDOUT: %y.patt.loc225_66.2 => constants.%y.patt.0a3 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc225_55 => constants.%complete_type.357 @@ -3554,13 +4114,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @SubAssignWith.loc231(constants.%Int32, constants.%SubAssignWith.facet.e0e) { +// CHECK:STDOUT: %U.patt.loc231_19.2 => constants.%U.patt.d47 // CHECK:STDOUT: %U.loc231_19.1 => constants.%Int32 // CHECK:STDOUT: %SubAssignWith.type.loc231_52.1 => constants.%SubAssignWith.type.4fc -// CHECK:STDOUT: %T.loc231_29.1 => constants.%SubAssignWith.facet.e0e // CHECK:STDOUT: %pattern_type.loc231_29 => constants.%pattern_type.190 +// CHECK:STDOUT: %T.patt.loc231_29.2 => constants.%T.patt.a39 +// CHECK:STDOUT: %T.loc231_29.1 => constants.%SubAssignWith.facet.e0e // CHECK:STDOUT: %T.as_type.loc231_62.1 => constants.%Int32 // CHECK:STDOUT: %pattern_type.loc231_60 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %x.patt.loc231_60.2 => constants.%x.patt.d79 +// CHECK:STDOUT: %x.param_patt.loc231_55.2 => constants.%x.param_patt.0c7 // CHECK:STDOUT: %pattern_type.loc231_66 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %y.param_patt.loc231_66.2 => constants.%y.param_patt.e0c +// CHECK:STDOUT: %y.patt.loc231_66.2 => constants.%y.patt.0a3 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc231_55 => constants.%complete_type.357 @@ -3576,13 +4142,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @MulAssignWith.loc237(constants.%Int32, constants.%MulAssignWith.facet.13c) { +// CHECK:STDOUT: %U.patt.loc237_19.2 => constants.%U.patt.d47 // CHECK:STDOUT: %U.loc237_19.1 => constants.%Int32 // CHECK:STDOUT: %MulAssignWith.type.loc237_52.1 => constants.%MulAssignWith.type.5fb -// CHECK:STDOUT: %T.loc237_29.1 => constants.%MulAssignWith.facet.13c // CHECK:STDOUT: %pattern_type.loc237_29 => constants.%pattern_type.f3b +// CHECK:STDOUT: %T.patt.loc237_29.2 => constants.%T.patt.f66 +// CHECK:STDOUT: %T.loc237_29.1 => constants.%MulAssignWith.facet.13c // CHECK:STDOUT: %T.as_type.loc237_62.1 => constants.%Int32 // CHECK:STDOUT: %pattern_type.loc237_60 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %x.patt.loc237_60.2 => constants.%x.patt.d79 +// CHECK:STDOUT: %x.param_patt.loc237_55.2 => constants.%x.param_patt.0c7 // CHECK:STDOUT: %pattern_type.loc237_66 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %y.param_patt.loc237_66.2 => constants.%y.param_patt.e0c +// CHECK:STDOUT: %y.patt.loc237_66.2 => constants.%y.patt.0a3 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc237_55 => constants.%complete_type.357 @@ -3598,13 +4170,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @DivAssignWith.loc243(constants.%Int32, constants.%DivAssignWith.facet.e59) { +// CHECK:STDOUT: %U.patt.loc243_19.2 => constants.%U.patt.d47 // CHECK:STDOUT: %U.loc243_19.1 => constants.%Int32 // CHECK:STDOUT: %DivAssignWith.type.loc243_52.1 => constants.%DivAssignWith.type.3ea -// CHECK:STDOUT: %T.loc243_29.1 => constants.%DivAssignWith.facet.e59 // CHECK:STDOUT: %pattern_type.loc243_29 => constants.%pattern_type.8f3 +// CHECK:STDOUT: %T.patt.loc243_29.2 => constants.%T.patt.316 +// CHECK:STDOUT: %T.loc243_29.1 => constants.%DivAssignWith.facet.e59 // CHECK:STDOUT: %T.as_type.loc243_62.1 => constants.%Int32 // CHECK:STDOUT: %pattern_type.loc243_60 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %x.patt.loc243_60.2 => constants.%x.patt.d79 +// CHECK:STDOUT: %x.param_patt.loc243_55.2 => constants.%x.param_patt.0c7 // CHECK:STDOUT: %pattern_type.loc243_66 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %y.param_patt.loc243_66.2 => constants.%y.param_patt.e0c +// CHECK:STDOUT: %y.patt.loc243_66.2 => constants.%y.patt.0a3 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc243_55 => constants.%complete_type.357 @@ -3620,13 +4198,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ModAssignWith.loc249(constants.%Int32, constants.%ModAssignWith.facet.dac) { +// CHECK:STDOUT: %U.patt.loc249_19.2 => constants.%U.patt.d47 // CHECK:STDOUT: %U.loc249_19.1 => constants.%Int32 // CHECK:STDOUT: %ModAssignWith.type.loc249_52.1 => constants.%ModAssignWith.type.567 -// CHECK:STDOUT: %T.loc249_29.1 => constants.%ModAssignWith.facet.dac // CHECK:STDOUT: %pattern_type.loc249_29 => constants.%pattern_type.9ff +// CHECK:STDOUT: %T.patt.loc249_29.2 => constants.%T.patt.6f1 +// CHECK:STDOUT: %T.loc249_29.1 => constants.%ModAssignWith.facet.dac // CHECK:STDOUT: %T.as_type.loc249_62.1 => constants.%Int32 // CHECK:STDOUT: %pattern_type.loc249_60 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %x.patt.loc249_60.2 => constants.%x.patt.d79 +// CHECK:STDOUT: %x.param_patt.loc249_55.2 => constants.%x.param_patt.0c7 // CHECK:STDOUT: %pattern_type.loc249_66 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %y.param_patt.loc249_66.2 => constants.%y.param_patt.e0c +// CHECK:STDOUT: %y.patt.loc249_66.2 => constants.%y.patt.0a3 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc249_55 => constants.%complete_type.357 @@ -3642,13 +4226,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @AddAssignWith.loc225(constants.%Int32, constants.%AddAssignWith.facet.144) { +// CHECK:STDOUT: %U.patt.loc225_19.2 => constants.%U.patt.d47 // CHECK:STDOUT: %U.loc225_19.1 => constants.%Int32 // CHECK:STDOUT: %AddAssignWith.type.loc225_52.1 => constants.%AddAssignWith.type.23a -// CHECK:STDOUT: %T.loc225_29.1 => constants.%AddAssignWith.facet.144 // CHECK:STDOUT: %pattern_type.loc225_29 => constants.%pattern_type.5ad +// CHECK:STDOUT: %T.patt.loc225_29.2 => constants.%T.patt.96c +// CHECK:STDOUT: %T.loc225_29.1 => constants.%AddAssignWith.facet.144 // CHECK:STDOUT: %T.as_type.loc225_62.1 => constants.%Int64 // CHECK:STDOUT: %pattern_type.loc225_60 => constants.%pattern_type.4aa +// CHECK:STDOUT: %x.patt.loc225_60.2 => constants.%x.patt.ace +// CHECK:STDOUT: %x.param_patt.loc225_55.2 => constants.%x.param_patt.b33 // CHECK:STDOUT: %pattern_type.loc225_66 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %y.param_patt.loc225_66.2 => constants.%y.param_patt.e0c +// CHECK:STDOUT: %y.patt.loc225_66.2 => constants.%y.patt.0a3 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc225_55 => constants.%complete_type.357 @@ -3664,13 +4254,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @SubAssignWith.loc231(constants.%Int32, constants.%SubAssignWith.facet.a7e) { +// CHECK:STDOUT: %U.patt.loc231_19.2 => constants.%U.patt.d47 // CHECK:STDOUT: %U.loc231_19.1 => constants.%Int32 // CHECK:STDOUT: %SubAssignWith.type.loc231_52.1 => constants.%SubAssignWith.type.4fc -// CHECK:STDOUT: %T.loc231_29.1 => constants.%SubAssignWith.facet.a7e // CHECK:STDOUT: %pattern_type.loc231_29 => constants.%pattern_type.190 +// CHECK:STDOUT: %T.patt.loc231_29.2 => constants.%T.patt.a39 +// CHECK:STDOUT: %T.loc231_29.1 => constants.%SubAssignWith.facet.a7e // CHECK:STDOUT: %T.as_type.loc231_62.1 => constants.%Int64 // CHECK:STDOUT: %pattern_type.loc231_60 => constants.%pattern_type.4aa +// CHECK:STDOUT: %x.patt.loc231_60.2 => constants.%x.patt.ace +// CHECK:STDOUT: %x.param_patt.loc231_55.2 => constants.%x.param_patt.b33 // CHECK:STDOUT: %pattern_type.loc231_66 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %y.param_patt.loc231_66.2 => constants.%y.param_patt.e0c +// CHECK:STDOUT: %y.patt.loc231_66.2 => constants.%y.patt.0a3 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc231_55 => constants.%complete_type.357 @@ -3686,13 +4282,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @MulAssignWith.loc237(constants.%Int32, constants.%MulAssignWith.facet.b35) { +// CHECK:STDOUT: %U.patt.loc237_19.2 => constants.%U.patt.d47 // CHECK:STDOUT: %U.loc237_19.1 => constants.%Int32 // CHECK:STDOUT: %MulAssignWith.type.loc237_52.1 => constants.%MulAssignWith.type.5fb -// CHECK:STDOUT: %T.loc237_29.1 => constants.%MulAssignWith.facet.b35 // CHECK:STDOUT: %pattern_type.loc237_29 => constants.%pattern_type.f3b +// CHECK:STDOUT: %T.patt.loc237_29.2 => constants.%T.patt.f66 +// CHECK:STDOUT: %T.loc237_29.1 => constants.%MulAssignWith.facet.b35 // CHECK:STDOUT: %T.as_type.loc237_62.1 => constants.%Int64 // CHECK:STDOUT: %pattern_type.loc237_60 => constants.%pattern_type.4aa +// CHECK:STDOUT: %x.patt.loc237_60.2 => constants.%x.patt.ace +// CHECK:STDOUT: %x.param_patt.loc237_55.2 => constants.%x.param_patt.b33 // CHECK:STDOUT: %pattern_type.loc237_66 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %y.param_patt.loc237_66.2 => constants.%y.param_patt.e0c +// CHECK:STDOUT: %y.patt.loc237_66.2 => constants.%y.patt.0a3 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc237_55 => constants.%complete_type.357 @@ -3708,13 +4310,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @DivAssignWith.loc243(constants.%Int32, constants.%DivAssignWith.facet.b1e) { +// CHECK:STDOUT: %U.patt.loc243_19.2 => constants.%U.patt.d47 // CHECK:STDOUT: %U.loc243_19.1 => constants.%Int32 // CHECK:STDOUT: %DivAssignWith.type.loc243_52.1 => constants.%DivAssignWith.type.3ea -// CHECK:STDOUT: %T.loc243_29.1 => constants.%DivAssignWith.facet.b1e // CHECK:STDOUT: %pattern_type.loc243_29 => constants.%pattern_type.8f3 +// CHECK:STDOUT: %T.patt.loc243_29.2 => constants.%T.patt.316 +// CHECK:STDOUT: %T.loc243_29.1 => constants.%DivAssignWith.facet.b1e // CHECK:STDOUT: %T.as_type.loc243_62.1 => constants.%Int64 // CHECK:STDOUT: %pattern_type.loc243_60 => constants.%pattern_type.4aa +// CHECK:STDOUT: %x.patt.loc243_60.2 => constants.%x.patt.ace +// CHECK:STDOUT: %x.param_patt.loc243_55.2 => constants.%x.param_patt.b33 // CHECK:STDOUT: %pattern_type.loc243_66 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %y.param_patt.loc243_66.2 => constants.%y.param_patt.e0c +// CHECK:STDOUT: %y.patt.loc243_66.2 => constants.%y.patt.0a3 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc243_55 => constants.%complete_type.357 @@ -3730,13 +4338,19 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ModAssignWith.loc249(constants.%Int32, constants.%ModAssignWith.facet.342) { +// CHECK:STDOUT: %U.patt.loc249_19.2 => constants.%U.patt.d47 // CHECK:STDOUT: %U.loc249_19.1 => constants.%Int32 // CHECK:STDOUT: %ModAssignWith.type.loc249_52.1 => constants.%ModAssignWith.type.567 -// CHECK:STDOUT: %T.loc249_29.1 => constants.%ModAssignWith.facet.342 // CHECK:STDOUT: %pattern_type.loc249_29 => constants.%pattern_type.9ff +// CHECK:STDOUT: %T.patt.loc249_29.2 => constants.%T.patt.6f1 +// CHECK:STDOUT: %T.loc249_29.1 => constants.%ModAssignWith.facet.342 // CHECK:STDOUT: %T.as_type.loc249_62.1 => constants.%Int64 // CHECK:STDOUT: %pattern_type.loc249_60 => constants.%pattern_type.4aa +// CHECK:STDOUT: %x.patt.loc249_60.2 => constants.%x.patt.ace +// CHECK:STDOUT: %x.param_patt.loc249_55.2 => constants.%x.param_patt.b33 // CHECK:STDOUT: %pattern_type.loc249_66 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %y.param_patt.loc249_66.2 => constants.%y.param_patt.e0c +// CHECK:STDOUT: %y.patt.loc249_66.2 => constants.%y.patt.0a3 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc249_55 => constants.%complete_type.357 @@ -3752,103 +4366,133 @@ fn TestUnaryOperators(a: Cpp.Int16, b: Cpp.Int32) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TestInc(constants.%T.8f3) { +// CHECK:STDOUT: %T.patt.loc278_13.2 => constants.%T.patt.eab // CHECK:STDOUT: %T.loc278_13.1 => constants.%T.8f3 // CHECK:STDOUT: %T.as_type.loc278_33.1 => constants.%T.as_type.232 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.427bfc.2 +// CHECK:STDOUT: %x.patt.loc278_31.2 => constants.%x.patt.a75 +// CHECK:STDOUT: %x.param_patt.loc278_26.2 => constants.%x.param_patt.5da // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TestDec(constants.%T.e8e) { +// CHECK:STDOUT: %T.patt.loc284_13.2 => constants.%T.patt.de9 // CHECK:STDOUT: %T.loc284_13.1 => constants.%T.e8e // CHECK:STDOUT: %T.as_type.loc284_33.1 => constants.%T.as_type.c32 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.2754f0.2 +// CHECK:STDOUT: %x.patt.loc284_31.2 => constants.%x.patt.08b +// CHECK:STDOUT: %x.param_patt.loc284_26.2 => constants.%x.param_patt.678 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TestNegate(constants.%Result, constants.%T.a9d) { +// CHECK:STDOUT: %Result.patt.loc292_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc292_9.1 => constants.%Result // CHECK:STDOUT: %Result.as_type.loc293_50.1 => constants.%Result.as_type // CHECK:STDOUT: %facet_type => constants.%facet_type.b1d -// CHECK:STDOUT: %T.loc293_4.1 => constants.%T.a9d // CHECK:STDOUT: %pattern_type.loc293 => constants.%pattern_type.540 +// CHECK:STDOUT: %T.patt.loc293_4.2 => constants.%T.patt.e96 +// CHECK:STDOUT: %T.loc293_4.1 => constants.%T.a9d // CHECK:STDOUT: %pattern_type.loc294_11 => constants.%pattern_type.f4e485.2 +// CHECK:STDOUT: %y.param_patt.loc294_11.2 => constants.%y.param_patt.023 +// CHECK:STDOUT: %y.patt.loc294_11.2 => constants.%y.patt.053 // CHECK:STDOUT: %T.as_type.loc294_24.1 => constants.%T.as_type.a98 // CHECK:STDOUT: %pattern_type.loc294_22 => constants.%pattern_type.962a +// CHECK:STDOUT: %x.param_patt.loc294_22.2 => constants.%x.param_patt.4f4 +// CHECK:STDOUT: %x.patt.loc294_22.2 => constants.%x.patt.31e // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TestInc(constants.%Inc.facet.dd2) { +// CHECK:STDOUT: %T.patt.loc278_13.2 => constants.%T.patt.eab // CHECK:STDOUT: %T.loc278_13.1 => constants.%Inc.facet.dd2 // CHECK:STDOUT: %T.as_type.loc278_33.1 => constants.%Int32 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.8b4 +// CHECK:STDOUT: %x.patt.loc278_31.2 => constants.%x.patt.d79 +// CHECK:STDOUT: %x.param_patt.loc278_26.2 => constants.%x.param_patt.0c7 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.357 // CHECK:STDOUT: %Inc.WithSelf.Op.type => constants.%Inc.WithSelf.Op.type.d1d -// CHECK:STDOUT: %.loc280_3.2 => constants.%.176 +// CHECK:STDOUT: %.loc280_3.3 => constants.%.176 // CHECK:STDOUT: %Inc.lookup_impl_witness => constants.%custom_witness.f3f // CHECK:STDOUT: %impl.elem0.loc280_3.2 => constants.%Int32.Op.4dca31.18 // CHECK:STDOUT: %specific_impl_fn.loc280_3.2 => constants.%Int32.Op.4dca31.18 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TestDec(constants.%Dec.facet.e1b) { +// CHECK:STDOUT: %T.patt.loc284_13.2 => constants.%T.patt.de9 // CHECK:STDOUT: %T.loc284_13.1 => constants.%Dec.facet.e1b // CHECK:STDOUT: %T.as_type.loc284_33.1 => constants.%Int32 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.8b4 +// CHECK:STDOUT: %x.patt.loc284_31.2 => constants.%x.patt.d79 +// CHECK:STDOUT: %x.param_patt.loc284_26.2 => constants.%x.param_patt.0c7 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.357 // CHECK:STDOUT: %Dec.WithSelf.Op.type => constants.%Dec.WithSelf.Op.type.e55 -// CHECK:STDOUT: %.loc286_3.2 => constants.%.d09 +// CHECK:STDOUT: %.loc286_3.3 => constants.%.d09 // CHECK:STDOUT: %Dec.lookup_impl_witness => constants.%custom_witness.b24 // CHECK:STDOUT: %impl.elem0.loc286_3.2 => constants.%Int32.Op.4dca31.19 // CHECK:STDOUT: %specific_impl_fn.loc286_3.2 => constants.%Int32.Op.4dca31.19 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TestNegate(constants.%Destroy.facet.191, constants.%facet_value.750) { +// CHECK:STDOUT: %Result.patt.loc292_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc292_9.1 => constants.%Destroy.facet.191 // CHECK:STDOUT: %Result.as_type.loc293_50.1 => constants.%Int64 // CHECK:STDOUT: %facet_type => constants.%facet_type.76b -// CHECK:STDOUT: %T.loc293_4.1 => constants.%facet_value.750 // CHECK:STDOUT: %pattern_type.loc293 => constants.%pattern_type.61c +// CHECK:STDOUT: %T.patt.loc293_4.2 => constants.%T.patt.fd6 +// CHECK:STDOUT: %T.loc293_4.1 => constants.%facet_value.750 // CHECK:STDOUT: %pattern_type.loc294_11 => constants.%pattern_type.4aa +// CHECK:STDOUT: %y.param_patt.loc294_11.2 => constants.%y.param_patt.a08 +// CHECK:STDOUT: %y.patt.loc294_11.2 => constants.%y.patt.63b // CHECK:STDOUT: %T.as_type.loc294_24.1 => constants.%Int16 // CHECK:STDOUT: %pattern_type.loc294_22 => constants.%pattern_type.785 +// CHECK:STDOUT: %x.param_patt.loc294_22.2 => constants.%x.param_patt.3b0 +// CHECK:STDOUT: %x.patt.loc294_22.2 => constants.%x.patt.b76 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc294_11 => constants.%complete_type.357 // CHECK:STDOUT: %require_complete.loc294_22 => constants.%complete_type.357 // CHECK:STDOUT: %Negate.lookup_impl_witness => constants.%custom_witness.100 -// CHECK:STDOUT: %Negate.facet.loc296_3.2 => constants.%Negate.facet.8f4 +// CHECK:STDOUT: %Negate.facet.loc296_3.3 => constants.%Negate.facet.8f4 // CHECK:STDOUT: %Negate.WithSelf.Op.type => constants.%Negate.WithSelf.Op.type.181 -// CHECK:STDOUT: %.loc296_3.5 => constants.%.66a +// CHECK:STDOUT: %.loc296_3.7 => constants.%.66a // CHECK:STDOUT: %impl.elem1.loc296_3.2 => constants.%Int16.Op.4dca31.18 // CHECK:STDOUT: %specific_impl_fn.loc296_3.3 => constants.%Int16.Op.4dca31.18 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.c2c -// CHECK:STDOUT: %.loc296_3.6 => constants.%.c2e +// CHECK:STDOUT: %.loc296_3.8 => constants.%.c2e // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.e7a31c.3 // CHECK:STDOUT: %impl.elem0.loc296_3.2 => constants.%Int64.Op.4dca31.1 // CHECK:STDOUT: %specific_impl_fn.loc296_3.4 => constants.%Int64.Op.4dca31.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TestNegate(constants.%Destroy.facet.099, constants.%facet_value.42d) { +// CHECK:STDOUT: %Result.patt.loc292_9.2 => constants.%Result.patt // CHECK:STDOUT: %Result.loc292_9.1 => constants.%Destroy.facet.099 // CHECK:STDOUT: %Result.as_type.loc293_50.1 => constants.%Int32 // CHECK:STDOUT: %facet_type => constants.%facet_type.49d -// CHECK:STDOUT: %T.loc293_4.1 => constants.%facet_value.42d // CHECK:STDOUT: %pattern_type.loc293 => constants.%pattern_type.57c +// CHECK:STDOUT: %T.patt.loc293_4.2 => constants.%T.patt.4fa +// CHECK:STDOUT: %T.loc293_4.1 => constants.%facet_value.42d // CHECK:STDOUT: %pattern_type.loc294_11 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %y.param_patt.loc294_11.2 => constants.%y.param_patt.e0c +// CHECK:STDOUT: %y.patt.loc294_11.2 => constants.%y.patt.0a3 // CHECK:STDOUT: %T.as_type.loc294_24.1 => constants.%Int32 // CHECK:STDOUT: %pattern_type.loc294_22 => constants.%pattern_type.8b4 +// CHECK:STDOUT: %x.param_patt.loc294_22.2 => constants.%x.param_patt.27c +// CHECK:STDOUT: %x.patt.loc294_22.2 => constants.%x.patt.4c9 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc294_11 => constants.%complete_type.357 // CHECK:STDOUT: %require_complete.loc294_22 => constants.%complete_type.357 // CHECK:STDOUT: %Negate.lookup_impl_witness => constants.%custom_witness.a85 -// CHECK:STDOUT: %Negate.facet.loc296_3.2 => constants.%Negate.facet.aa9 +// CHECK:STDOUT: %Negate.facet.loc296_3.3 => constants.%Negate.facet.aa9 // CHECK:STDOUT: %Negate.WithSelf.Op.type => constants.%Negate.WithSelf.Op.type.050 -// CHECK:STDOUT: %.loc296_3.5 => constants.%.668 +// CHECK:STDOUT: %.loc296_3.7 => constants.%.668 // CHECK:STDOUT: %impl.elem1.loc296_3.2 => constants.%Int32.Op.4dca31.20 // CHECK:STDOUT: %specific_impl_fn.loc296_3.3 => constants.%Int32.Op.4dca31.20 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.b76 -// CHECK:STDOUT: %.loc296_3.6 => constants.%.043 +// CHECK:STDOUT: %.loc296_3.8 => constants.%.043 // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.e7a31c.2 // CHECK:STDOUT: %impl.elem0.loc296_3.2 => constants.%Int32.Op.4dca31.1 // CHECK:STDOUT: %specific_impl_fn.loc296_3.4 => constants.%Int32.Op.4dca31.1 diff --git a/toolchain/check/testdata/interop/cpp/operators/eq_with.carbon b/toolchain/check/testdata/interop/cpp/operators/eq_with.carbon index 8e4d8a85a3fe..9932a929ad9c 100644 --- a/toolchain/check/testdata/interop/cpp/operators/eq_with.carbon +++ b/toolchain/check/testdata/interop/cpp/operators/eq_with.carbon @@ -360,6 +360,8 @@ fn Test(only_neq: Cpp.OnlyNeq, // CHECK:STDOUT: --- returns_bool.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %U: type = symbolic_binding U, 0 [symbolic] // CHECK:STDOUT: %Other: type = symbolic_binding Other, 0 [symbolic] // CHECK:STDOUT: %EqWith.type.98ea86.1: type = facet_type <@EqWith.1, @EqWith.1(%Other)> [symbolic] @@ -371,13 +373,18 @@ fn Test(only_neq: Cpp.OnlyNeq, // CHECK:STDOUT: %EqWith.WithSelf.Equal.ae3c3e.1: %EqWith.WithSelf.Equal.type.b82ec7.1 = struct_value () [symbolic] // CHECK:STDOUT: %EqWith.type.98ea86.2: type = facet_type <@EqWith.1, @EqWith.1(%U)> [symbolic] // CHECK:STDOUT: %pattern_type.3d4: type = pattern_type %EqWith.type.98ea86.2 [symbolic] +// CHECK:STDOUT: %T.patt.6b9: %pattern_type.3d4 = symbolic_binding_pattern T, 1 [symbolic] // CHECK:STDOUT: %T: %EqWith.type.98ea86.2 = symbolic_binding T, 1 [symbolic] // CHECK:STDOUT: %EqWith.assoc_type.85b122.2: type = assoc_entity_type @EqWith.1, @EqWith.1(%U) [symbolic] // CHECK:STDOUT: %assoc0.eee873.2: %EqWith.assoc_type.85b122.2 = assoc_entity element0, imports.%Core.import_ref.5ba [symbolic] // CHECK:STDOUT: %assoc1.0ffc88.2: %EqWith.assoc_type.85b122.2 = assoc_entity element1, imports.%Core.import_ref.03f [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] // CHECK:STDOUT: %pattern_type.e6374a.2: type = pattern_type %T.as_type [symbolic] +// CHECK:STDOUT: %x.param_patt.aa2: %pattern_type.e6374a.2 = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.4e4: %pattern_type.e6374a.2 = at_binding_pattern x, %x.param_patt.aa2 [symbolic] // CHECK:STDOUT: %pattern_type.51d1c4.2: type = pattern_type %U [symbolic] +// CHECK:STDOUT: %y.param_patt.be3: %pattern_type.51d1c4.2 = value_param_pattern [symbolic] +// CHECK:STDOUT: %y.patt.b85: %pattern_type.51d1c4.2 = at_binding_pattern y, %y.param_patt.be3 [symbolic] // CHECK:STDOUT: %require_complete.fb5: = require_complete_type %EqWith.type.98ea86.2 [symbolic] // CHECK:STDOUT: %assoc0.d00: %EqWith.assoc_type.85b122.1 = assoc_entity element0, imports.%Core.import_ref.2e5 [symbolic] // CHECK:STDOUT: %EqWith.lookup_impl_witness: = lookup_impl_witness %T, @EqWith.1, @EqWith.1(%U) [symbolic] @@ -405,6 +412,11 @@ fn Test(only_neq: Cpp.OnlyNeq, // CHECK:STDOUT: %custom_witness.505: = custom_witness (%EqualityComparable.Equal, %EqualityComparable.NotEqual), @EqWith.1, @EqWith.1(%EqualityComparable) [concrete] // CHECK:STDOUT: %EqWith.facet.b15: %EqWith.type.6a7 = facet_value %EqualityComparable, (%custom_witness.505) [concrete] // CHECK:STDOUT: %pattern_type.876: type = pattern_type %EqWith.type.6a7 [concrete] +// CHECK:STDOUT: %T.patt.d6d: %pattern_type.876 = symbolic_binding_pattern T, 1 [symbolic] +// CHECK:STDOUT: %x.param_patt.427: %pattern_type.73b = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.570: %pattern_type.73b = at_binding_pattern x, %x.param_patt.427 [concrete] +// CHECK:STDOUT: %y.param_patt.464: %pattern_type.73b = value_param_pattern [concrete] +// CHECK:STDOUT: %y.patt.d34: %pattern_type.73b = at_binding_pattern y, %y.param_patt.464 [concrete] // CHECK:STDOUT: %complete_type.c86: = complete_type_witness %EqWith.type.6a7 [concrete] // CHECK:STDOUT: %EqWith.WithSelf.Equal.type.6ae: type = fn_type @EqWith.WithSelf.Equal, @EqWith.WithSelf(%EqualityComparable, %EqWith.facet.b15) [concrete] // CHECK:STDOUT: %.96d: type = fn_type_with_self_type %EqWith.WithSelf.Equal.type.6ae, %EqWith.facet.b15 [concrete] @@ -467,23 +479,35 @@ fn Test(only_neq: Cpp.OnlyNeq, // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @EqWith.loc11(constants.%U, constants.%T) { +// CHECK:STDOUT: %U.patt.loc11_12.2 => constants.%U.patt // CHECK:STDOUT: %U.loc11_12.1 => constants.%U // CHECK:STDOUT: %EqWith.type.loc11_38.1 => constants.%EqWith.type.98ea86.2 -// CHECK:STDOUT: %T.loc11_22.1 => constants.%T // CHECK:STDOUT: %pattern_type.loc11_22 => constants.%pattern_type.3d4 +// CHECK:STDOUT: %T.patt.loc11_22.2 => constants.%T.patt.6b9 +// CHECK:STDOUT: %T.loc11_22.1 => constants.%T // CHECK:STDOUT: %T.as_type.loc11_44.1 => constants.%T.as_type // CHECK:STDOUT: %pattern_type.loc11_42 => constants.%pattern_type.e6374a.2 +// CHECK:STDOUT: %x.param_patt.loc11_42.2 => constants.%x.param_patt.aa2 +// CHECK:STDOUT: %x.patt.loc11_42.2 => constants.%x.patt.4e4 // CHECK:STDOUT: %pattern_type.loc11_48 => constants.%pattern_type.51d1c4.2 +// CHECK:STDOUT: %y.param_patt.loc11_48.2 => constants.%y.param_patt.be3 +// CHECK:STDOUT: %y.patt.loc11_48.2 => constants.%y.patt.b85 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @EqWith.loc11(constants.%EqualityComparable, constants.%EqWith.facet.b15) { +// CHECK:STDOUT: %U.patt.loc11_12.2 => constants.%U.patt // CHECK:STDOUT: %U.loc11_12.1 => constants.%EqualityComparable // CHECK:STDOUT: %EqWith.type.loc11_38.1 => constants.%EqWith.type.6a7 -// CHECK:STDOUT: %T.loc11_22.1 => constants.%EqWith.facet.b15 // CHECK:STDOUT: %pattern_type.loc11_22 => constants.%pattern_type.876 +// CHECK:STDOUT: %T.patt.loc11_22.2 => constants.%T.patt.d6d +// CHECK:STDOUT: %T.loc11_22.1 => constants.%EqWith.facet.b15 // CHECK:STDOUT: %T.as_type.loc11_44.1 => constants.%EqualityComparable // CHECK:STDOUT: %pattern_type.loc11_42 => constants.%pattern_type.73b +// CHECK:STDOUT: %x.param_patt.loc11_42.2 => constants.%x.param_patt.427 +// CHECK:STDOUT: %x.patt.loc11_42.2 => constants.%x.patt.570 // CHECK:STDOUT: %pattern_type.loc11_48 => constants.%pattern_type.73b +// CHECK:STDOUT: %y.param_patt.loc11_48.2 => constants.%y.param_patt.464 +// CHECK:STDOUT: %y.patt.loc11_48.2 => constants.%y.patt.d34 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc11_42 => constants.%complete_type.357 @@ -506,6 +530,8 @@ fn Test(only_neq: Cpp.OnlyNeq, // CHECK:STDOUT: --- cross_type_equality.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %U: type = symbolic_binding U, 0 [symbolic] // CHECK:STDOUT: %Other: type = symbolic_binding Other, 0 [symbolic] // CHECK:STDOUT: %EqWith.type.98ea86.1: type = facet_type <@EqWith.1, @EqWith.1(%Other)> [symbolic] @@ -517,13 +543,18 @@ fn Test(only_neq: Cpp.OnlyNeq, // CHECK:STDOUT: %EqWith.WithSelf.Equal.ae3c3e.1: %EqWith.WithSelf.Equal.type.b82ec7.1 = struct_value () [symbolic] // CHECK:STDOUT: %EqWith.type.98ea86.2: type = facet_type <@EqWith.1, @EqWith.1(%U)> [symbolic] // CHECK:STDOUT: %pattern_type.3d4: type = pattern_type %EqWith.type.98ea86.2 [symbolic] +// CHECK:STDOUT: %T.patt.6b9: %pattern_type.3d4 = symbolic_binding_pattern T, 1 [symbolic] // CHECK:STDOUT: %T: %EqWith.type.98ea86.2 = symbolic_binding T, 1 [symbolic] // CHECK:STDOUT: %EqWith.assoc_type.85b122.2: type = assoc_entity_type @EqWith.1, @EqWith.1(%U) [symbolic] // CHECK:STDOUT: %assoc0.eee873.2: %EqWith.assoc_type.85b122.2 = assoc_entity element0, imports.%Core.import_ref.5ba [symbolic] // CHECK:STDOUT: %assoc1.0ffc88.2: %EqWith.assoc_type.85b122.2 = assoc_entity element1, imports.%Core.import_ref.03f [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] // CHECK:STDOUT: %pattern_type.e6374a.2: type = pattern_type %T.as_type [symbolic] +// CHECK:STDOUT: %x.param_patt.aa2: %pattern_type.e6374a.2 = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.4e4: %pattern_type.e6374a.2 = at_binding_pattern x, %x.param_patt.aa2 [symbolic] // CHECK:STDOUT: %pattern_type.51d1c4.2: type = pattern_type %U [symbolic] +// CHECK:STDOUT: %y.param_patt.be3: %pattern_type.51d1c4.2 = value_param_pattern [symbolic] +// CHECK:STDOUT: %y.patt.b85: %pattern_type.51d1c4.2 = at_binding_pattern y, %y.param_patt.be3 [symbolic] // CHECK:STDOUT: %require_complete.fb5: = require_complete_type %EqWith.type.98ea86.2 [symbolic] // CHECK:STDOUT: %assoc0.d00: %EqWith.assoc_type.85b122.1 = assoc_entity element0, imports.%Core.import_ref.2e5 [symbolic] // CHECK:STDOUT: %EqWith.lookup_impl_witness: = lookup_impl_witness %T, @EqWith.1, @EqWith.1(%U) [symbolic] @@ -561,6 +592,11 @@ fn Test(only_neq: Cpp.OnlyNeq, // CHECK:STDOUT: %custom_witness.087: = custom_witness (%A1.Equal, %A1.NotEqual), @EqWith.1, @EqWith.1(%B1) [concrete] // CHECK:STDOUT: %EqWith.facet.2d3: %EqWith.type.6ed = facet_value %A1, (%custom_witness.087) [concrete] // CHECK:STDOUT: %pattern_type.e16: type = pattern_type %EqWith.type.6ed [concrete] +// CHECK:STDOUT: %T.patt.869: %pattern_type.e16 = symbolic_binding_pattern T, 1 [symbolic] +// CHECK:STDOUT: %x.param_patt.c7f: %pattern_type.3b4 = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.4ff: %pattern_type.3b4 = at_binding_pattern x, %x.param_patt.c7f [concrete] +// CHECK:STDOUT: %y.param_patt.9d7: %pattern_type.5b2 = value_param_pattern [concrete] +// CHECK:STDOUT: %y.patt.979: %pattern_type.5b2 = at_binding_pattern y, %y.param_patt.9d7 [concrete] // CHECK:STDOUT: %EqWith.type.dda: type = facet_type <@EqWith.1, @EqWith.1(%A1)> [concrete] // CHECK:STDOUT: %EqWith.assoc_type.5ce: type = assoc_entity_type @EqWith.1, @EqWith.1(%A1) [concrete] // CHECK:STDOUT: %assoc0.7c8: %EqWith.assoc_type.5ce = assoc_entity element0, imports.%Core.import_ref.5ba [concrete] @@ -572,6 +608,11 @@ fn Test(only_neq: Cpp.OnlyNeq, // CHECK:STDOUT: %custom_witness.123: = custom_witness (%B1.Equal, %B1.NotEqual), @EqWith.1, @EqWith.1(%A1) [concrete] // CHECK:STDOUT: %EqWith.facet.b94: %EqWith.type.dda = facet_value %B1, (%custom_witness.123) [concrete] // CHECK:STDOUT: %pattern_type.a95: type = pattern_type %EqWith.type.dda [concrete] +// CHECK:STDOUT: %T.patt.b7f: %pattern_type.a95 = symbolic_binding_pattern T, 1 [symbolic] +// CHECK:STDOUT: %x.param_patt.bff: %pattern_type.5b2 = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.f3d: %pattern_type.5b2 = at_binding_pattern x, %x.param_patt.bff [concrete] +// CHECK:STDOUT: %y.param_patt.257: %pattern_type.3b4 = value_param_pattern [concrete] +// CHECK:STDOUT: %y.patt.774: %pattern_type.3b4 = at_binding_pattern y, %y.param_patt.257 [concrete] // CHECK:STDOUT: %EqWith.type.c63: type = facet_type <@EqWith.1, @EqWith.1(%A2)> [concrete] // CHECK:STDOUT: %EqWith.assoc_type.2ca: type = assoc_entity_type @EqWith.1, @EqWith.1(%A2) [concrete] // CHECK:STDOUT: %assoc0.878: %EqWith.assoc_type.2ca = assoc_entity element0, imports.%Core.import_ref.5ba [concrete] @@ -583,6 +624,11 @@ fn Test(only_neq: Cpp.OnlyNeq, // CHECK:STDOUT: %custom_witness.640: = custom_witness (%B2.Equal, %B2.NotEqual), @EqWith.1, @EqWith.1(%A2) [concrete] // CHECK:STDOUT: %EqWith.facet.fe0: %EqWith.type.c63 = facet_value %B2, (%custom_witness.640) [concrete] // CHECK:STDOUT: %pattern_type.cbd: type = pattern_type %EqWith.type.c63 [concrete] +// CHECK:STDOUT: %T.patt.aaf: %pattern_type.cbd = symbolic_binding_pattern T, 1 [symbolic] +// CHECK:STDOUT: %x.param_patt.0e6: %pattern_type.d1e = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.94e: %pattern_type.d1e = at_binding_pattern x, %x.param_patt.0e6 [concrete] +// CHECK:STDOUT: %y.param_patt.a4f: %pattern_type.9f0 = value_param_pattern [concrete] +// CHECK:STDOUT: %y.patt.912: %pattern_type.9f0 = at_binding_pattern y, %y.param_patt.a4f [concrete] // CHECK:STDOUT: %EqWith.type.2e6: type = facet_type <@EqWith.1, @EqWith.1(%B3)> [concrete] // CHECK:STDOUT: %EqWith.assoc_type.eda: type = assoc_entity_type @EqWith.1, @EqWith.1(%B3) [concrete] // CHECK:STDOUT: %assoc0.34f: %EqWith.assoc_type.eda = assoc_entity element0, imports.%Core.import_ref.5ba [concrete] @@ -594,6 +640,11 @@ fn Test(only_neq: Cpp.OnlyNeq, // CHECK:STDOUT: %custom_witness.528: = custom_witness (%A3.Equal, %NotEqual), @EqWith.1, @EqWith.1(%B3) [concrete] // CHECK:STDOUT: %EqWith.facet.34d: %EqWith.type.2e6 = facet_value %A3, (%custom_witness.528) [concrete] // CHECK:STDOUT: %pattern_type.2b2: type = pattern_type %EqWith.type.2e6 [concrete] +// CHECK:STDOUT: %T.patt.7d5: %pattern_type.2b2 = symbolic_binding_pattern T, 1 [symbolic] +// CHECK:STDOUT: %x.param_patt.429: %pattern_type.7fe = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.6e2: %pattern_type.7fe = at_binding_pattern x, %x.param_patt.429 [concrete] +// CHECK:STDOUT: %y.param_patt.b51: %pattern_type.2dd = value_param_pattern [concrete] +// CHECK:STDOUT: %y.patt.7b8: %pattern_type.2dd = at_binding_pattern y, %y.param_patt.b51 [concrete] // CHECK:STDOUT: %EqWith.type.831: type = facet_type <@EqWith.1, @EqWith.1(%A3)> [concrete] // CHECK:STDOUT: %EqWith.assoc_type.d85: type = assoc_entity_type @EqWith.1, @EqWith.1(%A3) [concrete] // CHECK:STDOUT: %assoc0.b7b: %EqWith.assoc_type.d85 = assoc_entity element0, imports.%Core.import_ref.5ba [concrete] @@ -605,6 +656,11 @@ fn Test(only_neq: Cpp.OnlyNeq, // CHECK:STDOUT: %custom_witness.0ff: = custom_witness (%Equal, %B3.NotEqual), @EqWith.1, @EqWith.1(%A3) [concrete] // CHECK:STDOUT: %EqWith.facet.2a4: %EqWith.type.831 = facet_value %B3, (%custom_witness.0ff) [concrete] // CHECK:STDOUT: %pattern_type.9c8: type = pattern_type %EqWith.type.831 [concrete] +// CHECK:STDOUT: %T.patt.fcb: %pattern_type.9c8 = symbolic_binding_pattern T, 1 [symbolic] +// CHECK:STDOUT: %x.param_patt.074: %pattern_type.2dd = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.234: %pattern_type.2dd = at_binding_pattern x, %x.param_patt.074 [concrete] +// CHECK:STDOUT: %y.param_patt.d86: %pattern_type.7fe = value_param_pattern [concrete] +// CHECK:STDOUT: %y.patt.fd9: %pattern_type.7fe = at_binding_pattern y, %y.param_patt.d86 [concrete] // CHECK:STDOUT: %complete_type.1d5: = complete_type_witness %EqWith.type.6ed [concrete] // CHECK:STDOUT: %EqWith.WithSelf.Equal.type.b99: type = fn_type @EqWith.WithSelf.Equal, @EqWith.WithSelf(%B1, %EqWith.facet.2d3) [concrete] // CHECK:STDOUT: %.bad: type = fn_type_with_self_type %EqWith.WithSelf.Equal.type.b99, %EqWith.facet.2d3 [concrete] @@ -687,23 +743,35 @@ fn Test(only_neq: Cpp.OnlyNeq, // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @EqWith.loc34(constants.%U, constants.%T) { +// CHECK:STDOUT: %U.patt.loc34_12.2 => constants.%U.patt // CHECK:STDOUT: %U.loc34_12.1 => constants.%U // CHECK:STDOUT: %EqWith.type.loc34_38.1 => constants.%EqWith.type.98ea86.2 -// CHECK:STDOUT: %T.loc34_22.1 => constants.%T // CHECK:STDOUT: %pattern_type.loc34_22 => constants.%pattern_type.3d4 +// CHECK:STDOUT: %T.patt.loc34_22.2 => constants.%T.patt.6b9 +// CHECK:STDOUT: %T.loc34_22.1 => constants.%T // CHECK:STDOUT: %T.as_type.loc34_44.1 => constants.%T.as_type // CHECK:STDOUT: %pattern_type.loc34_42 => constants.%pattern_type.e6374a.2 +// CHECK:STDOUT: %x.param_patt.loc34_42.2 => constants.%x.param_patt.aa2 +// CHECK:STDOUT: %x.patt.loc34_42.2 => constants.%x.patt.4e4 // CHECK:STDOUT: %pattern_type.loc34_48 => constants.%pattern_type.51d1c4.2 +// CHECK:STDOUT: %y.param_patt.loc34_48.2 => constants.%y.param_patt.be3 +// CHECK:STDOUT: %y.patt.loc34_48.2 => constants.%y.patt.b85 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @EqWith.loc34(constants.%B1, constants.%EqWith.facet.2d3) { +// CHECK:STDOUT: %U.patt.loc34_12.2 => constants.%U.patt // CHECK:STDOUT: %U.loc34_12.1 => constants.%B1 // CHECK:STDOUT: %EqWith.type.loc34_38.1 => constants.%EqWith.type.6ed -// CHECK:STDOUT: %T.loc34_22.1 => constants.%EqWith.facet.2d3 // CHECK:STDOUT: %pattern_type.loc34_22 => constants.%pattern_type.e16 +// CHECK:STDOUT: %T.patt.loc34_22.2 => constants.%T.patt.869 +// CHECK:STDOUT: %T.loc34_22.1 => constants.%EqWith.facet.2d3 // CHECK:STDOUT: %T.as_type.loc34_44.1 => constants.%A1 // CHECK:STDOUT: %pattern_type.loc34_42 => constants.%pattern_type.3b4 +// CHECK:STDOUT: %x.param_patt.loc34_42.2 => constants.%x.param_patt.c7f +// CHECK:STDOUT: %x.patt.loc34_42.2 => constants.%x.patt.4ff // CHECK:STDOUT: %pattern_type.loc34_48 => constants.%pattern_type.5b2 +// CHECK:STDOUT: %y.param_patt.loc34_48.2 => constants.%y.param_patt.9d7 +// CHECK:STDOUT: %y.patt.loc34_48.2 => constants.%y.patt.979 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc34_42 => constants.%complete_type.357 @@ -724,13 +792,19 @@ fn Test(only_neq: Cpp.OnlyNeq, // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @EqWith.loc34(constants.%A1, constants.%EqWith.facet.b94) { +// CHECK:STDOUT: %U.patt.loc34_12.2 => constants.%U.patt // CHECK:STDOUT: %U.loc34_12.1 => constants.%A1 // CHECK:STDOUT: %EqWith.type.loc34_38.1 => constants.%EqWith.type.dda -// CHECK:STDOUT: %T.loc34_22.1 => constants.%EqWith.facet.b94 // CHECK:STDOUT: %pattern_type.loc34_22 => constants.%pattern_type.a95 +// CHECK:STDOUT: %T.patt.loc34_22.2 => constants.%T.patt.b7f +// CHECK:STDOUT: %T.loc34_22.1 => constants.%EqWith.facet.b94 // CHECK:STDOUT: %T.as_type.loc34_44.1 => constants.%B1 // CHECK:STDOUT: %pattern_type.loc34_42 => constants.%pattern_type.5b2 +// CHECK:STDOUT: %x.param_patt.loc34_42.2 => constants.%x.param_patt.bff +// CHECK:STDOUT: %x.patt.loc34_42.2 => constants.%x.patt.f3d // CHECK:STDOUT: %pattern_type.loc34_48 => constants.%pattern_type.3b4 +// CHECK:STDOUT: %y.param_patt.loc34_48.2 => constants.%y.param_patt.257 +// CHECK:STDOUT: %y.patt.loc34_48.2 => constants.%y.patt.774 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc34_42 => constants.%complete_type.357 @@ -751,13 +825,19 @@ fn Test(only_neq: Cpp.OnlyNeq, // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @EqWith.loc34(constants.%A2, constants.%EqWith.facet.fe0) { +// CHECK:STDOUT: %U.patt.loc34_12.2 => constants.%U.patt // CHECK:STDOUT: %U.loc34_12.1 => constants.%A2 // CHECK:STDOUT: %EqWith.type.loc34_38.1 => constants.%EqWith.type.c63 -// CHECK:STDOUT: %T.loc34_22.1 => constants.%EqWith.facet.fe0 // CHECK:STDOUT: %pattern_type.loc34_22 => constants.%pattern_type.cbd +// CHECK:STDOUT: %T.patt.loc34_22.2 => constants.%T.patt.aaf +// CHECK:STDOUT: %T.loc34_22.1 => constants.%EqWith.facet.fe0 // CHECK:STDOUT: %T.as_type.loc34_44.1 => constants.%B2 // CHECK:STDOUT: %pattern_type.loc34_42 => constants.%pattern_type.d1e +// CHECK:STDOUT: %x.param_patt.loc34_42.2 => constants.%x.param_patt.0e6 +// CHECK:STDOUT: %x.patt.loc34_42.2 => constants.%x.patt.94e // CHECK:STDOUT: %pattern_type.loc34_48 => constants.%pattern_type.9f0 +// CHECK:STDOUT: %y.param_patt.loc34_48.2 => constants.%y.param_patt.a4f +// CHECK:STDOUT: %y.patt.loc34_48.2 => constants.%y.patt.912 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc34_42 => constants.%complete_type.357 @@ -778,13 +858,19 @@ fn Test(only_neq: Cpp.OnlyNeq, // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @EqWith.loc34(constants.%B3, constants.%EqWith.facet.34d) { +// CHECK:STDOUT: %U.patt.loc34_12.2 => constants.%U.patt // CHECK:STDOUT: %U.loc34_12.1 => constants.%B3 // CHECK:STDOUT: %EqWith.type.loc34_38.1 => constants.%EqWith.type.2e6 -// CHECK:STDOUT: %T.loc34_22.1 => constants.%EqWith.facet.34d // CHECK:STDOUT: %pattern_type.loc34_22 => constants.%pattern_type.2b2 +// CHECK:STDOUT: %T.patt.loc34_22.2 => constants.%T.patt.7d5 +// CHECK:STDOUT: %T.loc34_22.1 => constants.%EqWith.facet.34d // CHECK:STDOUT: %T.as_type.loc34_44.1 => constants.%A3 // CHECK:STDOUT: %pattern_type.loc34_42 => constants.%pattern_type.7fe +// CHECK:STDOUT: %x.param_patt.loc34_42.2 => constants.%x.param_patt.429 +// CHECK:STDOUT: %x.patt.loc34_42.2 => constants.%x.patt.6e2 // CHECK:STDOUT: %pattern_type.loc34_48 => constants.%pattern_type.2dd +// CHECK:STDOUT: %y.param_patt.loc34_48.2 => constants.%y.param_patt.b51 +// CHECK:STDOUT: %y.patt.loc34_48.2 => constants.%y.patt.7b8 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc34_42 => constants.%complete_type.357 @@ -805,13 +891,19 @@ fn Test(only_neq: Cpp.OnlyNeq, // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @EqWith.loc34(constants.%A3, constants.%EqWith.facet.2a4) { +// CHECK:STDOUT: %U.patt.loc34_12.2 => constants.%U.patt // CHECK:STDOUT: %U.loc34_12.1 => constants.%A3 // CHECK:STDOUT: %EqWith.type.loc34_38.1 => constants.%EqWith.type.831 -// CHECK:STDOUT: %T.loc34_22.1 => constants.%EqWith.facet.2a4 // CHECK:STDOUT: %pattern_type.loc34_22 => constants.%pattern_type.9c8 +// CHECK:STDOUT: %T.patt.loc34_22.2 => constants.%T.patt.fcb +// CHECK:STDOUT: %T.loc34_22.1 => constants.%EqWith.facet.2a4 // CHECK:STDOUT: %T.as_type.loc34_44.1 => constants.%B3 // CHECK:STDOUT: %pattern_type.loc34_42 => constants.%pattern_type.2dd +// CHECK:STDOUT: %x.param_patt.loc34_42.2 => constants.%x.param_patt.074 +// CHECK:STDOUT: %x.patt.loc34_42.2 => constants.%x.patt.234 // CHECK:STDOUT: %pattern_type.loc34_48 => constants.%pattern_type.7fe +// CHECK:STDOUT: %y.param_patt.loc34_48.2 => constants.%y.param_patt.d86 +// CHECK:STDOUT: %y.patt.loc34_48.2 => constants.%y.patt.fd9 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc34_42 => constants.%complete_type.357 diff --git a/toolchain/check/testdata/interop/cpp/operators/operators.carbon b/toolchain/check/testdata/interop/cpp/operators/operators.carbon index 734f57a812ab..f03f0ca833a5 100644 --- a/toolchain/check/testdata/interop/cpp/operators/operators.carbon +++ b/toolchain/check/testdata/interop/cpp/operators/operators.carbon @@ -1025,6 +1025,8 @@ fn F() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %pattern_type.bbc: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.bbc = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.bbc = var_pattern %c.patt [concrete] // CHECK:STDOUT: %C.C.cpp_overload_set.type: type = cpp_overload_set_type @C.C.cpp_overload_set [concrete] // CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete] // CHECK:STDOUT: %ptr.0a2: type = ptr_type %C [concrete] @@ -1034,8 +1036,10 @@ fn F() { // CHECK:STDOUT: %cpp_operator.3fb16d.1: %cpp_operator.type.da53e5.1 = struct_value () [concrete] // CHECK:STDOUT: %cpp_operator.type.da53e5.2: type = fn_type @cpp_operator.2 [concrete] // CHECK:STDOUT: %cpp_operator.3fb16d.2: %cpp_operator.type.da53e5.2 = struct_value () [concrete] +// CHECK:STDOUT: %minus.patt: %pattern_type.bbc = value_binding_pattern minus [concrete] // CHECK:STDOUT: %operator_Minus__carbon_thunk.type: type = fn_type @operator_Minus__carbon_thunk [concrete] // CHECK:STDOUT: %operator_Minus__carbon_thunk: %operator_Minus__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %complement.patt: %pattern_type.bbc = value_binding_pattern complement [concrete] // CHECK:STDOUT: %operator_Tilde__carbon_thunk.type: type = fn_type @operator_Tilde__carbon_thunk [concrete] // CHECK:STDOUT: %operator_Tilde__carbon_thunk: %operator_Tilde__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %C.cpp_destructor.type: type = fn_type @C.cpp_destructor [concrete] @@ -1086,8 +1090,8 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.bbc = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.bbc = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.bbc = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type.bbc = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt // CHECK:STDOUT: %Cpp.ref.loc8_18: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] @@ -1108,7 +1112,7 @@ fn F() { // CHECK:STDOUT: %c.ref.loc12: ref %C = name_ref c, %c // CHECK:STDOUT: %cpp_operator.call.loc12: ref %C = call imports.%cpp_operator.decl.5ce91d.2(%c.ref.loc12) // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %minus.patt: %pattern_type.bbc = value_binding_pattern minus [concrete] +// CHECK:STDOUT: %minus.patt: %pattern_type.bbc = value_binding_pattern minus [concrete = constants.%minus.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.ref.loc15: ref %C = name_ref c, %c // CHECK:STDOUT: %.loc15_29.1: ref %C = temporary_storage @@ -1118,15 +1122,15 @@ fn F() { // CHECK:STDOUT: %addr.loc15_29.2: %ptr.0a2 = addr_of %.loc15_29.1 // CHECK:STDOUT: %operator_Minus__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_Minus__carbon_thunk.decl(%addr.loc15_29.1, %addr.loc15_29.2) // CHECK:STDOUT: %.loc15_29.2: init %C to %.loc15_29.1 = mark_in_place_init %operator_Minus__carbon_thunk.call +// CHECK:STDOUT: %.loc15_29.3: ref %C = temporary %.loc15_29.1, %.loc15_29.2 +// CHECK:STDOUT: %.loc15_29.4: %C = acquire_value %.loc15_29.3 // CHECK:STDOUT: %.loc15_24: type = splice_block %C.ref.loc15 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc15: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref.loc15: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc15_29.3: ref %C = temporary %.loc15_29.1, %.loc15_29.2 -// CHECK:STDOUT: %.loc15_29.4: %C = acquire_value %.loc15_29.3 // CHECK:STDOUT: %minus: %C = value_binding minus, %.loc15_29.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %complement.patt: %pattern_type.bbc = value_binding_pattern complement [concrete] +// CHECK:STDOUT: %complement.patt: %pattern_type.bbc = value_binding_pattern complement [concrete = constants.%complement.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.ref.loc18: ref %C = name_ref c, %c // CHECK:STDOUT: %.loc18_34.1: ref %C = temporary_storage @@ -1136,12 +1140,12 @@ fn F() { // CHECK:STDOUT: %addr.loc18_34.2: %ptr.0a2 = addr_of %.loc18_34.1 // CHECK:STDOUT: %operator_Tilde__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_Tilde__carbon_thunk.decl(%addr.loc18_34.1, %addr.loc18_34.2) // CHECK:STDOUT: %.loc18_34.2: init %C to %.loc18_34.1 = mark_in_place_init %operator_Tilde__carbon_thunk.call +// CHECK:STDOUT: %.loc18_34.3: ref %C = temporary %.loc18_34.1, %.loc18_34.2 +// CHECK:STDOUT: %.loc18_34.4: %C = acquire_value %.loc18_34.3 // CHECK:STDOUT: %.loc18_29: type = splice_block %C.ref.loc18 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc18: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref.loc18: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc18_34.3: ref %C = temporary %.loc18_34.1, %.loc18_34.2 -// CHECK:STDOUT: %.loc18_34.4: %C = acquire_value %.loc18_34.3 // CHECK:STDOUT: %complement: %C = value_binding complement, %.loc18_34.4 // CHECK:STDOUT: // CHECK:STDOUT: %C.Op.bound.loc18: = bound_method %.loc18_34.3, constants.%C.Op @@ -1165,27 +1169,40 @@ fn F() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %pattern_type.bbc: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = ref_binding_pattern c1 [concrete] +// CHECK:STDOUT: %c1.var_patt: %pattern_type.bbc = var_pattern %c1.patt [concrete] // CHECK:STDOUT: %C.C.cpp_overload_set.type: type = cpp_overload_set_type @C.C.cpp_overload_set [concrete] // CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete] // CHECK:STDOUT: %ptr.0a2: type = ptr_type %C [concrete] // CHECK:STDOUT: %C__carbon_thunk.type: type = fn_type @C__carbon_thunk [concrete] // CHECK:STDOUT: %C__carbon_thunk: %C__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = ref_binding_pattern c2 [concrete] +// CHECK:STDOUT: %c2.var_patt: %pattern_type.bbc = var_pattern %c2.patt [concrete] +// CHECK:STDOUT: %addition.patt: %pattern_type.bbc = value_binding_pattern addition [concrete] // CHECK:STDOUT: %operator_Plus__carbon_thunk.type: type = fn_type @operator_Plus__carbon_thunk [concrete] // CHECK:STDOUT: %operator_Plus__carbon_thunk: %operator_Plus__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %subtraction.patt: %pattern_type.bbc = value_binding_pattern subtraction [concrete] // CHECK:STDOUT: %operator_Minus__carbon_thunk.type: type = fn_type @operator_Minus__carbon_thunk [concrete] // CHECK:STDOUT: %operator_Minus__carbon_thunk: %operator_Minus__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %multiplication.patt: %pattern_type.bbc = value_binding_pattern multiplication [concrete] // CHECK:STDOUT: %operator_Star__carbon_thunk.type: type = fn_type @operator_Star__carbon_thunk [concrete] // CHECK:STDOUT: %operator_Star__carbon_thunk: %operator_Star__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %division.patt: %pattern_type.bbc = value_binding_pattern division [concrete] // CHECK:STDOUT: %operator_Slash__carbon_thunk.type: type = fn_type @operator_Slash__carbon_thunk [concrete] // CHECK:STDOUT: %operator_Slash__carbon_thunk: %operator_Slash__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %modulo.patt: %pattern_type.bbc = value_binding_pattern modulo [concrete] // CHECK:STDOUT: %operator_Percent__carbon_thunk.type: type = fn_type @operator_Percent__carbon_thunk [concrete] // CHECK:STDOUT: %operator_Percent__carbon_thunk: %operator_Percent__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %bitwise_and.patt: %pattern_type.bbc = value_binding_pattern bitwise_and [concrete] // CHECK:STDOUT: %operator_Amp__carbon_thunk.type: type = fn_type @operator_Amp__carbon_thunk [concrete] // CHECK:STDOUT: %operator_Amp__carbon_thunk: %operator_Amp__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %bitwise_or.patt: %pattern_type.bbc = value_binding_pattern bitwise_or [concrete] // CHECK:STDOUT: %operator_Pipe__carbon_thunk.type: type = fn_type @operator_Pipe__carbon_thunk [concrete] // CHECK:STDOUT: %operator_Pipe__carbon_thunk: %operator_Pipe__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %bitwise_xor.patt: %pattern_type.bbc = value_binding_pattern bitwise_xor [concrete] // CHECK:STDOUT: %operator_Caret__carbon_thunk.type: type = fn_type @operator_Caret__carbon_thunk [concrete] // CHECK:STDOUT: %operator_Caret__carbon_thunk: %operator_Caret__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %left_shift.patt: %pattern_type.bbc = value_binding_pattern left_shift [concrete] // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] @@ -1206,6 +1223,7 @@ fn F() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39, @Core.IntLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete] // CHECK:STDOUT: %bound_method.763: = bound_method %int_3.1ba, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_3.410: %i32 = int_value 3 [concrete] +// CHECK:STDOUT: %right_shift.patt: %pattern_type.bbc = value_binding_pattern right_shift [concrete] // CHECK:STDOUT: %int_5.64b: Core.IntLiteral = int_value 5 [concrete] // CHECK:STDOUT: %operator_GreaterGreater__carbon_thunk.type: type = fn_type @operator_GreaterGreater__carbon_thunk [concrete] // CHECK:STDOUT: %operator_GreaterGreater__carbon_thunk: %operator_GreaterGreater__carbon_thunk.type = struct_value () [concrete] @@ -1233,19 +1251,26 @@ fn F() { // CHECK:STDOUT: %cpp_operator.type.da53e5.20: type = fn_type @cpp_operator.20 [concrete] // CHECK:STDOUT: %cpp_operator.3fb16d.20: %cpp_operator.type.da53e5.20 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] +// CHECK:STDOUT: %equal.patt: %pattern_type.831 = value_binding_pattern equal [concrete] // CHECK:STDOUT: %ptr.bb2: type = ptr_type bool [concrete] // CHECK:STDOUT: %operator_EqualEqual__carbon_thunk.type: type = fn_type @operator_EqualEqual__carbon_thunk [concrete] // CHECK:STDOUT: %operator_EqualEqual__carbon_thunk: %operator_EqualEqual__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %not_equal.patt: %pattern_type.831 = value_binding_pattern not_equal [concrete] // CHECK:STDOUT: %operator_ExclaimEqual__carbon_thunk.type: type = fn_type @operator_ExclaimEqual__carbon_thunk [concrete] // CHECK:STDOUT: %operator_ExclaimEqual__carbon_thunk: %operator_ExclaimEqual__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %greater_than.patt: %pattern_type.831 = value_binding_pattern greater_than [concrete] // CHECK:STDOUT: %operator_Greater__carbon_thunk.type: type = fn_type @operator_Greater__carbon_thunk [concrete] // CHECK:STDOUT: %operator_Greater__carbon_thunk: %operator_Greater__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %less_than.patt: %pattern_type.831 = value_binding_pattern less_than [concrete] // CHECK:STDOUT: %operator_Less__carbon_thunk.type: type = fn_type @operator_Less__carbon_thunk [concrete] // CHECK:STDOUT: %operator_Less__carbon_thunk: %operator_Less__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %greater_than_or_equal.patt: %pattern_type.831 = value_binding_pattern greater_than_or_equal [concrete] // CHECK:STDOUT: %operator_GreaterEqual__carbon_thunk.type: type = fn_type @operator_GreaterEqual__carbon_thunk [concrete] // CHECK:STDOUT: %operator_GreaterEqual__carbon_thunk: %operator_GreaterEqual__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %less_than_or_equal.patt: %pattern_type.831 = value_binding_pattern less_than_or_equal [concrete] // CHECK:STDOUT: %operator_LessEqual__carbon_thunk.type: type = fn_type @operator_LessEqual__carbon_thunk [concrete] // CHECK:STDOUT: %operator_LessEqual__carbon_thunk: %operator_LessEqual__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %index.patt: %pattern_type.6b6 = value_binding_pattern index [concrete] // CHECK:STDOUT: %int_42.20e: Core.IntLiteral = int_value 42 [concrete] // CHECK:STDOUT: %C.cpp_operator.type: type = fn_type @C.cpp_operator [concrete] // CHECK:STDOUT: %C.cpp_operator: %C.cpp_operator.type = struct_value () [concrete] @@ -1419,8 +1444,8 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = ref_binding_pattern c1 [concrete] -// CHECK:STDOUT: %c1.var_patt: %pattern_type.bbc = var_pattern %c1.patt [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = ref_binding_pattern c1 [concrete = constants.%c1.patt] +// CHECK:STDOUT: %c1.var_patt: %pattern_type.bbc = var_pattern %c1.patt [concrete = constants.%c1.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c1.var: ref %C = var %c1.var_patt // CHECK:STDOUT: %Cpp.ref.loc8_19: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] @@ -1437,8 +1462,8 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %c1: ref %C = ref_binding c1, %c1.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = ref_binding_pattern c2 [concrete] -// CHECK:STDOUT: %c2.var_patt: %pattern_type.bbc = var_pattern %c2.patt [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = ref_binding_pattern c2 [concrete = constants.%c2.patt] +// CHECK:STDOUT: %c2.var_patt: %pattern_type.bbc = var_pattern %c2.patt [concrete = constants.%c2.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c2.var: ref %C = var %c2.var_patt // CHECK:STDOUT: %Cpp.ref.loc9_19: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] @@ -1455,7 +1480,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %c2: ref %C = ref_binding c2, %c2.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %addition.patt: %pattern_type.bbc = value_binding_pattern addition [concrete] +// CHECK:STDOUT: %addition.patt: %pattern_type.bbc = value_binding_pattern addition [concrete = constants.%addition.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c1.ref.loc12: ref %C = name_ref c1, %c1 // CHECK:STDOUT: %c2.ref.loc12: ref %C = name_ref c2, %c2 @@ -1469,15 +1494,15 @@ fn F() { // CHECK:STDOUT: %addr.loc12_35.3: %ptr.0a2 = addr_of %.loc12_35.1 // CHECK:STDOUT: %operator_Plus__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_Plus__carbon_thunk.decl(%addr.loc12_35.1, %addr.loc12_35.2, %addr.loc12_35.3) // CHECK:STDOUT: %.loc12_35.2: init %C to %.loc12_35.1 = mark_in_place_init %operator_Plus__carbon_thunk.call +// CHECK:STDOUT: %.loc12_35.3: ref %C = temporary %.loc12_35.1, %.loc12_35.2 +// CHECK:STDOUT: %.loc12_35.4: %C = acquire_value %.loc12_35.3 // CHECK:STDOUT: %.loc12_27: type = splice_block %C.ref.loc12 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc12: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref.loc12: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc12_35.3: ref %C = temporary %.loc12_35.1, %.loc12_35.2 -// CHECK:STDOUT: %.loc12_35.4: %C = acquire_value %.loc12_35.3 // CHECK:STDOUT: %addition: %C = value_binding addition, %.loc12_35.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %subtraction.patt: %pattern_type.bbc = value_binding_pattern subtraction [concrete] +// CHECK:STDOUT: %subtraction.patt: %pattern_type.bbc = value_binding_pattern subtraction [concrete = constants.%subtraction.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c1.ref.loc13: ref %C = name_ref c1, %c1 // CHECK:STDOUT: %c2.ref.loc13: ref %C = name_ref c2, %c2 @@ -1491,15 +1516,15 @@ fn F() { // CHECK:STDOUT: %addr.loc13_38.3: %ptr.0a2 = addr_of %.loc13_38.1 // CHECK:STDOUT: %operator_Minus__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_Minus__carbon_thunk.decl(%addr.loc13_38.1, %addr.loc13_38.2, %addr.loc13_38.3) // CHECK:STDOUT: %.loc13_38.2: init %C to %.loc13_38.1 = mark_in_place_init %operator_Minus__carbon_thunk.call +// CHECK:STDOUT: %.loc13_38.3: ref %C = temporary %.loc13_38.1, %.loc13_38.2 +// CHECK:STDOUT: %.loc13_38.4: %C = acquire_value %.loc13_38.3 // CHECK:STDOUT: %.loc13_30: type = splice_block %C.ref.loc13 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc13: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref.loc13: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc13_38.3: ref %C = temporary %.loc13_38.1, %.loc13_38.2 -// CHECK:STDOUT: %.loc13_38.4: %C = acquire_value %.loc13_38.3 // CHECK:STDOUT: %subtraction: %C = value_binding subtraction, %.loc13_38.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %multiplication.patt: %pattern_type.bbc = value_binding_pattern multiplication [concrete] +// CHECK:STDOUT: %multiplication.patt: %pattern_type.bbc = value_binding_pattern multiplication [concrete = constants.%multiplication.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c1.ref.loc14: ref %C = name_ref c1, %c1 // CHECK:STDOUT: %c2.ref.loc14: ref %C = name_ref c2, %c2 @@ -1513,15 +1538,15 @@ fn F() { // CHECK:STDOUT: %addr.loc14_41.3: %ptr.0a2 = addr_of %.loc14_41.1 // CHECK:STDOUT: %operator_Star__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_Star__carbon_thunk.decl(%addr.loc14_41.1, %addr.loc14_41.2, %addr.loc14_41.3) // CHECK:STDOUT: %.loc14_41.2: init %C to %.loc14_41.1 = mark_in_place_init %operator_Star__carbon_thunk.call +// CHECK:STDOUT: %.loc14_41.3: ref %C = temporary %.loc14_41.1, %.loc14_41.2 +// CHECK:STDOUT: %.loc14_41.4: %C = acquire_value %.loc14_41.3 // CHECK:STDOUT: %.loc14_33: type = splice_block %C.ref.loc14 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc14: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref.loc14: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc14_41.3: ref %C = temporary %.loc14_41.1, %.loc14_41.2 -// CHECK:STDOUT: %.loc14_41.4: %C = acquire_value %.loc14_41.3 // CHECK:STDOUT: %multiplication: %C = value_binding multiplication, %.loc14_41.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %division.patt: %pattern_type.bbc = value_binding_pattern division [concrete] +// CHECK:STDOUT: %division.patt: %pattern_type.bbc = value_binding_pattern division [concrete = constants.%division.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c1.ref.loc15: ref %C = name_ref c1, %c1 // CHECK:STDOUT: %c2.ref.loc15: ref %C = name_ref c2, %c2 @@ -1535,15 +1560,15 @@ fn F() { // CHECK:STDOUT: %addr.loc15_35.3: %ptr.0a2 = addr_of %.loc15_35.1 // CHECK:STDOUT: %operator_Slash__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_Slash__carbon_thunk.decl(%addr.loc15_35.1, %addr.loc15_35.2, %addr.loc15_35.3) // CHECK:STDOUT: %.loc15_35.2: init %C to %.loc15_35.1 = mark_in_place_init %operator_Slash__carbon_thunk.call +// CHECK:STDOUT: %.loc15_35.3: ref %C = temporary %.loc15_35.1, %.loc15_35.2 +// CHECK:STDOUT: %.loc15_35.4: %C = acquire_value %.loc15_35.3 // CHECK:STDOUT: %.loc15_27: type = splice_block %C.ref.loc15 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc15: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref.loc15: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc15_35.3: ref %C = temporary %.loc15_35.1, %.loc15_35.2 -// CHECK:STDOUT: %.loc15_35.4: %C = acquire_value %.loc15_35.3 // CHECK:STDOUT: %division: %C = value_binding division, %.loc15_35.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %modulo.patt: %pattern_type.bbc = value_binding_pattern modulo [concrete] +// CHECK:STDOUT: %modulo.patt: %pattern_type.bbc = value_binding_pattern modulo [concrete = constants.%modulo.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c1.ref.loc16: ref %C = name_ref c1, %c1 // CHECK:STDOUT: %c2.ref.loc16: ref %C = name_ref c2, %c2 @@ -1557,15 +1582,15 @@ fn F() { // CHECK:STDOUT: %addr.loc16_33.3: %ptr.0a2 = addr_of %.loc16_33.1 // CHECK:STDOUT: %operator_Percent__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_Percent__carbon_thunk.decl(%addr.loc16_33.1, %addr.loc16_33.2, %addr.loc16_33.3) // CHECK:STDOUT: %.loc16_33.2: init %C to %.loc16_33.1 = mark_in_place_init %operator_Percent__carbon_thunk.call +// CHECK:STDOUT: %.loc16_33.3: ref %C = temporary %.loc16_33.1, %.loc16_33.2 +// CHECK:STDOUT: %.loc16_33.4: %C = acquire_value %.loc16_33.3 // CHECK:STDOUT: %.loc16_25: type = splice_block %C.ref.loc16 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc16: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref.loc16: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc16_33.3: ref %C = temporary %.loc16_33.1, %.loc16_33.2 -// CHECK:STDOUT: %.loc16_33.4: %C = acquire_value %.loc16_33.3 // CHECK:STDOUT: %modulo: %C = value_binding modulo, %.loc16_33.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %bitwise_and.patt: %pattern_type.bbc = value_binding_pattern bitwise_and [concrete] +// CHECK:STDOUT: %bitwise_and.patt: %pattern_type.bbc = value_binding_pattern bitwise_and [concrete = constants.%bitwise_and.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c1.ref.loc19: ref %C = name_ref c1, %c1 // CHECK:STDOUT: %c2.ref.loc19: ref %C = name_ref c2, %c2 @@ -1579,15 +1604,15 @@ fn F() { // CHECK:STDOUT: %addr.loc19_38.3: %ptr.0a2 = addr_of %.loc19_38.1 // CHECK:STDOUT: %operator_Amp__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_Amp__carbon_thunk.decl(%addr.loc19_38.1, %addr.loc19_38.2, %addr.loc19_38.3) // CHECK:STDOUT: %.loc19_38.2: init %C to %.loc19_38.1 = mark_in_place_init %operator_Amp__carbon_thunk.call +// CHECK:STDOUT: %.loc19_38.3: ref %C = temporary %.loc19_38.1, %.loc19_38.2 +// CHECK:STDOUT: %.loc19_38.4: %C = acquire_value %.loc19_38.3 // CHECK:STDOUT: %.loc19_30: type = splice_block %C.ref.loc19 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc19: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref.loc19: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc19_38.3: ref %C = temporary %.loc19_38.1, %.loc19_38.2 -// CHECK:STDOUT: %.loc19_38.4: %C = acquire_value %.loc19_38.3 // CHECK:STDOUT: %bitwise_and: %C = value_binding bitwise_and, %.loc19_38.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %bitwise_or.patt: %pattern_type.bbc = value_binding_pattern bitwise_or [concrete] +// CHECK:STDOUT: %bitwise_or.patt: %pattern_type.bbc = value_binding_pattern bitwise_or [concrete = constants.%bitwise_or.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c1.ref.loc20: ref %C = name_ref c1, %c1 // CHECK:STDOUT: %c2.ref.loc20: ref %C = name_ref c2, %c2 @@ -1601,15 +1626,15 @@ fn F() { // CHECK:STDOUT: %addr.loc20_37.3: %ptr.0a2 = addr_of %.loc20_37.1 // CHECK:STDOUT: %operator_Pipe__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_Pipe__carbon_thunk.decl(%addr.loc20_37.1, %addr.loc20_37.2, %addr.loc20_37.3) // CHECK:STDOUT: %.loc20_37.2: init %C to %.loc20_37.1 = mark_in_place_init %operator_Pipe__carbon_thunk.call +// CHECK:STDOUT: %.loc20_37.3: ref %C = temporary %.loc20_37.1, %.loc20_37.2 +// CHECK:STDOUT: %.loc20_37.4: %C = acquire_value %.loc20_37.3 // CHECK:STDOUT: %.loc20_29: type = splice_block %C.ref.loc20 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc20: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref.loc20: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc20_37.3: ref %C = temporary %.loc20_37.1, %.loc20_37.2 -// CHECK:STDOUT: %.loc20_37.4: %C = acquire_value %.loc20_37.3 // CHECK:STDOUT: %bitwise_or: %C = value_binding bitwise_or, %.loc20_37.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %bitwise_xor.patt: %pattern_type.bbc = value_binding_pattern bitwise_xor [concrete] +// CHECK:STDOUT: %bitwise_xor.patt: %pattern_type.bbc = value_binding_pattern bitwise_xor [concrete = constants.%bitwise_xor.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c1.ref.loc21: ref %C = name_ref c1, %c1 // CHECK:STDOUT: %c2.ref.loc21: ref %C = name_ref c2, %c2 @@ -1623,15 +1648,15 @@ fn F() { // CHECK:STDOUT: %addr.loc21_38.3: %ptr.0a2 = addr_of %.loc21_38.1 // CHECK:STDOUT: %operator_Caret__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_Caret__carbon_thunk.decl(%addr.loc21_38.1, %addr.loc21_38.2, %addr.loc21_38.3) // CHECK:STDOUT: %.loc21_38.2: init %C to %.loc21_38.1 = mark_in_place_init %operator_Caret__carbon_thunk.call +// CHECK:STDOUT: %.loc21_38.3: ref %C = temporary %.loc21_38.1, %.loc21_38.2 +// CHECK:STDOUT: %.loc21_38.4: %C = acquire_value %.loc21_38.3 // CHECK:STDOUT: %.loc21_30: type = splice_block %C.ref.loc21 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc21: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref.loc21: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc21_38.3: ref %C = temporary %.loc21_38.1, %.loc21_38.2 -// CHECK:STDOUT: %.loc21_38.4: %C = acquire_value %.loc21_38.3 // CHECK:STDOUT: %bitwise_xor: %C = value_binding bitwise_xor, %.loc21_38.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %left_shift.patt: %pattern_type.bbc = value_binding_pattern left_shift [concrete] +// CHECK:STDOUT: %left_shift.patt: %pattern_type.bbc = value_binding_pattern left_shift [concrete = constants.%left_shift.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c1.ref.loc22: ref %C = name_ref c1, %c1 // CHECK:STDOUT: %int_3.loc22: Core.IntLiteral = int_value 3 [concrete = constants.%int_3.1ba] @@ -1649,15 +1674,15 @@ fn F() { // CHECK:STDOUT: %addr.loc22_37.2: %ptr.0a2 = addr_of %.loc22_37.1 // CHECK:STDOUT: %operator_LessLess__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_LessLess__carbon_thunk.decl(%addr.loc22_37.1, %.loc22_40.2, %addr.loc22_37.2) // CHECK:STDOUT: %.loc22_37.2: init %C to %.loc22_37.1 = mark_in_place_init %operator_LessLess__carbon_thunk.call +// CHECK:STDOUT: %.loc22_37.3: ref %C = temporary %.loc22_37.1, %.loc22_37.2 +// CHECK:STDOUT: %.loc22_37.4: %C = acquire_value %.loc22_37.3 // CHECK:STDOUT: %.loc22_29: type = splice_block %C.ref.loc22 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc22: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref.loc22: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc22_37.3: ref %C = temporary %.loc22_37.1, %.loc22_37.2 -// CHECK:STDOUT: %.loc22_37.4: %C = acquire_value %.loc22_37.3 // CHECK:STDOUT: %left_shift: %C = value_binding left_shift, %.loc22_37.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %right_shift.patt: %pattern_type.bbc = value_binding_pattern right_shift [concrete] +// CHECK:STDOUT: %right_shift.patt: %pattern_type.bbc = value_binding_pattern right_shift [concrete = constants.%right_shift.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c1.ref.loc23: ref %C = name_ref c1, %c1 // CHECK:STDOUT: %int_5.loc23: Core.IntLiteral = int_value 5 [concrete = constants.%int_5.64b] @@ -1675,12 +1700,12 @@ fn F() { // CHECK:STDOUT: %addr.loc23_38.2: %ptr.0a2 = addr_of %.loc23_38.1 // CHECK:STDOUT: %operator_GreaterGreater__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_GreaterGreater__carbon_thunk.decl(%addr.loc23_38.1, %.loc23_41.2, %addr.loc23_38.2) // CHECK:STDOUT: %.loc23_38.2: init %C to %.loc23_38.1 = mark_in_place_init %operator_GreaterGreater__carbon_thunk.call +// CHECK:STDOUT: %.loc23_38.3: ref %C = temporary %.loc23_38.1, %.loc23_38.2 +// CHECK:STDOUT: %.loc23_38.4: %C = acquire_value %.loc23_38.3 // CHECK:STDOUT: %.loc23_30: type = splice_block %C.ref.loc23 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc23: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref.loc23: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc23_38.3: ref %C = temporary %.loc23_38.1, %.loc23_38.2 -// CHECK:STDOUT: %.loc23_38.4: %C = acquire_value %.loc23_38.3 // CHECK:STDOUT: %right_shift: %C = value_binding right_shift, %.loc23_38.4 // CHECK:STDOUT: %c1.ref.loc26: ref %C = name_ref c1, %c1 // CHECK:STDOUT: %c2.ref.loc26: ref %C = name_ref c2, %c2 @@ -1751,7 +1776,7 @@ fn F() { // CHECK:STDOUT: %.loc37_10.2: %i32 = converted %int_5.loc37, %.loc37_10.1 [concrete = constants.%int_5.eef] // CHECK:STDOUT: %cpp_operator.call.loc37: ref %C = call imports.%cpp_operator.decl.5ce91d.20(%c1.ref.loc37, %.loc37_10.2) // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %equal.patt: %pattern_type.831 = value_binding_pattern equal [concrete] +// CHECK:STDOUT: %equal.patt: %pattern_type.831 = value_binding_pattern equal [concrete = constants.%equal.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c1.ref.loc40: ref %C = name_ref c1, %c1 // CHECK:STDOUT: %c2.ref.loc40: ref %C = name_ref c2, %c2 @@ -1765,12 +1790,12 @@ fn F() { // CHECK:STDOUT: %addr.loc40_31.3: %ptr.bb2 = addr_of %.loc40_31.1 // CHECK:STDOUT: %operator_EqualEqual__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_EqualEqual__carbon_thunk.decl(%addr.loc40_31.1, %addr.loc40_31.2, %addr.loc40_31.3) // CHECK:STDOUT: %.loc40_31.2: init bool to %.loc40_31.1 = mark_in_place_init %operator_EqualEqual__carbon_thunk.call -// CHECK:STDOUT: %.loc40_21: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc40_31.3: ref bool = temporary %.loc40_31.1, %.loc40_31.2 // CHECK:STDOUT: %.loc40_31.4: bool = acquire_value %.loc40_31.3 +// CHECK:STDOUT: %.loc40_21: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %equal: bool = value_binding equal, %.loc40_31.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %not_equal.patt: %pattern_type.831 = value_binding_pattern not_equal [concrete] +// CHECK:STDOUT: %not_equal.patt: %pattern_type.831 = value_binding_pattern not_equal [concrete = constants.%not_equal.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c1.ref.loc41: ref %C = name_ref c1, %c1 // CHECK:STDOUT: %c2.ref.loc41: ref %C = name_ref c2, %c2 @@ -1784,12 +1809,12 @@ fn F() { // CHECK:STDOUT: %addr.loc41_35.3: %ptr.bb2 = addr_of %.loc41_35.1 // CHECK:STDOUT: %operator_ExclaimEqual__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_ExclaimEqual__carbon_thunk.decl(%addr.loc41_35.1, %addr.loc41_35.2, %addr.loc41_35.3) // CHECK:STDOUT: %.loc41_35.2: init bool to %.loc41_35.1 = mark_in_place_init %operator_ExclaimEqual__carbon_thunk.call -// CHECK:STDOUT: %.loc41_25: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc41_35.3: ref bool = temporary %.loc41_35.1, %.loc41_35.2 // CHECK:STDOUT: %.loc41_35.4: bool = acquire_value %.loc41_35.3 +// CHECK:STDOUT: %.loc41_25: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %not_equal: bool = value_binding not_equal, %.loc41_35.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %greater_than.patt: %pattern_type.831 = value_binding_pattern greater_than [concrete] +// CHECK:STDOUT: %greater_than.patt: %pattern_type.831 = value_binding_pattern greater_than [concrete = constants.%greater_than.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c1.ref.loc42: ref %C = name_ref c1, %c1 // CHECK:STDOUT: %c2.ref.loc42: ref %C = name_ref c2, %c2 @@ -1803,12 +1828,12 @@ fn F() { // CHECK:STDOUT: %addr.loc42_38.3: %ptr.bb2 = addr_of %.loc42_38.1 // CHECK:STDOUT: %operator_Greater__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_Greater__carbon_thunk.decl(%addr.loc42_38.1, %addr.loc42_38.2, %addr.loc42_38.3) // CHECK:STDOUT: %.loc42_38.2: init bool to %.loc42_38.1 = mark_in_place_init %operator_Greater__carbon_thunk.call -// CHECK:STDOUT: %.loc42_28: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc42_38.3: ref bool = temporary %.loc42_38.1, %.loc42_38.2 // CHECK:STDOUT: %.loc42_38.4: bool = acquire_value %.loc42_38.3 +// CHECK:STDOUT: %.loc42_28: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %greater_than: bool = value_binding greater_than, %.loc42_38.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %less_than.patt: %pattern_type.831 = value_binding_pattern less_than [concrete] +// CHECK:STDOUT: %less_than.patt: %pattern_type.831 = value_binding_pattern less_than [concrete = constants.%less_than.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c1.ref.loc43: ref %C = name_ref c1, %c1 // CHECK:STDOUT: %c2.ref.loc43: ref %C = name_ref c2, %c2 @@ -1822,12 +1847,12 @@ fn F() { // CHECK:STDOUT: %addr.loc43_35.3: %ptr.bb2 = addr_of %.loc43_35.1 // CHECK:STDOUT: %operator_Less__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_Less__carbon_thunk.decl(%addr.loc43_35.1, %addr.loc43_35.2, %addr.loc43_35.3) // CHECK:STDOUT: %.loc43_35.2: init bool to %.loc43_35.1 = mark_in_place_init %operator_Less__carbon_thunk.call -// CHECK:STDOUT: %.loc43_25: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc43_35.3: ref bool = temporary %.loc43_35.1, %.loc43_35.2 // CHECK:STDOUT: %.loc43_35.4: bool = acquire_value %.loc43_35.3 +// CHECK:STDOUT: %.loc43_25: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %less_than: bool = value_binding less_than, %.loc43_35.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %greater_than_or_equal.patt: %pattern_type.831 = value_binding_pattern greater_than_or_equal [concrete] +// CHECK:STDOUT: %greater_than_or_equal.patt: %pattern_type.831 = value_binding_pattern greater_than_or_equal [concrete = constants.%greater_than_or_equal.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c1.ref.loc44: ref %C = name_ref c1, %c1 // CHECK:STDOUT: %c2.ref.loc44: ref %C = name_ref c2, %c2 @@ -1841,12 +1866,12 @@ fn F() { // CHECK:STDOUT: %addr.loc44_47.3: %ptr.bb2 = addr_of %.loc44_47.1 // CHECK:STDOUT: %operator_GreaterEqual__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_GreaterEqual__carbon_thunk.decl(%addr.loc44_47.1, %addr.loc44_47.2, %addr.loc44_47.3) // CHECK:STDOUT: %.loc44_47.2: init bool to %.loc44_47.1 = mark_in_place_init %operator_GreaterEqual__carbon_thunk.call -// CHECK:STDOUT: %.loc44_37: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc44_47.3: ref bool = temporary %.loc44_47.1, %.loc44_47.2 // CHECK:STDOUT: %.loc44_47.4: bool = acquire_value %.loc44_47.3 +// CHECK:STDOUT: %.loc44_37: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %greater_than_or_equal: bool = value_binding greater_than_or_equal, %.loc44_47.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %less_than_or_equal.patt: %pattern_type.831 = value_binding_pattern less_than_or_equal [concrete] +// CHECK:STDOUT: %less_than_or_equal.patt: %pattern_type.831 = value_binding_pattern less_than_or_equal [concrete = constants.%less_than_or_equal.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c1.ref.loc45: ref %C = name_ref c1, %c1 // CHECK:STDOUT: %c2.ref.loc45: ref %C = name_ref c2, %c2 @@ -1860,12 +1885,12 @@ fn F() { // CHECK:STDOUT: %addr.loc45_44.3: %ptr.bb2 = addr_of %.loc45_44.1 // CHECK:STDOUT: %operator_LessEqual__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_LessEqual__carbon_thunk.decl(%addr.loc45_44.1, %addr.loc45_44.2, %addr.loc45_44.3) // CHECK:STDOUT: %.loc45_44.2: init bool to %.loc45_44.1 = mark_in_place_init %operator_LessEqual__carbon_thunk.call -// CHECK:STDOUT: %.loc45_34: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc45_44.3: ref bool = temporary %.loc45_44.1, %.loc45_44.2 // CHECK:STDOUT: %.loc45_44.4: bool = acquire_value %.loc45_44.3 +// CHECK:STDOUT: %.loc45_34: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %less_than_or_equal: bool = value_binding less_than_or_equal, %.loc45_44.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %index.patt: %pattern_type.6b6 = value_binding_pattern index [concrete] +// CHECK:STDOUT: %index.patt: %pattern_type.6b6 = value_binding_pattern index [concrete = constants.%index.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c1.ref.loc48: ref %C = name_ref c1, %c1 // CHECK:STDOUT: %int_42: Core.IntLiteral = int_value 42 [concrete = constants.%int_42.20e] @@ -1877,9 +1902,9 @@ fn F() { // CHECK:STDOUT: %.loc48_30.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc48 [concrete = constants.%int_42.ac4] // CHECK:STDOUT: %.loc48_30.2: %i32 = converted %int_42, %.loc48_30.1 [concrete = constants.%int_42.ac4] // CHECK:STDOUT: %C.cpp_operator.call: init %i32 = call imports.%C.cpp_operator.decl(%c1.ref.loc48, %.loc48_30.2) -// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc48_32.1: %i32 = value_of_initializer %C.cpp_operator.call // CHECK:STDOUT: %.loc48_32.2: %i32 = converted %C.cpp_operator.call, %.loc48_32.1 +// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %index: %i32 = value_binding index, %.loc48_32.2 // CHECK:STDOUT: %Destroy.Op.bound.loc45: = bound_method %.loc45_44.3, constants.%Destroy.Op // CHECK:STDOUT: %Destroy.Op.call.loc45: init %empty_tuple.type = call %Destroy.Op.bound.loc45(%.loc45_44.3) @@ -1953,13 +1978,18 @@ fn F() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %pattern_type.bbc: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = value_binding_pattern c1 [concrete] // CHECK:STDOUT: %C.C.cpp_overload_set.type: type = cpp_overload_set_type @C.C.cpp_overload_set [concrete] // CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete] // CHECK:STDOUT: %ptr.0a2: type = ptr_type %C [concrete] // CHECK:STDOUT: %C__carbon_thunk.type: type = fn_type @C__carbon_thunk [concrete] // CHECK:STDOUT: %C__carbon_thunk: %C__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = value_binding_pattern c2 [concrete] +// CHECK:STDOUT: %c3.patt: %pattern_type.bbc = value_binding_pattern c3 [concrete] // CHECK:STDOUT: %operator_Plus__carbon_thunk.type: type = fn_type @operator_Plus__carbon_thunk [concrete] // CHECK:STDOUT: %operator_Plus__carbon_thunk: %operator_Plus__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %c4.patt: %pattern_type.bbc = value_binding_pattern c4 [concrete] +// CHECK:STDOUT: %c5.patt: %pattern_type.bbc = value_binding_pattern c5 [concrete] // CHECK:STDOUT: %C.cpp_destructor.type: type = fn_type @C.cpp_destructor [concrete] // CHECK:STDOUT: %C.cpp_destructor: %C.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: %C.Op.type: type = fn_type @C.Op [concrete] @@ -1993,7 +2023,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = value_binding_pattern c1 [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = value_binding_pattern c1 [concrete = constants.%c1.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc8_19: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref.loc8_22: type = name_ref C, imports.%C.decl [concrete = constants.%C] @@ -2002,15 +2032,15 @@ fn F() { // CHECK:STDOUT: %addr.loc8: %ptr.0a2 = addr_of %.loc8_27.1 // CHECK:STDOUT: %C__carbon_thunk.call.loc8: init %empty_tuple.type = call imports.%C__carbon_thunk.decl(%addr.loc8) // CHECK:STDOUT: %.loc8_27.2: init %C to %.loc8_27.1 = mark_in_place_init %C__carbon_thunk.call.loc8 +// CHECK:STDOUT: %.loc8_27.3: ref %C = temporary %.loc8_27.1, %.loc8_27.2 +// CHECK:STDOUT: %.loc8_27.4: %C = acquire_value %.loc8_27.3 // CHECK:STDOUT: %.loc8_14: type = splice_block %C.ref.loc8_14 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc8_11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref.loc8_14: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc8_27.3: ref %C = temporary %.loc8_27.1, %.loc8_27.2 -// CHECK:STDOUT: %.loc8_27.4: %C = acquire_value %.loc8_27.3 // CHECK:STDOUT: %c1: %C = value_binding c1, %.loc8_27.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = value_binding_pattern c2 [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = value_binding_pattern c2 [concrete = constants.%c2.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc9_19: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref.loc9_22: type = name_ref C, imports.%C.decl [concrete = constants.%C] @@ -2019,15 +2049,15 @@ fn F() { // CHECK:STDOUT: %addr.loc9: %ptr.0a2 = addr_of %.loc9_27.1 // CHECK:STDOUT: %C__carbon_thunk.call.loc9: init %empty_tuple.type = call imports.%C__carbon_thunk.decl(%addr.loc9) // CHECK:STDOUT: %.loc9_27.2: init %C to %.loc9_27.1 = mark_in_place_init %C__carbon_thunk.call.loc9 +// CHECK:STDOUT: %.loc9_27.3: ref %C = temporary %.loc9_27.1, %.loc9_27.2 +// CHECK:STDOUT: %.loc9_27.4: %C = acquire_value %.loc9_27.3 // CHECK:STDOUT: %.loc9_14: type = splice_block %C.ref.loc9_14 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc9_11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref.loc9_14: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc9_27.3: ref %C = temporary %.loc9_27.1, %.loc9_27.2 -// CHECK:STDOUT: %.loc9_27.4: %C = acquire_value %.loc9_27.3 // CHECK:STDOUT: %c2: %C = value_binding c2, %.loc9_27.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c3.patt: %pattern_type.bbc = value_binding_pattern c3 [concrete] +// CHECK:STDOUT: %c3.patt: %pattern_type.bbc = value_binding_pattern c3 [concrete = constants.%c3.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c1.ref.loc10: %C = name_ref c1, %c1 // CHECK:STDOUT: %c2.ref: %C = name_ref c2, %c2 @@ -2039,15 +2069,15 @@ fn F() { // CHECK:STDOUT: %addr.loc10_22.3: %ptr.0a2 = addr_of %.loc10_22.1 // CHECK:STDOUT: %operator_Plus__carbon_thunk.call.loc10: init %empty_tuple.type = call imports.%operator_Plus__carbon_thunk.decl(%addr.loc10_22.1, %addr.loc10_22.2, %addr.loc10_22.3) // CHECK:STDOUT: %.loc10_22.2: init %C to %.loc10_22.1 = mark_in_place_init %operator_Plus__carbon_thunk.call.loc10 +// CHECK:STDOUT: %.loc10_22.3: ref %C = temporary %.loc10_22.1, %.loc10_22.2 +// CHECK:STDOUT: %.loc10_22.4: %C = acquire_value %.loc10_22.3 // CHECK:STDOUT: %.loc10_14: type = splice_block %C.ref.loc10 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref.loc10: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc10_22.3: ref %C = temporary %.loc10_22.1, %.loc10_22.2 -// CHECK:STDOUT: %.loc10_22.4: %C = acquire_value %.loc10_22.3 // CHECK:STDOUT: %c3: %C = value_binding c3, %.loc10_22.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c4.patt: %pattern_type.bbc = value_binding_pattern c4 [concrete] +// CHECK:STDOUT: %c4.patt: %pattern_type.bbc = value_binding_pattern c4 [concrete = constants.%c4.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c1.ref.loc11: %C = name_ref c1, %c1 // CHECK:STDOUT: %c3.ref.loc11: %C = name_ref c3, %c3 @@ -2059,15 +2089,15 @@ fn F() { // CHECK:STDOUT: %addr.loc11_22.3: %ptr.0a2 = addr_of %.loc11_22.1 // CHECK:STDOUT: %operator_Plus__carbon_thunk.call.loc11: init %empty_tuple.type = call imports.%operator_Plus__carbon_thunk.decl(%addr.loc11_22.1, %addr.loc11_22.2, %addr.loc11_22.3) // CHECK:STDOUT: %.loc11_22.2: init %C to %.loc11_22.1 = mark_in_place_init %operator_Plus__carbon_thunk.call.loc11 +// CHECK:STDOUT: %.loc11_22.3: ref %C = temporary %.loc11_22.1, %.loc11_22.2 +// CHECK:STDOUT: %.loc11_22.4: %C = acquire_value %.loc11_22.3 // CHECK:STDOUT: %.loc11_14: type = splice_block %C.ref.loc11 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref.loc11: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc11_22.3: ref %C = temporary %.loc11_22.1, %.loc11_22.2 -// CHECK:STDOUT: %.loc11_22.4: %C = acquire_value %.loc11_22.3 // CHECK:STDOUT: %c4: %C = value_binding c4, %.loc11_22.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c5.patt: %pattern_type.bbc = value_binding_pattern c5 [concrete] +// CHECK:STDOUT: %c5.patt: %pattern_type.bbc = value_binding_pattern c5 [concrete = constants.%c5.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c4.ref: %C = name_ref c4, %c4 // CHECK:STDOUT: %c3.ref.loc12: %C = name_ref c3, %c3 @@ -2079,12 +2109,12 @@ fn F() { // CHECK:STDOUT: %addr.loc12_29.3: %ptr.0a2 = addr_of %.loc12_29.1 // CHECK:STDOUT: %operator_Plus__carbon_thunk.call.loc12: init %empty_tuple.type = call imports.%operator_Plus__carbon_thunk.decl(%addr.loc12_29.1, %addr.loc12_29.2, %addr.loc12_29.3) // CHECK:STDOUT: %.loc12_29.2: init %C to %.loc12_29.1 = mark_in_place_init %operator_Plus__carbon_thunk.call.loc12 +// CHECK:STDOUT: %.loc12_29.3: ref %C = temporary %.loc12_29.1, %.loc12_29.2 +// CHECK:STDOUT: %.loc12_29.4: %C = acquire_value %.loc12_29.3 // CHECK:STDOUT: %.loc12_21: type = splice_block %C.ref.loc12 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc12: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref.loc12: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc12_29.3: ref %C = temporary %.loc12_29.1, %.loc12_29.2 -// CHECK:STDOUT: %.loc12_29.4: %C = acquire_value %.loc12_29.3 // CHECK:STDOUT: %c5: %C = value_binding c5, %.loc12_29.4 // CHECK:STDOUT: // CHECK:STDOUT: %C.Op.bound.loc12: = bound_method %.loc12_29.3, constants.%C.Op @@ -2116,15 +2146,23 @@ fn F() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %pattern_type.bbc: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = ref_binding_pattern c1 [concrete] +// CHECK:STDOUT: %c1.var_patt: %pattern_type.bbc = var_pattern %c1.patt [concrete] // CHECK:STDOUT: %C.C.cpp_overload_set.type: type = cpp_overload_set_type @C.C.cpp_overload_set [concrete] // CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete] // CHECK:STDOUT: %ptr.0a2: type = ptr_type %C [concrete] // CHECK:STDOUT: %C__carbon_thunk.type: type = fn_type @C__carbon_thunk [concrete] // CHECK:STDOUT: %C__carbon_thunk: %C__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = ref_binding_pattern c2 [concrete] +// CHECK:STDOUT: %c2.var_patt: %pattern_type.bbc = var_pattern %c2.patt [concrete] // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] +// CHECK:STDOUT: %greater_than.patt: %pattern_type.831 = value_binding_pattern greater_than [concrete] // CHECK:STDOUT: %ptr.bb2: type = ptr_type bool [concrete] // CHECK:STDOUT: %operator_Greater__carbon_thunk.type: type = fn_type @operator_Greater__carbon_thunk [concrete] // CHECK:STDOUT: %operator_Greater__carbon_thunk: %operator_Greater__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %less_than.patt: %pattern_type.831 = value_binding_pattern less_than [concrete] +// CHECK:STDOUT: %greater_than_or_equal.patt: %pattern_type.831 = value_binding_pattern greater_than_or_equal [concrete] +// CHECK:STDOUT: %less_than_or_equal.patt: %pattern_type.831 = value_binding_pattern less_than_or_equal [concrete] // CHECK:STDOUT: %operator_LessEqual__carbon_thunk.type: type = fn_type @operator_LessEqual__carbon_thunk [concrete] // CHECK:STDOUT: %operator_LessEqual__carbon_thunk: %operator_LessEqual__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] @@ -2167,8 +2205,8 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = ref_binding_pattern c1 [concrete] -// CHECK:STDOUT: %c1.var_patt: %pattern_type.bbc = var_pattern %c1.patt [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = ref_binding_pattern c1 [concrete = constants.%c1.patt] +// CHECK:STDOUT: %c1.var_patt: %pattern_type.bbc = var_pattern %c1.patt [concrete = constants.%c1.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c1.var: ref %C = var %c1.var_patt // CHECK:STDOUT: %Cpp.ref.loc15_19: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] @@ -2185,8 +2223,8 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %c1: ref %C = ref_binding c1, %c1.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = ref_binding_pattern c2 [concrete] -// CHECK:STDOUT: %c2.var_patt: %pattern_type.bbc = var_pattern %c2.patt [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = ref_binding_pattern c2 [concrete = constants.%c2.patt] +// CHECK:STDOUT: %c2.var_patt: %pattern_type.bbc = var_pattern %c2.patt [concrete = constants.%c2.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c2.var: ref %C = var %c2.var_patt // CHECK:STDOUT: %Cpp.ref.loc16_19: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] @@ -2203,7 +2241,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %c2: ref %C = ref_binding c2, %c2.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %greater_than.patt: %pattern_type.831 = value_binding_pattern greater_than [concrete] +// CHECK:STDOUT: %greater_than.patt: %pattern_type.831 = value_binding_pattern greater_than [concrete = constants.%greater_than.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c1.ref.loc19: ref %C = name_ref c1, %c1 // CHECK:STDOUT: %c2.ref.loc19: ref %C = name_ref c2, %c2 @@ -2217,26 +2255,26 @@ fn F() { // CHECK:STDOUT: %addr.loc19_38.3: %ptr.bb2 = addr_of %.loc19_38.1 // CHECK:STDOUT: %operator_Greater__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_Greater__carbon_thunk.decl(%addr.loc19_38.1, %addr.loc19_38.2, %addr.loc19_38.3) // CHECK:STDOUT: %.loc19_38.2: init bool to %.loc19_38.1 = mark_in_place_init %operator_Greater__carbon_thunk.call -// CHECK:STDOUT: %.loc19_28: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc19_38.3: ref bool = temporary %.loc19_38.1, %.loc19_38.2 // CHECK:STDOUT: %.loc19_38.4: bool = acquire_value %.loc19_38.3 +// CHECK:STDOUT: %.loc19_28: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %greater_than: bool = value_binding greater_than, %.loc19_38.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %less_than.patt: %pattern_type.831 = value_binding_pattern less_than [concrete] +// CHECK:STDOUT: %less_than.patt: %pattern_type.831 = value_binding_pattern less_than [concrete = constants.%less_than.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c1.ref.loc26: ref %C = name_ref c1, %c1 // CHECK:STDOUT: %c2.ref.loc26: ref %C = name_ref c2, %c2 // CHECK:STDOUT: %.loc26: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %less_than: bool = value_binding less_than, [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %greater_than_or_equal.patt: %pattern_type.831 = value_binding_pattern greater_than_or_equal [concrete] +// CHECK:STDOUT: %greater_than_or_equal.patt: %pattern_type.831 = value_binding_pattern greater_than_or_equal [concrete = constants.%greater_than_or_equal.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c1.ref.loc33: ref %C = name_ref c1, %c1 // CHECK:STDOUT: %c2.ref.loc33: ref %C = name_ref c2, %c2 // CHECK:STDOUT: %.loc33: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %greater_than_or_equal: bool = value_binding greater_than_or_equal, [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %less_than_or_equal.patt: %pattern_type.831 = value_binding_pattern less_than_or_equal [concrete] +// CHECK:STDOUT: %less_than_or_equal.patt: %pattern_type.831 = value_binding_pattern less_than_or_equal [concrete = constants.%less_than_or_equal.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c1.ref.loc36: ref %C = name_ref c1, %c1 // CHECK:STDOUT: %c2.ref.loc36: ref %C = name_ref c2, %c2 @@ -2250,9 +2288,9 @@ fn F() { // CHECK:STDOUT: %addr.loc36_44.3: %ptr.bb2 = addr_of %.loc36_44.1 // CHECK:STDOUT: %operator_LessEqual__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_LessEqual__carbon_thunk.decl(%addr.loc36_44.1, %addr.loc36_44.2, %addr.loc36_44.3) // CHECK:STDOUT: %.loc36_44.2: init bool to %.loc36_44.1 = mark_in_place_init %operator_LessEqual__carbon_thunk.call -// CHECK:STDOUT: %.loc36_34: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc36_44.3: ref bool = temporary %.loc36_44.1, %.loc36_44.2 // CHECK:STDOUT: %.loc36_44.4: bool = acquire_value %.loc36_44.3 +// CHECK:STDOUT: %.loc36_34: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %less_than_or_equal: bool = value_binding less_than_or_equal, %.loc36_44.4 // CHECK:STDOUT: %Destroy.Op.bound.loc36: = bound_method %.loc36_44.3, constants.%Destroy.Op // CHECK:STDOUT: %Destroy.Op.call.loc36: init %empty_tuple.type = call %Destroy.Op.bound.loc36(%.loc36_44.3) @@ -2278,15 +2316,21 @@ fn F() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %pattern_type.bbc: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = ref_binding_pattern c1 [concrete] +// CHECK:STDOUT: %c1.var_patt: %pattern_type.bbc = var_pattern %c1.patt [concrete] // CHECK:STDOUT: %C.C.cpp_overload_set.type: type = cpp_overload_set_type @C.C.cpp_overload_set [concrete] // CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete] // CHECK:STDOUT: %ptr.0a2: type = ptr_type %C [concrete] // CHECK:STDOUT: %C__carbon_thunk.type: type = fn_type @C__carbon_thunk [concrete] // CHECK:STDOUT: %C__carbon_thunk: %C__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = ref_binding_pattern c2 [concrete] +// CHECK:STDOUT: %c2.var_patt: %pattern_type.bbc = var_pattern %c2.patt [concrete] // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] +// CHECK:STDOUT: %equal.patt: %pattern_type.831 = value_binding_pattern equal [concrete] // CHECK:STDOUT: %ptr.bb2: type = ptr_type bool [concrete] // CHECK:STDOUT: %operator_EqualEqual__carbon_thunk.type: type = fn_type @operator_EqualEqual__carbon_thunk [concrete] // CHECK:STDOUT: %operator_EqualEqual__carbon_thunk: %operator_EqualEqual__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %not_equal.patt: %pattern_type.831 = value_binding_pattern not_equal [concrete] // CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] // CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] // CHECK:STDOUT: %C.cpp_destructor.type: type = fn_type @C.cpp_destructor [concrete] @@ -2322,8 +2366,8 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = ref_binding_pattern c1 [concrete] -// CHECK:STDOUT: %c1.var_patt: %pattern_type.bbc = var_pattern %c1.patt [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = ref_binding_pattern c1 [concrete = constants.%c1.patt] +// CHECK:STDOUT: %c1.var_patt: %pattern_type.bbc = var_pattern %c1.patt [concrete = constants.%c1.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c1.var: ref %C = var %c1.var_patt // CHECK:STDOUT: %Cpp.ref.loc12_19: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] @@ -2340,8 +2384,8 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %c1: ref %C = ref_binding c1, %c1.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = ref_binding_pattern c2 [concrete] -// CHECK:STDOUT: %c2.var_patt: %pattern_type.bbc = var_pattern %c2.patt [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = ref_binding_pattern c2 [concrete = constants.%c2.patt] +// CHECK:STDOUT: %c2.var_patt: %pattern_type.bbc = var_pattern %c2.patt [concrete = constants.%c2.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c2.var: ref %C = var %c2.var_patt // CHECK:STDOUT: %Cpp.ref.loc13_19: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] @@ -2358,7 +2402,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %c2: ref %C = ref_binding c2, %c2.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %equal.patt: %pattern_type.831 = value_binding_pattern equal [concrete] +// CHECK:STDOUT: %equal.patt: %pattern_type.831 = value_binding_pattern equal [concrete = constants.%equal.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c1.ref.loc16: ref %C = name_ref c1, %c1 // CHECK:STDOUT: %c2.ref.loc16: ref %C = name_ref c2, %c2 @@ -2372,12 +2416,12 @@ fn F() { // CHECK:STDOUT: %addr.loc16_31.3: %ptr.bb2 = addr_of %.loc16_31.1 // CHECK:STDOUT: %operator_EqualEqual__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_EqualEqual__carbon_thunk.decl(%addr.loc16_31.1, %addr.loc16_31.2, %addr.loc16_31.3) // CHECK:STDOUT: %.loc16_31.2: init bool to %.loc16_31.1 = mark_in_place_init %operator_EqualEqual__carbon_thunk.call -// CHECK:STDOUT: %.loc16_21: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc16_31.3: ref bool = temporary %.loc16_31.1, %.loc16_31.2 // CHECK:STDOUT: %.loc16_31.4: bool = acquire_value %.loc16_31.3 +// CHECK:STDOUT: %.loc16_21: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %equal: bool = value_binding equal, %.loc16_31.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %not_equal.patt: %pattern_type.831 = value_binding_pattern not_equal [concrete] +// CHECK:STDOUT: %not_equal.patt: %pattern_type.831 = value_binding_pattern not_equal [concrete = constants.%not_equal.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c1.ref.loc23: ref %C = name_ref c1, %c1 // CHECK:STDOUT: %c2.ref.loc23: ref %C = name_ref c2, %c2 @@ -2405,11 +2449,14 @@ fn F() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %pattern_type.7cb: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.7cb = value_binding_pattern c1 [concrete] // CHECK:STDOUT: %C.C.cpp_overload_set.type: type = cpp_overload_set_type @C.C.cpp_overload_set [concrete] // CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete] // CHECK:STDOUT: %ptr.f8b: type = ptr_type %C [concrete] // CHECK:STDOUT: %C__carbon_thunk.type: type = fn_type @C__carbon_thunk [concrete] // CHECK:STDOUT: %C__carbon_thunk: %C__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.7cb = value_binding_pattern c2 [concrete] +// CHECK:STDOUT: %c3.patt: %pattern_type.7cb = value_binding_pattern c3 [concrete] // CHECK:STDOUT: %operator_Plus__carbon_thunk.type: type = fn_type @operator_Plus__carbon_thunk [concrete] // CHECK:STDOUT: %operator_Plus__carbon_thunk: %operator_Plus__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %C.cpp_destructor.type: type = fn_type @C.cpp_destructor [concrete] @@ -2449,7 +2496,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c1.patt: %pattern_type.7cb = value_binding_pattern c1 [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.7cb = value_binding_pattern c1 [concrete = constants.%c1.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc8_21: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %N.ref.loc8_24: = name_ref N, imports.%N [concrete = imports.%N] @@ -2459,16 +2506,16 @@ fn F() { // CHECK:STDOUT: %addr.loc8: %ptr.f8b = addr_of %.loc8_31.1 // CHECK:STDOUT: %C__carbon_thunk.call.loc8: init %empty_tuple.type = call imports.%C__carbon_thunk.decl(%addr.loc8) // CHECK:STDOUT: %.loc8_31.2: init %C to %.loc8_31.1 = mark_in_place_init %C__carbon_thunk.call.loc8 +// CHECK:STDOUT: %.loc8_31.3: ref %C = temporary %.loc8_31.1, %.loc8_31.2 +// CHECK:STDOUT: %.loc8_31.4: %C = acquire_value %.loc8_31.3 // CHECK:STDOUT: %.loc8_16: type = splice_block %C.ref.loc8_16 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc8_11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %N.ref.loc8_14: = name_ref N, imports.%N [concrete = imports.%N] // CHECK:STDOUT: %C.ref.loc8_16: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc8_31.3: ref %C = temporary %.loc8_31.1, %.loc8_31.2 -// CHECK:STDOUT: %.loc8_31.4: %C = acquire_value %.loc8_31.3 // CHECK:STDOUT: %c1: %C = value_binding c1, %.loc8_31.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c2.patt: %pattern_type.7cb = value_binding_pattern c2 [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.7cb = value_binding_pattern c2 [concrete = constants.%c2.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc9_21: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %N.ref.loc9_24: = name_ref N, imports.%N [concrete = imports.%N] @@ -2478,16 +2525,16 @@ fn F() { // CHECK:STDOUT: %addr.loc9: %ptr.f8b = addr_of %.loc9_31.1 // CHECK:STDOUT: %C__carbon_thunk.call.loc9: init %empty_tuple.type = call imports.%C__carbon_thunk.decl(%addr.loc9) // CHECK:STDOUT: %.loc9_31.2: init %C to %.loc9_31.1 = mark_in_place_init %C__carbon_thunk.call.loc9 +// CHECK:STDOUT: %.loc9_31.3: ref %C = temporary %.loc9_31.1, %.loc9_31.2 +// CHECK:STDOUT: %.loc9_31.4: %C = acquire_value %.loc9_31.3 // CHECK:STDOUT: %.loc9_16: type = splice_block %C.ref.loc9_16 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc9_11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %N.ref.loc9_14: = name_ref N, imports.%N [concrete = imports.%N] // CHECK:STDOUT: %C.ref.loc9_16: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc9_31.3: ref %C = temporary %.loc9_31.1, %.loc9_31.2 -// CHECK:STDOUT: %.loc9_31.4: %C = acquire_value %.loc9_31.3 // CHECK:STDOUT: %c2: %C = value_binding c2, %.loc9_31.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c3.patt: %pattern_type.7cb = value_binding_pattern c3 [concrete] +// CHECK:STDOUT: %c3.patt: %pattern_type.7cb = value_binding_pattern c3 [concrete = constants.%c3.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c1.ref: %C = name_ref c1, %c1 // CHECK:STDOUT: %c2.ref: %C = name_ref c2, %c2 @@ -2499,13 +2546,13 @@ fn F() { // CHECK:STDOUT: %addr.loc10_31.3: %ptr.f8b = addr_of %.loc10_31.1 // CHECK:STDOUT: %operator_Plus__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_Plus__carbon_thunk.decl(%addr.loc10_31.1, %addr.loc10_31.2, %addr.loc10_31.3) // CHECK:STDOUT: %.loc10_31.2: init %C to %.loc10_31.1 = mark_in_place_init %operator_Plus__carbon_thunk.call +// CHECK:STDOUT: %.loc10_31.3: ref %C = temporary %.loc10_31.1, %.loc10_31.2 +// CHECK:STDOUT: %.loc10_31.4: %C = acquire_value %.loc10_31.3 // CHECK:STDOUT: %.loc10_23: type = splice_block %C.ref.loc10 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %N.ref.loc10: = name_ref N, imports.%N [concrete = imports.%N] // CHECK:STDOUT: %C.ref.loc10: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc10_31.3: ref %C = temporary %.loc10_31.1, %.loc10_31.2 -// CHECK:STDOUT: %.loc10_31.4: %C = acquire_value %.loc10_31.3 // CHECK:STDOUT: %c3: %C = value_binding c3, %.loc10_31.4 // CHECK:STDOUT: // CHECK:STDOUT: %C.Op.bound.loc10: = bound_method %.loc10_31.3, constants.%C.Op @@ -2529,6 +2576,7 @@ fn F() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %C1: type = class_type @C1 [concrete] // CHECK:STDOUT: %pattern_type.da8: type = pattern_type %C1 [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.da8 = value_binding_pattern c1 [concrete] // CHECK:STDOUT: %C1.C1.cpp_overload_set.type: type = cpp_overload_set_type @C1.C1.cpp_overload_set [concrete] // CHECK:STDOUT: %C1.C1.cpp_overload_set.value: %C1.C1.cpp_overload_set.type = cpp_overload_set_value @C1.C1.cpp_overload_set [concrete] // CHECK:STDOUT: %ptr.876: type = ptr_type %C1 [concrete] @@ -2536,13 +2584,16 @@ fn F() { // CHECK:STDOUT: %C1__carbon_thunk: %C1__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %C2: type = class_type @C2 [concrete] // CHECK:STDOUT: %pattern_type.00d: type = pattern_type %C2 [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.00d = value_binding_pattern c2 [concrete] // CHECK:STDOUT: %C2.C2.cpp_overload_set.type: type = cpp_overload_set_type @C2.C2.cpp_overload_set [concrete] // CHECK:STDOUT: %C2.C2.cpp_overload_set.value: %C2.C2.cpp_overload_set.type = cpp_overload_set_value @C2.C2.cpp_overload_set [concrete] // CHECK:STDOUT: %ptr.b22: type = ptr_type %C2 [concrete] // CHECK:STDOUT: %C2__carbon_thunk.type: type = fn_type @C2__carbon_thunk [concrete] // CHECK:STDOUT: %C2__carbon_thunk: %C2__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %c3.patt: %pattern_type.00d = value_binding_pattern c3 [concrete] // CHECK:STDOUT: %operator_Plus__carbon_thunk.type: type = fn_type @operator_Plus__carbon_thunk [concrete] // CHECK:STDOUT: %operator_Plus__carbon_thunk: %operator_Plus__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %c4.patt: %pattern_type.00d = value_binding_pattern c4 [concrete] // CHECK:STDOUT: %operator_Minus__carbon_thunk.type: type = fn_type @operator_Minus__carbon_thunk [concrete] // CHECK:STDOUT: %operator_Minus__carbon_thunk: %operator_Minus__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %C2.cpp_destructor.type: type = fn_type @C2.cpp_destructor [concrete] @@ -2608,7 +2659,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c1.patt: %pattern_type.da8 = value_binding_pattern c1 [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.da8 = value_binding_pattern c1 [concrete = constants.%c1.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc8_23: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %N1.ref.loc8_26: = name_ref N1, imports.%N1 [concrete = imports.%N1] @@ -2618,16 +2669,16 @@ fn F() { // CHECK:STDOUT: %addr.loc8: %ptr.876 = addr_of %.loc8_36.1 // CHECK:STDOUT: %C1__carbon_thunk.call: init %empty_tuple.type = call imports.%C1__carbon_thunk.decl(%addr.loc8) // CHECK:STDOUT: %.loc8_36.2: init %C1 to %.loc8_36.1 = mark_in_place_init %C1__carbon_thunk.call +// CHECK:STDOUT: %.loc8_36.3: ref %C1 = temporary %.loc8_36.1, %.loc8_36.2 +// CHECK:STDOUT: %.loc8_36.4: %C1 = acquire_value %.loc8_36.3 // CHECK:STDOUT: %.loc8_17: type = splice_block %C1.ref.loc8_17 [concrete = constants.%C1] { // CHECK:STDOUT: %Cpp.ref.loc8_11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %N1.ref.loc8_14: = name_ref N1, imports.%N1 [concrete = imports.%N1] // CHECK:STDOUT: %C1.ref.loc8_17: type = name_ref C1, imports.%C1.decl [concrete = constants.%C1] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc8_36.3: ref %C1 = temporary %.loc8_36.1, %.loc8_36.2 -// CHECK:STDOUT: %.loc8_36.4: %C1 = acquire_value %.loc8_36.3 // CHECK:STDOUT: %c1: %C1 = value_binding c1, %.loc8_36.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c2.patt: %pattern_type.00d = value_binding_pattern c2 [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.00d = value_binding_pattern c2 [concrete = constants.%c2.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc9_23: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %N2.ref.loc9_26: = name_ref N2, imports.%N2 [concrete = imports.%N2] @@ -2637,16 +2688,16 @@ fn F() { // CHECK:STDOUT: %addr.loc9: %ptr.b22 = addr_of %.loc9_36.1 // CHECK:STDOUT: %C2__carbon_thunk.call: init %empty_tuple.type = call imports.%C2__carbon_thunk.decl(%addr.loc9) // CHECK:STDOUT: %.loc9_36.2: init %C2 to %.loc9_36.1 = mark_in_place_init %C2__carbon_thunk.call +// CHECK:STDOUT: %.loc9_36.3: ref %C2 = temporary %.loc9_36.1, %.loc9_36.2 +// CHECK:STDOUT: %.loc9_36.4: %C2 = acquire_value %.loc9_36.3 // CHECK:STDOUT: %.loc9_17: type = splice_block %C2.ref.loc9_17 [concrete = constants.%C2] { // CHECK:STDOUT: %Cpp.ref.loc9_11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %N2.ref.loc9_14: = name_ref N2, imports.%N2 [concrete = imports.%N2] // CHECK:STDOUT: %C2.ref.loc9_17: type = name_ref C2, imports.%C2.decl [concrete = constants.%C2] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc9_36.3: ref %C2 = temporary %.loc9_36.1, %.loc9_36.2 -// CHECK:STDOUT: %.loc9_36.4: %C2 = acquire_value %.loc9_36.3 // CHECK:STDOUT: %c2: %C2 = value_binding c2, %.loc9_36.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c3.patt: %pattern_type.00d = value_binding_pattern c3 [concrete] +// CHECK:STDOUT: %c3.patt: %pattern_type.00d = value_binding_pattern c3 [concrete = constants.%c3.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c1.ref.loc10: %C1 = name_ref c1, %c1 // CHECK:STDOUT: %c2.ref.loc10: %C2 = name_ref c2, %c2 @@ -2658,16 +2709,16 @@ fn F() { // CHECK:STDOUT: %addr.loc10_33.3: %ptr.b22 = addr_of %.loc10_33.1 // CHECK:STDOUT: %operator_Plus__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_Plus__carbon_thunk.decl(%addr.loc10_33.1, %addr.loc10_33.2, %addr.loc10_33.3) // CHECK:STDOUT: %.loc10_33.2: init %C2 to %.loc10_33.1 = mark_in_place_init %operator_Plus__carbon_thunk.call +// CHECK:STDOUT: %.loc10_33.3: ref %C2 = temporary %.loc10_33.1, %.loc10_33.2 +// CHECK:STDOUT: %.loc10_33.4: %C2 = acquire_value %.loc10_33.3 // CHECK:STDOUT: %.loc10_24: type = splice_block %C2.ref.loc10 [concrete = constants.%C2] { // CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %N2.ref.loc10: = name_ref N2, imports.%N2 [concrete = imports.%N2] // CHECK:STDOUT: %C2.ref.loc10: type = name_ref C2, imports.%C2.decl [concrete = constants.%C2] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc10_33.3: ref %C2 = temporary %.loc10_33.1, %.loc10_33.2 -// CHECK:STDOUT: %.loc10_33.4: %C2 = acquire_value %.loc10_33.3 // CHECK:STDOUT: %c3: %C2 = value_binding c3, %.loc10_33.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c4.patt: %pattern_type.00d = value_binding_pattern c4 [concrete] +// CHECK:STDOUT: %c4.patt: %pattern_type.00d = value_binding_pattern c4 [concrete = constants.%c4.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c2.ref.loc11: %C2 = name_ref c2, %c2 // CHECK:STDOUT: %c1.ref.loc11: %C1 = name_ref c1, %c1 @@ -2679,13 +2730,13 @@ fn F() { // CHECK:STDOUT: %addr.loc11_33.3: %ptr.b22 = addr_of %.loc11_33.1 // CHECK:STDOUT: %operator_Minus__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_Minus__carbon_thunk.decl(%addr.loc11_33.1, %addr.loc11_33.2, %addr.loc11_33.3) // CHECK:STDOUT: %.loc11_33.2: init %C2 to %.loc11_33.1 = mark_in_place_init %operator_Minus__carbon_thunk.call +// CHECK:STDOUT: %.loc11_33.3: ref %C2 = temporary %.loc11_33.1, %.loc11_33.2 +// CHECK:STDOUT: %.loc11_33.4: %C2 = acquire_value %.loc11_33.3 // CHECK:STDOUT: %.loc11_24: type = splice_block %C2.ref.loc11 [concrete = constants.%C2] { // CHECK:STDOUT: %Cpp.ref.loc11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %N2.ref.loc11: = name_ref N2, imports.%N2 [concrete = imports.%N2] // CHECK:STDOUT: %C2.ref.loc11: type = name_ref C2, imports.%C2.decl [concrete = constants.%C2] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc11_33.3: ref %C2 = temporary %.loc11_33.1, %.loc11_33.2 -// CHECK:STDOUT: %.loc11_33.4: %C2 = acquire_value %.loc11_33.3 // CHECK:STDOUT: %c4: %C2 = value_binding c4, %.loc11_33.4 // CHECK:STDOUT: // CHECK:STDOUT: %C2.Op.bound.loc11: = bound_method %.loc11_33.3, constants.%C2.Op @@ -2714,11 +2765,14 @@ fn F() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %pattern_type.7cb: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.7cb = value_binding_pattern c1 [concrete] // CHECK:STDOUT: %C.C.cpp_overload_set.type: type = cpp_overload_set_type @C.C.cpp_overload_set [concrete] // CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete] // CHECK:STDOUT: %ptr.f8b: type = ptr_type %C [concrete] // CHECK:STDOUT: %C__carbon_thunk.type: type = fn_type @C__carbon_thunk [concrete] // CHECK:STDOUT: %C__carbon_thunk: %C__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.7cb = value_binding_pattern c2 [concrete] +// CHECK:STDOUT: %c3.patt: %pattern_type.7cb = value_binding_pattern c3 [concrete] // CHECK:STDOUT: %C.cpp_destructor.type: type = fn_type @C.cpp_destructor [concrete] // CHECK:STDOUT: %C.cpp_destructor: %C.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: %C.Op.type: type = fn_type @C.Op [concrete] @@ -2751,7 +2805,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c1.patt: %pattern_type.7cb = value_binding_pattern c1 [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.7cb = value_binding_pattern c1 [concrete = constants.%c1.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc8_21: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %N.ref.loc8_24: = name_ref N, imports.%N [concrete = imports.%N] @@ -2761,16 +2815,16 @@ fn F() { // CHECK:STDOUT: %addr.loc8: %ptr.f8b = addr_of %.loc8_31.1 // CHECK:STDOUT: %C__carbon_thunk.call.loc8: init %empty_tuple.type = call imports.%C__carbon_thunk.decl(%addr.loc8) // CHECK:STDOUT: %.loc8_31.2: init %C to %.loc8_31.1 = mark_in_place_init %C__carbon_thunk.call.loc8 +// CHECK:STDOUT: %.loc8_31.3: ref %C = temporary %.loc8_31.1, %.loc8_31.2 +// CHECK:STDOUT: %.loc8_31.4: %C = acquire_value %.loc8_31.3 // CHECK:STDOUT: %.loc8_16: type = splice_block %C.ref.loc8_16 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc8_11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %N.ref.loc8_14: = name_ref N, imports.%N [concrete = imports.%N] // CHECK:STDOUT: %C.ref.loc8_16: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc8_31.3: ref %C = temporary %.loc8_31.1, %.loc8_31.2 -// CHECK:STDOUT: %.loc8_31.4: %C = acquire_value %.loc8_31.3 // CHECK:STDOUT: %c1: %C = value_binding c1, %.loc8_31.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c2.patt: %pattern_type.7cb = value_binding_pattern c2 [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.7cb = value_binding_pattern c2 [concrete = constants.%c2.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc9_21: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %N.ref.loc9_24: = name_ref N, imports.%N [concrete = imports.%N] @@ -2780,16 +2834,16 @@ fn F() { // CHECK:STDOUT: %addr.loc9: %ptr.f8b = addr_of %.loc9_31.1 // CHECK:STDOUT: %C__carbon_thunk.call.loc9: init %empty_tuple.type = call imports.%C__carbon_thunk.decl(%addr.loc9) // CHECK:STDOUT: %.loc9_31.2: init %C to %.loc9_31.1 = mark_in_place_init %C__carbon_thunk.call.loc9 +// CHECK:STDOUT: %.loc9_31.3: ref %C = temporary %.loc9_31.1, %.loc9_31.2 +// CHECK:STDOUT: %.loc9_31.4: %C = acquire_value %.loc9_31.3 // CHECK:STDOUT: %.loc9_16: type = splice_block %C.ref.loc9_16 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc9_11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %N.ref.loc9_14: = name_ref N, imports.%N [concrete = imports.%N] // CHECK:STDOUT: %C.ref.loc9_16: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc9_31.3: ref %C = temporary %.loc9_31.1, %.loc9_31.2 -// CHECK:STDOUT: %.loc9_31.4: %C = acquire_value %.loc9_31.3 // CHECK:STDOUT: %c2: %C = value_binding c2, %.loc9_31.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c3.patt: %pattern_type.7cb = value_binding_pattern c3 [concrete] +// CHECK:STDOUT: %c3.patt: %pattern_type.7cb = value_binding_pattern c3 [concrete = constants.%c3.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c1.ref: %C = name_ref c1, %c1 // CHECK:STDOUT: %c2.ref: %C = name_ref c2, %c2 @@ -2818,11 +2872,14 @@ fn F() { // CHECK:STDOUT: %O: type = class_type @O [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %pattern_type.aac: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.aac = value_binding_pattern c1 [concrete] // CHECK:STDOUT: %C.C.cpp_overload_set.type: type = cpp_overload_set_type @C.C.cpp_overload_set [concrete] // CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete] // CHECK:STDOUT: %ptr.39f: type = ptr_type %C [concrete] // CHECK:STDOUT: %C__carbon_thunk.type: type = fn_type @C__carbon_thunk [concrete] // CHECK:STDOUT: %C__carbon_thunk: %C__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.aac = value_binding_pattern c2 [concrete] +// CHECK:STDOUT: %c3.patt: %pattern_type.aac = value_binding_pattern c3 [concrete] // CHECK:STDOUT: %operator_Plus__carbon_thunk.type: type = fn_type @operator_Plus__carbon_thunk [concrete] // CHECK:STDOUT: %operator_Plus__carbon_thunk: %operator_Plus__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %C.cpp_destructor.type: type = fn_type @C.cpp_destructor [concrete] @@ -2859,7 +2916,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c1.patt: %pattern_type.aac = value_binding_pattern c1 [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.aac = value_binding_pattern c1 [concrete = constants.%c1.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc8_21: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %O.ref.loc8_24: type = name_ref O, imports.%O.decl [concrete = constants.%O] @@ -2869,16 +2926,16 @@ fn F() { // CHECK:STDOUT: %addr.loc8: %ptr.39f = addr_of %.loc8_31.1 // CHECK:STDOUT: %C__carbon_thunk.call.loc8: init %empty_tuple.type = call imports.%C__carbon_thunk.decl(%addr.loc8) // CHECK:STDOUT: %.loc8_31.2: init %C to %.loc8_31.1 = mark_in_place_init %C__carbon_thunk.call.loc8 +// CHECK:STDOUT: %.loc8_31.3: ref %C = temporary %.loc8_31.1, %.loc8_31.2 +// CHECK:STDOUT: %.loc8_31.4: %C = acquire_value %.loc8_31.3 // CHECK:STDOUT: %.loc8_16: type = splice_block %C.ref.loc8_16 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc8_11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %O.ref.loc8_14: type = name_ref O, imports.%O.decl [concrete = constants.%O] // CHECK:STDOUT: %C.ref.loc8_16: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc8_31.3: ref %C = temporary %.loc8_31.1, %.loc8_31.2 -// CHECK:STDOUT: %.loc8_31.4: %C = acquire_value %.loc8_31.3 // CHECK:STDOUT: %c1: %C = value_binding c1, %.loc8_31.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c2.patt: %pattern_type.aac = value_binding_pattern c2 [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.aac = value_binding_pattern c2 [concrete = constants.%c2.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc9_21: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %O.ref.loc9_24: type = name_ref O, imports.%O.decl [concrete = constants.%O] @@ -2888,16 +2945,16 @@ fn F() { // CHECK:STDOUT: %addr.loc9: %ptr.39f = addr_of %.loc9_31.1 // CHECK:STDOUT: %C__carbon_thunk.call.loc9: init %empty_tuple.type = call imports.%C__carbon_thunk.decl(%addr.loc9) // CHECK:STDOUT: %.loc9_31.2: init %C to %.loc9_31.1 = mark_in_place_init %C__carbon_thunk.call.loc9 +// CHECK:STDOUT: %.loc9_31.3: ref %C = temporary %.loc9_31.1, %.loc9_31.2 +// CHECK:STDOUT: %.loc9_31.4: %C = acquire_value %.loc9_31.3 // CHECK:STDOUT: %.loc9_16: type = splice_block %C.ref.loc9_16 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc9_11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %O.ref.loc9_14: type = name_ref O, imports.%O.decl [concrete = constants.%O] // CHECK:STDOUT: %C.ref.loc9_16: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc9_31.3: ref %C = temporary %.loc9_31.1, %.loc9_31.2 -// CHECK:STDOUT: %.loc9_31.4: %C = acquire_value %.loc9_31.3 // CHECK:STDOUT: %c2: %C = value_binding c2, %.loc9_31.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c3.patt: %pattern_type.aac = value_binding_pattern c3 [concrete] +// CHECK:STDOUT: %c3.patt: %pattern_type.aac = value_binding_pattern c3 [concrete = constants.%c3.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c1.ref: %C = name_ref c1, %c1 // CHECK:STDOUT: %c2.ref: %C = name_ref c2, %c2 @@ -2909,13 +2966,13 @@ fn F() { // CHECK:STDOUT: %addr.loc10_31.3: %ptr.39f = addr_of %.loc10_31.1 // CHECK:STDOUT: %operator_Plus__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_Plus__carbon_thunk.decl(%addr.loc10_31.1, %addr.loc10_31.2, %addr.loc10_31.3) // CHECK:STDOUT: %.loc10_31.2: init %C to %.loc10_31.1 = mark_in_place_init %operator_Plus__carbon_thunk.call +// CHECK:STDOUT: %.loc10_31.3: ref %C = temporary %.loc10_31.1, %.loc10_31.2 +// CHECK:STDOUT: %.loc10_31.4: %C = acquire_value %.loc10_31.3 // CHECK:STDOUT: %.loc10_23: type = splice_block %C.ref.loc10 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %O.ref.loc10: type = name_ref O, imports.%O.decl [concrete = constants.%O] // CHECK:STDOUT: %C.ref.loc10: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc10_31.3: ref %C = temporary %.loc10_31.1, %.loc10_31.2 -// CHECK:STDOUT: %.loc10_31.4: %C = acquire_value %.loc10_31.3 // CHECK:STDOUT: %c3: %C = value_binding c3, %.loc10_31.4 // CHECK:STDOUT: // CHECK:STDOUT: %C.Op.bound.loc10: = bound_method %.loc10_31.3, constants.%C.Op @@ -2940,11 +2997,14 @@ fn F() { // CHECK:STDOUT: %O: type = class_type @O [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %pattern_type.f6e: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.f6e = value_binding_pattern c1 [concrete] // CHECK:STDOUT: %C.C.cpp_overload_set.type: type = cpp_overload_set_type @C.C.cpp_overload_set [concrete] // CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete] // CHECK:STDOUT: %ptr.7c7: type = ptr_type %C [concrete] // CHECK:STDOUT: %C__carbon_thunk.type: type = fn_type @C__carbon_thunk [concrete] // CHECK:STDOUT: %C__carbon_thunk: %C__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.f6e = value_binding_pattern c2 [concrete] +// CHECK:STDOUT: %c3.patt: %pattern_type.f6e = value_binding_pattern c3 [concrete] // CHECK:STDOUT: %operator_Plus__carbon_thunk.type: type = fn_type @operator_Plus__carbon_thunk [concrete] // CHECK:STDOUT: %operator_Plus__carbon_thunk: %operator_Plus__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %C.cpp_destructor.type: type = fn_type @C.cpp_destructor [concrete] @@ -2985,7 +3045,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c1.patt: %pattern_type.f6e = value_binding_pattern c1 [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.f6e = value_binding_pattern c1 [concrete = constants.%c1.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc8_23: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %N.ref.loc8_26: = name_ref N, imports.%N [concrete = imports.%N] @@ -2996,17 +3056,17 @@ fn F() { // CHECK:STDOUT: %addr.loc8: %ptr.7c7 = addr_of %.loc8_35.1 // CHECK:STDOUT: %C__carbon_thunk.call.loc8: init %empty_tuple.type = call imports.%C__carbon_thunk.decl(%addr.loc8) // CHECK:STDOUT: %.loc8_35.2: init %C to %.loc8_35.1 = mark_in_place_init %C__carbon_thunk.call.loc8 +// CHECK:STDOUT: %.loc8_35.3: ref %C = temporary %.loc8_35.1, %.loc8_35.2 +// CHECK:STDOUT: %.loc8_35.4: %C = acquire_value %.loc8_35.3 // CHECK:STDOUT: %.loc8_18: type = splice_block %C.ref.loc8_18 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc8_11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %N.ref.loc8_14: = name_ref N, imports.%N [concrete = imports.%N] // CHECK:STDOUT: %O.ref.loc8_16: type = name_ref O, imports.%O.decl [concrete = constants.%O] // CHECK:STDOUT: %C.ref.loc8_18: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc8_35.3: ref %C = temporary %.loc8_35.1, %.loc8_35.2 -// CHECK:STDOUT: %.loc8_35.4: %C = acquire_value %.loc8_35.3 // CHECK:STDOUT: %c1: %C = value_binding c1, %.loc8_35.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c2.patt: %pattern_type.f6e = value_binding_pattern c2 [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.f6e = value_binding_pattern c2 [concrete = constants.%c2.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc9_23: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %N.ref.loc9_26: = name_ref N, imports.%N [concrete = imports.%N] @@ -3017,17 +3077,17 @@ fn F() { // CHECK:STDOUT: %addr.loc9: %ptr.7c7 = addr_of %.loc9_35.1 // CHECK:STDOUT: %C__carbon_thunk.call.loc9: init %empty_tuple.type = call imports.%C__carbon_thunk.decl(%addr.loc9) // CHECK:STDOUT: %.loc9_35.2: init %C to %.loc9_35.1 = mark_in_place_init %C__carbon_thunk.call.loc9 +// CHECK:STDOUT: %.loc9_35.3: ref %C = temporary %.loc9_35.1, %.loc9_35.2 +// CHECK:STDOUT: %.loc9_35.4: %C = acquire_value %.loc9_35.3 // CHECK:STDOUT: %.loc9_18: type = splice_block %C.ref.loc9_18 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc9_11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %N.ref.loc9_14: = name_ref N, imports.%N [concrete = imports.%N] // CHECK:STDOUT: %O.ref.loc9_16: type = name_ref O, imports.%O.decl [concrete = constants.%O] // CHECK:STDOUT: %C.ref.loc9_18: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc9_35.3: ref %C = temporary %.loc9_35.1, %.loc9_35.2 -// CHECK:STDOUT: %.loc9_35.4: %C = acquire_value %.loc9_35.3 // CHECK:STDOUT: %c2: %C = value_binding c2, %.loc9_35.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c3.patt: %pattern_type.f6e = value_binding_pattern c3 [concrete] +// CHECK:STDOUT: %c3.patt: %pattern_type.f6e = value_binding_pattern c3 [concrete = constants.%c3.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c1.ref: %C = name_ref c1, %c1 // CHECK:STDOUT: %c2.ref: %C = name_ref c2, %c2 @@ -3039,14 +3099,14 @@ fn F() { // CHECK:STDOUT: %addr.loc10_33.3: %ptr.7c7 = addr_of %.loc10_33.1 // CHECK:STDOUT: %operator_Plus__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_Plus__carbon_thunk.decl(%addr.loc10_33.1, %addr.loc10_33.2, %addr.loc10_33.3) // CHECK:STDOUT: %.loc10_33.2: init %C to %.loc10_33.1 = mark_in_place_init %operator_Plus__carbon_thunk.call +// CHECK:STDOUT: %.loc10_33.3: ref %C = temporary %.loc10_33.1, %.loc10_33.2 +// CHECK:STDOUT: %.loc10_33.4: %C = acquire_value %.loc10_33.3 // CHECK:STDOUT: %.loc10_25: type = splice_block %C.ref.loc10 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %N.ref.loc10: = name_ref N, imports.%N [concrete = imports.%N] // CHECK:STDOUT: %O.ref.loc10: type = name_ref O, imports.%O.decl [concrete = constants.%O] // CHECK:STDOUT: %C.ref.loc10: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc10_33.3: ref %C = temporary %.loc10_33.1, %.loc10_33.2 -// CHECK:STDOUT: %.loc10_33.4: %C = acquire_value %.loc10_33.3 // CHECK:STDOUT: %c3: %C = value_binding c3, %.loc10_33.4 // CHECK:STDOUT: // CHECK:STDOUT: %C.Op.bound.loc10: = bound_method %.loc10_33.3, constants.%C.Op @@ -3070,13 +3130,19 @@ fn F() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %pattern_type.bbc: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = ref_binding_pattern c1 [concrete] +// CHECK:STDOUT: %c1.var_patt: %pattern_type.bbc = var_pattern %c1.patt [concrete] // CHECK:STDOUT: %C.C.cpp_overload_set.type: type = cpp_overload_set_type @C.C.cpp_overload_set [concrete] // CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete] // CHECK:STDOUT: %ptr.0a2: type = ptr_type %C [concrete] // CHECK:STDOUT: %C__carbon_thunk.type: type = fn_type @C__carbon_thunk [concrete] // CHECK:STDOUT: %C__carbon_thunk: %C__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = ref_binding_pattern c2 [concrete] +// CHECK:STDOUT: %c2.var_patt: %pattern_type.bbc = var_pattern %c2.patt [concrete] // CHECK:STDOUT: %operator_Minus__carbon_thunk.type: type = fn_type @operator_Minus__carbon_thunk [concrete] // CHECK:STDOUT: %operator_Minus__carbon_thunk: %operator_Minus__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %c3.patt: %pattern_type.bbc = ref_binding_pattern c3 [concrete] +// CHECK:STDOUT: %c3.var_patt: %pattern_type.bbc = var_pattern %c3.patt [concrete] // CHECK:STDOUT: %operator_Plus__carbon_thunk.type: type = fn_type @operator_Plus__carbon_thunk [concrete] // CHECK:STDOUT: %operator_Plus__carbon_thunk: %operator_Plus__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %C.cpp_destructor.type: type = fn_type @C.cpp_destructor [concrete] @@ -3117,8 +3183,8 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = ref_binding_pattern c1 [concrete] -// CHECK:STDOUT: %c1.var_patt: %pattern_type.bbc = var_pattern %c1.patt [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = ref_binding_pattern c1 [concrete = constants.%c1.patt] +// CHECK:STDOUT: %c1.var_patt: %pattern_type.bbc = var_pattern %c1.patt [concrete = constants.%c1.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c1.var: ref %C = var %c1.var_patt // CHECK:STDOUT: %Cpp.ref.loc8_19: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] @@ -3135,8 +3201,8 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %c1: ref %C = ref_binding c1, %c1.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = ref_binding_pattern c2 [concrete] -// CHECK:STDOUT: %c2.var_patt: %pattern_type.bbc = var_pattern %c2.patt [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = ref_binding_pattern c2 [concrete = constants.%c2.patt] +// CHECK:STDOUT: %c2.var_patt: %pattern_type.bbc = var_pattern %c2.patt [concrete = constants.%c2.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c2.var: ref %C = var %c2.var_patt // CHECK:STDOUT: %c1.ref.loc9: ref %C = name_ref c1, %c1 @@ -3151,8 +3217,8 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %c2: ref %C = ref_binding c2, %c2.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c3.patt: %pattern_type.bbc = ref_binding_pattern c3 [concrete] -// CHECK:STDOUT: %c3.var_patt: %pattern_type.bbc = var_pattern %c3.patt [concrete] +// CHECK:STDOUT: %c3.patt: %pattern_type.bbc = ref_binding_pattern c3 [concrete = constants.%c3.patt] +// CHECK:STDOUT: %c3.var_patt: %pattern_type.bbc = var_pattern %c3.patt [concrete = constants.%c3.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c3.var: ref %C = var %c3.var_patt // CHECK:STDOUT: %c1.ref.loc10: ref %C = name_ref c1, %c1 @@ -3224,6 +3290,7 @@ fn F() { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %pattern_type.bbc: type = pattern_type %C [concrete] // CHECK:STDOUT: %ptr.0a2: type = ptr_type %C [concrete] +// CHECK:STDOUT: %c3.patt: %pattern_type.bbc = value_binding_pattern c3 [concrete] // CHECK:STDOUT: %operator_Plus__carbon_thunk.type: type = fn_type @operator_Plus__carbon_thunk [concrete] // CHECK:STDOUT: %operator_Plus__carbon_thunk: %operator_Plus__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %C.cpp_destructor.type: type = fn_type @C.cpp_destructor [concrete] @@ -3254,7 +3321,7 @@ fn F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c3.patt: %pattern_type.bbc = value_binding_pattern c3 [concrete] +// CHECK:STDOUT: %c3.patt: %pattern_type.bbc = value_binding_pattern c3 [concrete = constants.%c3.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c1.ref: %C = name_ref c1, %c1 // CHECK:STDOUT: %c2.ref: %C = name_ref c2, %c2 @@ -3266,12 +3333,12 @@ fn F() { // CHECK:STDOUT: %addr.loc10_29.3: %ptr.0a2 = addr_of %.loc10_29.1 // CHECK:STDOUT: %operator_Plus__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_Plus__carbon_thunk.decl(%addr.loc10_29.1, %addr.loc10_29.2, %addr.loc10_29.3) // CHECK:STDOUT: %.loc10_29.2: init %C to %.loc10_29.1 = mark_in_place_init %operator_Plus__carbon_thunk.call +// CHECK:STDOUT: %.loc10_29.3: ref %C = temporary %.loc10_29.1, %.loc10_29.2 +// CHECK:STDOUT: %.loc10_29.4: %C = acquire_value %.loc10_29.3 // CHECK:STDOUT: %.loc10_21: type = splice_block %C.ref.loc10 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref.loc10: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc10_29.3: ref %C = temporary %.loc10_29.1, %.loc10_29.2 -// CHECK:STDOUT: %.loc10_29.4: %C = acquire_value %.loc10_29.3 // CHECK:STDOUT: %c3: %C = value_binding c3, %.loc10_29.4 // CHECK:STDOUT: // CHECK:STDOUT: %C.Op.bound.loc10: = bound_method %.loc10_29.3, constants.%C.Op diff --git a/toolchain/check/testdata/interop/cpp/operators/ordered_with.carbon b/toolchain/check/testdata/interop/cpp/operators/ordered_with.carbon index 83ceb071af0d..c6b702d3cf84 100644 --- a/toolchain/check/testdata/interop/cpp/operators/ordered_with.carbon +++ b/toolchain/check/testdata/interop/cpp/operators/ordered_with.carbon @@ -392,6 +392,8 @@ fn Test(missing_less: Cpp.MissingLess, // CHECK:STDOUT: --- returns_bool.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %U: type = symbolic_binding U, 0 [symbolic] // CHECK:STDOUT: %Other: type = symbolic_binding Other, 0 [symbolic] // CHECK:STDOUT: %OrderedWith.type.32ae87.1: type = facet_type <@OrderedWith.1, @OrderedWith.1(%Other)> [symbolic] @@ -407,6 +409,7 @@ fn Test(missing_less: Cpp.MissingLess, // CHECK:STDOUT: %OrderedWith.WithSelf.Less.9e1f56.1: %OrderedWith.WithSelf.Less.type.b87f4b.1 = struct_value () [symbolic] // CHECK:STDOUT: %OrderedWith.type.32ae87.2: type = facet_type <@OrderedWith.1, @OrderedWith.1(%U)> [symbolic] // CHECK:STDOUT: %pattern_type.ebc: type = pattern_type %OrderedWith.type.32ae87.2 [symbolic] +// CHECK:STDOUT: %T.patt.aaa: %pattern_type.ebc = symbolic_binding_pattern T, 1 [symbolic] // CHECK:STDOUT: %T: %OrderedWith.type.32ae87.2 = symbolic_binding T, 1 [symbolic] // CHECK:STDOUT: %OrderedWith.assoc_type.1d2e6f.2: type = assoc_entity_type @OrderedWith.1, @OrderedWith.1(%U) [symbolic] // CHECK:STDOUT: %assoc0.c0023b.2: %OrderedWith.assoc_type.1d2e6f.2 = assoc_entity element0, imports.%Core.import_ref.e7a [symbolic] @@ -415,7 +418,11 @@ fn Test(missing_less: Cpp.MissingLess, // CHECK:STDOUT: %assoc3.5d53f7.2: %OrderedWith.assoc_type.1d2e6f.2 = assoc_entity element3, imports.%Core.import_ref.39b [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] // CHECK:STDOUT: %pattern_type.f6ec4f.2: type = pattern_type %T.as_type [symbolic] +// CHECK:STDOUT: %x.param_patt.a58: %pattern_type.f6ec4f.2 = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.140: %pattern_type.f6ec4f.2 = at_binding_pattern x, %x.param_patt.a58 [symbolic] // CHECK:STDOUT: %pattern_type.51d1c4.2: type = pattern_type %U [symbolic] +// CHECK:STDOUT: %y.param_patt.be3: %pattern_type.51d1c4.2 = value_param_pattern [symbolic] +// CHECK:STDOUT: %y.patt.b85: %pattern_type.51d1c4.2 = at_binding_pattern y, %y.param_patt.be3 [symbolic] // CHECK:STDOUT: %require_complete.3c0: = require_complete_type %OrderedWith.type.32ae87.2 [symbolic] // CHECK:STDOUT: %assoc0.13c: %OrderedWith.assoc_type.1d2e6f.1 = assoc_entity element0, imports.%Core.import_ref.447 [symbolic] // CHECK:STDOUT: %OrderedWith.lookup_impl_witness: = lookup_impl_witness %T, @OrderedWith.1, @OrderedWith.1(%U) [symbolic] @@ -459,6 +466,11 @@ fn Test(missing_less: Cpp.MissingLess, // CHECK:STDOUT: %custom_witness.593: = custom_witness (%Ordered.Less, %Ordered.LessOrEquivalent, %Ordered.Greater, %Ordered.GreaterOrEquivalent), @OrderedWith.1, @OrderedWith.1(%Ordered) [concrete] // CHECK:STDOUT: %OrderedWith.facet.517: %OrderedWith.type.39d = facet_value %Ordered, (%custom_witness.593) [concrete] // CHECK:STDOUT: %pattern_type.d57: type = pattern_type %OrderedWith.type.39d [concrete] +// CHECK:STDOUT: %T.patt.67e: %pattern_type.d57 = symbolic_binding_pattern T, 1 [symbolic] +// CHECK:STDOUT: %x.param_patt.e3d: %pattern_type.e66 = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.51a: %pattern_type.e66 = at_binding_pattern x, %x.param_patt.e3d [concrete] +// CHECK:STDOUT: %y.param_patt.4a3: %pattern_type.e66 = value_param_pattern [concrete] +// CHECK:STDOUT: %y.patt.397: %pattern_type.e66 = at_binding_pattern y, %y.param_patt.4a3 [concrete] // CHECK:STDOUT: %complete_type.e48: = complete_type_witness %OrderedWith.type.39d [concrete] // CHECK:STDOUT: %OrderedWith.WithSelf.Less.type.652: type = fn_type @OrderedWith.WithSelf.Less, @OrderedWith.WithSelf(%Ordered, %OrderedWith.facet.517) [concrete] // CHECK:STDOUT: %.92e: type = fn_type_with_self_type %OrderedWith.WithSelf.Less.type.652, %OrderedWith.facet.517 [concrete] @@ -561,23 +573,35 @@ fn Test(missing_less: Cpp.MissingLess, // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @OrderedWith.loc13(constants.%U, constants.%T) { +// CHECK:STDOUT: %U.patt.loc13_17.2 => constants.%U.patt // CHECK:STDOUT: %U.loc13_17.1 => constants.%U // CHECK:STDOUT: %OrderedWith.type.loc13_48.1 => constants.%OrderedWith.type.32ae87.2 -// CHECK:STDOUT: %T.loc13_27.1 => constants.%T // CHECK:STDOUT: %pattern_type.loc13_27 => constants.%pattern_type.ebc +// CHECK:STDOUT: %T.patt.loc13_27.2 => constants.%T.patt.aaa +// CHECK:STDOUT: %T.loc13_27.1 => constants.%T // CHECK:STDOUT: %T.as_type.loc13_54.1 => constants.%T.as_type // CHECK:STDOUT: %pattern_type.loc13_52 => constants.%pattern_type.f6ec4f.2 +// CHECK:STDOUT: %x.param_patt.loc13_52.2 => constants.%x.param_patt.a58 +// CHECK:STDOUT: %x.patt.loc13_52.2 => constants.%x.patt.140 // CHECK:STDOUT: %pattern_type.loc13_58 => constants.%pattern_type.51d1c4.2 +// CHECK:STDOUT: %y.param_patt.loc13_58.2 => constants.%y.param_patt.be3 +// CHECK:STDOUT: %y.patt.loc13_58.2 => constants.%y.patt.b85 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @OrderedWith.loc13(constants.%Ordered, constants.%OrderedWith.facet.517) { +// CHECK:STDOUT: %U.patt.loc13_17.2 => constants.%U.patt // CHECK:STDOUT: %U.loc13_17.1 => constants.%Ordered // CHECK:STDOUT: %OrderedWith.type.loc13_48.1 => constants.%OrderedWith.type.39d -// CHECK:STDOUT: %T.loc13_27.1 => constants.%OrderedWith.facet.517 // CHECK:STDOUT: %pattern_type.loc13_27 => constants.%pattern_type.d57 +// CHECK:STDOUT: %T.patt.loc13_27.2 => constants.%T.patt.67e +// CHECK:STDOUT: %T.loc13_27.1 => constants.%OrderedWith.facet.517 // CHECK:STDOUT: %T.as_type.loc13_54.1 => constants.%Ordered // CHECK:STDOUT: %pattern_type.loc13_52 => constants.%pattern_type.e66 +// CHECK:STDOUT: %x.param_patt.loc13_52.2 => constants.%x.param_patt.e3d +// CHECK:STDOUT: %x.patt.loc13_52.2 => constants.%x.patt.51a // CHECK:STDOUT: %pattern_type.loc13_58 => constants.%pattern_type.e66 +// CHECK:STDOUT: %y.param_patt.loc13_58.2 => constants.%y.param_patt.4a3 +// CHECK:STDOUT: %y.patt.loc13_58.2 => constants.%y.patt.397 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc13_52 => constants.%complete_type.357 @@ -610,6 +634,8 @@ fn Test(missing_less: Cpp.MissingLess, // CHECK:STDOUT: --- cross_type_ordering.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %U: type = symbolic_binding U, 0 [symbolic] // CHECK:STDOUT: %Other: type = symbolic_binding Other, 0 [symbolic] // CHECK:STDOUT: %OrderedWith.type.32ae87.1: type = facet_type <@OrderedWith.1, @OrderedWith.1(%Other)> [symbolic] @@ -625,6 +651,7 @@ fn Test(missing_less: Cpp.MissingLess, // CHECK:STDOUT: %OrderedWith.WithSelf.Less.9e1f56.1: %OrderedWith.WithSelf.Less.type.b87f4b.1 = struct_value () [symbolic] // CHECK:STDOUT: %OrderedWith.type.32ae87.2: type = facet_type <@OrderedWith.1, @OrderedWith.1(%U)> [symbolic] // CHECK:STDOUT: %pattern_type.ebc: type = pattern_type %OrderedWith.type.32ae87.2 [symbolic] +// CHECK:STDOUT: %T.patt.aaa: %pattern_type.ebc = symbolic_binding_pattern T, 1 [symbolic] // CHECK:STDOUT: %T: %OrderedWith.type.32ae87.2 = symbolic_binding T, 1 [symbolic] // CHECK:STDOUT: %OrderedWith.assoc_type.1d2e6f.2: type = assoc_entity_type @OrderedWith.1, @OrderedWith.1(%U) [symbolic] // CHECK:STDOUT: %assoc0.c0023b.2: %OrderedWith.assoc_type.1d2e6f.2 = assoc_entity element0, imports.%Core.import_ref.e7a [symbolic] @@ -633,7 +660,11 @@ fn Test(missing_less: Cpp.MissingLess, // CHECK:STDOUT: %assoc3.5d53f7.2: %OrderedWith.assoc_type.1d2e6f.2 = assoc_entity element3, imports.%Core.import_ref.39b [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] // CHECK:STDOUT: %pattern_type.f6ec4f.2: type = pattern_type %T.as_type [symbolic] +// CHECK:STDOUT: %x.param_patt.a58: %pattern_type.f6ec4f.2 = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.140: %pattern_type.f6ec4f.2 = at_binding_pattern x, %x.param_patt.a58 [symbolic] // CHECK:STDOUT: %pattern_type.51d1c4.2: type = pattern_type %U [symbolic] +// CHECK:STDOUT: %y.param_patt.be3: %pattern_type.51d1c4.2 = value_param_pattern [symbolic] +// CHECK:STDOUT: %y.patt.b85: %pattern_type.51d1c4.2 = at_binding_pattern y, %y.param_patt.be3 [symbolic] // CHECK:STDOUT: %require_complete.3c0: = require_complete_type %OrderedWith.type.32ae87.2 [symbolic] // CHECK:STDOUT: %assoc0.13c: %OrderedWith.assoc_type.1d2e6f.1 = assoc_entity element0, imports.%Core.import_ref.447 [symbolic] // CHECK:STDOUT: %OrderedWith.lookup_impl_witness: = lookup_impl_witness %T, @OrderedWith.1, @OrderedWith.1(%U) [symbolic] @@ -687,6 +718,11 @@ fn Test(missing_less: Cpp.MissingLess, // CHECK:STDOUT: %custom_witness.1d9: = custom_witness (%A1.Less, %A1.LessOrEquivalent, %A1.Greater, %A1.GreaterOrEquivalent), @OrderedWith.1, @OrderedWith.1(%B1) [concrete] // CHECK:STDOUT: %OrderedWith.facet.370: %OrderedWith.type.4d9 = facet_value %A1, (%custom_witness.1d9) [concrete] // CHECK:STDOUT: %pattern_type.53b: type = pattern_type %OrderedWith.type.4d9 [concrete] +// CHECK:STDOUT: %T.patt.8c1: %pattern_type.53b = symbolic_binding_pattern T, 1 [symbolic] +// CHECK:STDOUT: %x.param_patt.c7f: %pattern_type.3b4 = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.4ff: %pattern_type.3b4 = at_binding_pattern x, %x.param_patt.c7f [concrete] +// CHECK:STDOUT: %y.param_patt.9d7: %pattern_type.5b2 = value_param_pattern [concrete] +// CHECK:STDOUT: %y.patt.979: %pattern_type.5b2 = at_binding_pattern y, %y.param_patt.9d7 [concrete] // CHECK:STDOUT: %OrderedWith.type.fe8: type = facet_type <@OrderedWith.1, @OrderedWith.1(%A1)> [concrete] // CHECK:STDOUT: %OrderedWith.assoc_type.31d: type = assoc_entity_type @OrderedWith.1, @OrderedWith.1(%A1) [concrete] // CHECK:STDOUT: %assoc0.a34: %OrderedWith.assoc_type.31d = assoc_entity element0, imports.%Core.import_ref.e7a [concrete] @@ -704,6 +740,11 @@ fn Test(missing_less: Cpp.MissingLess, // CHECK:STDOUT: %custom_witness.d3a: = custom_witness (%B1.Less, %B1.LessOrEquivalent, %B1.Greater, %B1.GreaterOrEquivalent), @OrderedWith.1, @OrderedWith.1(%A1) [concrete] // CHECK:STDOUT: %OrderedWith.facet.288: %OrderedWith.type.fe8 = facet_value %B1, (%custom_witness.d3a) [concrete] // CHECK:STDOUT: %pattern_type.280: type = pattern_type %OrderedWith.type.fe8 [concrete] +// CHECK:STDOUT: %T.patt.5de: %pattern_type.280 = symbolic_binding_pattern T, 1 [symbolic] +// CHECK:STDOUT: %x.param_patt.bff: %pattern_type.5b2 = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.f3d: %pattern_type.5b2 = at_binding_pattern x, %x.param_patt.bff [concrete] +// CHECK:STDOUT: %y.param_patt.257: %pattern_type.3b4 = value_param_pattern [concrete] +// CHECK:STDOUT: %y.patt.774: %pattern_type.3b4 = at_binding_pattern y, %y.param_patt.257 [concrete] // CHECK:STDOUT: %OrderedWith.type.9ee: type = facet_type <@OrderedWith.1, @OrderedWith.1(%A2)> [concrete] // CHECK:STDOUT: %OrderedWith.assoc_type.941: type = assoc_entity_type @OrderedWith.1, @OrderedWith.1(%A2) [concrete] // CHECK:STDOUT: %assoc0.73a: %OrderedWith.assoc_type.941 = assoc_entity element0, imports.%Core.import_ref.e7a [concrete] @@ -721,6 +762,11 @@ fn Test(missing_less: Cpp.MissingLess, // CHECK:STDOUT: %custom_witness.bbd: = custom_witness (%B2.Less, %B2.LessOrEquivalent, %B2.Greater, %B2.GreaterOrEquivalent), @OrderedWith.1, @OrderedWith.1(%A2) [concrete] // CHECK:STDOUT: %OrderedWith.facet.2ea: %OrderedWith.type.9ee = facet_value %B2, (%custom_witness.bbd) [concrete] // CHECK:STDOUT: %pattern_type.a96: type = pattern_type %OrderedWith.type.9ee [concrete] +// CHECK:STDOUT: %T.patt.e0a: %pattern_type.a96 = symbolic_binding_pattern T, 1 [symbolic] +// CHECK:STDOUT: %x.param_patt.0e6: %pattern_type.d1e = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.94e: %pattern_type.d1e = at_binding_pattern x, %x.param_patt.0e6 [concrete] +// CHECK:STDOUT: %y.param_patt.a4f: %pattern_type.9f0 = value_param_pattern [concrete] +// CHECK:STDOUT: %y.patt.912: %pattern_type.9f0 = at_binding_pattern y, %y.param_patt.a4f [concrete] // CHECK:STDOUT: %OrderedWith.type.cc8: type = facet_type <@OrderedWith.1, @OrderedWith.1(%B3)> [concrete] // CHECK:STDOUT: %OrderedWith.assoc_type.45f: type = assoc_entity_type @OrderedWith.1, @OrderedWith.1(%B3) [concrete] // CHECK:STDOUT: %assoc0.2c4: %OrderedWith.assoc_type.45f = assoc_entity element0, imports.%Core.import_ref.e7a [concrete] @@ -738,6 +784,11 @@ fn Test(missing_less: Cpp.MissingLess, // CHECK:STDOUT: %custom_witness.773: = custom_witness (%A3.Less, %LessOrEquivalent, %A3.Greater, %GreaterOrEquivalent), @OrderedWith.1, @OrderedWith.1(%B3) [concrete] // CHECK:STDOUT: %OrderedWith.facet.d6b: %OrderedWith.type.cc8 = facet_value %A3, (%custom_witness.773) [concrete] // CHECK:STDOUT: %pattern_type.edf: type = pattern_type %OrderedWith.type.cc8 [concrete] +// CHECK:STDOUT: %T.patt.8a7: %pattern_type.edf = symbolic_binding_pattern T, 1 [symbolic] +// CHECK:STDOUT: %x.param_patt.429: %pattern_type.7fe = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.6e2: %pattern_type.7fe = at_binding_pattern x, %x.param_patt.429 [concrete] +// CHECK:STDOUT: %y.param_patt.b51: %pattern_type.2dd = value_param_pattern [concrete] +// CHECK:STDOUT: %y.patt.7b8: %pattern_type.2dd = at_binding_pattern y, %y.param_patt.b51 [concrete] // CHECK:STDOUT: %OrderedWith.type.30a: type = facet_type <@OrderedWith.1, @OrderedWith.1(%A3)> [concrete] // CHECK:STDOUT: %OrderedWith.assoc_type.18e: type = assoc_entity_type @OrderedWith.1, @OrderedWith.1(%A3) [concrete] // CHECK:STDOUT: %assoc0.d97: %OrderedWith.assoc_type.18e = assoc_entity element0, imports.%Core.import_ref.e7a [concrete] @@ -755,6 +806,11 @@ fn Test(missing_less: Cpp.MissingLess, // CHECK:STDOUT: %custom_witness.870: = custom_witness (%Less, %B3.LessOrEquivalent, %Greater, %B3.GreaterOrEquivalent), @OrderedWith.1, @OrderedWith.1(%A3) [concrete] // CHECK:STDOUT: %OrderedWith.facet.52f: %OrderedWith.type.30a = facet_value %B3, (%custom_witness.870) [concrete] // CHECK:STDOUT: %pattern_type.5db: type = pattern_type %OrderedWith.type.30a [concrete] +// CHECK:STDOUT: %T.patt.36b: %pattern_type.5db = symbolic_binding_pattern T, 1 [symbolic] +// CHECK:STDOUT: %x.param_patt.074: %pattern_type.2dd = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.234: %pattern_type.2dd = at_binding_pattern x, %x.param_patt.074 [concrete] +// CHECK:STDOUT: %y.param_patt.d86: %pattern_type.7fe = value_param_pattern [concrete] +// CHECK:STDOUT: %y.patt.fd9: %pattern_type.7fe = at_binding_pattern y, %y.param_patt.d86 [concrete] // CHECK:STDOUT: %complete_type.f5b: = complete_type_witness %OrderedWith.type.4d9 [concrete] // CHECK:STDOUT: %OrderedWith.WithSelf.Less.type.bf4: type = fn_type @OrderedWith.WithSelf.Less, @OrderedWith.WithSelf(%B1, %OrderedWith.facet.370) [concrete] // CHECK:STDOUT: %.e3b: type = fn_type_with_self_type %OrderedWith.WithSelf.Less.type.bf4, %OrderedWith.facet.370 [concrete] @@ -893,23 +949,35 @@ fn Test(missing_less: Cpp.MissingLess, // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @OrderedWith.loc54(constants.%U, constants.%T) { +// CHECK:STDOUT: %U.patt.loc54_17.2 => constants.%U.patt // CHECK:STDOUT: %U.loc54_17.1 => constants.%U // CHECK:STDOUT: %OrderedWith.type.loc54_48.1 => constants.%OrderedWith.type.32ae87.2 -// CHECK:STDOUT: %T.loc54_27.1 => constants.%T // CHECK:STDOUT: %pattern_type.loc54_27 => constants.%pattern_type.ebc +// CHECK:STDOUT: %T.patt.loc54_27.2 => constants.%T.patt.aaa +// CHECK:STDOUT: %T.loc54_27.1 => constants.%T // CHECK:STDOUT: %T.as_type.loc54_54.1 => constants.%T.as_type // CHECK:STDOUT: %pattern_type.loc54_52 => constants.%pattern_type.f6ec4f.2 +// CHECK:STDOUT: %x.param_patt.loc54_52.2 => constants.%x.param_patt.a58 +// CHECK:STDOUT: %x.patt.loc54_52.2 => constants.%x.patt.140 // CHECK:STDOUT: %pattern_type.loc54_58 => constants.%pattern_type.51d1c4.2 +// CHECK:STDOUT: %y.param_patt.loc54_58.2 => constants.%y.param_patt.be3 +// CHECK:STDOUT: %y.patt.loc54_58.2 => constants.%y.patt.b85 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @OrderedWith.loc54(constants.%B1, constants.%OrderedWith.facet.370) { +// CHECK:STDOUT: %U.patt.loc54_17.2 => constants.%U.patt // CHECK:STDOUT: %U.loc54_17.1 => constants.%B1 // CHECK:STDOUT: %OrderedWith.type.loc54_48.1 => constants.%OrderedWith.type.4d9 -// CHECK:STDOUT: %T.loc54_27.1 => constants.%OrderedWith.facet.370 // CHECK:STDOUT: %pattern_type.loc54_27 => constants.%pattern_type.53b +// CHECK:STDOUT: %T.patt.loc54_27.2 => constants.%T.patt.8c1 +// CHECK:STDOUT: %T.loc54_27.1 => constants.%OrderedWith.facet.370 // CHECK:STDOUT: %T.as_type.loc54_54.1 => constants.%A1 // CHECK:STDOUT: %pattern_type.loc54_52 => constants.%pattern_type.3b4 +// CHECK:STDOUT: %x.param_patt.loc54_52.2 => constants.%x.param_patt.c7f +// CHECK:STDOUT: %x.patt.loc54_52.2 => constants.%x.patt.4ff // CHECK:STDOUT: %pattern_type.loc54_58 => constants.%pattern_type.5b2 +// CHECK:STDOUT: %y.param_patt.loc54_58.2 => constants.%y.param_patt.9d7 +// CHECK:STDOUT: %y.patt.loc54_58.2 => constants.%y.patt.979 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc54_52 => constants.%complete_type.357 @@ -940,13 +1008,19 @@ fn Test(missing_less: Cpp.MissingLess, // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @OrderedWith.loc54(constants.%A1, constants.%OrderedWith.facet.288) { +// CHECK:STDOUT: %U.patt.loc54_17.2 => constants.%U.patt // CHECK:STDOUT: %U.loc54_17.1 => constants.%A1 // CHECK:STDOUT: %OrderedWith.type.loc54_48.1 => constants.%OrderedWith.type.fe8 -// CHECK:STDOUT: %T.loc54_27.1 => constants.%OrderedWith.facet.288 // CHECK:STDOUT: %pattern_type.loc54_27 => constants.%pattern_type.280 +// CHECK:STDOUT: %T.patt.loc54_27.2 => constants.%T.patt.5de +// CHECK:STDOUT: %T.loc54_27.1 => constants.%OrderedWith.facet.288 // CHECK:STDOUT: %T.as_type.loc54_54.1 => constants.%B1 // CHECK:STDOUT: %pattern_type.loc54_52 => constants.%pattern_type.5b2 +// CHECK:STDOUT: %x.param_patt.loc54_52.2 => constants.%x.param_patt.bff +// CHECK:STDOUT: %x.patt.loc54_52.2 => constants.%x.patt.f3d // CHECK:STDOUT: %pattern_type.loc54_58 => constants.%pattern_type.3b4 +// CHECK:STDOUT: %y.param_patt.loc54_58.2 => constants.%y.param_patt.257 +// CHECK:STDOUT: %y.patt.loc54_58.2 => constants.%y.patt.774 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc54_52 => constants.%complete_type.357 @@ -977,13 +1051,19 @@ fn Test(missing_less: Cpp.MissingLess, // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @OrderedWith.loc54(constants.%A2, constants.%OrderedWith.facet.2ea) { +// CHECK:STDOUT: %U.patt.loc54_17.2 => constants.%U.patt // CHECK:STDOUT: %U.loc54_17.1 => constants.%A2 // CHECK:STDOUT: %OrderedWith.type.loc54_48.1 => constants.%OrderedWith.type.9ee -// CHECK:STDOUT: %T.loc54_27.1 => constants.%OrderedWith.facet.2ea // CHECK:STDOUT: %pattern_type.loc54_27 => constants.%pattern_type.a96 +// CHECK:STDOUT: %T.patt.loc54_27.2 => constants.%T.patt.e0a +// CHECK:STDOUT: %T.loc54_27.1 => constants.%OrderedWith.facet.2ea // CHECK:STDOUT: %T.as_type.loc54_54.1 => constants.%B2 // CHECK:STDOUT: %pattern_type.loc54_52 => constants.%pattern_type.d1e +// CHECK:STDOUT: %x.param_patt.loc54_52.2 => constants.%x.param_patt.0e6 +// CHECK:STDOUT: %x.patt.loc54_52.2 => constants.%x.patt.94e // CHECK:STDOUT: %pattern_type.loc54_58 => constants.%pattern_type.9f0 +// CHECK:STDOUT: %y.param_patt.loc54_58.2 => constants.%y.param_patt.a4f +// CHECK:STDOUT: %y.patt.loc54_58.2 => constants.%y.patt.912 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc54_52 => constants.%complete_type.357 @@ -1014,13 +1094,19 @@ fn Test(missing_less: Cpp.MissingLess, // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @OrderedWith.loc54(constants.%B3, constants.%OrderedWith.facet.d6b) { +// CHECK:STDOUT: %U.patt.loc54_17.2 => constants.%U.patt // CHECK:STDOUT: %U.loc54_17.1 => constants.%B3 // CHECK:STDOUT: %OrderedWith.type.loc54_48.1 => constants.%OrderedWith.type.cc8 -// CHECK:STDOUT: %T.loc54_27.1 => constants.%OrderedWith.facet.d6b // CHECK:STDOUT: %pattern_type.loc54_27 => constants.%pattern_type.edf +// CHECK:STDOUT: %T.patt.loc54_27.2 => constants.%T.patt.8a7 +// CHECK:STDOUT: %T.loc54_27.1 => constants.%OrderedWith.facet.d6b // CHECK:STDOUT: %T.as_type.loc54_54.1 => constants.%A3 // CHECK:STDOUT: %pattern_type.loc54_52 => constants.%pattern_type.7fe +// CHECK:STDOUT: %x.param_patt.loc54_52.2 => constants.%x.param_patt.429 +// CHECK:STDOUT: %x.patt.loc54_52.2 => constants.%x.patt.6e2 // CHECK:STDOUT: %pattern_type.loc54_58 => constants.%pattern_type.2dd +// CHECK:STDOUT: %y.param_patt.loc54_58.2 => constants.%y.param_patt.b51 +// CHECK:STDOUT: %y.patt.loc54_58.2 => constants.%y.patt.7b8 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc54_52 => constants.%complete_type.357 @@ -1051,13 +1137,19 @@ fn Test(missing_less: Cpp.MissingLess, // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @OrderedWith.loc54(constants.%A3, constants.%OrderedWith.facet.52f) { +// CHECK:STDOUT: %U.patt.loc54_17.2 => constants.%U.patt // CHECK:STDOUT: %U.loc54_17.1 => constants.%A3 // CHECK:STDOUT: %OrderedWith.type.loc54_48.1 => constants.%OrderedWith.type.30a -// CHECK:STDOUT: %T.loc54_27.1 => constants.%OrderedWith.facet.52f // CHECK:STDOUT: %pattern_type.loc54_27 => constants.%pattern_type.5db +// CHECK:STDOUT: %T.patt.loc54_27.2 => constants.%T.patt.36b +// CHECK:STDOUT: %T.loc54_27.1 => constants.%OrderedWith.facet.52f // CHECK:STDOUT: %T.as_type.loc54_54.1 => constants.%B3 // CHECK:STDOUT: %pattern_type.loc54_52 => constants.%pattern_type.2dd +// CHECK:STDOUT: %x.param_patt.loc54_52.2 => constants.%x.param_patt.074 +// CHECK:STDOUT: %x.patt.loc54_52.2 => constants.%x.patt.234 // CHECK:STDOUT: %pattern_type.loc54_58 => constants.%pattern_type.7fe +// CHECK:STDOUT: %y.param_patt.loc54_58.2 => constants.%y.param_patt.d86 +// CHECK:STDOUT: %y.patt.loc54_58.2 => constants.%y.patt.fd9 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc54_52 => constants.%complete_type.357 diff --git a/toolchain/check/testdata/interop/cpp/operators/spaceship.carbon b/toolchain/check/testdata/interop/cpp/operators/spaceship.carbon index 79da4c897051..3e253d53c28f 100644 --- a/toolchain/check/testdata/interop/cpp/operators/spaceship.carbon +++ b/toolchain/check/testdata/interop/cpp/operators/spaceship.carbon @@ -229,6 +229,8 @@ fn Test(returns_strong_ordering: Cpp.ReturnsStrongOrdering) { // CHECK:STDOUT: --- fail_todo_spaceship_rewrites.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %U: type = symbolic_binding U, 0 [symbolic] // CHECK:STDOUT: %Other: type = symbolic_binding Other, 0 [symbolic] // CHECK:STDOUT: %EqWith.type.98ea86.1: type = facet_type <@EqWith.1, @EqWith.1(%Other)> [symbolic] @@ -240,13 +242,18 @@ fn Test(returns_strong_ordering: Cpp.ReturnsStrongOrdering) { // CHECK:STDOUT: %EqWith.WithSelf.Equal.ae3c3e.1: %EqWith.WithSelf.Equal.type.b82ec7.1 = struct_value () [symbolic] // CHECK:STDOUT: %EqWith.type.98ea86.2: type = facet_type <@EqWith.1, @EqWith.1(%U)> [symbolic] // CHECK:STDOUT: %pattern_type.3d4: type = pattern_type %EqWith.type.98ea86.2 [symbolic] +// CHECK:STDOUT: %T.patt.6b9: %pattern_type.3d4 = symbolic_binding_pattern T, 1 [symbolic] // CHECK:STDOUT: %T.d94: %EqWith.type.98ea86.2 = symbolic_binding T, 1 [symbolic] // CHECK:STDOUT: %EqWith.assoc_type.85b122.2: type = assoc_entity_type @EqWith.1, @EqWith.1(%U) [symbolic] // CHECK:STDOUT: %assoc0.eee873.2: %EqWith.assoc_type.85b122.2 = assoc_entity element0, imports.%Core.import_ref.5ba [symbolic] // CHECK:STDOUT: %assoc1.0ffc88.2: %EqWith.assoc_type.85b122.2 = assoc_entity element1, imports.%Core.import_ref.03f [symbolic] // CHECK:STDOUT: %T.as_type.93d: type = facet_access_type %T.d94 [symbolic] // CHECK:STDOUT: %pattern_type.e6374a.2: type = pattern_type %T.as_type.93d [symbolic] +// CHECK:STDOUT: %x.param_patt.aa2: %pattern_type.e6374a.2 = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.4e4: %pattern_type.e6374a.2 = at_binding_pattern x, %x.param_patt.aa2 [symbolic] // CHECK:STDOUT: %pattern_type.51d1c4.2: type = pattern_type %U [symbolic] +// CHECK:STDOUT: %y.param_patt.be3: %pattern_type.51d1c4.2 = value_param_pattern [symbolic] +// CHECK:STDOUT: %y.patt.b85: %pattern_type.51d1c4.2 = at_binding_pattern y, %y.param_patt.be3 [symbolic] // CHECK:STDOUT: %require_complete.fb5: = require_complete_type %EqWith.type.98ea86.2 [symbolic] // CHECK:STDOUT: %assoc0.d00: %EqWith.assoc_type.85b122.1 = assoc_entity element0, imports.%Core.import_ref.2e5 [symbolic] // CHECK:STDOUT: %EqWith.lookup_impl_witness: = lookup_impl_witness %T.d94, @EqWith.1, @EqWith.1(%U) [symbolic] @@ -272,6 +279,7 @@ fn Test(returns_strong_ordering: Cpp.ReturnsStrongOrdering) { // CHECK:STDOUT: %OrderedWith.WithSelf.Less.9e1f56.1: %OrderedWith.WithSelf.Less.type.b87f4b.1 = struct_value () [symbolic] // CHECK:STDOUT: %OrderedWith.type.32ae87.2: type = facet_type <@OrderedWith.1, @OrderedWith.1(%U)> [symbolic] // CHECK:STDOUT: %pattern_type.ebc: type = pattern_type %OrderedWith.type.32ae87.2 [symbolic] +// CHECK:STDOUT: %T.patt.aaa: %pattern_type.ebc = symbolic_binding_pattern T, 1 [symbolic] // CHECK:STDOUT: %T.7df: %OrderedWith.type.32ae87.2 = symbolic_binding T, 1 [symbolic] // CHECK:STDOUT: %OrderedWith.assoc_type.1d2e6f.2: type = assoc_entity_type @OrderedWith.1, @OrderedWith.1(%U) [symbolic] // CHECK:STDOUT: %assoc0.c0023b.2: %OrderedWith.assoc_type.1d2e6f.2 = assoc_entity element0, imports.%Core.import_ref.e7a [symbolic] @@ -280,6 +288,8 @@ fn Test(returns_strong_ordering: Cpp.ReturnsStrongOrdering) { // CHECK:STDOUT: %assoc3.5d53f7.2: %OrderedWith.assoc_type.1d2e6f.2 = assoc_entity element3, imports.%Core.import_ref.39b [symbolic] // CHECK:STDOUT: %T.as_type.262: type = facet_access_type %T.7df [symbolic] // CHECK:STDOUT: %pattern_type.f6ec4f.2: type = pattern_type %T.as_type.262 [symbolic] +// CHECK:STDOUT: %x.param_patt.a58: %pattern_type.f6ec4f.2 = value_param_pattern [symbolic] +// CHECK:STDOUT: %x.patt.140: %pattern_type.f6ec4f.2 = at_binding_pattern x, %x.param_patt.a58 [symbolic] // CHECK:STDOUT: %require_complete.3c0: = require_complete_type %OrderedWith.type.32ae87.2 [symbolic] // CHECK:STDOUT: %assoc0.13c: %OrderedWith.assoc_type.1d2e6f.1 = assoc_entity element0, imports.%Core.import_ref.447 [symbolic] // CHECK:STDOUT: %OrderedWith.lookup_impl_witness: = lookup_impl_witness %T.7df, @OrderedWith.1, @OrderedWith.1(%U) [symbolic] @@ -314,16 +324,32 @@ fn Test(returns_strong_ordering: Cpp.ReturnsStrongOrdering) { // CHECK:STDOUT: %pattern_type.aac: type = pattern_type %CrossTypeRhs [concrete] // CHECK:STDOUT: %EqWith.type.bf2: type = facet_type <@EqWith.1, @EqWith.1(%DefaultSpaceshipOnly)> [concrete] // CHECK:STDOUT: %pattern_type.062: type = pattern_type %EqWith.type.bf2 [concrete] +// CHECK:STDOUT: %T.patt.107: %pattern_type.062 = symbolic_binding_pattern T, 1 [symbolic] +// CHECK:STDOUT: %y.param_patt.62b: %pattern_type.80f = value_param_pattern [concrete] +// CHECK:STDOUT: %y.patt.e91: %pattern_type.80f = at_binding_pattern y, %y.param_patt.62b [concrete] // CHECK:STDOUT: %OrderedWith.type.33f: type = facet_type <@OrderedWith.1, @OrderedWith.1(%DefaultSpaceshipOnly)> [concrete] // CHECK:STDOUT: %pattern_type.7f2: type = pattern_type %OrderedWith.type.33f [concrete] +// CHECK:STDOUT: %T.patt.84b: %pattern_type.7f2 = symbolic_binding_pattern T, 1 [symbolic] // CHECK:STDOUT: %OrderedWith.type.0fb: type = facet_type <@OrderedWith.1, @OrderedWith.1(%ReturnsStrongOrdering)> [concrete] // CHECK:STDOUT: %pattern_type.623: type = pattern_type %OrderedWith.type.0fb [concrete] +// CHECK:STDOUT: %T.patt.62e: %pattern_type.623 = symbolic_binding_pattern T, 1 [symbolic] +// CHECK:STDOUT: %y.param_patt.794: %pattern_type.37f = value_param_pattern [concrete] +// CHECK:STDOUT: %y.patt.e01: %pattern_type.37f = at_binding_pattern y, %y.param_patt.794 [concrete] // CHECK:STDOUT: %OrderedWith.type.5f1: type = facet_type <@OrderedWith.1, @OrderedWith.1(%ReturnsPartialOrdering)> [concrete] // CHECK:STDOUT: %pattern_type.53d: type = pattern_type %OrderedWith.type.5f1 [concrete] +// CHECK:STDOUT: %T.patt.d27: %pattern_type.53d = symbolic_binding_pattern T, 1 [symbolic] +// CHECK:STDOUT: %y.param_patt.301: %pattern_type.9ae = value_param_pattern [concrete] +// CHECK:STDOUT: %y.patt.e76: %pattern_type.9ae = at_binding_pattern y, %y.param_patt.301 [concrete] // CHECK:STDOUT: %OrderedWith.type.8cb: type = facet_type <@OrderedWith.1, @OrderedWith.1(%CrossTypeRhs)> [concrete] // CHECK:STDOUT: %pattern_type.935: type = pattern_type %OrderedWith.type.8cb [concrete] +// CHECK:STDOUT: %T.patt.d75: %pattern_type.935 = symbolic_binding_pattern T, 1 [symbolic] +// CHECK:STDOUT: %y.param_patt.da2: %pattern_type.aac = value_param_pattern [concrete] +// CHECK:STDOUT: %y.patt.ac7: %pattern_type.aac = at_binding_pattern y, %y.param_patt.da2 [concrete] // CHECK:STDOUT: %OrderedWith.type.c6c: type = facet_type <@OrderedWith.1, @OrderedWith.1(%CrossTypeLhs)> [concrete] // CHECK:STDOUT: %pattern_type.b4e: type = pattern_type %OrderedWith.type.c6c [concrete] +// CHECK:STDOUT: %T.patt.6f6: %pattern_type.b4e = symbolic_binding_pattern T, 1 [symbolic] +// CHECK:STDOUT: %y.param_patt.65d: %pattern_type.eb5 = value_param_pattern [concrete] +// CHECK:STDOUT: %y.patt.6a4: %pattern_type.eb5 = at_binding_pattern y, %y.param_patt.65d [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -468,82 +494,130 @@ fn Test(returns_strong_ordering: Cpp.ReturnsStrongOrdering) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @EqWith.loc4(constants.%U, constants.%T.d94) { +// CHECK:STDOUT: %U.patt.loc4_12.2 => constants.%U.patt // CHECK:STDOUT: %U.loc4_12.1 => constants.%U // CHECK:STDOUT: %EqWith.type.loc4_38.1 => constants.%EqWith.type.98ea86.2 -// CHECK:STDOUT: %T.loc4_22.1 => constants.%T.d94 // CHECK:STDOUT: %pattern_type.loc4_22 => constants.%pattern_type.3d4 +// CHECK:STDOUT: %T.patt.loc4_22.2 => constants.%T.patt.6b9 +// CHECK:STDOUT: %T.loc4_22.1 => constants.%T.d94 // CHECK:STDOUT: %T.as_type.loc4_44.1 => constants.%T.as_type.93d // CHECK:STDOUT: %pattern_type.loc4_42 => constants.%pattern_type.e6374a.2 +// CHECK:STDOUT: %x.param_patt.loc4_42.2 => constants.%x.param_patt.aa2 +// CHECK:STDOUT: %x.patt.loc4_42.2 => constants.%x.patt.4e4 // CHECK:STDOUT: %pattern_type.loc4_48 => constants.%pattern_type.51d1c4.2 +// CHECK:STDOUT: %y.param_patt.loc4_48.2 => constants.%y.param_patt.be3 +// CHECK:STDOUT: %y.patt.loc4_48.2 => constants.%y.patt.b85 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @OrderedWith.loc11(constants.%U, constants.%T.7df) { +// CHECK:STDOUT: %U.patt.loc11_17.2 => constants.%U.patt // CHECK:STDOUT: %U.loc11_17.1 => constants.%U // CHECK:STDOUT: %OrderedWith.type.loc11_48.1 => constants.%OrderedWith.type.32ae87.2 -// CHECK:STDOUT: %T.loc11_27.1 => constants.%T.7df // CHECK:STDOUT: %pattern_type.loc11_27 => constants.%pattern_type.ebc +// CHECK:STDOUT: %T.patt.loc11_27.2 => constants.%T.patt.aaa +// CHECK:STDOUT: %T.loc11_27.1 => constants.%T.7df // CHECK:STDOUT: %T.as_type.loc11_54.1 => constants.%T.as_type.262 // CHECK:STDOUT: %pattern_type.loc11_52 => constants.%pattern_type.f6ec4f.2 +// CHECK:STDOUT: %x.param_patt.loc11_52.2 => constants.%x.param_patt.a58 +// CHECK:STDOUT: %x.patt.loc11_52.2 => constants.%x.patt.140 // CHECK:STDOUT: %pattern_type.loc11_58 => constants.%pattern_type.51d1c4.2 +// CHECK:STDOUT: %y.param_patt.loc11_58.2 => constants.%y.param_patt.be3 +// CHECK:STDOUT: %y.patt.loc11_58.2 => constants.%y.patt.b85 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @EqWith.loc4(constants.%DefaultSpaceshipOnly, ) { +// CHECK:STDOUT: %U.patt.loc4_12.2 => constants.%U.patt // CHECK:STDOUT: %U.loc4_12.1 => constants.%DefaultSpaceshipOnly // CHECK:STDOUT: %EqWith.type.loc4_38.1 => constants.%EqWith.type.bf2 -// CHECK:STDOUT: %T.loc4_22.1 => // CHECK:STDOUT: %pattern_type.loc4_22 => constants.%pattern_type.062 +// CHECK:STDOUT: %T.patt.loc4_22.2 => constants.%T.patt.107 +// CHECK:STDOUT: %T.loc4_22.1 => // CHECK:STDOUT: %T.as_type.loc4_44.1 => // CHECK:STDOUT: %pattern_type.loc4_42 => +// CHECK:STDOUT: %x.param_patt.loc4_42.2 => +// CHECK:STDOUT: %x.patt.loc4_42.2 => // CHECK:STDOUT: %pattern_type.loc4_48 => constants.%pattern_type.80f +// CHECK:STDOUT: %y.param_patt.loc4_48.2 => constants.%y.param_patt.62b +// CHECK:STDOUT: %y.patt.loc4_48.2 => constants.%y.patt.e91 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @OrderedWith.loc11(constants.%DefaultSpaceshipOnly, ) { +// CHECK:STDOUT: %U.patt.loc11_17.2 => constants.%U.patt // CHECK:STDOUT: %U.loc11_17.1 => constants.%DefaultSpaceshipOnly // CHECK:STDOUT: %OrderedWith.type.loc11_48.1 => constants.%OrderedWith.type.33f -// CHECK:STDOUT: %T.loc11_27.1 => // CHECK:STDOUT: %pattern_type.loc11_27 => constants.%pattern_type.7f2 +// CHECK:STDOUT: %T.patt.loc11_27.2 => constants.%T.patt.84b +// CHECK:STDOUT: %T.loc11_27.1 => // CHECK:STDOUT: %T.as_type.loc11_54.1 => // CHECK:STDOUT: %pattern_type.loc11_52 => +// CHECK:STDOUT: %x.param_patt.loc11_52.2 => +// CHECK:STDOUT: %x.patt.loc11_52.2 => // CHECK:STDOUT: %pattern_type.loc11_58 => constants.%pattern_type.80f +// CHECK:STDOUT: %y.param_patt.loc11_58.2 => constants.%y.param_patt.62b +// CHECK:STDOUT: %y.patt.loc11_58.2 => constants.%y.patt.e91 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @OrderedWith.loc11(constants.%ReturnsStrongOrdering, ) { +// CHECK:STDOUT: %U.patt.loc11_17.2 => constants.%U.patt // CHECK:STDOUT: %U.loc11_17.1 => constants.%ReturnsStrongOrdering // CHECK:STDOUT: %OrderedWith.type.loc11_48.1 => constants.%OrderedWith.type.0fb -// CHECK:STDOUT: %T.loc11_27.1 => // CHECK:STDOUT: %pattern_type.loc11_27 => constants.%pattern_type.623 +// CHECK:STDOUT: %T.patt.loc11_27.2 => constants.%T.patt.62e +// CHECK:STDOUT: %T.loc11_27.1 => // CHECK:STDOUT: %T.as_type.loc11_54.1 => // CHECK:STDOUT: %pattern_type.loc11_52 => +// CHECK:STDOUT: %x.param_patt.loc11_52.2 => +// CHECK:STDOUT: %x.patt.loc11_52.2 => // CHECK:STDOUT: %pattern_type.loc11_58 => constants.%pattern_type.37f +// CHECK:STDOUT: %y.param_patt.loc11_58.2 => constants.%y.param_patt.794 +// CHECK:STDOUT: %y.patt.loc11_58.2 => constants.%y.patt.e01 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @OrderedWith.loc11(constants.%ReturnsPartialOrdering, ) { +// CHECK:STDOUT: %U.patt.loc11_17.2 => constants.%U.patt // CHECK:STDOUT: %U.loc11_17.1 => constants.%ReturnsPartialOrdering // CHECK:STDOUT: %OrderedWith.type.loc11_48.1 => constants.%OrderedWith.type.5f1 -// CHECK:STDOUT: %T.loc11_27.1 => // CHECK:STDOUT: %pattern_type.loc11_27 => constants.%pattern_type.53d +// CHECK:STDOUT: %T.patt.loc11_27.2 => constants.%T.patt.d27 +// CHECK:STDOUT: %T.loc11_27.1 => // CHECK:STDOUT: %T.as_type.loc11_54.1 => // CHECK:STDOUT: %pattern_type.loc11_52 => +// CHECK:STDOUT: %x.param_patt.loc11_52.2 => +// CHECK:STDOUT: %x.patt.loc11_52.2 => // CHECK:STDOUT: %pattern_type.loc11_58 => constants.%pattern_type.9ae +// CHECK:STDOUT: %y.param_patt.loc11_58.2 => constants.%y.param_patt.301 +// CHECK:STDOUT: %y.patt.loc11_58.2 => constants.%y.patt.e76 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @OrderedWith.loc11(constants.%CrossTypeRhs, ) { +// CHECK:STDOUT: %U.patt.loc11_17.2 => constants.%U.patt // CHECK:STDOUT: %U.loc11_17.1 => constants.%CrossTypeRhs // CHECK:STDOUT: %OrderedWith.type.loc11_48.1 => constants.%OrderedWith.type.8cb -// CHECK:STDOUT: %T.loc11_27.1 => // CHECK:STDOUT: %pattern_type.loc11_27 => constants.%pattern_type.935 +// CHECK:STDOUT: %T.patt.loc11_27.2 => constants.%T.patt.d75 +// CHECK:STDOUT: %T.loc11_27.1 => // CHECK:STDOUT: %T.as_type.loc11_54.1 => // CHECK:STDOUT: %pattern_type.loc11_52 => +// CHECK:STDOUT: %x.param_patt.loc11_52.2 => +// CHECK:STDOUT: %x.patt.loc11_52.2 => // CHECK:STDOUT: %pattern_type.loc11_58 => constants.%pattern_type.aac +// CHECK:STDOUT: %y.param_patt.loc11_58.2 => constants.%y.param_patt.da2 +// CHECK:STDOUT: %y.patt.loc11_58.2 => constants.%y.patt.ac7 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @OrderedWith.loc11(constants.%CrossTypeLhs, ) { +// CHECK:STDOUT: %U.patt.loc11_17.2 => constants.%U.patt // CHECK:STDOUT: %U.loc11_17.1 => constants.%CrossTypeLhs // CHECK:STDOUT: %OrderedWith.type.loc11_48.1 => constants.%OrderedWith.type.c6c -// CHECK:STDOUT: %T.loc11_27.1 => // CHECK:STDOUT: %pattern_type.loc11_27 => constants.%pattern_type.b4e +// CHECK:STDOUT: %T.patt.loc11_27.2 => constants.%T.patt.6f6 +// CHECK:STDOUT: %T.loc11_27.1 => // CHECK:STDOUT: %T.as_type.loc11_54.1 => // CHECK:STDOUT: %pattern_type.loc11_52 => +// CHECK:STDOUT: %x.param_patt.loc11_52.2 => +// CHECK:STDOUT: %x.patt.loc11_52.2 => // CHECK:STDOUT: %pattern_type.loc11_58 => constants.%pattern_type.eb5 +// CHECK:STDOUT: %y.param_patt.loc11_58.2 => constants.%y.param_patt.65d +// CHECK:STDOUT: %y.patt.loc11_58.2 => constants.%y.patt.6a4 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/primitive_types/arithmetic.carbon b/toolchain/check/testdata/interop/cpp/primitive_types/arithmetic.carbon index 1cb61a9eebe0..f362a54974f7 100644 --- a/toolchain/check/testdata/interop/cpp/primitive_types/arithmetic.carbon +++ b/toolchain/check/testdata/interop/cpp/primitive_types/arithmetic.carbon @@ -117,6 +117,7 @@ fn F() { // CHECK:STDOUT: %int_8: Core.IntLiteral = int_value 8 [concrete] // CHECK:STDOUT: %i8: type = class_type @Int, @Int(%int_8) [concrete] // CHECK:STDOUT: %pattern_type.0cf: type = pattern_type %i8 [concrete] +// CHECK:STDOUT: %cpp_signed_char.patt: %pattern_type.0cf = value_binding_pattern cpp_signed_char [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %As.type.daf: type = facet_type <@As, @As(%i8)> [concrete] // CHECK:STDOUT: %To: Core.IntLiteral = symbolic_binding To, 0 [symbolic] @@ -132,9 +133,11 @@ fn F() { // CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.specific_fn.cf0: = specific_function %Core.IntLiteral.as.As.impl.Convert.870, @Core.IntLiteral.as.As.impl.Convert.1(%int_8) [concrete] // CHECK:STDOUT: %bound_method.a39: = bound_method %int_1.5b8, %Core.IntLiteral.as.As.impl.Convert.specific_fn.cf0 [concrete] // CHECK:STDOUT: %int_1.f1e: %i8 = int_value 1 [concrete] +// CHECK:STDOUT: %carbon_signed_char.patt: %pattern_type.0cf = value_binding_pattern carbon_signed_char [concrete] // CHECK:STDOUT: %int_16: Core.IntLiteral = int_value 16 [concrete] // CHECK:STDOUT: %i16: type = class_type @Int, @Int(%int_16) [concrete] // CHECK:STDOUT: %pattern_type.203: type = pattern_type %i16 [concrete] +// CHECK:STDOUT: %cpp_short.patt: %pattern_type.203 = value_binding_pattern cpp_short [concrete] // CHECK:STDOUT: %As.type.6f1: type = facet_type <@As, @As(%i16)> [concrete] // CHECK:STDOUT: %As.impl_witness.820: = impl_witness imports.%As.impl_witness_table.1c5, @Core.IntLiteral.as.As.impl.f25(%int_16) [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.type.4b7: type = fn_type @Core.IntLiteral.as.As.impl.Convert.1, @Core.IntLiteral.as.As.impl.f25(%int_16) [concrete] @@ -146,9 +149,11 @@ fn F() { // CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.specific_fn.07a: = specific_function %Core.IntLiteral.as.As.impl.Convert.70c, @Core.IntLiteral.as.As.impl.Convert.1(%int_16) [concrete] // CHECK:STDOUT: %bound_method.a0f: = bound_method %int_1.5b8, %Core.IntLiteral.as.As.impl.Convert.specific_fn.07a [concrete] // CHECK:STDOUT: %int_1.d17: %i16 = int_value 1 [concrete] +// CHECK:STDOUT: %carbon_short.patt: %pattern_type.203 = value_binding_pattern carbon_short [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %cpp_int.patt: %pattern_type.6b6 = value_binding_pattern cpp_int [concrete] // CHECK:STDOUT: %As.type.155: type = facet_type <@As, @As(%i32)> [concrete] // CHECK:STDOUT: %As.impl_witness.03e: = impl_witness imports.%As.impl_witness_table.1c5, @Core.IntLiteral.as.As.impl.f25(%int_32) [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.type.e79: type = fn_type @Core.IntLiteral.as.As.impl.Convert.1, @Core.IntLiteral.as.As.impl.f25(%int_32) [concrete] @@ -160,8 +165,10 @@ fn F() { // CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.specific_fn.923: = specific_function %Core.IntLiteral.as.As.impl.Convert.8a4, @Core.IntLiteral.as.As.impl.Convert.1(%int_32) [concrete] // CHECK:STDOUT: %bound_method.18b: = bound_method %int_1.5b8, %Core.IntLiteral.as.As.impl.Convert.specific_fn.923 [concrete] // CHECK:STDOUT: %int_1.0c6: %i32 = int_value 1 [concrete] +// CHECK:STDOUT: %carbon_int.patt: %pattern_type.6b6 = value_binding_pattern carbon_int [concrete] // CHECK:STDOUT: %u8: type = class_type @UInt, @UInt(%int_8) [concrete] // CHECK:STDOUT: %pattern_type.186: type = pattern_type %u8 [concrete] +// CHECK:STDOUT: %cpp_unsigned_char.patt: %pattern_type.186 = value_binding_pattern cpp_unsigned_char [concrete] // CHECK:STDOUT: %As.type.97b: type = facet_type <@As, @As(%u8)> [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.type.fb3: type = fn_type @Core.IntLiteral.as.As.impl.Convert.2, @Core.IntLiteral.as.As.impl.e51(%To) [symbolic] // CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.f86: %Core.IntLiteral.as.As.impl.Convert.type.fb3 = struct_value () [symbolic] @@ -175,8 +182,10 @@ fn F() { // CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.specific_fn.cbf: = specific_function %Core.IntLiteral.as.As.impl.Convert.2f0, @Core.IntLiteral.as.As.impl.Convert.2(%int_8) [concrete] // CHECK:STDOUT: %bound_method.43e: = bound_method %int_1.5b8, %Core.IntLiteral.as.As.impl.Convert.specific_fn.cbf [concrete] // CHECK:STDOUT: %int_1.067: %u8 = int_value 1 [concrete] +// CHECK:STDOUT: %carbon_unsigned_char.patt: %pattern_type.186 = value_binding_pattern carbon_unsigned_char [concrete] // CHECK:STDOUT: %u16: type = class_type @UInt, @UInt(%int_16) [concrete] // CHECK:STDOUT: %pattern_type.17c: type = pattern_type %u16 [concrete] +// CHECK:STDOUT: %cpp_unsigned_short.patt: %pattern_type.17c = value_binding_pattern cpp_unsigned_short [concrete] // CHECK:STDOUT: %As.type.ac3: type = facet_type <@As, @As(%u16)> [concrete] // CHECK:STDOUT: %As.impl_witness.542: = impl_witness imports.%As.impl_witness_table.8fa, @Core.IntLiteral.as.As.impl.e51(%int_16) [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.type.fe7: type = fn_type @Core.IntLiteral.as.As.impl.Convert.2, @Core.IntLiteral.as.As.impl.e51(%int_16) [concrete] @@ -188,8 +197,10 @@ fn F() { // CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.specific_fn.7a1: = specific_function %Core.IntLiteral.as.As.impl.Convert.210, @Core.IntLiteral.as.As.impl.Convert.2(%int_16) [concrete] // CHECK:STDOUT: %bound_method.afc: = bound_method %int_1.5b8, %Core.IntLiteral.as.As.impl.Convert.specific_fn.7a1 [concrete] // CHECK:STDOUT: %int_1.071: %u16 = int_value 1 [concrete] +// CHECK:STDOUT: %carbon_unsigned_short.patt: %pattern_type.17c = value_binding_pattern carbon_unsigned_short [concrete] // CHECK:STDOUT: %u32: type = class_type @UInt, @UInt(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.668: type = pattern_type %u32 [concrete] +// CHECK:STDOUT: %cpp_unsigned_int.patt: %pattern_type.668 = value_binding_pattern cpp_unsigned_int [concrete] // CHECK:STDOUT: %As.type.8bf: type = facet_type <@As, @As(%u32)> [concrete] // CHECK:STDOUT: %As.impl_witness.384: = impl_witness imports.%As.impl_witness_table.8fa, @Core.IntLiteral.as.As.impl.e51(%int_32) [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.type.afd: type = fn_type @Core.IntLiteral.as.As.impl.Convert.2, @Core.IntLiteral.as.As.impl.e51(%int_32) [concrete] @@ -201,8 +212,10 @@ fn F() { // CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.specific_fn.cb8: = specific_function %Core.IntLiteral.as.As.impl.Convert.776, @Core.IntLiteral.as.As.impl.Convert.2(%int_32) [concrete] // CHECK:STDOUT: %bound_method.6e7: = bound_method %int_1.5b8, %Core.IntLiteral.as.As.impl.Convert.specific_fn.cb8 [concrete] // CHECK:STDOUT: %int_1.92d: %u32 = int_value 1 [concrete] +// CHECK:STDOUT: %carbon_unsigned_int.patt: %pattern_type.668 = value_binding_pattern carbon_unsigned_int [concrete] // CHECK:STDOUT: %f32.c73: type = class_type @Float, @Float(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.240: type = pattern_type %f32.c73 [concrete] +// CHECK:STDOUT: %cpp_float.patt: %pattern_type.240 = value_binding_pattern cpp_float [concrete] // CHECK:STDOUT: %float.6daae3.1: Core.FloatLiteral = float_literal_value 10e-1 [concrete] // CHECK:STDOUT: %As.type.093: type = facet_type <@As, @As(%f32.c73)> [concrete] // CHECK:STDOUT: %Core.FloatLiteral.as.As.impl.Convert.type.69a: type = fn_type @Core.FloatLiteral.as.As.impl.Convert, @Core.FloatLiteral.as.As.impl(%To) [symbolic] @@ -217,9 +230,11 @@ fn F() { // CHECK:STDOUT: %Core.FloatLiteral.as.As.impl.Convert.specific_fn.569: = specific_function %Core.FloatLiteral.as.As.impl.Convert.49e, @Core.FloatLiteral.as.As.impl.Convert(%int_32) [concrete] // CHECK:STDOUT: %bound_method.f72: = bound_method %float.6daae3.1, %Core.FloatLiteral.as.As.impl.Convert.specific_fn.569 [concrete] // CHECK:STDOUT: %float.943: %f32.c73 = float_value 1 [concrete] +// CHECK:STDOUT: %carbon_float.patt: %pattern_type.240 = value_binding_pattern carbon_float [concrete] // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %f64.dc1: type = class_type @Float, @Float(%int_64) [concrete] // CHECK:STDOUT: %pattern_type.fb7: type = pattern_type %f64.dc1 [concrete] +// CHECK:STDOUT: %cpp_double.patt: %pattern_type.fb7 = value_binding_pattern cpp_double [concrete] // CHECK:STDOUT: %float.6daae3.2: Core.FloatLiteral = float_literal_value 10e-1 [concrete] // CHECK:STDOUT: %As.type.0e0: type = facet_type <@As, @As(%f64.dc1)> [concrete] // CHECK:STDOUT: %As.impl_witness.115: = impl_witness imports.%As.impl_witness_table.aa3, @Core.FloatLiteral.as.As.impl(%int_64) [concrete] @@ -232,6 +247,7 @@ fn F() { // CHECK:STDOUT: %Core.FloatLiteral.as.As.impl.Convert.specific_fn.417: = specific_function %Core.FloatLiteral.as.As.impl.Convert.20d, @Core.FloatLiteral.as.As.impl.Convert(%int_64) [concrete] // CHECK:STDOUT: %bound_method.08b: = bound_method %float.6daae3.2, %Core.FloatLiteral.as.As.impl.Convert.specific_fn.417 [concrete] // CHECK:STDOUT: %float.3b9: %f64.dc1 = float_value 1 [concrete] +// CHECK:STDOUT: %carbon_double.patt: %pattern_type.fb7 = value_binding_pattern carbon_double [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -257,7 +273,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %cpp_signed_char.patt: %pattern_type.0cf = value_binding_pattern cpp_signed_char [concrete] +// CHECK:STDOUT: %cpp_signed_char.patt: %pattern_type.0cf = value_binding_pattern cpp_signed_char [concrete = constants.%cpp_signed_char.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1.loc8: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %i8.loc8: type = type_literal constants.%i8 [concrete = constants.%i8] @@ -275,13 +291,13 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %cpp_signed_char: %i8 = value_binding cpp_signed_char, %.loc8_45.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %carbon_signed_char.patt: %pattern_type.0cf = value_binding_pattern carbon_signed_char [concrete] +// CHECK:STDOUT: %carbon_signed_char.patt: %pattern_type.0cf = value_binding_pattern carbon_signed_char [concrete = constants.%carbon_signed_char.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %cpp_signed_char.ref: %i8 = name_ref cpp_signed_char, %cpp_signed_char // CHECK:STDOUT: %i8.loc9: type = type_literal constants.%i8 [concrete = constants.%i8] // CHECK:STDOUT: %carbon_signed_char: %i8 = value_binding carbon_signed_char, %cpp_signed_char.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %cpp_short.patt: %pattern_type.203 = value_binding_pattern cpp_short [concrete] +// CHECK:STDOUT: %cpp_short.patt: %pattern_type.203 = value_binding_pattern cpp_short [concrete = constants.%cpp_short.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1.loc11: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %i16.loc11: type = type_literal constants.%i16 [concrete = constants.%i16] @@ -299,13 +315,13 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %cpp_short: %i16 = value_binding cpp_short, %.loc11_33.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %carbon_short.patt: %pattern_type.203 = value_binding_pattern carbon_short [concrete] +// CHECK:STDOUT: %carbon_short.patt: %pattern_type.203 = value_binding_pattern carbon_short [concrete = constants.%carbon_short.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %cpp_short.ref: %i16 = name_ref cpp_short, %cpp_short // CHECK:STDOUT: %i16.loc12: type = type_literal constants.%i16 [concrete = constants.%i16] // CHECK:STDOUT: %carbon_short: %i16 = value_binding carbon_short, %cpp_short.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %cpp_int.patt: %pattern_type.6b6 = value_binding_pattern cpp_int [concrete] +// CHECK:STDOUT: %cpp_int.patt: %pattern_type.6b6 = value_binding_pattern cpp_int [concrete = constants.%cpp_int.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1.loc14: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %i32.loc14: type = type_literal constants.%i32 [concrete = constants.%i32] @@ -323,13 +339,13 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %cpp_int: %i32 = value_binding cpp_int, %.loc14_29.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %carbon_int.patt: %pattern_type.6b6 = value_binding_pattern carbon_int [concrete] +// CHECK:STDOUT: %carbon_int.patt: %pattern_type.6b6 = value_binding_pattern carbon_int [concrete = constants.%carbon_int.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %cpp_int.ref: %i32 = name_ref cpp_int, %cpp_int // CHECK:STDOUT: %i32.loc15: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %carbon_int: %i32 = value_binding carbon_int, %cpp_int.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %cpp_unsigned_char.patt: %pattern_type.186 = value_binding_pattern cpp_unsigned_char [concrete] +// CHECK:STDOUT: %cpp_unsigned_char.patt: %pattern_type.186 = value_binding_pattern cpp_unsigned_char [concrete = constants.%cpp_unsigned_char.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1.loc17: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %u8.loc17: type = type_literal constants.%u8 [concrete = constants.%u8] @@ -347,13 +363,13 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %cpp_unsigned_char: %u8 = value_binding cpp_unsigned_char, %.loc17_49.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %carbon_unsigned_char.patt: %pattern_type.186 = value_binding_pattern carbon_unsigned_char [concrete] +// CHECK:STDOUT: %carbon_unsigned_char.patt: %pattern_type.186 = value_binding_pattern carbon_unsigned_char [concrete = constants.%carbon_unsigned_char.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %cpp_unsigned_char.ref: %u8 = name_ref cpp_unsigned_char, %cpp_unsigned_char // CHECK:STDOUT: %u8.loc18: type = type_literal constants.%u8 [concrete = constants.%u8] // CHECK:STDOUT: %carbon_unsigned_char: %u8 = value_binding carbon_unsigned_char, %cpp_unsigned_char.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %cpp_unsigned_short.patt: %pattern_type.17c = value_binding_pattern cpp_unsigned_short [concrete] +// CHECK:STDOUT: %cpp_unsigned_short.patt: %pattern_type.17c = value_binding_pattern cpp_unsigned_short [concrete = constants.%cpp_unsigned_short.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1.loc20: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %u16.loc20: type = type_literal constants.%u16 [concrete = constants.%u16] @@ -371,13 +387,13 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %cpp_unsigned_short: %u16 = value_binding cpp_unsigned_short, %.loc20_51.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %carbon_unsigned_short.patt: %pattern_type.17c = value_binding_pattern carbon_unsigned_short [concrete] +// CHECK:STDOUT: %carbon_unsigned_short.patt: %pattern_type.17c = value_binding_pattern carbon_unsigned_short [concrete = constants.%carbon_unsigned_short.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %cpp_unsigned_short.ref: %u16 = name_ref cpp_unsigned_short, %cpp_unsigned_short // CHECK:STDOUT: %u16.loc21: type = type_literal constants.%u16 [concrete = constants.%u16] // CHECK:STDOUT: %carbon_unsigned_short: %u16 = value_binding carbon_unsigned_short, %cpp_unsigned_short.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %cpp_unsigned_int.patt: %pattern_type.668 = value_binding_pattern cpp_unsigned_int [concrete] +// CHECK:STDOUT: %cpp_unsigned_int.patt: %pattern_type.668 = value_binding_pattern cpp_unsigned_int [concrete = constants.%cpp_unsigned_int.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1.loc23: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %u32.loc23: type = type_literal constants.%u32 [concrete = constants.%u32] @@ -395,13 +411,13 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %cpp_unsigned_int: %u32 = value_binding cpp_unsigned_int, %.loc23_47.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %carbon_unsigned_int.patt: %pattern_type.668 = value_binding_pattern carbon_unsigned_int [concrete] +// CHECK:STDOUT: %carbon_unsigned_int.patt: %pattern_type.668 = value_binding_pattern carbon_unsigned_int [concrete = constants.%carbon_unsigned_int.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %cpp_unsigned_int.ref: %u32 = name_ref cpp_unsigned_int, %cpp_unsigned_int // CHECK:STDOUT: %u32.loc24: type = type_literal constants.%u32 [concrete = constants.%u32] // CHECK:STDOUT: %carbon_unsigned_int: %u32 = value_binding carbon_unsigned_int, %cpp_unsigned_int.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %cpp_float.patt: %pattern_type.240 = value_binding_pattern cpp_float [concrete] +// CHECK:STDOUT: %cpp_float.patt: %pattern_type.240 = value_binding_pattern cpp_float [concrete = constants.%cpp_float.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %float.loc26: Core.FloatLiteral = float_literal_value 10e-1 [concrete = constants.%float.6daae3.1] // CHECK:STDOUT: %f32.loc26: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] @@ -419,13 +435,13 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %cpp_float: %f32.c73 = value_binding cpp_float, %.loc26_35.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %carbon_float.patt: %pattern_type.240 = value_binding_pattern carbon_float [concrete] +// CHECK:STDOUT: %carbon_float.patt: %pattern_type.240 = value_binding_pattern carbon_float [concrete = constants.%carbon_float.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %cpp_float.ref: %f32.c73 = name_ref cpp_float, %cpp_float // CHECK:STDOUT: %f32.loc27: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %carbon_float: %f32.c73 = value_binding carbon_float, %cpp_float.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %cpp_double.patt: %pattern_type.fb7 = value_binding_pattern cpp_double [concrete] +// CHECK:STDOUT: %cpp_double.patt: %pattern_type.fb7 = value_binding_pattern cpp_double [concrete = constants.%cpp_double.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %float.loc29: Core.FloatLiteral = float_literal_value 10e-1 [concrete = constants.%float.6daae3.2] // CHECK:STDOUT: %f64.loc29: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] @@ -443,7 +459,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %cpp_double: %f64.dc1 = value_binding cpp_double, %.loc29_37.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %carbon_double.patt: %pattern_type.fb7 = value_binding_pattern carbon_double [concrete] +// CHECK:STDOUT: %carbon_double.patt: %pattern_type.fb7 = value_binding_pattern carbon_double [concrete = constants.%carbon_double.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %cpp_double.ref: %f64.dc1 = name_ref cpp_double, %cpp_double // CHECK:STDOUT: %f64.loc30: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] @@ -472,6 +488,7 @@ fn F() { // CHECK:STDOUT: %Core.FloatLiteral.as.As.impl.Convert.specific_fn: = specific_function %Core.FloatLiteral.as.As.impl.Convert.20d, @Core.FloatLiteral.as.As.impl.Convert(%int_64) [concrete] // CHECK:STDOUT: %bound_method: = bound_method %float.6da, %Core.FloatLiteral.as.As.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %float.3b9: %f64.dc1 = float_value 1 [concrete] +// CHECK:STDOUT: %carbon_long_double.patt: %pattern_type.fb7 = value_binding_pattern carbon_long_double [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -482,7 +499,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %cpp_long_double.patt: = value_binding_pattern cpp_long_double [concrete] +// CHECK:STDOUT: %cpp_long_double.patt: = value_binding_pattern cpp_long_double [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %float: Core.FloatLiteral = float_literal_value 10e-1 [concrete = constants.%float.6da] // CHECK:STDOUT: %f64.loc15: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] @@ -496,7 +513,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: %cpp_long_double: = value_binding cpp_long_double, [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %carbon_long_double.patt: %pattern_type.fb7 = value_binding_pattern carbon_long_double [concrete] +// CHECK:STDOUT: %carbon_long_double.patt: %pattern_type.fb7 = value_binding_pattern carbon_long_double [concrete = constants.%carbon_long_double.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %cpp_long_double.ref: = name_ref cpp_long_double, %cpp_long_double [concrete = ] // CHECK:STDOUT: %f64.loc16: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] @@ -510,6 +527,8 @@ fn F() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %unsigned_int: type = class_type @unsigned_int [concrete] // CHECK:STDOUT: %pattern_type.990: type = pattern_type %unsigned_int [concrete] +// CHECK:STDOUT: %unsigned_int.patt: %pattern_type.990 = ref_binding_pattern unsigned_int [concrete] +// CHECK:STDOUT: %unsigned_int.var_patt: %pattern_type.990 = var_pattern %unsigned_int.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %Default.type: type = facet_type <@Default> [concrete] // CHECK:STDOUT: %T.b09: %Default.type = symbolic_binding T, 0 [symbolic] @@ -524,6 +543,7 @@ fn F() { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %u32: type = class_type @UInt, @UInt(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.668: type = pattern_type %u32 [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.668 = value_binding_pattern x [concrete] // CHECK:STDOUT: %unsigned_int.foo.cpp_overload_set.type: type = cpp_overload_set_type @unsigned_int.foo.cpp_overload_set [concrete] // CHECK:STDOUT: %unsigned_int.foo.cpp_overload_set.value: %unsigned_int.foo.cpp_overload_set.type = cpp_overload_set_value @unsigned_int.foo.cpp_overload_set [concrete] // CHECK:STDOUT: %unsigned_int.foo.type: type = fn_type @unsigned_int.foo [concrete] @@ -551,8 +571,8 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %unsigned_int.patt: %pattern_type.990 = ref_binding_pattern unsigned_int [concrete] -// CHECK:STDOUT: %unsigned_int.var_patt: %pattern_type.990 = var_pattern %unsigned_int.patt [concrete] +// CHECK:STDOUT: %unsigned_int.patt: %pattern_type.990 = ref_binding_pattern unsigned_int [concrete = constants.%unsigned_int.patt] +// CHECK:STDOUT: %unsigned_int.var_patt: %pattern_type.990 = var_pattern %unsigned_int.patt [concrete = constants.%unsigned_int.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %unsigned_int.var: ref %unsigned_int = var %unsigned_int.var_patt // CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%unsigned_int, (constants.%DefaultOrUnformed.impl_witness.a47) [concrete = constants.%DefaultOrUnformed.facet] @@ -569,15 +589,15 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %unsigned_int: ref %unsigned_int = ref_binding unsigned_int, %unsigned_int.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.668 = value_binding_pattern x [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.668 = value_binding_pattern x [concrete = constants.%x.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %unsigned_int.ref.loc13: ref %unsigned_int = name_ref unsigned_int, %unsigned_int // CHECK:STDOUT: %foo.ref: %unsigned_int.foo.cpp_overload_set.type = name_ref foo, imports.%unsigned_int.foo.cpp_overload_set.value [concrete = constants.%unsigned_int.foo.cpp_overload_set.value] // CHECK:STDOUT: %bound_method: = bound_method %unsigned_int.ref.loc13, %foo.ref // CHECK:STDOUT: %unsigned_int.foo.call: init %u32 = call imports.%unsigned_int.foo.decl(%unsigned_int.ref.loc13) -// CHECK:STDOUT: %u32: type = type_literal constants.%u32 [concrete = constants.%u32] // CHECK:STDOUT: %.loc13_40.1: %u32 = value_of_initializer %unsigned_int.foo.call // CHECK:STDOUT: %.loc13_40.2: %u32 = converted %unsigned_int.foo.call, %.loc13_40.1 +// CHECK:STDOUT: %u32: type = type_literal constants.%u32 [concrete = constants.%u32] // CHECK:STDOUT: %x: %u32 = value_binding x, %.loc13_40.2 // CHECK:STDOUT: %unsigned_int.cpp_destructor.bound: = bound_method %unsigned_int.var, constants.%unsigned_int.cpp_destructor // CHECK:STDOUT: %unsigned_int.cpp_destructor.call: init %empty_tuple.type = call %unsigned_int.cpp_destructor.bound(%unsigned_int.var) diff --git a/toolchain/check/testdata/interop/cpp/primitive_types/long_and_long_long.llp64.carbon b/toolchain/check/testdata/interop/cpp/primitive_types/long_and_long_long.llp64.carbon index 3bb2f50358c9..674a8f96f79f 100644 --- a/toolchain/check/testdata/interop/cpp/primitive_types/long_and_long_long.llp64.carbon +++ b/toolchain/check/testdata/interop/cpp/primitive_types/long_and_long_long.llp64.carbon @@ -692,6 +692,7 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %i64: type = class_type @Int, @Int(%int_64) [concrete] // CHECK:STDOUT: %pattern_type.f57: type = pattern_type %i64 [concrete] +// CHECK:STDOUT: %cpp_long_long.patt: %pattern_type.f57 = value_binding_pattern cpp_long_long [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.221: type = facet_type <@ImplicitAs, @ImplicitAs(%i64)> [concrete] // CHECK:STDOUT: %To.fe9: Core.IntLiteral = symbolic_binding To, 0 [symbolic] @@ -711,6 +712,7 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.a1b, @Core.IntLiteral.as.ImplicitAs.impl.Convert.1(%int_64) [concrete] // CHECK:STDOUT: %bound_method.c5e: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_1.d98: %i64 = int_value 1 [concrete] +// CHECK:STDOUT: %carbon_long_long.patt: %pattern_type.f57 = value_binding_pattern carbon_long_long [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %f32.c73: type = class_type @Float, @Float(%int_32) [concrete] // CHECK:STDOUT: %As.type.998: type = facet_type <@As, @As(%i64)> [concrete] @@ -737,6 +739,8 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %array_type: type = array_type %int_1.5b8, %f32.c73 [concrete] // CHECK:STDOUT: %f32.9b3: type = float_type %int_32, f32 [concrete] // CHECK:STDOUT: %pattern_type.18b: type = pattern_type %array_type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.18b = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.18b = var_pattern %a.patt [concrete] // CHECK:STDOUT: %float.6da: Core.FloatLiteral = float_literal_value 10e-1 [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (Core.FloatLiteral) [concrete] // CHECK:STDOUT: %tuple: %tuple.type = tuple_value (%float.6da) [concrete] @@ -777,14 +781,9 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %cpp_long_long.patt: %pattern_type.f57 = value_binding_pattern cpp_long_long [concrete] +// CHECK:STDOUT: %cpp_long_long.patt: %pattern_type.f57 = value_binding_pattern cpp_long_long [concrete = constants.%cpp_long_long.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1.loc8: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] -// CHECK:STDOUT: %.loc8_25: type = splice_block %long_long.ref.loc8 [concrete = constants.%i64] { -// CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: -// CHECK:STDOUT: %long_long.ref.loc8: type = name_ref long_long, %i64.2 [concrete = constants.%i64] -// CHECK:STDOUT: } // CHECK:STDOUT: %impl.elem0.loc8: %.f34 = impl_witness_access constants.%ImplicitAs.impl_witness.091, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.a1b] // CHECK:STDOUT: %bound_method.loc8_38.1: = bound_method %int_1.loc8, %impl.elem0.loc8 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] // CHECK:STDOUT: %specific_fn.loc8: = specific_function %impl.elem0.loc8, @Core.IntLiteral.as.ImplicitAs.impl.Convert.1(constants.%int_64) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] @@ -792,16 +791,21 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call: init %i64 = call %bound_method.loc8_38.2(%int_1.loc8) [concrete = constants.%int_1.d98] // CHECK:STDOUT: %.loc8_38.1: %i64 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_1.d98] // CHECK:STDOUT: %.loc8_38.2: %i64 = converted %int_1.loc8, %.loc8_38.1 [concrete = constants.%int_1.d98] +// CHECK:STDOUT: %.loc8_25: type = splice_block %long_long.ref.loc8 [concrete = constants.%i64] { +// CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: +// CHECK:STDOUT: %long_long.ref.loc8: type = name_ref long_long, %i64.2 [concrete = constants.%i64] +// CHECK:STDOUT: } // CHECK:STDOUT: %cpp_long_long: %i64 = value_binding cpp_long_long, %.loc8_38.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %carbon_long_long.patt: %pattern_type.f57 = value_binding_pattern carbon_long_long [concrete] +// CHECK:STDOUT: %carbon_long_long.patt: %pattern_type.f57 = value_binding_pattern carbon_long_long [concrete = constants.%carbon_long_long.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %cpp_long_long.ref: %i64 = name_ref cpp_long_long, %cpp_long_long // CHECK:STDOUT: %i64.loc9: type = type_literal constants.%i64 [concrete = constants.%i64] // CHECK:STDOUT: %carbon_long_long: %i64 = value_binding carbon_long_long, %cpp_long_long.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.18b = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.18b = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.18b = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.18b = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type = var %a.var_patt // CHECK:STDOUT: %float: Core.FloatLiteral = float_literal_value 10e-1 [concrete = constants.%float.6da] @@ -865,6 +869,7 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %u64: type = class_type @UInt, @UInt(%int_64) [concrete] // CHECK:STDOUT: %pattern_type.b35: type = pattern_type %u64 [concrete] +// CHECK:STDOUT: %cpp_unsigned_long_long.patt: %pattern_type.b35 = value_binding_pattern cpp_unsigned_long_long [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.14f: type = facet_type <@ImplicitAs, @ImplicitAs(%u64)> [concrete] // CHECK:STDOUT: %To.fe9: Core.IntLiteral = symbolic_binding To, 0 [symbolic] @@ -884,6 +889,7 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.633, @Core.IntLiteral.as.ImplicitAs.impl.Convert.1(%int_64) [concrete] // CHECK:STDOUT: %bound_method.7e7: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_1.01f: %u64 = int_value 1 [concrete] +// CHECK:STDOUT: %carbon_unsigned_long_long.patt: %pattern_type.b35 = value_binding_pattern carbon_unsigned_long_long [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %f32.c73: type = class_type @Float, @Float(%int_32) [concrete] // CHECK:STDOUT: %As.type.72f: type = facet_type <@As, @As(%u64)> [concrete] @@ -910,6 +916,8 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %array_type: type = array_type %int_1.5b8, %f32.c73 [concrete] // CHECK:STDOUT: %f32.9b3: type = float_type %int_32, f32 [concrete] // CHECK:STDOUT: %pattern_type.18b: type = pattern_type %array_type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.18b = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.18b = var_pattern %a.patt [concrete] // CHECK:STDOUT: %float.6da: Core.FloatLiteral = float_literal_value 10e-1 [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (Core.FloatLiteral) [concrete] // CHECK:STDOUT: %tuple: %tuple.type = tuple_value (%float.6da) [concrete] @@ -950,14 +958,9 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %cpp_unsigned_long_long.patt: %pattern_type.b35 = value_binding_pattern cpp_unsigned_long_long [concrete] +// CHECK:STDOUT: %cpp_unsigned_long_long.patt: %pattern_type.b35 = value_binding_pattern cpp_unsigned_long_long [concrete = constants.%cpp_unsigned_long_long.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1.loc8: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] -// CHECK:STDOUT: %.loc8_34: type = splice_block %unsigned_long_long.ref.loc8 [concrete = constants.%u64] { -// CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: -// CHECK:STDOUT: %unsigned_long_long.ref.loc8: type = name_ref unsigned_long_long, %u64.2 [concrete = constants.%u64] -// CHECK:STDOUT: } // CHECK:STDOUT: %impl.elem0.loc8: %.93e = impl_witness_access constants.%ImplicitAs.impl_witness.9c4, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.633] // CHECK:STDOUT: %bound_method.loc8_56.1: = bound_method %int_1.loc8, %impl.elem0.loc8 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] // CHECK:STDOUT: %specific_fn.loc8: = specific_function %impl.elem0.loc8, @Core.IntLiteral.as.ImplicitAs.impl.Convert.1(constants.%int_64) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] @@ -965,16 +968,21 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call: init %u64 = call %bound_method.loc8_56.2(%int_1.loc8) [concrete = constants.%int_1.01f] // CHECK:STDOUT: %.loc8_56.1: %u64 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_1.01f] // CHECK:STDOUT: %.loc8_56.2: %u64 = converted %int_1.loc8, %.loc8_56.1 [concrete = constants.%int_1.01f] +// CHECK:STDOUT: %.loc8_34: type = splice_block %unsigned_long_long.ref.loc8 [concrete = constants.%u64] { +// CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: +// CHECK:STDOUT: %unsigned_long_long.ref.loc8: type = name_ref unsigned_long_long, %u64.2 [concrete = constants.%u64] +// CHECK:STDOUT: } // CHECK:STDOUT: %cpp_unsigned_long_long: %u64 = value_binding cpp_unsigned_long_long, %.loc8_56.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %carbon_unsigned_long_long.patt: %pattern_type.b35 = value_binding_pattern carbon_unsigned_long_long [concrete] +// CHECK:STDOUT: %carbon_unsigned_long_long.patt: %pattern_type.b35 = value_binding_pattern carbon_unsigned_long_long [concrete = constants.%carbon_unsigned_long_long.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %cpp_unsigned_long_long.ref: %u64 = name_ref cpp_unsigned_long_long, %cpp_unsigned_long_long // CHECK:STDOUT: %u64.loc9: type = type_literal constants.%u64 [concrete = constants.%u64] // CHECK:STDOUT: %carbon_unsigned_long_long: %u64 = value_binding carbon_unsigned_long_long, %cpp_unsigned_long_long.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.18b = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.18b = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.18b = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.18b = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type = var %a.var_patt // CHECK:STDOUT: %float: Core.FloatLiteral = float_literal_value 10e-1 [concrete = constants.%float.6da] @@ -1041,6 +1049,7 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.25e: type = pattern_type %Cpp.long [concrete] +// CHECK:STDOUT: %cpp_long.patt: %pattern_type.25e = value_binding_pattern cpp_long [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -1059,18 +1068,24 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %int_1.9ce: %Cpp.long = int_value 1 [concrete] // CHECK:STDOUT: %LongResult: type = class_type @LongResult [concrete] // CHECK:STDOUT: %pattern_type.142c0: type = pattern_type %LongResult [concrete] +// CHECK:STDOUT: %cpp_long_result.patt: %pattern_type.142c0 = value_binding_pattern cpp_long_result [concrete] // CHECK:STDOUT: %PassLong.cpp_overload_set.type: type = cpp_overload_set_type @PassLong.cpp_overload_set [concrete] // CHECK:STDOUT: %PassLong.cpp_overload_set.value: %PassLong.cpp_overload_set.type = cpp_overload_set_value @PassLong.cpp_overload_set [concrete] // CHECK:STDOUT: %ptr.817: type = ptr_type %LongResult [concrete] // CHECK:STDOUT: %PassLong__carbon_thunk.type.ac66cb.1: type = fn_type @PassLong__carbon_thunk.1 [concrete] // CHECK:STDOUT: %PassLong__carbon_thunk.806a90.1: %PassLong__carbon_thunk.type.ac66cb.1 = struct_value () [concrete] +// CHECK:STDOUT: %cpp_compat_long.patt: %pattern_type.25e = value_binding_pattern cpp_compat_long [concrete] +// CHECK:STDOUT: %cpp_compat_long_result.patt: %pattern_type.142c0 = value_binding_pattern cpp_compat_long_result [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %carbon_i32.patt: %pattern_type.6b6 = value_binding_pattern carbon_i32 [concrete] // CHECK:STDOUT: %IntResult: type = class_type @IntResult [concrete] // CHECK:STDOUT: %pattern_type.596: type = pattern_type %IntResult [concrete] +// CHECK:STDOUT: %carbon_i32_result.patt: %pattern_type.596 = value_binding_pattern carbon_i32_result [concrete] // CHECK:STDOUT: %ptr.fc9: type = ptr_type %IntResult [concrete] // CHECK:STDOUT: %PassLong__carbon_thunk.type.ac66cb.2: type = fn_type @PassLong__carbon_thunk.2 [concrete] // CHECK:STDOUT: %PassLong__carbon_thunk.806a90.2: %PassLong__carbon_thunk.type.ac66cb.2 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.f57: type = pattern_type %i64 [concrete] +// CHECK:STDOUT: %carbon_i64.patt: %pattern_type.f57 = value_binding_pattern carbon_i64 [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.cfa: = impl_witness imports.%ImplicitAs.impl_witness_table.035 [concrete] // CHECK:STDOUT: %ImplicitAs.facet.a99: %ImplicitAs.type.221 = facet_value %Cpp.long, (%ImplicitAs.impl_witness.cfa) [concrete] // CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.type.629: type = fn_type @ImplicitAs.WithSelf.Convert, @ImplicitAs.WithSelf(%i64, %ImplicitAs.facet.a99) [concrete] @@ -1100,6 +1115,8 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %array_type: type = array_type %int_1.5b8, %f32.c73 [concrete] // CHECK:STDOUT: %f32.9b3: type = float_type %int_32, f32 [concrete] // CHECK:STDOUT: %pattern_type.18b: type = pattern_type %array_type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.18b = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.18b = var_pattern %a.patt [concrete] // CHECK:STDOUT: %float.6da: Core.FloatLiteral = float_literal_value 10e-1 [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (Core.FloatLiteral) [concrete] // CHECK:STDOUT: %tuple: %tuple.type = tuple_value (%float.6da) [concrete] @@ -1185,21 +1202,21 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %cpp_long.patt: %pattern_type.25e = value_binding_pattern cpp_long [concrete] +// CHECK:STDOUT: %cpp_long.patt: %pattern_type.25e = value_binding_pattern cpp_long [concrete = constants.%cpp_long.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1.loc15: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] -// CHECK:STDOUT: %.loc15_20: type = splice_block %long.ref.loc15 [concrete = constants.%Cpp.long] { -// CHECK:STDOUT: %Cpp.ref.loc15: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %long.ref.loc15: type = name_ref long, constants.%Cpp.long [concrete = constants.%Cpp.long] -// CHECK:STDOUT: } // CHECK:STDOUT: %impl.elem0.loc15: %.b13 = impl_witness_access constants.%ImplicitAs.impl_witness.e27, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.3ce] // CHECK:STDOUT: %bound_method.loc15: = bound_method %int_1.loc15, %impl.elem0.loc15 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call: init %Cpp.long = call %bound_method.loc15(%int_1.loc15) [concrete = constants.%int_1.9ce] // CHECK:STDOUT: %.loc15_28.1: %Cpp.long = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_1.9ce] // CHECK:STDOUT: %.loc15_28.2: %Cpp.long = converted %int_1.loc15, %.loc15_28.1 [concrete = constants.%int_1.9ce] +// CHECK:STDOUT: %.loc15_20: type = splice_block %long.ref.loc15 [concrete = constants.%Cpp.long] { +// CHECK:STDOUT: %Cpp.ref.loc15: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %long.ref.loc15: type = name_ref long, constants.%Cpp.long [concrete = constants.%Cpp.long] +// CHECK:STDOUT: } // CHECK:STDOUT: %cpp_long: %Cpp.long = value_binding cpp_long, %.loc15_28.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %cpp_long_result.patt: %pattern_type.142c0 = value_binding_pattern cpp_long_result [concrete] +// CHECK:STDOUT: %cpp_long_result.patt: %pattern_type.142c0 = value_binding_pattern cpp_long_result [concrete = constants.%cpp_long_result.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc16_48: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %PassLong.ref.loc16: %PassLong.cpp_overload_set.type = name_ref PassLong, imports.%PassLong.cpp_overload_set.value [concrete = constants.%PassLong.cpp_overload_set.value] @@ -1208,15 +1225,15 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %addr.loc16: %ptr.817 = addr_of %.loc16_69.1 // CHECK:STDOUT: %PassLong__carbon_thunk.call.loc16: init %empty_tuple.type = call imports.%PassLong__carbon_thunk.decl.13dd4e.1(%cpp_long.ref.loc16, %addr.loc16) // CHECK:STDOUT: %.loc16_69.2: init %LongResult to %.loc16_69.1 = mark_in_place_init %PassLong__carbon_thunk.call.loc16 +// CHECK:STDOUT: %.loc16_69.3: ref %LongResult = temporary %.loc16_69.1, %.loc16_69.2 +// CHECK:STDOUT: %.loc16_69.4: %LongResult = acquire_value %.loc16_69.3 // CHECK:STDOUT: %.loc16_34: type = splice_block %LongResult.ref.loc16 [concrete = constants.%LongResult] { // CHECK:STDOUT: %Cpp.ref.loc16_31: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %LongResult.ref.loc16: type = name_ref LongResult, imports.%LongResult.decl [concrete = constants.%LongResult] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc16_69.3: ref %LongResult = temporary %.loc16_69.1, %.loc16_69.2 -// CHECK:STDOUT: %.loc16_69.4: %LongResult = acquire_value %.loc16_69.3 // CHECK:STDOUT: %cpp_long_result: %LongResult = value_binding cpp_long_result, %.loc16_69.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %cpp_compat_long.patt: %pattern_type.25e = value_binding_pattern cpp_compat_long [concrete] +// CHECK:STDOUT: %cpp_compat_long.patt: %pattern_type.25e = value_binding_pattern cpp_compat_long [concrete = constants.%cpp_compat_long.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %cpp_long.ref.loc18: %Cpp.long = name_ref cpp_long, %cpp_long // CHECK:STDOUT: %.loc18: type = splice_block %Long32.ref [concrete = constants.%Cpp.long] { @@ -1226,7 +1243,7 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: } // CHECK:STDOUT: %cpp_compat_long: %Cpp.long = value_binding cpp_compat_long, %cpp_long.ref.loc18 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %cpp_compat_long_result.patt: %pattern_type.142c0 = value_binding_pattern cpp_compat_long_result [concrete] +// CHECK:STDOUT: %cpp_compat_long_result.patt: %pattern_type.142c0 = value_binding_pattern cpp_compat_long_result [concrete = constants.%cpp_compat_long_result.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc19_55: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %PassLong.ref.loc19: %PassLong.cpp_overload_set.type = name_ref PassLong, imports.%PassLong.cpp_overload_set.value [concrete = constants.%PassLong.cpp_overload_set.value] @@ -1235,15 +1252,15 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %addr.loc19: %ptr.817 = addr_of %.loc19_83.1 // CHECK:STDOUT: %PassLong__carbon_thunk.call.loc19: init %empty_tuple.type = call imports.%PassLong__carbon_thunk.decl.13dd4e.1(%cpp_compat_long.ref, %addr.loc19) // CHECK:STDOUT: %.loc19_83.2: init %LongResult to %.loc19_83.1 = mark_in_place_init %PassLong__carbon_thunk.call.loc19 +// CHECK:STDOUT: %.loc19_83.3: ref %LongResult = temporary %.loc19_83.1, %.loc19_83.2 +// CHECK:STDOUT: %.loc19_83.4: %LongResult = acquire_value %.loc19_83.3 // CHECK:STDOUT: %.loc19_41: type = splice_block %LongResult.ref.loc19 [concrete = constants.%LongResult] { // CHECK:STDOUT: %Cpp.ref.loc19_38: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %LongResult.ref.loc19: type = name_ref LongResult, imports.%LongResult.decl [concrete = constants.%LongResult] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc19_83.3: ref %LongResult = temporary %.loc19_83.1, %.loc19_83.2 -// CHECK:STDOUT: %.loc19_83.4: %LongResult = acquire_value %.loc19_83.3 // CHECK:STDOUT: %cpp_compat_long_result: %LongResult = value_binding cpp_compat_long_result, %.loc19_83.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %carbon_i32.patt: %pattern_type.6b6 = value_binding_pattern carbon_i32 [concrete] +// CHECK:STDOUT: %carbon_i32.patt: %pattern_type.6b6 = value_binding_pattern carbon_i32 [concrete = constants.%carbon_i32.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %cpp_long.ref.loc21: %Cpp.long = name_ref cpp_long, %cpp_long // CHECK:STDOUT: %i32.loc21_37: type = type_literal constants.%i32 [concrete = constants.%i32] @@ -1252,7 +1269,7 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %i32.loc21_19: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %carbon_i32: %i32 = value_binding carbon_i32, %.loc21_34.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %carbon_i32_result.patt: %pattern_type.596 = value_binding_pattern carbon_i32_result [concrete] +// CHECK:STDOUT: %carbon_i32_result.patt: %pattern_type.596 = value_binding_pattern carbon_i32_result [concrete = constants.%carbon_i32_result.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc22_49: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %PassLong.ref.loc22: %PassLong.cpp_overload_set.type = name_ref PassLong, imports.%PassLong.cpp_overload_set.value [concrete = constants.%PassLong.cpp_overload_set.value] @@ -1261,27 +1278,27 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %addr.loc22: %ptr.fc9 = addr_of %.loc22_72.1 // CHECK:STDOUT: %PassLong__carbon_thunk.call.loc22: init %empty_tuple.type = call imports.%PassLong__carbon_thunk.decl.13dd4e.2(%carbon_i32.ref, %addr.loc22) // CHECK:STDOUT: %.loc22_72.2: init %IntResult to %.loc22_72.1 = mark_in_place_init %PassLong__carbon_thunk.call.loc22 +// CHECK:STDOUT: %.loc22_72.3: ref %IntResult = temporary %.loc22_72.1, %.loc22_72.2 +// CHECK:STDOUT: %.loc22_72.4: %IntResult = acquire_value %.loc22_72.3 // CHECK:STDOUT: %.loc22_36: type = splice_block %IntResult.ref [concrete = constants.%IntResult] { // CHECK:STDOUT: %Cpp.ref.loc22_33: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %IntResult.ref: type = name_ref IntResult, imports.%IntResult.decl [concrete = constants.%IntResult] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc22_72.3: ref %IntResult = temporary %.loc22_72.1, %.loc22_72.2 -// CHECK:STDOUT: %.loc22_72.4: %IntResult = acquire_value %.loc22_72.3 // CHECK:STDOUT: %carbon_i32_result: %IntResult = value_binding carbon_i32_result, %.loc22_72.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %carbon_i64.patt: %pattern_type.f57 = value_binding_pattern carbon_i64 [concrete] +// CHECK:STDOUT: %carbon_i64.patt: %pattern_type.f57 = value_binding_pattern carbon_i64 [concrete = constants.%carbon_i64.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %cpp_long.ref.loc24: %Cpp.long = name_ref cpp_long, %cpp_long -// CHECK:STDOUT: %i64: type = type_literal constants.%i64 [concrete = constants.%i64] // CHECK:STDOUT: %impl.elem0.loc24: %.bd1 = impl_witness_access constants.%ImplicitAs.impl_witness.cfa, element0 [concrete = constants.%Cpp.long.as.ImplicitAs.impl.Convert.3cefb0.1] // CHECK:STDOUT: %bound_method.loc24: = bound_method %cpp_long.ref.loc24, %impl.elem0.loc24 // CHECK:STDOUT: %Cpp.long.as.ImplicitAs.impl.Convert.call.loc24: init %i64 = call %bound_method.loc24(%cpp_long.ref.loc24) // CHECK:STDOUT: %.loc24_32.1: %i64 = value_of_initializer %Cpp.long.as.ImplicitAs.impl.Convert.call.loc24 // CHECK:STDOUT: %.loc24_32.2: %i64 = converted %cpp_long.ref.loc24, %.loc24_32.1 +// CHECK:STDOUT: %i64: type = type_literal constants.%i64 [concrete = constants.%i64] // CHECK:STDOUT: %carbon_i64: %i64 = value_binding carbon_i64, %.loc24_32.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.18b = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.18b = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.18b = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.18b = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type = var %a.var_patt // CHECK:STDOUT: %float: Core.FloatLiteral = float_literal_value 10e-1 [concrete = constants.%float.6da] @@ -1348,6 +1365,8 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %pattern_type.25e: type = pattern_type %Cpp.long [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.25e = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.25e = var_pattern %a.patt [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.7eb: type = facet_type <@ImplicitAs, @ImplicitAs(%Cpp.long)> [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -1359,6 +1378,8 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type = struct_value () [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert [concrete] // CHECK:STDOUT: %int_1.9ce: %Cpp.long = int_value 1 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.25e = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.25e = var_pattern %b.patt [concrete] // CHECK:STDOUT: %Copy.impl_witness.fc57: = impl_witness imports.%Copy.impl_witness_table.210 [concrete] // CHECK:STDOUT: %Copy.facet: %Copy.type = facet_value %Cpp.long, (%Copy.impl_witness.fc57) [concrete] // CHECK:STDOUT: %Copy.WithSelf.Op.type.8db: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet) [concrete] @@ -1383,8 +1404,8 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: fn @CopyLong() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.25e = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.25e = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.25e = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.25e = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %Cpp.long = var %a.var_patt // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -1399,8 +1420,8 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %Cpp.long = ref_binding a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.25e = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.25e = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.25e = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type.25e = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %Cpp.long = var %b.var_patt // CHECK:STDOUT: %a.ref: ref %Cpp.long = name_ref a, %a @@ -1438,6 +1459,7 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: constants { // CHECK:STDOUT: %Cpp.long: type = class_type @Long32 [concrete] // CHECK:STDOUT: %pattern_type.25e: type = pattern_type %Cpp.long [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.25e = value_binding_pattern a [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.7eb: type = facet_type <@ImplicitAs, @ImplicitAs(%Cpp.long)> [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.e27: = impl_witness imports.%ImplicitAs.impl_witness_table.635 [concrete] @@ -1448,6 +1470,7 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type = struct_value () [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert [concrete] // CHECK:STDOUT: %int_1.9ce: %Cpp.long = int_value 1 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.25e = value_binding_pattern b [concrete] // CHECK:STDOUT: %EqWith.type.54a: type = facet_type <@EqWith, @EqWith(%Cpp.long)> [concrete] // CHECK:STDOUT: %EqWith.impl_witness.cd4: = impl_witness imports.%EqWith.impl_witness_table.48e [concrete] // CHECK:STDOUT: %EqWith.facet.362: %EqWith.type.54a = facet_value %Cpp.long, (%EqWith.impl_witness.cd4) [concrete] @@ -1488,8 +1511,8 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %Core.import_ref.06c: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.635 = impl_witness_table (%Core.import_ref.06c), @Core.IntLiteral.as.ImplicitAs.impl.94b [concrete] // CHECK:STDOUT: %Core.import_ref.a87: %Cpp.long.as.EqWith.impl.Equal.type.78c = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [concrete = constants.%Cpp.long.as.EqWith.impl.Equal.1ca] -// CHECK:STDOUT: %Core.import_ref.adc9: %Cpp.long.as.EqWith.impl.NotEqual.type.8e5 = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [concrete = constants.%Cpp.long.as.EqWith.impl.NotEqual.a6a] -// CHECK:STDOUT: %EqWith.impl_witness_table.48e = impl_witness_table (%Core.import_ref.a87, %Core.import_ref.adc9), @Cpp.long.as.EqWith.impl.96d [concrete] +// CHECK:STDOUT: %Core.import_ref.adc9b: %Cpp.long.as.EqWith.impl.NotEqual.type.8e5 = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [concrete = constants.%Cpp.long.as.EqWith.impl.NotEqual.a6a] +// CHECK:STDOUT: %EqWith.impl_witness_table.48e = impl_witness_table (%Core.import_ref.a87, %Core.import_ref.adc9b), @Cpp.long.as.EqWith.impl.96d [concrete] // CHECK:STDOUT: %Core.import_ref.0e8: %Cpp.long.as.OrderedWith.impl.Less.type.335 = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [concrete = constants.%Cpp.long.as.OrderedWith.impl.Less.606] // CHECK:STDOUT: %Core.import_ref.757: %Cpp.long.as.OrderedWith.impl.LessOrEquivalent.type.42c = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [concrete = constants.%Cpp.long.as.OrderedWith.impl.LessOrEquivalent.0c8] // CHECK:STDOUT: %Core.import_ref.c32c: %Cpp.long.as.OrderedWith.impl.Greater.type.725 = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [concrete = constants.%Cpp.long.as.OrderedWith.impl.Greater.7c8] @@ -1500,32 +1523,32 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: fn @ComparisonsHomogeneousLong() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.25e = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.25e = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1.loc8: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] -// CHECK:STDOUT: %.loc8_13: type = splice_block %long.ref.loc8 [concrete = constants.%Cpp.long] { -// CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %long.ref.loc8: type = name_ref long, constants.%Cpp.long [concrete = constants.%Cpp.long] -// CHECK:STDOUT: } // CHECK:STDOUT: %impl.elem0.loc8: %.b13 = impl_witness_access constants.%ImplicitAs.impl_witness.e27, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert] // CHECK:STDOUT: %bound_method.loc8: = bound_method %int_1.loc8, %impl.elem0.loc8 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc8: init %Cpp.long = call %bound_method.loc8(%int_1.loc8) [concrete = constants.%int_1.9ce] // CHECK:STDOUT: %.loc8_21.1: %Cpp.long = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc8 [concrete = constants.%int_1.9ce] // CHECK:STDOUT: %.loc8_21.2: %Cpp.long = converted %int_1.loc8, %.loc8_21.1 [concrete = constants.%int_1.9ce] +// CHECK:STDOUT: %.loc8_13: type = splice_block %long.ref.loc8 [concrete = constants.%Cpp.long] { +// CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %long.ref.loc8: type = name_ref long, constants.%Cpp.long [concrete = constants.%Cpp.long] +// CHECK:STDOUT: } // CHECK:STDOUT: %a: %Cpp.long = value_binding a, %.loc8_21.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.25e = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.25e = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1.loc9: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] -// CHECK:STDOUT: %.loc9_13: type = splice_block %long.ref.loc9 [concrete = constants.%Cpp.long] { -// CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %long.ref.loc9: type = name_ref long, constants.%Cpp.long [concrete = constants.%Cpp.long] -// CHECK:STDOUT: } // CHECK:STDOUT: %impl.elem0.loc9: %.b13 = impl_witness_access constants.%ImplicitAs.impl_witness.e27, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert] // CHECK:STDOUT: %bound_method.loc9: = bound_method %int_1.loc9, %impl.elem0.loc9 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc9: init %Cpp.long = call %bound_method.loc9(%int_1.loc9) [concrete = constants.%int_1.9ce] // CHECK:STDOUT: %.loc9_21.1: %Cpp.long = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc9 [concrete = constants.%int_1.9ce] // CHECK:STDOUT: %.loc9_21.2: %Cpp.long = converted %int_1.loc9, %.loc9_21.1 [concrete = constants.%int_1.9ce] +// CHECK:STDOUT: %.loc9_13: type = splice_block %long.ref.loc9 [concrete = constants.%Cpp.long] { +// CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %long.ref.loc9: type = name_ref long, constants.%Cpp.long [concrete = constants.%Cpp.long] +// CHECK:STDOUT: } // CHECK:STDOUT: %b: %Cpp.long = value_binding b, %.loc9_21.2 // CHECK:STDOUT: %a.ref.loc10: %Cpp.long = name_ref a, %a // CHECK:STDOUT: %b.ref.loc10: %Cpp.long = name_ref b, %b @@ -1568,6 +1591,7 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %Cpp.long: type = class_type @Long32 [concrete] // CHECK:STDOUT: %pattern_type.25e: type = pattern_type %Cpp.long [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.25e = value_binding_pattern a [concrete] // CHECK:STDOUT: %ImplicitAs.type.7eb: type = facet_type <@ImplicitAs, @ImplicitAs(%Cpp.long)> [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.e27: = impl_witness imports.%ImplicitAs.impl_witness_table.635 [concrete] // CHECK:STDOUT: %ImplicitAs.facet.b30: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.e27) [concrete] @@ -1732,11 +1756,11 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %Core.Equal.025: @Cpp.long.as.EqWith.impl.5b1.%Cpp.long.as.EqWith.impl.Equal.type.1 (%Cpp.long.as.EqWith.impl.Equal.type.814973.2) = import_ref Core//prelude/types/cpp/int, Equal, loaded [symbolic = @Cpp.long.as.EqWith.impl.5b1.%Cpp.long.as.EqWith.impl.Equal.1 (constants.%Cpp.long.as.EqWith.impl.Equal.4a8971.2)] // CHECK:STDOUT: %Core.import_ref.06c923.2: %i32.as.ImplicitAs.impl.Convert.type = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [concrete = constants.%i32.as.ImplicitAs.impl.Convert] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.a75 = impl_witness_table (%Core.import_ref.06c923.2), @i32.as.ImplicitAs.impl [concrete] -// CHECK:STDOUT: %Core.import_ref.d32: @Cpp.long.as.OrderedWith.impl.3fc.%Cpp.long.as.OrderedWith.impl.Less.type.2 (%Cpp.long.as.OrderedWith.impl.Less.type.3ff9ca.1) = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [symbolic = @Cpp.long.as.OrderedWith.impl.3fc.%Cpp.long.as.OrderedWith.impl.Less.2 (constants.%Cpp.long.as.OrderedWith.impl.Less.76c9f3.1)] +// CHECK:STDOUT: %Core.import_ref.d32f: @Cpp.long.as.OrderedWith.impl.3fc.%Cpp.long.as.OrderedWith.impl.Less.type.2 (%Cpp.long.as.OrderedWith.impl.Less.type.3ff9ca.1) = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [symbolic = @Cpp.long.as.OrderedWith.impl.3fc.%Cpp.long.as.OrderedWith.impl.Less.2 (constants.%Cpp.long.as.OrderedWith.impl.Less.76c9f3.1)] // CHECK:STDOUT: %Core.import_ref.4be: @Cpp.long.as.OrderedWith.impl.3fc.%Cpp.long.as.OrderedWith.impl.LessOrEquivalent.type.2 (%Cpp.long.as.OrderedWith.impl.LessOrEquivalent.type.35cecb.1) = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [symbolic = @Cpp.long.as.OrderedWith.impl.3fc.%Cpp.long.as.OrderedWith.impl.LessOrEquivalent.2 (constants.%Cpp.long.as.OrderedWith.impl.LessOrEquivalent.351d50.1)] // CHECK:STDOUT: %Core.import_ref.b5f: @Cpp.long.as.OrderedWith.impl.3fc.%Cpp.long.as.OrderedWith.impl.Greater.type.2 (%Cpp.long.as.OrderedWith.impl.Greater.type.e2eef7.1) = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [symbolic = @Cpp.long.as.OrderedWith.impl.3fc.%Cpp.long.as.OrderedWith.impl.Greater.2 (constants.%Cpp.long.as.OrderedWith.impl.Greater.37f70d.1)] // CHECK:STDOUT: %Core.import_ref.a8b: @Cpp.long.as.OrderedWith.impl.3fc.%Cpp.long.as.OrderedWith.impl.GreaterOrEquivalent.type.2 (%Cpp.long.as.OrderedWith.impl.GreaterOrEquivalent.type.154997.1) = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [symbolic = @Cpp.long.as.OrderedWith.impl.3fc.%Cpp.long.as.OrderedWith.impl.GreaterOrEquivalent.2 (constants.%Cpp.long.as.OrderedWith.impl.GreaterOrEquivalent.e4afa3.1)] -// CHECK:STDOUT: %OrderedWith.impl_witness_table.41e = impl_witness_table (%Core.import_ref.d32, %Core.import_ref.4be, %Core.import_ref.b5f, %Core.import_ref.a8b), @Cpp.long.as.OrderedWith.impl.3fc [concrete] +// CHECK:STDOUT: %OrderedWith.impl_witness_table.41e = impl_witness_table (%Core.import_ref.d32f, %Core.import_ref.4be, %Core.import_ref.b5f, %Core.import_ref.a8b), @Cpp.long.as.OrderedWith.impl.3fc [concrete] // CHECK:STDOUT: %Core.GreaterOrEquivalent.839: @Cpp.long.as.OrderedWith.impl.3fc.%Cpp.long.as.OrderedWith.impl.GreaterOrEquivalent.type.1 (%Cpp.long.as.OrderedWith.impl.GreaterOrEquivalent.type.154997.2) = import_ref Core//prelude/types/cpp/int, GreaterOrEquivalent, loaded [symbolic = @Cpp.long.as.OrderedWith.impl.3fc.%Cpp.long.as.OrderedWith.impl.GreaterOrEquivalent.1 (constants.%Cpp.long.as.OrderedWith.impl.GreaterOrEquivalent.e4afa3.2)] // CHECK:STDOUT: %Core.Greater.ac9: @Cpp.long.as.OrderedWith.impl.3fc.%Cpp.long.as.OrderedWith.impl.Greater.type.1 (%Cpp.long.as.OrderedWith.impl.Greater.type.e2eef7.2) = import_ref Core//prelude/types/cpp/int, Greater, loaded [symbolic = @Cpp.long.as.OrderedWith.impl.3fc.%Cpp.long.as.OrderedWith.impl.Greater.1 (constants.%Cpp.long.as.OrderedWith.impl.Greater.37f70d.2)] // CHECK:STDOUT: %Core.LessOrEquivalent.a62: @Cpp.long.as.OrderedWith.impl.3fc.%Cpp.long.as.OrderedWith.impl.LessOrEquivalent.type.1 (%Cpp.long.as.OrderedWith.impl.LessOrEquivalent.type.35cecb.2) = import_ref Core//prelude/types/cpp/int, LessOrEquivalent, loaded [symbolic = @Cpp.long.as.OrderedWith.impl.3fc.%Cpp.long.as.OrderedWith.impl.LessOrEquivalent.1 (constants.%Cpp.long.as.OrderedWith.impl.LessOrEquivalent.351d50.2)] @@ -1747,29 +1771,31 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.25e = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.25e = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1.loc9: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] -// CHECK:STDOUT: %.loc9_13: type = splice_block %long.ref [concrete = constants.%Cpp.long] { -// CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %long.ref: type = name_ref long, constants.%Cpp.long [concrete = constants.%Cpp.long] -// CHECK:STDOUT: } // CHECK:STDOUT: %impl.elem0.loc9: %.b13 = impl_witness_access constants.%ImplicitAs.impl_witness.e27, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.3ce] // CHECK:STDOUT: %bound_method.loc9: = bound_method %int_1.loc9, %impl.elem0.loc9 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.5d7] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc9: init %Cpp.long = call %bound_method.loc9(%int_1.loc9) [concrete = constants.%int_1.9ce] // CHECK:STDOUT: %.loc9_21.1: %Cpp.long = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc9 [concrete = constants.%int_1.9ce] // CHECK:STDOUT: %.loc9_21.2: %Cpp.long = converted %int_1.loc9, %.loc9_21.1 [concrete = constants.%int_1.9ce] +// CHECK:STDOUT: %.loc9_13: type = splice_block %long.ref [concrete = constants.%Cpp.long] { +// CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %long.ref: type = name_ref long, constants.%Cpp.long [concrete = constants.%Cpp.long] +// CHECK:STDOUT: } // CHECK:STDOUT: %a: %Cpp.long = value_binding a, %.loc9_21.2 // CHECK:STDOUT: %a.ref.loc10: %Cpp.long = name_ref a, %a // CHECK:STDOUT: %b.ref.loc10: %i32 = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc10_5: %.ad3 = impl_witness_access constants.%EqWith.impl_witness.f8a, element0 [concrete = constants.%Cpp.long.as.EqWith.impl.Equal.1a881e.2] // CHECK:STDOUT: %bound_method.loc10_5.1: = bound_method %a.ref.loc10, %impl.elem0.loc10_5 -// CHECK:STDOUT: %ImplicitAs.facet.loc10: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] -// CHECK:STDOUT: %.loc10_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc10 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc10_5.1: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc10_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc10_5.1 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc10_5.2: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc10_5.2: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc10_5.2 [concrete = constants.%ImplicitAs.facet.ce4] // CHECK:STDOUT: %specific_fn.loc10: = specific_function %impl.elem0.loc10_5, @Cpp.long.as.EqWith.impl.Equal.1(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.EqWith.impl.Equal.specific_fn.6692a8.1] // CHECK:STDOUT: %bound_method.loc10_5.2: = bound_method %a.ref.loc10, %specific_fn.loc10 -// CHECK:STDOUT: %.loc10_5.2: %Cpp.long.as.EqWith.impl.Equal.type.91d370.1 = specific_constant imports.%Core.Equal.025, @Cpp.long.as.EqWith.impl.5b1(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.EqWith.impl.Equal.1a881e.1] -// CHECK:STDOUT: %Equal.ref.loc10: %Cpp.long.as.EqWith.impl.Equal.type.91d370.1 = name_ref Equal, %.loc10_5.2 [concrete = constants.%Cpp.long.as.EqWith.impl.Equal.1a881e.1] +// CHECK:STDOUT: %.loc10_5.3: %Cpp.long.as.EqWith.impl.Equal.type.91d370.1 = specific_constant imports.%Core.Equal.025, @Cpp.long.as.EqWith.impl.5b1(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.EqWith.impl.Equal.1a881e.1] +// CHECK:STDOUT: %Equal.ref.loc10: %Cpp.long.as.EqWith.impl.Equal.type.91d370.1 = name_ref Equal, %.loc10_5.3 [concrete = constants.%Cpp.long.as.EqWith.impl.Equal.1a881e.1] // CHECK:STDOUT: %Cpp.long.as.EqWith.impl.Equal.bound.loc10: = bound_method %a.ref.loc10, %Equal.ref.loc10 // CHECK:STDOUT: %Cpp.long.as.EqWith.impl.Equal.specific_fn.loc10: = specific_function %Equal.ref.loc10, @Cpp.long.as.EqWith.impl.Equal.2(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.EqWith.impl.Equal.specific_fn.6692a8.2] // CHECK:STDOUT: %bound_method.loc10_5.3: = bound_method %a.ref.loc10, %Cpp.long.as.EqWith.impl.Equal.specific_fn.loc10 @@ -1783,12 +1809,14 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %b.ref.loc11: %i32 = name_ref b, %b // CHECK:STDOUT: %impl.elem1.loc11: %.e94 = impl_witness_access constants.%EqWith.impl_witness.f8a, element1 [concrete = constants.%Cpp.long.as.EqWith.impl.NotEqual.7bb2f2.2] // CHECK:STDOUT: %bound_method.loc11_5.1: = bound_method %a.ref.loc11, %impl.elem1.loc11 -// CHECK:STDOUT: %ImplicitAs.facet.loc11: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] -// CHECK:STDOUT: %.loc11_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc11 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc11_5.1: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc11_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc11_5.1 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc11_5.2: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc11_5.2: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc11_5.2 [concrete = constants.%ImplicitAs.facet.ce4] // CHECK:STDOUT: %specific_fn.loc11: = specific_function %impl.elem1.loc11, @Cpp.long.as.EqWith.impl.NotEqual.1(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.EqWith.impl.NotEqual.specific_fn.7605b8.1] // CHECK:STDOUT: %bound_method.loc11_5.2: = bound_method %a.ref.loc11, %specific_fn.loc11 -// CHECK:STDOUT: %.loc11_5.2: %Cpp.long.as.EqWith.impl.NotEqual.type.0ae55e.1 = specific_constant imports.%Core.NotEqual.db5, @Cpp.long.as.EqWith.impl.5b1(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.EqWith.impl.NotEqual.7bb2f2.1] -// CHECK:STDOUT: %NotEqual.ref.loc11: %Cpp.long.as.EqWith.impl.NotEqual.type.0ae55e.1 = name_ref NotEqual, %.loc11_5.2 [concrete = constants.%Cpp.long.as.EqWith.impl.NotEqual.7bb2f2.1] +// CHECK:STDOUT: %.loc11_5.3: %Cpp.long.as.EqWith.impl.NotEqual.type.0ae55e.1 = specific_constant imports.%Core.NotEqual.db5, @Cpp.long.as.EqWith.impl.5b1(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.EqWith.impl.NotEqual.7bb2f2.1] +// CHECK:STDOUT: %NotEqual.ref.loc11: %Cpp.long.as.EqWith.impl.NotEqual.type.0ae55e.1 = name_ref NotEqual, %.loc11_5.3 [concrete = constants.%Cpp.long.as.EqWith.impl.NotEqual.7bb2f2.1] // CHECK:STDOUT: %Cpp.long.as.EqWith.impl.NotEqual.bound.loc11: = bound_method %a.ref.loc11, %NotEqual.ref.loc11 // CHECK:STDOUT: %Cpp.long.as.EqWith.impl.NotEqual.specific_fn.loc11: = specific_function %NotEqual.ref.loc11, @Cpp.long.as.EqWith.impl.NotEqual.2(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.EqWith.impl.NotEqual.specific_fn.7605b8.2] // CHECK:STDOUT: %bound_method.loc11_5.3: = bound_method %a.ref.loc11, %Cpp.long.as.EqWith.impl.NotEqual.specific_fn.loc11 @@ -1802,12 +1830,14 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %b.ref.loc12: %i32 = name_ref b, %b // CHECK:STDOUT: %impl.elem2.loc12: %.30b = impl_witness_access constants.%OrderedWith.impl_witness.512, element2 [concrete = constants.%Cpp.long.as.OrderedWith.impl.Greater.ea4cc4.2] // CHECK:STDOUT: %bound_method.loc12_5.1: = bound_method %a.ref.loc12, %impl.elem2.loc12 -// CHECK:STDOUT: %ImplicitAs.facet.loc12: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] -// CHECK:STDOUT: %.loc12_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc12 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc12_5.1: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc12_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc12_5.1 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc12_5.2: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc12_5.2: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc12_5.2 [concrete = constants.%ImplicitAs.facet.ce4] // CHECK:STDOUT: %specific_fn.loc12: = specific_function %impl.elem2.loc12, @Cpp.long.as.OrderedWith.impl.Greater.1(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.OrderedWith.impl.Greater.specific_fn.cc0b83.1] // CHECK:STDOUT: %bound_method.loc12_5.2: = bound_method %a.ref.loc12, %specific_fn.loc12 -// CHECK:STDOUT: %.loc12_5.2: %Cpp.long.as.OrderedWith.impl.Greater.type.1eeaf7.1 = specific_constant imports.%Core.Greater.ac9, @Cpp.long.as.OrderedWith.impl.3fc(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.OrderedWith.impl.Greater.ea4cc4.1] -// CHECK:STDOUT: %Greater.ref.loc12: %Cpp.long.as.OrderedWith.impl.Greater.type.1eeaf7.1 = name_ref Greater, %.loc12_5.2 [concrete = constants.%Cpp.long.as.OrderedWith.impl.Greater.ea4cc4.1] +// CHECK:STDOUT: %.loc12_5.3: %Cpp.long.as.OrderedWith.impl.Greater.type.1eeaf7.1 = specific_constant imports.%Core.Greater.ac9, @Cpp.long.as.OrderedWith.impl.3fc(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.OrderedWith.impl.Greater.ea4cc4.1] +// CHECK:STDOUT: %Greater.ref.loc12: %Cpp.long.as.OrderedWith.impl.Greater.type.1eeaf7.1 = name_ref Greater, %.loc12_5.3 [concrete = constants.%Cpp.long.as.OrderedWith.impl.Greater.ea4cc4.1] // CHECK:STDOUT: %Cpp.long.as.OrderedWith.impl.Greater.bound.loc12: = bound_method %a.ref.loc12, %Greater.ref.loc12 // CHECK:STDOUT: %Cpp.long.as.OrderedWith.impl.Greater.specific_fn.loc12: = specific_function %Greater.ref.loc12, @Cpp.long.as.OrderedWith.impl.Greater.2(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.OrderedWith.impl.Greater.specific_fn.cc0b83.2] // CHECK:STDOUT: %bound_method.loc12_5.3: = bound_method %a.ref.loc12, %Cpp.long.as.OrderedWith.impl.Greater.specific_fn.loc12 @@ -1821,12 +1851,14 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %b.ref.loc13: %i32 = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc13_5: %.d9d = impl_witness_access constants.%OrderedWith.impl_witness.512, element0 [concrete = constants.%Cpp.long.as.OrderedWith.impl.Less.c497ef.2] // CHECK:STDOUT: %bound_method.loc13_5.1: = bound_method %a.ref.loc13, %impl.elem0.loc13_5 -// CHECK:STDOUT: %ImplicitAs.facet.loc13: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] -// CHECK:STDOUT: %.loc13_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc13 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc13_5.1: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc13_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc13_5.1 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc13_5.2: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc13_5.2: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc13_5.2 [concrete = constants.%ImplicitAs.facet.ce4] // CHECK:STDOUT: %specific_fn.loc13: = specific_function %impl.elem0.loc13_5, @Cpp.long.as.OrderedWith.impl.Less.1(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.OrderedWith.impl.Less.specific_fn.06a809.1] // CHECK:STDOUT: %bound_method.loc13_5.2: = bound_method %a.ref.loc13, %specific_fn.loc13 -// CHECK:STDOUT: %.loc13_5.2: %Cpp.long.as.OrderedWith.impl.Less.type.cc154a.1 = specific_constant imports.%Core.Less.a91, @Cpp.long.as.OrderedWith.impl.3fc(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.OrderedWith.impl.Less.c497ef.1] -// CHECK:STDOUT: %Less.ref.loc13: %Cpp.long.as.OrderedWith.impl.Less.type.cc154a.1 = name_ref Less, %.loc13_5.2 [concrete = constants.%Cpp.long.as.OrderedWith.impl.Less.c497ef.1] +// CHECK:STDOUT: %.loc13_5.3: %Cpp.long.as.OrderedWith.impl.Less.type.cc154a.1 = specific_constant imports.%Core.Less.a91, @Cpp.long.as.OrderedWith.impl.3fc(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.OrderedWith.impl.Less.c497ef.1] +// CHECK:STDOUT: %Less.ref.loc13: %Cpp.long.as.OrderedWith.impl.Less.type.cc154a.1 = name_ref Less, %.loc13_5.3 [concrete = constants.%Cpp.long.as.OrderedWith.impl.Less.c497ef.1] // CHECK:STDOUT: %Cpp.long.as.OrderedWith.impl.Less.bound.loc13: = bound_method %a.ref.loc13, %Less.ref.loc13 // CHECK:STDOUT: %Cpp.long.as.OrderedWith.impl.Less.specific_fn.loc13: = specific_function %Less.ref.loc13, @Cpp.long.as.OrderedWith.impl.Less.2(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.OrderedWith.impl.Less.specific_fn.06a809.2] // CHECK:STDOUT: %bound_method.loc13_5.3: = bound_method %a.ref.loc13, %Cpp.long.as.OrderedWith.impl.Less.specific_fn.loc13 @@ -1840,12 +1872,14 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %b.ref.loc14: %i32 = name_ref b, %b // CHECK:STDOUT: %impl.elem3.loc14: %.c8e = impl_witness_access constants.%OrderedWith.impl_witness.512, element3 [concrete = constants.%Cpp.long.as.OrderedWith.impl.GreaterOrEquivalent.b64dd2.2] // CHECK:STDOUT: %bound_method.loc14_5.1: = bound_method %a.ref.loc14, %impl.elem3.loc14 -// CHECK:STDOUT: %ImplicitAs.facet.loc14: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] -// CHECK:STDOUT: %.loc14_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc14 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc14_5.1: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc14_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc14_5.1 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc14_5.2: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc14_5.2: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc14_5.2 [concrete = constants.%ImplicitAs.facet.ce4] // CHECK:STDOUT: %specific_fn.loc14: = specific_function %impl.elem3.loc14, @Cpp.long.as.OrderedWith.impl.GreaterOrEquivalent.1(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.OrderedWith.impl.GreaterOrEquivalent.specific_fn.a6b8b7.1] // CHECK:STDOUT: %bound_method.loc14_5.2: = bound_method %a.ref.loc14, %specific_fn.loc14 -// CHECK:STDOUT: %.loc14_5.2: %Cpp.long.as.OrderedWith.impl.GreaterOrEquivalent.type.a93f64.1 = specific_constant imports.%Core.GreaterOrEquivalent.839, @Cpp.long.as.OrderedWith.impl.3fc(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.OrderedWith.impl.GreaterOrEquivalent.b64dd2.1] -// CHECK:STDOUT: %GreaterOrEquivalent.ref.loc14: %Cpp.long.as.OrderedWith.impl.GreaterOrEquivalent.type.a93f64.1 = name_ref GreaterOrEquivalent, %.loc14_5.2 [concrete = constants.%Cpp.long.as.OrderedWith.impl.GreaterOrEquivalent.b64dd2.1] +// CHECK:STDOUT: %.loc14_5.3: %Cpp.long.as.OrderedWith.impl.GreaterOrEquivalent.type.a93f64.1 = specific_constant imports.%Core.GreaterOrEquivalent.839, @Cpp.long.as.OrderedWith.impl.3fc(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.OrderedWith.impl.GreaterOrEquivalent.b64dd2.1] +// CHECK:STDOUT: %GreaterOrEquivalent.ref.loc14: %Cpp.long.as.OrderedWith.impl.GreaterOrEquivalent.type.a93f64.1 = name_ref GreaterOrEquivalent, %.loc14_5.3 [concrete = constants.%Cpp.long.as.OrderedWith.impl.GreaterOrEquivalent.b64dd2.1] // CHECK:STDOUT: %Cpp.long.as.OrderedWith.impl.GreaterOrEquivalent.bound.loc14: = bound_method %a.ref.loc14, %GreaterOrEquivalent.ref.loc14 // CHECK:STDOUT: %Cpp.long.as.OrderedWith.impl.GreaterOrEquivalent.specific_fn.loc14: = specific_function %GreaterOrEquivalent.ref.loc14, @Cpp.long.as.OrderedWith.impl.GreaterOrEquivalent.2(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.OrderedWith.impl.GreaterOrEquivalent.specific_fn.a6b8b7.2] // CHECK:STDOUT: %bound_method.loc14_5.3: = bound_method %a.ref.loc14, %Cpp.long.as.OrderedWith.impl.GreaterOrEquivalent.specific_fn.loc14 @@ -1859,12 +1893,14 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %b.ref.loc15: %i32 = name_ref b, %b // CHECK:STDOUT: %impl.elem1.loc15: %.3fe = impl_witness_access constants.%OrderedWith.impl_witness.512, element1 [concrete = constants.%Cpp.long.as.OrderedWith.impl.LessOrEquivalent.998aeb.2] // CHECK:STDOUT: %bound_method.loc15_5.1: = bound_method %a.ref.loc15, %impl.elem1.loc15 -// CHECK:STDOUT: %ImplicitAs.facet.loc15: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] -// CHECK:STDOUT: %.loc15_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc15 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc15_5.1: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc15_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc15_5.1 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc15_5.2: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc15_5.2: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc15_5.2 [concrete = constants.%ImplicitAs.facet.ce4] // CHECK:STDOUT: %specific_fn.loc15: = specific_function %impl.elem1.loc15, @Cpp.long.as.OrderedWith.impl.LessOrEquivalent.1(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.OrderedWith.impl.LessOrEquivalent.specific_fn.9913d3.1] // CHECK:STDOUT: %bound_method.loc15_5.2: = bound_method %a.ref.loc15, %specific_fn.loc15 -// CHECK:STDOUT: %.loc15_5.2: %Cpp.long.as.OrderedWith.impl.LessOrEquivalent.type.ae2ba0.1 = specific_constant imports.%Core.LessOrEquivalent.a62, @Cpp.long.as.OrderedWith.impl.3fc(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.OrderedWith.impl.LessOrEquivalent.998aeb.1] -// CHECK:STDOUT: %LessOrEquivalent.ref.loc15: %Cpp.long.as.OrderedWith.impl.LessOrEquivalent.type.ae2ba0.1 = name_ref LessOrEquivalent, %.loc15_5.2 [concrete = constants.%Cpp.long.as.OrderedWith.impl.LessOrEquivalent.998aeb.1] +// CHECK:STDOUT: %.loc15_5.3: %Cpp.long.as.OrderedWith.impl.LessOrEquivalent.type.ae2ba0.1 = specific_constant imports.%Core.LessOrEquivalent.a62, @Cpp.long.as.OrderedWith.impl.3fc(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.OrderedWith.impl.LessOrEquivalent.998aeb.1] +// CHECK:STDOUT: %LessOrEquivalent.ref.loc15: %Cpp.long.as.OrderedWith.impl.LessOrEquivalent.type.ae2ba0.1 = name_ref LessOrEquivalent, %.loc15_5.3 [concrete = constants.%Cpp.long.as.OrderedWith.impl.LessOrEquivalent.998aeb.1] // CHECK:STDOUT: %Cpp.long.as.OrderedWith.impl.LessOrEquivalent.bound.loc15: = bound_method %a.ref.loc15, %LessOrEquivalent.ref.loc15 // CHECK:STDOUT: %Cpp.long.as.OrderedWith.impl.LessOrEquivalent.specific_fn.loc15: = specific_function %LessOrEquivalent.ref.loc15, @Cpp.long.as.OrderedWith.impl.LessOrEquivalent.2(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.OrderedWith.impl.LessOrEquivalent.specific_fn.9913d3.2] // CHECK:STDOUT: %bound_method.loc15_5.3: = bound_method %a.ref.loc15, %Cpp.long.as.OrderedWith.impl.LessOrEquivalent.specific_fn.loc15 @@ -1878,12 +1914,14 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %int_1.loc17: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %impl.elem0.loc17_5: %.da0 = impl_witness_access constants.%EqWith.impl_witness.357, element0 [concrete = constants.%Cpp.long.as.EqWith.impl.Equal.c5b9b0.2] // CHECK:STDOUT: %bound_method.loc17_5.1: = bound_method %a.ref.loc17, %impl.elem0.loc17_5 -// CHECK:STDOUT: %ImplicitAs.facet.loc17: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.e27) [concrete = constants.%ImplicitAs.facet.b30] -// CHECK:STDOUT: %.loc17_5.1: %ImplicitAs.type.7eb = converted Core.IntLiteral, %ImplicitAs.facet.loc17 [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %ImplicitAs.facet.loc17_5.1: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.e27) [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %.loc17_5.1: %ImplicitAs.type.7eb = converted Core.IntLiteral, %ImplicitAs.facet.loc17_5.1 [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %ImplicitAs.facet.loc17_5.2: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.e27) [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %.loc17_5.2: %ImplicitAs.type.7eb = converted Core.IntLiteral, %ImplicitAs.facet.loc17_5.2 [concrete = constants.%ImplicitAs.facet.b30] // CHECK:STDOUT: %specific_fn.loc17: = specific_function %impl.elem0.loc17_5, @Cpp.long.as.EqWith.impl.Equal.1(constants.%ImplicitAs.facet.b30) [concrete = constants.%Cpp.long.as.EqWith.impl.Equal.specific_fn.e188b3.1] // CHECK:STDOUT: %bound_method.loc17_5.2: = bound_method %a.ref.loc17, %specific_fn.loc17 -// CHECK:STDOUT: %.loc17_5.2: %Cpp.long.as.EqWith.impl.Equal.type.10d936.1 = specific_constant imports.%Core.Equal.025, @Cpp.long.as.EqWith.impl.5b1(constants.%ImplicitAs.facet.b30) [concrete = constants.%Cpp.long.as.EqWith.impl.Equal.c5b9b0.1] -// CHECK:STDOUT: %Equal.ref.loc17: %Cpp.long.as.EqWith.impl.Equal.type.10d936.1 = name_ref Equal, %.loc17_5.2 [concrete = constants.%Cpp.long.as.EqWith.impl.Equal.c5b9b0.1] +// CHECK:STDOUT: %.loc17_5.3: %Cpp.long.as.EqWith.impl.Equal.type.10d936.1 = specific_constant imports.%Core.Equal.025, @Cpp.long.as.EqWith.impl.5b1(constants.%ImplicitAs.facet.b30) [concrete = constants.%Cpp.long.as.EqWith.impl.Equal.c5b9b0.1] +// CHECK:STDOUT: %Equal.ref.loc17: %Cpp.long.as.EqWith.impl.Equal.type.10d936.1 = name_ref Equal, %.loc17_5.3 [concrete = constants.%Cpp.long.as.EqWith.impl.Equal.c5b9b0.1] // CHECK:STDOUT: %Cpp.long.as.EqWith.impl.Equal.bound.loc17: = bound_method %a.ref.loc17, %Equal.ref.loc17 // CHECK:STDOUT: %Cpp.long.as.EqWith.impl.Equal.specific_fn.loc17: = specific_function %Equal.ref.loc17, @Cpp.long.as.EqWith.impl.Equal.2(constants.%ImplicitAs.facet.b30) [concrete = constants.%Cpp.long.as.EqWith.impl.Equal.specific_fn.e188b3.2] // CHECK:STDOUT: %bound_method.loc17_5.3: = bound_method %a.ref.loc17, %Cpp.long.as.EqWith.impl.Equal.specific_fn.loc17 @@ -1897,12 +1935,14 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %int_1.loc18: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %impl.elem1.loc18: %.b1b = impl_witness_access constants.%EqWith.impl_witness.357, element1 [concrete = constants.%Cpp.long.as.EqWith.impl.NotEqual.0931ca.2] // CHECK:STDOUT: %bound_method.loc18_5.1: = bound_method %a.ref.loc18, %impl.elem1.loc18 -// CHECK:STDOUT: %ImplicitAs.facet.loc18: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.e27) [concrete = constants.%ImplicitAs.facet.b30] -// CHECK:STDOUT: %.loc18_5.1: %ImplicitAs.type.7eb = converted Core.IntLiteral, %ImplicitAs.facet.loc18 [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %ImplicitAs.facet.loc18_5.1: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.e27) [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %.loc18_5.1: %ImplicitAs.type.7eb = converted Core.IntLiteral, %ImplicitAs.facet.loc18_5.1 [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %ImplicitAs.facet.loc18_5.2: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.e27) [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %.loc18_5.2: %ImplicitAs.type.7eb = converted Core.IntLiteral, %ImplicitAs.facet.loc18_5.2 [concrete = constants.%ImplicitAs.facet.b30] // CHECK:STDOUT: %specific_fn.loc18: = specific_function %impl.elem1.loc18, @Cpp.long.as.EqWith.impl.NotEqual.1(constants.%ImplicitAs.facet.b30) [concrete = constants.%Cpp.long.as.EqWith.impl.NotEqual.specific_fn.652cb3.1] // CHECK:STDOUT: %bound_method.loc18_5.2: = bound_method %a.ref.loc18, %specific_fn.loc18 -// CHECK:STDOUT: %.loc18_5.2: %Cpp.long.as.EqWith.impl.NotEqual.type.d8ead4.1 = specific_constant imports.%Core.NotEqual.db5, @Cpp.long.as.EqWith.impl.5b1(constants.%ImplicitAs.facet.b30) [concrete = constants.%Cpp.long.as.EqWith.impl.NotEqual.0931ca.1] -// CHECK:STDOUT: %NotEqual.ref.loc18: %Cpp.long.as.EqWith.impl.NotEqual.type.d8ead4.1 = name_ref NotEqual, %.loc18_5.2 [concrete = constants.%Cpp.long.as.EqWith.impl.NotEqual.0931ca.1] +// CHECK:STDOUT: %.loc18_5.3: %Cpp.long.as.EqWith.impl.NotEqual.type.d8ead4.1 = specific_constant imports.%Core.NotEqual.db5, @Cpp.long.as.EqWith.impl.5b1(constants.%ImplicitAs.facet.b30) [concrete = constants.%Cpp.long.as.EqWith.impl.NotEqual.0931ca.1] +// CHECK:STDOUT: %NotEqual.ref.loc18: %Cpp.long.as.EqWith.impl.NotEqual.type.d8ead4.1 = name_ref NotEqual, %.loc18_5.3 [concrete = constants.%Cpp.long.as.EqWith.impl.NotEqual.0931ca.1] // CHECK:STDOUT: %Cpp.long.as.EqWith.impl.NotEqual.bound.loc18: = bound_method %a.ref.loc18, %NotEqual.ref.loc18 // CHECK:STDOUT: %Cpp.long.as.EqWith.impl.NotEqual.specific_fn.loc18: = specific_function %NotEqual.ref.loc18, @Cpp.long.as.EqWith.impl.NotEqual.2(constants.%ImplicitAs.facet.b30) [concrete = constants.%Cpp.long.as.EqWith.impl.NotEqual.specific_fn.652cb3.2] // CHECK:STDOUT: %bound_method.loc18_5.3: = bound_method %a.ref.loc18, %Cpp.long.as.EqWith.impl.NotEqual.specific_fn.loc18 @@ -1916,12 +1956,14 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %int_1.loc19: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %impl.elem2.loc19: %.d77 = impl_witness_access constants.%OrderedWith.impl_witness.f04, element2 [concrete = constants.%Cpp.long.as.OrderedWith.impl.Greater.f83821.2] // CHECK:STDOUT: %bound_method.loc19_5.1: = bound_method %a.ref.loc19, %impl.elem2.loc19 -// CHECK:STDOUT: %ImplicitAs.facet.loc19: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.e27) [concrete = constants.%ImplicitAs.facet.b30] -// CHECK:STDOUT: %.loc19_5.1: %ImplicitAs.type.7eb = converted Core.IntLiteral, %ImplicitAs.facet.loc19 [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %ImplicitAs.facet.loc19_5.1: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.e27) [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %.loc19_5.1: %ImplicitAs.type.7eb = converted Core.IntLiteral, %ImplicitAs.facet.loc19_5.1 [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %ImplicitAs.facet.loc19_5.2: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.e27) [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %.loc19_5.2: %ImplicitAs.type.7eb = converted Core.IntLiteral, %ImplicitAs.facet.loc19_5.2 [concrete = constants.%ImplicitAs.facet.b30] // CHECK:STDOUT: %specific_fn.loc19: = specific_function %impl.elem2.loc19, @Cpp.long.as.OrderedWith.impl.Greater.1(constants.%ImplicitAs.facet.b30) [concrete = constants.%Cpp.long.as.OrderedWith.impl.Greater.specific_fn.faeadc.1] // CHECK:STDOUT: %bound_method.loc19_5.2: = bound_method %a.ref.loc19, %specific_fn.loc19 -// CHECK:STDOUT: %.loc19_5.2: %Cpp.long.as.OrderedWith.impl.Greater.type.75fc02.1 = specific_constant imports.%Core.Greater.ac9, @Cpp.long.as.OrderedWith.impl.3fc(constants.%ImplicitAs.facet.b30) [concrete = constants.%Cpp.long.as.OrderedWith.impl.Greater.f83821.1] -// CHECK:STDOUT: %Greater.ref.loc19: %Cpp.long.as.OrderedWith.impl.Greater.type.75fc02.1 = name_ref Greater, %.loc19_5.2 [concrete = constants.%Cpp.long.as.OrderedWith.impl.Greater.f83821.1] +// CHECK:STDOUT: %.loc19_5.3: %Cpp.long.as.OrderedWith.impl.Greater.type.75fc02.1 = specific_constant imports.%Core.Greater.ac9, @Cpp.long.as.OrderedWith.impl.3fc(constants.%ImplicitAs.facet.b30) [concrete = constants.%Cpp.long.as.OrderedWith.impl.Greater.f83821.1] +// CHECK:STDOUT: %Greater.ref.loc19: %Cpp.long.as.OrderedWith.impl.Greater.type.75fc02.1 = name_ref Greater, %.loc19_5.3 [concrete = constants.%Cpp.long.as.OrderedWith.impl.Greater.f83821.1] // CHECK:STDOUT: %Cpp.long.as.OrderedWith.impl.Greater.bound.loc19: = bound_method %a.ref.loc19, %Greater.ref.loc19 // CHECK:STDOUT: %Cpp.long.as.OrderedWith.impl.Greater.specific_fn.loc19: = specific_function %Greater.ref.loc19, @Cpp.long.as.OrderedWith.impl.Greater.2(constants.%ImplicitAs.facet.b30) [concrete = constants.%Cpp.long.as.OrderedWith.impl.Greater.specific_fn.faeadc.2] // CHECK:STDOUT: %bound_method.loc19_5.3: = bound_method %a.ref.loc19, %Cpp.long.as.OrderedWith.impl.Greater.specific_fn.loc19 @@ -1935,12 +1977,14 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %int_1.loc20: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %impl.elem0.loc20_5: %.124 = impl_witness_access constants.%OrderedWith.impl_witness.f04, element0 [concrete = constants.%Cpp.long.as.OrderedWith.impl.Less.819a43.2] // CHECK:STDOUT: %bound_method.loc20_5.1: = bound_method %a.ref.loc20, %impl.elem0.loc20_5 -// CHECK:STDOUT: %ImplicitAs.facet.loc20: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.e27) [concrete = constants.%ImplicitAs.facet.b30] -// CHECK:STDOUT: %.loc20_5.1: %ImplicitAs.type.7eb = converted Core.IntLiteral, %ImplicitAs.facet.loc20 [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %ImplicitAs.facet.loc20_5.1: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.e27) [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %.loc20_5.1: %ImplicitAs.type.7eb = converted Core.IntLiteral, %ImplicitAs.facet.loc20_5.1 [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %ImplicitAs.facet.loc20_5.2: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.e27) [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %.loc20_5.2: %ImplicitAs.type.7eb = converted Core.IntLiteral, %ImplicitAs.facet.loc20_5.2 [concrete = constants.%ImplicitAs.facet.b30] // CHECK:STDOUT: %specific_fn.loc20: = specific_function %impl.elem0.loc20_5, @Cpp.long.as.OrderedWith.impl.Less.1(constants.%ImplicitAs.facet.b30) [concrete = constants.%Cpp.long.as.OrderedWith.impl.Less.specific_fn.f8760d.1] // CHECK:STDOUT: %bound_method.loc20_5.2: = bound_method %a.ref.loc20, %specific_fn.loc20 -// CHECK:STDOUT: %.loc20_5.2: %Cpp.long.as.OrderedWith.impl.Less.type.544cda.1 = specific_constant imports.%Core.Less.a91, @Cpp.long.as.OrderedWith.impl.3fc(constants.%ImplicitAs.facet.b30) [concrete = constants.%Cpp.long.as.OrderedWith.impl.Less.819a43.1] -// CHECK:STDOUT: %Less.ref.loc20: %Cpp.long.as.OrderedWith.impl.Less.type.544cda.1 = name_ref Less, %.loc20_5.2 [concrete = constants.%Cpp.long.as.OrderedWith.impl.Less.819a43.1] +// CHECK:STDOUT: %.loc20_5.3: %Cpp.long.as.OrderedWith.impl.Less.type.544cda.1 = specific_constant imports.%Core.Less.a91, @Cpp.long.as.OrderedWith.impl.3fc(constants.%ImplicitAs.facet.b30) [concrete = constants.%Cpp.long.as.OrderedWith.impl.Less.819a43.1] +// CHECK:STDOUT: %Less.ref.loc20: %Cpp.long.as.OrderedWith.impl.Less.type.544cda.1 = name_ref Less, %.loc20_5.3 [concrete = constants.%Cpp.long.as.OrderedWith.impl.Less.819a43.1] // CHECK:STDOUT: %Cpp.long.as.OrderedWith.impl.Less.bound.loc20: = bound_method %a.ref.loc20, %Less.ref.loc20 // CHECK:STDOUT: %Cpp.long.as.OrderedWith.impl.Less.specific_fn.loc20: = specific_function %Less.ref.loc20, @Cpp.long.as.OrderedWith.impl.Less.2(constants.%ImplicitAs.facet.b30) [concrete = constants.%Cpp.long.as.OrderedWith.impl.Less.specific_fn.f8760d.2] // CHECK:STDOUT: %bound_method.loc20_5.3: = bound_method %a.ref.loc20, %Cpp.long.as.OrderedWith.impl.Less.specific_fn.loc20 @@ -1954,12 +1998,14 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %int_1.loc21: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %impl.elem3.loc21: %.3eb = impl_witness_access constants.%OrderedWith.impl_witness.f04, element3 [concrete = constants.%Cpp.long.as.OrderedWith.impl.GreaterOrEquivalent.76c962.2] // CHECK:STDOUT: %bound_method.loc21_5.1: = bound_method %a.ref.loc21, %impl.elem3.loc21 -// CHECK:STDOUT: %ImplicitAs.facet.loc21: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.e27) [concrete = constants.%ImplicitAs.facet.b30] -// CHECK:STDOUT: %.loc21_5.1: %ImplicitAs.type.7eb = converted Core.IntLiteral, %ImplicitAs.facet.loc21 [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %ImplicitAs.facet.loc21_5.1: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.e27) [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %.loc21_5.1: %ImplicitAs.type.7eb = converted Core.IntLiteral, %ImplicitAs.facet.loc21_5.1 [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %ImplicitAs.facet.loc21_5.2: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.e27) [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %.loc21_5.2: %ImplicitAs.type.7eb = converted Core.IntLiteral, %ImplicitAs.facet.loc21_5.2 [concrete = constants.%ImplicitAs.facet.b30] // CHECK:STDOUT: %specific_fn.loc21: = specific_function %impl.elem3.loc21, @Cpp.long.as.OrderedWith.impl.GreaterOrEquivalent.1(constants.%ImplicitAs.facet.b30) [concrete = constants.%Cpp.long.as.OrderedWith.impl.GreaterOrEquivalent.specific_fn.ee8dd4.1] // CHECK:STDOUT: %bound_method.loc21_5.2: = bound_method %a.ref.loc21, %specific_fn.loc21 -// CHECK:STDOUT: %.loc21_5.2: %Cpp.long.as.OrderedWith.impl.GreaterOrEquivalent.type.f7405b.1 = specific_constant imports.%Core.GreaterOrEquivalent.839, @Cpp.long.as.OrderedWith.impl.3fc(constants.%ImplicitAs.facet.b30) [concrete = constants.%Cpp.long.as.OrderedWith.impl.GreaterOrEquivalent.76c962.1] -// CHECK:STDOUT: %GreaterOrEquivalent.ref.loc21: %Cpp.long.as.OrderedWith.impl.GreaterOrEquivalent.type.f7405b.1 = name_ref GreaterOrEquivalent, %.loc21_5.2 [concrete = constants.%Cpp.long.as.OrderedWith.impl.GreaterOrEquivalent.76c962.1] +// CHECK:STDOUT: %.loc21_5.3: %Cpp.long.as.OrderedWith.impl.GreaterOrEquivalent.type.f7405b.1 = specific_constant imports.%Core.GreaterOrEquivalent.839, @Cpp.long.as.OrderedWith.impl.3fc(constants.%ImplicitAs.facet.b30) [concrete = constants.%Cpp.long.as.OrderedWith.impl.GreaterOrEquivalent.76c962.1] +// CHECK:STDOUT: %GreaterOrEquivalent.ref.loc21: %Cpp.long.as.OrderedWith.impl.GreaterOrEquivalent.type.f7405b.1 = name_ref GreaterOrEquivalent, %.loc21_5.3 [concrete = constants.%Cpp.long.as.OrderedWith.impl.GreaterOrEquivalent.76c962.1] // CHECK:STDOUT: %Cpp.long.as.OrderedWith.impl.GreaterOrEquivalent.bound.loc21: = bound_method %a.ref.loc21, %GreaterOrEquivalent.ref.loc21 // CHECK:STDOUT: %Cpp.long.as.OrderedWith.impl.GreaterOrEquivalent.specific_fn.loc21: = specific_function %GreaterOrEquivalent.ref.loc21, @Cpp.long.as.OrderedWith.impl.GreaterOrEquivalent.2(constants.%ImplicitAs.facet.b30) [concrete = constants.%Cpp.long.as.OrderedWith.impl.GreaterOrEquivalent.specific_fn.ee8dd4.2] // CHECK:STDOUT: %bound_method.loc21_5.3: = bound_method %a.ref.loc21, %Cpp.long.as.OrderedWith.impl.GreaterOrEquivalent.specific_fn.loc21 @@ -1973,12 +2019,14 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %int_1.loc22: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %impl.elem1.loc22: %.e14 = impl_witness_access constants.%OrderedWith.impl_witness.f04, element1 [concrete = constants.%Cpp.long.as.OrderedWith.impl.LessOrEquivalent.3e29ec.2] // CHECK:STDOUT: %bound_method.loc22_5.1: = bound_method %a.ref.loc22, %impl.elem1.loc22 -// CHECK:STDOUT: %ImplicitAs.facet.loc22: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.e27) [concrete = constants.%ImplicitAs.facet.b30] -// CHECK:STDOUT: %.loc22_5.1: %ImplicitAs.type.7eb = converted Core.IntLiteral, %ImplicitAs.facet.loc22 [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %ImplicitAs.facet.loc22_5.1: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.e27) [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %.loc22_5.1: %ImplicitAs.type.7eb = converted Core.IntLiteral, %ImplicitAs.facet.loc22_5.1 [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %ImplicitAs.facet.loc22_5.2: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.e27) [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %.loc22_5.2: %ImplicitAs.type.7eb = converted Core.IntLiteral, %ImplicitAs.facet.loc22_5.2 [concrete = constants.%ImplicitAs.facet.b30] // CHECK:STDOUT: %specific_fn.loc22: = specific_function %impl.elem1.loc22, @Cpp.long.as.OrderedWith.impl.LessOrEquivalent.1(constants.%ImplicitAs.facet.b30) [concrete = constants.%Cpp.long.as.OrderedWith.impl.LessOrEquivalent.specific_fn.42a4b8.1] // CHECK:STDOUT: %bound_method.loc22_5.2: = bound_method %a.ref.loc22, %specific_fn.loc22 -// CHECK:STDOUT: %.loc22_5.2: %Cpp.long.as.OrderedWith.impl.LessOrEquivalent.type.03c549.1 = specific_constant imports.%Core.LessOrEquivalent.a62, @Cpp.long.as.OrderedWith.impl.3fc(constants.%ImplicitAs.facet.b30) [concrete = constants.%Cpp.long.as.OrderedWith.impl.LessOrEquivalent.3e29ec.1] -// CHECK:STDOUT: %LessOrEquivalent.ref.loc22: %Cpp.long.as.OrderedWith.impl.LessOrEquivalent.type.03c549.1 = name_ref LessOrEquivalent, %.loc22_5.2 [concrete = constants.%Cpp.long.as.OrderedWith.impl.LessOrEquivalent.3e29ec.1] +// CHECK:STDOUT: %.loc22_5.3: %Cpp.long.as.OrderedWith.impl.LessOrEquivalent.type.03c549.1 = specific_constant imports.%Core.LessOrEquivalent.a62, @Cpp.long.as.OrderedWith.impl.3fc(constants.%ImplicitAs.facet.b30) [concrete = constants.%Cpp.long.as.OrderedWith.impl.LessOrEquivalent.3e29ec.1] +// CHECK:STDOUT: %LessOrEquivalent.ref.loc22: %Cpp.long.as.OrderedWith.impl.LessOrEquivalent.type.03c549.1 = name_ref LessOrEquivalent, %.loc22_5.3 [concrete = constants.%Cpp.long.as.OrderedWith.impl.LessOrEquivalent.3e29ec.1] // CHECK:STDOUT: %Cpp.long.as.OrderedWith.impl.LessOrEquivalent.bound.loc22: = bound_method %a.ref.loc22, %LessOrEquivalent.ref.loc22 // CHECK:STDOUT: %Cpp.long.as.OrderedWith.impl.LessOrEquivalent.specific_fn.loc22: = specific_function %LessOrEquivalent.ref.loc22, @Cpp.long.as.OrderedWith.impl.LessOrEquivalent.2(constants.%ImplicitAs.facet.b30) [concrete = constants.%Cpp.long.as.OrderedWith.impl.LessOrEquivalent.specific_fn.42a4b8.2] // CHECK:STDOUT: %bound_method.loc22_5.3: = bound_method %a.ref.loc22, %Cpp.long.as.OrderedWith.impl.LessOrEquivalent.specific_fn.loc22 @@ -1999,6 +2047,7 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %Cpp.long: type = class_type @Long32 [concrete] // CHECK:STDOUT: %pattern_type.25e: type = pattern_type %Cpp.long [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.25e = value_binding_pattern a [concrete] // CHECK:STDOUT: %ImplicitAs.type.7eb: type = facet_type <@ImplicitAs, @ImplicitAs(%Cpp.long)> [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.e27: = impl_witness imports.%ImplicitAs.impl_witness_table.635 [concrete] // CHECK:STDOUT: %ImplicitAs.facet.b30: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.e27) [concrete] @@ -2188,8 +2237,8 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %Core.import_ref.0c1: @T.as_type.as.OrderedWith.impl.821.%T.as_type.as.OrderedWith.impl.Less.type.2 (%T.as_type.as.OrderedWith.impl.Less.type.62945a.1) = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.OrderedWith.impl.821.%T.as_type.as.OrderedWith.impl.Less.2 (constants.%T.as_type.as.OrderedWith.impl.Less.2ef721.1)] // CHECK:STDOUT: %Core.import_ref.f03: @T.as_type.as.OrderedWith.impl.821.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.type.2 (%T.as_type.as.OrderedWith.impl.LessOrEquivalent.type.accc59.1) = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.OrderedWith.impl.821.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.2 (constants.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.e8206a.1)] // CHECK:STDOUT: %Core.import_ref.dc8: @T.as_type.as.OrderedWith.impl.821.%T.as_type.as.OrderedWith.impl.Greater.type.2 (%T.as_type.as.OrderedWith.impl.Greater.type.4af657.1) = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.OrderedWith.impl.821.%T.as_type.as.OrderedWith.impl.Greater.2 (constants.%T.as_type.as.OrderedWith.impl.Greater.00ebff.1)] -// CHECK:STDOUT: %Core.import_ref.fbe: @T.as_type.as.OrderedWith.impl.821.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.type.2 (%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.type.2225a2.1) = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.OrderedWith.impl.821.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.2 (constants.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.56ba82.1)] -// CHECK:STDOUT: %OrderedWith.impl_witness_table.969 = impl_witness_table (%Core.import_ref.0c1, %Core.import_ref.f03, %Core.import_ref.dc8, %Core.import_ref.fbe), @T.as_type.as.OrderedWith.impl.821 [concrete] +// CHECK:STDOUT: %Core.import_ref.fbeb: @T.as_type.as.OrderedWith.impl.821.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.type.2 (%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.type.2225a2.1) = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.OrderedWith.impl.821.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.2 (constants.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.56ba82.1)] +// CHECK:STDOUT: %OrderedWith.impl_witness_table.969 = impl_witness_table (%Core.import_ref.0c1, %Core.import_ref.f03, %Core.import_ref.dc8, %Core.import_ref.fbeb), @T.as_type.as.OrderedWith.impl.821 [concrete] // CHECK:STDOUT: %Core.GreaterOrEquivalent.e06: @T.as_type.as.OrderedWith.impl.821.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.type.1 (%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.type.2225a2.2) = import_ref Core//prelude/types/cpp/int, GreaterOrEquivalent, loaded [symbolic = @T.as_type.as.OrderedWith.impl.821.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.1 (constants.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.56ba82.2)] // CHECK:STDOUT: %Core.Greater.0b3: @T.as_type.as.OrderedWith.impl.821.%T.as_type.as.OrderedWith.impl.Greater.type.1 (%T.as_type.as.OrderedWith.impl.Greater.type.4af657.2) = import_ref Core//prelude/types/cpp/int, Greater, loaded [symbolic = @T.as_type.as.OrderedWith.impl.821.%T.as_type.as.OrderedWith.impl.Greater.1 (constants.%T.as_type.as.OrderedWith.impl.Greater.00ebff.2)] // CHECK:STDOUT: %Core.LessOrEquivalent.27e: @T.as_type.as.OrderedWith.impl.821.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.type.1 (%T.as_type.as.OrderedWith.impl.LessOrEquivalent.type.accc59.2) = import_ref Core//prelude/types/cpp/int, LessOrEquivalent, loaded [symbolic = @T.as_type.as.OrderedWith.impl.821.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.1 (constants.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.e8206a.2)] @@ -2200,29 +2249,31 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.25e = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.25e = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1.loc9: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] -// CHECK:STDOUT: %.loc9_13: type = splice_block %long.ref [concrete = constants.%Cpp.long] { -// CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %long.ref: type = name_ref long, constants.%Cpp.long [concrete = constants.%Cpp.long] -// CHECK:STDOUT: } // CHECK:STDOUT: %impl.elem0.loc9: %.b13 = impl_witness_access constants.%ImplicitAs.impl_witness.e27, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.3ce] // CHECK:STDOUT: %bound_method.loc9: = bound_method %int_1.loc9, %impl.elem0.loc9 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.5d7] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc9: init %Cpp.long = call %bound_method.loc9(%int_1.loc9) [concrete = constants.%int_1.9ce] // CHECK:STDOUT: %.loc9_21.1: %Cpp.long = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc9 [concrete = constants.%int_1.9ce] // CHECK:STDOUT: %.loc9_21.2: %Cpp.long = converted %int_1.loc9, %.loc9_21.1 [concrete = constants.%int_1.9ce] +// CHECK:STDOUT: %.loc9_13: type = splice_block %long.ref [concrete = constants.%Cpp.long] { +// CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %long.ref: type = name_ref long, constants.%Cpp.long [concrete = constants.%Cpp.long] +// CHECK:STDOUT: } // CHECK:STDOUT: %a: %Cpp.long = value_binding a, %.loc9_21.2 // CHECK:STDOUT: %b.ref.loc10: %i32 = name_ref b, %b // CHECK:STDOUT: %a.ref.loc10: %Cpp.long = name_ref a, %a // CHECK:STDOUT: %impl.elem0.loc10_5: %.a04 = impl_witness_access constants.%EqWith.impl_witness.95d, element0 [concrete = constants.%T.as_type.as.EqWith.impl.Equal.f0911b.2] // CHECK:STDOUT: %bound_method.loc10_5.1: = bound_method %b.ref.loc10, %impl.elem0.loc10_5 -// CHECK:STDOUT: %ImplicitAs.facet.loc10: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] -// CHECK:STDOUT: %.loc10_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc10 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc10_5.1: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc10_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc10_5.1 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc10_5.2: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc10_5.2: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc10_5.2 [concrete = constants.%ImplicitAs.facet.ce4] // CHECK:STDOUT: %specific_fn.loc10: = specific_function %impl.elem0.loc10_5, @T.as_type.as.EqWith.impl.Equal.1(constants.%ImplicitAs.facet.ce4) [concrete = constants.%T.as_type.as.EqWith.impl.Equal.specific_fn.873bd0.1] // CHECK:STDOUT: %bound_method.loc10_5.2: = bound_method %b.ref.loc10, %specific_fn.loc10 -// CHECK:STDOUT: %.loc10_5.2: %T.as_type.as.EqWith.impl.Equal.type.e779ca.1 = specific_constant imports.%Core.Equal.d4c, @T.as_type.as.EqWith.impl.673(constants.%ImplicitAs.facet.ce4) [concrete = constants.%T.as_type.as.EqWith.impl.Equal.f0911b.1] -// CHECK:STDOUT: %Equal.ref.loc10: %T.as_type.as.EqWith.impl.Equal.type.e779ca.1 = name_ref Equal, %.loc10_5.2 [concrete = constants.%T.as_type.as.EqWith.impl.Equal.f0911b.1] +// CHECK:STDOUT: %.loc10_5.3: %T.as_type.as.EqWith.impl.Equal.type.e779ca.1 = specific_constant imports.%Core.Equal.d4c, @T.as_type.as.EqWith.impl.673(constants.%ImplicitAs.facet.ce4) [concrete = constants.%T.as_type.as.EqWith.impl.Equal.f0911b.1] +// CHECK:STDOUT: %Equal.ref.loc10: %T.as_type.as.EqWith.impl.Equal.type.e779ca.1 = name_ref Equal, %.loc10_5.3 [concrete = constants.%T.as_type.as.EqWith.impl.Equal.f0911b.1] // CHECK:STDOUT: %T.as_type.as.EqWith.impl.Equal.bound.loc10: = bound_method %b.ref.loc10, %Equal.ref.loc10 // CHECK:STDOUT: %T.as_type.as.EqWith.impl.Equal.specific_fn.loc10: = specific_function %Equal.ref.loc10, @T.as_type.as.EqWith.impl.Equal.2(constants.%ImplicitAs.facet.ce4) [concrete = constants.%T.as_type.as.EqWith.impl.Equal.specific_fn.873bd0.2] // CHECK:STDOUT: %bound_method.loc10_5.3: = bound_method %b.ref.loc10, %T.as_type.as.EqWith.impl.Equal.specific_fn.loc10 @@ -2236,12 +2287,14 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %a.ref.loc11: %Cpp.long = name_ref a, %a // CHECK:STDOUT: %impl.elem1.loc11: %.4a6 = impl_witness_access constants.%EqWith.impl_witness.95d, element1 [concrete = constants.%T.as_type.as.EqWith.impl.NotEqual.3d3117.2] // CHECK:STDOUT: %bound_method.loc11_5.1: = bound_method %b.ref.loc11, %impl.elem1.loc11 -// CHECK:STDOUT: %ImplicitAs.facet.loc11: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] -// CHECK:STDOUT: %.loc11_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc11 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc11_5.1: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc11_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc11_5.1 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc11_5.2: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc11_5.2: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc11_5.2 [concrete = constants.%ImplicitAs.facet.ce4] // CHECK:STDOUT: %specific_fn.loc11: = specific_function %impl.elem1.loc11, @T.as_type.as.EqWith.impl.NotEqual.1(constants.%ImplicitAs.facet.ce4) [concrete = constants.%T.as_type.as.EqWith.impl.NotEqual.specific_fn.fae6fc.1] // CHECK:STDOUT: %bound_method.loc11_5.2: = bound_method %b.ref.loc11, %specific_fn.loc11 -// CHECK:STDOUT: %.loc11_5.2: %T.as_type.as.EqWith.impl.NotEqual.type.3aca6f.1 = specific_constant imports.%Core.NotEqual.d11, @T.as_type.as.EqWith.impl.673(constants.%ImplicitAs.facet.ce4) [concrete = constants.%T.as_type.as.EqWith.impl.NotEqual.3d3117.1] -// CHECK:STDOUT: %NotEqual.ref.loc11: %T.as_type.as.EqWith.impl.NotEqual.type.3aca6f.1 = name_ref NotEqual, %.loc11_5.2 [concrete = constants.%T.as_type.as.EqWith.impl.NotEqual.3d3117.1] +// CHECK:STDOUT: %.loc11_5.3: %T.as_type.as.EqWith.impl.NotEqual.type.3aca6f.1 = specific_constant imports.%Core.NotEqual.d11, @T.as_type.as.EqWith.impl.673(constants.%ImplicitAs.facet.ce4) [concrete = constants.%T.as_type.as.EqWith.impl.NotEqual.3d3117.1] +// CHECK:STDOUT: %NotEqual.ref.loc11: %T.as_type.as.EqWith.impl.NotEqual.type.3aca6f.1 = name_ref NotEqual, %.loc11_5.3 [concrete = constants.%T.as_type.as.EqWith.impl.NotEqual.3d3117.1] // CHECK:STDOUT: %T.as_type.as.EqWith.impl.NotEqual.bound.loc11: = bound_method %b.ref.loc11, %NotEqual.ref.loc11 // CHECK:STDOUT: %T.as_type.as.EqWith.impl.NotEqual.specific_fn.loc11: = specific_function %NotEqual.ref.loc11, @T.as_type.as.EqWith.impl.NotEqual.2(constants.%ImplicitAs.facet.ce4) [concrete = constants.%T.as_type.as.EqWith.impl.NotEqual.specific_fn.fae6fc.2] // CHECK:STDOUT: %bound_method.loc11_5.3: = bound_method %b.ref.loc11, %T.as_type.as.EqWith.impl.NotEqual.specific_fn.loc11 @@ -2255,12 +2308,14 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %a.ref.loc12: %Cpp.long = name_ref a, %a // CHECK:STDOUT: %impl.elem2.loc12: %.871 = impl_witness_access constants.%OrderedWith.impl_witness.029, element2 [concrete = constants.%T.as_type.as.OrderedWith.impl.Greater.dcaa48.2] // CHECK:STDOUT: %bound_method.loc12_5.1: = bound_method %b.ref.loc12, %impl.elem2.loc12 -// CHECK:STDOUT: %ImplicitAs.facet.loc12: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] -// CHECK:STDOUT: %.loc12_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc12 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc12_5.1: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc12_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc12_5.1 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc12_5.2: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc12_5.2: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc12_5.2 [concrete = constants.%ImplicitAs.facet.ce4] // CHECK:STDOUT: %specific_fn.loc12: = specific_function %impl.elem2.loc12, @T.as_type.as.OrderedWith.impl.Greater.1(constants.%ImplicitAs.facet.ce4) [concrete = constants.%T.as_type.as.OrderedWith.impl.Greater.specific_fn.052d08.1] // CHECK:STDOUT: %bound_method.loc12_5.2: = bound_method %b.ref.loc12, %specific_fn.loc12 -// CHECK:STDOUT: %.loc12_5.2: %T.as_type.as.OrderedWith.impl.Greater.type.5d146f.1 = specific_constant imports.%Core.Greater.0b3, @T.as_type.as.OrderedWith.impl.821(constants.%ImplicitAs.facet.ce4) [concrete = constants.%T.as_type.as.OrderedWith.impl.Greater.dcaa48.1] -// CHECK:STDOUT: %Greater.ref.loc12: %T.as_type.as.OrderedWith.impl.Greater.type.5d146f.1 = name_ref Greater, %.loc12_5.2 [concrete = constants.%T.as_type.as.OrderedWith.impl.Greater.dcaa48.1] +// CHECK:STDOUT: %.loc12_5.3: %T.as_type.as.OrderedWith.impl.Greater.type.5d146f.1 = specific_constant imports.%Core.Greater.0b3, @T.as_type.as.OrderedWith.impl.821(constants.%ImplicitAs.facet.ce4) [concrete = constants.%T.as_type.as.OrderedWith.impl.Greater.dcaa48.1] +// CHECK:STDOUT: %Greater.ref.loc12: %T.as_type.as.OrderedWith.impl.Greater.type.5d146f.1 = name_ref Greater, %.loc12_5.3 [concrete = constants.%T.as_type.as.OrderedWith.impl.Greater.dcaa48.1] // CHECK:STDOUT: %T.as_type.as.OrderedWith.impl.Greater.bound.loc12: = bound_method %b.ref.loc12, %Greater.ref.loc12 // CHECK:STDOUT: %T.as_type.as.OrderedWith.impl.Greater.specific_fn.loc12: = specific_function %Greater.ref.loc12, @T.as_type.as.OrderedWith.impl.Greater.2(constants.%ImplicitAs.facet.ce4) [concrete = constants.%T.as_type.as.OrderedWith.impl.Greater.specific_fn.052d08.2] // CHECK:STDOUT: %bound_method.loc12_5.3: = bound_method %b.ref.loc12, %T.as_type.as.OrderedWith.impl.Greater.specific_fn.loc12 @@ -2274,12 +2329,14 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %a.ref.loc13: %Cpp.long = name_ref a, %a // CHECK:STDOUT: %impl.elem0.loc13_5: %.68c = impl_witness_access constants.%OrderedWith.impl_witness.029, element0 [concrete = constants.%T.as_type.as.OrderedWith.impl.Less.3e6ac0.2] // CHECK:STDOUT: %bound_method.loc13_5.1: = bound_method %b.ref.loc13, %impl.elem0.loc13_5 -// CHECK:STDOUT: %ImplicitAs.facet.loc13: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] -// CHECK:STDOUT: %.loc13_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc13 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc13_5.1: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc13_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc13_5.1 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc13_5.2: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc13_5.2: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc13_5.2 [concrete = constants.%ImplicitAs.facet.ce4] // CHECK:STDOUT: %specific_fn.loc13: = specific_function %impl.elem0.loc13_5, @T.as_type.as.OrderedWith.impl.Less.1(constants.%ImplicitAs.facet.ce4) [concrete = constants.%T.as_type.as.OrderedWith.impl.Less.specific_fn.d4058b.1] // CHECK:STDOUT: %bound_method.loc13_5.2: = bound_method %b.ref.loc13, %specific_fn.loc13 -// CHECK:STDOUT: %.loc13_5.2: %T.as_type.as.OrderedWith.impl.Less.type.e5a0d6.1 = specific_constant imports.%Core.Less.2f9, @T.as_type.as.OrderedWith.impl.821(constants.%ImplicitAs.facet.ce4) [concrete = constants.%T.as_type.as.OrderedWith.impl.Less.3e6ac0.1] -// CHECK:STDOUT: %Less.ref.loc13: %T.as_type.as.OrderedWith.impl.Less.type.e5a0d6.1 = name_ref Less, %.loc13_5.2 [concrete = constants.%T.as_type.as.OrderedWith.impl.Less.3e6ac0.1] +// CHECK:STDOUT: %.loc13_5.3: %T.as_type.as.OrderedWith.impl.Less.type.e5a0d6.1 = specific_constant imports.%Core.Less.2f9, @T.as_type.as.OrderedWith.impl.821(constants.%ImplicitAs.facet.ce4) [concrete = constants.%T.as_type.as.OrderedWith.impl.Less.3e6ac0.1] +// CHECK:STDOUT: %Less.ref.loc13: %T.as_type.as.OrderedWith.impl.Less.type.e5a0d6.1 = name_ref Less, %.loc13_5.3 [concrete = constants.%T.as_type.as.OrderedWith.impl.Less.3e6ac0.1] // CHECK:STDOUT: %T.as_type.as.OrderedWith.impl.Less.bound.loc13: = bound_method %b.ref.loc13, %Less.ref.loc13 // CHECK:STDOUT: %T.as_type.as.OrderedWith.impl.Less.specific_fn.loc13: = specific_function %Less.ref.loc13, @T.as_type.as.OrderedWith.impl.Less.2(constants.%ImplicitAs.facet.ce4) [concrete = constants.%T.as_type.as.OrderedWith.impl.Less.specific_fn.d4058b.2] // CHECK:STDOUT: %bound_method.loc13_5.3: = bound_method %b.ref.loc13, %T.as_type.as.OrderedWith.impl.Less.specific_fn.loc13 @@ -2293,12 +2350,14 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %a.ref.loc14: %Cpp.long = name_ref a, %a // CHECK:STDOUT: %impl.elem3.loc14: %.7c0 = impl_witness_access constants.%OrderedWith.impl_witness.029, element3 [concrete = constants.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.e6f558.2] // CHECK:STDOUT: %bound_method.loc14_5.1: = bound_method %b.ref.loc14, %impl.elem3.loc14 -// CHECK:STDOUT: %ImplicitAs.facet.loc14: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] -// CHECK:STDOUT: %.loc14_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc14 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc14_5.1: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc14_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc14_5.1 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc14_5.2: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc14_5.2: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc14_5.2 [concrete = constants.%ImplicitAs.facet.ce4] // CHECK:STDOUT: %specific_fn.loc14: = specific_function %impl.elem3.loc14, @T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.1(constants.%ImplicitAs.facet.ce4) [concrete = constants.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.specific_fn.a37dff.1] // CHECK:STDOUT: %bound_method.loc14_5.2: = bound_method %b.ref.loc14, %specific_fn.loc14 -// CHECK:STDOUT: %.loc14_5.2: %T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.type.e46d69.1 = specific_constant imports.%Core.GreaterOrEquivalent.e06, @T.as_type.as.OrderedWith.impl.821(constants.%ImplicitAs.facet.ce4) [concrete = constants.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.e6f558.1] -// CHECK:STDOUT: %GreaterOrEquivalent.ref.loc14: %T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.type.e46d69.1 = name_ref GreaterOrEquivalent, %.loc14_5.2 [concrete = constants.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.e6f558.1] +// CHECK:STDOUT: %.loc14_5.3: %T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.type.e46d69.1 = specific_constant imports.%Core.GreaterOrEquivalent.e06, @T.as_type.as.OrderedWith.impl.821(constants.%ImplicitAs.facet.ce4) [concrete = constants.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.e6f558.1] +// CHECK:STDOUT: %GreaterOrEquivalent.ref.loc14: %T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.type.e46d69.1 = name_ref GreaterOrEquivalent, %.loc14_5.3 [concrete = constants.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.e6f558.1] // CHECK:STDOUT: %T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.bound.loc14: = bound_method %b.ref.loc14, %GreaterOrEquivalent.ref.loc14 // CHECK:STDOUT: %T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.specific_fn.loc14: = specific_function %GreaterOrEquivalent.ref.loc14, @T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.2(constants.%ImplicitAs.facet.ce4) [concrete = constants.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.specific_fn.a37dff.2] // CHECK:STDOUT: %bound_method.loc14_5.3: = bound_method %b.ref.loc14, %T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.specific_fn.loc14 @@ -2312,12 +2371,14 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %a.ref.loc15: %Cpp.long = name_ref a, %a // CHECK:STDOUT: %impl.elem1.loc15: %.a3d = impl_witness_access constants.%OrderedWith.impl_witness.029, element1 [concrete = constants.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.b51928.2] // CHECK:STDOUT: %bound_method.loc15_5.1: = bound_method %b.ref.loc15, %impl.elem1.loc15 -// CHECK:STDOUT: %ImplicitAs.facet.loc15: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] -// CHECK:STDOUT: %.loc15_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc15 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc15_5.1: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc15_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc15_5.1 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc15_5.2: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc15_5.2: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc15_5.2 [concrete = constants.%ImplicitAs.facet.ce4] // CHECK:STDOUT: %specific_fn.loc15: = specific_function %impl.elem1.loc15, @T.as_type.as.OrderedWith.impl.LessOrEquivalent.1(constants.%ImplicitAs.facet.ce4) [concrete = constants.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.specific_fn.ad853c.1] // CHECK:STDOUT: %bound_method.loc15_5.2: = bound_method %b.ref.loc15, %specific_fn.loc15 -// CHECK:STDOUT: %.loc15_5.2: %T.as_type.as.OrderedWith.impl.LessOrEquivalent.type.be0eb0.1 = specific_constant imports.%Core.LessOrEquivalent.27e, @T.as_type.as.OrderedWith.impl.821(constants.%ImplicitAs.facet.ce4) [concrete = constants.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.b51928.1] -// CHECK:STDOUT: %LessOrEquivalent.ref.loc15: %T.as_type.as.OrderedWith.impl.LessOrEquivalent.type.be0eb0.1 = name_ref LessOrEquivalent, %.loc15_5.2 [concrete = constants.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.b51928.1] +// CHECK:STDOUT: %.loc15_5.3: %T.as_type.as.OrderedWith.impl.LessOrEquivalent.type.be0eb0.1 = specific_constant imports.%Core.LessOrEquivalent.27e, @T.as_type.as.OrderedWith.impl.821(constants.%ImplicitAs.facet.ce4) [concrete = constants.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.b51928.1] +// CHECK:STDOUT: %LessOrEquivalent.ref.loc15: %T.as_type.as.OrderedWith.impl.LessOrEquivalent.type.be0eb0.1 = name_ref LessOrEquivalent, %.loc15_5.3 [concrete = constants.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.b51928.1] // CHECK:STDOUT: %T.as_type.as.OrderedWith.impl.LessOrEquivalent.bound.loc15: = bound_method %b.ref.loc15, %LessOrEquivalent.ref.loc15 // CHECK:STDOUT: %T.as_type.as.OrderedWith.impl.LessOrEquivalent.specific_fn.loc15: = specific_function %LessOrEquivalent.ref.loc15, @T.as_type.as.OrderedWith.impl.LessOrEquivalent.2(constants.%ImplicitAs.facet.ce4) [concrete = constants.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.specific_fn.ad853c.2] // CHECK:STDOUT: %bound_method.loc15_5.3: = bound_method %b.ref.loc15, %T.as_type.as.OrderedWith.impl.LessOrEquivalent.specific_fn.loc15 @@ -2331,12 +2392,14 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %a.ref.loc17: %Cpp.long = name_ref a, %a // CHECK:STDOUT: %impl.elem0.loc17_5: %.651 = impl_witness_access constants.%EqWith.impl_witness.772, element0 [concrete = constants.%T.as_type.as.EqWith.impl.Equal.4e32c9.2] // CHECK:STDOUT: %bound_method.loc17_5.1: = bound_method %int_1.loc17, %impl.elem0.loc17_5 [concrete = constants.%T.as_type.as.EqWith.impl.Equal.bound.1038cb.1] -// CHECK:STDOUT: %ImplicitAs.facet.loc17: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.e27) [concrete = constants.%ImplicitAs.facet.b30] -// CHECK:STDOUT: %.loc17_5.1: %ImplicitAs.type.7eb = converted Core.IntLiteral, %ImplicitAs.facet.loc17 [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %ImplicitAs.facet.loc17_5.1: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.e27) [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %.loc17_5.1: %ImplicitAs.type.7eb = converted Core.IntLiteral, %ImplicitAs.facet.loc17_5.1 [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %ImplicitAs.facet.loc17_5.2: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.e27) [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %.loc17_5.2: %ImplicitAs.type.7eb = converted Core.IntLiteral, %ImplicitAs.facet.loc17_5.2 [concrete = constants.%ImplicitAs.facet.b30] // CHECK:STDOUT: %specific_fn.loc17: = specific_function %impl.elem0.loc17_5, @T.as_type.as.EqWith.impl.Equal.1(constants.%ImplicitAs.facet.b30) [concrete = constants.%T.as_type.as.EqWith.impl.Equal.specific_fn.2002e1.1] // CHECK:STDOUT: %bound_method.loc17_5.2: = bound_method %int_1.loc17, %specific_fn.loc17 [concrete = constants.%bound_method.5ea17a.1] -// CHECK:STDOUT: %.loc17_5.2: %T.as_type.as.EqWith.impl.Equal.type.f5ab79.1 = specific_constant imports.%Core.Equal.d4c, @T.as_type.as.EqWith.impl.673(constants.%ImplicitAs.facet.b30) [concrete = constants.%T.as_type.as.EqWith.impl.Equal.4e32c9.1] -// CHECK:STDOUT: %Equal.ref.loc17: %T.as_type.as.EqWith.impl.Equal.type.f5ab79.1 = name_ref Equal, %.loc17_5.2 [concrete = constants.%T.as_type.as.EqWith.impl.Equal.4e32c9.1] +// CHECK:STDOUT: %.loc17_5.3: %T.as_type.as.EqWith.impl.Equal.type.f5ab79.1 = specific_constant imports.%Core.Equal.d4c, @T.as_type.as.EqWith.impl.673(constants.%ImplicitAs.facet.b30) [concrete = constants.%T.as_type.as.EqWith.impl.Equal.4e32c9.1] +// CHECK:STDOUT: %Equal.ref.loc17: %T.as_type.as.EqWith.impl.Equal.type.f5ab79.1 = name_ref Equal, %.loc17_5.3 [concrete = constants.%T.as_type.as.EqWith.impl.Equal.4e32c9.1] // CHECK:STDOUT: %T.as_type.as.EqWith.impl.Equal.bound.loc17: = bound_method %int_1.loc17, %Equal.ref.loc17 [concrete = constants.%T.as_type.as.EqWith.impl.Equal.bound.1038cb.2] // CHECK:STDOUT: %T.as_type.as.EqWith.impl.Equal.specific_fn.loc17: = specific_function %Equal.ref.loc17, @T.as_type.as.EqWith.impl.Equal.2(constants.%ImplicitAs.facet.b30) [concrete = constants.%T.as_type.as.EqWith.impl.Equal.specific_fn.2002e1.2] // CHECK:STDOUT: %bound_method.loc17_5.3: = bound_method %int_1.loc17, %T.as_type.as.EqWith.impl.Equal.specific_fn.loc17 [concrete = constants.%bound_method.5ea17a.2] @@ -2350,12 +2413,14 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %a.ref.loc18: %Cpp.long = name_ref a, %a // CHECK:STDOUT: %impl.elem1.loc18: %.830 = impl_witness_access constants.%EqWith.impl_witness.772, element1 [concrete = constants.%T.as_type.as.EqWith.impl.NotEqual.7e38ae.2] // CHECK:STDOUT: %bound_method.loc18_5.1: = bound_method %int_1.loc18, %impl.elem1.loc18 [concrete = constants.%T.as_type.as.EqWith.impl.NotEqual.bound.750155.1] -// CHECK:STDOUT: %ImplicitAs.facet.loc18: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.e27) [concrete = constants.%ImplicitAs.facet.b30] -// CHECK:STDOUT: %.loc18_5.1: %ImplicitAs.type.7eb = converted Core.IntLiteral, %ImplicitAs.facet.loc18 [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %ImplicitAs.facet.loc18_5.1: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.e27) [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %.loc18_5.1: %ImplicitAs.type.7eb = converted Core.IntLiteral, %ImplicitAs.facet.loc18_5.1 [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %ImplicitAs.facet.loc18_5.2: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.e27) [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %.loc18_5.2: %ImplicitAs.type.7eb = converted Core.IntLiteral, %ImplicitAs.facet.loc18_5.2 [concrete = constants.%ImplicitAs.facet.b30] // CHECK:STDOUT: %specific_fn.loc18: = specific_function %impl.elem1.loc18, @T.as_type.as.EqWith.impl.NotEqual.1(constants.%ImplicitAs.facet.b30) [concrete = constants.%T.as_type.as.EqWith.impl.NotEqual.specific_fn.cb3ce7.1] // CHECK:STDOUT: %bound_method.loc18_5.2: = bound_method %int_1.loc18, %specific_fn.loc18 [concrete = constants.%bound_method.c6610c.1] -// CHECK:STDOUT: %.loc18_5.2: %T.as_type.as.EqWith.impl.NotEqual.type.f0c8ea.1 = specific_constant imports.%Core.NotEqual.d11, @T.as_type.as.EqWith.impl.673(constants.%ImplicitAs.facet.b30) [concrete = constants.%T.as_type.as.EqWith.impl.NotEqual.7e38ae.1] -// CHECK:STDOUT: %NotEqual.ref.loc18: %T.as_type.as.EqWith.impl.NotEqual.type.f0c8ea.1 = name_ref NotEqual, %.loc18_5.2 [concrete = constants.%T.as_type.as.EqWith.impl.NotEqual.7e38ae.1] +// CHECK:STDOUT: %.loc18_5.3: %T.as_type.as.EqWith.impl.NotEqual.type.f0c8ea.1 = specific_constant imports.%Core.NotEqual.d11, @T.as_type.as.EqWith.impl.673(constants.%ImplicitAs.facet.b30) [concrete = constants.%T.as_type.as.EqWith.impl.NotEqual.7e38ae.1] +// CHECK:STDOUT: %NotEqual.ref.loc18: %T.as_type.as.EqWith.impl.NotEqual.type.f0c8ea.1 = name_ref NotEqual, %.loc18_5.3 [concrete = constants.%T.as_type.as.EqWith.impl.NotEqual.7e38ae.1] // CHECK:STDOUT: %T.as_type.as.EqWith.impl.NotEqual.bound.loc18: = bound_method %int_1.loc18, %NotEqual.ref.loc18 [concrete = constants.%T.as_type.as.EqWith.impl.NotEqual.bound.750155.2] // CHECK:STDOUT: %T.as_type.as.EqWith.impl.NotEqual.specific_fn.loc18: = specific_function %NotEqual.ref.loc18, @T.as_type.as.EqWith.impl.NotEqual.2(constants.%ImplicitAs.facet.b30) [concrete = constants.%T.as_type.as.EqWith.impl.NotEqual.specific_fn.cb3ce7.2] // CHECK:STDOUT: %bound_method.loc18_5.3: = bound_method %int_1.loc18, %T.as_type.as.EqWith.impl.NotEqual.specific_fn.loc18 [concrete = constants.%bound_method.c6610c.2] @@ -2369,12 +2434,14 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %a.ref.loc19: %Cpp.long = name_ref a, %a // CHECK:STDOUT: %impl.elem2.loc19: %.48e = impl_witness_access constants.%OrderedWith.impl_witness.8ce, element2 [concrete = constants.%T.as_type.as.OrderedWith.impl.Greater.3f6fcf.2] // CHECK:STDOUT: %bound_method.loc19_5.1: = bound_method %int_1.loc19, %impl.elem2.loc19 [concrete = constants.%T.as_type.as.OrderedWith.impl.Greater.bound.b05e6b.1] -// CHECK:STDOUT: %ImplicitAs.facet.loc19: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.e27) [concrete = constants.%ImplicitAs.facet.b30] -// CHECK:STDOUT: %.loc19_5.1: %ImplicitAs.type.7eb = converted Core.IntLiteral, %ImplicitAs.facet.loc19 [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %ImplicitAs.facet.loc19_5.1: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.e27) [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %.loc19_5.1: %ImplicitAs.type.7eb = converted Core.IntLiteral, %ImplicitAs.facet.loc19_5.1 [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %ImplicitAs.facet.loc19_5.2: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.e27) [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %.loc19_5.2: %ImplicitAs.type.7eb = converted Core.IntLiteral, %ImplicitAs.facet.loc19_5.2 [concrete = constants.%ImplicitAs.facet.b30] // CHECK:STDOUT: %specific_fn.loc19: = specific_function %impl.elem2.loc19, @T.as_type.as.OrderedWith.impl.Greater.1(constants.%ImplicitAs.facet.b30) [concrete = constants.%T.as_type.as.OrderedWith.impl.Greater.specific_fn.b46b59.1] // CHECK:STDOUT: %bound_method.loc19_5.2: = bound_method %int_1.loc19, %specific_fn.loc19 [concrete = constants.%bound_method.84b063.1] -// CHECK:STDOUT: %.loc19_5.2: %T.as_type.as.OrderedWith.impl.Greater.type.dc545b.1 = specific_constant imports.%Core.Greater.0b3, @T.as_type.as.OrderedWith.impl.821(constants.%ImplicitAs.facet.b30) [concrete = constants.%T.as_type.as.OrderedWith.impl.Greater.3f6fcf.1] -// CHECK:STDOUT: %Greater.ref.loc19: %T.as_type.as.OrderedWith.impl.Greater.type.dc545b.1 = name_ref Greater, %.loc19_5.2 [concrete = constants.%T.as_type.as.OrderedWith.impl.Greater.3f6fcf.1] +// CHECK:STDOUT: %.loc19_5.3: %T.as_type.as.OrderedWith.impl.Greater.type.dc545b.1 = specific_constant imports.%Core.Greater.0b3, @T.as_type.as.OrderedWith.impl.821(constants.%ImplicitAs.facet.b30) [concrete = constants.%T.as_type.as.OrderedWith.impl.Greater.3f6fcf.1] +// CHECK:STDOUT: %Greater.ref.loc19: %T.as_type.as.OrderedWith.impl.Greater.type.dc545b.1 = name_ref Greater, %.loc19_5.3 [concrete = constants.%T.as_type.as.OrderedWith.impl.Greater.3f6fcf.1] // CHECK:STDOUT: %T.as_type.as.OrderedWith.impl.Greater.bound.loc19: = bound_method %int_1.loc19, %Greater.ref.loc19 [concrete = constants.%T.as_type.as.OrderedWith.impl.Greater.bound.b05e6b.2] // CHECK:STDOUT: %T.as_type.as.OrderedWith.impl.Greater.specific_fn.loc19: = specific_function %Greater.ref.loc19, @T.as_type.as.OrderedWith.impl.Greater.2(constants.%ImplicitAs.facet.b30) [concrete = constants.%T.as_type.as.OrderedWith.impl.Greater.specific_fn.b46b59.2] // CHECK:STDOUT: %bound_method.loc19_5.3: = bound_method %int_1.loc19, %T.as_type.as.OrderedWith.impl.Greater.specific_fn.loc19 [concrete = constants.%bound_method.84b063.2] @@ -2388,12 +2455,14 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %a.ref.loc20: %Cpp.long = name_ref a, %a // CHECK:STDOUT: %impl.elem0.loc20_5: %.138 = impl_witness_access constants.%OrderedWith.impl_witness.8ce, element0 [concrete = constants.%T.as_type.as.OrderedWith.impl.Less.0804e2.2] // CHECK:STDOUT: %bound_method.loc20_5.1: = bound_method %int_1.loc20, %impl.elem0.loc20_5 [concrete = constants.%T.as_type.as.OrderedWith.impl.Less.bound.c0d522.1] -// CHECK:STDOUT: %ImplicitAs.facet.loc20: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.e27) [concrete = constants.%ImplicitAs.facet.b30] -// CHECK:STDOUT: %.loc20_5.1: %ImplicitAs.type.7eb = converted Core.IntLiteral, %ImplicitAs.facet.loc20 [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %ImplicitAs.facet.loc20_5.1: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.e27) [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %.loc20_5.1: %ImplicitAs.type.7eb = converted Core.IntLiteral, %ImplicitAs.facet.loc20_5.1 [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %ImplicitAs.facet.loc20_5.2: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.e27) [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %.loc20_5.2: %ImplicitAs.type.7eb = converted Core.IntLiteral, %ImplicitAs.facet.loc20_5.2 [concrete = constants.%ImplicitAs.facet.b30] // CHECK:STDOUT: %specific_fn.loc20: = specific_function %impl.elem0.loc20_5, @T.as_type.as.OrderedWith.impl.Less.1(constants.%ImplicitAs.facet.b30) [concrete = constants.%T.as_type.as.OrderedWith.impl.Less.specific_fn.6ba13f.1] // CHECK:STDOUT: %bound_method.loc20_5.2: = bound_method %int_1.loc20, %specific_fn.loc20 [concrete = constants.%bound_method.a4c927.1] -// CHECK:STDOUT: %.loc20_5.2: %T.as_type.as.OrderedWith.impl.Less.type.ea162e.1 = specific_constant imports.%Core.Less.2f9, @T.as_type.as.OrderedWith.impl.821(constants.%ImplicitAs.facet.b30) [concrete = constants.%T.as_type.as.OrderedWith.impl.Less.0804e2.1] -// CHECK:STDOUT: %Less.ref.loc20: %T.as_type.as.OrderedWith.impl.Less.type.ea162e.1 = name_ref Less, %.loc20_5.2 [concrete = constants.%T.as_type.as.OrderedWith.impl.Less.0804e2.1] +// CHECK:STDOUT: %.loc20_5.3: %T.as_type.as.OrderedWith.impl.Less.type.ea162e.1 = specific_constant imports.%Core.Less.2f9, @T.as_type.as.OrderedWith.impl.821(constants.%ImplicitAs.facet.b30) [concrete = constants.%T.as_type.as.OrderedWith.impl.Less.0804e2.1] +// CHECK:STDOUT: %Less.ref.loc20: %T.as_type.as.OrderedWith.impl.Less.type.ea162e.1 = name_ref Less, %.loc20_5.3 [concrete = constants.%T.as_type.as.OrderedWith.impl.Less.0804e2.1] // CHECK:STDOUT: %T.as_type.as.OrderedWith.impl.Less.bound.loc20: = bound_method %int_1.loc20, %Less.ref.loc20 [concrete = constants.%T.as_type.as.OrderedWith.impl.Less.bound.c0d522.2] // CHECK:STDOUT: %T.as_type.as.OrderedWith.impl.Less.specific_fn.loc20: = specific_function %Less.ref.loc20, @T.as_type.as.OrderedWith.impl.Less.2(constants.%ImplicitAs.facet.b30) [concrete = constants.%T.as_type.as.OrderedWith.impl.Less.specific_fn.6ba13f.2] // CHECK:STDOUT: %bound_method.loc20_5.3: = bound_method %int_1.loc20, %T.as_type.as.OrderedWith.impl.Less.specific_fn.loc20 [concrete = constants.%bound_method.a4c927.2] @@ -2407,12 +2476,14 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %a.ref.loc21: %Cpp.long = name_ref a, %a // CHECK:STDOUT: %impl.elem3.loc21: %.5fe = impl_witness_access constants.%OrderedWith.impl_witness.8ce, element3 [concrete = constants.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.d37e1c.2] // CHECK:STDOUT: %bound_method.loc21_5.1: = bound_method %int_1.loc21, %impl.elem3.loc21 [concrete = constants.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.bound.af5bde.1] -// CHECK:STDOUT: %ImplicitAs.facet.loc21: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.e27) [concrete = constants.%ImplicitAs.facet.b30] -// CHECK:STDOUT: %.loc21_5.1: %ImplicitAs.type.7eb = converted Core.IntLiteral, %ImplicitAs.facet.loc21 [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %ImplicitAs.facet.loc21_5.1: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.e27) [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %.loc21_5.1: %ImplicitAs.type.7eb = converted Core.IntLiteral, %ImplicitAs.facet.loc21_5.1 [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %ImplicitAs.facet.loc21_5.2: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.e27) [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %.loc21_5.2: %ImplicitAs.type.7eb = converted Core.IntLiteral, %ImplicitAs.facet.loc21_5.2 [concrete = constants.%ImplicitAs.facet.b30] // CHECK:STDOUT: %specific_fn.loc21: = specific_function %impl.elem3.loc21, @T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.1(constants.%ImplicitAs.facet.b30) [concrete = constants.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.specific_fn.8d07ea.1] // CHECK:STDOUT: %bound_method.loc21_5.2: = bound_method %int_1.loc21, %specific_fn.loc21 [concrete = constants.%bound_method.d2ea71.1] -// CHECK:STDOUT: %.loc21_5.2: %T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.type.1ebc13.1 = specific_constant imports.%Core.GreaterOrEquivalent.e06, @T.as_type.as.OrderedWith.impl.821(constants.%ImplicitAs.facet.b30) [concrete = constants.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.d37e1c.1] -// CHECK:STDOUT: %GreaterOrEquivalent.ref.loc21: %T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.type.1ebc13.1 = name_ref GreaterOrEquivalent, %.loc21_5.2 [concrete = constants.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.d37e1c.1] +// CHECK:STDOUT: %.loc21_5.3: %T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.type.1ebc13.1 = specific_constant imports.%Core.GreaterOrEquivalent.e06, @T.as_type.as.OrderedWith.impl.821(constants.%ImplicitAs.facet.b30) [concrete = constants.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.d37e1c.1] +// CHECK:STDOUT: %GreaterOrEquivalent.ref.loc21: %T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.type.1ebc13.1 = name_ref GreaterOrEquivalent, %.loc21_5.3 [concrete = constants.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.d37e1c.1] // CHECK:STDOUT: %T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.bound.loc21: = bound_method %int_1.loc21, %GreaterOrEquivalent.ref.loc21 [concrete = constants.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.bound.af5bde.2] // CHECK:STDOUT: %T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.specific_fn.loc21: = specific_function %GreaterOrEquivalent.ref.loc21, @T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.2(constants.%ImplicitAs.facet.b30) [concrete = constants.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.specific_fn.8d07ea.2] // CHECK:STDOUT: %bound_method.loc21_5.3: = bound_method %int_1.loc21, %T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.specific_fn.loc21 [concrete = constants.%bound_method.d2ea71.2] @@ -2426,12 +2497,14 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %a.ref.loc22: %Cpp.long = name_ref a, %a // CHECK:STDOUT: %impl.elem1.loc22: %.9c3 = impl_witness_access constants.%OrderedWith.impl_witness.8ce, element1 [concrete = constants.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.6b9921.2] // CHECK:STDOUT: %bound_method.loc22_5.1: = bound_method %int_1.loc22, %impl.elem1.loc22 [concrete = constants.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.bound.1f479f.1] -// CHECK:STDOUT: %ImplicitAs.facet.loc22: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.e27) [concrete = constants.%ImplicitAs.facet.b30] -// CHECK:STDOUT: %.loc22_5.1: %ImplicitAs.type.7eb = converted Core.IntLiteral, %ImplicitAs.facet.loc22 [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %ImplicitAs.facet.loc22_5.1: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.e27) [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %.loc22_5.1: %ImplicitAs.type.7eb = converted Core.IntLiteral, %ImplicitAs.facet.loc22_5.1 [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %ImplicitAs.facet.loc22_5.2: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.e27) [concrete = constants.%ImplicitAs.facet.b30] +// CHECK:STDOUT: %.loc22_5.2: %ImplicitAs.type.7eb = converted Core.IntLiteral, %ImplicitAs.facet.loc22_5.2 [concrete = constants.%ImplicitAs.facet.b30] // CHECK:STDOUT: %specific_fn.loc22: = specific_function %impl.elem1.loc22, @T.as_type.as.OrderedWith.impl.LessOrEquivalent.1(constants.%ImplicitAs.facet.b30) [concrete = constants.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.specific_fn.9ed43e.1] // CHECK:STDOUT: %bound_method.loc22_5.2: = bound_method %int_1.loc22, %specific_fn.loc22 [concrete = constants.%bound_method.ce4a7e.1] -// CHECK:STDOUT: %.loc22_5.2: %T.as_type.as.OrderedWith.impl.LessOrEquivalent.type.b869b8.1 = specific_constant imports.%Core.LessOrEquivalent.27e, @T.as_type.as.OrderedWith.impl.821(constants.%ImplicitAs.facet.b30) [concrete = constants.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.6b9921.1] -// CHECK:STDOUT: %LessOrEquivalent.ref.loc22: %T.as_type.as.OrderedWith.impl.LessOrEquivalent.type.b869b8.1 = name_ref LessOrEquivalent, %.loc22_5.2 [concrete = constants.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.6b9921.1] +// CHECK:STDOUT: %.loc22_5.3: %T.as_type.as.OrderedWith.impl.LessOrEquivalent.type.b869b8.1 = specific_constant imports.%Core.LessOrEquivalent.27e, @T.as_type.as.OrderedWith.impl.821(constants.%ImplicitAs.facet.b30) [concrete = constants.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.6b9921.1] +// CHECK:STDOUT: %LessOrEquivalent.ref.loc22: %T.as_type.as.OrderedWith.impl.LessOrEquivalent.type.b869b8.1 = name_ref LessOrEquivalent, %.loc22_5.3 [concrete = constants.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.6b9921.1] // CHECK:STDOUT: %T.as_type.as.OrderedWith.impl.LessOrEquivalent.bound.loc22: = bound_method %int_1.loc22, %LessOrEquivalent.ref.loc22 [concrete = constants.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.bound.1f479f.2] // CHECK:STDOUT: %T.as_type.as.OrderedWith.impl.LessOrEquivalent.specific_fn.loc22: = specific_function %LessOrEquivalent.ref.loc22, @T.as_type.as.OrderedWith.impl.LessOrEquivalent.2(constants.%ImplicitAs.facet.b30) [concrete = constants.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.specific_fn.9ed43e.2] // CHECK:STDOUT: %bound_method.loc22_5.3: = bound_method %int_1.loc22, %T.as_type.as.OrderedWith.impl.LessOrEquivalent.specific_fn.loc22 [concrete = constants.%bound_method.ce4a7e.2] @@ -2449,6 +2522,7 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: constants { // CHECK:STDOUT: %Cpp.long: type = class_type @Long32 [concrete] // CHECK:STDOUT: %pattern_type.25e: type = pattern_type %Cpp.long [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.25e = value_binding_pattern x [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.7eb: type = facet_type <@ImplicitAs, @ImplicitAs(%Cpp.long)> [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.e27: = impl_witness imports.%ImplicitAs.impl_witness_table.635 [concrete] @@ -2459,6 +2533,8 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type = struct_value () [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert [concrete] // CHECK:STDOUT: %int_1.9ce: %Cpp.long = int_value 1 [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.25e = value_binding_pattern y [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.25e = value_binding_pattern a [concrete] // CHECK:STDOUT: %Negate.type: type = facet_type <@Negate> [concrete] // CHECK:STDOUT: %Negate.impl_witness: = impl_witness imports.%Negate.impl_witness_table [concrete] // CHECK:STDOUT: %Negate.facet: %Negate.type = facet_value %Cpp.long, (%Negate.impl_witness) [concrete] @@ -2466,6 +2542,7 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %.96f: type = fn_type_with_self_type %Negate.WithSelf.Op.type.361, %Negate.facet [concrete] // CHECK:STDOUT: %Cpp.long.as.Negate.impl.Op.type: type = fn_type @Cpp.long.as.Negate.impl.Op [concrete] // CHECK:STDOUT: %Cpp.long.as.Negate.impl.Op: %Cpp.long.as.Negate.impl.Op.type = struct_value () [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.25e = value_binding_pattern b [concrete] // CHECK:STDOUT: %AddWith.type.5d0: type = facet_type <@AddWith, @AddWith(%Cpp.long)> [concrete] // CHECK:STDOUT: %AddWith.impl_witness.7cd: = impl_witness imports.%AddWith.impl_witness_table.1a4 [concrete] // CHECK:STDOUT: %AddWith.facet.a52: %AddWith.type.5d0 = facet_value %Cpp.long, (%AddWith.impl_witness.7cd) [concrete] @@ -2473,6 +2550,7 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %.b1d: type = fn_type_with_self_type %AddWith.WithSelf.Op.type.9c7, %AddWith.facet.a52 [concrete] // CHECK:STDOUT: %Cpp.long.as.AddWith.impl.Op.type.43d: type = fn_type @Cpp.long.as.AddWith.impl.Op.3 [concrete] // CHECK:STDOUT: %Cpp.long.as.AddWith.impl.Op.cc7: %Cpp.long.as.AddWith.impl.Op.type.43d = struct_value () [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.25e = value_binding_pattern c [concrete] // CHECK:STDOUT: %SubWith.type.238: type = facet_type <@SubWith, @SubWith(%Cpp.long)> [concrete] // CHECK:STDOUT: %SubWith.impl_witness.cb8: = impl_witness imports.%SubWith.impl_witness_table.2b1 [concrete] // CHECK:STDOUT: %SubWith.facet.061: %SubWith.type.238 = facet_value %Cpp.long, (%SubWith.impl_witness.cb8) [concrete] @@ -2480,6 +2558,7 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %.19a: type = fn_type_with_self_type %SubWith.WithSelf.Op.type.6c7, %SubWith.facet.061 [concrete] // CHECK:STDOUT: %Cpp.long.as.SubWith.impl.Op.type.43d: type = fn_type @Cpp.long.as.SubWith.impl.Op.3 [concrete] // CHECK:STDOUT: %Cpp.long.as.SubWith.impl.Op.cc7: %Cpp.long.as.SubWith.impl.Op.type.43d = struct_value () [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.25e = value_binding_pattern d [concrete] // CHECK:STDOUT: %MulWith.type.567: type = facet_type <@MulWith, @MulWith(%Cpp.long)> [concrete] // CHECK:STDOUT: %MulWith.impl_witness.cca: = impl_witness imports.%MulWith.impl_witness_table.59d [concrete] // CHECK:STDOUT: %MulWith.facet.f1b: %MulWith.type.567 = facet_value %Cpp.long, (%MulWith.impl_witness.cca) [concrete] @@ -2487,6 +2566,7 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %.efd: type = fn_type_with_self_type %MulWith.WithSelf.Op.type.762, %MulWith.facet.f1b [concrete] // CHECK:STDOUT: %Cpp.long.as.MulWith.impl.Op.type.43d: type = fn_type @Cpp.long.as.MulWith.impl.Op.3 [concrete] // CHECK:STDOUT: %Cpp.long.as.MulWith.impl.Op.cc7: %Cpp.long.as.MulWith.impl.Op.type.43d = struct_value () [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type.25e = value_binding_pattern e [concrete] // CHECK:STDOUT: %DivWith.type.204: type = facet_type <@DivWith, @DivWith(%Cpp.long)> [concrete] // CHECK:STDOUT: %DivWith.impl_witness.454: = impl_witness imports.%DivWith.impl_witness_table.830 [concrete] // CHECK:STDOUT: %DivWith.facet.fc1: %DivWith.type.204 = facet_value %Cpp.long, (%DivWith.impl_witness.454) [concrete] @@ -2494,6 +2574,7 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %.002: type = fn_type_with_self_type %DivWith.WithSelf.Op.type.08f, %DivWith.facet.fc1 [concrete] // CHECK:STDOUT: %Cpp.long.as.DivWith.impl.Op.type.43d: type = fn_type @Cpp.long.as.DivWith.impl.Op.3 [concrete] // CHECK:STDOUT: %Cpp.long.as.DivWith.impl.Op.cc7: %Cpp.long.as.DivWith.impl.Op.type.43d = struct_value () [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type.25e = value_binding_pattern f [concrete] // CHECK:STDOUT: %ModWith.type.d81: type = facet_type <@ModWith, @ModWith(%Cpp.long)> [concrete] // CHECK:STDOUT: %ModWith.impl_witness.4d4: = impl_witness imports.%ModWith.impl_witness_table.316 [concrete] // CHECK:STDOUT: %ModWith.facet.91d: %ModWith.type.d81 = facet_value %Cpp.long, (%ModWith.impl_witness.4d4) [concrete] @@ -2533,121 +2614,121 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: fn @ArithmeticHomogeneousLong() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.25e = value_binding_pattern x [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.25e = value_binding_pattern x [concrete = constants.%x.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1.loc8: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] -// CHECK:STDOUT: %.loc8_13: type = splice_block %long.ref.loc8 [concrete = constants.%Cpp.long] { -// CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %long.ref.loc8: type = name_ref long, constants.%Cpp.long [concrete = constants.%Cpp.long] -// CHECK:STDOUT: } // CHECK:STDOUT: %impl.elem0.loc8: %.b13 = impl_witness_access constants.%ImplicitAs.impl_witness.e27, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert] // CHECK:STDOUT: %bound_method.loc8: = bound_method %int_1.loc8, %impl.elem0.loc8 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc8: init %Cpp.long = call %bound_method.loc8(%int_1.loc8) [concrete = constants.%int_1.9ce] // CHECK:STDOUT: %.loc8_21.1: %Cpp.long = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc8 [concrete = constants.%int_1.9ce] // CHECK:STDOUT: %.loc8_21.2: %Cpp.long = converted %int_1.loc8, %.loc8_21.1 [concrete = constants.%int_1.9ce] +// CHECK:STDOUT: %.loc8_13: type = splice_block %long.ref.loc8 [concrete = constants.%Cpp.long] { +// CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %long.ref.loc8: type = name_ref long, constants.%Cpp.long [concrete = constants.%Cpp.long] +// CHECK:STDOUT: } // CHECK:STDOUT: %x: %Cpp.long = value_binding x, %.loc8_21.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %pattern_type.25e = value_binding_pattern y [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.25e = value_binding_pattern y [concrete = constants.%y.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1.loc9: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] -// CHECK:STDOUT: %.loc9_13: type = splice_block %long.ref.loc9 [concrete = constants.%Cpp.long] { -// CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %long.ref.loc9: type = name_ref long, constants.%Cpp.long [concrete = constants.%Cpp.long] -// CHECK:STDOUT: } // CHECK:STDOUT: %impl.elem0.loc9: %.b13 = impl_witness_access constants.%ImplicitAs.impl_witness.e27, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert] // CHECK:STDOUT: %bound_method.loc9: = bound_method %int_1.loc9, %impl.elem0.loc9 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc9: init %Cpp.long = call %bound_method.loc9(%int_1.loc9) [concrete = constants.%int_1.9ce] // CHECK:STDOUT: %.loc9_21.1: %Cpp.long = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc9 [concrete = constants.%int_1.9ce] // CHECK:STDOUT: %.loc9_21.2: %Cpp.long = converted %int_1.loc9, %.loc9_21.1 [concrete = constants.%int_1.9ce] +// CHECK:STDOUT: %.loc9_13: type = splice_block %long.ref.loc9 [concrete = constants.%Cpp.long] { +// CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %long.ref.loc9: type = name_ref long, constants.%Cpp.long [concrete = constants.%Cpp.long] +// CHECK:STDOUT: } // CHECK:STDOUT: %y: %Cpp.long = value_binding y, %.loc9_21.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.25e = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.25e = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.ref.loc11: %Cpp.long = name_ref x, %x // CHECK:STDOUT: %impl.elem1.loc11: %.96f = impl_witness_access constants.%Negate.impl_witness, element1 [concrete = constants.%Cpp.long.as.Negate.impl.Op] // CHECK:STDOUT: %bound_method.loc11: = bound_method %x.ref.loc11, %impl.elem1.loc11 // CHECK:STDOUT: %Cpp.long.as.Negate.impl.Op.call: init %Cpp.long = call %bound_method.loc11(%x.ref.loc11) +// CHECK:STDOUT: %.loc11_28.1: %Cpp.long = value_of_initializer %Cpp.long.as.Negate.impl.Op.call +// CHECK:STDOUT: %.loc11_28.2: %Cpp.long = converted %Cpp.long.as.Negate.impl.Op.call, %.loc11_28.1 // CHECK:STDOUT: %.loc11_20: type = splice_block %long.ref.loc11 [concrete = constants.%Cpp.long] { // CHECK:STDOUT: %Cpp.ref.loc11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %long.ref.loc11: type = name_ref long, constants.%Cpp.long [concrete = constants.%Cpp.long] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc11_28.1: %Cpp.long = value_of_initializer %Cpp.long.as.Negate.impl.Op.call -// CHECK:STDOUT: %.loc11_28.2: %Cpp.long = converted %Cpp.long.as.Negate.impl.Op.call, %.loc11_28.1 // CHECK:STDOUT: %a: %Cpp.long = value_binding a, %.loc11_28.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.25e = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.25e = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.ref.loc12: %Cpp.long = name_ref x, %x // CHECK:STDOUT: %y.ref.loc12: %Cpp.long = name_ref y, %y // CHECK:STDOUT: %impl.elem1.loc12: %.b1d = impl_witness_access constants.%AddWith.impl_witness.7cd, element1 [concrete = constants.%Cpp.long.as.AddWith.impl.Op.cc7] // CHECK:STDOUT: %bound_method.loc12: = bound_method %x.ref.loc12, %impl.elem1.loc12 // CHECK:STDOUT: %Cpp.long.as.AddWith.impl.Op.call: init %Cpp.long = call %bound_method.loc12(%x.ref.loc12, %y.ref.loc12) +// CHECK:STDOUT: %.loc12_30.1: %Cpp.long = value_of_initializer %Cpp.long.as.AddWith.impl.Op.call +// CHECK:STDOUT: %.loc12_30.2: %Cpp.long = converted %Cpp.long.as.AddWith.impl.Op.call, %.loc12_30.1 // CHECK:STDOUT: %.loc12_20: type = splice_block %long.ref.loc12 [concrete = constants.%Cpp.long] { // CHECK:STDOUT: %Cpp.ref.loc12: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %long.ref.loc12: type = name_ref long, constants.%Cpp.long [concrete = constants.%Cpp.long] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc12_30.1: %Cpp.long = value_of_initializer %Cpp.long.as.AddWith.impl.Op.call -// CHECK:STDOUT: %.loc12_30.2: %Cpp.long = converted %Cpp.long.as.AddWith.impl.Op.call, %.loc12_30.1 // CHECK:STDOUT: %b: %Cpp.long = value_binding b, %.loc12_30.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.25e = value_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.25e = value_binding_pattern c [concrete = constants.%c.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.ref.loc13: %Cpp.long = name_ref x, %x // CHECK:STDOUT: %y.ref.loc13: %Cpp.long = name_ref y, %y // CHECK:STDOUT: %impl.elem1.loc13: %.19a = impl_witness_access constants.%SubWith.impl_witness.cb8, element1 [concrete = constants.%Cpp.long.as.SubWith.impl.Op.cc7] // CHECK:STDOUT: %bound_method.loc13: = bound_method %x.ref.loc13, %impl.elem1.loc13 // CHECK:STDOUT: %Cpp.long.as.SubWith.impl.Op.call: init %Cpp.long = call %bound_method.loc13(%x.ref.loc13, %y.ref.loc13) +// CHECK:STDOUT: %.loc13_30.1: %Cpp.long = value_of_initializer %Cpp.long.as.SubWith.impl.Op.call +// CHECK:STDOUT: %.loc13_30.2: %Cpp.long = converted %Cpp.long.as.SubWith.impl.Op.call, %.loc13_30.1 // CHECK:STDOUT: %.loc13_20: type = splice_block %long.ref.loc13 [concrete = constants.%Cpp.long] { // CHECK:STDOUT: %Cpp.ref.loc13: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %long.ref.loc13: type = name_ref long, constants.%Cpp.long [concrete = constants.%Cpp.long] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc13_30.1: %Cpp.long = value_of_initializer %Cpp.long.as.SubWith.impl.Op.call -// CHECK:STDOUT: %.loc13_30.2: %Cpp.long = converted %Cpp.long.as.SubWith.impl.Op.call, %.loc13_30.1 // CHECK:STDOUT: %c: %Cpp.long = value_binding c, %.loc13_30.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.25e = value_binding_pattern d [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.25e = value_binding_pattern d [concrete = constants.%d.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.ref.loc14: %Cpp.long = name_ref x, %x // CHECK:STDOUT: %y.ref.loc14: %Cpp.long = name_ref y, %y // CHECK:STDOUT: %impl.elem1.loc14: %.efd = impl_witness_access constants.%MulWith.impl_witness.cca, element1 [concrete = constants.%Cpp.long.as.MulWith.impl.Op.cc7] // CHECK:STDOUT: %bound_method.loc14: = bound_method %x.ref.loc14, %impl.elem1.loc14 // CHECK:STDOUT: %Cpp.long.as.MulWith.impl.Op.call: init %Cpp.long = call %bound_method.loc14(%x.ref.loc14, %y.ref.loc14) +// CHECK:STDOUT: %.loc14_30.1: %Cpp.long = value_of_initializer %Cpp.long.as.MulWith.impl.Op.call +// CHECK:STDOUT: %.loc14_30.2: %Cpp.long = converted %Cpp.long.as.MulWith.impl.Op.call, %.loc14_30.1 // CHECK:STDOUT: %.loc14_20: type = splice_block %long.ref.loc14 [concrete = constants.%Cpp.long] { // CHECK:STDOUT: %Cpp.ref.loc14: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %long.ref.loc14: type = name_ref long, constants.%Cpp.long [concrete = constants.%Cpp.long] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc14_30.1: %Cpp.long = value_of_initializer %Cpp.long.as.MulWith.impl.Op.call -// CHECK:STDOUT: %.loc14_30.2: %Cpp.long = converted %Cpp.long.as.MulWith.impl.Op.call, %.loc14_30.1 // CHECK:STDOUT: %d: %Cpp.long = value_binding d, %.loc14_30.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %e.patt: %pattern_type.25e = value_binding_pattern e [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type.25e = value_binding_pattern e [concrete = constants.%e.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.ref.loc15: %Cpp.long = name_ref x, %x // CHECK:STDOUT: %y.ref.loc15: %Cpp.long = name_ref y, %y // CHECK:STDOUT: %impl.elem1.loc15: %.002 = impl_witness_access constants.%DivWith.impl_witness.454, element1 [concrete = constants.%Cpp.long.as.DivWith.impl.Op.cc7] // CHECK:STDOUT: %bound_method.loc15: = bound_method %x.ref.loc15, %impl.elem1.loc15 // CHECK:STDOUT: %Cpp.long.as.DivWith.impl.Op.call: init %Cpp.long = call %bound_method.loc15(%x.ref.loc15, %y.ref.loc15) +// CHECK:STDOUT: %.loc15_30.1: %Cpp.long = value_of_initializer %Cpp.long.as.DivWith.impl.Op.call +// CHECK:STDOUT: %.loc15_30.2: %Cpp.long = converted %Cpp.long.as.DivWith.impl.Op.call, %.loc15_30.1 // CHECK:STDOUT: %.loc15_20: type = splice_block %long.ref.loc15 [concrete = constants.%Cpp.long] { // CHECK:STDOUT: %Cpp.ref.loc15: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %long.ref.loc15: type = name_ref long, constants.%Cpp.long [concrete = constants.%Cpp.long] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc15_30.1: %Cpp.long = value_of_initializer %Cpp.long.as.DivWith.impl.Op.call -// CHECK:STDOUT: %.loc15_30.2: %Cpp.long = converted %Cpp.long.as.DivWith.impl.Op.call, %.loc15_30.1 // CHECK:STDOUT: %e: %Cpp.long = value_binding e, %.loc15_30.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %f.patt: %pattern_type.25e = value_binding_pattern f [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type.25e = value_binding_pattern f [concrete = constants.%f.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.ref.loc16: %Cpp.long = name_ref x, %x // CHECK:STDOUT: %y.ref.loc16: %Cpp.long = name_ref y, %y // CHECK:STDOUT: %impl.elem1.loc16: %.83d = impl_witness_access constants.%ModWith.impl_witness.4d4, element1 [concrete = constants.%Cpp.long.as.ModWith.impl.Op.cc7] // CHECK:STDOUT: %bound_method.loc16: = bound_method %x.ref.loc16, %impl.elem1.loc16 // CHECK:STDOUT: %Cpp.long.as.ModWith.impl.Op.call: init %Cpp.long = call %bound_method.loc16(%x.ref.loc16, %y.ref.loc16) +// CHECK:STDOUT: %.loc16_30.1: %Cpp.long = value_of_initializer %Cpp.long.as.ModWith.impl.Op.call +// CHECK:STDOUT: %.loc16_30.2: %Cpp.long = converted %Cpp.long.as.ModWith.impl.Op.call, %.loc16_30.1 // CHECK:STDOUT: %.loc16_20: type = splice_block %long.ref.loc16 [concrete = constants.%Cpp.long] { // CHECK:STDOUT: %Cpp.ref.loc16: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %long.ref.loc16: type = name_ref long, constants.%Cpp.long [concrete = constants.%Cpp.long] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc16_30.1: %Cpp.long = value_of_initializer %Cpp.long.as.ModWith.impl.Op.call -// CHECK:STDOUT: %.loc16_30.2: %Cpp.long = converted %Cpp.long.as.ModWith.impl.Op.call, %.loc16_30.1 // CHECK:STDOUT: %f: %Cpp.long = value_binding f, %.loc16_30.2 // CHECK:STDOUT: // CHECK:STDOUT: } @@ -2661,6 +2742,8 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %pattern_type.25e: type = pattern_type %Cpp.long [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.25e = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.25e = var_pattern %a.patt [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.7eb: type = facet_type <@ImplicitAs, @ImplicitAs(%Cpp.long)> [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -2675,6 +2758,8 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type = struct_value () [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert [concrete] // CHECK:STDOUT: %int_1.9ce: %Cpp.long = int_value 1 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.25e = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.25e = var_pattern %b.patt [concrete] // CHECK:STDOUT: %AddAssignWith.type.a46: type = facet_type <@AddAssignWith, @AddAssignWith(%Cpp.long)> [concrete] // CHECK:STDOUT: %U.315: %ImplicitAs.type.7eb = symbolic_binding U, 0 [symbolic] // CHECK:STDOUT: %Cpp.long.as.AddAssignWith.impl.Op.type.3959e4.1: type = fn_type @Cpp.long.as.AddAssignWith.impl.Op.1, @Cpp.long.as.AddAssignWith.impl(%U.315) [symbolic] @@ -2882,8 +2967,8 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: fn @CompoundAssignmentHomogeneousLong() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.25e = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.25e = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.25e = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.25e = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %Cpp.long = var %a.var_patt // CHECK:STDOUT: %int_1.loc8: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -2898,8 +2983,8 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %Cpp.long = ref_binding a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.25e = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.25e = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.25e = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type.25e = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %Cpp.long = var %b.var_patt // CHECK:STDOUT: %int_1.loc9: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -2917,13 +3002,15 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %b.ref.loc11: ref %Cpp.long = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc11: %.705 = impl_witness_access constants.%AddAssignWith.impl_witness.515, element0 [concrete = constants.%Cpp.long.as.AddAssignWith.impl.Op.3976e1.2] // CHECK:STDOUT: %bound_method.loc11_5.1: = bound_method %a.ref.loc11, %impl.elem0.loc11 -// CHECK:STDOUT: %ImplicitAs.facet.loc11: %ImplicitAs.type.7eb = facet_value constants.%Cpp.long, (constants.%ImplicitAs.impl_witness.a9b) [concrete = constants.%ImplicitAs.facet.7ac] -// CHECK:STDOUT: %.loc11_5.1: %ImplicitAs.type.7eb = converted constants.%Cpp.long, %ImplicitAs.facet.loc11 [concrete = constants.%ImplicitAs.facet.7ac] +// CHECK:STDOUT: %ImplicitAs.facet.loc11_5.1: %ImplicitAs.type.7eb = facet_value constants.%Cpp.long, (constants.%ImplicitAs.impl_witness.a9b) [concrete = constants.%ImplicitAs.facet.7ac] +// CHECK:STDOUT: %.loc11_5.1: %ImplicitAs.type.7eb = converted constants.%Cpp.long, %ImplicitAs.facet.loc11_5.1 [concrete = constants.%ImplicitAs.facet.7ac] +// CHECK:STDOUT: %ImplicitAs.facet.loc11_5.2: %ImplicitAs.type.7eb = facet_value constants.%Cpp.long, (constants.%ImplicitAs.impl_witness.a9b) [concrete = constants.%ImplicitAs.facet.7ac] +// CHECK:STDOUT: %.loc11_5.2: %ImplicitAs.type.7eb = converted constants.%Cpp.long, %ImplicitAs.facet.loc11_5.2 [concrete = constants.%ImplicitAs.facet.7ac] // CHECK:STDOUT: %specific_fn.loc11: = specific_function %impl.elem0.loc11, @Cpp.long.as.AddAssignWith.impl.Op.1(constants.%ImplicitAs.facet.7ac) [concrete = constants.%Cpp.long.as.AddAssignWith.impl.Op.specific_fn.42c8d0.1] // CHECK:STDOUT: %bound_method.loc11_5.2: = bound_method %a.ref.loc11, %specific_fn.loc11 // CHECK:STDOUT: %.loc11_8: %Cpp.long = acquire_value %b.ref.loc11 -// CHECK:STDOUT: %.loc11_5.2: %Cpp.long.as.AddAssignWith.impl.Op.type.3f3409.1 = specific_constant imports.%Core.Op.7fd, @Cpp.long.as.AddAssignWith.impl(constants.%ImplicitAs.facet.7ac) [concrete = constants.%Cpp.long.as.AddAssignWith.impl.Op.3976e1.1] -// CHECK:STDOUT: %Op.ref.loc11: %Cpp.long.as.AddAssignWith.impl.Op.type.3f3409.1 = name_ref Op, %.loc11_5.2 [concrete = constants.%Cpp.long.as.AddAssignWith.impl.Op.3976e1.1] +// CHECK:STDOUT: %.loc11_5.3: %Cpp.long.as.AddAssignWith.impl.Op.type.3f3409.1 = specific_constant imports.%Core.Op.7fd, @Cpp.long.as.AddAssignWith.impl(constants.%ImplicitAs.facet.7ac) [concrete = constants.%Cpp.long.as.AddAssignWith.impl.Op.3976e1.1] +// CHECK:STDOUT: %Op.ref.loc11: %Cpp.long.as.AddAssignWith.impl.Op.type.3f3409.1 = name_ref Op, %.loc11_5.3 [concrete = constants.%Cpp.long.as.AddAssignWith.impl.Op.3976e1.1] // CHECK:STDOUT: %Cpp.long.as.AddAssignWith.impl.Op.bound: = bound_method %a.ref.loc11, %Op.ref.loc11 // CHECK:STDOUT: %Cpp.long.as.AddAssignWith.impl.Op.specific_fn: = specific_function %Op.ref.loc11, @Cpp.long.as.AddAssignWith.impl.Op.2(constants.%ImplicitAs.facet.7ac) [concrete = constants.%Cpp.long.as.AddAssignWith.impl.Op.specific_fn.42c8d0.2] // CHECK:STDOUT: %bound_method.loc11_5.3: = bound_method %a.ref.loc11, %Cpp.long.as.AddAssignWith.impl.Op.specific_fn @@ -2932,13 +3019,15 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %b.ref.loc12: ref %Cpp.long = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc12: %.0c3 = impl_witness_access constants.%SubAssignWith.impl_witness.6fd, element0 [concrete = constants.%Cpp.long.as.SubAssignWith.impl.Op.b9d526.2] // CHECK:STDOUT: %bound_method.loc12_5.1: = bound_method %a.ref.loc12, %impl.elem0.loc12 -// CHECK:STDOUT: %ImplicitAs.facet.loc12: %ImplicitAs.type.7eb = facet_value constants.%Cpp.long, (constants.%ImplicitAs.impl_witness.a9b) [concrete = constants.%ImplicitAs.facet.7ac] -// CHECK:STDOUT: %.loc12_5.1: %ImplicitAs.type.7eb = converted constants.%Cpp.long, %ImplicitAs.facet.loc12 [concrete = constants.%ImplicitAs.facet.7ac] +// CHECK:STDOUT: %ImplicitAs.facet.loc12_5.1: %ImplicitAs.type.7eb = facet_value constants.%Cpp.long, (constants.%ImplicitAs.impl_witness.a9b) [concrete = constants.%ImplicitAs.facet.7ac] +// CHECK:STDOUT: %.loc12_5.1: %ImplicitAs.type.7eb = converted constants.%Cpp.long, %ImplicitAs.facet.loc12_5.1 [concrete = constants.%ImplicitAs.facet.7ac] +// CHECK:STDOUT: %ImplicitAs.facet.loc12_5.2: %ImplicitAs.type.7eb = facet_value constants.%Cpp.long, (constants.%ImplicitAs.impl_witness.a9b) [concrete = constants.%ImplicitAs.facet.7ac] +// CHECK:STDOUT: %.loc12_5.2: %ImplicitAs.type.7eb = converted constants.%Cpp.long, %ImplicitAs.facet.loc12_5.2 [concrete = constants.%ImplicitAs.facet.7ac] // CHECK:STDOUT: %specific_fn.loc12: = specific_function %impl.elem0.loc12, @Cpp.long.as.SubAssignWith.impl.Op.1(constants.%ImplicitAs.facet.7ac) [concrete = constants.%Cpp.long.as.SubAssignWith.impl.Op.specific_fn.cf7f25.1] // CHECK:STDOUT: %bound_method.loc12_5.2: = bound_method %a.ref.loc12, %specific_fn.loc12 // CHECK:STDOUT: %.loc12_8: %Cpp.long = acquire_value %b.ref.loc12 -// CHECK:STDOUT: %.loc12_5.2: %Cpp.long.as.SubAssignWith.impl.Op.type.2438e2.1 = specific_constant imports.%Core.Op.3ae, @Cpp.long.as.SubAssignWith.impl(constants.%ImplicitAs.facet.7ac) [concrete = constants.%Cpp.long.as.SubAssignWith.impl.Op.b9d526.1] -// CHECK:STDOUT: %Op.ref.loc12: %Cpp.long.as.SubAssignWith.impl.Op.type.2438e2.1 = name_ref Op, %.loc12_5.2 [concrete = constants.%Cpp.long.as.SubAssignWith.impl.Op.b9d526.1] +// CHECK:STDOUT: %.loc12_5.3: %Cpp.long.as.SubAssignWith.impl.Op.type.2438e2.1 = specific_constant imports.%Core.Op.3ae, @Cpp.long.as.SubAssignWith.impl(constants.%ImplicitAs.facet.7ac) [concrete = constants.%Cpp.long.as.SubAssignWith.impl.Op.b9d526.1] +// CHECK:STDOUT: %Op.ref.loc12: %Cpp.long.as.SubAssignWith.impl.Op.type.2438e2.1 = name_ref Op, %.loc12_5.3 [concrete = constants.%Cpp.long.as.SubAssignWith.impl.Op.b9d526.1] // CHECK:STDOUT: %Cpp.long.as.SubAssignWith.impl.Op.bound: = bound_method %a.ref.loc12, %Op.ref.loc12 // CHECK:STDOUT: %Cpp.long.as.SubAssignWith.impl.Op.specific_fn: = specific_function %Op.ref.loc12, @Cpp.long.as.SubAssignWith.impl.Op.2(constants.%ImplicitAs.facet.7ac) [concrete = constants.%Cpp.long.as.SubAssignWith.impl.Op.specific_fn.cf7f25.2] // CHECK:STDOUT: %bound_method.loc12_5.3: = bound_method %a.ref.loc12, %Cpp.long.as.SubAssignWith.impl.Op.specific_fn @@ -2947,13 +3036,15 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %b.ref.loc13: ref %Cpp.long = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc13: %.dcc = impl_witness_access constants.%MulAssignWith.impl_witness.a8e, element0 [concrete = constants.%Cpp.long.as.MulAssignWith.impl.Op.e55b21.2] // CHECK:STDOUT: %bound_method.loc13_5.1: = bound_method %a.ref.loc13, %impl.elem0.loc13 -// CHECK:STDOUT: %ImplicitAs.facet.loc13: %ImplicitAs.type.7eb = facet_value constants.%Cpp.long, (constants.%ImplicitAs.impl_witness.a9b) [concrete = constants.%ImplicitAs.facet.7ac] -// CHECK:STDOUT: %.loc13_5.1: %ImplicitAs.type.7eb = converted constants.%Cpp.long, %ImplicitAs.facet.loc13 [concrete = constants.%ImplicitAs.facet.7ac] +// CHECK:STDOUT: %ImplicitAs.facet.loc13_5.1: %ImplicitAs.type.7eb = facet_value constants.%Cpp.long, (constants.%ImplicitAs.impl_witness.a9b) [concrete = constants.%ImplicitAs.facet.7ac] +// CHECK:STDOUT: %.loc13_5.1: %ImplicitAs.type.7eb = converted constants.%Cpp.long, %ImplicitAs.facet.loc13_5.1 [concrete = constants.%ImplicitAs.facet.7ac] +// CHECK:STDOUT: %ImplicitAs.facet.loc13_5.2: %ImplicitAs.type.7eb = facet_value constants.%Cpp.long, (constants.%ImplicitAs.impl_witness.a9b) [concrete = constants.%ImplicitAs.facet.7ac] +// CHECK:STDOUT: %.loc13_5.2: %ImplicitAs.type.7eb = converted constants.%Cpp.long, %ImplicitAs.facet.loc13_5.2 [concrete = constants.%ImplicitAs.facet.7ac] // CHECK:STDOUT: %specific_fn.loc13: = specific_function %impl.elem0.loc13, @Cpp.long.as.MulAssignWith.impl.Op.1(constants.%ImplicitAs.facet.7ac) [concrete = constants.%Cpp.long.as.MulAssignWith.impl.Op.specific_fn.4bcff6.1] // CHECK:STDOUT: %bound_method.loc13_5.2: = bound_method %a.ref.loc13, %specific_fn.loc13 // CHECK:STDOUT: %.loc13_8: %Cpp.long = acquire_value %b.ref.loc13 -// CHECK:STDOUT: %.loc13_5.2: %Cpp.long.as.MulAssignWith.impl.Op.type.58dc2b.1 = specific_constant imports.%Core.Op.a7f, @Cpp.long.as.MulAssignWith.impl(constants.%ImplicitAs.facet.7ac) [concrete = constants.%Cpp.long.as.MulAssignWith.impl.Op.e55b21.1] -// CHECK:STDOUT: %Op.ref.loc13: %Cpp.long.as.MulAssignWith.impl.Op.type.58dc2b.1 = name_ref Op, %.loc13_5.2 [concrete = constants.%Cpp.long.as.MulAssignWith.impl.Op.e55b21.1] +// CHECK:STDOUT: %.loc13_5.3: %Cpp.long.as.MulAssignWith.impl.Op.type.58dc2b.1 = specific_constant imports.%Core.Op.a7f, @Cpp.long.as.MulAssignWith.impl(constants.%ImplicitAs.facet.7ac) [concrete = constants.%Cpp.long.as.MulAssignWith.impl.Op.e55b21.1] +// CHECK:STDOUT: %Op.ref.loc13: %Cpp.long.as.MulAssignWith.impl.Op.type.58dc2b.1 = name_ref Op, %.loc13_5.3 [concrete = constants.%Cpp.long.as.MulAssignWith.impl.Op.e55b21.1] // CHECK:STDOUT: %Cpp.long.as.MulAssignWith.impl.Op.bound: = bound_method %a.ref.loc13, %Op.ref.loc13 // CHECK:STDOUT: %Cpp.long.as.MulAssignWith.impl.Op.specific_fn: = specific_function %Op.ref.loc13, @Cpp.long.as.MulAssignWith.impl.Op.2(constants.%ImplicitAs.facet.7ac) [concrete = constants.%Cpp.long.as.MulAssignWith.impl.Op.specific_fn.4bcff6.2] // CHECK:STDOUT: %bound_method.loc13_5.3: = bound_method %a.ref.loc13, %Cpp.long.as.MulAssignWith.impl.Op.specific_fn @@ -2962,13 +3053,15 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %b.ref.loc14: ref %Cpp.long = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc14: %.85d = impl_witness_access constants.%DivAssignWith.impl_witness.27b, element0 [concrete = constants.%Cpp.long.as.DivAssignWith.impl.Op.e2cc58.2] // CHECK:STDOUT: %bound_method.loc14_5.1: = bound_method %a.ref.loc14, %impl.elem0.loc14 -// CHECK:STDOUT: %ImplicitAs.facet.loc14: %ImplicitAs.type.7eb = facet_value constants.%Cpp.long, (constants.%ImplicitAs.impl_witness.a9b) [concrete = constants.%ImplicitAs.facet.7ac] -// CHECK:STDOUT: %.loc14_5.1: %ImplicitAs.type.7eb = converted constants.%Cpp.long, %ImplicitAs.facet.loc14 [concrete = constants.%ImplicitAs.facet.7ac] +// CHECK:STDOUT: %ImplicitAs.facet.loc14_5.1: %ImplicitAs.type.7eb = facet_value constants.%Cpp.long, (constants.%ImplicitAs.impl_witness.a9b) [concrete = constants.%ImplicitAs.facet.7ac] +// CHECK:STDOUT: %.loc14_5.1: %ImplicitAs.type.7eb = converted constants.%Cpp.long, %ImplicitAs.facet.loc14_5.1 [concrete = constants.%ImplicitAs.facet.7ac] +// CHECK:STDOUT: %ImplicitAs.facet.loc14_5.2: %ImplicitAs.type.7eb = facet_value constants.%Cpp.long, (constants.%ImplicitAs.impl_witness.a9b) [concrete = constants.%ImplicitAs.facet.7ac] +// CHECK:STDOUT: %.loc14_5.2: %ImplicitAs.type.7eb = converted constants.%Cpp.long, %ImplicitAs.facet.loc14_5.2 [concrete = constants.%ImplicitAs.facet.7ac] // CHECK:STDOUT: %specific_fn.loc14: = specific_function %impl.elem0.loc14, @Cpp.long.as.DivAssignWith.impl.Op.1(constants.%ImplicitAs.facet.7ac) [concrete = constants.%Cpp.long.as.DivAssignWith.impl.Op.specific_fn.3d06eb.1] // CHECK:STDOUT: %bound_method.loc14_5.2: = bound_method %a.ref.loc14, %specific_fn.loc14 // CHECK:STDOUT: %.loc14_8: %Cpp.long = acquire_value %b.ref.loc14 -// CHECK:STDOUT: %.loc14_5.2: %Cpp.long.as.DivAssignWith.impl.Op.type.d65fb4.1 = specific_constant imports.%Core.Op.8c3, @Cpp.long.as.DivAssignWith.impl(constants.%ImplicitAs.facet.7ac) [concrete = constants.%Cpp.long.as.DivAssignWith.impl.Op.e2cc58.1] -// CHECK:STDOUT: %Op.ref.loc14: %Cpp.long.as.DivAssignWith.impl.Op.type.d65fb4.1 = name_ref Op, %.loc14_5.2 [concrete = constants.%Cpp.long.as.DivAssignWith.impl.Op.e2cc58.1] +// CHECK:STDOUT: %.loc14_5.3: %Cpp.long.as.DivAssignWith.impl.Op.type.d65fb4.1 = specific_constant imports.%Core.Op.8c3, @Cpp.long.as.DivAssignWith.impl(constants.%ImplicitAs.facet.7ac) [concrete = constants.%Cpp.long.as.DivAssignWith.impl.Op.e2cc58.1] +// CHECK:STDOUT: %Op.ref.loc14: %Cpp.long.as.DivAssignWith.impl.Op.type.d65fb4.1 = name_ref Op, %.loc14_5.3 [concrete = constants.%Cpp.long.as.DivAssignWith.impl.Op.e2cc58.1] // CHECK:STDOUT: %Cpp.long.as.DivAssignWith.impl.Op.bound: = bound_method %a.ref.loc14, %Op.ref.loc14 // CHECK:STDOUT: %Cpp.long.as.DivAssignWith.impl.Op.specific_fn: = specific_function %Op.ref.loc14, @Cpp.long.as.DivAssignWith.impl.Op.2(constants.%ImplicitAs.facet.7ac) [concrete = constants.%Cpp.long.as.DivAssignWith.impl.Op.specific_fn.3d06eb.2] // CHECK:STDOUT: %bound_method.loc14_5.3: = bound_method %a.ref.loc14, %Cpp.long.as.DivAssignWith.impl.Op.specific_fn @@ -2977,13 +3070,15 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %b.ref.loc15: ref %Cpp.long = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc15: %.923 = impl_witness_access constants.%ModAssignWith.impl_witness.e1a, element0 [concrete = constants.%Cpp.long.as.ModAssignWith.impl.Op.11d0fb.2] // CHECK:STDOUT: %bound_method.loc15_5.1: = bound_method %a.ref.loc15, %impl.elem0.loc15 -// CHECK:STDOUT: %ImplicitAs.facet.loc15: %ImplicitAs.type.7eb = facet_value constants.%Cpp.long, (constants.%ImplicitAs.impl_witness.a9b) [concrete = constants.%ImplicitAs.facet.7ac] -// CHECK:STDOUT: %.loc15_5.1: %ImplicitAs.type.7eb = converted constants.%Cpp.long, %ImplicitAs.facet.loc15 [concrete = constants.%ImplicitAs.facet.7ac] +// CHECK:STDOUT: %ImplicitAs.facet.loc15_5.1: %ImplicitAs.type.7eb = facet_value constants.%Cpp.long, (constants.%ImplicitAs.impl_witness.a9b) [concrete = constants.%ImplicitAs.facet.7ac] +// CHECK:STDOUT: %.loc15_5.1: %ImplicitAs.type.7eb = converted constants.%Cpp.long, %ImplicitAs.facet.loc15_5.1 [concrete = constants.%ImplicitAs.facet.7ac] +// CHECK:STDOUT: %ImplicitAs.facet.loc15_5.2: %ImplicitAs.type.7eb = facet_value constants.%Cpp.long, (constants.%ImplicitAs.impl_witness.a9b) [concrete = constants.%ImplicitAs.facet.7ac] +// CHECK:STDOUT: %.loc15_5.2: %ImplicitAs.type.7eb = converted constants.%Cpp.long, %ImplicitAs.facet.loc15_5.2 [concrete = constants.%ImplicitAs.facet.7ac] // CHECK:STDOUT: %specific_fn.loc15: = specific_function %impl.elem0.loc15, @Cpp.long.as.ModAssignWith.impl.Op.1(constants.%ImplicitAs.facet.7ac) [concrete = constants.%Cpp.long.as.ModAssignWith.impl.Op.specific_fn.55dd89.1] // CHECK:STDOUT: %bound_method.loc15_5.2: = bound_method %a.ref.loc15, %specific_fn.loc15 // CHECK:STDOUT: %.loc15_8: %Cpp.long = acquire_value %b.ref.loc15 -// CHECK:STDOUT: %.loc15_5.2: %Cpp.long.as.ModAssignWith.impl.Op.type.cd191a.1 = specific_constant imports.%Core.Op.da3, @Cpp.long.as.ModAssignWith.impl(constants.%ImplicitAs.facet.7ac) [concrete = constants.%Cpp.long.as.ModAssignWith.impl.Op.11d0fb.1] -// CHECK:STDOUT: %Op.ref.loc15: %Cpp.long.as.ModAssignWith.impl.Op.type.cd191a.1 = name_ref Op, %.loc15_5.2 [concrete = constants.%Cpp.long.as.ModAssignWith.impl.Op.11d0fb.1] +// CHECK:STDOUT: %.loc15_5.3: %Cpp.long.as.ModAssignWith.impl.Op.type.cd191a.1 = specific_constant imports.%Core.Op.da3, @Cpp.long.as.ModAssignWith.impl(constants.%ImplicitAs.facet.7ac) [concrete = constants.%Cpp.long.as.ModAssignWith.impl.Op.11d0fb.1] +// CHECK:STDOUT: %Op.ref.loc15: %Cpp.long.as.ModAssignWith.impl.Op.type.cd191a.1 = name_ref Op, %.loc15_5.3 [concrete = constants.%Cpp.long.as.ModAssignWith.impl.Op.11d0fb.1] // CHECK:STDOUT: %Cpp.long.as.ModAssignWith.impl.Op.bound: = bound_method %a.ref.loc15, %Op.ref.loc15 // CHECK:STDOUT: %Cpp.long.as.ModAssignWith.impl.Op.specific_fn: = specific_function %Op.ref.loc15, @Cpp.long.as.ModAssignWith.impl.Op.2(constants.%ImplicitAs.facet.7ac) [concrete = constants.%Cpp.long.as.ModAssignWith.impl.Op.specific_fn.55dd89.2] // CHECK:STDOUT: %bound_method.loc15_5.3: = bound_method %a.ref.loc15, %Cpp.long.as.ModAssignWith.impl.Op.specific_fn @@ -2992,13 +3087,15 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %b.ref.loc17: ref %Cpp.long = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc17: %.a45 = impl_witness_access constants.%BitAndAssignWith.impl_witness.906, element0 [concrete = constants.%Cpp.long.as.BitAndAssignWith.impl.Op.86fa41.2] // CHECK:STDOUT: %bound_method.loc17_5.1: = bound_method %a.ref.loc17, %impl.elem0.loc17 -// CHECK:STDOUT: %ImplicitAs.facet.loc17: %ImplicitAs.type.7eb = facet_value constants.%Cpp.long, (constants.%ImplicitAs.impl_witness.a9b) [concrete = constants.%ImplicitAs.facet.7ac] -// CHECK:STDOUT: %.loc17_5.1: %ImplicitAs.type.7eb = converted constants.%Cpp.long, %ImplicitAs.facet.loc17 [concrete = constants.%ImplicitAs.facet.7ac] +// CHECK:STDOUT: %ImplicitAs.facet.loc17_5.1: %ImplicitAs.type.7eb = facet_value constants.%Cpp.long, (constants.%ImplicitAs.impl_witness.a9b) [concrete = constants.%ImplicitAs.facet.7ac] +// CHECK:STDOUT: %.loc17_5.1: %ImplicitAs.type.7eb = converted constants.%Cpp.long, %ImplicitAs.facet.loc17_5.1 [concrete = constants.%ImplicitAs.facet.7ac] +// CHECK:STDOUT: %ImplicitAs.facet.loc17_5.2: %ImplicitAs.type.7eb = facet_value constants.%Cpp.long, (constants.%ImplicitAs.impl_witness.a9b) [concrete = constants.%ImplicitAs.facet.7ac] +// CHECK:STDOUT: %.loc17_5.2: %ImplicitAs.type.7eb = converted constants.%Cpp.long, %ImplicitAs.facet.loc17_5.2 [concrete = constants.%ImplicitAs.facet.7ac] // CHECK:STDOUT: %specific_fn.loc17: = specific_function %impl.elem0.loc17, @Cpp.long.as.BitAndAssignWith.impl.Op.1(constants.%ImplicitAs.facet.7ac) [concrete = constants.%Cpp.long.as.BitAndAssignWith.impl.Op.specific_fn.022b9e.1] // CHECK:STDOUT: %bound_method.loc17_5.2: = bound_method %a.ref.loc17, %specific_fn.loc17 // CHECK:STDOUT: %.loc17_8: %Cpp.long = acquire_value %b.ref.loc17 -// CHECK:STDOUT: %.loc17_5.2: %Cpp.long.as.BitAndAssignWith.impl.Op.type.e0e6c3.1 = specific_constant imports.%Core.Op.c9e, @Cpp.long.as.BitAndAssignWith.impl(constants.%ImplicitAs.facet.7ac) [concrete = constants.%Cpp.long.as.BitAndAssignWith.impl.Op.86fa41.1] -// CHECK:STDOUT: %Op.ref.loc17: %Cpp.long.as.BitAndAssignWith.impl.Op.type.e0e6c3.1 = name_ref Op, %.loc17_5.2 [concrete = constants.%Cpp.long.as.BitAndAssignWith.impl.Op.86fa41.1] +// CHECK:STDOUT: %.loc17_5.3: %Cpp.long.as.BitAndAssignWith.impl.Op.type.e0e6c3.1 = specific_constant imports.%Core.Op.c9e, @Cpp.long.as.BitAndAssignWith.impl(constants.%ImplicitAs.facet.7ac) [concrete = constants.%Cpp.long.as.BitAndAssignWith.impl.Op.86fa41.1] +// CHECK:STDOUT: %Op.ref.loc17: %Cpp.long.as.BitAndAssignWith.impl.Op.type.e0e6c3.1 = name_ref Op, %.loc17_5.3 [concrete = constants.%Cpp.long.as.BitAndAssignWith.impl.Op.86fa41.1] // CHECK:STDOUT: %Cpp.long.as.BitAndAssignWith.impl.Op.bound: = bound_method %a.ref.loc17, %Op.ref.loc17 // CHECK:STDOUT: %Cpp.long.as.BitAndAssignWith.impl.Op.specific_fn: = specific_function %Op.ref.loc17, @Cpp.long.as.BitAndAssignWith.impl.Op.2(constants.%ImplicitAs.facet.7ac) [concrete = constants.%Cpp.long.as.BitAndAssignWith.impl.Op.specific_fn.022b9e.2] // CHECK:STDOUT: %bound_method.loc17_5.3: = bound_method %a.ref.loc17, %Cpp.long.as.BitAndAssignWith.impl.Op.specific_fn @@ -3007,13 +3104,15 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %b.ref.loc18: ref %Cpp.long = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc18: %.871 = impl_witness_access constants.%BitOrAssignWith.impl_witness.ecb, element0 [concrete = constants.%Cpp.long.as.BitOrAssignWith.impl.Op.737b02.2] // CHECK:STDOUT: %bound_method.loc18_5.1: = bound_method %a.ref.loc18, %impl.elem0.loc18 -// CHECK:STDOUT: %ImplicitAs.facet.loc18: %ImplicitAs.type.7eb = facet_value constants.%Cpp.long, (constants.%ImplicitAs.impl_witness.a9b) [concrete = constants.%ImplicitAs.facet.7ac] -// CHECK:STDOUT: %.loc18_5.1: %ImplicitAs.type.7eb = converted constants.%Cpp.long, %ImplicitAs.facet.loc18 [concrete = constants.%ImplicitAs.facet.7ac] +// CHECK:STDOUT: %ImplicitAs.facet.loc18_5.1: %ImplicitAs.type.7eb = facet_value constants.%Cpp.long, (constants.%ImplicitAs.impl_witness.a9b) [concrete = constants.%ImplicitAs.facet.7ac] +// CHECK:STDOUT: %.loc18_5.1: %ImplicitAs.type.7eb = converted constants.%Cpp.long, %ImplicitAs.facet.loc18_5.1 [concrete = constants.%ImplicitAs.facet.7ac] +// CHECK:STDOUT: %ImplicitAs.facet.loc18_5.2: %ImplicitAs.type.7eb = facet_value constants.%Cpp.long, (constants.%ImplicitAs.impl_witness.a9b) [concrete = constants.%ImplicitAs.facet.7ac] +// CHECK:STDOUT: %.loc18_5.2: %ImplicitAs.type.7eb = converted constants.%Cpp.long, %ImplicitAs.facet.loc18_5.2 [concrete = constants.%ImplicitAs.facet.7ac] // CHECK:STDOUT: %specific_fn.loc18: = specific_function %impl.elem0.loc18, @Cpp.long.as.BitOrAssignWith.impl.Op.1(constants.%ImplicitAs.facet.7ac) [concrete = constants.%Cpp.long.as.BitOrAssignWith.impl.Op.specific_fn.6acabf.1] // CHECK:STDOUT: %bound_method.loc18_5.2: = bound_method %a.ref.loc18, %specific_fn.loc18 // CHECK:STDOUT: %.loc18_8: %Cpp.long = acquire_value %b.ref.loc18 -// CHECK:STDOUT: %.loc18_5.2: %Cpp.long.as.BitOrAssignWith.impl.Op.type.70ac7f.1 = specific_constant imports.%Core.Op.add, @Cpp.long.as.BitOrAssignWith.impl(constants.%ImplicitAs.facet.7ac) [concrete = constants.%Cpp.long.as.BitOrAssignWith.impl.Op.737b02.1] -// CHECK:STDOUT: %Op.ref.loc18: %Cpp.long.as.BitOrAssignWith.impl.Op.type.70ac7f.1 = name_ref Op, %.loc18_5.2 [concrete = constants.%Cpp.long.as.BitOrAssignWith.impl.Op.737b02.1] +// CHECK:STDOUT: %.loc18_5.3: %Cpp.long.as.BitOrAssignWith.impl.Op.type.70ac7f.1 = specific_constant imports.%Core.Op.add, @Cpp.long.as.BitOrAssignWith.impl(constants.%ImplicitAs.facet.7ac) [concrete = constants.%Cpp.long.as.BitOrAssignWith.impl.Op.737b02.1] +// CHECK:STDOUT: %Op.ref.loc18: %Cpp.long.as.BitOrAssignWith.impl.Op.type.70ac7f.1 = name_ref Op, %.loc18_5.3 [concrete = constants.%Cpp.long.as.BitOrAssignWith.impl.Op.737b02.1] // CHECK:STDOUT: %Cpp.long.as.BitOrAssignWith.impl.Op.bound: = bound_method %a.ref.loc18, %Op.ref.loc18 // CHECK:STDOUT: %Cpp.long.as.BitOrAssignWith.impl.Op.specific_fn: = specific_function %Op.ref.loc18, @Cpp.long.as.BitOrAssignWith.impl.Op.2(constants.%ImplicitAs.facet.7ac) [concrete = constants.%Cpp.long.as.BitOrAssignWith.impl.Op.specific_fn.6acabf.2] // CHECK:STDOUT: %bound_method.loc18_5.3: = bound_method %a.ref.loc18, %Cpp.long.as.BitOrAssignWith.impl.Op.specific_fn @@ -3022,13 +3121,15 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %b.ref.loc19: ref %Cpp.long = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc19: %.939 = impl_witness_access constants.%BitXorAssignWith.impl_witness.360, element0 [concrete = constants.%Cpp.long.as.BitXorAssignWith.impl.Op.067369.2] // CHECK:STDOUT: %bound_method.loc19_5.1: = bound_method %a.ref.loc19, %impl.elem0.loc19 -// CHECK:STDOUT: %ImplicitAs.facet.loc19: %ImplicitAs.type.7eb = facet_value constants.%Cpp.long, (constants.%ImplicitAs.impl_witness.a9b) [concrete = constants.%ImplicitAs.facet.7ac] -// CHECK:STDOUT: %.loc19_5.1: %ImplicitAs.type.7eb = converted constants.%Cpp.long, %ImplicitAs.facet.loc19 [concrete = constants.%ImplicitAs.facet.7ac] +// CHECK:STDOUT: %ImplicitAs.facet.loc19_5.1: %ImplicitAs.type.7eb = facet_value constants.%Cpp.long, (constants.%ImplicitAs.impl_witness.a9b) [concrete = constants.%ImplicitAs.facet.7ac] +// CHECK:STDOUT: %.loc19_5.1: %ImplicitAs.type.7eb = converted constants.%Cpp.long, %ImplicitAs.facet.loc19_5.1 [concrete = constants.%ImplicitAs.facet.7ac] +// CHECK:STDOUT: %ImplicitAs.facet.loc19_5.2: %ImplicitAs.type.7eb = facet_value constants.%Cpp.long, (constants.%ImplicitAs.impl_witness.a9b) [concrete = constants.%ImplicitAs.facet.7ac] +// CHECK:STDOUT: %.loc19_5.2: %ImplicitAs.type.7eb = converted constants.%Cpp.long, %ImplicitAs.facet.loc19_5.2 [concrete = constants.%ImplicitAs.facet.7ac] // CHECK:STDOUT: %specific_fn.loc19: = specific_function %impl.elem0.loc19, @Cpp.long.as.BitXorAssignWith.impl.Op.1(constants.%ImplicitAs.facet.7ac) [concrete = constants.%Cpp.long.as.BitXorAssignWith.impl.Op.specific_fn.4fedc8.1] // CHECK:STDOUT: %bound_method.loc19_5.2: = bound_method %a.ref.loc19, %specific_fn.loc19 // CHECK:STDOUT: %.loc19_8: %Cpp.long = acquire_value %b.ref.loc19 -// CHECK:STDOUT: %.loc19_5.2: %Cpp.long.as.BitXorAssignWith.impl.Op.type.902397.1 = specific_constant imports.%Core.Op.a72, @Cpp.long.as.BitXorAssignWith.impl(constants.%ImplicitAs.facet.7ac) [concrete = constants.%Cpp.long.as.BitXorAssignWith.impl.Op.067369.1] -// CHECK:STDOUT: %Op.ref.loc19: %Cpp.long.as.BitXorAssignWith.impl.Op.type.902397.1 = name_ref Op, %.loc19_5.2 [concrete = constants.%Cpp.long.as.BitXorAssignWith.impl.Op.067369.1] +// CHECK:STDOUT: %.loc19_5.3: %Cpp.long.as.BitXorAssignWith.impl.Op.type.902397.1 = specific_constant imports.%Core.Op.a72, @Cpp.long.as.BitXorAssignWith.impl(constants.%ImplicitAs.facet.7ac) [concrete = constants.%Cpp.long.as.BitXorAssignWith.impl.Op.067369.1] +// CHECK:STDOUT: %Op.ref.loc19: %Cpp.long.as.BitXorAssignWith.impl.Op.type.902397.1 = name_ref Op, %.loc19_5.3 [concrete = constants.%Cpp.long.as.BitXorAssignWith.impl.Op.067369.1] // CHECK:STDOUT: %Cpp.long.as.BitXorAssignWith.impl.Op.bound: = bound_method %a.ref.loc19, %Op.ref.loc19 // CHECK:STDOUT: %Cpp.long.as.BitXorAssignWith.impl.Op.specific_fn: = specific_function %Op.ref.loc19, @Cpp.long.as.BitXorAssignWith.impl.Op.2(constants.%ImplicitAs.facet.7ac) [concrete = constants.%Cpp.long.as.BitXorAssignWith.impl.Op.specific_fn.4fedc8.2] // CHECK:STDOUT: %bound_method.loc19_5.3: = bound_method %a.ref.loc19, %Cpp.long.as.BitXorAssignWith.impl.Op.specific_fn @@ -3037,13 +3138,15 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %b.ref.loc20: ref %Cpp.long = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc20: %.1be = impl_witness_access constants.%LeftShiftAssignWith.impl_witness.153, element0 [concrete = constants.%Cpp.long.as.LeftShiftAssignWith.impl.Op.ec443b.2] // CHECK:STDOUT: %bound_method.loc20_5.1: = bound_method %a.ref.loc20, %impl.elem0.loc20 -// CHECK:STDOUT: %ImplicitAs.facet.loc20: %ImplicitAs.type.7eb = facet_value constants.%Cpp.long, (constants.%ImplicitAs.impl_witness.a9b) [concrete = constants.%ImplicitAs.facet.7ac] -// CHECK:STDOUT: %.loc20_5.1: %ImplicitAs.type.7eb = converted constants.%Cpp.long, %ImplicitAs.facet.loc20 [concrete = constants.%ImplicitAs.facet.7ac] +// CHECK:STDOUT: %ImplicitAs.facet.loc20_5.1: %ImplicitAs.type.7eb = facet_value constants.%Cpp.long, (constants.%ImplicitAs.impl_witness.a9b) [concrete = constants.%ImplicitAs.facet.7ac] +// CHECK:STDOUT: %.loc20_5.1: %ImplicitAs.type.7eb = converted constants.%Cpp.long, %ImplicitAs.facet.loc20_5.1 [concrete = constants.%ImplicitAs.facet.7ac] +// CHECK:STDOUT: %ImplicitAs.facet.loc20_5.2: %ImplicitAs.type.7eb = facet_value constants.%Cpp.long, (constants.%ImplicitAs.impl_witness.a9b) [concrete = constants.%ImplicitAs.facet.7ac] +// CHECK:STDOUT: %.loc20_5.2: %ImplicitAs.type.7eb = converted constants.%Cpp.long, %ImplicitAs.facet.loc20_5.2 [concrete = constants.%ImplicitAs.facet.7ac] // CHECK:STDOUT: %specific_fn.loc20: = specific_function %impl.elem0.loc20, @Cpp.long.as.LeftShiftAssignWith.impl.Op.1(constants.%ImplicitAs.facet.7ac) [concrete = constants.%Cpp.long.as.LeftShiftAssignWith.impl.Op.specific_fn.9c9ee2.1] // CHECK:STDOUT: %bound_method.loc20_5.2: = bound_method %a.ref.loc20, %specific_fn.loc20 // CHECK:STDOUT: %.loc20_9: %Cpp.long = acquire_value %b.ref.loc20 -// CHECK:STDOUT: %.loc20_5.2: %Cpp.long.as.LeftShiftAssignWith.impl.Op.type.71c508.1 = specific_constant imports.%Core.Op.e4d, @Cpp.long.as.LeftShiftAssignWith.impl(constants.%ImplicitAs.facet.7ac) [concrete = constants.%Cpp.long.as.LeftShiftAssignWith.impl.Op.ec443b.1] -// CHECK:STDOUT: %Op.ref.loc20: %Cpp.long.as.LeftShiftAssignWith.impl.Op.type.71c508.1 = name_ref Op, %.loc20_5.2 [concrete = constants.%Cpp.long.as.LeftShiftAssignWith.impl.Op.ec443b.1] +// CHECK:STDOUT: %.loc20_5.3: %Cpp.long.as.LeftShiftAssignWith.impl.Op.type.71c508.1 = specific_constant imports.%Core.Op.e4d, @Cpp.long.as.LeftShiftAssignWith.impl(constants.%ImplicitAs.facet.7ac) [concrete = constants.%Cpp.long.as.LeftShiftAssignWith.impl.Op.ec443b.1] +// CHECK:STDOUT: %Op.ref.loc20: %Cpp.long.as.LeftShiftAssignWith.impl.Op.type.71c508.1 = name_ref Op, %.loc20_5.3 [concrete = constants.%Cpp.long.as.LeftShiftAssignWith.impl.Op.ec443b.1] // CHECK:STDOUT: %Cpp.long.as.LeftShiftAssignWith.impl.Op.bound: = bound_method %a.ref.loc20, %Op.ref.loc20 // CHECK:STDOUT: %Cpp.long.as.LeftShiftAssignWith.impl.Op.specific_fn: = specific_function %Op.ref.loc20, @Cpp.long.as.LeftShiftAssignWith.impl.Op.2(constants.%ImplicitAs.facet.7ac) [concrete = constants.%Cpp.long.as.LeftShiftAssignWith.impl.Op.specific_fn.9c9ee2.2] // CHECK:STDOUT: %bound_method.loc20_5.3: = bound_method %a.ref.loc20, %Cpp.long.as.LeftShiftAssignWith.impl.Op.specific_fn @@ -3052,13 +3155,15 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %b.ref.loc21: ref %Cpp.long = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc21: %.7cc = impl_witness_access constants.%RightShiftAssignWith.impl_witness.531, element0 [concrete = constants.%Cpp.long.as.RightShiftAssignWith.impl.Op.108e17.2] // CHECK:STDOUT: %bound_method.loc21_5.1: = bound_method %a.ref.loc21, %impl.elem0.loc21 -// CHECK:STDOUT: %ImplicitAs.facet.loc21: %ImplicitAs.type.7eb = facet_value constants.%Cpp.long, (constants.%ImplicitAs.impl_witness.a9b) [concrete = constants.%ImplicitAs.facet.7ac] -// CHECK:STDOUT: %.loc21_5.1: %ImplicitAs.type.7eb = converted constants.%Cpp.long, %ImplicitAs.facet.loc21 [concrete = constants.%ImplicitAs.facet.7ac] +// CHECK:STDOUT: %ImplicitAs.facet.loc21_5.1: %ImplicitAs.type.7eb = facet_value constants.%Cpp.long, (constants.%ImplicitAs.impl_witness.a9b) [concrete = constants.%ImplicitAs.facet.7ac] +// CHECK:STDOUT: %.loc21_5.1: %ImplicitAs.type.7eb = converted constants.%Cpp.long, %ImplicitAs.facet.loc21_5.1 [concrete = constants.%ImplicitAs.facet.7ac] +// CHECK:STDOUT: %ImplicitAs.facet.loc21_5.2: %ImplicitAs.type.7eb = facet_value constants.%Cpp.long, (constants.%ImplicitAs.impl_witness.a9b) [concrete = constants.%ImplicitAs.facet.7ac] +// CHECK:STDOUT: %.loc21_5.2: %ImplicitAs.type.7eb = converted constants.%Cpp.long, %ImplicitAs.facet.loc21_5.2 [concrete = constants.%ImplicitAs.facet.7ac] // CHECK:STDOUT: %specific_fn.loc21: = specific_function %impl.elem0.loc21, @Cpp.long.as.RightShiftAssignWith.impl.Op.1(constants.%ImplicitAs.facet.7ac) [concrete = constants.%Cpp.long.as.RightShiftAssignWith.impl.Op.specific_fn.5a2726.1] // CHECK:STDOUT: %bound_method.loc21_5.2: = bound_method %a.ref.loc21, %specific_fn.loc21 // CHECK:STDOUT: %.loc21_9: %Cpp.long = acquire_value %b.ref.loc21 -// CHECK:STDOUT: %.loc21_5.2: %Cpp.long.as.RightShiftAssignWith.impl.Op.type.253402.1 = specific_constant imports.%Core.Op.127, @Cpp.long.as.RightShiftAssignWith.impl(constants.%ImplicitAs.facet.7ac) [concrete = constants.%Cpp.long.as.RightShiftAssignWith.impl.Op.108e17.1] -// CHECK:STDOUT: %Op.ref.loc21: %Cpp.long.as.RightShiftAssignWith.impl.Op.type.253402.1 = name_ref Op, %.loc21_5.2 [concrete = constants.%Cpp.long.as.RightShiftAssignWith.impl.Op.108e17.1] +// CHECK:STDOUT: %.loc21_5.3: %Cpp.long.as.RightShiftAssignWith.impl.Op.type.253402.1 = specific_constant imports.%Core.Op.127, @Cpp.long.as.RightShiftAssignWith.impl(constants.%ImplicitAs.facet.7ac) [concrete = constants.%Cpp.long.as.RightShiftAssignWith.impl.Op.108e17.1] +// CHECK:STDOUT: %Op.ref.loc21: %Cpp.long.as.RightShiftAssignWith.impl.Op.type.253402.1 = name_ref Op, %.loc21_5.3 [concrete = constants.%Cpp.long.as.RightShiftAssignWith.impl.Op.108e17.1] // CHECK:STDOUT: %Cpp.long.as.RightShiftAssignWith.impl.Op.bound: = bound_method %a.ref.loc21, %Op.ref.loc21 // CHECK:STDOUT: %Cpp.long.as.RightShiftAssignWith.impl.Op.specific_fn: = specific_function %Op.ref.loc21, @Cpp.long.as.RightShiftAssignWith.impl.Op.2(constants.%ImplicitAs.facet.7ac) [concrete = constants.%Cpp.long.as.RightShiftAssignWith.impl.Op.specific_fn.5a2726.2] // CHECK:STDOUT: %bound_method.loc21_5.3: = bound_method %a.ref.loc21, %Cpp.long.as.RightShiftAssignWith.impl.Op.specific_fn @@ -3092,6 +3197,8 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %Cpp.long: type = class_type @Long32 [concrete] // CHECK:STDOUT: %pattern_type.25e: type = pattern_type %Cpp.long [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.25e = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.25e = var_pattern %a.patt [concrete] // CHECK:STDOUT: %ImplicitAs.type.7eb: type = facet_type <@ImplicitAs, @ImplicitAs(%Cpp.long)> [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.e27: = impl_witness imports.%ImplicitAs.impl_witness_table.635 [concrete] // CHECK:STDOUT: %ImplicitAs.facet.b30: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.e27) [concrete] @@ -3307,8 +3414,8 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.25e = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.25e = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.25e = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.25e = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %Cpp.long = var %a.var_patt // CHECK:STDOUT: %int_1.loc9: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -3326,12 +3433,14 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %b.ref.loc10: %i32 = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc10_5: %.68d = impl_witness_access constants.%AddAssignWith.impl_witness.b48, element0 [concrete = constants.%Cpp.long.as.AddAssignWith.impl.Op.d3c936.2] // CHECK:STDOUT: %bound_method.loc10_5.1: = bound_method %a.ref.loc10, %impl.elem0.loc10_5 -// CHECK:STDOUT: %ImplicitAs.facet.loc10: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] -// CHECK:STDOUT: %.loc10_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc10 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc10_5.1: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc10_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc10_5.1 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc10_5.2: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc10_5.2: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc10_5.2 [concrete = constants.%ImplicitAs.facet.ce4] // CHECK:STDOUT: %specific_fn.loc10: = specific_function %impl.elem0.loc10_5, @Cpp.long.as.AddAssignWith.impl.Op.1(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.AddAssignWith.impl.Op.specific_fn.d4d8c8.1] // CHECK:STDOUT: %bound_method.loc10_5.2: = bound_method %a.ref.loc10, %specific_fn.loc10 -// CHECK:STDOUT: %.loc10_5.2: %Cpp.long.as.AddAssignWith.impl.Op.type.0c4994.1 = specific_constant imports.%Core.Op.7fd, @Cpp.long.as.AddAssignWith.impl(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.AddAssignWith.impl.Op.d3c936.1] -// CHECK:STDOUT: %Op.ref.loc10: %Cpp.long.as.AddAssignWith.impl.Op.type.0c4994.1 = name_ref Op, %.loc10_5.2 [concrete = constants.%Cpp.long.as.AddAssignWith.impl.Op.d3c936.1] +// CHECK:STDOUT: %.loc10_5.3: %Cpp.long.as.AddAssignWith.impl.Op.type.0c4994.1 = specific_constant imports.%Core.Op.7fd, @Cpp.long.as.AddAssignWith.impl(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.AddAssignWith.impl.Op.d3c936.1] +// CHECK:STDOUT: %Op.ref.loc10: %Cpp.long.as.AddAssignWith.impl.Op.type.0c4994.1 = name_ref Op, %.loc10_5.3 [concrete = constants.%Cpp.long.as.AddAssignWith.impl.Op.d3c936.1] // CHECK:STDOUT: %Cpp.long.as.AddAssignWith.impl.Op.bound: = bound_method %a.ref.loc10, %Op.ref.loc10 // CHECK:STDOUT: %Cpp.long.as.AddAssignWith.impl.Op.specific_fn: = specific_function %Op.ref.loc10, @Cpp.long.as.AddAssignWith.impl.Op.2(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.AddAssignWith.impl.Op.specific_fn.d4d8c8.2] // CHECK:STDOUT: %bound_method.loc10_5.3: = bound_method %a.ref.loc10, %Cpp.long.as.AddAssignWith.impl.Op.specific_fn @@ -3345,12 +3454,14 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %b.ref.loc11: %i32 = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc11_5: %.8cc = impl_witness_access constants.%SubAssignWith.impl_witness.9be, element0 [concrete = constants.%Cpp.long.as.SubAssignWith.impl.Op.e73c53.2] // CHECK:STDOUT: %bound_method.loc11_5.1: = bound_method %a.ref.loc11, %impl.elem0.loc11_5 -// CHECK:STDOUT: %ImplicitAs.facet.loc11: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] -// CHECK:STDOUT: %.loc11_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc11 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc11_5.1: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc11_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc11_5.1 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc11_5.2: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc11_5.2: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc11_5.2 [concrete = constants.%ImplicitAs.facet.ce4] // CHECK:STDOUT: %specific_fn.loc11: = specific_function %impl.elem0.loc11_5, @Cpp.long.as.SubAssignWith.impl.Op.1(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.SubAssignWith.impl.Op.specific_fn.ed33cb.1] // CHECK:STDOUT: %bound_method.loc11_5.2: = bound_method %a.ref.loc11, %specific_fn.loc11 -// CHECK:STDOUT: %.loc11_5.2: %Cpp.long.as.SubAssignWith.impl.Op.type.b59bc8.1 = specific_constant imports.%Core.Op.3ae, @Cpp.long.as.SubAssignWith.impl(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.SubAssignWith.impl.Op.e73c53.1] -// CHECK:STDOUT: %Op.ref.loc11: %Cpp.long.as.SubAssignWith.impl.Op.type.b59bc8.1 = name_ref Op, %.loc11_5.2 [concrete = constants.%Cpp.long.as.SubAssignWith.impl.Op.e73c53.1] +// CHECK:STDOUT: %.loc11_5.3: %Cpp.long.as.SubAssignWith.impl.Op.type.b59bc8.1 = specific_constant imports.%Core.Op.3ae, @Cpp.long.as.SubAssignWith.impl(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.SubAssignWith.impl.Op.e73c53.1] +// CHECK:STDOUT: %Op.ref.loc11: %Cpp.long.as.SubAssignWith.impl.Op.type.b59bc8.1 = name_ref Op, %.loc11_5.3 [concrete = constants.%Cpp.long.as.SubAssignWith.impl.Op.e73c53.1] // CHECK:STDOUT: %Cpp.long.as.SubAssignWith.impl.Op.bound: = bound_method %a.ref.loc11, %Op.ref.loc11 // CHECK:STDOUT: %Cpp.long.as.SubAssignWith.impl.Op.specific_fn: = specific_function %Op.ref.loc11, @Cpp.long.as.SubAssignWith.impl.Op.2(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.SubAssignWith.impl.Op.specific_fn.ed33cb.2] // CHECK:STDOUT: %bound_method.loc11_5.3: = bound_method %a.ref.loc11, %Cpp.long.as.SubAssignWith.impl.Op.specific_fn @@ -3364,12 +3475,14 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %b.ref.loc12: %i32 = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc12_5: %.e51 = impl_witness_access constants.%MulAssignWith.impl_witness.fb1, element0 [concrete = constants.%Cpp.long.as.MulAssignWith.impl.Op.6fa29e.2] // CHECK:STDOUT: %bound_method.loc12_5.1: = bound_method %a.ref.loc12, %impl.elem0.loc12_5 -// CHECK:STDOUT: %ImplicitAs.facet.loc12: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] -// CHECK:STDOUT: %.loc12_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc12 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc12_5.1: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc12_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc12_5.1 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc12_5.2: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc12_5.2: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc12_5.2 [concrete = constants.%ImplicitAs.facet.ce4] // CHECK:STDOUT: %specific_fn.loc12: = specific_function %impl.elem0.loc12_5, @Cpp.long.as.MulAssignWith.impl.Op.1(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.MulAssignWith.impl.Op.specific_fn.674e38.1] // CHECK:STDOUT: %bound_method.loc12_5.2: = bound_method %a.ref.loc12, %specific_fn.loc12 -// CHECK:STDOUT: %.loc12_5.2: %Cpp.long.as.MulAssignWith.impl.Op.type.6461a2.1 = specific_constant imports.%Core.Op.a7f, @Cpp.long.as.MulAssignWith.impl(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.MulAssignWith.impl.Op.6fa29e.1] -// CHECK:STDOUT: %Op.ref.loc12: %Cpp.long.as.MulAssignWith.impl.Op.type.6461a2.1 = name_ref Op, %.loc12_5.2 [concrete = constants.%Cpp.long.as.MulAssignWith.impl.Op.6fa29e.1] +// CHECK:STDOUT: %.loc12_5.3: %Cpp.long.as.MulAssignWith.impl.Op.type.6461a2.1 = specific_constant imports.%Core.Op.a7f, @Cpp.long.as.MulAssignWith.impl(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.MulAssignWith.impl.Op.6fa29e.1] +// CHECK:STDOUT: %Op.ref.loc12: %Cpp.long.as.MulAssignWith.impl.Op.type.6461a2.1 = name_ref Op, %.loc12_5.3 [concrete = constants.%Cpp.long.as.MulAssignWith.impl.Op.6fa29e.1] // CHECK:STDOUT: %Cpp.long.as.MulAssignWith.impl.Op.bound: = bound_method %a.ref.loc12, %Op.ref.loc12 // CHECK:STDOUT: %Cpp.long.as.MulAssignWith.impl.Op.specific_fn: = specific_function %Op.ref.loc12, @Cpp.long.as.MulAssignWith.impl.Op.2(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.MulAssignWith.impl.Op.specific_fn.674e38.2] // CHECK:STDOUT: %bound_method.loc12_5.3: = bound_method %a.ref.loc12, %Cpp.long.as.MulAssignWith.impl.Op.specific_fn @@ -3383,12 +3496,14 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %b.ref.loc13: %i32 = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc13_5: %.182 = impl_witness_access constants.%DivAssignWith.impl_witness.1c3, element0 [concrete = constants.%Cpp.long.as.DivAssignWith.impl.Op.aa5aae.2] // CHECK:STDOUT: %bound_method.loc13_5.1: = bound_method %a.ref.loc13, %impl.elem0.loc13_5 -// CHECK:STDOUT: %ImplicitAs.facet.loc13: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] -// CHECK:STDOUT: %.loc13_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc13 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc13_5.1: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc13_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc13_5.1 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc13_5.2: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc13_5.2: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc13_5.2 [concrete = constants.%ImplicitAs.facet.ce4] // CHECK:STDOUT: %specific_fn.loc13: = specific_function %impl.elem0.loc13_5, @Cpp.long.as.DivAssignWith.impl.Op.1(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.DivAssignWith.impl.Op.specific_fn.53323c.1] // CHECK:STDOUT: %bound_method.loc13_5.2: = bound_method %a.ref.loc13, %specific_fn.loc13 -// CHECK:STDOUT: %.loc13_5.2: %Cpp.long.as.DivAssignWith.impl.Op.type.5edb2e.1 = specific_constant imports.%Core.Op.8c3, @Cpp.long.as.DivAssignWith.impl(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.DivAssignWith.impl.Op.aa5aae.1] -// CHECK:STDOUT: %Op.ref.loc13: %Cpp.long.as.DivAssignWith.impl.Op.type.5edb2e.1 = name_ref Op, %.loc13_5.2 [concrete = constants.%Cpp.long.as.DivAssignWith.impl.Op.aa5aae.1] +// CHECK:STDOUT: %.loc13_5.3: %Cpp.long.as.DivAssignWith.impl.Op.type.5edb2e.1 = specific_constant imports.%Core.Op.8c3, @Cpp.long.as.DivAssignWith.impl(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.DivAssignWith.impl.Op.aa5aae.1] +// CHECK:STDOUT: %Op.ref.loc13: %Cpp.long.as.DivAssignWith.impl.Op.type.5edb2e.1 = name_ref Op, %.loc13_5.3 [concrete = constants.%Cpp.long.as.DivAssignWith.impl.Op.aa5aae.1] // CHECK:STDOUT: %Cpp.long.as.DivAssignWith.impl.Op.bound: = bound_method %a.ref.loc13, %Op.ref.loc13 // CHECK:STDOUT: %Cpp.long.as.DivAssignWith.impl.Op.specific_fn: = specific_function %Op.ref.loc13, @Cpp.long.as.DivAssignWith.impl.Op.2(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.DivAssignWith.impl.Op.specific_fn.53323c.2] // CHECK:STDOUT: %bound_method.loc13_5.3: = bound_method %a.ref.loc13, %Cpp.long.as.DivAssignWith.impl.Op.specific_fn @@ -3402,12 +3517,14 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %b.ref.loc14: %i32 = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc14_5: %.3cd = impl_witness_access constants.%ModAssignWith.impl_witness.535, element0 [concrete = constants.%Cpp.long.as.ModAssignWith.impl.Op.be932a.2] // CHECK:STDOUT: %bound_method.loc14_5.1: = bound_method %a.ref.loc14, %impl.elem0.loc14_5 -// CHECK:STDOUT: %ImplicitAs.facet.loc14: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] -// CHECK:STDOUT: %.loc14_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc14 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc14_5.1: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc14_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc14_5.1 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc14_5.2: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc14_5.2: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc14_5.2 [concrete = constants.%ImplicitAs.facet.ce4] // CHECK:STDOUT: %specific_fn.loc14: = specific_function %impl.elem0.loc14_5, @Cpp.long.as.ModAssignWith.impl.Op.1(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.ModAssignWith.impl.Op.specific_fn.922dd8.1] // CHECK:STDOUT: %bound_method.loc14_5.2: = bound_method %a.ref.loc14, %specific_fn.loc14 -// CHECK:STDOUT: %.loc14_5.2: %Cpp.long.as.ModAssignWith.impl.Op.type.0bedac.1 = specific_constant imports.%Core.Op.da3, @Cpp.long.as.ModAssignWith.impl(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.ModAssignWith.impl.Op.be932a.1] -// CHECK:STDOUT: %Op.ref.loc14: %Cpp.long.as.ModAssignWith.impl.Op.type.0bedac.1 = name_ref Op, %.loc14_5.2 [concrete = constants.%Cpp.long.as.ModAssignWith.impl.Op.be932a.1] +// CHECK:STDOUT: %.loc14_5.3: %Cpp.long.as.ModAssignWith.impl.Op.type.0bedac.1 = specific_constant imports.%Core.Op.da3, @Cpp.long.as.ModAssignWith.impl(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.ModAssignWith.impl.Op.be932a.1] +// CHECK:STDOUT: %Op.ref.loc14: %Cpp.long.as.ModAssignWith.impl.Op.type.0bedac.1 = name_ref Op, %.loc14_5.3 [concrete = constants.%Cpp.long.as.ModAssignWith.impl.Op.be932a.1] // CHECK:STDOUT: %Cpp.long.as.ModAssignWith.impl.Op.bound: = bound_method %a.ref.loc14, %Op.ref.loc14 // CHECK:STDOUT: %Cpp.long.as.ModAssignWith.impl.Op.specific_fn: = specific_function %Op.ref.loc14, @Cpp.long.as.ModAssignWith.impl.Op.2(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.ModAssignWith.impl.Op.specific_fn.922dd8.2] // CHECK:STDOUT: %bound_method.loc14_5.3: = bound_method %a.ref.loc14, %Cpp.long.as.ModAssignWith.impl.Op.specific_fn @@ -3421,12 +3538,14 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %b.ref.loc16: %i32 = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc16_5: %.d84 = impl_witness_access constants.%BitAndAssignWith.impl_witness.ca3, element0 [concrete = constants.%Cpp.long.as.BitAndAssignWith.impl.Op.c55c9d.2] // CHECK:STDOUT: %bound_method.loc16_5.1: = bound_method %a.ref.loc16, %impl.elem0.loc16_5 -// CHECK:STDOUT: %ImplicitAs.facet.loc16: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] -// CHECK:STDOUT: %.loc16_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc16 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc16_5.1: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc16_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc16_5.1 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc16_5.2: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc16_5.2: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc16_5.2 [concrete = constants.%ImplicitAs.facet.ce4] // CHECK:STDOUT: %specific_fn.loc16: = specific_function %impl.elem0.loc16_5, @Cpp.long.as.BitAndAssignWith.impl.Op.1(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.BitAndAssignWith.impl.Op.specific_fn.b2e276.1] // CHECK:STDOUT: %bound_method.loc16_5.2: = bound_method %a.ref.loc16, %specific_fn.loc16 -// CHECK:STDOUT: %.loc16_5.2: %Cpp.long.as.BitAndAssignWith.impl.Op.type.4ea5c7.1 = specific_constant imports.%Core.Op.c9e, @Cpp.long.as.BitAndAssignWith.impl(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.BitAndAssignWith.impl.Op.c55c9d.1] -// CHECK:STDOUT: %Op.ref.loc16: %Cpp.long.as.BitAndAssignWith.impl.Op.type.4ea5c7.1 = name_ref Op, %.loc16_5.2 [concrete = constants.%Cpp.long.as.BitAndAssignWith.impl.Op.c55c9d.1] +// CHECK:STDOUT: %.loc16_5.3: %Cpp.long.as.BitAndAssignWith.impl.Op.type.4ea5c7.1 = specific_constant imports.%Core.Op.c9e, @Cpp.long.as.BitAndAssignWith.impl(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.BitAndAssignWith.impl.Op.c55c9d.1] +// CHECK:STDOUT: %Op.ref.loc16: %Cpp.long.as.BitAndAssignWith.impl.Op.type.4ea5c7.1 = name_ref Op, %.loc16_5.3 [concrete = constants.%Cpp.long.as.BitAndAssignWith.impl.Op.c55c9d.1] // CHECK:STDOUT: %Cpp.long.as.BitAndAssignWith.impl.Op.bound: = bound_method %a.ref.loc16, %Op.ref.loc16 // CHECK:STDOUT: %Cpp.long.as.BitAndAssignWith.impl.Op.specific_fn: = specific_function %Op.ref.loc16, @Cpp.long.as.BitAndAssignWith.impl.Op.2(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.BitAndAssignWith.impl.Op.specific_fn.b2e276.2] // CHECK:STDOUT: %bound_method.loc16_5.3: = bound_method %a.ref.loc16, %Cpp.long.as.BitAndAssignWith.impl.Op.specific_fn @@ -3440,12 +3559,14 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %b.ref.loc17: %i32 = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc17_5: %.0f7 = impl_witness_access constants.%BitOrAssignWith.impl_witness.936, element0 [concrete = constants.%Cpp.long.as.BitOrAssignWith.impl.Op.f127f0.2] // CHECK:STDOUT: %bound_method.loc17_5.1: = bound_method %a.ref.loc17, %impl.elem0.loc17_5 -// CHECK:STDOUT: %ImplicitAs.facet.loc17: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] -// CHECK:STDOUT: %.loc17_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc17 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc17_5.1: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc17_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc17_5.1 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc17_5.2: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc17_5.2: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc17_5.2 [concrete = constants.%ImplicitAs.facet.ce4] // CHECK:STDOUT: %specific_fn.loc17: = specific_function %impl.elem0.loc17_5, @Cpp.long.as.BitOrAssignWith.impl.Op.1(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.BitOrAssignWith.impl.Op.specific_fn.1bd8b4.1] // CHECK:STDOUT: %bound_method.loc17_5.2: = bound_method %a.ref.loc17, %specific_fn.loc17 -// CHECK:STDOUT: %.loc17_5.2: %Cpp.long.as.BitOrAssignWith.impl.Op.type.1bf7d5.1 = specific_constant imports.%Core.Op.add, @Cpp.long.as.BitOrAssignWith.impl(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.BitOrAssignWith.impl.Op.f127f0.1] -// CHECK:STDOUT: %Op.ref.loc17: %Cpp.long.as.BitOrAssignWith.impl.Op.type.1bf7d5.1 = name_ref Op, %.loc17_5.2 [concrete = constants.%Cpp.long.as.BitOrAssignWith.impl.Op.f127f0.1] +// CHECK:STDOUT: %.loc17_5.3: %Cpp.long.as.BitOrAssignWith.impl.Op.type.1bf7d5.1 = specific_constant imports.%Core.Op.add, @Cpp.long.as.BitOrAssignWith.impl(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.BitOrAssignWith.impl.Op.f127f0.1] +// CHECK:STDOUT: %Op.ref.loc17: %Cpp.long.as.BitOrAssignWith.impl.Op.type.1bf7d5.1 = name_ref Op, %.loc17_5.3 [concrete = constants.%Cpp.long.as.BitOrAssignWith.impl.Op.f127f0.1] // CHECK:STDOUT: %Cpp.long.as.BitOrAssignWith.impl.Op.bound: = bound_method %a.ref.loc17, %Op.ref.loc17 // CHECK:STDOUT: %Cpp.long.as.BitOrAssignWith.impl.Op.specific_fn: = specific_function %Op.ref.loc17, @Cpp.long.as.BitOrAssignWith.impl.Op.2(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.BitOrAssignWith.impl.Op.specific_fn.1bd8b4.2] // CHECK:STDOUT: %bound_method.loc17_5.3: = bound_method %a.ref.loc17, %Cpp.long.as.BitOrAssignWith.impl.Op.specific_fn @@ -3459,12 +3580,14 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %b.ref.loc18: %i32 = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc18_5: %.580 = impl_witness_access constants.%BitXorAssignWith.impl_witness.7a9, element0 [concrete = constants.%Cpp.long.as.BitXorAssignWith.impl.Op.99c425.2] // CHECK:STDOUT: %bound_method.loc18_5.1: = bound_method %a.ref.loc18, %impl.elem0.loc18_5 -// CHECK:STDOUT: %ImplicitAs.facet.loc18: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] -// CHECK:STDOUT: %.loc18_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc18 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc18_5.1: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc18_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc18_5.1 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc18_5.2: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc18_5.2: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc18_5.2 [concrete = constants.%ImplicitAs.facet.ce4] // CHECK:STDOUT: %specific_fn.loc18: = specific_function %impl.elem0.loc18_5, @Cpp.long.as.BitXorAssignWith.impl.Op.1(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.BitXorAssignWith.impl.Op.specific_fn.503a1b.1] // CHECK:STDOUT: %bound_method.loc18_5.2: = bound_method %a.ref.loc18, %specific_fn.loc18 -// CHECK:STDOUT: %.loc18_5.2: %Cpp.long.as.BitXorAssignWith.impl.Op.type.d0da74.1 = specific_constant imports.%Core.Op.a72, @Cpp.long.as.BitXorAssignWith.impl(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.BitXorAssignWith.impl.Op.99c425.1] -// CHECK:STDOUT: %Op.ref.loc18: %Cpp.long.as.BitXorAssignWith.impl.Op.type.d0da74.1 = name_ref Op, %.loc18_5.2 [concrete = constants.%Cpp.long.as.BitXorAssignWith.impl.Op.99c425.1] +// CHECK:STDOUT: %.loc18_5.3: %Cpp.long.as.BitXorAssignWith.impl.Op.type.d0da74.1 = specific_constant imports.%Core.Op.a72, @Cpp.long.as.BitXorAssignWith.impl(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.BitXorAssignWith.impl.Op.99c425.1] +// CHECK:STDOUT: %Op.ref.loc18: %Cpp.long.as.BitXorAssignWith.impl.Op.type.d0da74.1 = name_ref Op, %.loc18_5.3 [concrete = constants.%Cpp.long.as.BitXorAssignWith.impl.Op.99c425.1] // CHECK:STDOUT: %Cpp.long.as.BitXorAssignWith.impl.Op.bound: = bound_method %a.ref.loc18, %Op.ref.loc18 // CHECK:STDOUT: %Cpp.long.as.BitXorAssignWith.impl.Op.specific_fn: = specific_function %Op.ref.loc18, @Cpp.long.as.BitXorAssignWith.impl.Op.2(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.BitXorAssignWith.impl.Op.specific_fn.503a1b.2] // CHECK:STDOUT: %bound_method.loc18_5.3: = bound_method %a.ref.loc18, %Cpp.long.as.BitXorAssignWith.impl.Op.specific_fn @@ -3478,12 +3601,14 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %b.ref.loc19: %i32 = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc19_5: %.683 = impl_witness_access constants.%LeftShiftAssignWith.impl_witness.4c7, element0 [concrete = constants.%Cpp.long.as.LeftShiftAssignWith.impl.Op.80597f.2] // CHECK:STDOUT: %bound_method.loc19_5.1: = bound_method %a.ref.loc19, %impl.elem0.loc19_5 -// CHECK:STDOUT: %ImplicitAs.facet.loc19: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] -// CHECK:STDOUT: %.loc19_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc19 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc19_5.1: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc19_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc19_5.1 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc19_5.2: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc19_5.2: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc19_5.2 [concrete = constants.%ImplicitAs.facet.ce4] // CHECK:STDOUT: %specific_fn.loc19: = specific_function %impl.elem0.loc19_5, @Cpp.long.as.LeftShiftAssignWith.impl.Op.1(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.LeftShiftAssignWith.impl.Op.specific_fn.df2fa0.1] // CHECK:STDOUT: %bound_method.loc19_5.2: = bound_method %a.ref.loc19, %specific_fn.loc19 -// CHECK:STDOUT: %.loc19_5.2: %Cpp.long.as.LeftShiftAssignWith.impl.Op.type.8878df.1 = specific_constant imports.%Core.Op.e4d, @Cpp.long.as.LeftShiftAssignWith.impl(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.LeftShiftAssignWith.impl.Op.80597f.1] -// CHECK:STDOUT: %Op.ref.loc19: %Cpp.long.as.LeftShiftAssignWith.impl.Op.type.8878df.1 = name_ref Op, %.loc19_5.2 [concrete = constants.%Cpp.long.as.LeftShiftAssignWith.impl.Op.80597f.1] +// CHECK:STDOUT: %.loc19_5.3: %Cpp.long.as.LeftShiftAssignWith.impl.Op.type.8878df.1 = specific_constant imports.%Core.Op.e4d, @Cpp.long.as.LeftShiftAssignWith.impl(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.LeftShiftAssignWith.impl.Op.80597f.1] +// CHECK:STDOUT: %Op.ref.loc19: %Cpp.long.as.LeftShiftAssignWith.impl.Op.type.8878df.1 = name_ref Op, %.loc19_5.3 [concrete = constants.%Cpp.long.as.LeftShiftAssignWith.impl.Op.80597f.1] // CHECK:STDOUT: %Cpp.long.as.LeftShiftAssignWith.impl.Op.bound: = bound_method %a.ref.loc19, %Op.ref.loc19 // CHECK:STDOUT: %Cpp.long.as.LeftShiftAssignWith.impl.Op.specific_fn: = specific_function %Op.ref.loc19, @Cpp.long.as.LeftShiftAssignWith.impl.Op.2(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.LeftShiftAssignWith.impl.Op.specific_fn.df2fa0.2] // CHECK:STDOUT: %bound_method.loc19_5.3: = bound_method %a.ref.loc19, %Cpp.long.as.LeftShiftAssignWith.impl.Op.specific_fn @@ -3497,12 +3622,14 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %b.ref.loc20: %i32 = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc20_5: %.17e = impl_witness_access constants.%RightShiftAssignWith.impl_witness.348, element0 [concrete = constants.%Cpp.long.as.RightShiftAssignWith.impl.Op.76ada1.2] // CHECK:STDOUT: %bound_method.loc20_5.1: = bound_method %a.ref.loc20, %impl.elem0.loc20_5 -// CHECK:STDOUT: %ImplicitAs.facet.loc20: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] -// CHECK:STDOUT: %.loc20_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc20 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc20_5.1: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc20_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc20_5.1 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc20_5.2: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc20_5.2: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc20_5.2 [concrete = constants.%ImplicitAs.facet.ce4] // CHECK:STDOUT: %specific_fn.loc20: = specific_function %impl.elem0.loc20_5, @Cpp.long.as.RightShiftAssignWith.impl.Op.1(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.RightShiftAssignWith.impl.Op.specific_fn.708585.1] // CHECK:STDOUT: %bound_method.loc20_5.2: = bound_method %a.ref.loc20, %specific_fn.loc20 -// CHECK:STDOUT: %.loc20_5.2: %Cpp.long.as.RightShiftAssignWith.impl.Op.type.3aa338.1 = specific_constant imports.%Core.Op.127, @Cpp.long.as.RightShiftAssignWith.impl(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.RightShiftAssignWith.impl.Op.76ada1.1] -// CHECK:STDOUT: %Op.ref.loc20: %Cpp.long.as.RightShiftAssignWith.impl.Op.type.3aa338.1 = name_ref Op, %.loc20_5.2 [concrete = constants.%Cpp.long.as.RightShiftAssignWith.impl.Op.76ada1.1] +// CHECK:STDOUT: %.loc20_5.3: %Cpp.long.as.RightShiftAssignWith.impl.Op.type.3aa338.1 = specific_constant imports.%Core.Op.127, @Cpp.long.as.RightShiftAssignWith.impl(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.RightShiftAssignWith.impl.Op.76ada1.1] +// CHECK:STDOUT: %Op.ref.loc20: %Cpp.long.as.RightShiftAssignWith.impl.Op.type.3aa338.1 = name_ref Op, %.loc20_5.3 [concrete = constants.%Cpp.long.as.RightShiftAssignWith.impl.Op.76ada1.1] // CHECK:STDOUT: %Cpp.long.as.RightShiftAssignWith.impl.Op.bound: = bound_method %a.ref.loc20, %Op.ref.loc20 // CHECK:STDOUT: %Cpp.long.as.RightShiftAssignWith.impl.Op.specific_fn: = specific_function %Op.ref.loc20, @Cpp.long.as.RightShiftAssignWith.impl.Op.2(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.RightShiftAssignWith.impl.Op.specific_fn.708585.2] // CHECK:STDOUT: %bound_method.loc20_5.3: = bound_method %a.ref.loc20, %Cpp.long.as.RightShiftAssignWith.impl.Op.specific_fn @@ -3538,6 +3665,8 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %pattern_type.25e: type = pattern_type %Cpp.long [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.25e = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.25e = var_pattern %a.patt [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.7eb: type = facet_type <@ImplicitAs, @ImplicitAs(%Cpp.long)> [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.e27: = impl_witness imports.%ImplicitAs.impl_witness_table.635 [concrete] @@ -3583,8 +3712,8 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: fn @CompoundAssignmentLongAndIntLiteral() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.25e = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.25e = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.25e = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.25e = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %Cpp.long = var %a.var_patt // CHECK:STDOUT: %int_1.loc8: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -3602,12 +3731,14 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %int_1.loc9: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %impl.elem0.loc9_5: %.f86 = impl_witness_access constants.%AddAssignWith.impl_witness.e58, element0 [concrete = constants.%Cpp.long.as.AddAssignWith.impl.Op.2303e0.2] // CHECK:STDOUT: %bound_method.loc9_5.1: = bound_method %a.ref, %impl.elem0.loc9_5 -// CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.e27) [concrete = constants.%ImplicitAs.facet] -// CHECK:STDOUT: %.loc9_5.1: %ImplicitAs.type.7eb = converted Core.IntLiteral, %ImplicitAs.facet [concrete = constants.%ImplicitAs.facet] +// CHECK:STDOUT: %ImplicitAs.facet.loc9_5.1: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.e27) [concrete = constants.%ImplicitAs.facet] +// CHECK:STDOUT: %.loc9_5.1: %ImplicitAs.type.7eb = converted Core.IntLiteral, %ImplicitAs.facet.loc9_5.1 [concrete = constants.%ImplicitAs.facet] +// CHECK:STDOUT: %ImplicitAs.facet.loc9_5.2: %ImplicitAs.type.7eb = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.e27) [concrete = constants.%ImplicitAs.facet] +// CHECK:STDOUT: %.loc9_5.2: %ImplicitAs.type.7eb = converted Core.IntLiteral, %ImplicitAs.facet.loc9_5.2 [concrete = constants.%ImplicitAs.facet] // CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0.loc9_5, @Cpp.long.as.AddAssignWith.impl.Op.1(constants.%ImplicitAs.facet) [concrete = constants.%Cpp.long.as.AddAssignWith.impl.Op.specific_fn.ffe0b1.1] // CHECK:STDOUT: %bound_method.loc9_5.2: = bound_method %a.ref, %specific_fn -// CHECK:STDOUT: %.loc9_5.2: %Cpp.long.as.AddAssignWith.impl.Op.type.59ea6c.1 = specific_constant imports.%Core.Op.7fd, @Cpp.long.as.AddAssignWith.impl(constants.%ImplicitAs.facet) [concrete = constants.%Cpp.long.as.AddAssignWith.impl.Op.2303e0.1] -// CHECK:STDOUT: %Op.ref: %Cpp.long.as.AddAssignWith.impl.Op.type.59ea6c.1 = name_ref Op, %.loc9_5.2 [concrete = constants.%Cpp.long.as.AddAssignWith.impl.Op.2303e0.1] +// CHECK:STDOUT: %.loc9_5.3: %Cpp.long.as.AddAssignWith.impl.Op.type.59ea6c.1 = specific_constant imports.%Core.Op.7fd, @Cpp.long.as.AddAssignWith.impl(constants.%ImplicitAs.facet) [concrete = constants.%Cpp.long.as.AddAssignWith.impl.Op.2303e0.1] +// CHECK:STDOUT: %Op.ref: %Cpp.long.as.AddAssignWith.impl.Op.type.59ea6c.1 = name_ref Op, %.loc9_5.3 [concrete = constants.%Cpp.long.as.AddAssignWith.impl.Op.2303e0.1] // CHECK:STDOUT: %Cpp.long.as.AddAssignWith.impl.Op.bound: = bound_method %a.ref, %Op.ref // CHECK:STDOUT: %Cpp.long.as.AddAssignWith.impl.Op.specific_fn: = specific_function %Op.ref, @Cpp.long.as.AddAssignWith.impl.Op.2(constants.%ImplicitAs.facet) [concrete = constants.%Cpp.long.as.AddAssignWith.impl.Op.specific_fn.ffe0b1.2] // CHECK:STDOUT: %bound_method.loc9_5.3: = bound_method %a.ref, %Cpp.long.as.AddAssignWith.impl.Op.specific_fn @@ -3643,6 +3774,8 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %pattern_type.25e: type = pattern_type %Cpp.long [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.25e = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.25e = var_pattern %a.patt [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.7eb: type = facet_type <@ImplicitAs, @ImplicitAs(%Cpp.long)> [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.e27: = impl_witness imports.%ImplicitAs.impl_witness_table.635 [concrete] @@ -3654,6 +3787,7 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.5d7: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.3ce [concrete] // CHECK:STDOUT: %int_1.9ce: %Cpp.long = int_value 1 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = value_binding_pattern b [concrete] // CHECK:STDOUT: %ImplicitAs.type.914: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %To: Core.IntLiteral = symbolic_binding To, 0 [symbolic] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.e74: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert.2, @Core.IntLiteral.as.ImplicitAs.impl.0e9(%To) [symbolic] @@ -3713,8 +3847,8 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: fn @CompoundAssignmentLongAndRuntimeI32() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.25e = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.25e = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.25e = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.25e = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %Cpp.long = var %a.var_patt // CHECK:STDOUT: %int_1.loc8: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -3729,10 +3863,9 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %Cpp.long = ref_binding a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1.loc9: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] -// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %impl.elem0.loc9: %.1c5 = impl_witness_access constants.%ImplicitAs.impl_witness.a23, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] // CHECK:STDOUT: %bound_method.loc9_16.1: = bound_method %int_1.loc9, %impl.elem0.loc9 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.094] // CHECK:STDOUT: %specific_fn.loc9: = specific_function %impl.elem0.loc9, @Core.IntLiteral.as.ImplicitAs.impl.Convert.2(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] @@ -3740,17 +3873,20 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc9: init %i32 = call %bound_method.loc9_16.2(%int_1.loc9) [concrete = constants.%int_1.0c6] // CHECK:STDOUT: %.loc9_16.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc9 [concrete = constants.%int_1.0c6] // CHECK:STDOUT: %.loc9_16.2: %i32 = converted %int_1.loc9, %.loc9_16.1 [concrete = constants.%int_1.0c6] +// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %b: %i32 = value_binding b, %.loc9_16.2 // CHECK:STDOUT: %a.ref: ref %Cpp.long = name_ref a, %a // CHECK:STDOUT: %b.ref: %i32 = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc10_5: %.68d = impl_witness_access constants.%AddAssignWith.impl_witness.b48, element0 [concrete = constants.%Cpp.long.as.AddAssignWith.impl.Op.d3c936.2] // CHECK:STDOUT: %bound_method.loc10_5.1: = bound_method %a.ref, %impl.elem0.loc10_5 -// CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] -// CHECK:STDOUT: %.loc10_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc10_5.1: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc10_5.1: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc10_5.1 [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %ImplicitAs.facet.loc10_5.2: %ImplicitAs.type.7eb = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.f82) [concrete = constants.%ImplicitAs.facet.ce4] +// CHECK:STDOUT: %.loc10_5.2: %ImplicitAs.type.7eb = converted constants.%i32, %ImplicitAs.facet.loc10_5.2 [concrete = constants.%ImplicitAs.facet.ce4] // CHECK:STDOUT: %specific_fn.loc10: = specific_function %impl.elem0.loc10_5, @Cpp.long.as.AddAssignWith.impl.Op.1(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.AddAssignWith.impl.Op.specific_fn.d4d8c8.1] // CHECK:STDOUT: %bound_method.loc10_5.2: = bound_method %a.ref, %specific_fn.loc10 -// CHECK:STDOUT: %.loc10_5.2: %Cpp.long.as.AddAssignWith.impl.Op.type.0c4994.1 = specific_constant imports.%Core.Op.7fd, @Cpp.long.as.AddAssignWith.impl(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.AddAssignWith.impl.Op.d3c936.1] -// CHECK:STDOUT: %Op.ref: %Cpp.long.as.AddAssignWith.impl.Op.type.0c4994.1 = name_ref Op, %.loc10_5.2 [concrete = constants.%Cpp.long.as.AddAssignWith.impl.Op.d3c936.1] +// CHECK:STDOUT: %.loc10_5.3: %Cpp.long.as.AddAssignWith.impl.Op.type.0c4994.1 = specific_constant imports.%Core.Op.7fd, @Cpp.long.as.AddAssignWith.impl(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.AddAssignWith.impl.Op.d3c936.1] +// CHECK:STDOUT: %Op.ref: %Cpp.long.as.AddAssignWith.impl.Op.type.0c4994.1 = name_ref Op, %.loc10_5.3 [concrete = constants.%Cpp.long.as.AddAssignWith.impl.Op.d3c936.1] // CHECK:STDOUT: %Cpp.long.as.AddAssignWith.impl.Op.bound: = bound_method %a.ref, %Op.ref // CHECK:STDOUT: %Cpp.long.as.AddAssignWith.impl.Op.specific_fn: = specific_function %Op.ref, @Cpp.long.as.AddAssignWith.impl.Op.2(constants.%ImplicitAs.facet.ce4) [concrete = constants.%Cpp.long.as.AddAssignWith.impl.Op.specific_fn.d4d8c8.2] // CHECK:STDOUT: %bound_method.loc10_5.3: = bound_method %a.ref, %Cpp.long.as.AddAssignWith.impl.Op.specific_fn @@ -3786,6 +3922,8 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %pattern_type.25e: type = pattern_type %Cpp.long [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.25e = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.25e = var_pattern %a.patt [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.7eb: type = facet_type <@ImplicitAs, @ImplicitAs(%Cpp.long)> [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.e27: = impl_witness imports.%ImplicitAs.impl_witness_table.635 [concrete] @@ -3830,8 +3968,8 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: fn @IncrementDecrementLong() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.25e = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.25e = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.25e = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.25e = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %Cpp.long = var %a.var_patt // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -3881,6 +4019,7 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %u32: type = class_type @UInt, @UInt(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.1a0: type = pattern_type %Cpp.unsigned_long [concrete] +// CHECK:STDOUT: %cpp_unsigned_long.patt: %pattern_type.1a0 = value_binding_pattern cpp_unsigned_long [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -3896,12 +4035,16 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %int_1.0e4: %Cpp.unsigned_long = int_value 1 [concrete] // CHECK:STDOUT: %ULongResult: type = class_type @ULongResult [concrete] // CHECK:STDOUT: %pattern_type.f8a: type = pattern_type %ULongResult [concrete] +// CHECK:STDOUT: %cpp_unsigned_long_result.patt: %pattern_type.f8a = value_binding_pattern cpp_unsigned_long_result [concrete] // CHECK:STDOUT: %PassULong.cpp_overload_set.type: type = cpp_overload_set_type @PassULong.cpp_overload_set [concrete] // CHECK:STDOUT: %PassULong.cpp_overload_set.value: %PassULong.cpp_overload_set.type = cpp_overload_set_value @PassULong.cpp_overload_set [concrete] // CHECK:STDOUT: %ptr.eca: type = ptr_type %ULongResult [concrete] // CHECK:STDOUT: %PassULong__carbon_thunk.type.c65dc2.1: type = fn_type @PassULong__carbon_thunk.1 [concrete] // CHECK:STDOUT: %PassULong__carbon_thunk.65c133.1: %PassULong__carbon_thunk.type.c65dc2.1 = struct_value () [concrete] +// CHECK:STDOUT: %cpp_compat_ulong.patt: %pattern_type.1a0 = value_binding_pattern cpp_compat_ulong [concrete] +// CHECK:STDOUT: %cpp_compat_ulong_result.patt: %pattern_type.f8a = value_binding_pattern cpp_compat_ulong_result [concrete] // CHECK:STDOUT: %pattern_type.668: type = pattern_type %u32 [concrete] +// CHECK:STDOUT: %carbon_u32.patt: %pattern_type.668 = value_binding_pattern carbon_u32 [concrete] // CHECK:STDOUT: %ImplicitAs.type.efe: type = facet_type <@ImplicitAs, @ImplicitAs(%u32)> [concrete] // CHECK:STDOUT: %To.fe9: Core.IntLiteral = symbolic_binding To, 0 [symbolic] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.199: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert.2, @Core.IntLiteral.as.ImplicitAs.impl.b68(%To.fe9) [symbolic] @@ -3918,6 +4061,7 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %int_1.92d: %u32 = int_value 1 [concrete] // CHECK:STDOUT: %UIntResult: type = class_type @UIntResult [concrete] // CHECK:STDOUT: %pattern_type.116: type = pattern_type %UIntResult [concrete] +// CHECK:STDOUT: %carbon_u32_result.patt: %pattern_type.116 = value_binding_pattern carbon_u32_result [concrete] // CHECK:STDOUT: %ptr.cc8: type = ptr_type %UIntResult [concrete] // CHECK:STDOUT: %PassULong__carbon_thunk.type.c65dc2.2: type = fn_type @PassULong__carbon_thunk.2 [concrete] // CHECK:STDOUT: %PassULong__carbon_thunk.65c133.2: %PassULong__carbon_thunk.type.c65dc2.2 = struct_value () [concrete] @@ -3944,6 +4088,8 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %array_type: type = array_type %int_1.5b8, %f32.c73 [concrete] // CHECK:STDOUT: %f32.9b3: type = float_type %int_32, f32 [concrete] // CHECK:STDOUT: %pattern_type.18b: type = pattern_type %array_type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.18b = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.18b = var_pattern %a.patt [concrete] // CHECK:STDOUT: %float.6da: Core.FloatLiteral = float_literal_value 10e-1 [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (Core.FloatLiteral) [concrete] // CHECK:STDOUT: %tuple: %tuple.type = tuple_value (%float.6da) [concrete] @@ -4029,21 +4175,21 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %cpp_unsigned_long.patt: %pattern_type.1a0 = value_binding_pattern cpp_unsigned_long [concrete] +// CHECK:STDOUT: %cpp_unsigned_long.patt: %pattern_type.1a0 = value_binding_pattern cpp_unsigned_long [concrete = constants.%cpp_unsigned_long.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1.loc15: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] -// CHECK:STDOUT: %.loc15_29: type = splice_block %unsigned_long.ref.loc15 [concrete = constants.%Cpp.unsigned_long] { -// CHECK:STDOUT: %Cpp.ref.loc15: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %unsigned_long.ref.loc15: type = name_ref unsigned_long, constants.%Cpp.unsigned_long [concrete = constants.%Cpp.unsigned_long] -// CHECK:STDOUT: } // CHECK:STDOUT: %impl.elem0.loc15: %.cce = impl_witness_access constants.%ImplicitAs.impl_witness.2d1, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.3ce] // CHECK:STDOUT: %bound_method.loc15: = bound_method %int_1.loc15, %impl.elem0.loc15 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.5d7] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc15: init %Cpp.unsigned_long = call %bound_method.loc15(%int_1.loc15) [concrete = constants.%int_1.0e4] // CHECK:STDOUT: %.loc15_46.1: %Cpp.unsigned_long = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc15 [concrete = constants.%int_1.0e4] // CHECK:STDOUT: %.loc15_46.2: %Cpp.unsigned_long = converted %int_1.loc15, %.loc15_46.1 [concrete = constants.%int_1.0e4] +// CHECK:STDOUT: %.loc15_29: type = splice_block %unsigned_long.ref.loc15 [concrete = constants.%Cpp.unsigned_long] { +// CHECK:STDOUT: %Cpp.ref.loc15: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %unsigned_long.ref.loc15: type = name_ref unsigned_long, constants.%Cpp.unsigned_long [concrete = constants.%Cpp.unsigned_long] +// CHECK:STDOUT: } // CHECK:STDOUT: %cpp_unsigned_long: %Cpp.unsigned_long = value_binding cpp_unsigned_long, %.loc15_46.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %cpp_unsigned_long_result.patt: %pattern_type.f8a = value_binding_pattern cpp_unsigned_long_result [concrete] +// CHECK:STDOUT: %cpp_unsigned_long_result.patt: %pattern_type.f8a = value_binding_pattern cpp_unsigned_long_result [concrete = constants.%cpp_unsigned_long_result.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc16_58: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %PassULong.ref.loc16: %PassULong.cpp_overload_set.type = name_ref PassULong, imports.%PassULong.cpp_overload_set.value [concrete = constants.%PassULong.cpp_overload_set.value] @@ -4052,15 +4198,15 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %addr.loc16: %ptr.eca = addr_of %.loc16_89.1 // CHECK:STDOUT: %PassULong__carbon_thunk.call.loc16: init %empty_tuple.type = call imports.%PassULong__carbon_thunk.decl.5da2e0.1(%cpp_unsigned_long.ref.loc16, %addr.loc16) // CHECK:STDOUT: %.loc16_89.2: init %ULongResult to %.loc16_89.1 = mark_in_place_init %PassULong__carbon_thunk.call.loc16 +// CHECK:STDOUT: %.loc16_89.3: ref %ULongResult = temporary %.loc16_89.1, %.loc16_89.2 +// CHECK:STDOUT: %.loc16_89.4: %ULongResult = acquire_value %.loc16_89.3 // CHECK:STDOUT: %.loc16_43: type = splice_block %ULongResult.ref.loc16 [concrete = constants.%ULongResult] { // CHECK:STDOUT: %Cpp.ref.loc16_40: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %ULongResult.ref.loc16: type = name_ref ULongResult, imports.%ULongResult.decl [concrete = constants.%ULongResult] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc16_89.3: ref %ULongResult = temporary %.loc16_89.1, %.loc16_89.2 -// CHECK:STDOUT: %.loc16_89.4: %ULongResult = acquire_value %.loc16_89.3 // CHECK:STDOUT: %cpp_unsigned_long_result: %ULongResult = value_binding cpp_unsigned_long_result, %.loc16_89.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %cpp_compat_ulong.patt: %pattern_type.1a0 = value_binding_pattern cpp_compat_ulong [concrete] +// CHECK:STDOUT: %cpp_compat_ulong.patt: %pattern_type.1a0 = value_binding_pattern cpp_compat_ulong [concrete = constants.%cpp_compat_ulong.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %cpp_unsigned_long.ref.loc18: %Cpp.unsigned_long = name_ref cpp_unsigned_long, %cpp_unsigned_long // CHECK:STDOUT: %.loc18: type = splice_block %ULong32.ref [concrete = constants.%Cpp.unsigned_long] { @@ -4070,7 +4216,7 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: } // CHECK:STDOUT: %cpp_compat_ulong: %Cpp.unsigned_long = value_binding cpp_compat_ulong, %cpp_unsigned_long.ref.loc18 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %cpp_compat_ulong_result.patt: %pattern_type.f8a = value_binding_pattern cpp_compat_ulong_result [concrete] +// CHECK:STDOUT: %cpp_compat_ulong_result.patt: %pattern_type.f8a = value_binding_pattern cpp_compat_ulong_result [concrete = constants.%cpp_compat_ulong_result.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc19_57: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %PassULong.ref.loc19: %PassULong.cpp_overload_set.type = name_ref PassULong, imports.%PassULong.cpp_overload_set.value [concrete = constants.%PassULong.cpp_overload_set.value] @@ -4079,18 +4225,17 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %addr.loc19: %ptr.eca = addr_of %.loc19_87.1 // CHECK:STDOUT: %PassULong__carbon_thunk.call.loc19: init %empty_tuple.type = call imports.%PassULong__carbon_thunk.decl.5da2e0.1(%cpp_compat_ulong.ref, %addr.loc19) // CHECK:STDOUT: %.loc19_87.2: init %ULongResult to %.loc19_87.1 = mark_in_place_init %PassULong__carbon_thunk.call.loc19 +// CHECK:STDOUT: %.loc19_87.3: ref %ULongResult = temporary %.loc19_87.1, %.loc19_87.2 +// CHECK:STDOUT: %.loc19_87.4: %ULongResult = acquire_value %.loc19_87.3 // CHECK:STDOUT: %.loc19_42: type = splice_block %ULongResult.ref.loc19 [concrete = constants.%ULongResult] { // CHECK:STDOUT: %Cpp.ref.loc19_39: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %ULongResult.ref.loc19: type = name_ref ULongResult, imports.%ULongResult.decl [concrete = constants.%ULongResult] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc19_87.3: ref %ULongResult = temporary %.loc19_87.1, %.loc19_87.2 -// CHECK:STDOUT: %.loc19_87.4: %ULongResult = acquire_value %.loc19_87.3 // CHECK:STDOUT: %cpp_compat_ulong_result: %ULongResult = value_binding cpp_compat_ulong_result, %.loc19_87.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %carbon_u32.patt: %pattern_type.668 = value_binding_pattern carbon_u32 [concrete] +// CHECK:STDOUT: %carbon_u32.patt: %pattern_type.668 = value_binding_pattern carbon_u32 [concrete = constants.%carbon_u32.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1.loc21: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] -// CHECK:STDOUT: %u32: type = type_literal constants.%u32 [concrete = constants.%u32] // CHECK:STDOUT: %impl.elem0.loc21: %.22b = impl_witness_access constants.%ImplicitAs.impl_witness.0a1, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.9db] // CHECK:STDOUT: %bound_method.loc21_25.1: = bound_method %int_1.loc21, %impl.elem0.loc21 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.cc8] // CHECK:STDOUT: %specific_fn.loc21: = specific_function %impl.elem0.loc21, @Core.IntLiteral.as.ImplicitAs.impl.Convert.2(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] @@ -4098,9 +4243,10 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc21: init %u32 = call %bound_method.loc21_25.2(%int_1.loc21) [concrete = constants.%int_1.92d] // CHECK:STDOUT: %.loc21_25.1: %u32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc21 [concrete = constants.%int_1.92d] // CHECK:STDOUT: %.loc21_25.2: %u32 = converted %int_1.loc21, %.loc21_25.1 [concrete = constants.%int_1.92d] +// CHECK:STDOUT: %u32: type = type_literal constants.%u32 [concrete = constants.%u32] // CHECK:STDOUT: %carbon_u32: %u32 = value_binding carbon_u32, %.loc21_25.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %carbon_u32_result.patt: %pattern_type.116 = value_binding_pattern carbon_u32_result [concrete] +// CHECK:STDOUT: %carbon_u32_result.patt: %pattern_type.116 = value_binding_pattern carbon_u32_result [concrete = constants.%carbon_u32_result.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc22_50: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %PassULong.ref.loc22: %PassULong.cpp_overload_set.type = name_ref PassULong, imports.%PassULong.cpp_overload_set.value [concrete = constants.%PassULong.cpp_overload_set.value] @@ -4109,16 +4255,16 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %addr.loc22: %ptr.cc8 = addr_of %.loc22_74.1 // CHECK:STDOUT: %PassULong__carbon_thunk.call.loc22: init %empty_tuple.type = call imports.%PassULong__carbon_thunk.decl.5da2e0.2(%carbon_u32.ref, %addr.loc22) // CHECK:STDOUT: %.loc22_74.2: init %UIntResult to %.loc22_74.1 = mark_in_place_init %PassULong__carbon_thunk.call.loc22 +// CHECK:STDOUT: %.loc22_74.3: ref %UIntResult = temporary %.loc22_74.1, %.loc22_74.2 +// CHECK:STDOUT: %.loc22_74.4: %UIntResult = acquire_value %.loc22_74.3 // CHECK:STDOUT: %.loc22_36: type = splice_block %UIntResult.ref [concrete = constants.%UIntResult] { // CHECK:STDOUT: %Cpp.ref.loc22_33: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %UIntResult.ref: type = name_ref UIntResult, imports.%UIntResult.decl [concrete = constants.%UIntResult] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc22_74.3: ref %UIntResult = temporary %.loc22_74.1, %.loc22_74.2 -// CHECK:STDOUT: %.loc22_74.4: %UIntResult = acquire_value %.loc22_74.3 // CHECK:STDOUT: %carbon_u32_result: %UIntResult = value_binding carbon_u32_result, %.loc22_74.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.18b = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.18b = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.18b = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.18b = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type = var %a.var_patt // CHECK:STDOUT: %float: Core.FloatLiteral = float_literal_value 10e-1 [concrete = constants.%float.6da] @@ -4185,6 +4331,8 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %u32: type = class_type @UInt, @UInt(%int_32) [concrete] // CHECK:STDOUT: %u32.builtin: type = int_type unsigned, %int_32 [concrete] // CHECK:STDOUT: %pattern_type.1a0: type = pattern_type %Cpp.unsigned_long [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.1a0 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.1a0 = var_pattern %a.patt [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.b0c: type = facet_type <@ImplicitAs, @ImplicitAs(%Cpp.unsigned_long)> [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -4196,6 +4344,8 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type = struct_value () [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert [concrete] // CHECK:STDOUT: %int_1.0e4: %Cpp.unsigned_long = int_value 1 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.1a0 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.1a0 = var_pattern %b.patt [concrete] // CHECK:STDOUT: %Copy.impl_witness.845: = impl_witness imports.%Copy.impl_witness_table.304 [concrete] // CHECK:STDOUT: %Copy.facet: %Copy.type = facet_value %Cpp.unsigned_long, (%Copy.impl_witness.845) [concrete] // CHECK:STDOUT: %Copy.WithSelf.Op.type.2ea: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet) [concrete] @@ -4220,8 +4370,8 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: fn @CopyUnsignedLong() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.1a0 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.1a0 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.1a0 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.1a0 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %Cpp.unsigned_long = var %a.var_patt // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -4236,8 +4386,8 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %Cpp.unsigned_long = ref_binding a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.1a0 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.1a0 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.1a0 = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type.1a0 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %Cpp.unsigned_long = var %b.var_patt // CHECK:STDOUT: %a.ref: ref %Cpp.unsigned_long = name_ref a, %a diff --git a/toolchain/check/testdata/interop/cpp/primitive_types/long_and_long_long.lp64.carbon b/toolchain/check/testdata/interop/cpp/primitive_types/long_and_long_long.lp64.carbon index 7e5066025ea7..ecc05bf40919 100644 --- a/toolchain/check/testdata/interop/cpp/primitive_types/long_and_long_long.lp64.carbon +++ b/toolchain/check/testdata/interop/cpp/primitive_types/long_and_long_long.lp64.carbon @@ -640,6 +640,7 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %i64: type = class_type @Int, @Int(%int_64) [concrete] // CHECK:STDOUT: %pattern_type.f57: type = pattern_type %i64 [concrete] +// CHECK:STDOUT: %cpp_long.patt: %pattern_type.f57 = value_binding_pattern cpp_long [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.221: type = facet_type <@ImplicitAs, @ImplicitAs(%i64)> [concrete] // CHECK:STDOUT: %To.fe9: Core.IntLiteral = symbolic_binding To, 0 [symbolic] @@ -659,6 +660,7 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.a1b, @Core.IntLiteral.as.ImplicitAs.impl.Convert.1(%int_64) [concrete] // CHECK:STDOUT: %bound_method.c5e: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_1.d98: %i64 = int_value 1 [concrete] +// CHECK:STDOUT: %carbon_long.patt: %pattern_type.f57 = value_binding_pattern carbon_long [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %f32.c73: type = class_type @Float, @Float(%int_32) [concrete] // CHECK:STDOUT: %As.type.998: type = facet_type <@As, @As(%i64)> [concrete] @@ -685,6 +687,8 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %array_type: type = array_type %int_1.5b8, %f32.c73 [concrete] // CHECK:STDOUT: %f32.9b3: type = float_type %int_32, f32 [concrete] // CHECK:STDOUT: %pattern_type.18b: type = pattern_type %array_type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.18b = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.18b = var_pattern %a.patt [concrete] // CHECK:STDOUT: %float.6da: Core.FloatLiteral = float_literal_value 10e-1 [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (Core.FloatLiteral) [concrete] // CHECK:STDOUT: %tuple: %tuple.type = tuple_value (%float.6da) [concrete] @@ -725,14 +729,9 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %cpp_long.patt: %pattern_type.f57 = value_binding_pattern cpp_long [concrete] +// CHECK:STDOUT: %cpp_long.patt: %pattern_type.f57 = value_binding_pattern cpp_long [concrete = constants.%cpp_long.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1.loc8: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] -// CHECK:STDOUT: %.loc8_20: type = splice_block %long.ref.loc8 [concrete = constants.%i64] { -// CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: -// CHECK:STDOUT: %long.ref.loc8: type = name_ref long, %i64.2 [concrete = constants.%i64] -// CHECK:STDOUT: } // CHECK:STDOUT: %impl.elem0.loc8: %.f34 = impl_witness_access constants.%ImplicitAs.impl_witness.091, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.a1b] // CHECK:STDOUT: %bound_method.loc8_28.1: = bound_method %int_1.loc8, %impl.elem0.loc8 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] // CHECK:STDOUT: %specific_fn.loc8: = specific_function %impl.elem0.loc8, @Core.IntLiteral.as.ImplicitAs.impl.Convert.1(constants.%int_64) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] @@ -740,16 +739,21 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call: init %i64 = call %bound_method.loc8_28.2(%int_1.loc8) [concrete = constants.%int_1.d98] // CHECK:STDOUT: %.loc8_28.1: %i64 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_1.d98] // CHECK:STDOUT: %.loc8_28.2: %i64 = converted %int_1.loc8, %.loc8_28.1 [concrete = constants.%int_1.d98] +// CHECK:STDOUT: %.loc8_20: type = splice_block %long.ref.loc8 [concrete = constants.%i64] { +// CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: +// CHECK:STDOUT: %long.ref.loc8: type = name_ref long, %i64.2 [concrete = constants.%i64] +// CHECK:STDOUT: } // CHECK:STDOUT: %cpp_long: %i64 = value_binding cpp_long, %.loc8_28.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %carbon_long.patt: %pattern_type.f57 = value_binding_pattern carbon_long [concrete] +// CHECK:STDOUT: %carbon_long.patt: %pattern_type.f57 = value_binding_pattern carbon_long [concrete = constants.%carbon_long.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %cpp_long.ref: %i64 = name_ref cpp_long, %cpp_long // CHECK:STDOUT: %i64.loc9: type = type_literal constants.%i64 [concrete = constants.%i64] // CHECK:STDOUT: %carbon_long: %i64 = value_binding carbon_long, %cpp_long.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.18b = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.18b = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.18b = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.18b = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type = var %a.var_patt // CHECK:STDOUT: %float: Core.FloatLiteral = float_literal_value 10e-1 [concrete = constants.%float.6da] @@ -813,6 +817,7 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %u64: type = class_type @UInt, @UInt(%int_64) [concrete] // CHECK:STDOUT: %pattern_type.b35: type = pattern_type %u64 [concrete] +// CHECK:STDOUT: %cpp_unsigned_long.patt: %pattern_type.b35 = value_binding_pattern cpp_unsigned_long [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.14f: type = facet_type <@ImplicitAs, @ImplicitAs(%u64)> [concrete] // CHECK:STDOUT: %To.fe9: Core.IntLiteral = symbolic_binding To, 0 [symbolic] @@ -832,6 +837,7 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.633, @Core.IntLiteral.as.ImplicitAs.impl.Convert.1(%int_64) [concrete] // CHECK:STDOUT: %bound_method.7e7: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_1.01f: %u64 = int_value 1 [concrete] +// CHECK:STDOUT: %carbon_unsigned_long.patt: %pattern_type.b35 = value_binding_pattern carbon_unsigned_long [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %f32.c73: type = class_type @Float, @Float(%int_32) [concrete] // CHECK:STDOUT: %As.type.72f: type = facet_type <@As, @As(%u64)> [concrete] @@ -858,6 +864,8 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %array_type: type = array_type %int_1.5b8, %f32.c73 [concrete] // CHECK:STDOUT: %f32.9b3: type = float_type %int_32, f32 [concrete] // CHECK:STDOUT: %pattern_type.18b: type = pattern_type %array_type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.18b = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.18b = var_pattern %a.patt [concrete] // CHECK:STDOUT: %float.6da: Core.FloatLiteral = float_literal_value 10e-1 [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (Core.FloatLiteral) [concrete] // CHECK:STDOUT: %tuple: %tuple.type = tuple_value (%float.6da) [concrete] @@ -898,14 +906,9 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %cpp_unsigned_long.patt: %pattern_type.b35 = value_binding_pattern cpp_unsigned_long [concrete] +// CHECK:STDOUT: %cpp_unsigned_long.patt: %pattern_type.b35 = value_binding_pattern cpp_unsigned_long [concrete = constants.%cpp_unsigned_long.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1.loc8: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] -// CHECK:STDOUT: %.loc8_29: type = splice_block %unsigned_long.ref.loc8 [concrete = constants.%u64] { -// CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: -// CHECK:STDOUT: %unsigned_long.ref.loc8: type = name_ref unsigned_long, %u64.2 [concrete = constants.%u64] -// CHECK:STDOUT: } // CHECK:STDOUT: %impl.elem0.loc8: %.93e = impl_witness_access constants.%ImplicitAs.impl_witness.9c4, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.633] // CHECK:STDOUT: %bound_method.loc8_46.1: = bound_method %int_1.loc8, %impl.elem0.loc8 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] // CHECK:STDOUT: %specific_fn.loc8: = specific_function %impl.elem0.loc8, @Core.IntLiteral.as.ImplicitAs.impl.Convert.1(constants.%int_64) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] @@ -913,16 +916,21 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call: init %u64 = call %bound_method.loc8_46.2(%int_1.loc8) [concrete = constants.%int_1.01f] // CHECK:STDOUT: %.loc8_46.1: %u64 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_1.01f] // CHECK:STDOUT: %.loc8_46.2: %u64 = converted %int_1.loc8, %.loc8_46.1 [concrete = constants.%int_1.01f] +// CHECK:STDOUT: %.loc8_29: type = splice_block %unsigned_long.ref.loc8 [concrete = constants.%u64] { +// CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: +// CHECK:STDOUT: %unsigned_long.ref.loc8: type = name_ref unsigned_long, %u64.2 [concrete = constants.%u64] +// CHECK:STDOUT: } // CHECK:STDOUT: %cpp_unsigned_long: %u64 = value_binding cpp_unsigned_long, %.loc8_46.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %carbon_unsigned_long.patt: %pattern_type.b35 = value_binding_pattern carbon_unsigned_long [concrete] +// CHECK:STDOUT: %carbon_unsigned_long.patt: %pattern_type.b35 = value_binding_pattern carbon_unsigned_long [concrete = constants.%carbon_unsigned_long.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %cpp_unsigned_long.ref: %u64 = name_ref cpp_unsigned_long, %cpp_unsigned_long // CHECK:STDOUT: %u64.loc9: type = type_literal constants.%u64 [concrete = constants.%u64] // CHECK:STDOUT: %carbon_unsigned_long: %u64 = value_binding carbon_unsigned_long, %cpp_unsigned_long.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.18b = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.18b = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.18b = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.18b = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type = var %a.var_patt // CHECK:STDOUT: %float: Core.FloatLiteral = float_literal_value 10e-1 [concrete = constants.%float.6da] @@ -989,6 +997,7 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %i64: type = class_type @Int, @Int(%int_64) [concrete] // CHECK:STDOUT: %pattern_type.d58: type = pattern_type %Cpp.long_long [concrete] +// CHECK:STDOUT: %cpp_long_long.patt: %pattern_type.d58 = value_binding_pattern cpp_long_long [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -1005,14 +1014,19 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %int_1.b19: %Cpp.long_long = int_value 1 [concrete] // CHECK:STDOUT: %LongLongResult: type = class_type @LongLongResult [concrete] // CHECK:STDOUT: %pattern_type.357: type = pattern_type %LongLongResult [concrete] +// CHECK:STDOUT: %cpp_long_long_result.patt: %pattern_type.357 = value_binding_pattern cpp_long_long_result [concrete] // CHECK:STDOUT: %PassLongLong.cpp_overload_set.type: type = cpp_overload_set_type @PassLongLong.cpp_overload_set [concrete] // CHECK:STDOUT: %PassLongLong.cpp_overload_set.value: %PassLongLong.cpp_overload_set.type = cpp_overload_set_value @PassLongLong.cpp_overload_set [concrete] // CHECK:STDOUT: %ptr.662: type = ptr_type %LongLongResult [concrete] // CHECK:STDOUT: %PassLongLong__carbon_thunk.type.4c6a2a.1: type = fn_type @PassLongLong__carbon_thunk.1 [concrete] // CHECK:STDOUT: %PassLongLong__carbon_thunk.8eb04c.1: %PassLongLong__carbon_thunk.type.4c6a2a.1 = struct_value () [concrete] +// CHECK:STDOUT: %cpp_compat_long_long.patt: %pattern_type.d58 = value_binding_pattern cpp_compat_long_long [concrete] +// CHECK:STDOUT: %cpp_compat_long_long_result.patt: %pattern_type.357 = value_binding_pattern cpp_compat_long_long_result [concrete] // CHECK:STDOUT: %pattern_type.f57: type = pattern_type %i64 [concrete] +// CHECK:STDOUT: %carbon_i64.patt: %pattern_type.f57 = value_binding_pattern carbon_i64 [concrete] // CHECK:STDOUT: %LongResult: type = class_type @LongResult [concrete] // CHECK:STDOUT: %pattern_type.ae7: type = pattern_type %LongResult [concrete] +// CHECK:STDOUT: %carbon_i64_result.patt: %pattern_type.ae7 = value_binding_pattern carbon_i64_result [concrete] // CHECK:STDOUT: %ptr.aec: type = ptr_type %LongResult [concrete] // CHECK:STDOUT: %PassLongLong__carbon_thunk.type.4c6a2a.2: type = fn_type @PassLongLong__carbon_thunk.2 [concrete] // CHECK:STDOUT: %PassLongLong__carbon_thunk.8eb04c.2: %PassLongLong__carbon_thunk.type.4c6a2a.2 = struct_value () [concrete] @@ -1039,6 +1053,8 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %array_type: type = array_type %int_1.5b8, %f32.c73 [concrete] // CHECK:STDOUT: %f32.9b3: type = float_type %int_32, f32 [concrete] // CHECK:STDOUT: %pattern_type.18b: type = pattern_type %array_type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.18b = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.18b = var_pattern %a.patt [concrete] // CHECK:STDOUT: %float.6da: Core.FloatLiteral = float_literal_value 10e-1 [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (Core.FloatLiteral) [concrete] // CHECK:STDOUT: %tuple: %tuple.type = tuple_value (%float.6da) [concrete] @@ -1122,21 +1138,21 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %cpp_long_long.patt: %pattern_type.d58 = value_binding_pattern cpp_long_long [concrete] +// CHECK:STDOUT: %cpp_long_long.patt: %pattern_type.d58 = value_binding_pattern cpp_long_long [concrete = constants.%cpp_long_long.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1.loc15: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] -// CHECK:STDOUT: %.loc15_25: type = splice_block %long_long.ref.loc15 [concrete = constants.%Cpp.long_long] { -// CHECK:STDOUT: %Cpp.ref.loc15: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %long_long.ref.loc15: type = name_ref long_long, constants.%Cpp.long_long [concrete = constants.%Cpp.long_long] -// CHECK:STDOUT: } // CHECK:STDOUT: %impl.elem0.loc15: %.ca2 = impl_witness_access constants.%ImplicitAs.impl_witness.660, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.3ce] // CHECK:STDOUT: %bound_method.loc15: = bound_method %int_1.loc15, %impl.elem0.loc15 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call: init %Cpp.long_long = call %bound_method.loc15(%int_1.loc15) [concrete = constants.%int_1.b19] // CHECK:STDOUT: %.loc15_38.1: %Cpp.long_long = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_1.b19] // CHECK:STDOUT: %.loc15_38.2: %Cpp.long_long = converted %int_1.loc15, %.loc15_38.1 [concrete = constants.%int_1.b19] +// CHECK:STDOUT: %.loc15_25: type = splice_block %long_long.ref.loc15 [concrete = constants.%Cpp.long_long] { +// CHECK:STDOUT: %Cpp.ref.loc15: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %long_long.ref.loc15: type = name_ref long_long, constants.%Cpp.long_long [concrete = constants.%Cpp.long_long] +// CHECK:STDOUT: } // CHECK:STDOUT: %cpp_long_long: %Cpp.long_long = value_binding cpp_long_long, %.loc15_38.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %cpp_long_long_result.patt: %pattern_type.357 = value_binding_pattern cpp_long_long_result [concrete] +// CHECK:STDOUT: %cpp_long_long_result.patt: %pattern_type.357 = value_binding_pattern cpp_long_long_result [concrete = constants.%cpp_long_long_result.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc16_57: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %PassLongLong.ref.loc16: %PassLongLong.cpp_overload_set.type = name_ref PassLongLong, imports.%PassLongLong.cpp_overload_set.value [concrete = constants.%PassLongLong.cpp_overload_set.value] @@ -1145,15 +1161,15 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %addr.loc16: %ptr.662 = addr_of %.loc16_87.1 // CHECK:STDOUT: %PassLongLong__carbon_thunk.call.loc16: init %empty_tuple.type = call imports.%PassLongLong__carbon_thunk.decl.204cd1.1(%cpp_long_long.ref.loc16, %addr.loc16) // CHECK:STDOUT: %.loc16_87.2: init %LongLongResult to %.loc16_87.1 = mark_in_place_init %PassLongLong__carbon_thunk.call.loc16 +// CHECK:STDOUT: %.loc16_87.3: ref %LongLongResult = temporary %.loc16_87.1, %.loc16_87.2 +// CHECK:STDOUT: %.loc16_87.4: %LongLongResult = acquire_value %.loc16_87.3 // CHECK:STDOUT: %.loc16_39: type = splice_block %LongLongResult.ref.loc16 [concrete = constants.%LongLongResult] { // CHECK:STDOUT: %Cpp.ref.loc16_36: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %LongLongResult.ref.loc16: type = name_ref LongLongResult, imports.%LongLongResult.decl [concrete = constants.%LongLongResult] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc16_87.3: ref %LongLongResult = temporary %.loc16_87.1, %.loc16_87.2 -// CHECK:STDOUT: %.loc16_87.4: %LongLongResult = acquire_value %.loc16_87.3 // CHECK:STDOUT: %cpp_long_long_result: %LongLongResult = value_binding cpp_long_long_result, %.loc16_87.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %cpp_compat_long_long.patt: %pattern_type.d58 = value_binding_pattern cpp_compat_long_long [concrete] +// CHECK:STDOUT: %cpp_compat_long_long.patt: %pattern_type.d58 = value_binding_pattern cpp_compat_long_long [concrete = constants.%cpp_compat_long_long.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %cpp_long_long.ref.loc18: %Cpp.long_long = name_ref cpp_long_long, %cpp_long_long // CHECK:STDOUT: %.loc18: type = splice_block %LongLong64.ref [concrete = constants.%Cpp.long_long] { @@ -1163,7 +1179,7 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: } // CHECK:STDOUT: %cpp_compat_long_long: %Cpp.long_long = value_binding cpp_compat_long_long, %cpp_long_long.ref.loc18 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %cpp_compat_long_long_result.patt: %pattern_type.357 = value_binding_pattern cpp_compat_long_long_result [concrete] +// CHECK:STDOUT: %cpp_compat_long_long_result.patt: %pattern_type.357 = value_binding_pattern cpp_compat_long_long_result [concrete = constants.%cpp_compat_long_long_result.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc19_64: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %PassLongLong.ref.loc19: %PassLongLong.cpp_overload_set.type = name_ref PassLongLong, imports.%PassLongLong.cpp_overload_set.value [concrete = constants.%PassLongLong.cpp_overload_set.value] @@ -1172,15 +1188,15 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %addr.loc19: %ptr.662 = addr_of %.loc19_101.1 // CHECK:STDOUT: %PassLongLong__carbon_thunk.call.loc19: init %empty_tuple.type = call imports.%PassLongLong__carbon_thunk.decl.204cd1.1(%cpp_compat_long_long.ref, %addr.loc19) // CHECK:STDOUT: %.loc19_101.2: init %LongLongResult to %.loc19_101.1 = mark_in_place_init %PassLongLong__carbon_thunk.call.loc19 +// CHECK:STDOUT: %.loc19_101.3: ref %LongLongResult = temporary %.loc19_101.1, %.loc19_101.2 +// CHECK:STDOUT: %.loc19_101.4: %LongLongResult = acquire_value %.loc19_101.3 // CHECK:STDOUT: %.loc19_46: type = splice_block %LongLongResult.ref.loc19 [concrete = constants.%LongLongResult] { // CHECK:STDOUT: %Cpp.ref.loc19_43: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %LongLongResult.ref.loc19: type = name_ref LongLongResult, imports.%LongLongResult.decl [concrete = constants.%LongLongResult] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc19_101.3: ref %LongLongResult = temporary %.loc19_101.1, %.loc19_101.2 -// CHECK:STDOUT: %.loc19_101.4: %LongLongResult = acquire_value %.loc19_101.3 // CHECK:STDOUT: %cpp_compat_long_long_result: %LongLongResult = value_binding cpp_compat_long_long_result, %.loc19_101.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %carbon_i64.patt: %pattern_type.f57 = value_binding_pattern carbon_i64 [concrete] +// CHECK:STDOUT: %carbon_i64.patt: %pattern_type.f57 = value_binding_pattern carbon_i64 [concrete = constants.%carbon_i64.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %cpp_long_long.ref.loc21: %Cpp.long_long = name_ref cpp_long_long, %cpp_long_long // CHECK:STDOUT: %i64.loc21_42: type = type_literal constants.%i64 [concrete = constants.%i64] @@ -1189,7 +1205,7 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %i64.loc21_19: type = type_literal constants.%i64 [concrete = constants.%i64] // CHECK:STDOUT: %carbon_i64: %i64 = value_binding carbon_i64, %.loc21_39.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %carbon_i64_result.patt: %pattern_type.ae7 = value_binding_pattern carbon_i64_result [concrete] +// CHECK:STDOUT: %carbon_i64_result.patt: %pattern_type.ae7 = value_binding_pattern carbon_i64_result [concrete = constants.%carbon_i64_result.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc22_50: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %PassLongLong.ref.loc22: %PassLongLong.cpp_overload_set.type = name_ref PassLongLong, imports.%PassLongLong.cpp_overload_set.value [concrete = constants.%PassLongLong.cpp_overload_set.value] @@ -1198,16 +1214,16 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %addr.loc22: %ptr.aec = addr_of %.loc22_77.1 // CHECK:STDOUT: %PassLongLong__carbon_thunk.call.loc22: init %empty_tuple.type = call imports.%PassLongLong__carbon_thunk.decl.204cd1.2(%carbon_i64.ref, %addr.loc22) // CHECK:STDOUT: %.loc22_77.2: init %LongResult to %.loc22_77.1 = mark_in_place_init %PassLongLong__carbon_thunk.call.loc22 +// CHECK:STDOUT: %.loc22_77.3: ref %LongResult = temporary %.loc22_77.1, %.loc22_77.2 +// CHECK:STDOUT: %.loc22_77.4: %LongResult = acquire_value %.loc22_77.3 // CHECK:STDOUT: %.loc22_36: type = splice_block %LongResult.ref [concrete = constants.%LongResult] { // CHECK:STDOUT: %Cpp.ref.loc22_33: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %LongResult.ref: type = name_ref LongResult, imports.%LongResult.decl [concrete = constants.%LongResult] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc22_77.3: ref %LongResult = temporary %.loc22_77.1, %.loc22_77.2 -// CHECK:STDOUT: %.loc22_77.4: %LongResult = acquire_value %.loc22_77.3 // CHECK:STDOUT: %carbon_i64_result: %LongResult = value_binding carbon_i64_result, %.loc22_77.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.18b = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.18b = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.18b = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.18b = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type = var %a.var_patt // CHECK:STDOUT: %float: Core.FloatLiteral = float_literal_value 10e-1 [concrete = constants.%float.6da] @@ -1274,6 +1290,8 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %i64: type = class_type @Int, @Int(%int_64) [concrete] // CHECK:STDOUT: %i64.builtin: type = int_type signed, %int_64 [concrete] // CHECK:STDOUT: %pattern_type.d58: type = pattern_type %Cpp.long_long [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.d58 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.d58 = var_pattern %a.patt [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ec: type = facet_type <@ImplicitAs, @ImplicitAs(%Cpp.long_long)> [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -1285,6 +1303,8 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type = struct_value () [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert [concrete] // CHECK:STDOUT: %int_1.b19: %Cpp.long_long = int_value 1 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.d58 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.d58 = var_pattern %b.patt [concrete] // CHECK:STDOUT: %Copy.impl_witness.5c7: = impl_witness imports.%Copy.impl_witness_table.a14 [concrete] // CHECK:STDOUT: %Copy.facet: %Copy.type = facet_value %Cpp.long_long, (%Copy.impl_witness.5c7) [concrete] // CHECK:STDOUT: %Copy.WithSelf.Op.type.4bd: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet) [concrete] @@ -1309,8 +1329,8 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: fn @CopyLongLong() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.d58 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.d58 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.d58 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.d58 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %Cpp.long_long = var %a.var_patt // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -1325,8 +1345,8 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %Cpp.long_long = ref_binding a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.d58 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.d58 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.d58 = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type.d58 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %Cpp.long_long = var %b.var_patt // CHECK:STDOUT: %a.ref: ref %Cpp.long_long = name_ref a, %a @@ -1364,6 +1384,7 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: constants { // CHECK:STDOUT: %Cpp.long_long: type = class_type @LongLong64 [concrete] // CHECK:STDOUT: %pattern_type.d58: type = pattern_type %Cpp.long_long [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.d58 = value_binding_pattern a [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ec: type = facet_type <@ImplicitAs, @ImplicitAs(%Cpp.long_long)> [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.660: = impl_witness imports.%ImplicitAs.impl_witness_table.d6d [concrete] @@ -1374,6 +1395,7 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type = struct_value () [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert [concrete] // CHECK:STDOUT: %int_1.b19: %Cpp.long_long = int_value 1 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.d58 = value_binding_pattern b [concrete] // CHECK:STDOUT: %EqWith.type.9fc: type = facet_type <@EqWith, @EqWith(%Cpp.long_long)> [concrete] // CHECK:STDOUT: %EqWith.impl_witness.77a: = impl_witness imports.%EqWith.impl_witness_table.ed1 [concrete] // CHECK:STDOUT: %EqWith.facet.757: %EqWith.type.9fc = facet_value %Cpp.long_long, (%EqWith.impl_witness.77a) [concrete] @@ -1414,8 +1436,8 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %Core.import_ref.06c: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.d6d = impl_witness_table (%Core.import_ref.06c), @Core.IntLiteral.as.ImplicitAs.impl.e33 [concrete] // CHECK:STDOUT: %Core.import_ref.a87: %Cpp.long_long.as.EqWith.impl.Equal.type.78c = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [concrete = constants.%Cpp.long_long.as.EqWith.impl.Equal.1ca] -// CHECK:STDOUT: %Core.import_ref.adc9: %Cpp.long_long.as.EqWith.impl.NotEqual.type.8e5 = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [concrete = constants.%Cpp.long_long.as.EqWith.impl.NotEqual.a6a] -// CHECK:STDOUT: %EqWith.impl_witness_table.ed1 = impl_witness_table (%Core.import_ref.a87, %Core.import_ref.adc9), @Cpp.long_long.as.EqWith.impl.eaa [concrete] +// CHECK:STDOUT: %Core.import_ref.adc9b: %Cpp.long_long.as.EqWith.impl.NotEqual.type.8e5 = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [concrete = constants.%Cpp.long_long.as.EqWith.impl.NotEqual.a6a] +// CHECK:STDOUT: %EqWith.impl_witness_table.ed1 = impl_witness_table (%Core.import_ref.a87, %Core.import_ref.adc9b), @Cpp.long_long.as.EqWith.impl.eaa [concrete] // CHECK:STDOUT: %Core.import_ref.0e8: %Cpp.long_long.as.OrderedWith.impl.Less.type.335 = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.Less.606] // CHECK:STDOUT: %Core.import_ref.757: %Cpp.long_long.as.OrderedWith.impl.LessOrEquivalent.type.42c = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.LessOrEquivalent.0c8] // CHECK:STDOUT: %Core.import_ref.c32c: %Cpp.long_long.as.OrderedWith.impl.Greater.type.725 = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.Greater.7c8] @@ -1426,32 +1448,32 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: fn @ComparisonsHomogeneousLongLong() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.d58 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.d58 = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1.loc8: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] -// CHECK:STDOUT: %.loc8_13: type = splice_block %long_long.ref.loc8 [concrete = constants.%Cpp.long_long] { -// CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %long_long.ref.loc8: type = name_ref long_long, constants.%Cpp.long_long [concrete = constants.%Cpp.long_long] -// CHECK:STDOUT: } // CHECK:STDOUT: %impl.elem0.loc8: %.ca2 = impl_witness_access constants.%ImplicitAs.impl_witness.660, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert] // CHECK:STDOUT: %bound_method.loc8: = bound_method %int_1.loc8, %impl.elem0.loc8 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc8: init %Cpp.long_long = call %bound_method.loc8(%int_1.loc8) [concrete = constants.%int_1.b19] // CHECK:STDOUT: %.loc8_26.1: %Cpp.long_long = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc8 [concrete = constants.%int_1.b19] // CHECK:STDOUT: %.loc8_26.2: %Cpp.long_long = converted %int_1.loc8, %.loc8_26.1 [concrete = constants.%int_1.b19] +// CHECK:STDOUT: %.loc8_13: type = splice_block %long_long.ref.loc8 [concrete = constants.%Cpp.long_long] { +// CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %long_long.ref.loc8: type = name_ref long_long, constants.%Cpp.long_long [concrete = constants.%Cpp.long_long] +// CHECK:STDOUT: } // CHECK:STDOUT: %a: %Cpp.long_long = value_binding a, %.loc8_26.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.d58 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.d58 = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1.loc9: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] -// CHECK:STDOUT: %.loc9_13: type = splice_block %long_long.ref.loc9 [concrete = constants.%Cpp.long_long] { -// CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %long_long.ref.loc9: type = name_ref long_long, constants.%Cpp.long_long [concrete = constants.%Cpp.long_long] -// CHECK:STDOUT: } // CHECK:STDOUT: %impl.elem0.loc9: %.ca2 = impl_witness_access constants.%ImplicitAs.impl_witness.660, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert] // CHECK:STDOUT: %bound_method.loc9: = bound_method %int_1.loc9, %impl.elem0.loc9 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc9: init %Cpp.long_long = call %bound_method.loc9(%int_1.loc9) [concrete = constants.%int_1.b19] // CHECK:STDOUT: %.loc9_26.1: %Cpp.long_long = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc9 [concrete = constants.%int_1.b19] // CHECK:STDOUT: %.loc9_26.2: %Cpp.long_long = converted %int_1.loc9, %.loc9_26.1 [concrete = constants.%int_1.b19] +// CHECK:STDOUT: %.loc9_13: type = splice_block %long_long.ref.loc9 [concrete = constants.%Cpp.long_long] { +// CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %long_long.ref.loc9: type = name_ref long_long, constants.%Cpp.long_long [concrete = constants.%Cpp.long_long] +// CHECK:STDOUT: } // CHECK:STDOUT: %b: %Cpp.long_long = value_binding b, %.loc9_26.2 // CHECK:STDOUT: %a.ref.loc10: %Cpp.long_long = name_ref a, %a // CHECK:STDOUT: %b.ref.loc10: %Cpp.long_long = name_ref b, %b @@ -1494,6 +1516,7 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %Cpp.long_long: type = class_type @LongLong64 [concrete] // CHECK:STDOUT: %pattern_type.d58: type = pattern_type %Cpp.long_long [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.d58 = value_binding_pattern a [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ec: type = facet_type <@ImplicitAs, @ImplicitAs(%Cpp.long_long)> [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.660: = impl_witness imports.%ImplicitAs.impl_witness_table.d6d [concrete] // CHECK:STDOUT: %ImplicitAs.facet.2ed: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.660) [concrete] @@ -1673,29 +1696,31 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.d58 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.d58 = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1.loc9: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] -// CHECK:STDOUT: %.loc9_13: type = splice_block %long_long.ref [concrete = constants.%Cpp.long_long] { -// CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %long_long.ref: type = name_ref long_long, constants.%Cpp.long_long [concrete = constants.%Cpp.long_long] -// CHECK:STDOUT: } // CHECK:STDOUT: %impl.elem0.loc9: %.ca2 = impl_witness_access constants.%ImplicitAs.impl_witness.660, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.3ce] // CHECK:STDOUT: %bound_method.loc9: = bound_method %int_1.loc9, %impl.elem0.loc9 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.5d7] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc9: init %Cpp.long_long = call %bound_method.loc9(%int_1.loc9) [concrete = constants.%int_1.b19] // CHECK:STDOUT: %.loc9_26.1: %Cpp.long_long = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc9 [concrete = constants.%int_1.b19] // CHECK:STDOUT: %.loc9_26.2: %Cpp.long_long = converted %int_1.loc9, %.loc9_26.1 [concrete = constants.%int_1.b19] +// CHECK:STDOUT: %.loc9_13: type = splice_block %long_long.ref [concrete = constants.%Cpp.long_long] { +// CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %long_long.ref: type = name_ref long_long, constants.%Cpp.long_long [concrete = constants.%Cpp.long_long] +// CHECK:STDOUT: } // CHECK:STDOUT: %a: %Cpp.long_long = value_binding a, %.loc9_26.2 // CHECK:STDOUT: %a.ref.loc10: %Cpp.long_long = name_ref a, %a // CHECK:STDOUT: %b.ref.loc10: %i64 = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc10_5: %.5d2 = impl_witness_access constants.%EqWith.impl_witness.621, element0 [concrete = constants.%Cpp.long_long.as.EqWith.impl.Equal.01ccf4.2] // CHECK:STDOUT: %bound_method.loc10_5.1: = bound_method %a.ref.loc10, %impl.elem0.loc10_5 -// CHECK:STDOUT: %ImplicitAs.facet.loc10: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] -// CHECK:STDOUT: %.loc10_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc10 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc10_5.1: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc10_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc10_5.1 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc10_5.2: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc10_5.2: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc10_5.2 [concrete = constants.%ImplicitAs.facet.7a4] // CHECK:STDOUT: %specific_fn.loc10: = specific_function %impl.elem0.loc10_5, @Cpp.long_long.as.EqWith.impl.Equal.1(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.EqWith.impl.Equal.specific_fn.2dd31b.1] // CHECK:STDOUT: %bound_method.loc10_5.2: = bound_method %a.ref.loc10, %specific_fn.loc10 -// CHECK:STDOUT: %.loc10_5.2: %Cpp.long_long.as.EqWith.impl.Equal.type.73aeb2.1 = specific_constant imports.%Core.Equal.cce, @Cpp.long_long.as.EqWith.impl.600(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.EqWith.impl.Equal.01ccf4.1] -// CHECK:STDOUT: %Equal.ref.loc10: %Cpp.long_long.as.EqWith.impl.Equal.type.73aeb2.1 = name_ref Equal, %.loc10_5.2 [concrete = constants.%Cpp.long_long.as.EqWith.impl.Equal.01ccf4.1] +// CHECK:STDOUT: %.loc10_5.3: %Cpp.long_long.as.EqWith.impl.Equal.type.73aeb2.1 = specific_constant imports.%Core.Equal.cce, @Cpp.long_long.as.EqWith.impl.600(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.EqWith.impl.Equal.01ccf4.1] +// CHECK:STDOUT: %Equal.ref.loc10: %Cpp.long_long.as.EqWith.impl.Equal.type.73aeb2.1 = name_ref Equal, %.loc10_5.3 [concrete = constants.%Cpp.long_long.as.EqWith.impl.Equal.01ccf4.1] // CHECK:STDOUT: %Cpp.long_long.as.EqWith.impl.Equal.bound.loc10: = bound_method %a.ref.loc10, %Equal.ref.loc10 // CHECK:STDOUT: %Cpp.long_long.as.EqWith.impl.Equal.specific_fn.loc10: = specific_function %Equal.ref.loc10, @Cpp.long_long.as.EqWith.impl.Equal.2(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.EqWith.impl.Equal.specific_fn.2dd31b.2] // CHECK:STDOUT: %bound_method.loc10_5.3: = bound_method %a.ref.loc10, %Cpp.long_long.as.EqWith.impl.Equal.specific_fn.loc10 @@ -1709,12 +1734,14 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %b.ref.loc11: %i64 = name_ref b, %b // CHECK:STDOUT: %impl.elem1.loc11: %.c98 = impl_witness_access constants.%EqWith.impl_witness.621, element1 [concrete = constants.%Cpp.long_long.as.EqWith.impl.NotEqual.ac575d.2] // CHECK:STDOUT: %bound_method.loc11_5.1: = bound_method %a.ref.loc11, %impl.elem1.loc11 -// CHECK:STDOUT: %ImplicitAs.facet.loc11: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] -// CHECK:STDOUT: %.loc11_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc11 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc11_5.1: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc11_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc11_5.1 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc11_5.2: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc11_5.2: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc11_5.2 [concrete = constants.%ImplicitAs.facet.7a4] // CHECK:STDOUT: %specific_fn.loc11: = specific_function %impl.elem1.loc11, @Cpp.long_long.as.EqWith.impl.NotEqual.1(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.EqWith.impl.NotEqual.specific_fn.38af67.1] // CHECK:STDOUT: %bound_method.loc11_5.2: = bound_method %a.ref.loc11, %specific_fn.loc11 -// CHECK:STDOUT: %.loc11_5.2: %Cpp.long_long.as.EqWith.impl.NotEqual.type.7f7ea7.1 = specific_constant imports.%Core.NotEqual.422, @Cpp.long_long.as.EqWith.impl.600(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.EqWith.impl.NotEqual.ac575d.1] -// CHECK:STDOUT: %NotEqual.ref.loc11: %Cpp.long_long.as.EqWith.impl.NotEqual.type.7f7ea7.1 = name_ref NotEqual, %.loc11_5.2 [concrete = constants.%Cpp.long_long.as.EqWith.impl.NotEqual.ac575d.1] +// CHECK:STDOUT: %.loc11_5.3: %Cpp.long_long.as.EqWith.impl.NotEqual.type.7f7ea7.1 = specific_constant imports.%Core.NotEqual.422, @Cpp.long_long.as.EqWith.impl.600(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.EqWith.impl.NotEqual.ac575d.1] +// CHECK:STDOUT: %NotEqual.ref.loc11: %Cpp.long_long.as.EqWith.impl.NotEqual.type.7f7ea7.1 = name_ref NotEqual, %.loc11_5.3 [concrete = constants.%Cpp.long_long.as.EqWith.impl.NotEqual.ac575d.1] // CHECK:STDOUT: %Cpp.long_long.as.EqWith.impl.NotEqual.bound.loc11: = bound_method %a.ref.loc11, %NotEqual.ref.loc11 // CHECK:STDOUT: %Cpp.long_long.as.EqWith.impl.NotEqual.specific_fn.loc11: = specific_function %NotEqual.ref.loc11, @Cpp.long_long.as.EqWith.impl.NotEqual.2(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.EqWith.impl.NotEqual.specific_fn.38af67.2] // CHECK:STDOUT: %bound_method.loc11_5.3: = bound_method %a.ref.loc11, %Cpp.long_long.as.EqWith.impl.NotEqual.specific_fn.loc11 @@ -1728,12 +1755,14 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %b.ref.loc12: %i64 = name_ref b, %b // CHECK:STDOUT: %impl.elem2.loc12: %.105 = impl_witness_access constants.%OrderedWith.impl_witness.d8f, element2 [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.Greater.b57b33.2] // CHECK:STDOUT: %bound_method.loc12_5.1: = bound_method %a.ref.loc12, %impl.elem2.loc12 -// CHECK:STDOUT: %ImplicitAs.facet.loc12: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] -// CHECK:STDOUT: %.loc12_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc12 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc12_5.1: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc12_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc12_5.1 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc12_5.2: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc12_5.2: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc12_5.2 [concrete = constants.%ImplicitAs.facet.7a4] // CHECK:STDOUT: %specific_fn.loc12: = specific_function %impl.elem2.loc12, @Cpp.long_long.as.OrderedWith.impl.Greater.1(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.Greater.specific_fn.625b09.1] // CHECK:STDOUT: %bound_method.loc12_5.2: = bound_method %a.ref.loc12, %specific_fn.loc12 -// CHECK:STDOUT: %.loc12_5.2: %Cpp.long_long.as.OrderedWith.impl.Greater.type.88b872.1 = specific_constant imports.%Core.Greater.91c, @Cpp.long_long.as.OrderedWith.impl.deb(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.Greater.b57b33.1] -// CHECK:STDOUT: %Greater.ref.loc12: %Cpp.long_long.as.OrderedWith.impl.Greater.type.88b872.1 = name_ref Greater, %.loc12_5.2 [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.Greater.b57b33.1] +// CHECK:STDOUT: %.loc12_5.3: %Cpp.long_long.as.OrderedWith.impl.Greater.type.88b872.1 = specific_constant imports.%Core.Greater.91c, @Cpp.long_long.as.OrderedWith.impl.deb(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.Greater.b57b33.1] +// CHECK:STDOUT: %Greater.ref.loc12: %Cpp.long_long.as.OrderedWith.impl.Greater.type.88b872.1 = name_ref Greater, %.loc12_5.3 [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.Greater.b57b33.1] // CHECK:STDOUT: %Cpp.long_long.as.OrderedWith.impl.Greater.bound.loc12: = bound_method %a.ref.loc12, %Greater.ref.loc12 // CHECK:STDOUT: %Cpp.long_long.as.OrderedWith.impl.Greater.specific_fn.loc12: = specific_function %Greater.ref.loc12, @Cpp.long_long.as.OrderedWith.impl.Greater.2(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.Greater.specific_fn.625b09.2] // CHECK:STDOUT: %bound_method.loc12_5.3: = bound_method %a.ref.loc12, %Cpp.long_long.as.OrderedWith.impl.Greater.specific_fn.loc12 @@ -1747,12 +1776,14 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %b.ref.loc13: %i64 = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc13_5: %.054 = impl_witness_access constants.%OrderedWith.impl_witness.d8f, element0 [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.Less.844627.2] // CHECK:STDOUT: %bound_method.loc13_5.1: = bound_method %a.ref.loc13, %impl.elem0.loc13_5 -// CHECK:STDOUT: %ImplicitAs.facet.loc13: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] -// CHECK:STDOUT: %.loc13_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc13 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc13_5.1: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc13_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc13_5.1 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc13_5.2: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc13_5.2: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc13_5.2 [concrete = constants.%ImplicitAs.facet.7a4] // CHECK:STDOUT: %specific_fn.loc13: = specific_function %impl.elem0.loc13_5, @Cpp.long_long.as.OrderedWith.impl.Less.1(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.Less.specific_fn.53698d.1] // CHECK:STDOUT: %bound_method.loc13_5.2: = bound_method %a.ref.loc13, %specific_fn.loc13 -// CHECK:STDOUT: %.loc13_5.2: %Cpp.long_long.as.OrderedWith.impl.Less.type.c8dbf2.1 = specific_constant imports.%Core.Less.868, @Cpp.long_long.as.OrderedWith.impl.deb(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.Less.844627.1] -// CHECK:STDOUT: %Less.ref.loc13: %Cpp.long_long.as.OrderedWith.impl.Less.type.c8dbf2.1 = name_ref Less, %.loc13_5.2 [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.Less.844627.1] +// CHECK:STDOUT: %.loc13_5.3: %Cpp.long_long.as.OrderedWith.impl.Less.type.c8dbf2.1 = specific_constant imports.%Core.Less.868, @Cpp.long_long.as.OrderedWith.impl.deb(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.Less.844627.1] +// CHECK:STDOUT: %Less.ref.loc13: %Cpp.long_long.as.OrderedWith.impl.Less.type.c8dbf2.1 = name_ref Less, %.loc13_5.3 [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.Less.844627.1] // CHECK:STDOUT: %Cpp.long_long.as.OrderedWith.impl.Less.bound.loc13: = bound_method %a.ref.loc13, %Less.ref.loc13 // CHECK:STDOUT: %Cpp.long_long.as.OrderedWith.impl.Less.specific_fn.loc13: = specific_function %Less.ref.loc13, @Cpp.long_long.as.OrderedWith.impl.Less.2(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.Less.specific_fn.53698d.2] // CHECK:STDOUT: %bound_method.loc13_5.3: = bound_method %a.ref.loc13, %Cpp.long_long.as.OrderedWith.impl.Less.specific_fn.loc13 @@ -1766,12 +1797,14 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %b.ref.loc14: %i64 = name_ref b, %b // CHECK:STDOUT: %impl.elem3.loc14: %.bb8 = impl_witness_access constants.%OrderedWith.impl_witness.d8f, element3 [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.GreaterOrEquivalent.4798a8.2] // CHECK:STDOUT: %bound_method.loc14_5.1: = bound_method %a.ref.loc14, %impl.elem3.loc14 -// CHECK:STDOUT: %ImplicitAs.facet.loc14: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] -// CHECK:STDOUT: %.loc14_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc14 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc14_5.1: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc14_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc14_5.1 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc14_5.2: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc14_5.2: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc14_5.2 [concrete = constants.%ImplicitAs.facet.7a4] // CHECK:STDOUT: %specific_fn.loc14: = specific_function %impl.elem3.loc14, @Cpp.long_long.as.OrderedWith.impl.GreaterOrEquivalent.1(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.GreaterOrEquivalent.specific_fn.1115b0.1] // CHECK:STDOUT: %bound_method.loc14_5.2: = bound_method %a.ref.loc14, %specific_fn.loc14 -// CHECK:STDOUT: %.loc14_5.2: %Cpp.long_long.as.OrderedWith.impl.GreaterOrEquivalent.type.78fc74.1 = specific_constant imports.%Core.GreaterOrEquivalent.7ba, @Cpp.long_long.as.OrderedWith.impl.deb(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.GreaterOrEquivalent.4798a8.1] -// CHECK:STDOUT: %GreaterOrEquivalent.ref.loc14: %Cpp.long_long.as.OrderedWith.impl.GreaterOrEquivalent.type.78fc74.1 = name_ref GreaterOrEquivalent, %.loc14_5.2 [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.GreaterOrEquivalent.4798a8.1] +// CHECK:STDOUT: %.loc14_5.3: %Cpp.long_long.as.OrderedWith.impl.GreaterOrEquivalent.type.78fc74.1 = specific_constant imports.%Core.GreaterOrEquivalent.7ba, @Cpp.long_long.as.OrderedWith.impl.deb(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.GreaterOrEquivalent.4798a8.1] +// CHECK:STDOUT: %GreaterOrEquivalent.ref.loc14: %Cpp.long_long.as.OrderedWith.impl.GreaterOrEquivalent.type.78fc74.1 = name_ref GreaterOrEquivalent, %.loc14_5.3 [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.GreaterOrEquivalent.4798a8.1] // CHECK:STDOUT: %Cpp.long_long.as.OrderedWith.impl.GreaterOrEquivalent.bound.loc14: = bound_method %a.ref.loc14, %GreaterOrEquivalent.ref.loc14 // CHECK:STDOUT: %Cpp.long_long.as.OrderedWith.impl.GreaterOrEquivalent.specific_fn.loc14: = specific_function %GreaterOrEquivalent.ref.loc14, @Cpp.long_long.as.OrderedWith.impl.GreaterOrEquivalent.2(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.GreaterOrEquivalent.specific_fn.1115b0.2] // CHECK:STDOUT: %bound_method.loc14_5.3: = bound_method %a.ref.loc14, %Cpp.long_long.as.OrderedWith.impl.GreaterOrEquivalent.specific_fn.loc14 @@ -1785,12 +1818,14 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %b.ref.loc15: %i64 = name_ref b, %b // CHECK:STDOUT: %impl.elem1.loc15: %.6e5 = impl_witness_access constants.%OrderedWith.impl_witness.d8f, element1 [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.LessOrEquivalent.ba53b2.2] // CHECK:STDOUT: %bound_method.loc15_5.1: = bound_method %a.ref.loc15, %impl.elem1.loc15 -// CHECK:STDOUT: %ImplicitAs.facet.loc15: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] -// CHECK:STDOUT: %.loc15_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc15 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc15_5.1: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc15_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc15_5.1 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc15_5.2: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc15_5.2: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc15_5.2 [concrete = constants.%ImplicitAs.facet.7a4] // CHECK:STDOUT: %specific_fn.loc15: = specific_function %impl.elem1.loc15, @Cpp.long_long.as.OrderedWith.impl.LessOrEquivalent.1(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.LessOrEquivalent.specific_fn.3cc3f1.1] // CHECK:STDOUT: %bound_method.loc15_5.2: = bound_method %a.ref.loc15, %specific_fn.loc15 -// CHECK:STDOUT: %.loc15_5.2: %Cpp.long_long.as.OrderedWith.impl.LessOrEquivalent.type.128dfd.1 = specific_constant imports.%Core.LessOrEquivalent.211, @Cpp.long_long.as.OrderedWith.impl.deb(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.LessOrEquivalent.ba53b2.1] -// CHECK:STDOUT: %LessOrEquivalent.ref.loc15: %Cpp.long_long.as.OrderedWith.impl.LessOrEquivalent.type.128dfd.1 = name_ref LessOrEquivalent, %.loc15_5.2 [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.LessOrEquivalent.ba53b2.1] +// CHECK:STDOUT: %.loc15_5.3: %Cpp.long_long.as.OrderedWith.impl.LessOrEquivalent.type.128dfd.1 = specific_constant imports.%Core.LessOrEquivalent.211, @Cpp.long_long.as.OrderedWith.impl.deb(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.LessOrEquivalent.ba53b2.1] +// CHECK:STDOUT: %LessOrEquivalent.ref.loc15: %Cpp.long_long.as.OrderedWith.impl.LessOrEquivalent.type.128dfd.1 = name_ref LessOrEquivalent, %.loc15_5.3 [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.LessOrEquivalent.ba53b2.1] // CHECK:STDOUT: %Cpp.long_long.as.OrderedWith.impl.LessOrEquivalent.bound.loc15: = bound_method %a.ref.loc15, %LessOrEquivalent.ref.loc15 // CHECK:STDOUT: %Cpp.long_long.as.OrderedWith.impl.LessOrEquivalent.specific_fn.loc15: = specific_function %LessOrEquivalent.ref.loc15, @Cpp.long_long.as.OrderedWith.impl.LessOrEquivalent.2(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.LessOrEquivalent.specific_fn.3cc3f1.2] // CHECK:STDOUT: %bound_method.loc15_5.3: = bound_method %a.ref.loc15, %Cpp.long_long.as.OrderedWith.impl.LessOrEquivalent.specific_fn.loc15 @@ -1804,12 +1839,14 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %int_1.loc17: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %impl.elem0.loc17_5: %.590 = impl_witness_access constants.%EqWith.impl_witness.fa6, element0 [concrete = constants.%Cpp.long_long.as.EqWith.impl.Equal.f6cc6a.2] // CHECK:STDOUT: %bound_method.loc17_5.1: = bound_method %a.ref.loc17, %impl.elem0.loc17_5 -// CHECK:STDOUT: %ImplicitAs.facet.loc17: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.660) [concrete = constants.%ImplicitAs.facet.2ed] -// CHECK:STDOUT: %.loc17_5.1: %ImplicitAs.type.0ec = converted Core.IntLiteral, %ImplicitAs.facet.loc17 [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %ImplicitAs.facet.loc17_5.1: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.660) [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %.loc17_5.1: %ImplicitAs.type.0ec = converted Core.IntLiteral, %ImplicitAs.facet.loc17_5.1 [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %ImplicitAs.facet.loc17_5.2: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.660) [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %.loc17_5.2: %ImplicitAs.type.0ec = converted Core.IntLiteral, %ImplicitAs.facet.loc17_5.2 [concrete = constants.%ImplicitAs.facet.2ed] // CHECK:STDOUT: %specific_fn.loc17: = specific_function %impl.elem0.loc17_5, @Cpp.long_long.as.EqWith.impl.Equal.1(constants.%ImplicitAs.facet.2ed) [concrete = constants.%Cpp.long_long.as.EqWith.impl.Equal.specific_fn.3ab10a.1] // CHECK:STDOUT: %bound_method.loc17_5.2: = bound_method %a.ref.loc17, %specific_fn.loc17 -// CHECK:STDOUT: %.loc17_5.2: %Cpp.long_long.as.EqWith.impl.Equal.type.520dd9.1 = specific_constant imports.%Core.Equal.cce, @Cpp.long_long.as.EqWith.impl.600(constants.%ImplicitAs.facet.2ed) [concrete = constants.%Cpp.long_long.as.EqWith.impl.Equal.f6cc6a.1] -// CHECK:STDOUT: %Equal.ref.loc17: %Cpp.long_long.as.EqWith.impl.Equal.type.520dd9.1 = name_ref Equal, %.loc17_5.2 [concrete = constants.%Cpp.long_long.as.EqWith.impl.Equal.f6cc6a.1] +// CHECK:STDOUT: %.loc17_5.3: %Cpp.long_long.as.EqWith.impl.Equal.type.520dd9.1 = specific_constant imports.%Core.Equal.cce, @Cpp.long_long.as.EqWith.impl.600(constants.%ImplicitAs.facet.2ed) [concrete = constants.%Cpp.long_long.as.EqWith.impl.Equal.f6cc6a.1] +// CHECK:STDOUT: %Equal.ref.loc17: %Cpp.long_long.as.EqWith.impl.Equal.type.520dd9.1 = name_ref Equal, %.loc17_5.3 [concrete = constants.%Cpp.long_long.as.EqWith.impl.Equal.f6cc6a.1] // CHECK:STDOUT: %Cpp.long_long.as.EqWith.impl.Equal.bound.loc17: = bound_method %a.ref.loc17, %Equal.ref.loc17 // CHECK:STDOUT: %Cpp.long_long.as.EqWith.impl.Equal.specific_fn.loc17: = specific_function %Equal.ref.loc17, @Cpp.long_long.as.EqWith.impl.Equal.2(constants.%ImplicitAs.facet.2ed) [concrete = constants.%Cpp.long_long.as.EqWith.impl.Equal.specific_fn.3ab10a.2] // CHECK:STDOUT: %bound_method.loc17_5.3: = bound_method %a.ref.loc17, %Cpp.long_long.as.EqWith.impl.Equal.specific_fn.loc17 @@ -1823,12 +1860,14 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %int_1.loc18: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %impl.elem1.loc18: %.97f = impl_witness_access constants.%EqWith.impl_witness.fa6, element1 [concrete = constants.%Cpp.long_long.as.EqWith.impl.NotEqual.06262e.2] // CHECK:STDOUT: %bound_method.loc18_5.1: = bound_method %a.ref.loc18, %impl.elem1.loc18 -// CHECK:STDOUT: %ImplicitAs.facet.loc18: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.660) [concrete = constants.%ImplicitAs.facet.2ed] -// CHECK:STDOUT: %.loc18_5.1: %ImplicitAs.type.0ec = converted Core.IntLiteral, %ImplicitAs.facet.loc18 [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %ImplicitAs.facet.loc18_5.1: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.660) [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %.loc18_5.1: %ImplicitAs.type.0ec = converted Core.IntLiteral, %ImplicitAs.facet.loc18_5.1 [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %ImplicitAs.facet.loc18_5.2: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.660) [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %.loc18_5.2: %ImplicitAs.type.0ec = converted Core.IntLiteral, %ImplicitAs.facet.loc18_5.2 [concrete = constants.%ImplicitAs.facet.2ed] // CHECK:STDOUT: %specific_fn.loc18: = specific_function %impl.elem1.loc18, @Cpp.long_long.as.EqWith.impl.NotEqual.1(constants.%ImplicitAs.facet.2ed) [concrete = constants.%Cpp.long_long.as.EqWith.impl.NotEqual.specific_fn.8d8af1.1] // CHECK:STDOUT: %bound_method.loc18_5.2: = bound_method %a.ref.loc18, %specific_fn.loc18 -// CHECK:STDOUT: %.loc18_5.2: %Cpp.long_long.as.EqWith.impl.NotEqual.type.dc208e.1 = specific_constant imports.%Core.NotEqual.422, @Cpp.long_long.as.EqWith.impl.600(constants.%ImplicitAs.facet.2ed) [concrete = constants.%Cpp.long_long.as.EqWith.impl.NotEqual.06262e.1] -// CHECK:STDOUT: %NotEqual.ref.loc18: %Cpp.long_long.as.EqWith.impl.NotEqual.type.dc208e.1 = name_ref NotEqual, %.loc18_5.2 [concrete = constants.%Cpp.long_long.as.EqWith.impl.NotEqual.06262e.1] +// CHECK:STDOUT: %.loc18_5.3: %Cpp.long_long.as.EqWith.impl.NotEqual.type.dc208e.1 = specific_constant imports.%Core.NotEqual.422, @Cpp.long_long.as.EqWith.impl.600(constants.%ImplicitAs.facet.2ed) [concrete = constants.%Cpp.long_long.as.EqWith.impl.NotEqual.06262e.1] +// CHECK:STDOUT: %NotEqual.ref.loc18: %Cpp.long_long.as.EqWith.impl.NotEqual.type.dc208e.1 = name_ref NotEqual, %.loc18_5.3 [concrete = constants.%Cpp.long_long.as.EqWith.impl.NotEqual.06262e.1] // CHECK:STDOUT: %Cpp.long_long.as.EqWith.impl.NotEqual.bound.loc18: = bound_method %a.ref.loc18, %NotEqual.ref.loc18 // CHECK:STDOUT: %Cpp.long_long.as.EqWith.impl.NotEqual.specific_fn.loc18: = specific_function %NotEqual.ref.loc18, @Cpp.long_long.as.EqWith.impl.NotEqual.2(constants.%ImplicitAs.facet.2ed) [concrete = constants.%Cpp.long_long.as.EqWith.impl.NotEqual.specific_fn.8d8af1.2] // CHECK:STDOUT: %bound_method.loc18_5.3: = bound_method %a.ref.loc18, %Cpp.long_long.as.EqWith.impl.NotEqual.specific_fn.loc18 @@ -1842,12 +1881,14 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %int_1.loc19: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %impl.elem2.loc19: %.671 = impl_witness_access constants.%OrderedWith.impl_witness.784, element2 [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.Greater.a43ce7.2] // CHECK:STDOUT: %bound_method.loc19_5.1: = bound_method %a.ref.loc19, %impl.elem2.loc19 -// CHECK:STDOUT: %ImplicitAs.facet.loc19: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.660) [concrete = constants.%ImplicitAs.facet.2ed] -// CHECK:STDOUT: %.loc19_5.1: %ImplicitAs.type.0ec = converted Core.IntLiteral, %ImplicitAs.facet.loc19 [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %ImplicitAs.facet.loc19_5.1: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.660) [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %.loc19_5.1: %ImplicitAs.type.0ec = converted Core.IntLiteral, %ImplicitAs.facet.loc19_5.1 [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %ImplicitAs.facet.loc19_5.2: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.660) [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %.loc19_5.2: %ImplicitAs.type.0ec = converted Core.IntLiteral, %ImplicitAs.facet.loc19_5.2 [concrete = constants.%ImplicitAs.facet.2ed] // CHECK:STDOUT: %specific_fn.loc19: = specific_function %impl.elem2.loc19, @Cpp.long_long.as.OrderedWith.impl.Greater.1(constants.%ImplicitAs.facet.2ed) [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.Greater.specific_fn.50a98d.1] // CHECK:STDOUT: %bound_method.loc19_5.2: = bound_method %a.ref.loc19, %specific_fn.loc19 -// CHECK:STDOUT: %.loc19_5.2: %Cpp.long_long.as.OrderedWith.impl.Greater.type.f8fc10.1 = specific_constant imports.%Core.Greater.91c, @Cpp.long_long.as.OrderedWith.impl.deb(constants.%ImplicitAs.facet.2ed) [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.Greater.a43ce7.1] -// CHECK:STDOUT: %Greater.ref.loc19: %Cpp.long_long.as.OrderedWith.impl.Greater.type.f8fc10.1 = name_ref Greater, %.loc19_5.2 [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.Greater.a43ce7.1] +// CHECK:STDOUT: %.loc19_5.3: %Cpp.long_long.as.OrderedWith.impl.Greater.type.f8fc10.1 = specific_constant imports.%Core.Greater.91c, @Cpp.long_long.as.OrderedWith.impl.deb(constants.%ImplicitAs.facet.2ed) [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.Greater.a43ce7.1] +// CHECK:STDOUT: %Greater.ref.loc19: %Cpp.long_long.as.OrderedWith.impl.Greater.type.f8fc10.1 = name_ref Greater, %.loc19_5.3 [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.Greater.a43ce7.1] // CHECK:STDOUT: %Cpp.long_long.as.OrderedWith.impl.Greater.bound.loc19: = bound_method %a.ref.loc19, %Greater.ref.loc19 // CHECK:STDOUT: %Cpp.long_long.as.OrderedWith.impl.Greater.specific_fn.loc19: = specific_function %Greater.ref.loc19, @Cpp.long_long.as.OrderedWith.impl.Greater.2(constants.%ImplicitAs.facet.2ed) [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.Greater.specific_fn.50a98d.2] // CHECK:STDOUT: %bound_method.loc19_5.3: = bound_method %a.ref.loc19, %Cpp.long_long.as.OrderedWith.impl.Greater.specific_fn.loc19 @@ -1861,12 +1902,14 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %int_1.loc20: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %impl.elem0.loc20_5: %.168 = impl_witness_access constants.%OrderedWith.impl_witness.784, element0 [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.Less.7bb755.2] // CHECK:STDOUT: %bound_method.loc20_5.1: = bound_method %a.ref.loc20, %impl.elem0.loc20_5 -// CHECK:STDOUT: %ImplicitAs.facet.loc20: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.660) [concrete = constants.%ImplicitAs.facet.2ed] -// CHECK:STDOUT: %.loc20_5.1: %ImplicitAs.type.0ec = converted Core.IntLiteral, %ImplicitAs.facet.loc20 [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %ImplicitAs.facet.loc20_5.1: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.660) [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %.loc20_5.1: %ImplicitAs.type.0ec = converted Core.IntLiteral, %ImplicitAs.facet.loc20_5.1 [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %ImplicitAs.facet.loc20_5.2: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.660) [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %.loc20_5.2: %ImplicitAs.type.0ec = converted Core.IntLiteral, %ImplicitAs.facet.loc20_5.2 [concrete = constants.%ImplicitAs.facet.2ed] // CHECK:STDOUT: %specific_fn.loc20: = specific_function %impl.elem0.loc20_5, @Cpp.long_long.as.OrderedWith.impl.Less.1(constants.%ImplicitAs.facet.2ed) [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.Less.specific_fn.ac6947.1] // CHECK:STDOUT: %bound_method.loc20_5.2: = bound_method %a.ref.loc20, %specific_fn.loc20 -// CHECK:STDOUT: %.loc20_5.2: %Cpp.long_long.as.OrderedWith.impl.Less.type.29a8c5.1 = specific_constant imports.%Core.Less.868, @Cpp.long_long.as.OrderedWith.impl.deb(constants.%ImplicitAs.facet.2ed) [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.Less.7bb755.1] -// CHECK:STDOUT: %Less.ref.loc20: %Cpp.long_long.as.OrderedWith.impl.Less.type.29a8c5.1 = name_ref Less, %.loc20_5.2 [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.Less.7bb755.1] +// CHECK:STDOUT: %.loc20_5.3: %Cpp.long_long.as.OrderedWith.impl.Less.type.29a8c5.1 = specific_constant imports.%Core.Less.868, @Cpp.long_long.as.OrderedWith.impl.deb(constants.%ImplicitAs.facet.2ed) [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.Less.7bb755.1] +// CHECK:STDOUT: %Less.ref.loc20: %Cpp.long_long.as.OrderedWith.impl.Less.type.29a8c5.1 = name_ref Less, %.loc20_5.3 [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.Less.7bb755.1] // CHECK:STDOUT: %Cpp.long_long.as.OrderedWith.impl.Less.bound.loc20: = bound_method %a.ref.loc20, %Less.ref.loc20 // CHECK:STDOUT: %Cpp.long_long.as.OrderedWith.impl.Less.specific_fn.loc20: = specific_function %Less.ref.loc20, @Cpp.long_long.as.OrderedWith.impl.Less.2(constants.%ImplicitAs.facet.2ed) [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.Less.specific_fn.ac6947.2] // CHECK:STDOUT: %bound_method.loc20_5.3: = bound_method %a.ref.loc20, %Cpp.long_long.as.OrderedWith.impl.Less.specific_fn.loc20 @@ -1880,12 +1923,14 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %int_1.loc21: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %impl.elem3.loc21: %.db2 = impl_witness_access constants.%OrderedWith.impl_witness.784, element3 [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.GreaterOrEquivalent.2b5b9d.2] // CHECK:STDOUT: %bound_method.loc21_5.1: = bound_method %a.ref.loc21, %impl.elem3.loc21 -// CHECK:STDOUT: %ImplicitAs.facet.loc21: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.660) [concrete = constants.%ImplicitAs.facet.2ed] -// CHECK:STDOUT: %.loc21_5.1: %ImplicitAs.type.0ec = converted Core.IntLiteral, %ImplicitAs.facet.loc21 [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %ImplicitAs.facet.loc21_5.1: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.660) [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %.loc21_5.1: %ImplicitAs.type.0ec = converted Core.IntLiteral, %ImplicitAs.facet.loc21_5.1 [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %ImplicitAs.facet.loc21_5.2: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.660) [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %.loc21_5.2: %ImplicitAs.type.0ec = converted Core.IntLiteral, %ImplicitAs.facet.loc21_5.2 [concrete = constants.%ImplicitAs.facet.2ed] // CHECK:STDOUT: %specific_fn.loc21: = specific_function %impl.elem3.loc21, @Cpp.long_long.as.OrderedWith.impl.GreaterOrEquivalent.1(constants.%ImplicitAs.facet.2ed) [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.GreaterOrEquivalent.specific_fn.32ac6e.1] // CHECK:STDOUT: %bound_method.loc21_5.2: = bound_method %a.ref.loc21, %specific_fn.loc21 -// CHECK:STDOUT: %.loc21_5.2: %Cpp.long_long.as.OrderedWith.impl.GreaterOrEquivalent.type.6f3433.1 = specific_constant imports.%Core.GreaterOrEquivalent.7ba, @Cpp.long_long.as.OrderedWith.impl.deb(constants.%ImplicitAs.facet.2ed) [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.GreaterOrEquivalent.2b5b9d.1] -// CHECK:STDOUT: %GreaterOrEquivalent.ref.loc21: %Cpp.long_long.as.OrderedWith.impl.GreaterOrEquivalent.type.6f3433.1 = name_ref GreaterOrEquivalent, %.loc21_5.2 [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.GreaterOrEquivalent.2b5b9d.1] +// CHECK:STDOUT: %.loc21_5.3: %Cpp.long_long.as.OrderedWith.impl.GreaterOrEquivalent.type.6f3433.1 = specific_constant imports.%Core.GreaterOrEquivalent.7ba, @Cpp.long_long.as.OrderedWith.impl.deb(constants.%ImplicitAs.facet.2ed) [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.GreaterOrEquivalent.2b5b9d.1] +// CHECK:STDOUT: %GreaterOrEquivalent.ref.loc21: %Cpp.long_long.as.OrderedWith.impl.GreaterOrEquivalent.type.6f3433.1 = name_ref GreaterOrEquivalent, %.loc21_5.3 [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.GreaterOrEquivalent.2b5b9d.1] // CHECK:STDOUT: %Cpp.long_long.as.OrderedWith.impl.GreaterOrEquivalent.bound.loc21: = bound_method %a.ref.loc21, %GreaterOrEquivalent.ref.loc21 // CHECK:STDOUT: %Cpp.long_long.as.OrderedWith.impl.GreaterOrEquivalent.specific_fn.loc21: = specific_function %GreaterOrEquivalent.ref.loc21, @Cpp.long_long.as.OrderedWith.impl.GreaterOrEquivalent.2(constants.%ImplicitAs.facet.2ed) [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.GreaterOrEquivalent.specific_fn.32ac6e.2] // CHECK:STDOUT: %bound_method.loc21_5.3: = bound_method %a.ref.loc21, %Cpp.long_long.as.OrderedWith.impl.GreaterOrEquivalent.specific_fn.loc21 @@ -1899,12 +1944,14 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %int_1.loc22: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %impl.elem1.loc22: %.ada = impl_witness_access constants.%OrderedWith.impl_witness.784, element1 [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.LessOrEquivalent.0b5eb3.2] // CHECK:STDOUT: %bound_method.loc22_5.1: = bound_method %a.ref.loc22, %impl.elem1.loc22 -// CHECK:STDOUT: %ImplicitAs.facet.loc22: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.660) [concrete = constants.%ImplicitAs.facet.2ed] -// CHECK:STDOUT: %.loc22_5.1: %ImplicitAs.type.0ec = converted Core.IntLiteral, %ImplicitAs.facet.loc22 [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %ImplicitAs.facet.loc22_5.1: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.660) [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %.loc22_5.1: %ImplicitAs.type.0ec = converted Core.IntLiteral, %ImplicitAs.facet.loc22_5.1 [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %ImplicitAs.facet.loc22_5.2: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.660) [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %.loc22_5.2: %ImplicitAs.type.0ec = converted Core.IntLiteral, %ImplicitAs.facet.loc22_5.2 [concrete = constants.%ImplicitAs.facet.2ed] // CHECK:STDOUT: %specific_fn.loc22: = specific_function %impl.elem1.loc22, @Cpp.long_long.as.OrderedWith.impl.LessOrEquivalent.1(constants.%ImplicitAs.facet.2ed) [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.LessOrEquivalent.specific_fn.640035.1] // CHECK:STDOUT: %bound_method.loc22_5.2: = bound_method %a.ref.loc22, %specific_fn.loc22 -// CHECK:STDOUT: %.loc22_5.2: %Cpp.long_long.as.OrderedWith.impl.LessOrEquivalent.type.c460d8.1 = specific_constant imports.%Core.LessOrEquivalent.211, @Cpp.long_long.as.OrderedWith.impl.deb(constants.%ImplicitAs.facet.2ed) [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.LessOrEquivalent.0b5eb3.1] -// CHECK:STDOUT: %LessOrEquivalent.ref.loc22: %Cpp.long_long.as.OrderedWith.impl.LessOrEquivalent.type.c460d8.1 = name_ref LessOrEquivalent, %.loc22_5.2 [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.LessOrEquivalent.0b5eb3.1] +// CHECK:STDOUT: %.loc22_5.3: %Cpp.long_long.as.OrderedWith.impl.LessOrEquivalent.type.c460d8.1 = specific_constant imports.%Core.LessOrEquivalent.211, @Cpp.long_long.as.OrderedWith.impl.deb(constants.%ImplicitAs.facet.2ed) [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.LessOrEquivalent.0b5eb3.1] +// CHECK:STDOUT: %LessOrEquivalent.ref.loc22: %Cpp.long_long.as.OrderedWith.impl.LessOrEquivalent.type.c460d8.1 = name_ref LessOrEquivalent, %.loc22_5.3 [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.LessOrEquivalent.0b5eb3.1] // CHECK:STDOUT: %Cpp.long_long.as.OrderedWith.impl.LessOrEquivalent.bound.loc22: = bound_method %a.ref.loc22, %LessOrEquivalent.ref.loc22 // CHECK:STDOUT: %Cpp.long_long.as.OrderedWith.impl.LessOrEquivalent.specific_fn.loc22: = specific_function %LessOrEquivalent.ref.loc22, @Cpp.long_long.as.OrderedWith.impl.LessOrEquivalent.2(constants.%ImplicitAs.facet.2ed) [concrete = constants.%Cpp.long_long.as.OrderedWith.impl.LessOrEquivalent.specific_fn.640035.2] // CHECK:STDOUT: %bound_method.loc22_5.3: = bound_method %a.ref.loc22, %Cpp.long_long.as.OrderedWith.impl.LessOrEquivalent.specific_fn.loc22 @@ -1925,6 +1972,7 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %Cpp.long_long: type = class_type @LongLong64 [concrete] // CHECK:STDOUT: %pattern_type.d58: type = pattern_type %Cpp.long_long [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.d58 = value_binding_pattern a [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ec: type = facet_type <@ImplicitAs, @ImplicitAs(%Cpp.long_long)> [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.660: = impl_witness imports.%ImplicitAs.impl_witness_table.d6d [concrete] // CHECK:STDOUT: %ImplicitAs.facet.2ed: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.660) [concrete] @@ -2114,8 +2162,8 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %Core.import_ref.97f: @T.as_type.as.OrderedWith.impl.df2.%T.as_type.as.OrderedWith.impl.Less.type.2 (%T.as_type.as.OrderedWith.impl.Less.type.2daa9a.1) = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.OrderedWith.impl.df2.%T.as_type.as.OrderedWith.impl.Less.2 (constants.%T.as_type.as.OrderedWith.impl.Less.c37ef5.1)] // CHECK:STDOUT: %Core.import_ref.409: @T.as_type.as.OrderedWith.impl.df2.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.type.2 (%T.as_type.as.OrderedWith.impl.LessOrEquivalent.type.3d985f.1) = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.OrderedWith.impl.df2.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.2 (constants.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.2cb445.1)] // CHECK:STDOUT: %Core.import_ref.56a: @T.as_type.as.OrderedWith.impl.df2.%T.as_type.as.OrderedWith.impl.Greater.type.2 (%T.as_type.as.OrderedWith.impl.Greater.type.4fb98a.1) = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.OrderedWith.impl.df2.%T.as_type.as.OrderedWith.impl.Greater.2 (constants.%T.as_type.as.OrderedWith.impl.Greater.878ae3.1)] -// CHECK:STDOUT: %Core.import_ref.b00: @T.as_type.as.OrderedWith.impl.df2.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.type.2 (%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.type.d6724c.1) = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.OrderedWith.impl.df2.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.2 (constants.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.df5290.1)] -// CHECK:STDOUT: %OrderedWith.impl_witness_table.8b4 = impl_witness_table (%Core.import_ref.97f, %Core.import_ref.409, %Core.import_ref.56a, %Core.import_ref.b00), @T.as_type.as.OrderedWith.impl.df2 [concrete] +// CHECK:STDOUT: %Core.import_ref.b00d: @T.as_type.as.OrderedWith.impl.df2.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.type.2 (%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.type.d6724c.1) = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.OrderedWith.impl.df2.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.2 (constants.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.df5290.1)] +// CHECK:STDOUT: %OrderedWith.impl_witness_table.8b4 = impl_witness_table (%Core.import_ref.97f, %Core.import_ref.409, %Core.import_ref.56a, %Core.import_ref.b00d), @T.as_type.as.OrderedWith.impl.df2 [concrete] // CHECK:STDOUT: %Core.GreaterOrEquivalent.8e2: @T.as_type.as.OrderedWith.impl.df2.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.type.1 (%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.type.d6724c.2) = import_ref Core//prelude/types/cpp/int, GreaterOrEquivalent, loaded [symbolic = @T.as_type.as.OrderedWith.impl.df2.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.1 (constants.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.df5290.2)] // CHECK:STDOUT: %Core.Greater.c24: @T.as_type.as.OrderedWith.impl.df2.%T.as_type.as.OrderedWith.impl.Greater.type.1 (%T.as_type.as.OrderedWith.impl.Greater.type.4fb98a.2) = import_ref Core//prelude/types/cpp/int, Greater, loaded [symbolic = @T.as_type.as.OrderedWith.impl.df2.%T.as_type.as.OrderedWith.impl.Greater.1 (constants.%T.as_type.as.OrderedWith.impl.Greater.878ae3.2)] // CHECK:STDOUT: %Core.LessOrEquivalent.d90: @T.as_type.as.OrderedWith.impl.df2.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.type.1 (%T.as_type.as.OrderedWith.impl.LessOrEquivalent.type.3d985f.2) = import_ref Core//prelude/types/cpp/int, LessOrEquivalent, loaded [symbolic = @T.as_type.as.OrderedWith.impl.df2.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.1 (constants.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.2cb445.2)] @@ -2126,29 +2174,31 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.d58 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.d58 = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1.loc9: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] -// CHECK:STDOUT: %.loc9_13: type = splice_block %long_long.ref [concrete = constants.%Cpp.long_long] { -// CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %long_long.ref: type = name_ref long_long, constants.%Cpp.long_long [concrete = constants.%Cpp.long_long] -// CHECK:STDOUT: } // CHECK:STDOUT: %impl.elem0.loc9: %.ca2 = impl_witness_access constants.%ImplicitAs.impl_witness.660, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.3ce] // CHECK:STDOUT: %bound_method.loc9: = bound_method %int_1.loc9, %impl.elem0.loc9 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.5d7] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc9: init %Cpp.long_long = call %bound_method.loc9(%int_1.loc9) [concrete = constants.%int_1.b19] // CHECK:STDOUT: %.loc9_26.1: %Cpp.long_long = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc9 [concrete = constants.%int_1.b19] // CHECK:STDOUT: %.loc9_26.2: %Cpp.long_long = converted %int_1.loc9, %.loc9_26.1 [concrete = constants.%int_1.b19] +// CHECK:STDOUT: %.loc9_13: type = splice_block %long_long.ref [concrete = constants.%Cpp.long_long] { +// CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %long_long.ref: type = name_ref long_long, constants.%Cpp.long_long [concrete = constants.%Cpp.long_long] +// CHECK:STDOUT: } // CHECK:STDOUT: %a: %Cpp.long_long = value_binding a, %.loc9_26.2 // CHECK:STDOUT: %b.ref.loc10: %i64 = name_ref b, %b // CHECK:STDOUT: %a.ref.loc10: %Cpp.long_long = name_ref a, %a // CHECK:STDOUT: %impl.elem0.loc10_5: %.183 = impl_witness_access constants.%EqWith.impl_witness.084, element0 [concrete = constants.%T.as_type.as.EqWith.impl.Equal.817082.2] // CHECK:STDOUT: %bound_method.loc10_5.1: = bound_method %b.ref.loc10, %impl.elem0.loc10_5 -// CHECK:STDOUT: %ImplicitAs.facet.loc10: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] -// CHECK:STDOUT: %.loc10_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc10 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc10_5.1: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc10_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc10_5.1 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc10_5.2: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc10_5.2: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc10_5.2 [concrete = constants.%ImplicitAs.facet.7a4] // CHECK:STDOUT: %specific_fn.loc10: = specific_function %impl.elem0.loc10_5, @T.as_type.as.EqWith.impl.Equal.3(constants.%ImplicitAs.facet.7a4) [concrete = constants.%T.as_type.as.EqWith.impl.Equal.specific_fn.044d32.1] // CHECK:STDOUT: %bound_method.loc10_5.2: = bound_method %b.ref.loc10, %specific_fn.loc10 -// CHECK:STDOUT: %.loc10_5.2: %T.as_type.as.EqWith.impl.Equal.type.6d33d6.1 = specific_constant imports.%Core.Equal.4f5, @T.as_type.as.EqWith.impl.6d3(constants.%ImplicitAs.facet.7a4) [concrete = constants.%T.as_type.as.EqWith.impl.Equal.817082.1] -// CHECK:STDOUT: %Equal.ref.loc10: %T.as_type.as.EqWith.impl.Equal.type.6d33d6.1 = name_ref Equal, %.loc10_5.2 [concrete = constants.%T.as_type.as.EqWith.impl.Equal.817082.1] +// CHECK:STDOUT: %.loc10_5.3: %T.as_type.as.EqWith.impl.Equal.type.6d33d6.1 = specific_constant imports.%Core.Equal.4f5, @T.as_type.as.EqWith.impl.6d3(constants.%ImplicitAs.facet.7a4) [concrete = constants.%T.as_type.as.EqWith.impl.Equal.817082.1] +// CHECK:STDOUT: %Equal.ref.loc10: %T.as_type.as.EqWith.impl.Equal.type.6d33d6.1 = name_ref Equal, %.loc10_5.3 [concrete = constants.%T.as_type.as.EqWith.impl.Equal.817082.1] // CHECK:STDOUT: %T.as_type.as.EqWith.impl.Equal.bound.loc10: = bound_method %b.ref.loc10, %Equal.ref.loc10 // CHECK:STDOUT: %T.as_type.as.EqWith.impl.Equal.specific_fn.loc10: = specific_function %Equal.ref.loc10, @T.as_type.as.EqWith.impl.Equal.4(constants.%ImplicitAs.facet.7a4) [concrete = constants.%T.as_type.as.EqWith.impl.Equal.specific_fn.044d32.2] // CHECK:STDOUT: %bound_method.loc10_5.3: = bound_method %b.ref.loc10, %T.as_type.as.EqWith.impl.Equal.specific_fn.loc10 @@ -2162,12 +2212,14 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %a.ref.loc11: %Cpp.long_long = name_ref a, %a // CHECK:STDOUT: %impl.elem1.loc11: %.eca = impl_witness_access constants.%EqWith.impl_witness.084, element1 [concrete = constants.%T.as_type.as.EqWith.impl.NotEqual.de7c60.2] // CHECK:STDOUT: %bound_method.loc11_5.1: = bound_method %b.ref.loc11, %impl.elem1.loc11 -// CHECK:STDOUT: %ImplicitAs.facet.loc11: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] -// CHECK:STDOUT: %.loc11_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc11 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc11_5.1: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc11_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc11_5.1 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc11_5.2: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc11_5.2: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc11_5.2 [concrete = constants.%ImplicitAs.facet.7a4] // CHECK:STDOUT: %specific_fn.loc11: = specific_function %impl.elem1.loc11, @T.as_type.as.EqWith.impl.NotEqual.3(constants.%ImplicitAs.facet.7a4) [concrete = constants.%T.as_type.as.EqWith.impl.NotEqual.specific_fn.b44c79.1] // CHECK:STDOUT: %bound_method.loc11_5.2: = bound_method %b.ref.loc11, %specific_fn.loc11 -// CHECK:STDOUT: %.loc11_5.2: %T.as_type.as.EqWith.impl.NotEqual.type.2c42f8.1 = specific_constant imports.%Core.NotEqual.0b2, @T.as_type.as.EqWith.impl.6d3(constants.%ImplicitAs.facet.7a4) [concrete = constants.%T.as_type.as.EqWith.impl.NotEqual.de7c60.1] -// CHECK:STDOUT: %NotEqual.ref.loc11: %T.as_type.as.EqWith.impl.NotEqual.type.2c42f8.1 = name_ref NotEqual, %.loc11_5.2 [concrete = constants.%T.as_type.as.EqWith.impl.NotEqual.de7c60.1] +// CHECK:STDOUT: %.loc11_5.3: %T.as_type.as.EqWith.impl.NotEqual.type.2c42f8.1 = specific_constant imports.%Core.NotEqual.0b2, @T.as_type.as.EqWith.impl.6d3(constants.%ImplicitAs.facet.7a4) [concrete = constants.%T.as_type.as.EqWith.impl.NotEqual.de7c60.1] +// CHECK:STDOUT: %NotEqual.ref.loc11: %T.as_type.as.EqWith.impl.NotEqual.type.2c42f8.1 = name_ref NotEqual, %.loc11_5.3 [concrete = constants.%T.as_type.as.EqWith.impl.NotEqual.de7c60.1] // CHECK:STDOUT: %T.as_type.as.EqWith.impl.NotEqual.bound.loc11: = bound_method %b.ref.loc11, %NotEqual.ref.loc11 // CHECK:STDOUT: %T.as_type.as.EqWith.impl.NotEqual.specific_fn.loc11: = specific_function %NotEqual.ref.loc11, @T.as_type.as.EqWith.impl.NotEqual.4(constants.%ImplicitAs.facet.7a4) [concrete = constants.%T.as_type.as.EqWith.impl.NotEqual.specific_fn.b44c79.2] // CHECK:STDOUT: %bound_method.loc11_5.3: = bound_method %b.ref.loc11, %T.as_type.as.EqWith.impl.NotEqual.specific_fn.loc11 @@ -2181,12 +2233,14 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %a.ref.loc12: %Cpp.long_long = name_ref a, %a // CHECK:STDOUT: %impl.elem2.loc12: %.af0 = impl_witness_access constants.%OrderedWith.impl_witness.7e3, element2 [concrete = constants.%T.as_type.as.OrderedWith.impl.Greater.749015.2] // CHECK:STDOUT: %bound_method.loc12_5.1: = bound_method %b.ref.loc12, %impl.elem2.loc12 -// CHECK:STDOUT: %ImplicitAs.facet.loc12: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] -// CHECK:STDOUT: %.loc12_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc12 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc12_5.1: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc12_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc12_5.1 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc12_5.2: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc12_5.2: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc12_5.2 [concrete = constants.%ImplicitAs.facet.7a4] // CHECK:STDOUT: %specific_fn.loc12: = specific_function %impl.elem2.loc12, @T.as_type.as.OrderedWith.impl.Greater.3(constants.%ImplicitAs.facet.7a4) [concrete = constants.%T.as_type.as.OrderedWith.impl.Greater.specific_fn.cbc6c2.1] // CHECK:STDOUT: %bound_method.loc12_5.2: = bound_method %b.ref.loc12, %specific_fn.loc12 -// CHECK:STDOUT: %.loc12_5.2: %T.as_type.as.OrderedWith.impl.Greater.type.085dd9.1 = specific_constant imports.%Core.Greater.c24, @T.as_type.as.OrderedWith.impl.df2(constants.%ImplicitAs.facet.7a4) [concrete = constants.%T.as_type.as.OrderedWith.impl.Greater.749015.1] -// CHECK:STDOUT: %Greater.ref.loc12: %T.as_type.as.OrderedWith.impl.Greater.type.085dd9.1 = name_ref Greater, %.loc12_5.2 [concrete = constants.%T.as_type.as.OrderedWith.impl.Greater.749015.1] +// CHECK:STDOUT: %.loc12_5.3: %T.as_type.as.OrderedWith.impl.Greater.type.085dd9.1 = specific_constant imports.%Core.Greater.c24, @T.as_type.as.OrderedWith.impl.df2(constants.%ImplicitAs.facet.7a4) [concrete = constants.%T.as_type.as.OrderedWith.impl.Greater.749015.1] +// CHECK:STDOUT: %Greater.ref.loc12: %T.as_type.as.OrderedWith.impl.Greater.type.085dd9.1 = name_ref Greater, %.loc12_5.3 [concrete = constants.%T.as_type.as.OrderedWith.impl.Greater.749015.1] // CHECK:STDOUT: %T.as_type.as.OrderedWith.impl.Greater.bound.loc12: = bound_method %b.ref.loc12, %Greater.ref.loc12 // CHECK:STDOUT: %T.as_type.as.OrderedWith.impl.Greater.specific_fn.loc12: = specific_function %Greater.ref.loc12, @T.as_type.as.OrderedWith.impl.Greater.4(constants.%ImplicitAs.facet.7a4) [concrete = constants.%T.as_type.as.OrderedWith.impl.Greater.specific_fn.cbc6c2.2] // CHECK:STDOUT: %bound_method.loc12_5.3: = bound_method %b.ref.loc12, %T.as_type.as.OrderedWith.impl.Greater.specific_fn.loc12 @@ -2200,12 +2254,14 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %a.ref.loc13: %Cpp.long_long = name_ref a, %a // CHECK:STDOUT: %impl.elem0.loc13_5: %.901 = impl_witness_access constants.%OrderedWith.impl_witness.7e3, element0 [concrete = constants.%T.as_type.as.OrderedWith.impl.Less.c5f236.2] // CHECK:STDOUT: %bound_method.loc13_5.1: = bound_method %b.ref.loc13, %impl.elem0.loc13_5 -// CHECK:STDOUT: %ImplicitAs.facet.loc13: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] -// CHECK:STDOUT: %.loc13_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc13 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc13_5.1: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc13_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc13_5.1 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc13_5.2: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc13_5.2: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc13_5.2 [concrete = constants.%ImplicitAs.facet.7a4] // CHECK:STDOUT: %specific_fn.loc13: = specific_function %impl.elem0.loc13_5, @T.as_type.as.OrderedWith.impl.Less.3(constants.%ImplicitAs.facet.7a4) [concrete = constants.%T.as_type.as.OrderedWith.impl.Less.specific_fn.a8a2ad.1] // CHECK:STDOUT: %bound_method.loc13_5.2: = bound_method %b.ref.loc13, %specific_fn.loc13 -// CHECK:STDOUT: %.loc13_5.2: %T.as_type.as.OrderedWith.impl.Less.type.7b405f.1 = specific_constant imports.%Core.Less.2d9, @T.as_type.as.OrderedWith.impl.df2(constants.%ImplicitAs.facet.7a4) [concrete = constants.%T.as_type.as.OrderedWith.impl.Less.c5f236.1] -// CHECK:STDOUT: %Less.ref.loc13: %T.as_type.as.OrderedWith.impl.Less.type.7b405f.1 = name_ref Less, %.loc13_5.2 [concrete = constants.%T.as_type.as.OrderedWith.impl.Less.c5f236.1] +// CHECK:STDOUT: %.loc13_5.3: %T.as_type.as.OrderedWith.impl.Less.type.7b405f.1 = specific_constant imports.%Core.Less.2d9, @T.as_type.as.OrderedWith.impl.df2(constants.%ImplicitAs.facet.7a4) [concrete = constants.%T.as_type.as.OrderedWith.impl.Less.c5f236.1] +// CHECK:STDOUT: %Less.ref.loc13: %T.as_type.as.OrderedWith.impl.Less.type.7b405f.1 = name_ref Less, %.loc13_5.3 [concrete = constants.%T.as_type.as.OrderedWith.impl.Less.c5f236.1] // CHECK:STDOUT: %T.as_type.as.OrderedWith.impl.Less.bound.loc13: = bound_method %b.ref.loc13, %Less.ref.loc13 // CHECK:STDOUT: %T.as_type.as.OrderedWith.impl.Less.specific_fn.loc13: = specific_function %Less.ref.loc13, @T.as_type.as.OrderedWith.impl.Less.4(constants.%ImplicitAs.facet.7a4) [concrete = constants.%T.as_type.as.OrderedWith.impl.Less.specific_fn.a8a2ad.2] // CHECK:STDOUT: %bound_method.loc13_5.3: = bound_method %b.ref.loc13, %T.as_type.as.OrderedWith.impl.Less.specific_fn.loc13 @@ -2219,12 +2275,14 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %a.ref.loc14: %Cpp.long_long = name_ref a, %a // CHECK:STDOUT: %impl.elem3.loc14: %.96b = impl_witness_access constants.%OrderedWith.impl_witness.7e3, element3 [concrete = constants.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.f86b3e.2] // CHECK:STDOUT: %bound_method.loc14_5.1: = bound_method %b.ref.loc14, %impl.elem3.loc14 -// CHECK:STDOUT: %ImplicitAs.facet.loc14: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] -// CHECK:STDOUT: %.loc14_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc14 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc14_5.1: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc14_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc14_5.1 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc14_5.2: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc14_5.2: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc14_5.2 [concrete = constants.%ImplicitAs.facet.7a4] // CHECK:STDOUT: %specific_fn.loc14: = specific_function %impl.elem3.loc14, @T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.3(constants.%ImplicitAs.facet.7a4) [concrete = constants.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.specific_fn.8a93e9.1] // CHECK:STDOUT: %bound_method.loc14_5.2: = bound_method %b.ref.loc14, %specific_fn.loc14 -// CHECK:STDOUT: %.loc14_5.2: %T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.type.0f0b65.1 = specific_constant imports.%Core.GreaterOrEquivalent.8e2, @T.as_type.as.OrderedWith.impl.df2(constants.%ImplicitAs.facet.7a4) [concrete = constants.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.f86b3e.1] -// CHECK:STDOUT: %GreaterOrEquivalent.ref.loc14: %T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.type.0f0b65.1 = name_ref GreaterOrEquivalent, %.loc14_5.2 [concrete = constants.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.f86b3e.1] +// CHECK:STDOUT: %.loc14_5.3: %T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.type.0f0b65.1 = specific_constant imports.%Core.GreaterOrEquivalent.8e2, @T.as_type.as.OrderedWith.impl.df2(constants.%ImplicitAs.facet.7a4) [concrete = constants.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.f86b3e.1] +// CHECK:STDOUT: %GreaterOrEquivalent.ref.loc14: %T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.type.0f0b65.1 = name_ref GreaterOrEquivalent, %.loc14_5.3 [concrete = constants.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.f86b3e.1] // CHECK:STDOUT: %T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.bound.loc14: = bound_method %b.ref.loc14, %GreaterOrEquivalent.ref.loc14 // CHECK:STDOUT: %T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.specific_fn.loc14: = specific_function %GreaterOrEquivalent.ref.loc14, @T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.4(constants.%ImplicitAs.facet.7a4) [concrete = constants.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.specific_fn.8a93e9.2] // CHECK:STDOUT: %bound_method.loc14_5.3: = bound_method %b.ref.loc14, %T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.specific_fn.loc14 @@ -2238,12 +2296,14 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %a.ref.loc15: %Cpp.long_long = name_ref a, %a // CHECK:STDOUT: %impl.elem1.loc15: %.829 = impl_witness_access constants.%OrderedWith.impl_witness.7e3, element1 [concrete = constants.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.e5cfba.2] // CHECK:STDOUT: %bound_method.loc15_5.1: = bound_method %b.ref.loc15, %impl.elem1.loc15 -// CHECK:STDOUT: %ImplicitAs.facet.loc15: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] -// CHECK:STDOUT: %.loc15_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc15 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc15_5.1: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc15_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc15_5.1 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc15_5.2: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc15_5.2: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc15_5.2 [concrete = constants.%ImplicitAs.facet.7a4] // CHECK:STDOUT: %specific_fn.loc15: = specific_function %impl.elem1.loc15, @T.as_type.as.OrderedWith.impl.LessOrEquivalent.3(constants.%ImplicitAs.facet.7a4) [concrete = constants.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.specific_fn.ab9ff7.1] // CHECK:STDOUT: %bound_method.loc15_5.2: = bound_method %b.ref.loc15, %specific_fn.loc15 -// CHECK:STDOUT: %.loc15_5.2: %T.as_type.as.OrderedWith.impl.LessOrEquivalent.type.577251.1 = specific_constant imports.%Core.LessOrEquivalent.d90, @T.as_type.as.OrderedWith.impl.df2(constants.%ImplicitAs.facet.7a4) [concrete = constants.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.e5cfba.1] -// CHECK:STDOUT: %LessOrEquivalent.ref.loc15: %T.as_type.as.OrderedWith.impl.LessOrEquivalent.type.577251.1 = name_ref LessOrEquivalent, %.loc15_5.2 [concrete = constants.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.e5cfba.1] +// CHECK:STDOUT: %.loc15_5.3: %T.as_type.as.OrderedWith.impl.LessOrEquivalent.type.577251.1 = specific_constant imports.%Core.LessOrEquivalent.d90, @T.as_type.as.OrderedWith.impl.df2(constants.%ImplicitAs.facet.7a4) [concrete = constants.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.e5cfba.1] +// CHECK:STDOUT: %LessOrEquivalent.ref.loc15: %T.as_type.as.OrderedWith.impl.LessOrEquivalent.type.577251.1 = name_ref LessOrEquivalent, %.loc15_5.3 [concrete = constants.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.e5cfba.1] // CHECK:STDOUT: %T.as_type.as.OrderedWith.impl.LessOrEquivalent.bound.loc15: = bound_method %b.ref.loc15, %LessOrEquivalent.ref.loc15 // CHECK:STDOUT: %T.as_type.as.OrderedWith.impl.LessOrEquivalent.specific_fn.loc15: = specific_function %LessOrEquivalent.ref.loc15, @T.as_type.as.OrderedWith.impl.LessOrEquivalent.4(constants.%ImplicitAs.facet.7a4) [concrete = constants.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.specific_fn.ab9ff7.2] // CHECK:STDOUT: %bound_method.loc15_5.3: = bound_method %b.ref.loc15, %T.as_type.as.OrderedWith.impl.LessOrEquivalent.specific_fn.loc15 @@ -2257,12 +2317,14 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %a.ref.loc17: %Cpp.long_long = name_ref a, %a // CHECK:STDOUT: %impl.elem0.loc17_5: %.658 = impl_witness_access constants.%EqWith.impl_witness.cb6, element0 [concrete = constants.%T.as_type.as.EqWith.impl.Equal.66756b.2] // CHECK:STDOUT: %bound_method.loc17_5.1: = bound_method %int_1.loc17, %impl.elem0.loc17_5 [concrete = constants.%T.as_type.as.EqWith.impl.Equal.bound.2fcdd5.1] -// CHECK:STDOUT: %ImplicitAs.facet.loc17: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.660) [concrete = constants.%ImplicitAs.facet.2ed] -// CHECK:STDOUT: %.loc17_5.1: %ImplicitAs.type.0ec = converted Core.IntLiteral, %ImplicitAs.facet.loc17 [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %ImplicitAs.facet.loc17_5.1: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.660) [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %.loc17_5.1: %ImplicitAs.type.0ec = converted Core.IntLiteral, %ImplicitAs.facet.loc17_5.1 [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %ImplicitAs.facet.loc17_5.2: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.660) [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %.loc17_5.2: %ImplicitAs.type.0ec = converted Core.IntLiteral, %ImplicitAs.facet.loc17_5.2 [concrete = constants.%ImplicitAs.facet.2ed] // CHECK:STDOUT: %specific_fn.loc17: = specific_function %impl.elem0.loc17_5, @T.as_type.as.EqWith.impl.Equal.3(constants.%ImplicitAs.facet.2ed) [concrete = constants.%T.as_type.as.EqWith.impl.Equal.specific_fn.7834c5.1] // CHECK:STDOUT: %bound_method.loc17_5.2: = bound_method %int_1.loc17, %specific_fn.loc17 [concrete = constants.%bound_method.7c9d36.1] -// CHECK:STDOUT: %.loc17_5.2: %T.as_type.as.EqWith.impl.Equal.type.8e6244.1 = specific_constant imports.%Core.Equal.4f5, @T.as_type.as.EqWith.impl.6d3(constants.%ImplicitAs.facet.2ed) [concrete = constants.%T.as_type.as.EqWith.impl.Equal.66756b.1] -// CHECK:STDOUT: %Equal.ref.loc17: %T.as_type.as.EqWith.impl.Equal.type.8e6244.1 = name_ref Equal, %.loc17_5.2 [concrete = constants.%T.as_type.as.EqWith.impl.Equal.66756b.1] +// CHECK:STDOUT: %.loc17_5.3: %T.as_type.as.EqWith.impl.Equal.type.8e6244.1 = specific_constant imports.%Core.Equal.4f5, @T.as_type.as.EqWith.impl.6d3(constants.%ImplicitAs.facet.2ed) [concrete = constants.%T.as_type.as.EqWith.impl.Equal.66756b.1] +// CHECK:STDOUT: %Equal.ref.loc17: %T.as_type.as.EqWith.impl.Equal.type.8e6244.1 = name_ref Equal, %.loc17_5.3 [concrete = constants.%T.as_type.as.EqWith.impl.Equal.66756b.1] // CHECK:STDOUT: %T.as_type.as.EqWith.impl.Equal.bound.loc17: = bound_method %int_1.loc17, %Equal.ref.loc17 [concrete = constants.%T.as_type.as.EqWith.impl.Equal.bound.2fcdd5.2] // CHECK:STDOUT: %T.as_type.as.EqWith.impl.Equal.specific_fn.loc17: = specific_function %Equal.ref.loc17, @T.as_type.as.EqWith.impl.Equal.4(constants.%ImplicitAs.facet.2ed) [concrete = constants.%T.as_type.as.EqWith.impl.Equal.specific_fn.7834c5.2] // CHECK:STDOUT: %bound_method.loc17_5.3: = bound_method %int_1.loc17, %T.as_type.as.EqWith.impl.Equal.specific_fn.loc17 [concrete = constants.%bound_method.7c9d36.2] @@ -2276,12 +2338,14 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %a.ref.loc18: %Cpp.long_long = name_ref a, %a // CHECK:STDOUT: %impl.elem1.loc18: %.1f9 = impl_witness_access constants.%EqWith.impl_witness.cb6, element1 [concrete = constants.%T.as_type.as.EqWith.impl.NotEqual.672038.2] // CHECK:STDOUT: %bound_method.loc18_5.1: = bound_method %int_1.loc18, %impl.elem1.loc18 [concrete = constants.%T.as_type.as.EqWith.impl.NotEqual.bound.a9911b.1] -// CHECK:STDOUT: %ImplicitAs.facet.loc18: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.660) [concrete = constants.%ImplicitAs.facet.2ed] -// CHECK:STDOUT: %.loc18_5.1: %ImplicitAs.type.0ec = converted Core.IntLiteral, %ImplicitAs.facet.loc18 [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %ImplicitAs.facet.loc18_5.1: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.660) [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %.loc18_5.1: %ImplicitAs.type.0ec = converted Core.IntLiteral, %ImplicitAs.facet.loc18_5.1 [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %ImplicitAs.facet.loc18_5.2: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.660) [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %.loc18_5.2: %ImplicitAs.type.0ec = converted Core.IntLiteral, %ImplicitAs.facet.loc18_5.2 [concrete = constants.%ImplicitAs.facet.2ed] // CHECK:STDOUT: %specific_fn.loc18: = specific_function %impl.elem1.loc18, @T.as_type.as.EqWith.impl.NotEqual.3(constants.%ImplicitAs.facet.2ed) [concrete = constants.%T.as_type.as.EqWith.impl.NotEqual.specific_fn.598adf.1] // CHECK:STDOUT: %bound_method.loc18_5.2: = bound_method %int_1.loc18, %specific_fn.loc18 [concrete = constants.%bound_method.1f073e.1] -// CHECK:STDOUT: %.loc18_5.2: %T.as_type.as.EqWith.impl.NotEqual.type.fb7a86.1 = specific_constant imports.%Core.NotEqual.0b2, @T.as_type.as.EqWith.impl.6d3(constants.%ImplicitAs.facet.2ed) [concrete = constants.%T.as_type.as.EqWith.impl.NotEqual.672038.1] -// CHECK:STDOUT: %NotEqual.ref.loc18: %T.as_type.as.EqWith.impl.NotEqual.type.fb7a86.1 = name_ref NotEqual, %.loc18_5.2 [concrete = constants.%T.as_type.as.EqWith.impl.NotEqual.672038.1] +// CHECK:STDOUT: %.loc18_5.3: %T.as_type.as.EqWith.impl.NotEqual.type.fb7a86.1 = specific_constant imports.%Core.NotEqual.0b2, @T.as_type.as.EqWith.impl.6d3(constants.%ImplicitAs.facet.2ed) [concrete = constants.%T.as_type.as.EqWith.impl.NotEqual.672038.1] +// CHECK:STDOUT: %NotEqual.ref.loc18: %T.as_type.as.EqWith.impl.NotEqual.type.fb7a86.1 = name_ref NotEqual, %.loc18_5.3 [concrete = constants.%T.as_type.as.EqWith.impl.NotEqual.672038.1] // CHECK:STDOUT: %T.as_type.as.EqWith.impl.NotEqual.bound.loc18: = bound_method %int_1.loc18, %NotEqual.ref.loc18 [concrete = constants.%T.as_type.as.EqWith.impl.NotEqual.bound.a9911b.2] // CHECK:STDOUT: %T.as_type.as.EqWith.impl.NotEqual.specific_fn.loc18: = specific_function %NotEqual.ref.loc18, @T.as_type.as.EqWith.impl.NotEqual.4(constants.%ImplicitAs.facet.2ed) [concrete = constants.%T.as_type.as.EqWith.impl.NotEqual.specific_fn.598adf.2] // CHECK:STDOUT: %bound_method.loc18_5.3: = bound_method %int_1.loc18, %T.as_type.as.EqWith.impl.NotEqual.specific_fn.loc18 [concrete = constants.%bound_method.1f073e.2] @@ -2295,12 +2359,14 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %a.ref.loc19: %Cpp.long_long = name_ref a, %a // CHECK:STDOUT: %impl.elem2.loc19: %.1e0 = impl_witness_access constants.%OrderedWith.impl_witness.ccd, element2 [concrete = constants.%T.as_type.as.OrderedWith.impl.Greater.a80774.2] // CHECK:STDOUT: %bound_method.loc19_5.1: = bound_method %int_1.loc19, %impl.elem2.loc19 [concrete = constants.%T.as_type.as.OrderedWith.impl.Greater.bound.ba4552.1] -// CHECK:STDOUT: %ImplicitAs.facet.loc19: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.660) [concrete = constants.%ImplicitAs.facet.2ed] -// CHECK:STDOUT: %.loc19_5.1: %ImplicitAs.type.0ec = converted Core.IntLiteral, %ImplicitAs.facet.loc19 [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %ImplicitAs.facet.loc19_5.1: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.660) [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %.loc19_5.1: %ImplicitAs.type.0ec = converted Core.IntLiteral, %ImplicitAs.facet.loc19_5.1 [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %ImplicitAs.facet.loc19_5.2: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.660) [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %.loc19_5.2: %ImplicitAs.type.0ec = converted Core.IntLiteral, %ImplicitAs.facet.loc19_5.2 [concrete = constants.%ImplicitAs.facet.2ed] // CHECK:STDOUT: %specific_fn.loc19: = specific_function %impl.elem2.loc19, @T.as_type.as.OrderedWith.impl.Greater.3(constants.%ImplicitAs.facet.2ed) [concrete = constants.%T.as_type.as.OrderedWith.impl.Greater.specific_fn.3eccd1.1] // CHECK:STDOUT: %bound_method.loc19_5.2: = bound_method %int_1.loc19, %specific_fn.loc19 [concrete = constants.%bound_method.560bca.1] -// CHECK:STDOUT: %.loc19_5.2: %T.as_type.as.OrderedWith.impl.Greater.type.e2356e.1 = specific_constant imports.%Core.Greater.c24, @T.as_type.as.OrderedWith.impl.df2(constants.%ImplicitAs.facet.2ed) [concrete = constants.%T.as_type.as.OrderedWith.impl.Greater.a80774.1] -// CHECK:STDOUT: %Greater.ref.loc19: %T.as_type.as.OrderedWith.impl.Greater.type.e2356e.1 = name_ref Greater, %.loc19_5.2 [concrete = constants.%T.as_type.as.OrderedWith.impl.Greater.a80774.1] +// CHECK:STDOUT: %.loc19_5.3: %T.as_type.as.OrderedWith.impl.Greater.type.e2356e.1 = specific_constant imports.%Core.Greater.c24, @T.as_type.as.OrderedWith.impl.df2(constants.%ImplicitAs.facet.2ed) [concrete = constants.%T.as_type.as.OrderedWith.impl.Greater.a80774.1] +// CHECK:STDOUT: %Greater.ref.loc19: %T.as_type.as.OrderedWith.impl.Greater.type.e2356e.1 = name_ref Greater, %.loc19_5.3 [concrete = constants.%T.as_type.as.OrderedWith.impl.Greater.a80774.1] // CHECK:STDOUT: %T.as_type.as.OrderedWith.impl.Greater.bound.loc19: = bound_method %int_1.loc19, %Greater.ref.loc19 [concrete = constants.%T.as_type.as.OrderedWith.impl.Greater.bound.ba4552.2] // CHECK:STDOUT: %T.as_type.as.OrderedWith.impl.Greater.specific_fn.loc19: = specific_function %Greater.ref.loc19, @T.as_type.as.OrderedWith.impl.Greater.4(constants.%ImplicitAs.facet.2ed) [concrete = constants.%T.as_type.as.OrderedWith.impl.Greater.specific_fn.3eccd1.2] // CHECK:STDOUT: %bound_method.loc19_5.3: = bound_method %int_1.loc19, %T.as_type.as.OrderedWith.impl.Greater.specific_fn.loc19 [concrete = constants.%bound_method.560bca.2] @@ -2314,12 +2380,14 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %a.ref.loc20: %Cpp.long_long = name_ref a, %a // CHECK:STDOUT: %impl.elem0.loc20_5: %.4c9 = impl_witness_access constants.%OrderedWith.impl_witness.ccd, element0 [concrete = constants.%T.as_type.as.OrderedWith.impl.Less.09733d.2] // CHECK:STDOUT: %bound_method.loc20_5.1: = bound_method %int_1.loc20, %impl.elem0.loc20_5 [concrete = constants.%T.as_type.as.OrderedWith.impl.Less.bound.069497.1] -// CHECK:STDOUT: %ImplicitAs.facet.loc20: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.660) [concrete = constants.%ImplicitAs.facet.2ed] -// CHECK:STDOUT: %.loc20_5.1: %ImplicitAs.type.0ec = converted Core.IntLiteral, %ImplicitAs.facet.loc20 [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %ImplicitAs.facet.loc20_5.1: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.660) [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %.loc20_5.1: %ImplicitAs.type.0ec = converted Core.IntLiteral, %ImplicitAs.facet.loc20_5.1 [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %ImplicitAs.facet.loc20_5.2: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.660) [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %.loc20_5.2: %ImplicitAs.type.0ec = converted Core.IntLiteral, %ImplicitAs.facet.loc20_5.2 [concrete = constants.%ImplicitAs.facet.2ed] // CHECK:STDOUT: %specific_fn.loc20: = specific_function %impl.elem0.loc20_5, @T.as_type.as.OrderedWith.impl.Less.3(constants.%ImplicitAs.facet.2ed) [concrete = constants.%T.as_type.as.OrderedWith.impl.Less.specific_fn.0beaf8.1] // CHECK:STDOUT: %bound_method.loc20_5.2: = bound_method %int_1.loc20, %specific_fn.loc20 [concrete = constants.%bound_method.103f49.1] -// CHECK:STDOUT: %.loc20_5.2: %T.as_type.as.OrderedWith.impl.Less.type.28a50f.1 = specific_constant imports.%Core.Less.2d9, @T.as_type.as.OrderedWith.impl.df2(constants.%ImplicitAs.facet.2ed) [concrete = constants.%T.as_type.as.OrderedWith.impl.Less.09733d.1] -// CHECK:STDOUT: %Less.ref.loc20: %T.as_type.as.OrderedWith.impl.Less.type.28a50f.1 = name_ref Less, %.loc20_5.2 [concrete = constants.%T.as_type.as.OrderedWith.impl.Less.09733d.1] +// CHECK:STDOUT: %.loc20_5.3: %T.as_type.as.OrderedWith.impl.Less.type.28a50f.1 = specific_constant imports.%Core.Less.2d9, @T.as_type.as.OrderedWith.impl.df2(constants.%ImplicitAs.facet.2ed) [concrete = constants.%T.as_type.as.OrderedWith.impl.Less.09733d.1] +// CHECK:STDOUT: %Less.ref.loc20: %T.as_type.as.OrderedWith.impl.Less.type.28a50f.1 = name_ref Less, %.loc20_5.3 [concrete = constants.%T.as_type.as.OrderedWith.impl.Less.09733d.1] // CHECK:STDOUT: %T.as_type.as.OrderedWith.impl.Less.bound.loc20: = bound_method %int_1.loc20, %Less.ref.loc20 [concrete = constants.%T.as_type.as.OrderedWith.impl.Less.bound.069497.2] // CHECK:STDOUT: %T.as_type.as.OrderedWith.impl.Less.specific_fn.loc20: = specific_function %Less.ref.loc20, @T.as_type.as.OrderedWith.impl.Less.4(constants.%ImplicitAs.facet.2ed) [concrete = constants.%T.as_type.as.OrderedWith.impl.Less.specific_fn.0beaf8.2] // CHECK:STDOUT: %bound_method.loc20_5.3: = bound_method %int_1.loc20, %T.as_type.as.OrderedWith.impl.Less.specific_fn.loc20 [concrete = constants.%bound_method.103f49.2] @@ -2333,12 +2401,14 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %a.ref.loc21: %Cpp.long_long = name_ref a, %a // CHECK:STDOUT: %impl.elem3.loc21: %.b09 = impl_witness_access constants.%OrderedWith.impl_witness.ccd, element3 [concrete = constants.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.ae8de7.2] // CHECK:STDOUT: %bound_method.loc21_5.1: = bound_method %int_1.loc21, %impl.elem3.loc21 [concrete = constants.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.bound.22317d.1] -// CHECK:STDOUT: %ImplicitAs.facet.loc21: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.660) [concrete = constants.%ImplicitAs.facet.2ed] -// CHECK:STDOUT: %.loc21_5.1: %ImplicitAs.type.0ec = converted Core.IntLiteral, %ImplicitAs.facet.loc21 [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %ImplicitAs.facet.loc21_5.1: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.660) [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %.loc21_5.1: %ImplicitAs.type.0ec = converted Core.IntLiteral, %ImplicitAs.facet.loc21_5.1 [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %ImplicitAs.facet.loc21_5.2: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.660) [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %.loc21_5.2: %ImplicitAs.type.0ec = converted Core.IntLiteral, %ImplicitAs.facet.loc21_5.2 [concrete = constants.%ImplicitAs.facet.2ed] // CHECK:STDOUT: %specific_fn.loc21: = specific_function %impl.elem3.loc21, @T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.3(constants.%ImplicitAs.facet.2ed) [concrete = constants.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.specific_fn.371f57.1] // CHECK:STDOUT: %bound_method.loc21_5.2: = bound_method %int_1.loc21, %specific_fn.loc21 [concrete = constants.%bound_method.ffa540.1] -// CHECK:STDOUT: %.loc21_5.2: %T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.type.09194f.1 = specific_constant imports.%Core.GreaterOrEquivalent.8e2, @T.as_type.as.OrderedWith.impl.df2(constants.%ImplicitAs.facet.2ed) [concrete = constants.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.ae8de7.1] -// CHECK:STDOUT: %GreaterOrEquivalent.ref.loc21: %T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.type.09194f.1 = name_ref GreaterOrEquivalent, %.loc21_5.2 [concrete = constants.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.ae8de7.1] +// CHECK:STDOUT: %.loc21_5.3: %T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.type.09194f.1 = specific_constant imports.%Core.GreaterOrEquivalent.8e2, @T.as_type.as.OrderedWith.impl.df2(constants.%ImplicitAs.facet.2ed) [concrete = constants.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.ae8de7.1] +// CHECK:STDOUT: %GreaterOrEquivalent.ref.loc21: %T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.type.09194f.1 = name_ref GreaterOrEquivalent, %.loc21_5.3 [concrete = constants.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.ae8de7.1] // CHECK:STDOUT: %T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.bound.loc21: = bound_method %int_1.loc21, %GreaterOrEquivalent.ref.loc21 [concrete = constants.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.bound.22317d.2] // CHECK:STDOUT: %T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.specific_fn.loc21: = specific_function %GreaterOrEquivalent.ref.loc21, @T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.4(constants.%ImplicitAs.facet.2ed) [concrete = constants.%T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.specific_fn.371f57.2] // CHECK:STDOUT: %bound_method.loc21_5.3: = bound_method %int_1.loc21, %T.as_type.as.OrderedWith.impl.GreaterOrEquivalent.specific_fn.loc21 [concrete = constants.%bound_method.ffa540.2] @@ -2352,12 +2422,14 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %a.ref.loc22: %Cpp.long_long = name_ref a, %a // CHECK:STDOUT: %impl.elem1.loc22: %.cab = impl_witness_access constants.%OrderedWith.impl_witness.ccd, element1 [concrete = constants.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.b7cd44.2] // CHECK:STDOUT: %bound_method.loc22_5.1: = bound_method %int_1.loc22, %impl.elem1.loc22 [concrete = constants.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.bound.2eaa72.1] -// CHECK:STDOUT: %ImplicitAs.facet.loc22: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.660) [concrete = constants.%ImplicitAs.facet.2ed] -// CHECK:STDOUT: %.loc22_5.1: %ImplicitAs.type.0ec = converted Core.IntLiteral, %ImplicitAs.facet.loc22 [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %ImplicitAs.facet.loc22_5.1: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.660) [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %.loc22_5.1: %ImplicitAs.type.0ec = converted Core.IntLiteral, %ImplicitAs.facet.loc22_5.1 [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %ImplicitAs.facet.loc22_5.2: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.660) [concrete = constants.%ImplicitAs.facet.2ed] +// CHECK:STDOUT: %.loc22_5.2: %ImplicitAs.type.0ec = converted Core.IntLiteral, %ImplicitAs.facet.loc22_5.2 [concrete = constants.%ImplicitAs.facet.2ed] // CHECK:STDOUT: %specific_fn.loc22: = specific_function %impl.elem1.loc22, @T.as_type.as.OrderedWith.impl.LessOrEquivalent.3(constants.%ImplicitAs.facet.2ed) [concrete = constants.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.specific_fn.05fce2.1] // CHECK:STDOUT: %bound_method.loc22_5.2: = bound_method %int_1.loc22, %specific_fn.loc22 [concrete = constants.%bound_method.83e687.1] -// CHECK:STDOUT: %.loc22_5.2: %T.as_type.as.OrderedWith.impl.LessOrEquivalent.type.1522a4.1 = specific_constant imports.%Core.LessOrEquivalent.d90, @T.as_type.as.OrderedWith.impl.df2(constants.%ImplicitAs.facet.2ed) [concrete = constants.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.b7cd44.1] -// CHECK:STDOUT: %LessOrEquivalent.ref.loc22: %T.as_type.as.OrderedWith.impl.LessOrEquivalent.type.1522a4.1 = name_ref LessOrEquivalent, %.loc22_5.2 [concrete = constants.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.b7cd44.1] +// CHECK:STDOUT: %.loc22_5.3: %T.as_type.as.OrderedWith.impl.LessOrEquivalent.type.1522a4.1 = specific_constant imports.%Core.LessOrEquivalent.d90, @T.as_type.as.OrderedWith.impl.df2(constants.%ImplicitAs.facet.2ed) [concrete = constants.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.b7cd44.1] +// CHECK:STDOUT: %LessOrEquivalent.ref.loc22: %T.as_type.as.OrderedWith.impl.LessOrEquivalent.type.1522a4.1 = name_ref LessOrEquivalent, %.loc22_5.3 [concrete = constants.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.b7cd44.1] // CHECK:STDOUT: %T.as_type.as.OrderedWith.impl.LessOrEquivalent.bound.loc22: = bound_method %int_1.loc22, %LessOrEquivalent.ref.loc22 [concrete = constants.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.bound.2eaa72.2] // CHECK:STDOUT: %T.as_type.as.OrderedWith.impl.LessOrEquivalent.specific_fn.loc22: = specific_function %LessOrEquivalent.ref.loc22, @T.as_type.as.OrderedWith.impl.LessOrEquivalent.4(constants.%ImplicitAs.facet.2ed) [concrete = constants.%T.as_type.as.OrderedWith.impl.LessOrEquivalent.specific_fn.05fce2.2] // CHECK:STDOUT: %bound_method.loc22_5.3: = bound_method %int_1.loc22, %T.as_type.as.OrderedWith.impl.LessOrEquivalent.specific_fn.loc22 [concrete = constants.%bound_method.83e687.2] @@ -2379,6 +2451,8 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %i64: type = class_type @Int, @Int(%int_64) [concrete] // CHECK:STDOUT: %i64.builtin: type = int_type signed, %int_64 [concrete] // CHECK:STDOUT: %pattern_type.d58: type = pattern_type %Cpp.long_long [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.d58 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.d58 = var_pattern %a.patt [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ec: type = facet_type <@ImplicitAs, @ImplicitAs(%Cpp.long_long)> [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -2393,6 +2467,8 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type = struct_value () [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert [concrete] // CHECK:STDOUT: %int_1.b19: %Cpp.long_long = int_value 1 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.d58 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.d58 = var_pattern %b.patt [concrete] // CHECK:STDOUT: %AddAssignWith.type.166: type = facet_type <@AddAssignWith, @AddAssignWith(%Cpp.long_long)> [concrete] // CHECK:STDOUT: %U.bf2: %ImplicitAs.type.0ec = symbolic_binding U, 0 [symbolic] // CHECK:STDOUT: %Cpp.long_long.as.AddAssignWith.impl.Op.type.524923.1: type = fn_type @Cpp.long_long.as.AddAssignWith.impl.Op.1, @Cpp.long_long.as.AddAssignWith.impl(%U.bf2) [symbolic] @@ -2592,16 +2668,16 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %Core.import_ref.463: @Cpp.long_long.as.LeftShiftAssignWith.impl.%Cpp.long_long.as.LeftShiftAssignWith.impl.Op.type.2 (%Cpp.long_long.as.LeftShiftAssignWith.impl.Op.type.d78f49.1) = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [symbolic = @Cpp.long_long.as.LeftShiftAssignWith.impl.%Cpp.long_long.as.LeftShiftAssignWith.impl.Op.2 (constants.%Cpp.long_long.as.LeftShiftAssignWith.impl.Op.688a59.1)] // CHECK:STDOUT: %LeftShiftAssignWith.impl_witness_table.dd0 = impl_witness_table (%Core.import_ref.463), @Cpp.long_long.as.LeftShiftAssignWith.impl [concrete] // CHECK:STDOUT: %Core.Op.3c4: @Cpp.long_long.as.LeftShiftAssignWith.impl.%Cpp.long_long.as.LeftShiftAssignWith.impl.Op.type.1 (%Cpp.long_long.as.LeftShiftAssignWith.impl.Op.type.d78f49.2) = import_ref Core//prelude/types/cpp/int, Op, loaded [symbolic = @Cpp.long_long.as.LeftShiftAssignWith.impl.%Cpp.long_long.as.LeftShiftAssignWith.impl.Op.1 (constants.%Cpp.long_long.as.LeftShiftAssignWith.impl.Op.688a59.2)] -// CHECK:STDOUT: %Core.import_ref.6d5: @Cpp.long_long.as.RightShiftAssignWith.impl.%Cpp.long_long.as.RightShiftAssignWith.impl.Op.type.2 (%Cpp.long_long.as.RightShiftAssignWith.impl.Op.type.2a7c37.1) = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [symbolic = @Cpp.long_long.as.RightShiftAssignWith.impl.%Cpp.long_long.as.RightShiftAssignWith.impl.Op.2 (constants.%Cpp.long_long.as.RightShiftAssignWith.impl.Op.9744e0.1)] -// CHECK:STDOUT: %RightShiftAssignWith.impl_witness_table.00b = impl_witness_table (%Core.import_ref.6d5), @Cpp.long_long.as.RightShiftAssignWith.impl [concrete] +// CHECK:STDOUT: %Core.import_ref.6d5a: @Cpp.long_long.as.RightShiftAssignWith.impl.%Cpp.long_long.as.RightShiftAssignWith.impl.Op.type.2 (%Cpp.long_long.as.RightShiftAssignWith.impl.Op.type.2a7c37.1) = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [symbolic = @Cpp.long_long.as.RightShiftAssignWith.impl.%Cpp.long_long.as.RightShiftAssignWith.impl.Op.2 (constants.%Cpp.long_long.as.RightShiftAssignWith.impl.Op.9744e0.1)] +// CHECK:STDOUT: %RightShiftAssignWith.impl_witness_table.00b = impl_witness_table (%Core.import_ref.6d5a), @Cpp.long_long.as.RightShiftAssignWith.impl [concrete] // CHECK:STDOUT: %Core.Op.77b: @Cpp.long_long.as.RightShiftAssignWith.impl.%Cpp.long_long.as.RightShiftAssignWith.impl.Op.type.1 (%Cpp.long_long.as.RightShiftAssignWith.impl.Op.type.2a7c37.2) = import_ref Core//prelude/types/cpp/int, Op, loaded [symbolic = @Cpp.long_long.as.RightShiftAssignWith.impl.%Cpp.long_long.as.RightShiftAssignWith.impl.Op.1 (constants.%Cpp.long_long.as.RightShiftAssignWith.impl.Op.9744e0.2)] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @CompoundAssignmentHomogeneousLongLong() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.d58 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.d58 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.d58 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.d58 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %Cpp.long_long = var %a.var_patt // CHECK:STDOUT: %int_1.loc8: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -2616,8 +2692,8 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %Cpp.long_long = ref_binding a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.d58 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.d58 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.d58 = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type.d58 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %Cpp.long_long = var %b.var_patt // CHECK:STDOUT: %int_1.loc9: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -2635,13 +2711,15 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %b.ref.loc11: ref %Cpp.long_long = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc11: %.a99 = impl_witness_access constants.%AddAssignWith.impl_witness.82d, element0 [concrete = constants.%Cpp.long_long.as.AddAssignWith.impl.Op.57b7c2.2] // CHECK:STDOUT: %bound_method.loc11_5.1: = bound_method %a.ref.loc11, %impl.elem0.loc11 -// CHECK:STDOUT: %ImplicitAs.facet.loc11: %ImplicitAs.type.0ec = facet_value constants.%Cpp.long_long, (constants.%ImplicitAs.impl_witness.3f3) [concrete = constants.%ImplicitAs.facet.7bc] -// CHECK:STDOUT: %.loc11_5.1: %ImplicitAs.type.0ec = converted constants.%Cpp.long_long, %ImplicitAs.facet.loc11 [concrete = constants.%ImplicitAs.facet.7bc] +// CHECK:STDOUT: %ImplicitAs.facet.loc11_5.1: %ImplicitAs.type.0ec = facet_value constants.%Cpp.long_long, (constants.%ImplicitAs.impl_witness.3f3) [concrete = constants.%ImplicitAs.facet.7bc] +// CHECK:STDOUT: %.loc11_5.1: %ImplicitAs.type.0ec = converted constants.%Cpp.long_long, %ImplicitAs.facet.loc11_5.1 [concrete = constants.%ImplicitAs.facet.7bc] +// CHECK:STDOUT: %ImplicitAs.facet.loc11_5.2: %ImplicitAs.type.0ec = facet_value constants.%Cpp.long_long, (constants.%ImplicitAs.impl_witness.3f3) [concrete = constants.%ImplicitAs.facet.7bc] +// CHECK:STDOUT: %.loc11_5.2: %ImplicitAs.type.0ec = converted constants.%Cpp.long_long, %ImplicitAs.facet.loc11_5.2 [concrete = constants.%ImplicitAs.facet.7bc] // CHECK:STDOUT: %specific_fn.loc11: = specific_function %impl.elem0.loc11, @Cpp.long_long.as.AddAssignWith.impl.Op.1(constants.%ImplicitAs.facet.7bc) [concrete = constants.%Cpp.long_long.as.AddAssignWith.impl.Op.specific_fn.51a919.1] // CHECK:STDOUT: %bound_method.loc11_5.2: = bound_method %a.ref.loc11, %specific_fn.loc11 // CHECK:STDOUT: %.loc11_8: %Cpp.long_long = acquire_value %b.ref.loc11 -// CHECK:STDOUT: %.loc11_5.2: %Cpp.long_long.as.AddAssignWith.impl.Op.type.7da4ae.1 = specific_constant imports.%Core.Op.c11, @Cpp.long_long.as.AddAssignWith.impl(constants.%ImplicitAs.facet.7bc) [concrete = constants.%Cpp.long_long.as.AddAssignWith.impl.Op.57b7c2.1] -// CHECK:STDOUT: %Op.ref.loc11: %Cpp.long_long.as.AddAssignWith.impl.Op.type.7da4ae.1 = name_ref Op, %.loc11_5.2 [concrete = constants.%Cpp.long_long.as.AddAssignWith.impl.Op.57b7c2.1] +// CHECK:STDOUT: %.loc11_5.3: %Cpp.long_long.as.AddAssignWith.impl.Op.type.7da4ae.1 = specific_constant imports.%Core.Op.c11, @Cpp.long_long.as.AddAssignWith.impl(constants.%ImplicitAs.facet.7bc) [concrete = constants.%Cpp.long_long.as.AddAssignWith.impl.Op.57b7c2.1] +// CHECK:STDOUT: %Op.ref.loc11: %Cpp.long_long.as.AddAssignWith.impl.Op.type.7da4ae.1 = name_ref Op, %.loc11_5.3 [concrete = constants.%Cpp.long_long.as.AddAssignWith.impl.Op.57b7c2.1] // CHECK:STDOUT: %Cpp.long_long.as.AddAssignWith.impl.Op.bound: = bound_method %a.ref.loc11, %Op.ref.loc11 // CHECK:STDOUT: %Cpp.long_long.as.AddAssignWith.impl.Op.specific_fn: = specific_function %Op.ref.loc11, @Cpp.long_long.as.AddAssignWith.impl.Op.2(constants.%ImplicitAs.facet.7bc) [concrete = constants.%Cpp.long_long.as.AddAssignWith.impl.Op.specific_fn.51a919.2] // CHECK:STDOUT: %bound_method.loc11_5.3: = bound_method %a.ref.loc11, %Cpp.long_long.as.AddAssignWith.impl.Op.specific_fn @@ -2650,13 +2728,15 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %b.ref.loc12: ref %Cpp.long_long = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc12: %.17f = impl_witness_access constants.%SubAssignWith.impl_witness.d2c, element0 [concrete = constants.%Cpp.long_long.as.SubAssignWith.impl.Op.2d41e3.2] // CHECK:STDOUT: %bound_method.loc12_5.1: = bound_method %a.ref.loc12, %impl.elem0.loc12 -// CHECK:STDOUT: %ImplicitAs.facet.loc12: %ImplicitAs.type.0ec = facet_value constants.%Cpp.long_long, (constants.%ImplicitAs.impl_witness.3f3) [concrete = constants.%ImplicitAs.facet.7bc] -// CHECK:STDOUT: %.loc12_5.1: %ImplicitAs.type.0ec = converted constants.%Cpp.long_long, %ImplicitAs.facet.loc12 [concrete = constants.%ImplicitAs.facet.7bc] +// CHECK:STDOUT: %ImplicitAs.facet.loc12_5.1: %ImplicitAs.type.0ec = facet_value constants.%Cpp.long_long, (constants.%ImplicitAs.impl_witness.3f3) [concrete = constants.%ImplicitAs.facet.7bc] +// CHECK:STDOUT: %.loc12_5.1: %ImplicitAs.type.0ec = converted constants.%Cpp.long_long, %ImplicitAs.facet.loc12_5.1 [concrete = constants.%ImplicitAs.facet.7bc] +// CHECK:STDOUT: %ImplicitAs.facet.loc12_5.2: %ImplicitAs.type.0ec = facet_value constants.%Cpp.long_long, (constants.%ImplicitAs.impl_witness.3f3) [concrete = constants.%ImplicitAs.facet.7bc] +// CHECK:STDOUT: %.loc12_5.2: %ImplicitAs.type.0ec = converted constants.%Cpp.long_long, %ImplicitAs.facet.loc12_5.2 [concrete = constants.%ImplicitAs.facet.7bc] // CHECK:STDOUT: %specific_fn.loc12: = specific_function %impl.elem0.loc12, @Cpp.long_long.as.SubAssignWith.impl.Op.1(constants.%ImplicitAs.facet.7bc) [concrete = constants.%Cpp.long_long.as.SubAssignWith.impl.Op.specific_fn.6e9b6c.1] // CHECK:STDOUT: %bound_method.loc12_5.2: = bound_method %a.ref.loc12, %specific_fn.loc12 // CHECK:STDOUT: %.loc12_8: %Cpp.long_long = acquire_value %b.ref.loc12 -// CHECK:STDOUT: %.loc12_5.2: %Cpp.long_long.as.SubAssignWith.impl.Op.type.c6ad2e.1 = specific_constant imports.%Core.Op.3dd, @Cpp.long_long.as.SubAssignWith.impl(constants.%ImplicitAs.facet.7bc) [concrete = constants.%Cpp.long_long.as.SubAssignWith.impl.Op.2d41e3.1] -// CHECK:STDOUT: %Op.ref.loc12: %Cpp.long_long.as.SubAssignWith.impl.Op.type.c6ad2e.1 = name_ref Op, %.loc12_5.2 [concrete = constants.%Cpp.long_long.as.SubAssignWith.impl.Op.2d41e3.1] +// CHECK:STDOUT: %.loc12_5.3: %Cpp.long_long.as.SubAssignWith.impl.Op.type.c6ad2e.1 = specific_constant imports.%Core.Op.3dd, @Cpp.long_long.as.SubAssignWith.impl(constants.%ImplicitAs.facet.7bc) [concrete = constants.%Cpp.long_long.as.SubAssignWith.impl.Op.2d41e3.1] +// CHECK:STDOUT: %Op.ref.loc12: %Cpp.long_long.as.SubAssignWith.impl.Op.type.c6ad2e.1 = name_ref Op, %.loc12_5.3 [concrete = constants.%Cpp.long_long.as.SubAssignWith.impl.Op.2d41e3.1] // CHECK:STDOUT: %Cpp.long_long.as.SubAssignWith.impl.Op.bound: = bound_method %a.ref.loc12, %Op.ref.loc12 // CHECK:STDOUT: %Cpp.long_long.as.SubAssignWith.impl.Op.specific_fn: = specific_function %Op.ref.loc12, @Cpp.long_long.as.SubAssignWith.impl.Op.2(constants.%ImplicitAs.facet.7bc) [concrete = constants.%Cpp.long_long.as.SubAssignWith.impl.Op.specific_fn.6e9b6c.2] // CHECK:STDOUT: %bound_method.loc12_5.3: = bound_method %a.ref.loc12, %Cpp.long_long.as.SubAssignWith.impl.Op.specific_fn @@ -2665,13 +2745,15 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %b.ref.loc13: ref %Cpp.long_long = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc13: %.50e = impl_witness_access constants.%MulAssignWith.impl_witness.96f, element0 [concrete = constants.%Cpp.long_long.as.MulAssignWith.impl.Op.46f6d9.2] // CHECK:STDOUT: %bound_method.loc13_5.1: = bound_method %a.ref.loc13, %impl.elem0.loc13 -// CHECK:STDOUT: %ImplicitAs.facet.loc13: %ImplicitAs.type.0ec = facet_value constants.%Cpp.long_long, (constants.%ImplicitAs.impl_witness.3f3) [concrete = constants.%ImplicitAs.facet.7bc] -// CHECK:STDOUT: %.loc13_5.1: %ImplicitAs.type.0ec = converted constants.%Cpp.long_long, %ImplicitAs.facet.loc13 [concrete = constants.%ImplicitAs.facet.7bc] +// CHECK:STDOUT: %ImplicitAs.facet.loc13_5.1: %ImplicitAs.type.0ec = facet_value constants.%Cpp.long_long, (constants.%ImplicitAs.impl_witness.3f3) [concrete = constants.%ImplicitAs.facet.7bc] +// CHECK:STDOUT: %.loc13_5.1: %ImplicitAs.type.0ec = converted constants.%Cpp.long_long, %ImplicitAs.facet.loc13_5.1 [concrete = constants.%ImplicitAs.facet.7bc] +// CHECK:STDOUT: %ImplicitAs.facet.loc13_5.2: %ImplicitAs.type.0ec = facet_value constants.%Cpp.long_long, (constants.%ImplicitAs.impl_witness.3f3) [concrete = constants.%ImplicitAs.facet.7bc] +// CHECK:STDOUT: %.loc13_5.2: %ImplicitAs.type.0ec = converted constants.%Cpp.long_long, %ImplicitAs.facet.loc13_5.2 [concrete = constants.%ImplicitAs.facet.7bc] // CHECK:STDOUT: %specific_fn.loc13: = specific_function %impl.elem0.loc13, @Cpp.long_long.as.MulAssignWith.impl.Op.1(constants.%ImplicitAs.facet.7bc) [concrete = constants.%Cpp.long_long.as.MulAssignWith.impl.Op.specific_fn.762651.1] // CHECK:STDOUT: %bound_method.loc13_5.2: = bound_method %a.ref.loc13, %specific_fn.loc13 // CHECK:STDOUT: %.loc13_8: %Cpp.long_long = acquire_value %b.ref.loc13 -// CHECK:STDOUT: %.loc13_5.2: %Cpp.long_long.as.MulAssignWith.impl.Op.type.892850.1 = specific_constant imports.%Core.Op.1a0, @Cpp.long_long.as.MulAssignWith.impl(constants.%ImplicitAs.facet.7bc) [concrete = constants.%Cpp.long_long.as.MulAssignWith.impl.Op.46f6d9.1] -// CHECK:STDOUT: %Op.ref.loc13: %Cpp.long_long.as.MulAssignWith.impl.Op.type.892850.1 = name_ref Op, %.loc13_5.2 [concrete = constants.%Cpp.long_long.as.MulAssignWith.impl.Op.46f6d9.1] +// CHECK:STDOUT: %.loc13_5.3: %Cpp.long_long.as.MulAssignWith.impl.Op.type.892850.1 = specific_constant imports.%Core.Op.1a0, @Cpp.long_long.as.MulAssignWith.impl(constants.%ImplicitAs.facet.7bc) [concrete = constants.%Cpp.long_long.as.MulAssignWith.impl.Op.46f6d9.1] +// CHECK:STDOUT: %Op.ref.loc13: %Cpp.long_long.as.MulAssignWith.impl.Op.type.892850.1 = name_ref Op, %.loc13_5.3 [concrete = constants.%Cpp.long_long.as.MulAssignWith.impl.Op.46f6d9.1] // CHECK:STDOUT: %Cpp.long_long.as.MulAssignWith.impl.Op.bound: = bound_method %a.ref.loc13, %Op.ref.loc13 // CHECK:STDOUT: %Cpp.long_long.as.MulAssignWith.impl.Op.specific_fn: = specific_function %Op.ref.loc13, @Cpp.long_long.as.MulAssignWith.impl.Op.2(constants.%ImplicitAs.facet.7bc) [concrete = constants.%Cpp.long_long.as.MulAssignWith.impl.Op.specific_fn.762651.2] // CHECK:STDOUT: %bound_method.loc13_5.3: = bound_method %a.ref.loc13, %Cpp.long_long.as.MulAssignWith.impl.Op.specific_fn @@ -2680,13 +2762,15 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %b.ref.loc14: ref %Cpp.long_long = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc14: %.1d3 = impl_witness_access constants.%DivAssignWith.impl_witness.0c4, element0 [concrete = constants.%Cpp.long_long.as.DivAssignWith.impl.Op.1dcb1e.2] // CHECK:STDOUT: %bound_method.loc14_5.1: = bound_method %a.ref.loc14, %impl.elem0.loc14 -// CHECK:STDOUT: %ImplicitAs.facet.loc14: %ImplicitAs.type.0ec = facet_value constants.%Cpp.long_long, (constants.%ImplicitAs.impl_witness.3f3) [concrete = constants.%ImplicitAs.facet.7bc] -// CHECK:STDOUT: %.loc14_5.1: %ImplicitAs.type.0ec = converted constants.%Cpp.long_long, %ImplicitAs.facet.loc14 [concrete = constants.%ImplicitAs.facet.7bc] +// CHECK:STDOUT: %ImplicitAs.facet.loc14_5.1: %ImplicitAs.type.0ec = facet_value constants.%Cpp.long_long, (constants.%ImplicitAs.impl_witness.3f3) [concrete = constants.%ImplicitAs.facet.7bc] +// CHECK:STDOUT: %.loc14_5.1: %ImplicitAs.type.0ec = converted constants.%Cpp.long_long, %ImplicitAs.facet.loc14_5.1 [concrete = constants.%ImplicitAs.facet.7bc] +// CHECK:STDOUT: %ImplicitAs.facet.loc14_5.2: %ImplicitAs.type.0ec = facet_value constants.%Cpp.long_long, (constants.%ImplicitAs.impl_witness.3f3) [concrete = constants.%ImplicitAs.facet.7bc] +// CHECK:STDOUT: %.loc14_5.2: %ImplicitAs.type.0ec = converted constants.%Cpp.long_long, %ImplicitAs.facet.loc14_5.2 [concrete = constants.%ImplicitAs.facet.7bc] // CHECK:STDOUT: %specific_fn.loc14: = specific_function %impl.elem0.loc14, @Cpp.long_long.as.DivAssignWith.impl.Op.1(constants.%ImplicitAs.facet.7bc) [concrete = constants.%Cpp.long_long.as.DivAssignWith.impl.Op.specific_fn.20bed4.1] // CHECK:STDOUT: %bound_method.loc14_5.2: = bound_method %a.ref.loc14, %specific_fn.loc14 // CHECK:STDOUT: %.loc14_8: %Cpp.long_long = acquire_value %b.ref.loc14 -// CHECK:STDOUT: %.loc14_5.2: %Cpp.long_long.as.DivAssignWith.impl.Op.type.90284d.1 = specific_constant imports.%Core.Op.4db, @Cpp.long_long.as.DivAssignWith.impl(constants.%ImplicitAs.facet.7bc) [concrete = constants.%Cpp.long_long.as.DivAssignWith.impl.Op.1dcb1e.1] -// CHECK:STDOUT: %Op.ref.loc14: %Cpp.long_long.as.DivAssignWith.impl.Op.type.90284d.1 = name_ref Op, %.loc14_5.2 [concrete = constants.%Cpp.long_long.as.DivAssignWith.impl.Op.1dcb1e.1] +// CHECK:STDOUT: %.loc14_5.3: %Cpp.long_long.as.DivAssignWith.impl.Op.type.90284d.1 = specific_constant imports.%Core.Op.4db, @Cpp.long_long.as.DivAssignWith.impl(constants.%ImplicitAs.facet.7bc) [concrete = constants.%Cpp.long_long.as.DivAssignWith.impl.Op.1dcb1e.1] +// CHECK:STDOUT: %Op.ref.loc14: %Cpp.long_long.as.DivAssignWith.impl.Op.type.90284d.1 = name_ref Op, %.loc14_5.3 [concrete = constants.%Cpp.long_long.as.DivAssignWith.impl.Op.1dcb1e.1] // CHECK:STDOUT: %Cpp.long_long.as.DivAssignWith.impl.Op.bound: = bound_method %a.ref.loc14, %Op.ref.loc14 // CHECK:STDOUT: %Cpp.long_long.as.DivAssignWith.impl.Op.specific_fn: = specific_function %Op.ref.loc14, @Cpp.long_long.as.DivAssignWith.impl.Op.2(constants.%ImplicitAs.facet.7bc) [concrete = constants.%Cpp.long_long.as.DivAssignWith.impl.Op.specific_fn.20bed4.2] // CHECK:STDOUT: %bound_method.loc14_5.3: = bound_method %a.ref.loc14, %Cpp.long_long.as.DivAssignWith.impl.Op.specific_fn @@ -2695,13 +2779,15 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %b.ref.loc15: ref %Cpp.long_long = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc15: %.e86 = impl_witness_access constants.%ModAssignWith.impl_witness.ed9, element0 [concrete = constants.%Cpp.long_long.as.ModAssignWith.impl.Op.1c5c20.2] // CHECK:STDOUT: %bound_method.loc15_5.1: = bound_method %a.ref.loc15, %impl.elem0.loc15 -// CHECK:STDOUT: %ImplicitAs.facet.loc15: %ImplicitAs.type.0ec = facet_value constants.%Cpp.long_long, (constants.%ImplicitAs.impl_witness.3f3) [concrete = constants.%ImplicitAs.facet.7bc] -// CHECK:STDOUT: %.loc15_5.1: %ImplicitAs.type.0ec = converted constants.%Cpp.long_long, %ImplicitAs.facet.loc15 [concrete = constants.%ImplicitAs.facet.7bc] +// CHECK:STDOUT: %ImplicitAs.facet.loc15_5.1: %ImplicitAs.type.0ec = facet_value constants.%Cpp.long_long, (constants.%ImplicitAs.impl_witness.3f3) [concrete = constants.%ImplicitAs.facet.7bc] +// CHECK:STDOUT: %.loc15_5.1: %ImplicitAs.type.0ec = converted constants.%Cpp.long_long, %ImplicitAs.facet.loc15_5.1 [concrete = constants.%ImplicitAs.facet.7bc] +// CHECK:STDOUT: %ImplicitAs.facet.loc15_5.2: %ImplicitAs.type.0ec = facet_value constants.%Cpp.long_long, (constants.%ImplicitAs.impl_witness.3f3) [concrete = constants.%ImplicitAs.facet.7bc] +// CHECK:STDOUT: %.loc15_5.2: %ImplicitAs.type.0ec = converted constants.%Cpp.long_long, %ImplicitAs.facet.loc15_5.2 [concrete = constants.%ImplicitAs.facet.7bc] // CHECK:STDOUT: %specific_fn.loc15: = specific_function %impl.elem0.loc15, @Cpp.long_long.as.ModAssignWith.impl.Op.1(constants.%ImplicitAs.facet.7bc) [concrete = constants.%Cpp.long_long.as.ModAssignWith.impl.Op.specific_fn.0d98f1.1] // CHECK:STDOUT: %bound_method.loc15_5.2: = bound_method %a.ref.loc15, %specific_fn.loc15 // CHECK:STDOUT: %.loc15_8: %Cpp.long_long = acquire_value %b.ref.loc15 -// CHECK:STDOUT: %.loc15_5.2: %Cpp.long_long.as.ModAssignWith.impl.Op.type.030e50.1 = specific_constant imports.%Core.Op.978, @Cpp.long_long.as.ModAssignWith.impl(constants.%ImplicitAs.facet.7bc) [concrete = constants.%Cpp.long_long.as.ModAssignWith.impl.Op.1c5c20.1] -// CHECK:STDOUT: %Op.ref.loc15: %Cpp.long_long.as.ModAssignWith.impl.Op.type.030e50.1 = name_ref Op, %.loc15_5.2 [concrete = constants.%Cpp.long_long.as.ModAssignWith.impl.Op.1c5c20.1] +// CHECK:STDOUT: %.loc15_5.3: %Cpp.long_long.as.ModAssignWith.impl.Op.type.030e50.1 = specific_constant imports.%Core.Op.978, @Cpp.long_long.as.ModAssignWith.impl(constants.%ImplicitAs.facet.7bc) [concrete = constants.%Cpp.long_long.as.ModAssignWith.impl.Op.1c5c20.1] +// CHECK:STDOUT: %Op.ref.loc15: %Cpp.long_long.as.ModAssignWith.impl.Op.type.030e50.1 = name_ref Op, %.loc15_5.3 [concrete = constants.%Cpp.long_long.as.ModAssignWith.impl.Op.1c5c20.1] // CHECK:STDOUT: %Cpp.long_long.as.ModAssignWith.impl.Op.bound: = bound_method %a.ref.loc15, %Op.ref.loc15 // CHECK:STDOUT: %Cpp.long_long.as.ModAssignWith.impl.Op.specific_fn: = specific_function %Op.ref.loc15, @Cpp.long_long.as.ModAssignWith.impl.Op.2(constants.%ImplicitAs.facet.7bc) [concrete = constants.%Cpp.long_long.as.ModAssignWith.impl.Op.specific_fn.0d98f1.2] // CHECK:STDOUT: %bound_method.loc15_5.3: = bound_method %a.ref.loc15, %Cpp.long_long.as.ModAssignWith.impl.Op.specific_fn @@ -2710,13 +2796,15 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %b.ref.loc17: ref %Cpp.long_long = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc17: %.922 = impl_witness_access constants.%BitAndAssignWith.impl_witness.8e7, element0 [concrete = constants.%Cpp.long_long.as.BitAndAssignWith.impl.Op.da411d.2] // CHECK:STDOUT: %bound_method.loc17_5.1: = bound_method %a.ref.loc17, %impl.elem0.loc17 -// CHECK:STDOUT: %ImplicitAs.facet.loc17: %ImplicitAs.type.0ec = facet_value constants.%Cpp.long_long, (constants.%ImplicitAs.impl_witness.3f3) [concrete = constants.%ImplicitAs.facet.7bc] -// CHECK:STDOUT: %.loc17_5.1: %ImplicitAs.type.0ec = converted constants.%Cpp.long_long, %ImplicitAs.facet.loc17 [concrete = constants.%ImplicitAs.facet.7bc] +// CHECK:STDOUT: %ImplicitAs.facet.loc17_5.1: %ImplicitAs.type.0ec = facet_value constants.%Cpp.long_long, (constants.%ImplicitAs.impl_witness.3f3) [concrete = constants.%ImplicitAs.facet.7bc] +// CHECK:STDOUT: %.loc17_5.1: %ImplicitAs.type.0ec = converted constants.%Cpp.long_long, %ImplicitAs.facet.loc17_5.1 [concrete = constants.%ImplicitAs.facet.7bc] +// CHECK:STDOUT: %ImplicitAs.facet.loc17_5.2: %ImplicitAs.type.0ec = facet_value constants.%Cpp.long_long, (constants.%ImplicitAs.impl_witness.3f3) [concrete = constants.%ImplicitAs.facet.7bc] +// CHECK:STDOUT: %.loc17_5.2: %ImplicitAs.type.0ec = converted constants.%Cpp.long_long, %ImplicitAs.facet.loc17_5.2 [concrete = constants.%ImplicitAs.facet.7bc] // CHECK:STDOUT: %specific_fn.loc17: = specific_function %impl.elem0.loc17, @Cpp.long_long.as.BitAndAssignWith.impl.Op.1(constants.%ImplicitAs.facet.7bc) [concrete = constants.%Cpp.long_long.as.BitAndAssignWith.impl.Op.specific_fn.dc94b5.1] // CHECK:STDOUT: %bound_method.loc17_5.2: = bound_method %a.ref.loc17, %specific_fn.loc17 // CHECK:STDOUT: %.loc17_8: %Cpp.long_long = acquire_value %b.ref.loc17 -// CHECK:STDOUT: %.loc17_5.2: %Cpp.long_long.as.BitAndAssignWith.impl.Op.type.f75b5c.1 = specific_constant imports.%Core.Op.96f, @Cpp.long_long.as.BitAndAssignWith.impl(constants.%ImplicitAs.facet.7bc) [concrete = constants.%Cpp.long_long.as.BitAndAssignWith.impl.Op.da411d.1] -// CHECK:STDOUT: %Op.ref.loc17: %Cpp.long_long.as.BitAndAssignWith.impl.Op.type.f75b5c.1 = name_ref Op, %.loc17_5.2 [concrete = constants.%Cpp.long_long.as.BitAndAssignWith.impl.Op.da411d.1] +// CHECK:STDOUT: %.loc17_5.3: %Cpp.long_long.as.BitAndAssignWith.impl.Op.type.f75b5c.1 = specific_constant imports.%Core.Op.96f, @Cpp.long_long.as.BitAndAssignWith.impl(constants.%ImplicitAs.facet.7bc) [concrete = constants.%Cpp.long_long.as.BitAndAssignWith.impl.Op.da411d.1] +// CHECK:STDOUT: %Op.ref.loc17: %Cpp.long_long.as.BitAndAssignWith.impl.Op.type.f75b5c.1 = name_ref Op, %.loc17_5.3 [concrete = constants.%Cpp.long_long.as.BitAndAssignWith.impl.Op.da411d.1] // CHECK:STDOUT: %Cpp.long_long.as.BitAndAssignWith.impl.Op.bound: = bound_method %a.ref.loc17, %Op.ref.loc17 // CHECK:STDOUT: %Cpp.long_long.as.BitAndAssignWith.impl.Op.specific_fn: = specific_function %Op.ref.loc17, @Cpp.long_long.as.BitAndAssignWith.impl.Op.2(constants.%ImplicitAs.facet.7bc) [concrete = constants.%Cpp.long_long.as.BitAndAssignWith.impl.Op.specific_fn.dc94b5.2] // CHECK:STDOUT: %bound_method.loc17_5.3: = bound_method %a.ref.loc17, %Cpp.long_long.as.BitAndAssignWith.impl.Op.specific_fn @@ -2725,13 +2813,15 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %b.ref.loc18: ref %Cpp.long_long = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc18: %.cc3 = impl_witness_access constants.%BitOrAssignWith.impl_witness.d84, element0 [concrete = constants.%Cpp.long_long.as.BitOrAssignWith.impl.Op.1137bd.2] // CHECK:STDOUT: %bound_method.loc18_5.1: = bound_method %a.ref.loc18, %impl.elem0.loc18 -// CHECK:STDOUT: %ImplicitAs.facet.loc18: %ImplicitAs.type.0ec = facet_value constants.%Cpp.long_long, (constants.%ImplicitAs.impl_witness.3f3) [concrete = constants.%ImplicitAs.facet.7bc] -// CHECK:STDOUT: %.loc18_5.1: %ImplicitAs.type.0ec = converted constants.%Cpp.long_long, %ImplicitAs.facet.loc18 [concrete = constants.%ImplicitAs.facet.7bc] +// CHECK:STDOUT: %ImplicitAs.facet.loc18_5.1: %ImplicitAs.type.0ec = facet_value constants.%Cpp.long_long, (constants.%ImplicitAs.impl_witness.3f3) [concrete = constants.%ImplicitAs.facet.7bc] +// CHECK:STDOUT: %.loc18_5.1: %ImplicitAs.type.0ec = converted constants.%Cpp.long_long, %ImplicitAs.facet.loc18_5.1 [concrete = constants.%ImplicitAs.facet.7bc] +// CHECK:STDOUT: %ImplicitAs.facet.loc18_5.2: %ImplicitAs.type.0ec = facet_value constants.%Cpp.long_long, (constants.%ImplicitAs.impl_witness.3f3) [concrete = constants.%ImplicitAs.facet.7bc] +// CHECK:STDOUT: %.loc18_5.2: %ImplicitAs.type.0ec = converted constants.%Cpp.long_long, %ImplicitAs.facet.loc18_5.2 [concrete = constants.%ImplicitAs.facet.7bc] // CHECK:STDOUT: %specific_fn.loc18: = specific_function %impl.elem0.loc18, @Cpp.long_long.as.BitOrAssignWith.impl.Op.1(constants.%ImplicitAs.facet.7bc) [concrete = constants.%Cpp.long_long.as.BitOrAssignWith.impl.Op.specific_fn.9908b9.1] // CHECK:STDOUT: %bound_method.loc18_5.2: = bound_method %a.ref.loc18, %specific_fn.loc18 // CHECK:STDOUT: %.loc18_8: %Cpp.long_long = acquire_value %b.ref.loc18 -// CHECK:STDOUT: %.loc18_5.2: %Cpp.long_long.as.BitOrAssignWith.impl.Op.type.503598.1 = specific_constant imports.%Core.Op.152, @Cpp.long_long.as.BitOrAssignWith.impl(constants.%ImplicitAs.facet.7bc) [concrete = constants.%Cpp.long_long.as.BitOrAssignWith.impl.Op.1137bd.1] -// CHECK:STDOUT: %Op.ref.loc18: %Cpp.long_long.as.BitOrAssignWith.impl.Op.type.503598.1 = name_ref Op, %.loc18_5.2 [concrete = constants.%Cpp.long_long.as.BitOrAssignWith.impl.Op.1137bd.1] +// CHECK:STDOUT: %.loc18_5.3: %Cpp.long_long.as.BitOrAssignWith.impl.Op.type.503598.1 = specific_constant imports.%Core.Op.152, @Cpp.long_long.as.BitOrAssignWith.impl(constants.%ImplicitAs.facet.7bc) [concrete = constants.%Cpp.long_long.as.BitOrAssignWith.impl.Op.1137bd.1] +// CHECK:STDOUT: %Op.ref.loc18: %Cpp.long_long.as.BitOrAssignWith.impl.Op.type.503598.1 = name_ref Op, %.loc18_5.3 [concrete = constants.%Cpp.long_long.as.BitOrAssignWith.impl.Op.1137bd.1] // CHECK:STDOUT: %Cpp.long_long.as.BitOrAssignWith.impl.Op.bound: = bound_method %a.ref.loc18, %Op.ref.loc18 // CHECK:STDOUT: %Cpp.long_long.as.BitOrAssignWith.impl.Op.specific_fn: = specific_function %Op.ref.loc18, @Cpp.long_long.as.BitOrAssignWith.impl.Op.2(constants.%ImplicitAs.facet.7bc) [concrete = constants.%Cpp.long_long.as.BitOrAssignWith.impl.Op.specific_fn.9908b9.2] // CHECK:STDOUT: %bound_method.loc18_5.3: = bound_method %a.ref.loc18, %Cpp.long_long.as.BitOrAssignWith.impl.Op.specific_fn @@ -2740,13 +2830,15 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %b.ref.loc19: ref %Cpp.long_long = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc19: %.cae = impl_witness_access constants.%BitXorAssignWith.impl_witness.462, element0 [concrete = constants.%Cpp.long_long.as.BitXorAssignWith.impl.Op.84559f.2] // CHECK:STDOUT: %bound_method.loc19_5.1: = bound_method %a.ref.loc19, %impl.elem0.loc19 -// CHECK:STDOUT: %ImplicitAs.facet.loc19: %ImplicitAs.type.0ec = facet_value constants.%Cpp.long_long, (constants.%ImplicitAs.impl_witness.3f3) [concrete = constants.%ImplicitAs.facet.7bc] -// CHECK:STDOUT: %.loc19_5.1: %ImplicitAs.type.0ec = converted constants.%Cpp.long_long, %ImplicitAs.facet.loc19 [concrete = constants.%ImplicitAs.facet.7bc] +// CHECK:STDOUT: %ImplicitAs.facet.loc19_5.1: %ImplicitAs.type.0ec = facet_value constants.%Cpp.long_long, (constants.%ImplicitAs.impl_witness.3f3) [concrete = constants.%ImplicitAs.facet.7bc] +// CHECK:STDOUT: %.loc19_5.1: %ImplicitAs.type.0ec = converted constants.%Cpp.long_long, %ImplicitAs.facet.loc19_5.1 [concrete = constants.%ImplicitAs.facet.7bc] +// CHECK:STDOUT: %ImplicitAs.facet.loc19_5.2: %ImplicitAs.type.0ec = facet_value constants.%Cpp.long_long, (constants.%ImplicitAs.impl_witness.3f3) [concrete = constants.%ImplicitAs.facet.7bc] +// CHECK:STDOUT: %.loc19_5.2: %ImplicitAs.type.0ec = converted constants.%Cpp.long_long, %ImplicitAs.facet.loc19_5.2 [concrete = constants.%ImplicitAs.facet.7bc] // CHECK:STDOUT: %specific_fn.loc19: = specific_function %impl.elem0.loc19, @Cpp.long_long.as.BitXorAssignWith.impl.Op.1(constants.%ImplicitAs.facet.7bc) [concrete = constants.%Cpp.long_long.as.BitXorAssignWith.impl.Op.specific_fn.1bb816.1] // CHECK:STDOUT: %bound_method.loc19_5.2: = bound_method %a.ref.loc19, %specific_fn.loc19 // CHECK:STDOUT: %.loc19_8: %Cpp.long_long = acquire_value %b.ref.loc19 -// CHECK:STDOUT: %.loc19_5.2: %Cpp.long_long.as.BitXorAssignWith.impl.Op.type.3d8271.1 = specific_constant imports.%Core.Op.993, @Cpp.long_long.as.BitXorAssignWith.impl(constants.%ImplicitAs.facet.7bc) [concrete = constants.%Cpp.long_long.as.BitXorAssignWith.impl.Op.84559f.1] -// CHECK:STDOUT: %Op.ref.loc19: %Cpp.long_long.as.BitXorAssignWith.impl.Op.type.3d8271.1 = name_ref Op, %.loc19_5.2 [concrete = constants.%Cpp.long_long.as.BitXorAssignWith.impl.Op.84559f.1] +// CHECK:STDOUT: %.loc19_5.3: %Cpp.long_long.as.BitXorAssignWith.impl.Op.type.3d8271.1 = specific_constant imports.%Core.Op.993, @Cpp.long_long.as.BitXorAssignWith.impl(constants.%ImplicitAs.facet.7bc) [concrete = constants.%Cpp.long_long.as.BitXorAssignWith.impl.Op.84559f.1] +// CHECK:STDOUT: %Op.ref.loc19: %Cpp.long_long.as.BitXorAssignWith.impl.Op.type.3d8271.1 = name_ref Op, %.loc19_5.3 [concrete = constants.%Cpp.long_long.as.BitXorAssignWith.impl.Op.84559f.1] // CHECK:STDOUT: %Cpp.long_long.as.BitXorAssignWith.impl.Op.bound: = bound_method %a.ref.loc19, %Op.ref.loc19 // CHECK:STDOUT: %Cpp.long_long.as.BitXorAssignWith.impl.Op.specific_fn: = specific_function %Op.ref.loc19, @Cpp.long_long.as.BitXorAssignWith.impl.Op.2(constants.%ImplicitAs.facet.7bc) [concrete = constants.%Cpp.long_long.as.BitXorAssignWith.impl.Op.specific_fn.1bb816.2] // CHECK:STDOUT: %bound_method.loc19_5.3: = bound_method %a.ref.loc19, %Cpp.long_long.as.BitXorAssignWith.impl.Op.specific_fn @@ -2755,13 +2847,15 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %b.ref.loc20: ref %Cpp.long_long = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc20: %.c95 = impl_witness_access constants.%LeftShiftAssignWith.impl_witness.812, element0 [concrete = constants.%Cpp.long_long.as.LeftShiftAssignWith.impl.Op.4e964c.2] // CHECK:STDOUT: %bound_method.loc20_5.1: = bound_method %a.ref.loc20, %impl.elem0.loc20 -// CHECK:STDOUT: %ImplicitAs.facet.loc20: %ImplicitAs.type.0ec = facet_value constants.%Cpp.long_long, (constants.%ImplicitAs.impl_witness.3f3) [concrete = constants.%ImplicitAs.facet.7bc] -// CHECK:STDOUT: %.loc20_5.1: %ImplicitAs.type.0ec = converted constants.%Cpp.long_long, %ImplicitAs.facet.loc20 [concrete = constants.%ImplicitAs.facet.7bc] +// CHECK:STDOUT: %ImplicitAs.facet.loc20_5.1: %ImplicitAs.type.0ec = facet_value constants.%Cpp.long_long, (constants.%ImplicitAs.impl_witness.3f3) [concrete = constants.%ImplicitAs.facet.7bc] +// CHECK:STDOUT: %.loc20_5.1: %ImplicitAs.type.0ec = converted constants.%Cpp.long_long, %ImplicitAs.facet.loc20_5.1 [concrete = constants.%ImplicitAs.facet.7bc] +// CHECK:STDOUT: %ImplicitAs.facet.loc20_5.2: %ImplicitAs.type.0ec = facet_value constants.%Cpp.long_long, (constants.%ImplicitAs.impl_witness.3f3) [concrete = constants.%ImplicitAs.facet.7bc] +// CHECK:STDOUT: %.loc20_5.2: %ImplicitAs.type.0ec = converted constants.%Cpp.long_long, %ImplicitAs.facet.loc20_5.2 [concrete = constants.%ImplicitAs.facet.7bc] // CHECK:STDOUT: %specific_fn.loc20: = specific_function %impl.elem0.loc20, @Cpp.long_long.as.LeftShiftAssignWith.impl.Op.1(constants.%ImplicitAs.facet.7bc) [concrete = constants.%Cpp.long_long.as.LeftShiftAssignWith.impl.Op.specific_fn.ebef73.1] // CHECK:STDOUT: %bound_method.loc20_5.2: = bound_method %a.ref.loc20, %specific_fn.loc20 // CHECK:STDOUT: %.loc20_9: %Cpp.long_long = acquire_value %b.ref.loc20 -// CHECK:STDOUT: %.loc20_5.2: %Cpp.long_long.as.LeftShiftAssignWith.impl.Op.type.25e1dd.1 = specific_constant imports.%Core.Op.3c4, @Cpp.long_long.as.LeftShiftAssignWith.impl(constants.%ImplicitAs.facet.7bc) [concrete = constants.%Cpp.long_long.as.LeftShiftAssignWith.impl.Op.4e964c.1] -// CHECK:STDOUT: %Op.ref.loc20: %Cpp.long_long.as.LeftShiftAssignWith.impl.Op.type.25e1dd.1 = name_ref Op, %.loc20_5.2 [concrete = constants.%Cpp.long_long.as.LeftShiftAssignWith.impl.Op.4e964c.1] +// CHECK:STDOUT: %.loc20_5.3: %Cpp.long_long.as.LeftShiftAssignWith.impl.Op.type.25e1dd.1 = specific_constant imports.%Core.Op.3c4, @Cpp.long_long.as.LeftShiftAssignWith.impl(constants.%ImplicitAs.facet.7bc) [concrete = constants.%Cpp.long_long.as.LeftShiftAssignWith.impl.Op.4e964c.1] +// CHECK:STDOUT: %Op.ref.loc20: %Cpp.long_long.as.LeftShiftAssignWith.impl.Op.type.25e1dd.1 = name_ref Op, %.loc20_5.3 [concrete = constants.%Cpp.long_long.as.LeftShiftAssignWith.impl.Op.4e964c.1] // CHECK:STDOUT: %Cpp.long_long.as.LeftShiftAssignWith.impl.Op.bound: = bound_method %a.ref.loc20, %Op.ref.loc20 // CHECK:STDOUT: %Cpp.long_long.as.LeftShiftAssignWith.impl.Op.specific_fn: = specific_function %Op.ref.loc20, @Cpp.long_long.as.LeftShiftAssignWith.impl.Op.2(constants.%ImplicitAs.facet.7bc) [concrete = constants.%Cpp.long_long.as.LeftShiftAssignWith.impl.Op.specific_fn.ebef73.2] // CHECK:STDOUT: %bound_method.loc20_5.3: = bound_method %a.ref.loc20, %Cpp.long_long.as.LeftShiftAssignWith.impl.Op.specific_fn @@ -2770,13 +2864,15 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %b.ref.loc21: ref %Cpp.long_long = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc21: %.888 = impl_witness_access constants.%RightShiftAssignWith.impl_witness.dab, element0 [concrete = constants.%Cpp.long_long.as.RightShiftAssignWith.impl.Op.02ad61.2] // CHECK:STDOUT: %bound_method.loc21_5.1: = bound_method %a.ref.loc21, %impl.elem0.loc21 -// CHECK:STDOUT: %ImplicitAs.facet.loc21: %ImplicitAs.type.0ec = facet_value constants.%Cpp.long_long, (constants.%ImplicitAs.impl_witness.3f3) [concrete = constants.%ImplicitAs.facet.7bc] -// CHECK:STDOUT: %.loc21_5.1: %ImplicitAs.type.0ec = converted constants.%Cpp.long_long, %ImplicitAs.facet.loc21 [concrete = constants.%ImplicitAs.facet.7bc] +// CHECK:STDOUT: %ImplicitAs.facet.loc21_5.1: %ImplicitAs.type.0ec = facet_value constants.%Cpp.long_long, (constants.%ImplicitAs.impl_witness.3f3) [concrete = constants.%ImplicitAs.facet.7bc] +// CHECK:STDOUT: %.loc21_5.1: %ImplicitAs.type.0ec = converted constants.%Cpp.long_long, %ImplicitAs.facet.loc21_5.1 [concrete = constants.%ImplicitAs.facet.7bc] +// CHECK:STDOUT: %ImplicitAs.facet.loc21_5.2: %ImplicitAs.type.0ec = facet_value constants.%Cpp.long_long, (constants.%ImplicitAs.impl_witness.3f3) [concrete = constants.%ImplicitAs.facet.7bc] +// CHECK:STDOUT: %.loc21_5.2: %ImplicitAs.type.0ec = converted constants.%Cpp.long_long, %ImplicitAs.facet.loc21_5.2 [concrete = constants.%ImplicitAs.facet.7bc] // CHECK:STDOUT: %specific_fn.loc21: = specific_function %impl.elem0.loc21, @Cpp.long_long.as.RightShiftAssignWith.impl.Op.1(constants.%ImplicitAs.facet.7bc) [concrete = constants.%Cpp.long_long.as.RightShiftAssignWith.impl.Op.specific_fn.fa67f5.1] // CHECK:STDOUT: %bound_method.loc21_5.2: = bound_method %a.ref.loc21, %specific_fn.loc21 // CHECK:STDOUT: %.loc21_9: %Cpp.long_long = acquire_value %b.ref.loc21 -// CHECK:STDOUT: %.loc21_5.2: %Cpp.long_long.as.RightShiftAssignWith.impl.Op.type.5579b8.1 = specific_constant imports.%Core.Op.77b, @Cpp.long_long.as.RightShiftAssignWith.impl(constants.%ImplicitAs.facet.7bc) [concrete = constants.%Cpp.long_long.as.RightShiftAssignWith.impl.Op.02ad61.1] -// CHECK:STDOUT: %Op.ref.loc21: %Cpp.long_long.as.RightShiftAssignWith.impl.Op.type.5579b8.1 = name_ref Op, %.loc21_5.2 [concrete = constants.%Cpp.long_long.as.RightShiftAssignWith.impl.Op.02ad61.1] +// CHECK:STDOUT: %.loc21_5.3: %Cpp.long_long.as.RightShiftAssignWith.impl.Op.type.5579b8.1 = specific_constant imports.%Core.Op.77b, @Cpp.long_long.as.RightShiftAssignWith.impl(constants.%ImplicitAs.facet.7bc) [concrete = constants.%Cpp.long_long.as.RightShiftAssignWith.impl.Op.02ad61.1] +// CHECK:STDOUT: %Op.ref.loc21: %Cpp.long_long.as.RightShiftAssignWith.impl.Op.type.5579b8.1 = name_ref Op, %.loc21_5.3 [concrete = constants.%Cpp.long_long.as.RightShiftAssignWith.impl.Op.02ad61.1] // CHECK:STDOUT: %Cpp.long_long.as.RightShiftAssignWith.impl.Op.bound: = bound_method %a.ref.loc21, %Op.ref.loc21 // CHECK:STDOUT: %Cpp.long_long.as.RightShiftAssignWith.impl.Op.specific_fn: = specific_function %Op.ref.loc21, @Cpp.long_long.as.RightShiftAssignWith.impl.Op.2(constants.%ImplicitAs.facet.7bc) [concrete = constants.%Cpp.long_long.as.RightShiftAssignWith.impl.Op.specific_fn.fa67f5.2] // CHECK:STDOUT: %bound_method.loc21_5.3: = bound_method %a.ref.loc21, %Cpp.long_long.as.RightShiftAssignWith.impl.Op.specific_fn @@ -2810,6 +2906,8 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %Cpp.long_long: type = class_type @LongLong64 [concrete] // CHECK:STDOUT: %pattern_type.d58: type = pattern_type %Cpp.long_long [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.d58 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.d58 = var_pattern %a.patt [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ec: type = facet_type <@ImplicitAs, @ImplicitAs(%Cpp.long_long)> [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.660: = impl_witness imports.%ImplicitAs.impl_witness_table.d6d [concrete] // CHECK:STDOUT: %ImplicitAs.facet.2ed: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.660) [concrete] @@ -3016,8 +3114,8 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %Core.import_ref.463: @Cpp.long_long.as.LeftShiftAssignWith.impl.%Cpp.long_long.as.LeftShiftAssignWith.impl.Op.type.2 (%Cpp.long_long.as.LeftShiftAssignWith.impl.Op.type.d78f49.1) = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [symbolic = @Cpp.long_long.as.LeftShiftAssignWith.impl.%Cpp.long_long.as.LeftShiftAssignWith.impl.Op.2 (constants.%Cpp.long_long.as.LeftShiftAssignWith.impl.Op.688a59.1)] // CHECK:STDOUT: %LeftShiftAssignWith.impl_witness_table.dd0 = impl_witness_table (%Core.import_ref.463), @Cpp.long_long.as.LeftShiftAssignWith.impl [concrete] // CHECK:STDOUT: %Core.Op.3c4: @Cpp.long_long.as.LeftShiftAssignWith.impl.%Cpp.long_long.as.LeftShiftAssignWith.impl.Op.type.1 (%Cpp.long_long.as.LeftShiftAssignWith.impl.Op.type.d78f49.2) = import_ref Core//prelude/types/cpp/int, Op, loaded [symbolic = @Cpp.long_long.as.LeftShiftAssignWith.impl.%Cpp.long_long.as.LeftShiftAssignWith.impl.Op.1 (constants.%Cpp.long_long.as.LeftShiftAssignWith.impl.Op.688a59.2)] -// CHECK:STDOUT: %Core.import_ref.6d5: @Cpp.long_long.as.RightShiftAssignWith.impl.%Cpp.long_long.as.RightShiftAssignWith.impl.Op.type.2 (%Cpp.long_long.as.RightShiftAssignWith.impl.Op.type.2a7c37.1) = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [symbolic = @Cpp.long_long.as.RightShiftAssignWith.impl.%Cpp.long_long.as.RightShiftAssignWith.impl.Op.2 (constants.%Cpp.long_long.as.RightShiftAssignWith.impl.Op.9744e0.1)] -// CHECK:STDOUT: %RightShiftAssignWith.impl_witness_table.00b = impl_witness_table (%Core.import_ref.6d5), @Cpp.long_long.as.RightShiftAssignWith.impl [concrete] +// CHECK:STDOUT: %Core.import_ref.6d5a: @Cpp.long_long.as.RightShiftAssignWith.impl.%Cpp.long_long.as.RightShiftAssignWith.impl.Op.type.2 (%Cpp.long_long.as.RightShiftAssignWith.impl.Op.type.2a7c37.1) = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [symbolic = @Cpp.long_long.as.RightShiftAssignWith.impl.%Cpp.long_long.as.RightShiftAssignWith.impl.Op.2 (constants.%Cpp.long_long.as.RightShiftAssignWith.impl.Op.9744e0.1)] +// CHECK:STDOUT: %RightShiftAssignWith.impl_witness_table.00b = impl_witness_table (%Core.import_ref.6d5a), @Cpp.long_long.as.RightShiftAssignWith.impl [concrete] // CHECK:STDOUT: %Core.Op.77b: @Cpp.long_long.as.RightShiftAssignWith.impl.%Cpp.long_long.as.RightShiftAssignWith.impl.Op.type.1 (%Cpp.long_long.as.RightShiftAssignWith.impl.Op.type.2a7c37.2) = import_ref Core//prelude/types/cpp/int, Op, loaded [symbolic = @Cpp.long_long.as.RightShiftAssignWith.impl.%Cpp.long_long.as.RightShiftAssignWith.impl.Op.1 (constants.%Cpp.long_long.as.RightShiftAssignWith.impl.Op.9744e0.2)] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -3025,8 +3123,8 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.d58 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.d58 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.d58 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.d58 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %Cpp.long_long = var %a.var_patt // CHECK:STDOUT: %int_1.loc9: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -3044,12 +3142,14 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %b.ref.loc10: %i64 = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc10_5: %.4c9 = impl_witness_access constants.%AddAssignWith.impl_witness.610, element0 [concrete = constants.%Cpp.long_long.as.AddAssignWith.impl.Op.0167bf.2] // CHECK:STDOUT: %bound_method.loc10_5.1: = bound_method %a.ref.loc10, %impl.elem0.loc10_5 -// CHECK:STDOUT: %ImplicitAs.facet.loc10: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] -// CHECK:STDOUT: %.loc10_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc10 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc10_5.1: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc10_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc10_5.1 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc10_5.2: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc10_5.2: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc10_5.2 [concrete = constants.%ImplicitAs.facet.7a4] // CHECK:STDOUT: %specific_fn.loc10: = specific_function %impl.elem0.loc10_5, @Cpp.long_long.as.AddAssignWith.impl.Op.1(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.AddAssignWith.impl.Op.specific_fn.57a765.1] // CHECK:STDOUT: %bound_method.loc10_5.2: = bound_method %a.ref.loc10, %specific_fn.loc10 -// CHECK:STDOUT: %.loc10_5.2: %Cpp.long_long.as.AddAssignWith.impl.Op.type.6f7c53.1 = specific_constant imports.%Core.Op.c11, @Cpp.long_long.as.AddAssignWith.impl(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.AddAssignWith.impl.Op.0167bf.1] -// CHECK:STDOUT: %Op.ref.loc10: %Cpp.long_long.as.AddAssignWith.impl.Op.type.6f7c53.1 = name_ref Op, %.loc10_5.2 [concrete = constants.%Cpp.long_long.as.AddAssignWith.impl.Op.0167bf.1] +// CHECK:STDOUT: %.loc10_5.3: %Cpp.long_long.as.AddAssignWith.impl.Op.type.6f7c53.1 = specific_constant imports.%Core.Op.c11, @Cpp.long_long.as.AddAssignWith.impl(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.AddAssignWith.impl.Op.0167bf.1] +// CHECK:STDOUT: %Op.ref.loc10: %Cpp.long_long.as.AddAssignWith.impl.Op.type.6f7c53.1 = name_ref Op, %.loc10_5.3 [concrete = constants.%Cpp.long_long.as.AddAssignWith.impl.Op.0167bf.1] // CHECK:STDOUT: %Cpp.long_long.as.AddAssignWith.impl.Op.bound: = bound_method %a.ref.loc10, %Op.ref.loc10 // CHECK:STDOUT: %Cpp.long_long.as.AddAssignWith.impl.Op.specific_fn: = specific_function %Op.ref.loc10, @Cpp.long_long.as.AddAssignWith.impl.Op.2(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.AddAssignWith.impl.Op.specific_fn.57a765.2] // CHECK:STDOUT: %bound_method.loc10_5.3: = bound_method %a.ref.loc10, %Cpp.long_long.as.AddAssignWith.impl.Op.specific_fn @@ -3063,12 +3163,14 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %b.ref.loc11: %i64 = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc11_5: %.aed = impl_witness_access constants.%SubAssignWith.impl_witness.2a8, element0 [concrete = constants.%Cpp.long_long.as.SubAssignWith.impl.Op.1509c5.2] // CHECK:STDOUT: %bound_method.loc11_5.1: = bound_method %a.ref.loc11, %impl.elem0.loc11_5 -// CHECK:STDOUT: %ImplicitAs.facet.loc11: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] -// CHECK:STDOUT: %.loc11_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc11 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc11_5.1: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc11_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc11_5.1 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc11_5.2: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc11_5.2: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc11_5.2 [concrete = constants.%ImplicitAs.facet.7a4] // CHECK:STDOUT: %specific_fn.loc11: = specific_function %impl.elem0.loc11_5, @Cpp.long_long.as.SubAssignWith.impl.Op.1(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.SubAssignWith.impl.Op.specific_fn.7824e6.1] // CHECK:STDOUT: %bound_method.loc11_5.2: = bound_method %a.ref.loc11, %specific_fn.loc11 -// CHECK:STDOUT: %.loc11_5.2: %Cpp.long_long.as.SubAssignWith.impl.Op.type.798be9.1 = specific_constant imports.%Core.Op.3dd, @Cpp.long_long.as.SubAssignWith.impl(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.SubAssignWith.impl.Op.1509c5.1] -// CHECK:STDOUT: %Op.ref.loc11: %Cpp.long_long.as.SubAssignWith.impl.Op.type.798be9.1 = name_ref Op, %.loc11_5.2 [concrete = constants.%Cpp.long_long.as.SubAssignWith.impl.Op.1509c5.1] +// CHECK:STDOUT: %.loc11_5.3: %Cpp.long_long.as.SubAssignWith.impl.Op.type.798be9.1 = specific_constant imports.%Core.Op.3dd, @Cpp.long_long.as.SubAssignWith.impl(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.SubAssignWith.impl.Op.1509c5.1] +// CHECK:STDOUT: %Op.ref.loc11: %Cpp.long_long.as.SubAssignWith.impl.Op.type.798be9.1 = name_ref Op, %.loc11_5.3 [concrete = constants.%Cpp.long_long.as.SubAssignWith.impl.Op.1509c5.1] // CHECK:STDOUT: %Cpp.long_long.as.SubAssignWith.impl.Op.bound: = bound_method %a.ref.loc11, %Op.ref.loc11 // CHECK:STDOUT: %Cpp.long_long.as.SubAssignWith.impl.Op.specific_fn: = specific_function %Op.ref.loc11, @Cpp.long_long.as.SubAssignWith.impl.Op.2(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.SubAssignWith.impl.Op.specific_fn.7824e6.2] // CHECK:STDOUT: %bound_method.loc11_5.3: = bound_method %a.ref.loc11, %Cpp.long_long.as.SubAssignWith.impl.Op.specific_fn @@ -3082,12 +3184,14 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %b.ref.loc12: %i64 = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc12_5: %.9c3 = impl_witness_access constants.%MulAssignWith.impl_witness.3bc, element0 [concrete = constants.%Cpp.long_long.as.MulAssignWith.impl.Op.5d705c.2] // CHECK:STDOUT: %bound_method.loc12_5.1: = bound_method %a.ref.loc12, %impl.elem0.loc12_5 -// CHECK:STDOUT: %ImplicitAs.facet.loc12: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] -// CHECK:STDOUT: %.loc12_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc12 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc12_5.1: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc12_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc12_5.1 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc12_5.2: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc12_5.2: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc12_5.2 [concrete = constants.%ImplicitAs.facet.7a4] // CHECK:STDOUT: %specific_fn.loc12: = specific_function %impl.elem0.loc12_5, @Cpp.long_long.as.MulAssignWith.impl.Op.1(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.MulAssignWith.impl.Op.specific_fn.89951d.1] // CHECK:STDOUT: %bound_method.loc12_5.2: = bound_method %a.ref.loc12, %specific_fn.loc12 -// CHECK:STDOUT: %.loc12_5.2: %Cpp.long_long.as.MulAssignWith.impl.Op.type.26ce70.1 = specific_constant imports.%Core.Op.1a0, @Cpp.long_long.as.MulAssignWith.impl(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.MulAssignWith.impl.Op.5d705c.1] -// CHECK:STDOUT: %Op.ref.loc12: %Cpp.long_long.as.MulAssignWith.impl.Op.type.26ce70.1 = name_ref Op, %.loc12_5.2 [concrete = constants.%Cpp.long_long.as.MulAssignWith.impl.Op.5d705c.1] +// CHECK:STDOUT: %.loc12_5.3: %Cpp.long_long.as.MulAssignWith.impl.Op.type.26ce70.1 = specific_constant imports.%Core.Op.1a0, @Cpp.long_long.as.MulAssignWith.impl(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.MulAssignWith.impl.Op.5d705c.1] +// CHECK:STDOUT: %Op.ref.loc12: %Cpp.long_long.as.MulAssignWith.impl.Op.type.26ce70.1 = name_ref Op, %.loc12_5.3 [concrete = constants.%Cpp.long_long.as.MulAssignWith.impl.Op.5d705c.1] // CHECK:STDOUT: %Cpp.long_long.as.MulAssignWith.impl.Op.bound: = bound_method %a.ref.loc12, %Op.ref.loc12 // CHECK:STDOUT: %Cpp.long_long.as.MulAssignWith.impl.Op.specific_fn: = specific_function %Op.ref.loc12, @Cpp.long_long.as.MulAssignWith.impl.Op.2(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.MulAssignWith.impl.Op.specific_fn.89951d.2] // CHECK:STDOUT: %bound_method.loc12_5.3: = bound_method %a.ref.loc12, %Cpp.long_long.as.MulAssignWith.impl.Op.specific_fn @@ -3101,12 +3205,14 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %b.ref.loc13: %i64 = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc13_5: %.2a8 = impl_witness_access constants.%DivAssignWith.impl_witness.f1b, element0 [concrete = constants.%Cpp.long_long.as.DivAssignWith.impl.Op.98d348.2] // CHECK:STDOUT: %bound_method.loc13_5.1: = bound_method %a.ref.loc13, %impl.elem0.loc13_5 -// CHECK:STDOUT: %ImplicitAs.facet.loc13: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] -// CHECK:STDOUT: %.loc13_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc13 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc13_5.1: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc13_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc13_5.1 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc13_5.2: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc13_5.2: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc13_5.2 [concrete = constants.%ImplicitAs.facet.7a4] // CHECK:STDOUT: %specific_fn.loc13: = specific_function %impl.elem0.loc13_5, @Cpp.long_long.as.DivAssignWith.impl.Op.1(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.DivAssignWith.impl.Op.specific_fn.2d709b.1] // CHECK:STDOUT: %bound_method.loc13_5.2: = bound_method %a.ref.loc13, %specific_fn.loc13 -// CHECK:STDOUT: %.loc13_5.2: %Cpp.long_long.as.DivAssignWith.impl.Op.type.5f499c.1 = specific_constant imports.%Core.Op.4db, @Cpp.long_long.as.DivAssignWith.impl(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.DivAssignWith.impl.Op.98d348.1] -// CHECK:STDOUT: %Op.ref.loc13: %Cpp.long_long.as.DivAssignWith.impl.Op.type.5f499c.1 = name_ref Op, %.loc13_5.2 [concrete = constants.%Cpp.long_long.as.DivAssignWith.impl.Op.98d348.1] +// CHECK:STDOUT: %.loc13_5.3: %Cpp.long_long.as.DivAssignWith.impl.Op.type.5f499c.1 = specific_constant imports.%Core.Op.4db, @Cpp.long_long.as.DivAssignWith.impl(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.DivAssignWith.impl.Op.98d348.1] +// CHECK:STDOUT: %Op.ref.loc13: %Cpp.long_long.as.DivAssignWith.impl.Op.type.5f499c.1 = name_ref Op, %.loc13_5.3 [concrete = constants.%Cpp.long_long.as.DivAssignWith.impl.Op.98d348.1] // CHECK:STDOUT: %Cpp.long_long.as.DivAssignWith.impl.Op.bound: = bound_method %a.ref.loc13, %Op.ref.loc13 // CHECK:STDOUT: %Cpp.long_long.as.DivAssignWith.impl.Op.specific_fn: = specific_function %Op.ref.loc13, @Cpp.long_long.as.DivAssignWith.impl.Op.2(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.DivAssignWith.impl.Op.specific_fn.2d709b.2] // CHECK:STDOUT: %bound_method.loc13_5.3: = bound_method %a.ref.loc13, %Cpp.long_long.as.DivAssignWith.impl.Op.specific_fn @@ -3120,12 +3226,14 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %b.ref.loc14: %i64 = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc14_5: %.7bd = impl_witness_access constants.%ModAssignWith.impl_witness.563, element0 [concrete = constants.%Cpp.long_long.as.ModAssignWith.impl.Op.6bf2ce.2] // CHECK:STDOUT: %bound_method.loc14_5.1: = bound_method %a.ref.loc14, %impl.elem0.loc14_5 -// CHECK:STDOUT: %ImplicitAs.facet.loc14: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] -// CHECK:STDOUT: %.loc14_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc14 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc14_5.1: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc14_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc14_5.1 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc14_5.2: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc14_5.2: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc14_5.2 [concrete = constants.%ImplicitAs.facet.7a4] // CHECK:STDOUT: %specific_fn.loc14: = specific_function %impl.elem0.loc14_5, @Cpp.long_long.as.ModAssignWith.impl.Op.1(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.ModAssignWith.impl.Op.specific_fn.b20423.1] // CHECK:STDOUT: %bound_method.loc14_5.2: = bound_method %a.ref.loc14, %specific_fn.loc14 -// CHECK:STDOUT: %.loc14_5.2: %Cpp.long_long.as.ModAssignWith.impl.Op.type.89fbed.1 = specific_constant imports.%Core.Op.978, @Cpp.long_long.as.ModAssignWith.impl(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.ModAssignWith.impl.Op.6bf2ce.1] -// CHECK:STDOUT: %Op.ref.loc14: %Cpp.long_long.as.ModAssignWith.impl.Op.type.89fbed.1 = name_ref Op, %.loc14_5.2 [concrete = constants.%Cpp.long_long.as.ModAssignWith.impl.Op.6bf2ce.1] +// CHECK:STDOUT: %.loc14_5.3: %Cpp.long_long.as.ModAssignWith.impl.Op.type.89fbed.1 = specific_constant imports.%Core.Op.978, @Cpp.long_long.as.ModAssignWith.impl(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.ModAssignWith.impl.Op.6bf2ce.1] +// CHECK:STDOUT: %Op.ref.loc14: %Cpp.long_long.as.ModAssignWith.impl.Op.type.89fbed.1 = name_ref Op, %.loc14_5.3 [concrete = constants.%Cpp.long_long.as.ModAssignWith.impl.Op.6bf2ce.1] // CHECK:STDOUT: %Cpp.long_long.as.ModAssignWith.impl.Op.bound: = bound_method %a.ref.loc14, %Op.ref.loc14 // CHECK:STDOUT: %Cpp.long_long.as.ModAssignWith.impl.Op.specific_fn: = specific_function %Op.ref.loc14, @Cpp.long_long.as.ModAssignWith.impl.Op.2(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.ModAssignWith.impl.Op.specific_fn.b20423.2] // CHECK:STDOUT: %bound_method.loc14_5.3: = bound_method %a.ref.loc14, %Cpp.long_long.as.ModAssignWith.impl.Op.specific_fn @@ -3139,12 +3247,14 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %b.ref.loc16: %i64 = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc16_5: %.920 = impl_witness_access constants.%BitAndAssignWith.impl_witness.7e3, element0 [concrete = constants.%Cpp.long_long.as.BitAndAssignWith.impl.Op.678907.2] // CHECK:STDOUT: %bound_method.loc16_5.1: = bound_method %a.ref.loc16, %impl.elem0.loc16_5 -// CHECK:STDOUT: %ImplicitAs.facet.loc16: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] -// CHECK:STDOUT: %.loc16_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc16 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc16_5.1: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc16_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc16_5.1 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc16_5.2: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc16_5.2: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc16_5.2 [concrete = constants.%ImplicitAs.facet.7a4] // CHECK:STDOUT: %specific_fn.loc16: = specific_function %impl.elem0.loc16_5, @Cpp.long_long.as.BitAndAssignWith.impl.Op.1(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.BitAndAssignWith.impl.Op.specific_fn.4fc9be.1] // CHECK:STDOUT: %bound_method.loc16_5.2: = bound_method %a.ref.loc16, %specific_fn.loc16 -// CHECK:STDOUT: %.loc16_5.2: %Cpp.long_long.as.BitAndAssignWith.impl.Op.type.212afa.1 = specific_constant imports.%Core.Op.96f, @Cpp.long_long.as.BitAndAssignWith.impl(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.BitAndAssignWith.impl.Op.678907.1] -// CHECK:STDOUT: %Op.ref.loc16: %Cpp.long_long.as.BitAndAssignWith.impl.Op.type.212afa.1 = name_ref Op, %.loc16_5.2 [concrete = constants.%Cpp.long_long.as.BitAndAssignWith.impl.Op.678907.1] +// CHECK:STDOUT: %.loc16_5.3: %Cpp.long_long.as.BitAndAssignWith.impl.Op.type.212afa.1 = specific_constant imports.%Core.Op.96f, @Cpp.long_long.as.BitAndAssignWith.impl(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.BitAndAssignWith.impl.Op.678907.1] +// CHECK:STDOUT: %Op.ref.loc16: %Cpp.long_long.as.BitAndAssignWith.impl.Op.type.212afa.1 = name_ref Op, %.loc16_5.3 [concrete = constants.%Cpp.long_long.as.BitAndAssignWith.impl.Op.678907.1] // CHECK:STDOUT: %Cpp.long_long.as.BitAndAssignWith.impl.Op.bound: = bound_method %a.ref.loc16, %Op.ref.loc16 // CHECK:STDOUT: %Cpp.long_long.as.BitAndAssignWith.impl.Op.specific_fn: = specific_function %Op.ref.loc16, @Cpp.long_long.as.BitAndAssignWith.impl.Op.2(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.BitAndAssignWith.impl.Op.specific_fn.4fc9be.2] // CHECK:STDOUT: %bound_method.loc16_5.3: = bound_method %a.ref.loc16, %Cpp.long_long.as.BitAndAssignWith.impl.Op.specific_fn @@ -3158,12 +3268,14 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %b.ref.loc17: %i64 = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc17_5: %.ab1 = impl_witness_access constants.%BitOrAssignWith.impl_witness.0f6, element0 [concrete = constants.%Cpp.long_long.as.BitOrAssignWith.impl.Op.bbf3fb.2] // CHECK:STDOUT: %bound_method.loc17_5.1: = bound_method %a.ref.loc17, %impl.elem0.loc17_5 -// CHECK:STDOUT: %ImplicitAs.facet.loc17: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] -// CHECK:STDOUT: %.loc17_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc17 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc17_5.1: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc17_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc17_5.1 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc17_5.2: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc17_5.2: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc17_5.2 [concrete = constants.%ImplicitAs.facet.7a4] // CHECK:STDOUT: %specific_fn.loc17: = specific_function %impl.elem0.loc17_5, @Cpp.long_long.as.BitOrAssignWith.impl.Op.1(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.BitOrAssignWith.impl.Op.specific_fn.80ce92.1] // CHECK:STDOUT: %bound_method.loc17_5.2: = bound_method %a.ref.loc17, %specific_fn.loc17 -// CHECK:STDOUT: %.loc17_5.2: %Cpp.long_long.as.BitOrAssignWith.impl.Op.type.2aebbe.1 = specific_constant imports.%Core.Op.152, @Cpp.long_long.as.BitOrAssignWith.impl(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.BitOrAssignWith.impl.Op.bbf3fb.1] -// CHECK:STDOUT: %Op.ref.loc17: %Cpp.long_long.as.BitOrAssignWith.impl.Op.type.2aebbe.1 = name_ref Op, %.loc17_5.2 [concrete = constants.%Cpp.long_long.as.BitOrAssignWith.impl.Op.bbf3fb.1] +// CHECK:STDOUT: %.loc17_5.3: %Cpp.long_long.as.BitOrAssignWith.impl.Op.type.2aebbe.1 = specific_constant imports.%Core.Op.152, @Cpp.long_long.as.BitOrAssignWith.impl(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.BitOrAssignWith.impl.Op.bbf3fb.1] +// CHECK:STDOUT: %Op.ref.loc17: %Cpp.long_long.as.BitOrAssignWith.impl.Op.type.2aebbe.1 = name_ref Op, %.loc17_5.3 [concrete = constants.%Cpp.long_long.as.BitOrAssignWith.impl.Op.bbf3fb.1] // CHECK:STDOUT: %Cpp.long_long.as.BitOrAssignWith.impl.Op.bound: = bound_method %a.ref.loc17, %Op.ref.loc17 // CHECK:STDOUT: %Cpp.long_long.as.BitOrAssignWith.impl.Op.specific_fn: = specific_function %Op.ref.loc17, @Cpp.long_long.as.BitOrAssignWith.impl.Op.2(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.BitOrAssignWith.impl.Op.specific_fn.80ce92.2] // CHECK:STDOUT: %bound_method.loc17_5.3: = bound_method %a.ref.loc17, %Cpp.long_long.as.BitOrAssignWith.impl.Op.specific_fn @@ -3177,12 +3289,14 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %b.ref.loc18: %i64 = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc18_5: %.931 = impl_witness_access constants.%BitXorAssignWith.impl_witness.400, element0 [concrete = constants.%Cpp.long_long.as.BitXorAssignWith.impl.Op.9c6ff1.2] // CHECK:STDOUT: %bound_method.loc18_5.1: = bound_method %a.ref.loc18, %impl.elem0.loc18_5 -// CHECK:STDOUT: %ImplicitAs.facet.loc18: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] -// CHECK:STDOUT: %.loc18_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc18 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc18_5.1: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc18_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc18_5.1 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc18_5.2: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc18_5.2: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc18_5.2 [concrete = constants.%ImplicitAs.facet.7a4] // CHECK:STDOUT: %specific_fn.loc18: = specific_function %impl.elem0.loc18_5, @Cpp.long_long.as.BitXorAssignWith.impl.Op.1(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.BitXorAssignWith.impl.Op.specific_fn.c20ea8.1] // CHECK:STDOUT: %bound_method.loc18_5.2: = bound_method %a.ref.loc18, %specific_fn.loc18 -// CHECK:STDOUT: %.loc18_5.2: %Cpp.long_long.as.BitXorAssignWith.impl.Op.type.c459c7.1 = specific_constant imports.%Core.Op.993, @Cpp.long_long.as.BitXorAssignWith.impl(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.BitXorAssignWith.impl.Op.9c6ff1.1] -// CHECK:STDOUT: %Op.ref.loc18: %Cpp.long_long.as.BitXorAssignWith.impl.Op.type.c459c7.1 = name_ref Op, %.loc18_5.2 [concrete = constants.%Cpp.long_long.as.BitXorAssignWith.impl.Op.9c6ff1.1] +// CHECK:STDOUT: %.loc18_5.3: %Cpp.long_long.as.BitXorAssignWith.impl.Op.type.c459c7.1 = specific_constant imports.%Core.Op.993, @Cpp.long_long.as.BitXorAssignWith.impl(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.BitXorAssignWith.impl.Op.9c6ff1.1] +// CHECK:STDOUT: %Op.ref.loc18: %Cpp.long_long.as.BitXorAssignWith.impl.Op.type.c459c7.1 = name_ref Op, %.loc18_5.3 [concrete = constants.%Cpp.long_long.as.BitXorAssignWith.impl.Op.9c6ff1.1] // CHECK:STDOUT: %Cpp.long_long.as.BitXorAssignWith.impl.Op.bound: = bound_method %a.ref.loc18, %Op.ref.loc18 // CHECK:STDOUT: %Cpp.long_long.as.BitXorAssignWith.impl.Op.specific_fn: = specific_function %Op.ref.loc18, @Cpp.long_long.as.BitXorAssignWith.impl.Op.2(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.BitXorAssignWith.impl.Op.specific_fn.c20ea8.2] // CHECK:STDOUT: %bound_method.loc18_5.3: = bound_method %a.ref.loc18, %Cpp.long_long.as.BitXorAssignWith.impl.Op.specific_fn @@ -3196,12 +3310,14 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %b.ref.loc19: %i64 = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc19_5: %.7e2 = impl_witness_access constants.%LeftShiftAssignWith.impl_witness.afc, element0 [concrete = constants.%Cpp.long_long.as.LeftShiftAssignWith.impl.Op.4e7679.2] // CHECK:STDOUT: %bound_method.loc19_5.1: = bound_method %a.ref.loc19, %impl.elem0.loc19_5 -// CHECK:STDOUT: %ImplicitAs.facet.loc19: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] -// CHECK:STDOUT: %.loc19_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc19 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc19_5.1: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc19_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc19_5.1 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc19_5.2: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc19_5.2: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc19_5.2 [concrete = constants.%ImplicitAs.facet.7a4] // CHECK:STDOUT: %specific_fn.loc19: = specific_function %impl.elem0.loc19_5, @Cpp.long_long.as.LeftShiftAssignWith.impl.Op.1(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.LeftShiftAssignWith.impl.Op.specific_fn.b21942.1] // CHECK:STDOUT: %bound_method.loc19_5.2: = bound_method %a.ref.loc19, %specific_fn.loc19 -// CHECK:STDOUT: %.loc19_5.2: %Cpp.long_long.as.LeftShiftAssignWith.impl.Op.type.8c1aba.1 = specific_constant imports.%Core.Op.3c4, @Cpp.long_long.as.LeftShiftAssignWith.impl(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.LeftShiftAssignWith.impl.Op.4e7679.1] -// CHECK:STDOUT: %Op.ref.loc19: %Cpp.long_long.as.LeftShiftAssignWith.impl.Op.type.8c1aba.1 = name_ref Op, %.loc19_5.2 [concrete = constants.%Cpp.long_long.as.LeftShiftAssignWith.impl.Op.4e7679.1] +// CHECK:STDOUT: %.loc19_5.3: %Cpp.long_long.as.LeftShiftAssignWith.impl.Op.type.8c1aba.1 = specific_constant imports.%Core.Op.3c4, @Cpp.long_long.as.LeftShiftAssignWith.impl(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.LeftShiftAssignWith.impl.Op.4e7679.1] +// CHECK:STDOUT: %Op.ref.loc19: %Cpp.long_long.as.LeftShiftAssignWith.impl.Op.type.8c1aba.1 = name_ref Op, %.loc19_5.3 [concrete = constants.%Cpp.long_long.as.LeftShiftAssignWith.impl.Op.4e7679.1] // CHECK:STDOUT: %Cpp.long_long.as.LeftShiftAssignWith.impl.Op.bound: = bound_method %a.ref.loc19, %Op.ref.loc19 // CHECK:STDOUT: %Cpp.long_long.as.LeftShiftAssignWith.impl.Op.specific_fn: = specific_function %Op.ref.loc19, @Cpp.long_long.as.LeftShiftAssignWith.impl.Op.2(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.LeftShiftAssignWith.impl.Op.specific_fn.b21942.2] // CHECK:STDOUT: %bound_method.loc19_5.3: = bound_method %a.ref.loc19, %Cpp.long_long.as.LeftShiftAssignWith.impl.Op.specific_fn @@ -3215,12 +3331,14 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %b.ref.loc20: %i64 = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc20_5: %.128 = impl_witness_access constants.%RightShiftAssignWith.impl_witness.68a, element0 [concrete = constants.%Cpp.long_long.as.RightShiftAssignWith.impl.Op.f75d42.2] // CHECK:STDOUT: %bound_method.loc20_5.1: = bound_method %a.ref.loc20, %impl.elem0.loc20_5 -// CHECK:STDOUT: %ImplicitAs.facet.loc20: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] -// CHECK:STDOUT: %.loc20_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc20 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc20_5.1: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc20_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc20_5.1 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc20_5.2: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc20_5.2: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc20_5.2 [concrete = constants.%ImplicitAs.facet.7a4] // CHECK:STDOUT: %specific_fn.loc20: = specific_function %impl.elem0.loc20_5, @Cpp.long_long.as.RightShiftAssignWith.impl.Op.1(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.RightShiftAssignWith.impl.Op.specific_fn.eff961.1] // CHECK:STDOUT: %bound_method.loc20_5.2: = bound_method %a.ref.loc20, %specific_fn.loc20 -// CHECK:STDOUT: %.loc20_5.2: %Cpp.long_long.as.RightShiftAssignWith.impl.Op.type.959149.1 = specific_constant imports.%Core.Op.77b, @Cpp.long_long.as.RightShiftAssignWith.impl(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.RightShiftAssignWith.impl.Op.f75d42.1] -// CHECK:STDOUT: %Op.ref.loc20: %Cpp.long_long.as.RightShiftAssignWith.impl.Op.type.959149.1 = name_ref Op, %.loc20_5.2 [concrete = constants.%Cpp.long_long.as.RightShiftAssignWith.impl.Op.f75d42.1] +// CHECK:STDOUT: %.loc20_5.3: %Cpp.long_long.as.RightShiftAssignWith.impl.Op.type.959149.1 = specific_constant imports.%Core.Op.77b, @Cpp.long_long.as.RightShiftAssignWith.impl(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.RightShiftAssignWith.impl.Op.f75d42.1] +// CHECK:STDOUT: %Op.ref.loc20: %Cpp.long_long.as.RightShiftAssignWith.impl.Op.type.959149.1 = name_ref Op, %.loc20_5.3 [concrete = constants.%Cpp.long_long.as.RightShiftAssignWith.impl.Op.f75d42.1] // CHECK:STDOUT: %Cpp.long_long.as.RightShiftAssignWith.impl.Op.bound: = bound_method %a.ref.loc20, %Op.ref.loc20 // CHECK:STDOUT: %Cpp.long_long.as.RightShiftAssignWith.impl.Op.specific_fn: = specific_function %Op.ref.loc20, @Cpp.long_long.as.RightShiftAssignWith.impl.Op.2(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.RightShiftAssignWith.impl.Op.specific_fn.eff961.2] // CHECK:STDOUT: %bound_method.loc20_5.3: = bound_method %a.ref.loc20, %Cpp.long_long.as.RightShiftAssignWith.impl.Op.specific_fn @@ -3256,6 +3374,8 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %i64: type = class_type @Int, @Int(%int_64) [concrete] // CHECK:STDOUT: %i64.builtin: type = int_type signed, %int_64 [concrete] // CHECK:STDOUT: %pattern_type.d58: type = pattern_type %Cpp.long_long [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.d58 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.d58 = var_pattern %a.patt [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ec: type = facet_type <@ImplicitAs, @ImplicitAs(%Cpp.long_long)> [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.660: = impl_witness imports.%ImplicitAs.impl_witness_table.d6d [concrete] @@ -3301,8 +3421,8 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: fn @CompoundAssignmentLongLongAndIntLiteral() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.d58 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.d58 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.d58 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.d58 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %Cpp.long_long = var %a.var_patt // CHECK:STDOUT: %int_1.loc8: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -3320,12 +3440,14 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %int_1.loc9: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %impl.elem0.loc9_5: %.eab = impl_witness_access constants.%AddAssignWith.impl_witness.b05, element0 [concrete = constants.%Cpp.long_long.as.AddAssignWith.impl.Op.7e3843.2] // CHECK:STDOUT: %bound_method.loc9_5.1: = bound_method %a.ref, %impl.elem0.loc9_5 -// CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.660) [concrete = constants.%ImplicitAs.facet] -// CHECK:STDOUT: %.loc9_5.1: %ImplicitAs.type.0ec = converted Core.IntLiteral, %ImplicitAs.facet [concrete = constants.%ImplicitAs.facet] +// CHECK:STDOUT: %ImplicitAs.facet.loc9_5.1: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.660) [concrete = constants.%ImplicitAs.facet] +// CHECK:STDOUT: %.loc9_5.1: %ImplicitAs.type.0ec = converted Core.IntLiteral, %ImplicitAs.facet.loc9_5.1 [concrete = constants.%ImplicitAs.facet] +// CHECK:STDOUT: %ImplicitAs.facet.loc9_5.2: %ImplicitAs.type.0ec = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.660) [concrete = constants.%ImplicitAs.facet] +// CHECK:STDOUT: %.loc9_5.2: %ImplicitAs.type.0ec = converted Core.IntLiteral, %ImplicitAs.facet.loc9_5.2 [concrete = constants.%ImplicitAs.facet] // CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0.loc9_5, @Cpp.long_long.as.AddAssignWith.impl.Op.1(constants.%ImplicitAs.facet) [concrete = constants.%Cpp.long_long.as.AddAssignWith.impl.Op.specific_fn.d7abb9.1] // CHECK:STDOUT: %bound_method.loc9_5.2: = bound_method %a.ref, %specific_fn -// CHECK:STDOUT: %.loc9_5.2: %Cpp.long_long.as.AddAssignWith.impl.Op.type.3d164b.1 = specific_constant imports.%Core.Op.c11, @Cpp.long_long.as.AddAssignWith.impl(constants.%ImplicitAs.facet) [concrete = constants.%Cpp.long_long.as.AddAssignWith.impl.Op.7e3843.1] -// CHECK:STDOUT: %Op.ref: %Cpp.long_long.as.AddAssignWith.impl.Op.type.3d164b.1 = name_ref Op, %.loc9_5.2 [concrete = constants.%Cpp.long_long.as.AddAssignWith.impl.Op.7e3843.1] +// CHECK:STDOUT: %.loc9_5.3: %Cpp.long_long.as.AddAssignWith.impl.Op.type.3d164b.1 = specific_constant imports.%Core.Op.c11, @Cpp.long_long.as.AddAssignWith.impl(constants.%ImplicitAs.facet) [concrete = constants.%Cpp.long_long.as.AddAssignWith.impl.Op.7e3843.1] +// CHECK:STDOUT: %Op.ref: %Cpp.long_long.as.AddAssignWith.impl.Op.type.3d164b.1 = name_ref Op, %.loc9_5.3 [concrete = constants.%Cpp.long_long.as.AddAssignWith.impl.Op.7e3843.1] // CHECK:STDOUT: %Cpp.long_long.as.AddAssignWith.impl.Op.bound: = bound_method %a.ref, %Op.ref // CHECK:STDOUT: %Cpp.long_long.as.AddAssignWith.impl.Op.specific_fn: = specific_function %Op.ref, @Cpp.long_long.as.AddAssignWith.impl.Op.2(constants.%ImplicitAs.facet) [concrete = constants.%Cpp.long_long.as.AddAssignWith.impl.Op.specific_fn.d7abb9.2] // CHECK:STDOUT: %bound_method.loc9_5.3: = bound_method %a.ref, %Cpp.long_long.as.AddAssignWith.impl.Op.specific_fn @@ -3361,6 +3483,8 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %i64: type = class_type @Int, @Int(%int_64) [concrete] // CHECK:STDOUT: %i64.builtin: type = int_type signed, %int_64 [concrete] // CHECK:STDOUT: %pattern_type.d58: type = pattern_type %Cpp.long_long [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.d58 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.d58 = var_pattern %a.patt [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ec: type = facet_type <@ImplicitAs, @ImplicitAs(%Cpp.long_long)> [concrete] // CHECK:STDOUT: %ImplicitAs.type.221: type = facet_type <@ImplicitAs, @ImplicitAs(%i64)> [concrete] @@ -3373,6 +3497,7 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.5d7: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.3ce [concrete] // CHECK:STDOUT: %int_1.b19: %Cpp.long_long = int_value 1 [concrete] // CHECK:STDOUT: %pattern_type.f57: type = pattern_type %i64 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.f57 = value_binding_pattern b [concrete] // CHECK:STDOUT: %To: Core.IntLiteral = symbolic_binding To, 0 [symbolic] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.e74: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert.2, @Core.IntLiteral.as.ImplicitAs.impl.0e9(%To) [symbolic] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.845: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.e74 = struct_value () [symbolic] @@ -3431,8 +3556,8 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: fn @CompoundAssignmentLongLongAndRuntimeI64() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.d58 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.d58 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.d58 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.d58 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %Cpp.long_long = var %a.var_patt // CHECK:STDOUT: %int_1.loc8: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -3447,10 +3572,9 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %Cpp.long_long = ref_binding a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.f57 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.f57 = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1.loc9: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] -// CHECK:STDOUT: %i64: type = type_literal constants.%i64 [concrete = constants.%i64] // CHECK:STDOUT: %impl.elem0.loc9: %.f34 = impl_witness_access constants.%ImplicitAs.impl_witness.091, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.a1b] // CHECK:STDOUT: %bound_method.loc9_16.1: = bound_method %int_1.loc9, %impl.elem0.loc9 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.89f] // CHECK:STDOUT: %specific_fn.loc9: = specific_function %impl.elem0.loc9, @Core.IntLiteral.as.ImplicitAs.impl.Convert.2(constants.%int_64) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] @@ -3458,17 +3582,20 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc9: init %i64 = call %bound_method.loc9_16.2(%int_1.loc9) [concrete = constants.%int_1.d98] // CHECK:STDOUT: %.loc9_16.1: %i64 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc9 [concrete = constants.%int_1.d98] // CHECK:STDOUT: %.loc9_16.2: %i64 = converted %int_1.loc9, %.loc9_16.1 [concrete = constants.%int_1.d98] +// CHECK:STDOUT: %i64: type = type_literal constants.%i64 [concrete = constants.%i64] // CHECK:STDOUT: %b: %i64 = value_binding b, %.loc9_16.2 // CHECK:STDOUT: %a.ref: ref %Cpp.long_long = name_ref a, %a // CHECK:STDOUT: %b.ref: %i64 = name_ref b, %b // CHECK:STDOUT: %impl.elem0.loc10_5: %.4c9 = impl_witness_access constants.%AddAssignWith.impl_witness.610, element0 [concrete = constants.%Cpp.long_long.as.AddAssignWith.impl.Op.0167bf.2] // CHECK:STDOUT: %bound_method.loc10_5.1: = bound_method %a.ref, %impl.elem0.loc10_5 -// CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] -// CHECK:STDOUT: %.loc10_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc10_5.1: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc10_5.1: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc10_5.1 [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %ImplicitAs.facet.loc10_5.2: %ImplicitAs.type.0ec = facet_value constants.%i64, (constants.%ImplicitAs.impl_witness.305) [concrete = constants.%ImplicitAs.facet.7a4] +// CHECK:STDOUT: %.loc10_5.2: %ImplicitAs.type.0ec = converted constants.%i64, %ImplicitAs.facet.loc10_5.2 [concrete = constants.%ImplicitAs.facet.7a4] // CHECK:STDOUT: %specific_fn.loc10: = specific_function %impl.elem0.loc10_5, @Cpp.long_long.as.AddAssignWith.impl.Op.1(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.AddAssignWith.impl.Op.specific_fn.57a765.1] // CHECK:STDOUT: %bound_method.loc10_5.2: = bound_method %a.ref, %specific_fn.loc10 -// CHECK:STDOUT: %.loc10_5.2: %Cpp.long_long.as.AddAssignWith.impl.Op.type.6f7c53.1 = specific_constant imports.%Core.Op.c11, @Cpp.long_long.as.AddAssignWith.impl(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.AddAssignWith.impl.Op.0167bf.1] -// CHECK:STDOUT: %Op.ref: %Cpp.long_long.as.AddAssignWith.impl.Op.type.6f7c53.1 = name_ref Op, %.loc10_5.2 [concrete = constants.%Cpp.long_long.as.AddAssignWith.impl.Op.0167bf.1] +// CHECK:STDOUT: %.loc10_5.3: %Cpp.long_long.as.AddAssignWith.impl.Op.type.6f7c53.1 = specific_constant imports.%Core.Op.c11, @Cpp.long_long.as.AddAssignWith.impl(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.AddAssignWith.impl.Op.0167bf.1] +// CHECK:STDOUT: %Op.ref: %Cpp.long_long.as.AddAssignWith.impl.Op.type.6f7c53.1 = name_ref Op, %.loc10_5.3 [concrete = constants.%Cpp.long_long.as.AddAssignWith.impl.Op.0167bf.1] // CHECK:STDOUT: %Cpp.long_long.as.AddAssignWith.impl.Op.bound: = bound_method %a.ref, %Op.ref // CHECK:STDOUT: %Cpp.long_long.as.AddAssignWith.impl.Op.specific_fn: = specific_function %Op.ref, @Cpp.long_long.as.AddAssignWith.impl.Op.2(constants.%ImplicitAs.facet.7a4) [concrete = constants.%Cpp.long_long.as.AddAssignWith.impl.Op.specific_fn.57a765.2] // CHECK:STDOUT: %bound_method.loc10_5.3: = bound_method %a.ref, %Cpp.long_long.as.AddAssignWith.impl.Op.specific_fn @@ -3504,6 +3631,8 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %i64: type = class_type @Int, @Int(%int_64) [concrete] // CHECK:STDOUT: %i64.builtin: type = int_type signed, %int_64 [concrete] // CHECK:STDOUT: %pattern_type.d58: type = pattern_type %Cpp.long_long [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.d58 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.d58 = var_pattern %a.patt [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ec: type = facet_type <@ImplicitAs, @ImplicitAs(%Cpp.long_long)> [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.660: = impl_witness imports.%ImplicitAs.impl_witness_table.d6d [concrete] @@ -3548,8 +3677,8 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: fn @IncrementDecrementLongLong() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.d58 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.d58 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.d58 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.d58 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %Cpp.long_long = var %a.var_patt // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -3599,6 +3728,7 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %u64: type = class_type @UInt, @UInt(%int_64) [concrete] // CHECK:STDOUT: %pattern_type.4cd: type = pattern_type %Cpp.unsigned_long_long [concrete] +// CHECK:STDOUT: %cpp_unsigned_long_long.patt: %pattern_type.4cd = value_binding_pattern cpp_unsigned_long_long [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -3616,12 +3746,16 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %int_1.877: %Cpp.unsigned_long_long = int_value 1 [concrete] // CHECK:STDOUT: %ULongLongResult: type = class_type @ULongLongResult [concrete] // CHECK:STDOUT: %pattern_type.97e: type = pattern_type %ULongLongResult [concrete] +// CHECK:STDOUT: %cpp_unsigned_long_long_result.patt: %pattern_type.97e = value_binding_pattern cpp_unsigned_long_long_result [concrete] // CHECK:STDOUT: %PassULongLong.cpp_overload_set.type: type = cpp_overload_set_type @PassULongLong.cpp_overload_set [concrete] // CHECK:STDOUT: %PassULongLong.cpp_overload_set.value: %PassULongLong.cpp_overload_set.type = cpp_overload_set_value @PassULongLong.cpp_overload_set [concrete] // CHECK:STDOUT: %ptr.130: type = ptr_type %ULongLongResult [concrete] // CHECK:STDOUT: %PassULongLong__carbon_thunk.type.76ef5b.1: type = fn_type @PassULongLong__carbon_thunk.1 [concrete] // CHECK:STDOUT: %PassULongLong__carbon_thunk.030145.1: %PassULongLong__carbon_thunk.type.76ef5b.1 = struct_value () [concrete] +// CHECK:STDOUT: %cpp_compat_ulong_long.patt: %pattern_type.4cd = value_binding_pattern cpp_compat_ulong_long [concrete] +// CHECK:STDOUT: %cpp_compat_ulong_long_result.patt: %pattern_type.97e = value_binding_pattern cpp_compat_ulong_long_result [concrete] // CHECK:STDOUT: %pattern_type.b35: type = pattern_type %u64 [concrete] +// CHECK:STDOUT: %carbon_u64.patt: %pattern_type.b35 = value_binding_pattern carbon_u64 [concrete] // CHECK:STDOUT: %To.fe9: Core.IntLiteral = symbolic_binding To, 0 [symbolic] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.199: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert.2, @Core.IntLiteral.as.ImplicitAs.impl.b68(%To.fe9) [symbolic] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.170: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.199 = struct_value () [symbolic] @@ -3637,6 +3771,7 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %int_1.01f: %u64 = int_value 1 [concrete] // CHECK:STDOUT: %ULongResult: type = class_type @ULongResult [concrete] // CHECK:STDOUT: %pattern_type.97f: type = pattern_type %ULongResult [concrete] +// CHECK:STDOUT: %carbon_u64_result.patt: %pattern_type.97f = value_binding_pattern carbon_u64_result [concrete] // CHECK:STDOUT: %ptr.e40: type = ptr_type %ULongResult [concrete] // CHECK:STDOUT: %PassULongLong__carbon_thunk.type.76ef5b.2: type = fn_type @PassULongLong__carbon_thunk.2 [concrete] // CHECK:STDOUT: %PassULongLong__carbon_thunk.030145.2: %PassULongLong__carbon_thunk.type.76ef5b.2 = struct_value () [concrete] @@ -3663,6 +3798,8 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %array_type: type = array_type %int_1.5b8, %f32.c73 [concrete] // CHECK:STDOUT: %f32.9b3: type = float_type %int_32, f32 [concrete] // CHECK:STDOUT: %pattern_type.18b: type = pattern_type %array_type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.18b = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.18b = var_pattern %a.patt [concrete] // CHECK:STDOUT: %float.6da: Core.FloatLiteral = float_literal_value 10e-1 [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (Core.FloatLiteral) [concrete] // CHECK:STDOUT: %tuple: %tuple.type = tuple_value (%float.6da) [concrete] @@ -3748,21 +3885,21 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %cpp_unsigned_long_long.patt: %pattern_type.4cd = value_binding_pattern cpp_unsigned_long_long [concrete] +// CHECK:STDOUT: %cpp_unsigned_long_long.patt: %pattern_type.4cd = value_binding_pattern cpp_unsigned_long_long [concrete = constants.%cpp_unsigned_long_long.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1.loc15: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] -// CHECK:STDOUT: %.loc15_34: type = splice_block %unsigned_long_long.ref.loc15 [concrete = constants.%Cpp.unsigned_long_long] { -// CHECK:STDOUT: %Cpp.ref.loc15: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %unsigned_long_long.ref.loc15: type = name_ref unsigned_long_long, constants.%Cpp.unsigned_long_long [concrete = constants.%Cpp.unsigned_long_long] -// CHECK:STDOUT: } // CHECK:STDOUT: %impl.elem0.loc15: %.ee9 = impl_witness_access constants.%ImplicitAs.impl_witness.fa4, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.3ce] // CHECK:STDOUT: %bound_method.loc15: = bound_method %int_1.loc15, %impl.elem0.loc15 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.5d7] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc15: init %Cpp.unsigned_long_long = call %bound_method.loc15(%int_1.loc15) [concrete = constants.%int_1.877] // CHECK:STDOUT: %.loc15_56.1: %Cpp.unsigned_long_long = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc15 [concrete = constants.%int_1.877] // CHECK:STDOUT: %.loc15_56.2: %Cpp.unsigned_long_long = converted %int_1.loc15, %.loc15_56.1 [concrete = constants.%int_1.877] +// CHECK:STDOUT: %.loc15_34: type = splice_block %unsigned_long_long.ref.loc15 [concrete = constants.%Cpp.unsigned_long_long] { +// CHECK:STDOUT: %Cpp.ref.loc15: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %unsigned_long_long.ref.loc15: type = name_ref unsigned_long_long, constants.%Cpp.unsigned_long_long [concrete = constants.%Cpp.unsigned_long_long] +// CHECK:STDOUT: } // CHECK:STDOUT: %cpp_unsigned_long_long: %Cpp.unsigned_long_long = value_binding cpp_unsigned_long_long, %.loc15_56.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %cpp_unsigned_long_long_result.patt: %pattern_type.97e = value_binding_pattern cpp_unsigned_long_long_result [concrete] +// CHECK:STDOUT: %cpp_unsigned_long_long_result.patt: %pattern_type.97e = value_binding_pattern cpp_unsigned_long_long_result [concrete = constants.%cpp_unsigned_long_long_result.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc16_67: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %PassULongLong.ref.loc16: %PassULongLong.cpp_overload_set.type = name_ref PassULongLong, imports.%PassULongLong.cpp_overload_set.value [concrete = constants.%PassULongLong.cpp_overload_set.value] @@ -3771,15 +3908,15 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %addr.loc16: %ptr.130 = addr_of %.loc16_107.1 // CHECK:STDOUT: %PassULongLong__carbon_thunk.call.loc16: init %empty_tuple.type = call imports.%PassULongLong__carbon_thunk.decl.3ca866.1(%cpp_unsigned_long_long.ref.loc16, %addr.loc16) // CHECK:STDOUT: %.loc16_107.2: init %ULongLongResult to %.loc16_107.1 = mark_in_place_init %PassULongLong__carbon_thunk.call.loc16 +// CHECK:STDOUT: %.loc16_107.3: ref %ULongLongResult = temporary %.loc16_107.1, %.loc16_107.2 +// CHECK:STDOUT: %.loc16_107.4: %ULongLongResult = acquire_value %.loc16_107.3 // CHECK:STDOUT: %.loc16_48: type = splice_block %ULongLongResult.ref.loc16 [concrete = constants.%ULongLongResult] { // CHECK:STDOUT: %Cpp.ref.loc16_45: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %ULongLongResult.ref.loc16: type = name_ref ULongLongResult, imports.%ULongLongResult.decl [concrete = constants.%ULongLongResult] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc16_107.3: ref %ULongLongResult = temporary %.loc16_107.1, %.loc16_107.2 -// CHECK:STDOUT: %.loc16_107.4: %ULongLongResult = acquire_value %.loc16_107.3 // CHECK:STDOUT: %cpp_unsigned_long_long_result: %ULongLongResult = value_binding cpp_unsigned_long_long_result, %.loc16_107.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %cpp_compat_ulong_long.patt: %pattern_type.4cd = value_binding_pattern cpp_compat_ulong_long [concrete] +// CHECK:STDOUT: %cpp_compat_ulong_long.patt: %pattern_type.4cd = value_binding_pattern cpp_compat_ulong_long [concrete = constants.%cpp_compat_ulong_long.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %cpp_unsigned_long_long.ref.loc18: %Cpp.unsigned_long_long = name_ref cpp_unsigned_long_long, %cpp_unsigned_long_long // CHECK:STDOUT: %.loc18: type = splice_block %ULongLong64.ref [concrete = constants.%Cpp.unsigned_long_long] { @@ -3789,7 +3926,7 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: } // CHECK:STDOUT: %cpp_compat_ulong_long: %Cpp.unsigned_long_long = value_binding cpp_compat_ulong_long, %cpp_unsigned_long_long.ref.loc18 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %cpp_compat_ulong_long_result.patt: %pattern_type.97e = value_binding_pattern cpp_compat_ulong_long_result [concrete] +// CHECK:STDOUT: %cpp_compat_ulong_long_result.patt: %pattern_type.97e = value_binding_pattern cpp_compat_ulong_long_result [concrete = constants.%cpp_compat_ulong_long_result.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc19_66: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %PassULongLong.ref.loc19: %PassULongLong.cpp_overload_set.type = name_ref PassULongLong, imports.%PassULongLong.cpp_overload_set.value [concrete = constants.%PassULongLong.cpp_overload_set.value] @@ -3798,18 +3935,17 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %addr.loc19: %ptr.130 = addr_of %.loc19_105.1 // CHECK:STDOUT: %PassULongLong__carbon_thunk.call.loc19: init %empty_tuple.type = call imports.%PassULongLong__carbon_thunk.decl.3ca866.1(%cpp_compat_ulong_long.ref, %addr.loc19) // CHECK:STDOUT: %.loc19_105.2: init %ULongLongResult to %.loc19_105.1 = mark_in_place_init %PassULongLong__carbon_thunk.call.loc19 +// CHECK:STDOUT: %.loc19_105.3: ref %ULongLongResult = temporary %.loc19_105.1, %.loc19_105.2 +// CHECK:STDOUT: %.loc19_105.4: %ULongLongResult = acquire_value %.loc19_105.3 // CHECK:STDOUT: %.loc19_47: type = splice_block %ULongLongResult.ref.loc19 [concrete = constants.%ULongLongResult] { // CHECK:STDOUT: %Cpp.ref.loc19_44: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %ULongLongResult.ref.loc19: type = name_ref ULongLongResult, imports.%ULongLongResult.decl [concrete = constants.%ULongLongResult] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc19_105.3: ref %ULongLongResult = temporary %.loc19_105.1, %.loc19_105.2 -// CHECK:STDOUT: %.loc19_105.4: %ULongLongResult = acquire_value %.loc19_105.3 // CHECK:STDOUT: %cpp_compat_ulong_long_result: %ULongLongResult = value_binding cpp_compat_ulong_long_result, %.loc19_105.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %carbon_u64.patt: %pattern_type.b35 = value_binding_pattern carbon_u64 [concrete] +// CHECK:STDOUT: %carbon_u64.patt: %pattern_type.b35 = value_binding_pattern carbon_u64 [concrete = constants.%carbon_u64.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1.loc21: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] -// CHECK:STDOUT: %u64: type = type_literal constants.%u64 [concrete = constants.%u64] // CHECK:STDOUT: %impl.elem0.loc21: %.93e = impl_witness_access constants.%ImplicitAs.impl_witness.9c4, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.633] // CHECK:STDOUT: %bound_method.loc21_25.1: = bound_method %int_1.loc21, %impl.elem0.loc21 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.eb0] // CHECK:STDOUT: %specific_fn.loc21: = specific_function %impl.elem0.loc21, @Core.IntLiteral.as.ImplicitAs.impl.Convert.2(constants.%int_64) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] @@ -3817,9 +3953,10 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc21: init %u64 = call %bound_method.loc21_25.2(%int_1.loc21) [concrete = constants.%int_1.01f] // CHECK:STDOUT: %.loc21_25.1: %u64 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc21 [concrete = constants.%int_1.01f] // CHECK:STDOUT: %.loc21_25.2: %u64 = converted %int_1.loc21, %.loc21_25.1 [concrete = constants.%int_1.01f] +// CHECK:STDOUT: %u64: type = type_literal constants.%u64 [concrete = constants.%u64] // CHECK:STDOUT: %carbon_u64: %u64 = value_binding carbon_u64, %.loc21_25.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %carbon_u64_result.patt: %pattern_type.97f = value_binding_pattern carbon_u64_result [concrete] +// CHECK:STDOUT: %carbon_u64_result.patt: %pattern_type.97f = value_binding_pattern carbon_u64_result [concrete = constants.%carbon_u64_result.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc22_51: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %PassULongLong.ref.loc22: %PassULongLong.cpp_overload_set.type = name_ref PassULongLong, imports.%PassULongLong.cpp_overload_set.value [concrete = constants.%PassULongLong.cpp_overload_set.value] @@ -3828,16 +3965,16 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %addr.loc22: %ptr.e40 = addr_of %.loc22_79.1 // CHECK:STDOUT: %PassULongLong__carbon_thunk.call.loc22: init %empty_tuple.type = call imports.%PassULongLong__carbon_thunk.decl.3ca866.2(%carbon_u64.ref, %addr.loc22) // CHECK:STDOUT: %.loc22_79.2: init %ULongResult to %.loc22_79.1 = mark_in_place_init %PassULongLong__carbon_thunk.call.loc22 +// CHECK:STDOUT: %.loc22_79.3: ref %ULongResult = temporary %.loc22_79.1, %.loc22_79.2 +// CHECK:STDOUT: %.loc22_79.4: %ULongResult = acquire_value %.loc22_79.3 // CHECK:STDOUT: %.loc22_36: type = splice_block %ULongResult.ref [concrete = constants.%ULongResult] { // CHECK:STDOUT: %Cpp.ref.loc22_33: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %ULongResult.ref: type = name_ref ULongResult, imports.%ULongResult.decl [concrete = constants.%ULongResult] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc22_79.3: ref %ULongResult = temporary %.loc22_79.1, %.loc22_79.2 -// CHECK:STDOUT: %.loc22_79.4: %ULongResult = acquire_value %.loc22_79.3 // CHECK:STDOUT: %carbon_u64_result: %ULongResult = value_binding carbon_u64_result, %.loc22_79.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.18b = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.18b = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.18b = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.18b = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type = var %a.var_patt // CHECK:STDOUT: %float: Core.FloatLiteral = float_literal_value 10e-1 [concrete = constants.%float.6da] @@ -3904,6 +4041,8 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %u64: type = class_type @UInt, @UInt(%int_64) [concrete] // CHECK:STDOUT: %u64.builtin: type = int_type unsigned, %int_64 [concrete] // CHECK:STDOUT: %pattern_type.4cd: type = pattern_type %Cpp.unsigned_long_long [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.4cd = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.4cd = var_pattern %a.patt [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.1c8: type = facet_type <@ImplicitAs, @ImplicitAs(%Cpp.unsigned_long_long)> [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -3915,6 +4054,8 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type = struct_value () [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert [concrete] // CHECK:STDOUT: %int_1.877: %Cpp.unsigned_long_long = int_value 1 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.4cd = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.4cd = var_pattern %b.patt [concrete] // CHECK:STDOUT: %Copy.impl_witness.15f: = impl_witness imports.%Copy.impl_witness_table.217 [concrete] // CHECK:STDOUT: %Copy.facet: %Copy.type = facet_value %Cpp.unsigned_long_long, (%Copy.impl_witness.15f) [concrete] // CHECK:STDOUT: %Copy.WithSelf.Op.type.a3f: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet) [concrete] @@ -3939,8 +4080,8 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: fn @CopyUnsignedLongLong() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.4cd = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.4cd = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.4cd = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.4cd = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %Cpp.unsigned_long_long = var %a.var_patt // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -3955,8 +4096,8 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %Cpp.unsigned_long_long = ref_binding a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.4cd = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.4cd = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.4cd = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type.4cd = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %Cpp.unsigned_long_long = var %b.var_patt // CHECK:STDOUT: %a.ref: ref %Cpp.unsigned_long_long = name_ref a, %a diff --git a/toolchain/check/testdata/interop/cpp/primitive_types/void_pointer.carbon b/toolchain/check/testdata/interop/cpp/primitive_types/void_pointer.carbon index 77f7675671ea..1842c1a29b59 100644 --- a/toolchain/check/testdata/interop/cpp/primitive_types/void_pointer.carbon +++ b/toolchain/check/testdata/interop/cpp/primitive_types/void_pointer.carbon @@ -144,6 +144,7 @@ fn F(input: Cpp.void*) { // CHECK:STDOUT: %Cpp.void: type = class_type @VoidBase [concrete] // CHECK:STDOUT: %ptr.00a: type = ptr_type %Cpp.void [concrete] // CHECK:STDOUT: %pattern_type.712: type = pattern_type %ptr.00a [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.712 = value_binding_pattern p [concrete] // CHECK:STDOUT: %ImplicitAs.type.c59: type = facet_type <@ImplicitAs, @ImplicitAs(%ptr.00a)> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %ptr.as.ImplicitAs.impl.Convert.type.8e0: type = fn_type @ptr.as.ImplicitAs.impl.Convert.1, @ptr.as.ImplicitAs.impl.992(%T.67d) [symbolic] @@ -171,14 +172,9 @@ fn F(input: Cpp.void*) { // CHECK:STDOUT: fn @F(%input.param: %ptr.037) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: %pattern_type.712 = value_binding_pattern p [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.712 = value_binding_pattern p [concrete = constants.%p.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %input.ref: %ptr.037 = name_ref input, %input -// CHECK:STDOUT: %.loc10_25: type = splice_block %ptr.loc10 [concrete = constants.%ptr.00a] { -// CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %void.ref: type = name_ref void, constants.%Cpp.void [concrete = constants.%Cpp.void] -// CHECK:STDOUT: %ptr.loc10: type = ptr_type %void.ref [concrete = constants.%ptr.00a] -// CHECK:STDOUT: } // CHECK:STDOUT: %impl.elem0: %.fec = impl_witness_access constants.%ImplicitAs.impl_witness.36b, element0 [concrete = constants.%ptr.as.ImplicitAs.impl.Convert.313] // CHECK:STDOUT: %bound_method.loc10_29.1: = bound_method %input.ref, %impl.elem0 // CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0, @ptr.as.ImplicitAs.impl.Convert.1(constants.%S) [concrete = constants.%ptr.as.ImplicitAs.impl.Convert.specific_fn.642] @@ -186,6 +182,11 @@ fn F(input: Cpp.void*) { // CHECK:STDOUT: %ptr.as.ImplicitAs.impl.Convert.call: init %ptr.00a = call %bound_method.loc10_29.2(%input.ref) // CHECK:STDOUT: %.loc10_29.1: %ptr.00a = value_of_initializer %ptr.as.ImplicitAs.impl.Convert.call // CHECK:STDOUT: %.loc10_29.2: %ptr.00a = converted %input.ref, %.loc10_29.1 +// CHECK:STDOUT: %.loc10_25: type = splice_block %ptr.loc10 [concrete = constants.%ptr.00a] { +// CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %void.ref: type = name_ref void, constants.%Cpp.void [concrete = constants.%Cpp.void] +// CHECK:STDOUT: %ptr.loc10: type = ptr_type %void.ref [concrete = constants.%ptr.00a] +// CHECK:STDOUT: } // CHECK:STDOUT: %p: %ptr.00a = value_binding p, %.loc10_29.2 // CHECK:STDOUT: // CHECK:STDOUT: } @@ -198,6 +199,7 @@ fn F(input: Cpp.void*) { // CHECK:STDOUT: %Cpp.void: type = class_type @VoidBase [concrete] // CHECK:STDOUT: %ptr.00a: type = ptr_type %Cpp.void [concrete] // CHECK:STDOUT: %pattern_type.712: type = pattern_type %ptr.00a [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.712 = value_binding_pattern p [concrete] // CHECK:STDOUT: %ImplicitAs.type.c59: type = facet_type <@ImplicitAs, @ImplicitAs(%ptr.00a)> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %ptr.as.ImplicitAs.impl.Convert.type.8e0: type = fn_type @ptr.as.ImplicitAs.impl.Convert.1, @ptr.as.ImplicitAs.impl.992(%T.67d) [symbolic] @@ -223,14 +225,9 @@ fn F(input: Cpp.void*) { // CHECK:STDOUT: fn @F(%input.param: %ptr.6b6) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: %pattern_type.712 = value_binding_pattern p [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.712 = value_binding_pattern p [concrete = constants.%p.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %input.ref: %ptr.6b6 = name_ref input, %input -// CHECK:STDOUT: %.loc10_25: type = splice_block %ptr.loc10 [concrete = constants.%ptr.00a] { -// CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %void.ref: type = name_ref void, constants.%Cpp.void [concrete = constants.%Cpp.void] -// CHECK:STDOUT: %ptr.loc10: type = ptr_type %void.ref [concrete = constants.%ptr.00a] -// CHECK:STDOUT: } // CHECK:STDOUT: %impl.elem0: %.4f2 = impl_witness_access constants.%ImplicitAs.impl_witness.184, element0 [concrete = constants.%ptr.as.ImplicitAs.impl.Convert.458] // CHECK:STDOUT: %bound_method.loc10_29.1: = bound_method %input.ref, %impl.elem0 // CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0, @ptr.as.ImplicitAs.impl.Convert.1(constants.%C) [concrete = constants.%ptr.as.ImplicitAs.impl.Convert.specific_fn.aae] @@ -238,6 +235,11 @@ fn F(input: Cpp.void*) { // CHECK:STDOUT: %ptr.as.ImplicitAs.impl.Convert.call: init %ptr.00a = call %bound_method.loc10_29.2(%input.ref) // CHECK:STDOUT: %.loc10_29.1: %ptr.00a = value_of_initializer %ptr.as.ImplicitAs.impl.Convert.call // CHECK:STDOUT: %.loc10_29.2: %ptr.00a = converted %input.ref, %.loc10_29.1 +// CHECK:STDOUT: %.loc10_25: type = splice_block %ptr.loc10 [concrete = constants.%ptr.00a] { +// CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %void.ref: type = name_ref void, constants.%Cpp.void [concrete = constants.%Cpp.void] +// CHECK:STDOUT: %ptr.loc10: type = ptr_type %void.ref [concrete = constants.%ptr.00a] +// CHECK:STDOUT: } // CHECK:STDOUT: %p: %ptr.00a = value_binding p, %.loc10_29.2 // CHECK:STDOUT: // CHECK:STDOUT: } @@ -250,6 +252,7 @@ fn F(input: Cpp.void*) { // CHECK:STDOUT: %Cpp.void: type = class_type @VoidBase [concrete] // CHECK:STDOUT: %ptr.00a: type = ptr_type %Cpp.void [concrete] // CHECK:STDOUT: %pattern_type.712: type = pattern_type %ptr.00a [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.712 = value_binding_pattern p [concrete] // CHECK:STDOUT: %As.type.ffb: type = facet_type <@As, @As(%ptr.00a)> [concrete] // CHECK:STDOUT: %U.67d: type = symbolic_binding U, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.3aa489.2: type = facet_type <@ImplicitAs, @ImplicitAs(%U.67d)> [symbolic] @@ -287,7 +290,7 @@ fn F(input: Cpp.void*) { // CHECK:STDOUT: fn @F(%input.param: %ptr.037) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: %pattern_type.712 = value_binding_pattern p [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.712 = value_binding_pattern p [concrete = constants.%p.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %input.ref: %ptr.037 = name_ref input, %input // CHECK:STDOUT: %Cpp.ref.loc10_38: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] @@ -317,6 +320,7 @@ fn F(input: Cpp.void*) { // CHECK:STDOUT: %Cpp.void: type = class_type @VoidBase [concrete] // CHECK:STDOUT: %ptr.00a: type = ptr_type %Cpp.void [concrete] // CHECK:STDOUT: %pattern_type.712: type = pattern_type %ptr.00a [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.712 = value_binding_pattern p [concrete] // CHECK:STDOUT: %As.type.ffb: type = facet_type <@As, @As(%ptr.00a)> [concrete] // CHECK:STDOUT: %U.67d: type = symbolic_binding U, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.3aa489.2: type = facet_type <@ImplicitAs, @ImplicitAs(%U.67d)> [symbolic] @@ -352,7 +356,7 @@ fn F(input: Cpp.void*) { // CHECK:STDOUT: fn @F(%input.param: %ptr.6b6) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: %pattern_type.712 = value_binding_pattern p [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.712 = value_binding_pattern p [concrete = constants.%p.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %input.ref: %ptr.6b6 = name_ref input, %input // CHECK:STDOUT: %Cpp.ref.loc10_38: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] @@ -382,6 +386,7 @@ fn F(input: Cpp.void*) { // CHECK:STDOUT: %S: type = class_type @S [concrete] // CHECK:STDOUT: %ptr.037: type = ptr_type %S [concrete] // CHECK:STDOUT: %pattern_type.de6: type = pattern_type %ptr.037 [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.de6 = value_binding_pattern p [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -396,7 +401,7 @@ fn F(input: Cpp.void*) { // CHECK:STDOUT: fn @F(%input.param: %ptr.00a) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: %pattern_type.de6 = value_binding_pattern p [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.de6 = value_binding_pattern p [concrete = constants.%p.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %input.ref: %ptr.00a = name_ref input, %input // CHECK:STDOUT: %Cpp.ref.loc17_35: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] @@ -420,12 +425,13 @@ fn F(input: Cpp.void*) { // CHECK:STDOUT: %ptr.00a: type = ptr_type %Cpp.void [concrete] // CHECK:STDOUT: %ptr.6b6: type = ptr_type %C [concrete] // CHECK:STDOUT: %pattern_type.fcb: type = pattern_type %ptr.6b6 [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.fcb = value_binding_pattern p [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F(%input.param: %ptr.00a) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: %pattern_type.fcb = value_binding_pattern p [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.fcb = value_binding_pattern p [concrete = constants.%p.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %input.ref: %ptr.00a = name_ref input, %input // CHECK:STDOUT: %C.ref.loc17_31: type = name_ref C, file.%C.decl [concrete = constants.%C] @@ -447,6 +453,7 @@ fn F(input: Cpp.void*) { // CHECK:STDOUT: %S: type = class_type @S [concrete] // CHECK:STDOUT: %ptr.037: type = ptr_type %S [concrete] // CHECK:STDOUT: %pattern_type.de6: type = pattern_type %ptr.037 [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.de6 = value_binding_pattern p [concrete] // CHECK:STDOUT: %UnsafeAs.type.ae7: type = facet_type <@UnsafeAs, @UnsafeAs(%ptr.037)> [concrete] // CHECK:STDOUT: %U.091: type = symbolic_binding U, 1 [symbolic] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] @@ -475,7 +482,7 @@ fn F(input: Cpp.void*) { // CHECK:STDOUT: fn @F(%input.param: %ptr.00a) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: %pattern_type.de6 = value_binding_pattern p [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.de6 = value_binding_pattern p [concrete = constants.%p.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %input.ref: %ptr.00a = name_ref input, %input // CHECK:STDOUT: %Cpp.ref.loc10_42: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] @@ -505,6 +512,7 @@ fn F(input: Cpp.void*) { // CHECK:STDOUT: %ptr.00a: type = ptr_type %Cpp.void [concrete] // CHECK:STDOUT: %ptr.6b6: type = ptr_type %C [concrete] // CHECK:STDOUT: %pattern_type.fcb: type = pattern_type %ptr.6b6 [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.fcb = value_binding_pattern p [concrete] // CHECK:STDOUT: %UnsafeAs.type.1d9: type = facet_type <@UnsafeAs, @UnsafeAs(%ptr.6b6)> [concrete] // CHECK:STDOUT: %U.091: type = symbolic_binding U, 1 [symbolic] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] @@ -527,7 +535,7 @@ fn F(input: Cpp.void*) { // CHECK:STDOUT: fn @F(%input.param: %ptr.00a) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: %pattern_type.fcb = value_binding_pattern p [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.fcb = value_binding_pattern p [concrete = constants.%p.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %input.ref: %ptr.00a = name_ref input, %input // CHECK:STDOUT: %C.ref.loc10_38: type = name_ref C, file.%C.decl [concrete = constants.%C] diff --git a/toolchain/check/testdata/interop/cpp/range_for.carbon b/toolchain/check/testdata/interop/cpp/range_for.carbon index 7007ad0d1b6e..d20f463304c5 100644 --- a/toolchain/check/testdata/interop/cpp/range_for.carbon +++ b/toolchain/check/testdata/interop/cpp/range_for.carbon @@ -179,35 +179,31 @@ fn Test[R:! Core.Iterate where .ElementType = f64](r: R) { } fn TestDriver(var m: Cpp.N.MutableRange) { - // CHECK:STDERR: fail_todo_adl_returns_same_types_mutable.carbon:[[@LINE+32]]:3: error: facet type `Core.CppRangeForIterate where .(Core.CppRangeForIterate.Iterator) impls Core.Destroy and .(Core.CppRangeForIterate.Iterator) impls Core.Copy and .(Core.CppRangeForIterate.Iterator) impls Core.CppUnsafeDeref and .(Core.CppRangeForIterate.Iterator) impls Core.EqWith(.(Core.CppRangeForIterate.Sentinel)) and .(Core.CppRangeForIterate.Iterator) impls Core.Inc and .(Core.CppRangeForIterate.Iterator).(Core.CppUnsafeDeref.Result) impls Core.Destroy and .(Core.CppRangeForIterate.Iterator).(Core.CppUnsafeDeref.Result) impls Core.Copy and .(Core.CppRangeForIterate.Sentinel) impls Core.Destroy and .(Core.CppRangeForIterate.Sentinel) impls Core.Copy` can not be identified [ImplLookupInUnidentifiedFacetType] + // CHECK:STDERR: fail_todo_adl_returns_same_types_mutable.carbon:[[@LINE+28]]:3: error: facet type `Core.CppRangeForIterate where .(Core.CppRangeForIterate.Iterator) impls Core.Destroy and .(Core.CppRangeForIterate.Iterator) impls Core.Copy and .(Core.CppRangeForIterate.Iterator) impls Core.CppUnsafeDeref and .(Core.CppRangeForIterate.Iterator) impls Core.EqWith(.(Core.CppRangeForIterate.Sentinel)) and .(Core.CppRangeForIterate.Iterator) impls Core.Inc and .(Core.CppRangeForIterate.Iterator).(Core.CppUnsafeDeref.Result) impls Core.Destroy and .(Core.CppRangeForIterate.Iterator).(Core.CppUnsafeDeref.Result) impls Core.Copy and .(Core.CppRangeForIterate.Sentinel) impls Core.Destroy and .(Core.CppRangeForIterate.Sentinel) impls Core.Copy` can not be identified [ImplLookupInUnidentifiedFacetType] // CHECK:STDERR: Test(m); // CHECK:STDERR: ^~~~~~~ - // CHECK:STDERR: {{.*}}/prelude/iterate.carbon:39:12: note: value expression passed to reference parameter [ValueForRefParam] - // CHECK:STDERR: fn Begin(self) -> Iterator; - // CHECK:STDERR: ^~~~ - // CHECK:STDERR: fail_todo_adl_returns_same_types_mutable.carbon:[[@LINE-23]]:34: note: initializing function parameter [InCallToFunctionParam] + // CHECK:STDERR: fail_todo_adl_returns_same_types_mutable.carbon: note: value expression passed to reference parameter [ValueForRefParam] + // CHECK:STDERR: fail_todo_adl_returns_same_types_mutable.carbon:[[@LINE-21]]:34: note: initializing function parameter [InCallToFunctionParam] // CHECK:STDERR: friend auto begin(MutableRange&) -> Iterator; // CHECK:STDERR: ^ // CHECK:STDERR: {{.*}}/prelude/iterate.carbon:39:3: note: while building thunk to match the signature of this function [ThunkSignature] // CHECK:STDERR: fn Begin(self) -> Iterator; // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~ - // CHECK:STDERR: fail_todo_adl_returns_same_types_mutable.carbon:[[@LINE-23]]:1: note: while deducing parameters of generic declared here [DeductionGenericHere] + // CHECK:STDERR: fail_todo_adl_returns_same_types_mutable.carbon:[[@LINE-21]]:1: note: while deducing parameters of generic declared here [DeductionGenericHere] // CHECK:STDERR: fn Test[R:! Core.Iterate where .ElementType = f64](r: R) { // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: - // CHECK:STDERR: fail_todo_adl_returns_same_types_mutable.carbon:[[@LINE+16]]:3: error: facet type `Core.CppRangeForIterate where .(Core.CppRangeForIterate.Iterator) impls Core.Destroy and .(Core.CppRangeForIterate.Iterator) impls Core.Copy and .(Core.CppRangeForIterate.Iterator) impls Core.CppUnsafeDeref and .(Core.CppRangeForIterate.Iterator) impls Core.EqWith(.(Core.CppRangeForIterate.Sentinel)) and .(Core.CppRangeForIterate.Iterator) impls Core.Inc and .(Core.CppRangeForIterate.Iterator).(Core.CppUnsafeDeref.Result) impls Core.Destroy and .(Core.CppRangeForIterate.Iterator).(Core.CppUnsafeDeref.Result) impls Core.Copy and .(Core.CppRangeForIterate.Sentinel) impls Core.Destroy and .(Core.CppRangeForIterate.Sentinel) impls Core.Copy` can not be identified [ImplLookupInUnidentifiedFacetType] + // CHECK:STDERR: fail_todo_adl_returns_same_types_mutable.carbon:[[@LINE+14]]:3: error: facet type `Core.CppRangeForIterate where .(Core.CppRangeForIterate.Iterator) impls Core.Destroy and .(Core.CppRangeForIterate.Iterator) impls Core.Copy and .(Core.CppRangeForIterate.Iterator) impls Core.CppUnsafeDeref and .(Core.CppRangeForIterate.Iterator) impls Core.EqWith(.(Core.CppRangeForIterate.Sentinel)) and .(Core.CppRangeForIterate.Iterator) impls Core.Inc and .(Core.CppRangeForIterate.Iterator).(Core.CppUnsafeDeref.Result) impls Core.Destroy and .(Core.CppRangeForIterate.Iterator).(Core.CppUnsafeDeref.Result) impls Core.Copy and .(Core.CppRangeForIterate.Sentinel) impls Core.Destroy and .(Core.CppRangeForIterate.Sentinel) impls Core.Copy` can not be identified [ImplLookupInUnidentifiedFacetType] // CHECK:STDERR: Test(m); // CHECK:STDERR: ^~~~~~~ - // CHECK:STDERR: {{.*}}/prelude/iterate.carbon:40:10: note: value expression passed to reference parameter [ValueForRefParam] - // CHECK:STDERR: fn End(self) -> Sentinel; - // CHECK:STDERR: ^~~~ - // CHECK:STDERR: fail_todo_adl_returns_same_types_mutable.carbon:[[@LINE-38]]:32: note: initializing function parameter [InCallToFunctionParam] + // CHECK:STDERR: fail_todo_adl_returns_same_types_mutable.carbon: note: value expression passed to reference parameter [ValueForRefParam] + // CHECK:STDERR: fail_todo_adl_returns_same_types_mutable.carbon:[[@LINE-34]]:32: note: initializing function parameter [InCallToFunctionParam] // CHECK:STDERR: friend auto end(MutableRange&) -> Iterator; // CHECK:STDERR: ^ // CHECK:STDERR: {{.*}}/prelude/iterate.carbon:40:3: note: while building thunk to match the signature of this function [ThunkSignature] // CHECK:STDERR: fn End(self) -> Sentinel; // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~ - // CHECK:STDERR: fail_todo_adl_returns_same_types_mutable.carbon:[[@LINE-39]]:1: note: while deducing parameters of generic declared here [DeductionGenericHere] + // CHECK:STDERR: fail_todo_adl_returns_same_types_mutable.carbon:[[@LINE-35]]:1: note: while deducing parameters of generic declared here [DeductionGenericHere] // CHECK:STDERR: fn Test[R:! Core.Iterate where .ElementType = f64](r: R) { // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: @@ -294,49 +290,45 @@ fn Test[R:! Core.Iterate where .ElementType = Cpp.N.ValueType](r: R) { } fn TestDriver(var m: Cpp.N.MutableRange) { - // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE+46]]:3: error: facet type `Core.CppRangeForIterate where .(Core.CppRangeForIterate.Iterator) impls Core.Destroy and .(Core.CppRangeForIterate.Iterator) impls Core.Copy and .(Core.CppRangeForIterate.Iterator) impls Core.CppUnsafeDeref and .(Core.CppRangeForIterate.Iterator) impls Core.EqWith(.(Core.CppRangeForIterate.Sentinel)) and .(Core.CppRangeForIterate.Iterator) impls Core.Inc and .(Core.CppRangeForIterate.Iterator).(Core.CppUnsafeDeref.Result) impls Core.Destroy and .(Core.CppRangeForIterate.Iterator).(Core.CppUnsafeDeref.Result) impls Core.Copy and .(Core.CppRangeForIterate.Sentinel) impls Core.Destroy and .(Core.CppRangeForIterate.Sentinel) impls Core.Copy` can not be identified [ImplLookupInUnidentifiedFacetType] + // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE+42]]:3: error: facet type `Core.CppRangeForIterate where .(Core.CppRangeForIterate.Iterator) impls Core.Destroy and .(Core.CppRangeForIterate.Iterator) impls Core.Copy and .(Core.CppRangeForIterate.Iterator) impls Core.CppUnsafeDeref and .(Core.CppRangeForIterate.Iterator) impls Core.EqWith(.(Core.CppRangeForIterate.Sentinel)) and .(Core.CppRangeForIterate.Iterator) impls Core.Inc and .(Core.CppRangeForIterate.Iterator).(Core.CppUnsafeDeref.Result) impls Core.Destroy and .(Core.CppRangeForIterate.Iterator).(Core.CppUnsafeDeref.Result) impls Core.Copy and .(Core.CppRangeForIterate.Sentinel) impls Core.Destroy and .(Core.CppRangeForIterate.Sentinel) impls Core.Copy` can not be identified [ImplLookupInUnidentifiedFacetType] // CHECK:STDERR: Test(m); // CHECK:STDERR: ^~~~~~~ - // CHECK:STDERR: {{.*}}/prelude/iterate.carbon:39:12: note: value expression passed to reference parameter [ValueForRefParam] - // CHECK:STDERR: fn Begin(self) -> Iterator; - // CHECK:STDERR: ^~~~ - // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE-23]]:34: note: initializing function parameter [InCallToFunctionParam] + // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon: note: value expression passed to reference parameter [ValueForRefParam] + // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE-21]]:34: note: initializing function parameter [InCallToFunctionParam] // CHECK:STDERR: friend auto begin(MutableRange&) -> Iterator; // CHECK:STDERR: ^ // CHECK:STDERR: {{.*}}/prelude/iterate.carbon:39:3: note: while building thunk to match the signature of this function [ThunkSignature] // CHECK:STDERR: fn Begin(self) -> Iterator; // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~ - // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE-23]]:1: note: while deducing parameters of generic declared here [DeductionGenericHere] + // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE-21]]:1: note: while deducing parameters of generic declared here [DeductionGenericHere] // CHECK:STDERR: fn Test[R:! Core.Iterate where .ElementType = Cpp.N.ValueType](r: R) { // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: - // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE+30]]:3: error: facet type `Core.CppRangeForIterate where .(Core.CppRangeForIterate.Iterator) impls Core.Destroy and .(Core.CppRangeForIterate.Iterator) impls Core.Copy and .(Core.CppRangeForIterate.Iterator) impls Core.CppUnsafeDeref and .(Core.CppRangeForIterate.Iterator) impls Core.EqWith(.(Core.CppRangeForIterate.Sentinel)) and .(Core.CppRangeForIterate.Iterator) impls Core.Inc and .(Core.CppRangeForIterate.Iterator).(Core.CppUnsafeDeref.Result) impls Core.Destroy and .(Core.CppRangeForIterate.Iterator).(Core.CppUnsafeDeref.Result) impls Core.Copy and .(Core.CppRangeForIterate.Sentinel) impls Core.Destroy and .(Core.CppRangeForIterate.Sentinel) impls Core.Copy` can not be identified [ImplLookupInUnidentifiedFacetType] + // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE+28]]:3: error: facet type `Core.CppRangeForIterate where .(Core.CppRangeForIterate.Iterator) impls Core.Destroy and .(Core.CppRangeForIterate.Iterator) impls Core.Copy and .(Core.CppRangeForIterate.Iterator) impls Core.CppUnsafeDeref and .(Core.CppRangeForIterate.Iterator) impls Core.EqWith(.(Core.CppRangeForIterate.Sentinel)) and .(Core.CppRangeForIterate.Iterator) impls Core.Inc and .(Core.CppRangeForIterate.Iterator).(Core.CppUnsafeDeref.Result) impls Core.Destroy and .(Core.CppRangeForIterate.Iterator).(Core.CppUnsafeDeref.Result) impls Core.Copy and .(Core.CppRangeForIterate.Sentinel) impls Core.Destroy and .(Core.CppRangeForIterate.Sentinel) impls Core.Copy` can not be identified [ImplLookupInUnidentifiedFacetType] // CHECK:STDERR: Test(m); // CHECK:STDERR: ^~~~~~~ - // CHECK:STDERR: {{.*}}/prelude/iterate.carbon:40:10: note: value expression passed to reference parameter [ValueForRefParam] - // CHECK:STDERR: fn End(self) -> Sentinel; - // CHECK:STDERR: ^~~~ - // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE-38]]:32: note: initializing function parameter [InCallToFunctionParam] + // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon: note: value expression passed to reference parameter [ValueForRefParam] + // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE-34]]:32: note: initializing function parameter [InCallToFunctionParam] // CHECK:STDERR: friend auto end(MutableRange&) -> Sentinel; // CHECK:STDERR: ^ // CHECK:STDERR: {{.*}}/prelude/iterate.carbon:40:3: note: while building thunk to match the signature of this function [ThunkSignature] // CHECK:STDERR: fn End(self) -> Sentinel; // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~ - // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE-39]]:1: note: while deducing parameters of generic declared here [DeductionGenericHere] + // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE-35]]:1: note: while deducing parameters of generic declared here [DeductionGenericHere] // CHECK:STDERR: fn Test[R:! Core.Iterate where .ElementType = Cpp.N.ValueType](r: R) { // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE+14]]:3: error: semantics TODO: `Rewriting operator== using operator== is not supported` [SemanticsTodo] // CHECK:STDERR: Test(m); // CHECK:STDERR: ^~~~~~~ - // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE-46]]:1: note: while deducing parameters of generic declared here [DeductionGenericHere] + // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE-42]]:1: note: while deducing parameters of generic declared here [DeductionGenericHere] // CHECK:STDERR: fn Test[R:! Core.Iterate where .ElementType = Cpp.N.ValueType](r: R) { // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE+7]]:3: error: cannot convert type `Cpp.N.MutableRange` into type implementing `Core.Iterate where .(Core.Iterate.ElementType) = Cpp.N.ValueType as Core.Destroy & Core.Copy` [ConversionFailureTypeToFacet] // CHECK:STDERR: Test(m); // CHECK:STDERR: ^~~~~~~ - // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE-53]]:1: note: while deducing parameters of generic declared here [DeductionGenericHere] + // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE-49]]:1: note: while deducing parameters of generic declared here [DeductionGenericHere] // CHECK:STDERR: fn Test[R:! Core.Iterate where .ElementType = Cpp.N.ValueType](r: R) { // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: @@ -389,35 +381,31 @@ fn Test[R:! Core.Iterate where .ElementType = Cpp.N.ValueType](r: R) { } fn TestDriver(var mc: Cpp.N.MutableAndConstRange) { - // CHECK:STDERR: fail_todo_adl_overloads.carbon:[[@LINE+32]]:3: error: facet type `Core.CppRangeForIterate where .(Core.CppRangeForIterate.Iterator) impls Core.Destroy and .(Core.CppRangeForIterate.Iterator) impls Core.Copy and .(Core.CppRangeForIterate.Iterator) impls Core.CppUnsafeDeref and .(Core.CppRangeForIterate.Iterator) impls Core.EqWith(.(Core.CppRangeForIterate.Sentinel)) and .(Core.CppRangeForIterate.Iterator) impls Core.Inc and .(Core.CppRangeForIterate.Iterator).(Core.CppUnsafeDeref.Result) impls Core.Destroy and .(Core.CppRangeForIterate.Iterator).(Core.CppUnsafeDeref.Result) impls Core.Copy and .(Core.CppRangeForIterate.Sentinel) impls Core.Destroy and .(Core.CppRangeForIterate.Sentinel) impls Core.Copy` can not be identified [ImplLookupInUnidentifiedFacetType] + // CHECK:STDERR: fail_todo_adl_overloads.carbon:[[@LINE+28]]:3: error: facet type `Core.CppRangeForIterate where .(Core.CppRangeForIterate.Iterator) impls Core.Destroy and .(Core.CppRangeForIterate.Iterator) impls Core.Copy and .(Core.CppRangeForIterate.Iterator) impls Core.CppUnsafeDeref and .(Core.CppRangeForIterate.Iterator) impls Core.EqWith(.(Core.CppRangeForIterate.Sentinel)) and .(Core.CppRangeForIterate.Iterator) impls Core.Inc and .(Core.CppRangeForIterate.Iterator).(Core.CppUnsafeDeref.Result) impls Core.Destroy and .(Core.CppRangeForIterate.Iterator).(Core.CppUnsafeDeref.Result) impls Core.Copy and .(Core.CppRangeForIterate.Sentinel) impls Core.Destroy and .(Core.CppRangeForIterate.Sentinel) impls Core.Copy` can not be identified [ImplLookupInUnidentifiedFacetType] // CHECK:STDERR: Test(mc); // CHECK:STDERR: ^~~~~~~~ - // CHECK:STDERR: {{.*}}/prelude/iterate.carbon:39:12: note: value expression passed to reference parameter [ValueForRefParam] - // CHECK:STDERR: fn Begin(self) -> Iterator; - // CHECK:STDERR: ^~~~ - // CHECK:STDERR: fail_todo_adl_overloads.carbon:[[@LINE-26]]:44: note: initializing function parameter [InCallToFunctionParam] + // CHECK:STDERR: fail_todo_adl_overloads.carbon: note: value expression passed to reference parameter [ValueForRefParam] + // CHECK:STDERR: fail_todo_adl_overloads.carbon:[[@LINE-24]]:44: note: initializing function parameter [InCallToFunctionParam] // CHECK:STDERR: friend auto begin(MutableAndConstRange&) -> Iterator; // CHECK:STDERR: ^ // CHECK:STDERR: {{.*}}/prelude/iterate.carbon:39:3: note: while building thunk to match the signature of this function [ThunkSignature] // CHECK:STDERR: fn Begin(self) -> Iterator; // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~ - // CHECK:STDERR: fail_todo_adl_overloads.carbon:[[@LINE-23]]:1: note: while deducing parameters of generic declared here [DeductionGenericHere] + // CHECK:STDERR: fail_todo_adl_overloads.carbon:[[@LINE-21]]:1: note: while deducing parameters of generic declared here [DeductionGenericHere] // CHECK:STDERR: fn Test[R:! Core.Iterate where .ElementType = Cpp.N.ValueType](r: R) { // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: - // CHECK:STDERR: fail_todo_adl_overloads.carbon:[[@LINE+16]]:3: error: facet type `Core.CppRangeForIterate where .(Core.CppRangeForIterate.Iterator) impls Core.Destroy and .(Core.CppRangeForIterate.Iterator) impls Core.Copy and .(Core.CppRangeForIterate.Iterator) impls Core.CppUnsafeDeref and .(Core.CppRangeForIterate.Iterator) impls Core.EqWith(.(Core.CppRangeForIterate.Sentinel)) and .(Core.CppRangeForIterate.Iterator) impls Core.Inc and .(Core.CppRangeForIterate.Iterator).(Core.CppUnsafeDeref.Result) impls Core.Destroy and .(Core.CppRangeForIterate.Iterator).(Core.CppUnsafeDeref.Result) impls Core.Copy and .(Core.CppRangeForIterate.Sentinel) impls Core.Destroy and .(Core.CppRangeForIterate.Sentinel) impls Core.Copy` can not be identified [ImplLookupInUnidentifiedFacetType] + // CHECK:STDERR: fail_todo_adl_overloads.carbon:[[@LINE+14]]:3: error: facet type `Core.CppRangeForIterate where .(Core.CppRangeForIterate.Iterator) impls Core.Destroy and .(Core.CppRangeForIterate.Iterator) impls Core.Copy and .(Core.CppRangeForIterate.Iterator) impls Core.CppUnsafeDeref and .(Core.CppRangeForIterate.Iterator) impls Core.EqWith(.(Core.CppRangeForIterate.Sentinel)) and .(Core.CppRangeForIterate.Iterator) impls Core.Inc and .(Core.CppRangeForIterate.Iterator).(Core.CppUnsafeDeref.Result) impls Core.Destroy and .(Core.CppRangeForIterate.Iterator).(Core.CppUnsafeDeref.Result) impls Core.Copy and .(Core.CppRangeForIterate.Sentinel) impls Core.Destroy and .(Core.CppRangeForIterate.Sentinel) impls Core.Copy` can not be identified [ImplLookupInUnidentifiedFacetType] // CHECK:STDERR: Test(mc); // CHECK:STDERR: ^~~~~~~~ - // CHECK:STDERR: {{.*}}/prelude/iterate.carbon:40:10: note: value expression passed to reference parameter [ValueForRefParam] - // CHECK:STDERR: fn End(self) -> Sentinel; - // CHECK:STDERR: ^~~~ - // CHECK:STDERR: fail_todo_adl_overloads.carbon:[[@LINE-41]]:42: note: initializing function parameter [InCallToFunctionParam] + // CHECK:STDERR: fail_todo_adl_overloads.carbon: note: value expression passed to reference parameter [ValueForRefParam] + // CHECK:STDERR: fail_todo_adl_overloads.carbon:[[@LINE-37]]:42: note: initializing function parameter [InCallToFunctionParam] // CHECK:STDERR: friend auto end(MutableAndConstRange&) -> Iterator; // CHECK:STDERR: ^ // CHECK:STDERR: {{.*}}/prelude/iterate.carbon:40:3: note: while building thunk to match the signature of this function [ThunkSignature] // CHECK:STDERR: fn End(self) -> Sentinel; // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~ - // CHECK:STDERR: fail_todo_adl_overloads.carbon:[[@LINE-39]]:1: note: while deducing parameters of generic declared here [DeductionGenericHere] + // CHECK:STDERR: fail_todo_adl_overloads.carbon:[[@LINE-35]]:1: note: while deducing parameters of generic declared here [DeductionGenericHere] // CHECK:STDERR: fn Test[R:! Core.Iterate where .ElementType = Cpp.N.ValueType](r: R) { // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: @@ -676,9 +664,13 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %Copy.impl_witness.0e0: = impl_witness imports.%Copy.impl_witness_table.367, @Int.as.Copy.impl(%int_32) [concrete] // CHECK:STDOUT: %facet_value.ba2: %facet_type.f48 = facet_value %i32, (%custom_witness.df9cc1.2, %Copy.impl_witness.0e0) [concrete] // CHECK:STDOUT: %Iterate_where.type.8bc: type = facet_type <@Iterate where %impl.elem0.903 = %facet_value.ba2> [concrete] +// CHECK:STDOUT: %pattern_type.e3e: type = pattern_type %Iterate_where.type.8bc [concrete] +// CHECK:STDOUT: %R.patt.860: %pattern_type.e3e = symbolic_binding_pattern R, 0 [symbolic] // CHECK:STDOUT: %R.891: %Iterate_where.type.8bc = symbolic_binding R, 0 [symbolic] // CHECK:STDOUT: %R.as_type.67d: type = facet_access_type %R.891 [symbolic] // CHECK:STDOUT: %pattern_type.e21: type = pattern_type %R.as_type.67d [symbolic] +// CHECK:STDOUT: %r.param_patt.fdd: %pattern_type.e21 = value_param_pattern [symbolic] +// CHECK:STDOUT: %r.patt.939: %pattern_type.e21 = at_binding_pattern r, %r.param_patt.fdd [symbolic] // CHECK:STDOUT: %ImplicitAs.type.914: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %To: Core.IntLiteral = symbolic_binding To, 0 [symbolic] // CHECK:STDOUT: %Int.67af24.2: type = class_type @Int, @Int(%To) [symbolic] @@ -686,6 +678,7 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %From.6a4: %facet_type.037 = symbolic_binding From, 1 [symbolic] // CHECK:STDOUT: %From.as_type.as.ImplicitAs.impl.Convert.type.7fa: type = fn_type @From.as_type.as.ImplicitAs.impl.Convert, @From.as_type.as.ImplicitAs.impl(%To, %From.6a4) [symbolic] // CHECK:STDOUT: %From.as_type.as.ImplicitAs.impl.Convert.643: %From.as_type.as.ImplicitAs.impl.Convert.type.7fa = struct_value () [symbolic] +// CHECK:STDOUT: %i.patt: %pattern_type.6b6 = value_binding_pattern i [concrete] // CHECK:STDOUT: %CppRangeForIterate.type: type = facet_type <@CppRangeForIterate> [concrete] // CHECK:STDOUT: %.Self.6bd: %CppRangeForIterate.type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %CppRangeForIterate.lookup_impl_witness.143: = lookup_impl_witness %.Self.6bd, @CppRangeForIterate [symbolic_self] @@ -811,6 +804,8 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.34d: %R.as_type.as.Iterate.impl.Next.type.dba = struct_value () [concrete] // CHECK:STDOUT: %Iterate.facet.ffb: %Iterate.type = facet_value %MutableRange, (%Iterate.impl_witness.cea) [concrete] // CHECK:STDOUT: %facet_value.879: %Iterate_where.type.8bc = facet_value %MutableRange, (%Iterate.impl_witness.cea) [concrete] +// CHECK:STDOUT: %r.param_patt.c79: %pattern_type.e635 = value_param_pattern [concrete] +// CHECK:STDOUT: %r.patt.16f: %pattern_type.e635 = at_binding_pattern r, %r.param_patt.c79 [concrete] // CHECK:STDOUT: %Iterator.260: type = class_type @Iterator.2 [concrete] // CHECK:STDOUT: %ConstRange.Begin.type: type = fn_type @ConstRange.Begin [concrete] // CHECK:STDOUT: %ConstRange.Begin: %ConstRange.Begin.type = struct_value () [concrete] @@ -847,6 +842,8 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.393: %R.as_type.as.Iterate.impl.Next.type.f9d = struct_value () [concrete] // CHECK:STDOUT: %Iterate.facet.5eb: %Iterate.type = facet_value %ConstRange, (%Iterate.impl_witness.12a) [concrete] // CHECK:STDOUT: %facet_value.740: %Iterate_where.type.8bc = facet_value %ConstRange, (%Iterate.impl_witness.12a) [concrete] +// CHECK:STDOUT: %r.param_patt.83e: %pattern_type.0ba = value_param_pattern [concrete] +// CHECK:STDOUT: %r.patt.116: %pattern_type.0ba = at_binding_pattern r, %r.param_patt.83e [concrete] // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.dcb: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.ffb) [concrete] // CHECK:STDOUT: %.d6a: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.dcb, %Iterate.facet.ffb [concrete] // CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.specific_fn.bf1: = specific_function %R.as_type.as.Iterate.impl.NewCursor.8d2, @R.as_type.as.Iterate.impl.NewCursor(%facet_value.cd6) [concrete] @@ -902,34 +899,36 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: %Iterate.lookup_impl_witness: = lookup_impl_witness %R.loc30_10.1, @Iterate [symbolic = %Iterate.lookup_impl_witness (constants.%Iterate.lookup_impl_witness.c86)] -// CHECK:STDOUT: %Iterate.facet.loc34_19.3: %Iterate.type = facet_value %R.as_type.loc30_55.1, (%Iterate.lookup_impl_witness) [symbolic = %Iterate.facet.loc34_19.3 (constants.%Iterate.facet.bbb)] -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.loc34_19.3) [symbolic = %Iterate.WithSelf.NewCursor.type (constants.%Iterate.WithSelf.NewCursor.type.d2b)] -// CHECK:STDOUT: %.loc34_19.15: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type, %Iterate.facet.loc34_19.3 [symbolic = %.loc34_19.15 (constants.%.3e2)] -// CHECK:STDOUT: %impl.elem2.loc34_19.2: @Test.%.loc34_19.15 (%.3e2) = impl_witness_access %Iterate.lookup_impl_witness, element2 [symbolic = %impl.elem2.loc34_19.2 (constants.%impl.elem2.f53)] -// CHECK:STDOUT: %specific_impl_fn.loc34_19.4: = specific_impl_function %impl.elem2.loc34_19.2, @Iterate.WithSelf.NewCursor(%Iterate.facet.loc34_19.3) [symbolic = %specific_impl_fn.loc34_19.4 (constants.%specific_impl_fn.87a)] +// CHECK:STDOUT: %Iterate.facet.loc34_19.5: %Iterate.type = facet_value %R.as_type.loc30_55.1, (%Iterate.lookup_impl_witness) [symbolic = %Iterate.facet.loc34_19.5 (constants.%Iterate.facet.bbb)] +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.loc34_19.5) [symbolic = %Iterate.WithSelf.NewCursor.type (constants.%Iterate.WithSelf.NewCursor.type.d2b)] +// CHECK:STDOUT: %.loc34_19.19: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type, %Iterate.facet.loc34_19.5 [symbolic = %.loc34_19.19 (constants.%.3e2)] +// CHECK:STDOUT: %impl.elem2.loc34_19.2: @Test.%.loc34_19.19 (%.3e2) = impl_witness_access %Iterate.lookup_impl_witness, element2 [symbolic = %impl.elem2.loc34_19.2 (constants.%impl.elem2.f53)] +// CHECK:STDOUT: %specific_impl_fn.loc34_19.4: = specific_impl_function %impl.elem2.loc34_19.2, @Iterate.WithSelf.NewCursor(%Iterate.facet.loc34_19.5) [symbolic = %specific_impl_fn.loc34_19.4 (constants.%specific_impl_fn.87a)] // CHECK:STDOUT: // CHECK:STDOUT: %ptr: type = ptr_type %as_type [symbolic = %ptr (constants.%ptr.3b4)] -// CHECK:STDOUT: %Iterate.WithSelf.Next.type: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.loc34_19.3) [symbolic = %Iterate.WithSelf.Next.type (constants.%Iterate.WithSelf.Next.type.28b)] -// CHECK:STDOUT: %.loc34_19.16: type = fn_type_with_self_type %Iterate.WithSelf.Next.type, %Iterate.facet.loc34_19.3 [symbolic = %.loc34_19.16 (constants.%.a8b)] -// CHECK:STDOUT: %impl.elem3.loc34_19.2: @Test.%.loc34_19.16 (%.a8b) = impl_witness_access %Iterate.lookup_impl_witness, element3 [symbolic = %impl.elem3.loc34_19.2 (constants.%impl.elem3.9c3)] -// CHECK:STDOUT: %specific_impl_fn.loc34_19.5: = specific_impl_function %impl.elem3.loc34_19.2, @Iterate.WithSelf.Next(%Iterate.facet.loc34_19.3) [symbolic = %specific_impl_fn.loc34_19.5 (constants.%specific_impl_fn.ab2)] +// CHECK:STDOUT: %Iterate.WithSelf.Next.type: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.loc34_19.5) [symbolic = %Iterate.WithSelf.Next.type (constants.%Iterate.WithSelf.Next.type.28b)] +// CHECK:STDOUT: %.loc34_19.20: type = fn_type_with_self_type %Iterate.WithSelf.Next.type, %Iterate.facet.loc34_19.5 [symbolic = %.loc34_19.20 (constants.%.a8b)] +// CHECK:STDOUT: %impl.elem3.loc34_19.2: @Test.%.loc34_19.20 (%.a8b) = impl_witness_access %Iterate.lookup_impl_witness, element3 [symbolic = %impl.elem3.loc34_19.2 (constants.%impl.elem3.9c3)] +// CHECK:STDOUT: %specific_impl_fn.loc34_19.5: = specific_impl_function %impl.elem3.loc34_19.2, @Iterate.WithSelf.Next(%Iterate.facet.loc34_19.5) [symbolic = %specific_impl_fn.loc34_19.5 (constants.%specific_impl_fn.ab2)] // CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%impl.elem1) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.515)] -// CHECK:STDOUT: %.loc34_19.17: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %impl.elem1 [symbolic = %.loc34_19.17 (constants.%.94f)] +// CHECK:STDOUT: %.loc34_19.21: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %impl.elem1 [symbolic = %.loc34_19.21 (constants.%.94f)] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %impl.elem1, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness.5d5)] -// CHECK:STDOUT: %impl.elem0.loc34_19.2: @Test.%.loc34_19.17 (%.94f) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc34_19.2 (constants.%impl.elem0.e52)] +// CHECK:STDOUT: %impl.elem0.loc34_19.2: @Test.%.loc34_19.21 (%.94f) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc34_19.2 (constants.%impl.elem0.e52)] // CHECK:STDOUT: %specific_impl_fn.loc34_19.6: = specific_impl_function %impl.elem0.loc34_19.2, @Destroy.WithSelf.Op(%impl.elem1) [symbolic = %specific_impl_fn.loc34_19.6 (constants.%specific_impl_fn.12e)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%r.param: @Test.%R.as_type.loc30_55.1 (%R.as_type.67d)) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %i.patt: %pattern_type.6b6 = value_binding_pattern i [concrete] +// CHECK:STDOUT: %i.patt: %pattern_type.6b6 = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %r.ref: @Test.%R.as_type.loc30_55.1 (%R.as_type.67d) = name_ref r, %r -// CHECK:STDOUT: %impl.elem2.loc34_19.1: @Test.%.loc34_19.15 (%.3e2) = impl_witness_access constants.%Iterate.lookup_impl_witness.c86, element2 [symbolic = %impl.elem2.loc34_19.2 (constants.%impl.elem2.f53)] +// CHECK:STDOUT: %impl.elem2.loc34_19.1: @Test.%.loc34_19.19 (%.3e2) = impl_witness_access constants.%Iterate.lookup_impl_witness.c86, element2 [symbolic = %impl.elem2.loc34_19.2 (constants.%impl.elem2.f53)] // CHECK:STDOUT: %bound_method.loc34_19.1: = bound_method %r.ref, %impl.elem2.loc34_19.1 -// CHECK:STDOUT: %Iterate.facet.loc34_19.1: %Iterate.type = facet_value constants.%R.as_type.67d, (constants.%Iterate.lookup_impl_witness.c86) [symbolic = %Iterate.facet.loc34_19.3 (constants.%Iterate.facet.bbb)] -// CHECK:STDOUT: %.loc34_19.1: %Iterate.type = converted constants.%R.as_type.67d, %Iterate.facet.loc34_19.1 [symbolic = %Iterate.facet.loc34_19.3 (constants.%Iterate.facet.bbb)] +// CHECK:STDOUT: %Iterate.facet.loc34_19.1: %Iterate.type = facet_value constants.%R.as_type.67d, (constants.%Iterate.lookup_impl_witness.c86) [symbolic = %Iterate.facet.loc34_19.5 (constants.%Iterate.facet.bbb)] +// CHECK:STDOUT: %.loc34_19.1: %Iterate.type = converted constants.%R.as_type.67d, %Iterate.facet.loc34_19.1 [symbolic = %Iterate.facet.loc34_19.5 (constants.%Iterate.facet.bbb)] +// CHECK:STDOUT: %Iterate.facet.loc34_19.2: %Iterate.type = facet_value constants.%R.as_type.67d, (constants.%Iterate.lookup_impl_witness.c86) [symbolic = %Iterate.facet.loc34_19.5 (constants.%Iterate.facet.bbb)] +// CHECK:STDOUT: %.loc34_19.2: %Iterate.type = converted constants.%R.as_type.67d, %Iterate.facet.loc34_19.2 [symbolic = %Iterate.facet.loc34_19.5 (constants.%Iterate.facet.bbb)] // CHECK:STDOUT: %specific_impl_fn.loc34_19.1: = specific_impl_function %impl.elem2.loc34_19.1, @Iterate.WithSelf.NewCursor(constants.%Iterate.facet.bbb) [symbolic = %specific_impl_fn.loc34_19.4 (constants.%specific_impl_fn.87a)] // CHECK:STDOUT: %bound_method.loc34_19.2: = bound_method %r.ref, %specific_impl_fn.loc34_19.1 // CHECK:STDOUT: %var: ref @Test.%as_type (%as_type.ca2) = var invalid @@ -939,39 +938,42 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: // CHECK:STDOUT: !for.next: // CHECK:STDOUT: %addr: @Test.%ptr (%ptr.3b4) = addr_of %var -// CHECK:STDOUT: %impl.elem3.loc34_19.1: @Test.%.loc34_19.16 (%.a8b) = impl_witness_access constants.%Iterate.lookup_impl_witness.c86, element3 [symbolic = %impl.elem3.loc34_19.2 (constants.%impl.elem3.9c3)] +// CHECK:STDOUT: %impl.elem3.loc34_19.1: @Test.%.loc34_19.20 (%.a8b) = impl_witness_access constants.%Iterate.lookup_impl_witness.c86, element3 [symbolic = %impl.elem3.loc34_19.2 (constants.%impl.elem3.9c3)] // CHECK:STDOUT: %bound_method.loc34_19.3: = bound_method %r.ref, %impl.elem3.loc34_19.1 -// CHECK:STDOUT: %Iterate.facet.loc34_19.2: %Iterate.type = facet_value constants.%R.as_type.67d, (constants.%Iterate.lookup_impl_witness.c86) [symbolic = %Iterate.facet.loc34_19.3 (constants.%Iterate.facet.bbb)] -// CHECK:STDOUT: %.loc34_19.2: %Iterate.type = converted constants.%R.as_type.67d, %Iterate.facet.loc34_19.2 [symbolic = %Iterate.facet.loc34_19.3 (constants.%Iterate.facet.bbb)] -// CHECK:STDOUT: %.loc34_19.3: %Destroy.type = converted constants.%as_type.ca2, constants.%impl.elem1.d31 [symbolic = %impl.elem1 (constants.%impl.elem1.d31)] +// CHECK:STDOUT: %Iterate.facet.loc34_19.3: %Iterate.type = facet_value constants.%R.as_type.67d, (constants.%Iterate.lookup_impl_witness.c86) [symbolic = %Iterate.facet.loc34_19.5 (constants.%Iterate.facet.bbb)] +// CHECK:STDOUT: %.loc34_19.3: %Iterate.type = converted constants.%R.as_type.67d, %Iterate.facet.loc34_19.3 [symbolic = %Iterate.facet.loc34_19.5 (constants.%Iterate.facet.bbb)] +// CHECK:STDOUT: %Iterate.facet.loc34_19.4: %Iterate.type = facet_value constants.%R.as_type.67d, (constants.%Iterate.lookup_impl_witness.c86) [symbolic = %Iterate.facet.loc34_19.5 (constants.%Iterate.facet.bbb)] +// CHECK:STDOUT: %.loc34_19.4: %Iterate.type = converted constants.%R.as_type.67d, %Iterate.facet.loc34_19.4 [symbolic = %Iterate.facet.loc34_19.5 (constants.%Iterate.facet.bbb)] +// CHECK:STDOUT: %.loc34_19.5: %Destroy.type = converted constants.%as_type.ca2, constants.%impl.elem1.d31 [symbolic = %impl.elem1 (constants.%impl.elem1.d31)] +// CHECK:STDOUT: %.loc34_19.6: %Destroy.type = converted constants.%as_type.ca2, constants.%impl.elem1.d31 [symbolic = %impl.elem1 (constants.%impl.elem1.d31)] // CHECK:STDOUT: %specific_impl_fn.loc34_19.2: = specific_impl_function %impl.elem3.loc34_19.1, @Iterate.WithSelf.Next(constants.%Iterate.facet.bbb) [symbolic = %specific_impl_fn.loc34_19.5 (constants.%specific_impl_fn.ab2)] // CHECK:STDOUT: %bound_method.loc34_19.4: = bound_method %r.ref, %specific_impl_fn.loc34_19.2 -// CHECK:STDOUT: %.loc34_19.4: ref %Optional.e28 = temporary_storage -// CHECK:STDOUT: %Iterate.WithSelf.Next.call: init %Optional.e28 to %.loc34_19.4 = call %bound_method.loc34_19.4(%r.ref, %addr) -// CHECK:STDOUT: %.loc34_19.5: ref %Optional.e28 = temporary %.loc34_19.4, %Iterate.WithSelf.Next.call -// CHECK:STDOUT: %.loc34_19.6: %Optional.HasValue.type.c6d = specific_constant imports.%Core.import_ref.bb6, @Optional(constants.%OptionalStorage.facet.172) [concrete = constants.%Optional.HasValue.89b] -// CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.c6d = name_ref HasValue, %.loc34_19.6 [concrete = constants.%Optional.HasValue.89b] -// CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc34_19.5, %HasValue.ref +// CHECK:STDOUT: %.loc34_19.7: ref %Optional.e28 = temporary_storage +// CHECK:STDOUT: %Iterate.WithSelf.Next.call: init %Optional.e28 to %.loc34_19.7 = call %bound_method.loc34_19.4(%r.ref, %addr) +// CHECK:STDOUT: %.loc34_19.8: ref %Optional.e28 = temporary %.loc34_19.7, %Iterate.WithSelf.Next.call +// CHECK:STDOUT: %.loc34_19.9: %Optional.HasValue.type.c6d = specific_constant imports.%Core.import_ref.bb6, @Optional(constants.%OptionalStorage.facet.172) [concrete = constants.%Optional.HasValue.89b] +// CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.c6d = name_ref HasValue, %.loc34_19.9 [concrete = constants.%Optional.HasValue.89b] +// CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc34_19.8, %HasValue.ref // CHECK:STDOUT: %Optional.HasValue.specific_fn: = specific_function %HasValue.ref, @Optional.HasValue(constants.%OptionalStorage.facet.172) [concrete = constants.%Optional.HasValue.specific_fn] -// CHECK:STDOUT: %bound_method.loc34_19.5: = bound_method %.loc34_19.5, %Optional.HasValue.specific_fn -// CHECK:STDOUT: %.loc34_19.7: %Optional.e28 = acquire_value %.loc34_19.5 -// CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc34_19.5(%.loc34_19.7) -// CHECK:STDOUT: %.loc34_19.8: bool = value_of_initializer %Optional.HasValue.call -// CHECK:STDOUT: %.loc34_19.9: bool = converted %Optional.HasValue.call, %.loc34_19.8 -// CHECK:STDOUT: if %.loc34_19.9 br !for.body else br !for.done +// CHECK:STDOUT: %bound_method.loc34_19.5: = bound_method %.loc34_19.8, %Optional.HasValue.specific_fn +// CHECK:STDOUT: %.loc34_19.10: %Optional.e28 = acquire_value %.loc34_19.8 +// CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc34_19.5(%.loc34_19.10) +// CHECK:STDOUT: %.loc34_19.11: bool = value_of_initializer %Optional.HasValue.call +// CHECK:STDOUT: %.loc34_19.12: bool = converted %Optional.HasValue.call, %.loc34_19.11 +// CHECK:STDOUT: if %.loc34_19.12 br !for.body else br !for.done // CHECK:STDOUT: // CHECK:STDOUT: !for.body: -// CHECK:STDOUT: %.loc34_19.10: %Optional.Get.type.7e6 = specific_constant imports.%Core.import_ref.daba, @Optional(constants.%OptionalStorage.facet.172) [concrete = constants.%Optional.Get.722] -// CHECK:STDOUT: %Get.ref: %Optional.Get.type.7e6 = name_ref Get, %.loc34_19.10 [concrete = constants.%Optional.Get.722] -// CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc34_19.5, %Get.ref +// CHECK:STDOUT: %.loc34_19.13: %Optional.Get.type.7e6 = specific_constant imports.%Core.import_ref.daba, @Optional(constants.%OptionalStorage.facet.172) [concrete = constants.%Optional.Get.722] +// CHECK:STDOUT: %Get.ref: %Optional.Get.type.7e6 = name_ref Get, %.loc34_19.13 [concrete = constants.%Optional.Get.722] +// CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc34_19.8, %Get.ref // CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Get.ref, @Optional.Get(constants.%OptionalStorage.facet.172) [concrete = constants.%Optional.Get.specific_fn] -// CHECK:STDOUT: %bound_method.loc34_19.6: = bound_method %.loc34_19.5, %Optional.Get.specific_fn -// CHECK:STDOUT: %.loc34_19.11: %Optional.e28 = acquire_value %.loc34_19.5 -// CHECK:STDOUT: %Optional.Get.call: init %i32 = call %bound_method.loc34_19.6(%.loc34_19.11) +// CHECK:STDOUT: %bound_method.loc34_19.6: = bound_method %.loc34_19.8, %Optional.Get.specific_fn +// CHECK:STDOUT: %.loc34_19.14: %Optional.e28 = acquire_value %.loc34_19.8 +// CHECK:STDOUT: %Optional.Get.call: init %i32 = call %bound_method.loc34_19.6(%.loc34_19.14) +// CHECK:STDOUT: %.loc34_19.15: %i32 = value_of_initializer %Optional.Get.call +// CHECK:STDOUT: %.loc34_19.16: %i32 = converted %Optional.Get.call, %.loc34_19.15 // CHECK:STDOUT: %i32.loc34: type = type_literal constants.%i32 [concrete = constants.%i32] -// CHECK:STDOUT: %.loc34_19.12: %i32 = value_of_initializer %Optional.Get.call -// CHECK:STDOUT: %.loc34_19.13: %i32 = converted %Optional.Get.call, %.loc34_19.12 -// CHECK:STDOUT: %i: %i32 = value_binding i, %.loc34_19.13 +// CHECK:STDOUT: %i: %i32 = value_binding i, %.loc34_19.16 // CHECK:STDOUT: %sum.ref: ref %i32 = name_ref sum, %sum // CHECK:STDOUT: %i.ref: %i32 = name_ref i, %i // CHECK:STDOUT: %impl.elem0.loc35: %.b28 = impl_witness_access constants.%AddAssignWith.impl_witness.22e, element0 [concrete = constants.%Int.as.AddAssignWith.impl.Op.00e760.2] @@ -987,11 +989,12 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.done: -// CHECK:STDOUT: %Destroy.Op.bound.loc34: = bound_method %.loc34_19.5, constants.%Destroy.Op.1a2547.9 -// CHECK:STDOUT: %Destroy.Op.call.loc34: init %empty_tuple.type = call %Destroy.Op.bound.loc34(%.loc34_19.5) -// CHECK:STDOUT: %impl.elem0.loc34_19.1: @Test.%.loc34_19.17 (%.94f) = impl_witness_access constants.%Destroy.lookup_impl_witness.5d5, element0 [symbolic = %impl.elem0.loc34_19.2 (constants.%impl.elem0.e52)] +// CHECK:STDOUT: %Destroy.Op.bound.loc34: = bound_method %.loc34_19.8, constants.%Destroy.Op.1a2547.9 +// CHECK:STDOUT: %Destroy.Op.call.loc34: init %empty_tuple.type = call %Destroy.Op.bound.loc34(%.loc34_19.8) +// CHECK:STDOUT: %impl.elem0.loc34_19.1: @Test.%.loc34_19.21 (%.94f) = impl_witness_access constants.%Destroy.lookup_impl_witness.5d5, element0 [symbolic = %impl.elem0.loc34_19.2 (constants.%impl.elem0.e52)] // CHECK:STDOUT: %bound_method.loc34_19.7: = bound_method %var, %impl.elem0.loc34_19.1 -// CHECK:STDOUT: %.loc34_19.14: %Destroy.type = converted constants.%as_type.ca2, constants.%impl.elem1.d31 [symbolic = %impl.elem1 (constants.%impl.elem1.d31)] +// CHECK:STDOUT: %.loc34_19.17: %Destroy.type = converted constants.%as_type.ca2, constants.%impl.elem1.d31 [symbolic = %impl.elem1 (constants.%impl.elem1.d31)] +// CHECK:STDOUT: %.loc34_19.18: %Destroy.type = converted constants.%as_type.ca2, constants.%impl.elem1.d31 [symbolic = %impl.elem1 (constants.%impl.elem1.d31)] // CHECK:STDOUT: %specific_impl_fn.loc34_19.3: = specific_impl_function %impl.elem0.loc34_19.1, @Destroy.WithSelf.Op(constants.%impl.elem1.d31) [symbolic = %specific_impl_fn.loc34_19.6 (constants.%specific_impl_fn.12e)] // CHECK:STDOUT: %bound_method.loc34_19.8: = bound_method %var, %specific_impl_fn.loc34_19.3 // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc34_19.8(%var) @@ -1027,22 +1030,28 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Test(constants.%R.891) { +// CHECK:STDOUT: %R.patt.loc30_10.2 => constants.%R.patt.860 // CHECK:STDOUT: %R.loc30_10.1 => constants.%R.891 // CHECK:STDOUT: %R.as_type.loc30_55.1 => constants.%R.as_type.67d // CHECK:STDOUT: %pattern_type => constants.%pattern_type.e21 +// CHECK:STDOUT: %r.param_patt.loc30_53.2 => constants.%r.param_patt.fdd +// CHECK:STDOUT: %r.patt.loc30_53.2 => constants.%r.patt.939 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Test(constants.%facet_value.879) { +// CHECK:STDOUT: %R.patt.loc30_10.2 => constants.%R.patt.860 // CHECK:STDOUT: %R.loc30_10.1 => constants.%facet_value.879 // CHECK:STDOUT: %R.as_type.loc30_55.1 => constants.%MutableRange // CHECK:STDOUT: %pattern_type => constants.%pattern_type.e635 +// CHECK:STDOUT: %r.param_patt.loc30_53.2 => constants.%r.param_patt.c79 +// CHECK:STDOUT: %r.patt.loc30_53.2 => constants.%r.patt.16f // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc30 => constants.%complete_type.357 // CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.cea -// CHECK:STDOUT: %Iterate.facet.loc34_19.3 => constants.%Iterate.facet.ffb +// CHECK:STDOUT: %Iterate.facet.loc34_19.5 => constants.%Iterate.facet.ffb // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.dcb -// CHECK:STDOUT: %.loc34_19.15 => constants.%.d6a +// CHECK:STDOUT: %.loc34_19.19 => constants.%.d6a // CHECK:STDOUT: %impl.elem2.loc34_19.2 => constants.%R.as_type.as.Iterate.impl.NewCursor.8d2 // CHECK:STDOUT: %specific_impl_fn.loc34_19.4 => constants.%R.as_type.as.Iterate.impl.NewCursor.specific_fn.bf1 // CHECK:STDOUT: %impl.elem1 => constants.%Destroy.facet.30f @@ -1050,27 +1059,30 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %require_complete.1 => constants.%complete_type.c28 // CHECK:STDOUT: %ptr => constants.%ptr.45c // CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.30e -// CHECK:STDOUT: %.loc34_19.16 => constants.%.d23 +// CHECK:STDOUT: %.loc34_19.20 => constants.%.d23 // CHECK:STDOUT: %impl.elem3.loc34_19.2 => constants.%R.as_type.as.Iterate.impl.Next.34d // CHECK:STDOUT: %specific_impl_fn.loc34_19.5 => constants.%R.as_type.as.Iterate.impl.Next.specific_fn.dd5 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.c6c -// CHECK:STDOUT: %.loc34_19.17 => constants.%.0a4 +// CHECK:STDOUT: %.loc34_19.21 => constants.%.0a4 // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.df9cc1.10 // CHECK:STDOUT: %impl.elem0.loc34_19.2 => constants.%Destroy.Op.1a2547.10 // CHECK:STDOUT: %specific_impl_fn.loc34_19.6 => constants.%Destroy.Op.1a2547.10 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Test(constants.%facet_value.740) { +// CHECK:STDOUT: %R.patt.loc30_10.2 => constants.%R.patt.860 // CHECK:STDOUT: %R.loc30_10.1 => constants.%facet_value.740 // CHECK:STDOUT: %R.as_type.loc30_55.1 => constants.%ConstRange // CHECK:STDOUT: %pattern_type => constants.%pattern_type.0ba +// CHECK:STDOUT: %r.param_patt.loc30_53.2 => constants.%r.param_patt.83e +// CHECK:STDOUT: %r.patt.loc30_53.2 => constants.%r.patt.116 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc30 => constants.%complete_type.357 // CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.12a -// CHECK:STDOUT: %Iterate.facet.loc34_19.3 => constants.%Iterate.facet.5eb +// CHECK:STDOUT: %Iterate.facet.loc34_19.5 => constants.%Iterate.facet.5eb // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.ab5 -// CHECK:STDOUT: %.loc34_19.15 => constants.%.744 +// CHECK:STDOUT: %.loc34_19.19 => constants.%.744 // CHECK:STDOUT: %impl.elem2.loc34_19.2 => constants.%R.as_type.as.Iterate.impl.NewCursor.2f6 // CHECK:STDOUT: %specific_impl_fn.loc34_19.4 => constants.%R.as_type.as.Iterate.impl.NewCursor.specific_fn.a05 // CHECK:STDOUT: %impl.elem1 => constants.%Destroy.facet.e4c @@ -1078,11 +1090,11 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %require_complete.1 => constants.%complete_type.8d5 // CHECK:STDOUT: %ptr => constants.%ptr.c5c // CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.e25 -// CHECK:STDOUT: %.loc34_19.16 => constants.%.03b +// CHECK:STDOUT: %.loc34_19.20 => constants.%.03b // CHECK:STDOUT: %impl.elem3.loc34_19.2 => constants.%R.as_type.as.Iterate.impl.Next.393 // CHECK:STDOUT: %specific_impl_fn.loc34_19.5 => constants.%R.as_type.as.Iterate.impl.Next.specific_fn.4cc // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.7ec -// CHECK:STDOUT: %.loc34_19.17 => constants.%.0e7 +// CHECK:STDOUT: %.loc34_19.21 => constants.%.0e7 // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.df9cc1.11 // CHECK:STDOUT: %impl.elem0.loc34_19.2 => constants.%Destroy.Op.1a2547.11 // CHECK:STDOUT: %specific_impl_fn.loc34_19.6 => constants.%Destroy.Op.1a2547.11 @@ -1131,9 +1143,14 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %custom_witness.d0da43.1: = custom_witness (%ValueType.Op.4dca31.2), @Copy [concrete] // CHECK:STDOUT: %facet_value.bf1: %facet_type = facet_value %ValueType, (%custom_witness.e7a31c.1, %custom_witness.d0da43.1) [concrete] // CHECK:STDOUT: %Iterate_where.type.dfc: type = facet_type <@Iterate where %impl.elem0.903 = %facet_value.bf1> [concrete] +// CHECK:STDOUT: %pattern_type.161: type = pattern_type %Iterate_where.type.dfc [concrete] +// CHECK:STDOUT: %R.patt.f38: %pattern_type.161 = symbolic_binding_pattern R, 0 [symbolic] // CHECK:STDOUT: %R.de1: %Iterate_where.type.dfc = symbolic_binding R, 0 [symbolic] // CHECK:STDOUT: %R.as_type.f62: type = facet_access_type %R.de1 [symbolic] // CHECK:STDOUT: %pattern_type.669: type = pattern_type %R.as_type.f62 [symbolic] +// CHECK:STDOUT: %r.patt.c0f: %pattern_type.669 = ref_binding_pattern r [symbolic] +// CHECK:STDOUT: %r.param_patt.bb2: %pattern_type.669 = var_param_pattern %r.patt.c0f [symbolic] +// CHECK:STDOUT: %i.patt: %pattern_type.e9f = value_binding_pattern i [concrete] // CHECK:STDOUT: %CppRangeForIterate.type: type = facet_type <@CppRangeForIterate> [concrete] // CHECK:STDOUT: %.Self.6bd: %CppRangeForIterate.type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %CppRangeForIterate.lookup_impl_witness.143: = lookup_impl_witness %.Self.6bd, @CppRangeForIterate [symbolic_self] @@ -1241,6 +1258,8 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.055: %R.as_type.as.Iterate.impl.Next.type.d64 = struct_value () [concrete] // CHECK:STDOUT: %Iterate.facet.723: %Iterate.type = facet_value %MutableRange, (%Iterate.impl_witness.096) [concrete] // CHECK:STDOUT: %facet_value.150: %Iterate_where.type.dfc = facet_value %MutableRange, (%Iterate.impl_witness.096) [concrete] +// CHECK:STDOUT: %r.patt.f69: %pattern_type.e635 = ref_binding_pattern r [concrete] +// CHECK:STDOUT: %r.param_patt.91e: %pattern_type.e635 = var_param_pattern %r.patt.f69 [concrete] // CHECK:STDOUT: %Iterator.260: type = class_type @Iterator.2 [concrete] // CHECK:STDOUT: %Sentinel.4c4: type = class_type @Sentinel.2 [concrete] // CHECK:STDOUT: %ConstRange.Begin.type: type = fn_type @ConstRange.Begin [concrete] @@ -1284,6 +1303,8 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.c50: %R.as_type.as.Iterate.impl.Next.type.b0c = struct_value () [concrete] // CHECK:STDOUT: %Iterate.facet.c46: %Iterate.type = facet_value %ConstRange, (%Iterate.impl_witness.40c) [concrete] // CHECK:STDOUT: %facet_value.e78: %Iterate_where.type.dfc = facet_value %ConstRange, (%Iterate.impl_witness.40c) [concrete] +// CHECK:STDOUT: %r.patt.36a: %pattern_type.0ba = ref_binding_pattern r [concrete] +// CHECK:STDOUT: %r.param_patt.501: %pattern_type.0ba = var_param_pattern %r.patt.36a [concrete] // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.47d: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.723) [concrete] // CHECK:STDOUT: %.47d: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.47d, %Iterate.facet.723 [concrete] // CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.specific_fn.532: = specific_function %R.as_type.as.Iterate.impl.NewCursor.498, @R.as_type.as.Iterate.impl.NewCursor(%facet_value.55a) [concrete] @@ -1348,34 +1369,36 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: %Iterate.lookup_impl_witness: = lookup_impl_witness %R.loc40_10.1, @Iterate [symbolic = %Iterate.lookup_impl_witness (constants.%Iterate.lookup_impl_witness.acc)] -// CHECK:STDOUT: %Iterate.facet.loc44_29.3: %Iterate.type = facet_value %R.as_type.loc40_69.1, (%Iterate.lookup_impl_witness) [symbolic = %Iterate.facet.loc44_29.3 (constants.%Iterate.facet.b95)] -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.loc44_29.3) [symbolic = %Iterate.WithSelf.NewCursor.type (constants.%Iterate.WithSelf.NewCursor.type.d69)] -// CHECK:STDOUT: %.loc44_29.16: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type, %Iterate.facet.loc44_29.3 [symbolic = %.loc44_29.16 (constants.%.f8a)] -// CHECK:STDOUT: %impl.elem2.loc44_29.2: @Test.%.loc44_29.16 (%.f8a) = impl_witness_access %Iterate.lookup_impl_witness, element2 [symbolic = %impl.elem2.loc44_29.2 (constants.%impl.elem2.398)] -// CHECK:STDOUT: %specific_impl_fn.loc44_29.4: = specific_impl_function %impl.elem2.loc44_29.2, @Iterate.WithSelf.NewCursor(%Iterate.facet.loc44_29.3) [symbolic = %specific_impl_fn.loc44_29.4 (constants.%specific_impl_fn.544)] +// CHECK:STDOUT: %Iterate.facet.loc44_29.5: %Iterate.type = facet_value %R.as_type.loc40_69.1, (%Iterate.lookup_impl_witness) [symbolic = %Iterate.facet.loc44_29.5 (constants.%Iterate.facet.b95)] +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.loc44_29.5) [symbolic = %Iterate.WithSelf.NewCursor.type (constants.%Iterate.WithSelf.NewCursor.type.d69)] +// CHECK:STDOUT: %.loc44_29.20: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type, %Iterate.facet.loc44_29.5 [symbolic = %.loc44_29.20 (constants.%.f8a)] +// CHECK:STDOUT: %impl.elem2.loc44_29.2: @Test.%.loc44_29.20 (%.f8a) = impl_witness_access %Iterate.lookup_impl_witness, element2 [symbolic = %impl.elem2.loc44_29.2 (constants.%impl.elem2.398)] +// CHECK:STDOUT: %specific_impl_fn.loc44_29.4: = specific_impl_function %impl.elem2.loc44_29.2, @Iterate.WithSelf.NewCursor(%Iterate.facet.loc44_29.5) [symbolic = %specific_impl_fn.loc44_29.4 (constants.%specific_impl_fn.544)] // CHECK:STDOUT: // CHECK:STDOUT: %ptr: type = ptr_type %as_type [symbolic = %ptr (constants.%ptr.bdd)] -// CHECK:STDOUT: %Iterate.WithSelf.Next.type: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.loc44_29.3) [symbolic = %Iterate.WithSelf.Next.type (constants.%Iterate.WithSelf.Next.type.d6f)] -// CHECK:STDOUT: %.loc44_29.17: type = fn_type_with_self_type %Iterate.WithSelf.Next.type, %Iterate.facet.loc44_29.3 [symbolic = %.loc44_29.17 (constants.%.52a)] -// CHECK:STDOUT: %impl.elem3.loc44_29.2: @Test.%.loc44_29.17 (%.52a) = impl_witness_access %Iterate.lookup_impl_witness, element3 [symbolic = %impl.elem3.loc44_29.2 (constants.%impl.elem3.510)] -// CHECK:STDOUT: %specific_impl_fn.loc44_29.5: = specific_impl_function %impl.elem3.loc44_29.2, @Iterate.WithSelf.Next(%Iterate.facet.loc44_29.3) [symbolic = %specific_impl_fn.loc44_29.5 (constants.%specific_impl_fn.a00)] +// CHECK:STDOUT: %Iterate.WithSelf.Next.type: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.loc44_29.5) [symbolic = %Iterate.WithSelf.Next.type (constants.%Iterate.WithSelf.Next.type.d6f)] +// CHECK:STDOUT: %.loc44_29.21: type = fn_type_with_self_type %Iterate.WithSelf.Next.type, %Iterate.facet.loc44_29.5 [symbolic = %.loc44_29.21 (constants.%.52a)] +// CHECK:STDOUT: %impl.elem3.loc44_29.2: @Test.%.loc44_29.21 (%.52a) = impl_witness_access %Iterate.lookup_impl_witness, element3 [symbolic = %impl.elem3.loc44_29.2 (constants.%impl.elem3.510)] +// CHECK:STDOUT: %specific_impl_fn.loc44_29.5: = specific_impl_function %impl.elem3.loc44_29.2, @Iterate.WithSelf.Next(%Iterate.facet.loc44_29.5) [symbolic = %specific_impl_fn.loc44_29.5 (constants.%specific_impl_fn.a00)] // CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%impl.elem1) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.d67)] -// CHECK:STDOUT: %.loc44_29.18: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %impl.elem1 [symbolic = %.loc44_29.18 (constants.%.4b9)] +// CHECK:STDOUT: %.loc44_29.22: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %impl.elem1 [symbolic = %.loc44_29.22 (constants.%.4b9)] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %impl.elem1, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness.ff8)] -// CHECK:STDOUT: %impl.elem0.loc44_29.2: @Test.%.loc44_29.18 (%.4b9) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc44_29.2 (constants.%impl.elem0.fbe)] +// CHECK:STDOUT: %impl.elem0.loc44_29.2: @Test.%.loc44_29.22 (%.4b9) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc44_29.2 (constants.%impl.elem0.fbe)] // CHECK:STDOUT: %specific_impl_fn.loc44_29.6: = specific_impl_function %impl.elem0.loc44_29.2, @Destroy.WithSelf.Op(%impl.elem1) [symbolic = %specific_impl_fn.loc44_29.6 (constants.%specific_impl_fn.517)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%r.param: ref @Test.%R.as_type.loc40_69.1 (%R.as_type.f62)) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %i.patt: %pattern_type.e9f = value_binding_pattern i [concrete] +// CHECK:STDOUT: %i.patt: %pattern_type.e9f = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %r.ref: ref @Test.%R.as_type.loc40_69.1 (%R.as_type.f62) = name_ref r, %r -// CHECK:STDOUT: %impl.elem2.loc44_29.1: @Test.%.loc44_29.16 (%.f8a) = impl_witness_access constants.%Iterate.lookup_impl_witness.acc, element2 [symbolic = %impl.elem2.loc44_29.2 (constants.%impl.elem2.398)] +// CHECK:STDOUT: %impl.elem2.loc44_29.1: @Test.%.loc44_29.20 (%.f8a) = impl_witness_access constants.%Iterate.lookup_impl_witness.acc, element2 [symbolic = %impl.elem2.loc44_29.2 (constants.%impl.elem2.398)] // CHECK:STDOUT: %bound_method.loc44_29.1: = bound_method %r.ref, %impl.elem2.loc44_29.1 -// CHECK:STDOUT: %Iterate.facet.loc44_29.1: %Iterate.type = facet_value constants.%R.as_type.f62, (constants.%Iterate.lookup_impl_witness.acc) [symbolic = %Iterate.facet.loc44_29.3 (constants.%Iterate.facet.b95)] -// CHECK:STDOUT: %.loc44_29.1: %Iterate.type = converted constants.%R.as_type.f62, %Iterate.facet.loc44_29.1 [symbolic = %Iterate.facet.loc44_29.3 (constants.%Iterate.facet.b95)] +// CHECK:STDOUT: %Iterate.facet.loc44_29.1: %Iterate.type = facet_value constants.%R.as_type.f62, (constants.%Iterate.lookup_impl_witness.acc) [symbolic = %Iterate.facet.loc44_29.5 (constants.%Iterate.facet.b95)] +// CHECK:STDOUT: %.loc44_29.1: %Iterate.type = converted constants.%R.as_type.f62, %Iterate.facet.loc44_29.1 [symbolic = %Iterate.facet.loc44_29.5 (constants.%Iterate.facet.b95)] +// CHECK:STDOUT: %Iterate.facet.loc44_29.2: %Iterate.type = facet_value constants.%R.as_type.f62, (constants.%Iterate.lookup_impl_witness.acc) [symbolic = %Iterate.facet.loc44_29.5 (constants.%Iterate.facet.b95)] +// CHECK:STDOUT: %.loc44_29.2: %Iterate.type = converted constants.%R.as_type.f62, %Iterate.facet.loc44_29.2 [symbolic = %Iterate.facet.loc44_29.5 (constants.%Iterate.facet.b95)] // CHECK:STDOUT: %specific_impl_fn.loc44_29.1: = specific_impl_function %impl.elem2.loc44_29.1, @Iterate.WithSelf.NewCursor(constants.%Iterate.facet.b95) [symbolic = %specific_impl_fn.loc44_29.4 (constants.%specific_impl_fn.544)] // CHECK:STDOUT: %bound_method.loc44_29.2: = bound_method %r.ref, %specific_impl_fn.loc44_29.1 // CHECK:STDOUT: %var: ref @Test.%as_type (%as_type.bc6) = var invalid @@ -1386,44 +1409,47 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: // CHECK:STDOUT: !for.next: // CHECK:STDOUT: %addr.loc44: @Test.%ptr (%ptr.bdd) = addr_of %var -// CHECK:STDOUT: %impl.elem3.loc44_29.1: @Test.%.loc44_29.17 (%.52a) = impl_witness_access constants.%Iterate.lookup_impl_witness.acc, element3 [symbolic = %impl.elem3.loc44_29.2 (constants.%impl.elem3.510)] +// CHECK:STDOUT: %impl.elem3.loc44_29.1: @Test.%.loc44_29.21 (%.52a) = impl_witness_access constants.%Iterate.lookup_impl_witness.acc, element3 [symbolic = %impl.elem3.loc44_29.2 (constants.%impl.elem3.510)] // CHECK:STDOUT: %bound_method.loc44_29.3: = bound_method %r.ref, %impl.elem3.loc44_29.1 -// CHECK:STDOUT: %Iterate.facet.loc44_29.2: %Iterate.type = facet_value constants.%R.as_type.f62, (constants.%Iterate.lookup_impl_witness.acc) [symbolic = %Iterate.facet.loc44_29.3 (constants.%Iterate.facet.b95)] -// CHECK:STDOUT: %.loc44_29.2: %Iterate.type = converted constants.%R.as_type.f62, %Iterate.facet.loc44_29.2 [symbolic = %Iterate.facet.loc44_29.3 (constants.%Iterate.facet.b95)] -// CHECK:STDOUT: %.loc44_29.3: %Destroy.type = converted constants.%as_type.bc6, constants.%impl.elem1.411 [symbolic = %impl.elem1 (constants.%impl.elem1.411)] +// CHECK:STDOUT: %Iterate.facet.loc44_29.3: %Iterate.type = facet_value constants.%R.as_type.f62, (constants.%Iterate.lookup_impl_witness.acc) [symbolic = %Iterate.facet.loc44_29.5 (constants.%Iterate.facet.b95)] +// CHECK:STDOUT: %.loc44_29.3: %Iterate.type = converted constants.%R.as_type.f62, %Iterate.facet.loc44_29.3 [symbolic = %Iterate.facet.loc44_29.5 (constants.%Iterate.facet.b95)] +// CHECK:STDOUT: %Iterate.facet.loc44_29.4: %Iterate.type = facet_value constants.%R.as_type.f62, (constants.%Iterate.lookup_impl_witness.acc) [symbolic = %Iterate.facet.loc44_29.5 (constants.%Iterate.facet.b95)] +// CHECK:STDOUT: %.loc44_29.4: %Iterate.type = converted constants.%R.as_type.f62, %Iterate.facet.loc44_29.4 [symbolic = %Iterate.facet.loc44_29.5 (constants.%Iterate.facet.b95)] +// CHECK:STDOUT: %.loc44_29.5: %Destroy.type = converted constants.%as_type.bc6, constants.%impl.elem1.411 [symbolic = %impl.elem1 (constants.%impl.elem1.411)] +// CHECK:STDOUT: %.loc44_29.6: %Destroy.type = converted constants.%as_type.bc6, constants.%impl.elem1.411 [symbolic = %impl.elem1 (constants.%impl.elem1.411)] // CHECK:STDOUT: %specific_impl_fn.loc44_29.2: = specific_impl_function %impl.elem3.loc44_29.1, @Iterate.WithSelf.Next(constants.%Iterate.facet.b95) [symbolic = %specific_impl_fn.loc44_29.5 (constants.%specific_impl_fn.a00)] // CHECK:STDOUT: %bound_method.loc44_29.4: = bound_method %r.ref, %specific_impl_fn.loc44_29.2 -// CHECK:STDOUT: %.loc44_29.4: ref %Optional.95f = temporary_storage +// CHECK:STDOUT: %.loc44_29.7: ref %Optional.95f = temporary_storage // CHECK:STDOUT: %.loc44_28.2: @Test.%R.as_type.loc40_69.1 (%R.as_type.f62) = acquire_value %r.ref -// CHECK:STDOUT: %Iterate.WithSelf.Next.call: init %Optional.95f to %.loc44_29.4 = call %bound_method.loc44_29.4(%.loc44_28.2, %addr.loc44) -// CHECK:STDOUT: %.loc44_29.5: ref %Optional.95f = temporary %.loc44_29.4, %Iterate.WithSelf.Next.call -// CHECK:STDOUT: %.loc44_29.6: %Optional.HasValue.type.006 = specific_constant imports.%Core.import_ref.bb6, @Optional(constants.%OptionalStorage.facet.705) [concrete = constants.%Optional.HasValue.988] -// CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.006 = name_ref HasValue, %.loc44_29.6 [concrete = constants.%Optional.HasValue.988] -// CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc44_29.5, %HasValue.ref +// CHECK:STDOUT: %Iterate.WithSelf.Next.call: init %Optional.95f to %.loc44_29.7 = call %bound_method.loc44_29.4(%.loc44_28.2, %addr.loc44) +// CHECK:STDOUT: %.loc44_29.8: ref %Optional.95f = temporary %.loc44_29.7, %Iterate.WithSelf.Next.call +// CHECK:STDOUT: %.loc44_29.9: %Optional.HasValue.type.006 = specific_constant imports.%Core.import_ref.bb6, @Optional(constants.%OptionalStorage.facet.705) [concrete = constants.%Optional.HasValue.988] +// CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.006 = name_ref HasValue, %.loc44_29.9 [concrete = constants.%Optional.HasValue.988] +// CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc44_29.8, %HasValue.ref // CHECK:STDOUT: %Optional.HasValue.specific_fn: = specific_function %HasValue.ref, @Optional.HasValue(constants.%OptionalStorage.facet.705) [concrete = constants.%Optional.HasValue.specific_fn] -// CHECK:STDOUT: %bound_method.loc44_29.5: = bound_method %.loc44_29.5, %Optional.HasValue.specific_fn -// CHECK:STDOUT: %.loc44_29.7: %Optional.95f = acquire_value %.loc44_29.5 -// CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc44_29.5(%.loc44_29.7) -// CHECK:STDOUT: %.loc44_29.8: bool = value_of_initializer %Optional.HasValue.call -// CHECK:STDOUT: %.loc44_29.9: bool = converted %Optional.HasValue.call, %.loc44_29.8 -// CHECK:STDOUT: if %.loc44_29.9 br !for.body else br !for.done +// CHECK:STDOUT: %bound_method.loc44_29.5: = bound_method %.loc44_29.8, %Optional.HasValue.specific_fn +// CHECK:STDOUT: %.loc44_29.10: %Optional.95f = acquire_value %.loc44_29.8 +// CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc44_29.5(%.loc44_29.10) +// CHECK:STDOUT: %.loc44_29.11: bool = value_of_initializer %Optional.HasValue.call +// CHECK:STDOUT: %.loc44_29.12: bool = converted %Optional.HasValue.call, %.loc44_29.11 +// CHECK:STDOUT: if %.loc44_29.12 br !for.body else br !for.done // CHECK:STDOUT: // CHECK:STDOUT: !for.body: -// CHECK:STDOUT: %.loc44_29.10: %Optional.Get.type.30f = specific_constant imports.%Core.import_ref.daba, @Optional(constants.%OptionalStorage.facet.705) [concrete = constants.%Optional.Get.59c] -// CHECK:STDOUT: %Get.ref: %Optional.Get.type.30f = name_ref Get, %.loc44_29.10 [concrete = constants.%Optional.Get.59c] -// CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc44_29.5, %Get.ref +// CHECK:STDOUT: %.loc44_29.13: %Optional.Get.type.30f = specific_constant imports.%Core.import_ref.daba, @Optional(constants.%OptionalStorage.facet.705) [concrete = constants.%Optional.Get.59c] +// CHECK:STDOUT: %Get.ref: %Optional.Get.type.30f = name_ref Get, %.loc44_29.13 [concrete = constants.%Optional.Get.59c] +// CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc44_29.8, %Get.ref // CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Get.ref, @Optional.Get(constants.%OptionalStorage.facet.705) [concrete = constants.%Optional.Get.specific_fn] -// CHECK:STDOUT: %bound_method.loc44_29.6: = bound_method %.loc44_29.5, %Optional.Get.specific_fn -// CHECK:STDOUT: %.loc44_29.11: ref %ValueType = temporary_storage -// CHECK:STDOUT: %.loc44_29.12: %Optional.95f = acquire_value %.loc44_29.5 -// CHECK:STDOUT: %Optional.Get.call: init %ValueType to %.loc44_29.11 = call %bound_method.loc44_29.6(%.loc44_29.12) +// CHECK:STDOUT: %bound_method.loc44_29.6: = bound_method %.loc44_29.8, %Optional.Get.specific_fn +// CHECK:STDOUT: %.loc44_29.14: ref %ValueType = temporary_storage +// CHECK:STDOUT: %.loc44_29.15: %Optional.95f = acquire_value %.loc44_29.8 +// CHECK:STDOUT: %Optional.Get.call: init %ValueType to %.loc44_29.14 = call %bound_method.loc44_29.6(%.loc44_29.15) +// CHECK:STDOUT: %.loc44_29.16: ref %ValueType = temporary %.loc44_29.14, %Optional.Get.call +// CHECK:STDOUT: %.loc44_29.17: %ValueType = acquire_value %.loc44_29.16 // CHECK:STDOUT: %.loc44_14: type = splice_block %ValueType.ref.loc44 [concrete = constants.%ValueType] { // CHECK:STDOUT: %Cpp.ref.loc44: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %ValueType.ref.loc44: type = name_ref ValueType, imports.%ValueType.decl [concrete = constants.%ValueType] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc44_29.13: ref %ValueType = temporary %.loc44_29.11, %Optional.Get.call -// CHECK:STDOUT: %.loc44_29.14: %ValueType = acquire_value %.loc44_29.13 -// CHECK:STDOUT: %i: %ValueType = value_binding i, %.loc44_29.14 +// CHECK:STDOUT: %i: %ValueType = value_binding i, %.loc44_29.17 // CHECK:STDOUT: %sum.ref: ref %ValueType = name_ref sum, %sum // CHECK:STDOUT: %i.ref: %ValueType = name_ref i, %i // CHECK:STDOUT: %.loc45_12: ref %ValueType = value_as_ref %i.ref @@ -1434,15 +1460,16 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.done: -// CHECK:STDOUT: %ValueType.Op.bound.loc44: = bound_method %.loc44_29.13, constants.%ValueType.Op.4dca31.1 +// CHECK:STDOUT: %ValueType.Op.bound.loc44: = bound_method %.loc44_29.16, constants.%ValueType.Op.4dca31.1 // CHECK:STDOUT: %Op.ref.loc44: %ValueType.cpp_destructor.type = name_ref Op, imports.%ValueType.cpp_destructor.decl [concrete = constants.%ValueType.cpp_destructor] -// CHECK:STDOUT: %ValueType.cpp_destructor.bound.loc44: = bound_method %.loc44_29.13, %Op.ref.loc44 -// CHECK:STDOUT: %ValueType.cpp_destructor.call.loc44: init %empty_tuple.type = call %ValueType.cpp_destructor.bound.loc44(%.loc44_29.13) -// CHECK:STDOUT: %Destroy.Op.bound: = bound_method %.loc44_29.5, constants.%Destroy.Op.1a2547.7 -// CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%.loc44_29.5) -// CHECK:STDOUT: %impl.elem0.loc44_29.1: @Test.%.loc44_29.18 (%.4b9) = impl_witness_access constants.%Destroy.lookup_impl_witness.ff8, element0 [symbolic = %impl.elem0.loc44_29.2 (constants.%impl.elem0.fbe)] +// CHECK:STDOUT: %ValueType.cpp_destructor.bound.loc44: = bound_method %.loc44_29.16, %Op.ref.loc44 +// CHECK:STDOUT: %ValueType.cpp_destructor.call.loc44: init %empty_tuple.type = call %ValueType.cpp_destructor.bound.loc44(%.loc44_29.16) +// CHECK:STDOUT: %Destroy.Op.bound: = bound_method %.loc44_29.8, constants.%Destroy.Op.1a2547.7 +// CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%.loc44_29.8) +// CHECK:STDOUT: %impl.elem0.loc44_29.1: @Test.%.loc44_29.22 (%.4b9) = impl_witness_access constants.%Destroy.lookup_impl_witness.ff8, element0 [symbolic = %impl.elem0.loc44_29.2 (constants.%impl.elem0.fbe)] // CHECK:STDOUT: %bound_method.loc44_29.7: = bound_method %var, %impl.elem0.loc44_29.1 -// CHECK:STDOUT: %.loc44_29.15: %Destroy.type = converted constants.%as_type.bc6, constants.%impl.elem1.411 [symbolic = %impl.elem1 (constants.%impl.elem1.411)] +// CHECK:STDOUT: %.loc44_29.18: %Destroy.type = converted constants.%as_type.bc6, constants.%impl.elem1.411 [symbolic = %impl.elem1 (constants.%impl.elem1.411)] +// CHECK:STDOUT: %.loc44_29.19: %Destroy.type = converted constants.%as_type.bc6, constants.%impl.elem1.411 [symbolic = %impl.elem1 (constants.%impl.elem1.411)] // CHECK:STDOUT: %specific_impl_fn.loc44_29.3: = specific_impl_function %impl.elem0.loc44_29.1, @Destroy.WithSelf.Op(constants.%impl.elem1.411) [symbolic = %specific_impl_fn.loc44_29.6 (constants.%specific_impl_fn.517)] // CHECK:STDOUT: %bound_method.loc44_29.8: = bound_method %var, %specific_impl_fn.loc44_29.3 // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc44_29.8(%var) @@ -1478,22 +1505,28 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Test(constants.%R.de1) { +// CHECK:STDOUT: %R.patt.loc40_10.2 => constants.%R.patt.f38 // CHECK:STDOUT: %R.loc40_10.1 => constants.%R.de1 // CHECK:STDOUT: %R.as_type.loc40_69.1 => constants.%R.as_type.f62 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.669 +// CHECK:STDOUT: %r.patt.loc40_67.2 => constants.%r.patt.c0f +// CHECK:STDOUT: %r.param_patt.loc40_62.2 => constants.%r.param_patt.bb2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Test(constants.%facet_value.150) { +// CHECK:STDOUT: %R.patt.loc40_10.2 => constants.%R.patt.f38 // CHECK:STDOUT: %R.loc40_10.1 => constants.%facet_value.150 // CHECK:STDOUT: %R.as_type.loc40_69.1 => constants.%MutableRange // CHECK:STDOUT: %pattern_type => constants.%pattern_type.e635 +// CHECK:STDOUT: %r.patt.loc40_67.2 => constants.%r.patt.f69 +// CHECK:STDOUT: %r.param_patt.loc40_62.2 => constants.%r.param_patt.91e // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc40 => constants.%complete_type.357 // CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.096 -// CHECK:STDOUT: %Iterate.facet.loc44_29.3 => constants.%Iterate.facet.723 +// CHECK:STDOUT: %Iterate.facet.loc44_29.5 => constants.%Iterate.facet.723 // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.47d -// CHECK:STDOUT: %.loc44_29.16 => constants.%.47d +// CHECK:STDOUT: %.loc44_29.20 => constants.%.47d // CHECK:STDOUT: %impl.elem2.loc44_29.2 => constants.%R.as_type.as.Iterate.impl.NewCursor.498 // CHECK:STDOUT: %specific_impl_fn.loc44_29.4 => constants.%R.as_type.as.Iterate.impl.NewCursor.specific_fn.532 // CHECK:STDOUT: %impl.elem1 => constants.%Destroy.facet.305 @@ -1501,27 +1534,30 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %require_complete.1 => constants.%complete_type.94f // CHECK:STDOUT: %ptr => constants.%ptr.d6b // CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.6f1 -// CHECK:STDOUT: %.loc44_29.17 => constants.%.fd2 +// CHECK:STDOUT: %.loc44_29.21 => constants.%.fd2 // CHECK:STDOUT: %impl.elem3.loc44_29.2 => constants.%R.as_type.as.Iterate.impl.Next.055 // CHECK:STDOUT: %specific_impl_fn.loc44_29.5 => constants.%R.as_type.as.Iterate.impl.Next.specific_fn.5cb // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.c89 -// CHECK:STDOUT: %.loc44_29.18 => constants.%.e8a +// CHECK:STDOUT: %.loc44_29.22 => constants.%.e8a // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.df9cc1.8 // CHECK:STDOUT: %impl.elem0.loc44_29.2 => constants.%Destroy.Op.1a2547.8 // CHECK:STDOUT: %specific_impl_fn.loc44_29.6 => constants.%Destroy.Op.1a2547.8 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Test(constants.%facet_value.e78) { +// CHECK:STDOUT: %R.patt.loc40_10.2 => constants.%R.patt.f38 // CHECK:STDOUT: %R.loc40_10.1 => constants.%facet_value.e78 // CHECK:STDOUT: %R.as_type.loc40_69.1 => constants.%ConstRange // CHECK:STDOUT: %pattern_type => constants.%pattern_type.0ba +// CHECK:STDOUT: %r.patt.loc40_67.2 => constants.%r.patt.36a +// CHECK:STDOUT: %r.param_patt.loc40_62.2 => constants.%r.param_patt.501 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc40 => constants.%complete_type.357 // CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.40c -// CHECK:STDOUT: %Iterate.facet.loc44_29.3 => constants.%Iterate.facet.c46 +// CHECK:STDOUT: %Iterate.facet.loc44_29.5 => constants.%Iterate.facet.c46 // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.cd5 -// CHECK:STDOUT: %.loc44_29.16 => constants.%.763 +// CHECK:STDOUT: %.loc44_29.20 => constants.%.763 // CHECK:STDOUT: %impl.elem2.loc44_29.2 => constants.%R.as_type.as.Iterate.impl.NewCursor.bd2 // CHECK:STDOUT: %specific_impl_fn.loc44_29.4 => constants.%R.as_type.as.Iterate.impl.NewCursor.specific_fn.7c7 // CHECK:STDOUT: %impl.elem1 => constants.%Destroy.facet.e08 @@ -1529,11 +1565,11 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %require_complete.1 => constants.%complete_type.dea // CHECK:STDOUT: %ptr => constants.%ptr.2f7 // CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.285 -// CHECK:STDOUT: %.loc44_29.17 => constants.%.bca +// CHECK:STDOUT: %.loc44_29.21 => constants.%.bca // CHECK:STDOUT: %impl.elem3.loc44_29.2 => constants.%R.as_type.as.Iterate.impl.Next.c50 // CHECK:STDOUT: %specific_impl_fn.loc44_29.5 => constants.%R.as_type.as.Iterate.impl.Next.specific_fn.a9a // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.e30 -// CHECK:STDOUT: %.loc44_29.18 => constants.%.987 +// CHECK:STDOUT: %.loc44_29.22 => constants.%.987 // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.df9cc1.9 // CHECK:STDOUT: %impl.elem0.loc44_29.2 => constants.%Destroy.Op.1a2547.9 // CHECK:STDOUT: %specific_impl_fn.loc44_29.6 => constants.%Destroy.Op.1a2547.9 @@ -1577,9 +1613,14 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %Copy.impl_witness.873: = impl_witness imports.%Copy.impl_witness_table.4e8, @Float.as.Copy.impl(%int_64) [concrete] // CHECK:STDOUT: %facet_value.209: %facet_type = facet_value %f64.dc1, (%custom_witness.df9cc1.2, %Copy.impl_witness.873) [concrete] // CHECK:STDOUT: %Iterate_where.type.83b: type = facet_type <@Iterate where %impl.elem0.903 = %facet_value.209> [concrete] +// CHECK:STDOUT: %pattern_type.b62: type = pattern_type %Iterate_where.type.83b [concrete] +// CHECK:STDOUT: %R.patt.053: %pattern_type.b62 = symbolic_binding_pattern R, 0 [symbolic] // CHECK:STDOUT: %R.7b2: %Iterate_where.type.83b = symbolic_binding R, 0 [symbolic] // CHECK:STDOUT: %R.as_type.657: type = facet_access_type %R.7b2 [symbolic] // CHECK:STDOUT: %pattern_type.afe: type = pattern_type %R.as_type.657 [symbolic] +// CHECK:STDOUT: %r.param_patt.184: %pattern_type.afe = value_param_pattern [symbolic] +// CHECK:STDOUT: %r.patt.727: %pattern_type.afe = at_binding_pattern r, %r.param_patt.184 [symbolic] +// CHECK:STDOUT: %i.patt: %pattern_type.fb7 = value_binding_pattern i [concrete] // CHECK:STDOUT: %CppRangeForIterate.type: type = facet_type <@CppRangeForIterate> [concrete] // CHECK:STDOUT: %.Self.6bd: %CppRangeForIterate.type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %CppRangeForIterate.lookup_impl_witness.143: = lookup_impl_witness %.Self.6bd, @CppRangeForIterate [symbolic_self] @@ -1688,6 +1729,8 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.0b7: %R.as_type.as.Iterate.impl.Next.type.c69 = struct_value () [concrete] // CHECK:STDOUT: %Iterate.facet.9f4: %Iterate.type = facet_value %ConstRange, (%Iterate.impl_witness.1f0) [concrete] // CHECK:STDOUT: %facet_value.9d0: %Iterate_where.type.83b = facet_value %ConstRange, (%Iterate.impl_witness.1f0) [concrete] +// CHECK:STDOUT: %r.param_patt.a73: %pattern_type.025 = value_param_pattern [concrete] +// CHECK:STDOUT: %r.patt.0e2: %pattern_type.025 = at_binding_pattern r, %r.param_patt.a73 [concrete] // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.d89: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.9f4) [concrete] // CHECK:STDOUT: %.e0f: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.d89, %Iterate.facet.9f4 [concrete] // CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.specific_fn: = specific_function %R.as_type.as.Iterate.impl.NewCursor.d2e, @R.as_type.as.Iterate.impl.NewCursor(%facet_value.c05) [concrete] @@ -1706,10 +1749,10 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %Core.import_ref.0c6: type = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%DefaultOptionalStorage (constants.%DefaultOptionalStorage.d50)] // CHECK:STDOUT: %Core.import_ref.f4f: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.None.type (%T.as_type.as.OptionalStorage.impl.None.type.300) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.None (constants.%T.as_type.as.OptionalStorage.impl.None.f54)] // CHECK:STDOUT: %Core.import_ref.18f: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Some.type (%T.as_type.as.OptionalStorage.impl.Some.type.800) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Some (constants.%T.as_type.as.OptionalStorage.impl.Some.e83)] -// CHECK:STDOUT: %Core.import_ref.c68: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Has.type (%T.as_type.as.OptionalStorage.impl.Has.type.4bc) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Has (constants.%T.as_type.as.OptionalStorage.impl.Has.dc2)] +// CHECK:STDOUT: %Core.import_ref.c688: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Has.type (%T.as_type.as.OptionalStorage.impl.Has.type.4bc) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Has (constants.%T.as_type.as.OptionalStorage.impl.Has.dc2)] // CHECK:STDOUT: %Core.import_ref.a83: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Get.type (%T.as_type.as.OptionalStorage.impl.Get.type.029) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Get (constants.%T.as_type.as.OptionalStorage.impl.Get.cb5)] -// CHECK:STDOUT: %Core.import_ref.aaa = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], unloaded -// CHECK:STDOUT: %OptionalStorage.impl_witness_table.655 = impl_witness_table (%Core.import_ref.0c6, %Core.import_ref.f4f, %Core.import_ref.18f, %Core.import_ref.c68, %Core.import_ref.a83, %Core.import_ref.aaa), @T.as_type.as.OptionalStorage.impl [concrete] +// CHECK:STDOUT: %Core.import_ref.aaa3 = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], unloaded +// CHECK:STDOUT: %OptionalStorage.impl_witness_table.655 = impl_witness_table (%Core.import_ref.0c6, %Core.import_ref.f4f, %Core.import_ref.18f, %Core.import_ref.c688, %Core.import_ref.a83, %Core.import_ref.aaa3), @T.as_type.as.OptionalStorage.impl [concrete] // CHECK:STDOUT: %Core.import_ref.e69: @Float.as.Copy.impl.%Float.as.Copy.impl.Op.type (%Float.as.Copy.impl.Op.type.ff3) = import_ref Core//prelude/types/float, loc{{\d+_\d+}}, loaded [symbolic = @Float.as.Copy.impl.%Float.as.Copy.impl.Op (constants.%Float.as.Copy.impl.Op.d93)] // CHECK:STDOUT: %Copy.impl_witness_table.4e8 = impl_witness_table (%Core.import_ref.e69), @Float.as.Copy.impl [concrete] // CHECK:STDOUT: %Core.import_ref.301: %facet_type = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%facet_value (constants.%facet_value.194)] @@ -1727,34 +1770,36 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: %Iterate.lookup_impl_witness: = lookup_impl_witness %R.loc20_10.1, @Iterate [symbolic = %Iterate.lookup_impl_witness (constants.%Iterate.lookup_impl_witness.171)] -// CHECK:STDOUT: %Iterate.facet.loc24_19.3: %Iterate.type = facet_value %R.as_type.loc20_55.1, (%Iterate.lookup_impl_witness) [symbolic = %Iterate.facet.loc24_19.3 (constants.%Iterate.facet.523)] -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.loc24_19.3) [symbolic = %Iterate.WithSelf.NewCursor.type (constants.%Iterate.WithSelf.NewCursor.type.51e)] -// CHECK:STDOUT: %.loc24_19.15: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type, %Iterate.facet.loc24_19.3 [symbolic = %.loc24_19.15 (constants.%.250)] -// CHECK:STDOUT: %impl.elem2.loc24_19.2: @Test.%.loc24_19.15 (%.250) = impl_witness_access %Iterate.lookup_impl_witness, element2 [symbolic = %impl.elem2.loc24_19.2 (constants.%impl.elem2.9ef)] -// CHECK:STDOUT: %specific_impl_fn.loc24_19.4: = specific_impl_function %impl.elem2.loc24_19.2, @Iterate.WithSelf.NewCursor(%Iterate.facet.loc24_19.3) [symbolic = %specific_impl_fn.loc24_19.4 (constants.%specific_impl_fn.5ff)] +// CHECK:STDOUT: %Iterate.facet.loc24_19.5: %Iterate.type = facet_value %R.as_type.loc20_55.1, (%Iterate.lookup_impl_witness) [symbolic = %Iterate.facet.loc24_19.5 (constants.%Iterate.facet.523)] +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.loc24_19.5) [symbolic = %Iterate.WithSelf.NewCursor.type (constants.%Iterate.WithSelf.NewCursor.type.51e)] +// CHECK:STDOUT: %.loc24_19.19: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type, %Iterate.facet.loc24_19.5 [symbolic = %.loc24_19.19 (constants.%.250)] +// CHECK:STDOUT: %impl.elem2.loc24_19.2: @Test.%.loc24_19.19 (%.250) = impl_witness_access %Iterate.lookup_impl_witness, element2 [symbolic = %impl.elem2.loc24_19.2 (constants.%impl.elem2.9ef)] +// CHECK:STDOUT: %specific_impl_fn.loc24_19.4: = specific_impl_function %impl.elem2.loc24_19.2, @Iterate.WithSelf.NewCursor(%Iterate.facet.loc24_19.5) [symbolic = %specific_impl_fn.loc24_19.4 (constants.%specific_impl_fn.5ff)] // CHECK:STDOUT: // CHECK:STDOUT: %ptr: type = ptr_type %as_type [symbolic = %ptr (constants.%ptr.b94)] -// CHECK:STDOUT: %Iterate.WithSelf.Next.type: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.loc24_19.3) [symbolic = %Iterate.WithSelf.Next.type (constants.%Iterate.WithSelf.Next.type.e1d)] -// CHECK:STDOUT: %.loc24_19.16: type = fn_type_with_self_type %Iterate.WithSelf.Next.type, %Iterate.facet.loc24_19.3 [symbolic = %.loc24_19.16 (constants.%.f81)] -// CHECK:STDOUT: %impl.elem3.loc24_19.2: @Test.%.loc24_19.16 (%.f81) = impl_witness_access %Iterate.lookup_impl_witness, element3 [symbolic = %impl.elem3.loc24_19.2 (constants.%impl.elem3.04c)] -// CHECK:STDOUT: %specific_impl_fn.loc24_19.5: = specific_impl_function %impl.elem3.loc24_19.2, @Iterate.WithSelf.Next(%Iterate.facet.loc24_19.3) [symbolic = %specific_impl_fn.loc24_19.5 (constants.%specific_impl_fn.c5b)] +// CHECK:STDOUT: %Iterate.WithSelf.Next.type: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.loc24_19.5) [symbolic = %Iterate.WithSelf.Next.type (constants.%Iterate.WithSelf.Next.type.e1d)] +// CHECK:STDOUT: %.loc24_19.20: type = fn_type_with_self_type %Iterate.WithSelf.Next.type, %Iterate.facet.loc24_19.5 [symbolic = %.loc24_19.20 (constants.%.f81)] +// CHECK:STDOUT: %impl.elem3.loc24_19.2: @Test.%.loc24_19.20 (%.f81) = impl_witness_access %Iterate.lookup_impl_witness, element3 [symbolic = %impl.elem3.loc24_19.2 (constants.%impl.elem3.04c)] +// CHECK:STDOUT: %specific_impl_fn.loc24_19.5: = specific_impl_function %impl.elem3.loc24_19.2, @Iterate.WithSelf.Next(%Iterate.facet.loc24_19.5) [symbolic = %specific_impl_fn.loc24_19.5 (constants.%specific_impl_fn.c5b)] // CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%impl.elem1) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.b9c)] -// CHECK:STDOUT: %.loc24_19.17: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %impl.elem1 [symbolic = %.loc24_19.17 (constants.%.75c)] +// CHECK:STDOUT: %.loc24_19.21: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %impl.elem1 [symbolic = %.loc24_19.21 (constants.%.75c)] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %impl.elem1, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness.f8f)] -// CHECK:STDOUT: %impl.elem0.loc24_19.2: @Test.%.loc24_19.17 (%.75c) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc24_19.2 (constants.%impl.elem0.688)] +// CHECK:STDOUT: %impl.elem0.loc24_19.2: @Test.%.loc24_19.21 (%.75c) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc24_19.2 (constants.%impl.elem0.688)] // CHECK:STDOUT: %specific_impl_fn.loc24_19.6: = specific_impl_function %impl.elem0.loc24_19.2, @Destroy.WithSelf.Op(%impl.elem1) [symbolic = %specific_impl_fn.loc24_19.6 (constants.%specific_impl_fn.1e0)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%r.param: @Test.%R.as_type.loc20_55.1 (%R.as_type.657)) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %i.patt: %pattern_type.fb7 = value_binding_pattern i [concrete] +// CHECK:STDOUT: %i.patt: %pattern_type.fb7 = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %r.ref: @Test.%R.as_type.loc20_55.1 (%R.as_type.657) = name_ref r, %r -// CHECK:STDOUT: %impl.elem2.loc24_19.1: @Test.%.loc24_19.15 (%.250) = impl_witness_access constants.%Iterate.lookup_impl_witness.171, element2 [symbolic = %impl.elem2.loc24_19.2 (constants.%impl.elem2.9ef)] +// CHECK:STDOUT: %impl.elem2.loc24_19.1: @Test.%.loc24_19.19 (%.250) = impl_witness_access constants.%Iterate.lookup_impl_witness.171, element2 [symbolic = %impl.elem2.loc24_19.2 (constants.%impl.elem2.9ef)] // CHECK:STDOUT: %bound_method.loc24_19.1: = bound_method %r.ref, %impl.elem2.loc24_19.1 -// CHECK:STDOUT: %Iterate.facet.loc24_19.1: %Iterate.type = facet_value constants.%R.as_type.657, (constants.%Iterate.lookup_impl_witness.171) [symbolic = %Iterate.facet.loc24_19.3 (constants.%Iterate.facet.523)] -// CHECK:STDOUT: %.loc24_19.1: %Iterate.type = converted constants.%R.as_type.657, %Iterate.facet.loc24_19.1 [symbolic = %Iterate.facet.loc24_19.3 (constants.%Iterate.facet.523)] +// CHECK:STDOUT: %Iterate.facet.loc24_19.1: %Iterate.type = facet_value constants.%R.as_type.657, (constants.%Iterate.lookup_impl_witness.171) [symbolic = %Iterate.facet.loc24_19.5 (constants.%Iterate.facet.523)] +// CHECK:STDOUT: %.loc24_19.1: %Iterate.type = converted constants.%R.as_type.657, %Iterate.facet.loc24_19.1 [symbolic = %Iterate.facet.loc24_19.5 (constants.%Iterate.facet.523)] +// CHECK:STDOUT: %Iterate.facet.loc24_19.2: %Iterate.type = facet_value constants.%R.as_type.657, (constants.%Iterate.lookup_impl_witness.171) [symbolic = %Iterate.facet.loc24_19.5 (constants.%Iterate.facet.523)] +// CHECK:STDOUT: %.loc24_19.2: %Iterate.type = converted constants.%R.as_type.657, %Iterate.facet.loc24_19.2 [symbolic = %Iterate.facet.loc24_19.5 (constants.%Iterate.facet.523)] // CHECK:STDOUT: %specific_impl_fn.loc24_19.1: = specific_impl_function %impl.elem2.loc24_19.1, @Iterate.WithSelf.NewCursor(constants.%Iterate.facet.523) [symbolic = %specific_impl_fn.loc24_19.4 (constants.%specific_impl_fn.5ff)] // CHECK:STDOUT: %bound_method.loc24_19.2: = bound_method %r.ref, %specific_impl_fn.loc24_19.1 // CHECK:STDOUT: %var: ref @Test.%as_type (%as_type.6f2) = var invalid @@ -1764,39 +1809,42 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: // CHECK:STDOUT: !for.next: // CHECK:STDOUT: %addr: @Test.%ptr (%ptr.b94) = addr_of %var -// CHECK:STDOUT: %impl.elem3.loc24_19.1: @Test.%.loc24_19.16 (%.f81) = impl_witness_access constants.%Iterate.lookup_impl_witness.171, element3 [symbolic = %impl.elem3.loc24_19.2 (constants.%impl.elem3.04c)] +// CHECK:STDOUT: %impl.elem3.loc24_19.1: @Test.%.loc24_19.20 (%.f81) = impl_witness_access constants.%Iterate.lookup_impl_witness.171, element3 [symbolic = %impl.elem3.loc24_19.2 (constants.%impl.elem3.04c)] // CHECK:STDOUT: %bound_method.loc24_19.3: = bound_method %r.ref, %impl.elem3.loc24_19.1 -// CHECK:STDOUT: %Iterate.facet.loc24_19.2: %Iterate.type = facet_value constants.%R.as_type.657, (constants.%Iterate.lookup_impl_witness.171) [symbolic = %Iterate.facet.loc24_19.3 (constants.%Iterate.facet.523)] -// CHECK:STDOUT: %.loc24_19.2: %Iterate.type = converted constants.%R.as_type.657, %Iterate.facet.loc24_19.2 [symbolic = %Iterate.facet.loc24_19.3 (constants.%Iterate.facet.523)] -// CHECK:STDOUT: %.loc24_19.3: %Destroy.type = converted constants.%as_type.6f2, constants.%impl.elem1.f12 [symbolic = %impl.elem1 (constants.%impl.elem1.f12)] +// CHECK:STDOUT: %Iterate.facet.loc24_19.3: %Iterate.type = facet_value constants.%R.as_type.657, (constants.%Iterate.lookup_impl_witness.171) [symbolic = %Iterate.facet.loc24_19.5 (constants.%Iterate.facet.523)] +// CHECK:STDOUT: %.loc24_19.3: %Iterate.type = converted constants.%R.as_type.657, %Iterate.facet.loc24_19.3 [symbolic = %Iterate.facet.loc24_19.5 (constants.%Iterate.facet.523)] +// CHECK:STDOUT: %Iterate.facet.loc24_19.4: %Iterate.type = facet_value constants.%R.as_type.657, (constants.%Iterate.lookup_impl_witness.171) [symbolic = %Iterate.facet.loc24_19.5 (constants.%Iterate.facet.523)] +// CHECK:STDOUT: %.loc24_19.4: %Iterate.type = converted constants.%R.as_type.657, %Iterate.facet.loc24_19.4 [symbolic = %Iterate.facet.loc24_19.5 (constants.%Iterate.facet.523)] +// CHECK:STDOUT: %.loc24_19.5: %Destroy.type = converted constants.%as_type.6f2, constants.%impl.elem1.f12 [symbolic = %impl.elem1 (constants.%impl.elem1.f12)] +// CHECK:STDOUT: %.loc24_19.6: %Destroy.type = converted constants.%as_type.6f2, constants.%impl.elem1.f12 [symbolic = %impl.elem1 (constants.%impl.elem1.f12)] // CHECK:STDOUT: %specific_impl_fn.loc24_19.2: = specific_impl_function %impl.elem3.loc24_19.1, @Iterate.WithSelf.Next(constants.%Iterate.facet.523) [symbolic = %specific_impl_fn.loc24_19.5 (constants.%specific_impl_fn.c5b)] // CHECK:STDOUT: %bound_method.loc24_19.4: = bound_method %r.ref, %specific_impl_fn.loc24_19.2 -// CHECK:STDOUT: %.loc24_19.4: ref %Optional.f48 = temporary_storage -// CHECK:STDOUT: %Iterate.WithSelf.Next.call: init %Optional.f48 to %.loc24_19.4 = call %bound_method.loc24_19.4(%r.ref, %addr) -// CHECK:STDOUT: %.loc24_19.5: ref %Optional.f48 = temporary %.loc24_19.4, %Iterate.WithSelf.Next.call -// CHECK:STDOUT: %.loc24_19.6: %Optional.HasValue.type.d4e = specific_constant imports.%Core.import_ref.bb6, @Optional(constants.%OptionalStorage.facet.cc1) [concrete = constants.%Optional.HasValue.e79] -// CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.d4e = name_ref HasValue, %.loc24_19.6 [concrete = constants.%Optional.HasValue.e79] -// CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc24_19.5, %HasValue.ref +// CHECK:STDOUT: %.loc24_19.7: ref %Optional.f48 = temporary_storage +// CHECK:STDOUT: %Iterate.WithSelf.Next.call: init %Optional.f48 to %.loc24_19.7 = call %bound_method.loc24_19.4(%r.ref, %addr) +// CHECK:STDOUT: %.loc24_19.8: ref %Optional.f48 = temporary %.loc24_19.7, %Iterate.WithSelf.Next.call +// CHECK:STDOUT: %.loc24_19.9: %Optional.HasValue.type.d4e = specific_constant imports.%Core.import_ref.bb6, @Optional(constants.%OptionalStorage.facet.cc1) [concrete = constants.%Optional.HasValue.e79] +// CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.d4e = name_ref HasValue, %.loc24_19.9 [concrete = constants.%Optional.HasValue.e79] +// CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc24_19.8, %HasValue.ref // CHECK:STDOUT: %Optional.HasValue.specific_fn: = specific_function %HasValue.ref, @Optional.HasValue(constants.%OptionalStorage.facet.cc1) [concrete = constants.%Optional.HasValue.specific_fn] -// CHECK:STDOUT: %bound_method.loc24_19.5: = bound_method %.loc24_19.5, %Optional.HasValue.specific_fn -// CHECK:STDOUT: %.loc24_19.7: %Optional.f48 = acquire_value %.loc24_19.5 -// CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc24_19.5(%.loc24_19.7) -// CHECK:STDOUT: %.loc24_19.8: bool = value_of_initializer %Optional.HasValue.call -// CHECK:STDOUT: %.loc24_19.9: bool = converted %Optional.HasValue.call, %.loc24_19.8 -// CHECK:STDOUT: if %.loc24_19.9 br !for.body else br !for.done +// CHECK:STDOUT: %bound_method.loc24_19.5: = bound_method %.loc24_19.8, %Optional.HasValue.specific_fn +// CHECK:STDOUT: %.loc24_19.10: %Optional.f48 = acquire_value %.loc24_19.8 +// CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc24_19.5(%.loc24_19.10) +// CHECK:STDOUT: %.loc24_19.11: bool = value_of_initializer %Optional.HasValue.call +// CHECK:STDOUT: %.loc24_19.12: bool = converted %Optional.HasValue.call, %.loc24_19.11 +// CHECK:STDOUT: if %.loc24_19.12 br !for.body else br !for.done // CHECK:STDOUT: // CHECK:STDOUT: !for.body: -// CHECK:STDOUT: %.loc24_19.10: %Optional.Get.type.822 = specific_constant imports.%Core.import_ref.daba, @Optional(constants.%OptionalStorage.facet.cc1) [concrete = constants.%Optional.Get.f05] -// CHECK:STDOUT: %Get.ref: %Optional.Get.type.822 = name_ref Get, %.loc24_19.10 [concrete = constants.%Optional.Get.f05] -// CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc24_19.5, %Get.ref +// CHECK:STDOUT: %.loc24_19.13: %Optional.Get.type.822 = specific_constant imports.%Core.import_ref.daba, @Optional(constants.%OptionalStorage.facet.cc1) [concrete = constants.%Optional.Get.f05] +// CHECK:STDOUT: %Get.ref: %Optional.Get.type.822 = name_ref Get, %.loc24_19.13 [concrete = constants.%Optional.Get.f05] +// CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc24_19.8, %Get.ref // CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Get.ref, @Optional.Get(constants.%OptionalStorage.facet.cc1) [concrete = constants.%Optional.Get.specific_fn] -// CHECK:STDOUT: %bound_method.loc24_19.6: = bound_method %.loc24_19.5, %Optional.Get.specific_fn -// CHECK:STDOUT: %.loc24_19.11: %Optional.f48 = acquire_value %.loc24_19.5 -// CHECK:STDOUT: %Optional.Get.call: init %f64.dc1 = call %bound_method.loc24_19.6(%.loc24_19.11) +// CHECK:STDOUT: %bound_method.loc24_19.6: = bound_method %.loc24_19.8, %Optional.Get.specific_fn +// CHECK:STDOUT: %.loc24_19.14: %Optional.f48 = acquire_value %.loc24_19.8 +// CHECK:STDOUT: %Optional.Get.call: init %f64.dc1 = call %bound_method.loc24_19.6(%.loc24_19.14) +// CHECK:STDOUT: %.loc24_19.15: %f64.dc1 = value_of_initializer %Optional.Get.call +// CHECK:STDOUT: %.loc24_19.16: %f64.dc1 = converted %Optional.Get.call, %.loc24_19.15 // CHECK:STDOUT: %f64.loc24: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] -// CHECK:STDOUT: %.loc24_19.12: %f64.dc1 = value_of_initializer %Optional.Get.call -// CHECK:STDOUT: %.loc24_19.13: %f64.dc1 = converted %Optional.Get.call, %.loc24_19.12 -// CHECK:STDOUT: %i: %f64.dc1 = value_binding i, %.loc24_19.13 +// CHECK:STDOUT: %i: %f64.dc1 = value_binding i, %.loc24_19.16 // CHECK:STDOUT: %sum.ref: ref %f64.dc1 = name_ref sum, %sum // CHECK:STDOUT: %i.ref: %f64.dc1 = name_ref i, %i // CHECK:STDOUT: %impl.elem0.loc25: %.746 = impl_witness_access constants.%AddAssignWith.impl_witness.e85, element0 [concrete = constants.%Float.as.AddAssignWith.impl.Op.ac1] @@ -1807,11 +1855,12 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.done: -// CHECK:STDOUT: %Destroy.Op.bound.loc24: = bound_method %.loc24_19.5, constants.%Destroy.Op.1a2547.9 -// CHECK:STDOUT: %Destroy.Op.call.loc24: init %empty_tuple.type = call %Destroy.Op.bound.loc24(%.loc24_19.5) -// CHECK:STDOUT: %impl.elem0.loc24_19.1: @Test.%.loc24_19.17 (%.75c) = impl_witness_access constants.%Destroy.lookup_impl_witness.f8f, element0 [symbolic = %impl.elem0.loc24_19.2 (constants.%impl.elem0.688)] +// CHECK:STDOUT: %Destroy.Op.bound.loc24: = bound_method %.loc24_19.8, constants.%Destroy.Op.1a2547.9 +// CHECK:STDOUT: %Destroy.Op.call.loc24: init %empty_tuple.type = call %Destroy.Op.bound.loc24(%.loc24_19.8) +// CHECK:STDOUT: %impl.elem0.loc24_19.1: @Test.%.loc24_19.21 (%.75c) = impl_witness_access constants.%Destroy.lookup_impl_witness.f8f, element0 [symbolic = %impl.elem0.loc24_19.2 (constants.%impl.elem0.688)] // CHECK:STDOUT: %bound_method.loc24_19.7: = bound_method %var, %impl.elem0.loc24_19.1 -// CHECK:STDOUT: %.loc24_19.14: %Destroy.type = converted constants.%as_type.6f2, constants.%impl.elem1.f12 [symbolic = %impl.elem1 (constants.%impl.elem1.f12)] +// CHECK:STDOUT: %.loc24_19.17: %Destroy.type = converted constants.%as_type.6f2, constants.%impl.elem1.f12 [symbolic = %impl.elem1 (constants.%impl.elem1.f12)] +// CHECK:STDOUT: %.loc24_19.18: %Destroy.type = converted constants.%as_type.6f2, constants.%impl.elem1.f12 [symbolic = %impl.elem1 (constants.%impl.elem1.f12)] // CHECK:STDOUT: %specific_impl_fn.loc24_19.3: = specific_impl_function %impl.elem0.loc24_19.1, @Destroy.WithSelf.Op(constants.%impl.elem1.f12) [symbolic = %specific_impl_fn.loc24_19.6 (constants.%specific_impl_fn.1e0)] // CHECK:STDOUT: %bound_method.loc24_19.8: = bound_method %var, %specific_impl_fn.loc24_19.3 // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc24_19.8(%var) @@ -1847,22 +1896,28 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Test(constants.%R.7b2) { +// CHECK:STDOUT: %R.patt.loc20_10.2 => constants.%R.patt.053 // CHECK:STDOUT: %R.loc20_10.1 => constants.%R.7b2 // CHECK:STDOUT: %R.as_type.loc20_55.1 => constants.%R.as_type.657 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.afe +// CHECK:STDOUT: %r.param_patt.loc20_53.2 => constants.%r.param_patt.184 +// CHECK:STDOUT: %r.patt.loc20_53.2 => constants.%r.patt.727 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Test(constants.%facet_value.9d0) { +// CHECK:STDOUT: %R.patt.loc20_10.2 => constants.%R.patt.053 // CHECK:STDOUT: %R.loc20_10.1 => constants.%facet_value.9d0 // CHECK:STDOUT: %R.as_type.loc20_55.1 => constants.%ConstRange // CHECK:STDOUT: %pattern_type => constants.%pattern_type.025 +// CHECK:STDOUT: %r.param_patt.loc20_53.2 => constants.%r.param_patt.a73 +// CHECK:STDOUT: %r.patt.loc20_53.2 => constants.%r.patt.0e2 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc20 => constants.%complete_type.357 // CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.1f0 -// CHECK:STDOUT: %Iterate.facet.loc24_19.3 => constants.%Iterate.facet.9f4 +// CHECK:STDOUT: %Iterate.facet.loc24_19.5 => constants.%Iterate.facet.9f4 // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.d89 -// CHECK:STDOUT: %.loc24_19.15 => constants.%.e0f +// CHECK:STDOUT: %.loc24_19.19 => constants.%.e0f // CHECK:STDOUT: %impl.elem2.loc24_19.2 => constants.%R.as_type.as.Iterate.impl.NewCursor.d2e // CHECK:STDOUT: %specific_impl_fn.loc24_19.4 => constants.%R.as_type.as.Iterate.impl.NewCursor.specific_fn // CHECK:STDOUT: %impl.elem1 => constants.%Destroy.facet.40b @@ -1870,11 +1925,11 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %require_complete.1 => constants.%complete_type.320 // CHECK:STDOUT: %ptr => constants.%ptr.d1a // CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.64f -// CHECK:STDOUT: %.loc24_19.16 => constants.%.50c +// CHECK:STDOUT: %.loc24_19.20 => constants.%.50c // CHECK:STDOUT: %impl.elem3.loc24_19.2 => constants.%R.as_type.as.Iterate.impl.Next.0b7 // CHECK:STDOUT: %specific_impl_fn.loc24_19.5 => constants.%R.as_type.as.Iterate.impl.Next.specific_fn // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.117 -// CHECK:STDOUT: %.loc24_19.17 => constants.%.5a4 +// CHECK:STDOUT: %.loc24_19.21 => constants.%.5a4 // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.df9cc1.10 // CHECK:STDOUT: %impl.elem0.loc24_19.2 => constants.%Destroy.Op.1a2547.10 // CHECK:STDOUT: %specific_impl_fn.loc24_19.6 => constants.%Destroy.Op.1a2547.10 @@ -1918,9 +1973,14 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %Copy.impl_witness.873: = impl_witness imports.%Copy.impl_witness_table.4e8, @Float.as.Copy.impl(%int_64) [concrete] // CHECK:STDOUT: %facet_value.209: %facet_type = facet_value %f64.dc1, (%custom_witness.df9cc1.2, %Copy.impl_witness.873) [concrete] // CHECK:STDOUT: %Iterate_where.type.83b: type = facet_type <@Iterate where %impl.elem0.903 = %facet_value.209> [concrete] +// CHECK:STDOUT: %pattern_type.b62: type = pattern_type %Iterate_where.type.83b [concrete] +// CHECK:STDOUT: %R.patt.053: %pattern_type.b62 = symbolic_binding_pattern R, 0 [symbolic] // CHECK:STDOUT: %R.7b2: %Iterate_where.type.83b = symbolic_binding R, 0 [symbolic] // CHECK:STDOUT: %R.as_type.657: type = facet_access_type %R.7b2 [symbolic] // CHECK:STDOUT: %pattern_type.afe: type = pattern_type %R.as_type.657 [symbolic] +// CHECK:STDOUT: %r.param_patt.184: %pattern_type.afe = value_param_pattern [symbolic] +// CHECK:STDOUT: %r.patt.727: %pattern_type.afe = at_binding_pattern r, %r.param_patt.184 [symbolic] +// CHECK:STDOUT: %i.patt: %pattern_type.fb7 = value_binding_pattern i [concrete] // CHECK:STDOUT: %CppRangeForIterate.type: type = facet_type <@CppRangeForIterate> [concrete] // CHECK:STDOUT: %.Self.6bd: %CppRangeForIterate.type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %CppRangeForIterate.lookup_impl_witness.143: = lookup_impl_witness %.Self.6bd, @CppRangeForIterate [symbolic_self] @@ -2029,6 +2089,8 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.928: %R.as_type.as.Iterate.impl.Next.type.5c1 = struct_value () [concrete] // CHECK:STDOUT: %Iterate.facet.c9f: %Iterate.type = facet_value %MutableRange, (%Iterate.impl_witness.5f7) [concrete] // CHECK:STDOUT: %facet_value.7dc: %Iterate_where.type.83b = facet_value %MutableRange, (%Iterate.impl_witness.5f7) [concrete] +// CHECK:STDOUT: %r.param_patt.aeb: %pattern_type.992 = value_param_pattern [concrete] +// CHECK:STDOUT: %r.patt.fe7: %pattern_type.992 = at_binding_pattern r, %r.param_patt.aeb [concrete] // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.bde: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.c9f) [concrete] // CHECK:STDOUT: %.c29a: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.bde, %Iterate.facet.c9f [concrete] // CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.specific_fn: = specific_function %R.as_type.as.Iterate.impl.NewCursor.41a, @R.as_type.as.Iterate.impl.NewCursor(%facet_value.85f) [concrete] @@ -2047,10 +2109,10 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %Core.import_ref.0c6: type = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%DefaultOptionalStorage (constants.%DefaultOptionalStorage.d50)] // CHECK:STDOUT: %Core.import_ref.f4f: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.None.type (%T.as_type.as.OptionalStorage.impl.None.type.300) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.None (constants.%T.as_type.as.OptionalStorage.impl.None.f54)] // CHECK:STDOUT: %Core.import_ref.18f: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Some.type (%T.as_type.as.OptionalStorage.impl.Some.type.800) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Some (constants.%T.as_type.as.OptionalStorage.impl.Some.e83)] -// CHECK:STDOUT: %Core.import_ref.c68: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Has.type (%T.as_type.as.OptionalStorage.impl.Has.type.4bc) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Has (constants.%T.as_type.as.OptionalStorage.impl.Has.dc2)] +// CHECK:STDOUT: %Core.import_ref.c688: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Has.type (%T.as_type.as.OptionalStorage.impl.Has.type.4bc) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Has (constants.%T.as_type.as.OptionalStorage.impl.Has.dc2)] // CHECK:STDOUT: %Core.import_ref.a83: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Get.type (%T.as_type.as.OptionalStorage.impl.Get.type.029) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Get (constants.%T.as_type.as.OptionalStorage.impl.Get.cb5)] -// CHECK:STDOUT: %Core.import_ref.aaa = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], unloaded -// CHECK:STDOUT: %OptionalStorage.impl_witness_table.655 = impl_witness_table (%Core.import_ref.0c6, %Core.import_ref.f4f, %Core.import_ref.18f, %Core.import_ref.c68, %Core.import_ref.a83, %Core.import_ref.aaa), @T.as_type.as.OptionalStorage.impl [concrete] +// CHECK:STDOUT: %Core.import_ref.aaa3 = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], unloaded +// CHECK:STDOUT: %OptionalStorage.impl_witness_table.655 = impl_witness_table (%Core.import_ref.0c6, %Core.import_ref.f4f, %Core.import_ref.18f, %Core.import_ref.c688, %Core.import_ref.a83, %Core.import_ref.aaa3), @T.as_type.as.OptionalStorage.impl [concrete] // CHECK:STDOUT: %Core.import_ref.e69: @Float.as.Copy.impl.%Float.as.Copy.impl.Op.type (%Float.as.Copy.impl.Op.type.ff3) = import_ref Core//prelude/types/float, loc{{\d+_\d+}}, loaded [symbolic = @Float.as.Copy.impl.%Float.as.Copy.impl.Op (constants.%Float.as.Copy.impl.Op.d93)] // CHECK:STDOUT: %Copy.impl_witness_table.4e8 = impl_witness_table (%Core.import_ref.e69), @Float.as.Copy.impl [concrete] // CHECK:STDOUT: %Core.import_ref.301: %facet_type = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%facet_value (constants.%facet_value.194)] @@ -2068,34 +2130,36 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: %Iterate.lookup_impl_witness: = lookup_impl_witness %R.loc22_10.1, @Iterate [symbolic = %Iterate.lookup_impl_witness (constants.%Iterate.lookup_impl_witness.171)] -// CHECK:STDOUT: %Iterate.facet.loc26_19.3: %Iterate.type = facet_value %R.as_type.loc22_55.1, (%Iterate.lookup_impl_witness) [symbolic = %Iterate.facet.loc26_19.3 (constants.%Iterate.facet.523)] -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.loc26_19.3) [symbolic = %Iterate.WithSelf.NewCursor.type (constants.%Iterate.WithSelf.NewCursor.type.51e)] -// CHECK:STDOUT: %.loc26_19.15: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type, %Iterate.facet.loc26_19.3 [symbolic = %.loc26_19.15 (constants.%.250)] -// CHECK:STDOUT: %impl.elem2.loc26_19.2: @Test.%.loc26_19.15 (%.250) = impl_witness_access %Iterate.lookup_impl_witness, element2 [symbolic = %impl.elem2.loc26_19.2 (constants.%impl.elem2.9ef)] -// CHECK:STDOUT: %specific_impl_fn.loc26_19.4: = specific_impl_function %impl.elem2.loc26_19.2, @Iterate.WithSelf.NewCursor(%Iterate.facet.loc26_19.3) [symbolic = %specific_impl_fn.loc26_19.4 (constants.%specific_impl_fn.5ff)] +// CHECK:STDOUT: %Iterate.facet.loc26_19.5: %Iterate.type = facet_value %R.as_type.loc22_55.1, (%Iterate.lookup_impl_witness) [symbolic = %Iterate.facet.loc26_19.5 (constants.%Iterate.facet.523)] +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.loc26_19.5) [symbolic = %Iterate.WithSelf.NewCursor.type (constants.%Iterate.WithSelf.NewCursor.type.51e)] +// CHECK:STDOUT: %.loc26_19.19: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type, %Iterate.facet.loc26_19.5 [symbolic = %.loc26_19.19 (constants.%.250)] +// CHECK:STDOUT: %impl.elem2.loc26_19.2: @Test.%.loc26_19.19 (%.250) = impl_witness_access %Iterate.lookup_impl_witness, element2 [symbolic = %impl.elem2.loc26_19.2 (constants.%impl.elem2.9ef)] +// CHECK:STDOUT: %specific_impl_fn.loc26_19.4: = specific_impl_function %impl.elem2.loc26_19.2, @Iterate.WithSelf.NewCursor(%Iterate.facet.loc26_19.5) [symbolic = %specific_impl_fn.loc26_19.4 (constants.%specific_impl_fn.5ff)] // CHECK:STDOUT: // CHECK:STDOUT: %ptr: type = ptr_type %as_type [symbolic = %ptr (constants.%ptr.b94)] -// CHECK:STDOUT: %Iterate.WithSelf.Next.type: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.loc26_19.3) [symbolic = %Iterate.WithSelf.Next.type (constants.%Iterate.WithSelf.Next.type.e1d)] -// CHECK:STDOUT: %.loc26_19.16: type = fn_type_with_self_type %Iterate.WithSelf.Next.type, %Iterate.facet.loc26_19.3 [symbolic = %.loc26_19.16 (constants.%.f81)] -// CHECK:STDOUT: %impl.elem3.loc26_19.2: @Test.%.loc26_19.16 (%.f81) = impl_witness_access %Iterate.lookup_impl_witness, element3 [symbolic = %impl.elem3.loc26_19.2 (constants.%impl.elem3.04c)] -// CHECK:STDOUT: %specific_impl_fn.loc26_19.5: = specific_impl_function %impl.elem3.loc26_19.2, @Iterate.WithSelf.Next(%Iterate.facet.loc26_19.3) [symbolic = %specific_impl_fn.loc26_19.5 (constants.%specific_impl_fn.c5b)] +// CHECK:STDOUT: %Iterate.WithSelf.Next.type: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.loc26_19.5) [symbolic = %Iterate.WithSelf.Next.type (constants.%Iterate.WithSelf.Next.type.e1d)] +// CHECK:STDOUT: %.loc26_19.20: type = fn_type_with_self_type %Iterate.WithSelf.Next.type, %Iterate.facet.loc26_19.5 [symbolic = %.loc26_19.20 (constants.%.f81)] +// CHECK:STDOUT: %impl.elem3.loc26_19.2: @Test.%.loc26_19.20 (%.f81) = impl_witness_access %Iterate.lookup_impl_witness, element3 [symbolic = %impl.elem3.loc26_19.2 (constants.%impl.elem3.04c)] +// CHECK:STDOUT: %specific_impl_fn.loc26_19.5: = specific_impl_function %impl.elem3.loc26_19.2, @Iterate.WithSelf.Next(%Iterate.facet.loc26_19.5) [symbolic = %specific_impl_fn.loc26_19.5 (constants.%specific_impl_fn.c5b)] // CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%impl.elem1) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.b9c)] -// CHECK:STDOUT: %.loc26_19.17: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %impl.elem1 [symbolic = %.loc26_19.17 (constants.%.75c)] +// CHECK:STDOUT: %.loc26_19.21: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %impl.elem1 [symbolic = %.loc26_19.21 (constants.%.75c)] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %impl.elem1, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness.f8f)] -// CHECK:STDOUT: %impl.elem0.loc26_19.2: @Test.%.loc26_19.17 (%.75c) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc26_19.2 (constants.%impl.elem0.688)] +// CHECK:STDOUT: %impl.elem0.loc26_19.2: @Test.%.loc26_19.21 (%.75c) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc26_19.2 (constants.%impl.elem0.688)] // CHECK:STDOUT: %specific_impl_fn.loc26_19.6: = specific_impl_function %impl.elem0.loc26_19.2, @Destroy.WithSelf.Op(%impl.elem1) [symbolic = %specific_impl_fn.loc26_19.6 (constants.%specific_impl_fn.1e0)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%r.param: @Test.%R.as_type.loc22_55.1 (%R.as_type.657)) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %i.patt: %pattern_type.fb7 = value_binding_pattern i [concrete] +// CHECK:STDOUT: %i.patt: %pattern_type.fb7 = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %r.ref: @Test.%R.as_type.loc22_55.1 (%R.as_type.657) = name_ref r, %r -// CHECK:STDOUT: %impl.elem2.loc26_19.1: @Test.%.loc26_19.15 (%.250) = impl_witness_access constants.%Iterate.lookup_impl_witness.171, element2 [symbolic = %impl.elem2.loc26_19.2 (constants.%impl.elem2.9ef)] +// CHECK:STDOUT: %impl.elem2.loc26_19.1: @Test.%.loc26_19.19 (%.250) = impl_witness_access constants.%Iterate.lookup_impl_witness.171, element2 [symbolic = %impl.elem2.loc26_19.2 (constants.%impl.elem2.9ef)] // CHECK:STDOUT: %bound_method.loc26_19.1: = bound_method %r.ref, %impl.elem2.loc26_19.1 -// CHECK:STDOUT: %Iterate.facet.loc26_19.1: %Iterate.type = facet_value constants.%R.as_type.657, (constants.%Iterate.lookup_impl_witness.171) [symbolic = %Iterate.facet.loc26_19.3 (constants.%Iterate.facet.523)] -// CHECK:STDOUT: %.loc26_19.1: %Iterate.type = converted constants.%R.as_type.657, %Iterate.facet.loc26_19.1 [symbolic = %Iterate.facet.loc26_19.3 (constants.%Iterate.facet.523)] +// CHECK:STDOUT: %Iterate.facet.loc26_19.1: %Iterate.type = facet_value constants.%R.as_type.657, (constants.%Iterate.lookup_impl_witness.171) [symbolic = %Iterate.facet.loc26_19.5 (constants.%Iterate.facet.523)] +// CHECK:STDOUT: %.loc26_19.1: %Iterate.type = converted constants.%R.as_type.657, %Iterate.facet.loc26_19.1 [symbolic = %Iterate.facet.loc26_19.5 (constants.%Iterate.facet.523)] +// CHECK:STDOUT: %Iterate.facet.loc26_19.2: %Iterate.type = facet_value constants.%R.as_type.657, (constants.%Iterate.lookup_impl_witness.171) [symbolic = %Iterate.facet.loc26_19.5 (constants.%Iterate.facet.523)] +// CHECK:STDOUT: %.loc26_19.2: %Iterate.type = converted constants.%R.as_type.657, %Iterate.facet.loc26_19.2 [symbolic = %Iterate.facet.loc26_19.5 (constants.%Iterate.facet.523)] // CHECK:STDOUT: %specific_impl_fn.loc26_19.1: = specific_impl_function %impl.elem2.loc26_19.1, @Iterate.WithSelf.NewCursor(constants.%Iterate.facet.523) [symbolic = %specific_impl_fn.loc26_19.4 (constants.%specific_impl_fn.5ff)] // CHECK:STDOUT: %bound_method.loc26_19.2: = bound_method %r.ref, %specific_impl_fn.loc26_19.1 // CHECK:STDOUT: %var: ref @Test.%as_type (%as_type.6f2) = var invalid @@ -2105,39 +2169,42 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: // CHECK:STDOUT: !for.next: // CHECK:STDOUT: %addr: @Test.%ptr (%ptr.b94) = addr_of %var -// CHECK:STDOUT: %impl.elem3.loc26_19.1: @Test.%.loc26_19.16 (%.f81) = impl_witness_access constants.%Iterate.lookup_impl_witness.171, element3 [symbolic = %impl.elem3.loc26_19.2 (constants.%impl.elem3.04c)] +// CHECK:STDOUT: %impl.elem3.loc26_19.1: @Test.%.loc26_19.20 (%.f81) = impl_witness_access constants.%Iterate.lookup_impl_witness.171, element3 [symbolic = %impl.elem3.loc26_19.2 (constants.%impl.elem3.04c)] // CHECK:STDOUT: %bound_method.loc26_19.3: = bound_method %r.ref, %impl.elem3.loc26_19.1 -// CHECK:STDOUT: %Iterate.facet.loc26_19.2: %Iterate.type = facet_value constants.%R.as_type.657, (constants.%Iterate.lookup_impl_witness.171) [symbolic = %Iterate.facet.loc26_19.3 (constants.%Iterate.facet.523)] -// CHECK:STDOUT: %.loc26_19.2: %Iterate.type = converted constants.%R.as_type.657, %Iterate.facet.loc26_19.2 [symbolic = %Iterate.facet.loc26_19.3 (constants.%Iterate.facet.523)] -// CHECK:STDOUT: %.loc26_19.3: %Destroy.type = converted constants.%as_type.6f2, constants.%impl.elem1.f12 [symbolic = %impl.elem1 (constants.%impl.elem1.f12)] +// CHECK:STDOUT: %Iterate.facet.loc26_19.3: %Iterate.type = facet_value constants.%R.as_type.657, (constants.%Iterate.lookup_impl_witness.171) [symbolic = %Iterate.facet.loc26_19.5 (constants.%Iterate.facet.523)] +// CHECK:STDOUT: %.loc26_19.3: %Iterate.type = converted constants.%R.as_type.657, %Iterate.facet.loc26_19.3 [symbolic = %Iterate.facet.loc26_19.5 (constants.%Iterate.facet.523)] +// CHECK:STDOUT: %Iterate.facet.loc26_19.4: %Iterate.type = facet_value constants.%R.as_type.657, (constants.%Iterate.lookup_impl_witness.171) [symbolic = %Iterate.facet.loc26_19.5 (constants.%Iterate.facet.523)] +// CHECK:STDOUT: %.loc26_19.4: %Iterate.type = converted constants.%R.as_type.657, %Iterate.facet.loc26_19.4 [symbolic = %Iterate.facet.loc26_19.5 (constants.%Iterate.facet.523)] +// CHECK:STDOUT: %.loc26_19.5: %Destroy.type = converted constants.%as_type.6f2, constants.%impl.elem1.f12 [symbolic = %impl.elem1 (constants.%impl.elem1.f12)] +// CHECK:STDOUT: %.loc26_19.6: %Destroy.type = converted constants.%as_type.6f2, constants.%impl.elem1.f12 [symbolic = %impl.elem1 (constants.%impl.elem1.f12)] // CHECK:STDOUT: %specific_impl_fn.loc26_19.2: = specific_impl_function %impl.elem3.loc26_19.1, @Iterate.WithSelf.Next(constants.%Iterate.facet.523) [symbolic = %specific_impl_fn.loc26_19.5 (constants.%specific_impl_fn.c5b)] // CHECK:STDOUT: %bound_method.loc26_19.4: = bound_method %r.ref, %specific_impl_fn.loc26_19.2 -// CHECK:STDOUT: %.loc26_19.4: ref %Optional.f48 = temporary_storage -// CHECK:STDOUT: %Iterate.WithSelf.Next.call: init %Optional.f48 to %.loc26_19.4 = call %bound_method.loc26_19.4(%r.ref, %addr) -// CHECK:STDOUT: %.loc26_19.5: ref %Optional.f48 = temporary %.loc26_19.4, %Iterate.WithSelf.Next.call -// CHECK:STDOUT: %.loc26_19.6: %Optional.HasValue.type.d4e = specific_constant imports.%Core.import_ref.bb6, @Optional(constants.%OptionalStorage.facet.cc1) [concrete = constants.%Optional.HasValue.e79] -// CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.d4e = name_ref HasValue, %.loc26_19.6 [concrete = constants.%Optional.HasValue.e79] -// CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc26_19.5, %HasValue.ref +// CHECK:STDOUT: %.loc26_19.7: ref %Optional.f48 = temporary_storage +// CHECK:STDOUT: %Iterate.WithSelf.Next.call: init %Optional.f48 to %.loc26_19.7 = call %bound_method.loc26_19.4(%r.ref, %addr) +// CHECK:STDOUT: %.loc26_19.8: ref %Optional.f48 = temporary %.loc26_19.7, %Iterate.WithSelf.Next.call +// CHECK:STDOUT: %.loc26_19.9: %Optional.HasValue.type.d4e = specific_constant imports.%Core.import_ref.bb6, @Optional(constants.%OptionalStorage.facet.cc1) [concrete = constants.%Optional.HasValue.e79] +// CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.d4e = name_ref HasValue, %.loc26_19.9 [concrete = constants.%Optional.HasValue.e79] +// CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc26_19.8, %HasValue.ref // CHECK:STDOUT: %Optional.HasValue.specific_fn: = specific_function %HasValue.ref, @Optional.HasValue(constants.%OptionalStorage.facet.cc1) [concrete = constants.%Optional.HasValue.specific_fn] -// CHECK:STDOUT: %bound_method.loc26_19.5: = bound_method %.loc26_19.5, %Optional.HasValue.specific_fn -// CHECK:STDOUT: %.loc26_19.7: %Optional.f48 = acquire_value %.loc26_19.5 -// CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc26_19.5(%.loc26_19.7) -// CHECK:STDOUT: %.loc26_19.8: bool = value_of_initializer %Optional.HasValue.call -// CHECK:STDOUT: %.loc26_19.9: bool = converted %Optional.HasValue.call, %.loc26_19.8 -// CHECK:STDOUT: if %.loc26_19.9 br !for.body else br !for.done +// CHECK:STDOUT: %bound_method.loc26_19.5: = bound_method %.loc26_19.8, %Optional.HasValue.specific_fn +// CHECK:STDOUT: %.loc26_19.10: %Optional.f48 = acquire_value %.loc26_19.8 +// CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc26_19.5(%.loc26_19.10) +// CHECK:STDOUT: %.loc26_19.11: bool = value_of_initializer %Optional.HasValue.call +// CHECK:STDOUT: %.loc26_19.12: bool = converted %Optional.HasValue.call, %.loc26_19.11 +// CHECK:STDOUT: if %.loc26_19.12 br !for.body else br !for.done // CHECK:STDOUT: // CHECK:STDOUT: !for.body: -// CHECK:STDOUT: %.loc26_19.10: %Optional.Get.type.822 = specific_constant imports.%Core.import_ref.daba, @Optional(constants.%OptionalStorage.facet.cc1) [concrete = constants.%Optional.Get.f05] -// CHECK:STDOUT: %Get.ref: %Optional.Get.type.822 = name_ref Get, %.loc26_19.10 [concrete = constants.%Optional.Get.f05] -// CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc26_19.5, %Get.ref +// CHECK:STDOUT: %.loc26_19.13: %Optional.Get.type.822 = specific_constant imports.%Core.import_ref.daba, @Optional(constants.%OptionalStorage.facet.cc1) [concrete = constants.%Optional.Get.f05] +// CHECK:STDOUT: %Get.ref: %Optional.Get.type.822 = name_ref Get, %.loc26_19.13 [concrete = constants.%Optional.Get.f05] +// CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc26_19.8, %Get.ref // CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Get.ref, @Optional.Get(constants.%OptionalStorage.facet.cc1) [concrete = constants.%Optional.Get.specific_fn] -// CHECK:STDOUT: %bound_method.loc26_19.6: = bound_method %.loc26_19.5, %Optional.Get.specific_fn -// CHECK:STDOUT: %.loc26_19.11: %Optional.f48 = acquire_value %.loc26_19.5 -// CHECK:STDOUT: %Optional.Get.call: init %f64.dc1 = call %bound_method.loc26_19.6(%.loc26_19.11) +// CHECK:STDOUT: %bound_method.loc26_19.6: = bound_method %.loc26_19.8, %Optional.Get.specific_fn +// CHECK:STDOUT: %.loc26_19.14: %Optional.f48 = acquire_value %.loc26_19.8 +// CHECK:STDOUT: %Optional.Get.call: init %f64.dc1 = call %bound_method.loc26_19.6(%.loc26_19.14) +// CHECK:STDOUT: %.loc26_19.15: %f64.dc1 = value_of_initializer %Optional.Get.call +// CHECK:STDOUT: %.loc26_19.16: %f64.dc1 = converted %Optional.Get.call, %.loc26_19.15 // CHECK:STDOUT: %f64.loc26: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] -// CHECK:STDOUT: %.loc26_19.12: %f64.dc1 = value_of_initializer %Optional.Get.call -// CHECK:STDOUT: %.loc26_19.13: %f64.dc1 = converted %Optional.Get.call, %.loc26_19.12 -// CHECK:STDOUT: %i: %f64.dc1 = value_binding i, %.loc26_19.13 +// CHECK:STDOUT: %i: %f64.dc1 = value_binding i, %.loc26_19.16 // CHECK:STDOUT: %sum.ref: ref %f64.dc1 = name_ref sum, %sum // CHECK:STDOUT: %i.ref: %f64.dc1 = name_ref i, %i // CHECK:STDOUT: %impl.elem0.loc27: %.746 = impl_witness_access constants.%AddAssignWith.impl_witness.e85, element0 [concrete = constants.%Float.as.AddAssignWith.impl.Op.ac1] @@ -2148,11 +2215,12 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.done: -// CHECK:STDOUT: %Destroy.Op.bound.loc26: = bound_method %.loc26_19.5, constants.%Destroy.Op.1a2547.9 -// CHECK:STDOUT: %Destroy.Op.call.loc26: init %empty_tuple.type = call %Destroy.Op.bound.loc26(%.loc26_19.5) -// CHECK:STDOUT: %impl.elem0.loc26_19.1: @Test.%.loc26_19.17 (%.75c) = impl_witness_access constants.%Destroy.lookup_impl_witness.f8f, element0 [symbolic = %impl.elem0.loc26_19.2 (constants.%impl.elem0.688)] +// CHECK:STDOUT: %Destroy.Op.bound.loc26: = bound_method %.loc26_19.8, constants.%Destroy.Op.1a2547.9 +// CHECK:STDOUT: %Destroy.Op.call.loc26: init %empty_tuple.type = call %Destroy.Op.bound.loc26(%.loc26_19.8) +// CHECK:STDOUT: %impl.elem0.loc26_19.1: @Test.%.loc26_19.21 (%.75c) = impl_witness_access constants.%Destroy.lookup_impl_witness.f8f, element0 [symbolic = %impl.elem0.loc26_19.2 (constants.%impl.elem0.688)] // CHECK:STDOUT: %bound_method.loc26_19.7: = bound_method %var, %impl.elem0.loc26_19.1 -// CHECK:STDOUT: %.loc26_19.14: %Destroy.type = converted constants.%as_type.6f2, constants.%impl.elem1.f12 [symbolic = %impl.elem1 (constants.%impl.elem1.f12)] +// CHECK:STDOUT: %.loc26_19.17: %Destroy.type = converted constants.%as_type.6f2, constants.%impl.elem1.f12 [symbolic = %impl.elem1 (constants.%impl.elem1.f12)] +// CHECK:STDOUT: %.loc26_19.18: %Destroy.type = converted constants.%as_type.6f2, constants.%impl.elem1.f12 [symbolic = %impl.elem1 (constants.%impl.elem1.f12)] // CHECK:STDOUT: %specific_impl_fn.loc26_19.3: = specific_impl_function %impl.elem0.loc26_19.1, @Destroy.WithSelf.Op(constants.%impl.elem1.f12) [symbolic = %specific_impl_fn.loc26_19.6 (constants.%specific_impl_fn.1e0)] // CHECK:STDOUT: %bound_method.loc26_19.8: = bound_method %var, %specific_impl_fn.loc26_19.3 // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc26_19.8(%var) @@ -2188,22 +2256,28 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Test(constants.%R.7b2) { +// CHECK:STDOUT: %R.patt.loc22_10.2 => constants.%R.patt.053 // CHECK:STDOUT: %R.loc22_10.1 => constants.%R.7b2 // CHECK:STDOUT: %R.as_type.loc22_55.1 => constants.%R.as_type.657 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.afe +// CHECK:STDOUT: %r.param_patt.loc22_53.2 => constants.%r.param_patt.184 +// CHECK:STDOUT: %r.patt.loc22_53.2 => constants.%r.patt.727 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Test(constants.%facet_value.7dc) { +// CHECK:STDOUT: %R.patt.loc22_10.2 => constants.%R.patt.053 // CHECK:STDOUT: %R.loc22_10.1 => constants.%facet_value.7dc // CHECK:STDOUT: %R.as_type.loc22_55.1 => constants.%MutableRange // CHECK:STDOUT: %pattern_type => constants.%pattern_type.992 +// CHECK:STDOUT: %r.param_patt.loc22_53.2 => constants.%r.param_patt.aeb +// CHECK:STDOUT: %r.patt.loc22_53.2 => constants.%r.patt.fe7 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc22 => constants.%complete_type.357 // CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.5f7 -// CHECK:STDOUT: %Iterate.facet.loc26_19.3 => constants.%Iterate.facet.c9f +// CHECK:STDOUT: %Iterate.facet.loc26_19.5 => constants.%Iterate.facet.c9f // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.bde -// CHECK:STDOUT: %.loc26_19.15 => constants.%.c29a +// CHECK:STDOUT: %.loc26_19.19 => constants.%.c29a // CHECK:STDOUT: %impl.elem2.loc26_19.2 => constants.%R.as_type.as.Iterate.impl.NewCursor.41a // CHECK:STDOUT: %specific_impl_fn.loc26_19.4 => constants.%R.as_type.as.Iterate.impl.NewCursor.specific_fn // CHECK:STDOUT: %impl.elem1 => constants.%Destroy.facet.e1e @@ -2211,11 +2285,11 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %require_complete.1 => constants.%complete_type.843 // CHECK:STDOUT: %ptr => constants.%ptr.a4f // CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.454 -// CHECK:STDOUT: %.loc26_19.16 => constants.%.b4c +// CHECK:STDOUT: %.loc26_19.20 => constants.%.b4c // CHECK:STDOUT: %impl.elem3.loc26_19.2 => constants.%R.as_type.as.Iterate.impl.Next.928 // CHECK:STDOUT: %specific_impl_fn.loc26_19.5 => constants.%R.as_type.as.Iterate.impl.Next.specific_fn // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.452 -// CHECK:STDOUT: %.loc26_19.17 => constants.%.899 +// CHECK:STDOUT: %.loc26_19.21 => constants.%.899 // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.df9cc1.10 // CHECK:STDOUT: %impl.elem0.loc26_19.2 => constants.%Destroy.Op.1a2547.10 // CHECK:STDOUT: %specific_impl_fn.loc26_19.6 => constants.%Destroy.Op.1a2547.10 @@ -2264,9 +2338,14 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %custom_witness.c19: = custom_witness (%ValueType.Op.4c94b9.2), @Copy [concrete] // CHECK:STDOUT: %facet_value.ccb: %facet_type = facet_value %ValueType, (%custom_witness.fef, %custom_witness.c19) [concrete] // CHECK:STDOUT: %Iterate_where.type.99d: type = facet_type <@Iterate where %impl.elem0.903 = %facet_value.ccb> [concrete] +// CHECK:STDOUT: %pattern_type.3f6: type = pattern_type %Iterate_where.type.99d [concrete] +// CHECK:STDOUT: %R.patt.324: %pattern_type.3f6 = symbolic_binding_pattern R, 0 [symbolic] // CHECK:STDOUT: %R.623: %Iterate_where.type.99d = symbolic_binding R, 0 [symbolic] // CHECK:STDOUT: %R.as_type.a62: type = facet_access_type %R.623 [symbolic] // CHECK:STDOUT: %pattern_type.725: type = pattern_type %R.as_type.a62 [symbolic] +// CHECK:STDOUT: %r.param_patt.162: %pattern_type.725 = value_param_pattern [symbolic] +// CHECK:STDOUT: %r.patt.15b: %pattern_type.725 = at_binding_pattern r, %r.param_patt.162 [symbolic] +// CHECK:STDOUT: %i.patt: %pattern_type.e41 = value_binding_pattern i [concrete] // CHECK:STDOUT: %CppRangeForIterate.type: type = facet_type <@CppRangeForIterate> [concrete] // CHECK:STDOUT: %.Self.6bd: %CppRangeForIterate.type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %CppRangeForIterate.lookup_impl_witness.143: = lookup_impl_witness %.Self.6bd, @CppRangeForIterate [symbolic_self] @@ -2372,6 +2451,8 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.bf3: %R.as_type.as.Iterate.impl.Next.type.f2b = struct_value () [concrete] // CHECK:STDOUT: %Iterate.facet.099: %Iterate.type = facet_value %ConstRange, (%Iterate.impl_witness.466) [concrete] // CHECK:STDOUT: %facet_value.00d: %Iterate_where.type.99d = facet_value %ConstRange, (%Iterate.impl_witness.466) [concrete] +// CHECK:STDOUT: %r.param_patt.a73: %pattern_type.025 = value_param_pattern [concrete] +// CHECK:STDOUT: %r.patt.0e2: %pattern_type.025 = at_binding_pattern r, %r.param_patt.a73 [concrete] // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.e43: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.099) [concrete] // CHECK:STDOUT: %.da4e: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.e43, %Iterate.facet.099 [concrete] // CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.specific_fn: = specific_function %R.as_type.as.Iterate.impl.NewCursor.a27, @R.as_type.as.Iterate.impl.NewCursor(%facet_value.b1e) [concrete] @@ -2428,34 +2509,36 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: %Iterate.lookup_impl_witness: = lookup_impl_witness %R.loc27_10.1, @Iterate [symbolic = %Iterate.lookup_impl_witness (constants.%Iterate.lookup_impl_witness.8b4)] -// CHECK:STDOUT: %Iterate.facet.loc31_31.3: %Iterate.type = facet_value %R.as_type.loc27_67.1, (%Iterate.lookup_impl_witness) [symbolic = %Iterate.facet.loc31_31.3 (constants.%Iterate.facet.b19)] -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.loc31_31.3) [symbolic = %Iterate.WithSelf.NewCursor.type (constants.%Iterate.WithSelf.NewCursor.type.217)] -// CHECK:STDOUT: %.loc31_31.16: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type, %Iterate.facet.loc31_31.3 [symbolic = %.loc31_31.16 (constants.%.a27)] -// CHECK:STDOUT: %impl.elem2.loc31_31.2: @Test.%.loc31_31.16 (%.a27) = impl_witness_access %Iterate.lookup_impl_witness, element2 [symbolic = %impl.elem2.loc31_31.2 (constants.%impl.elem2.7c0)] -// CHECK:STDOUT: %specific_impl_fn.loc31_31.4: = specific_impl_function %impl.elem2.loc31_31.2, @Iterate.WithSelf.NewCursor(%Iterate.facet.loc31_31.3) [symbolic = %specific_impl_fn.loc31_31.4 (constants.%specific_impl_fn.e23)] +// CHECK:STDOUT: %Iterate.facet.loc31_31.5: %Iterate.type = facet_value %R.as_type.loc27_67.1, (%Iterate.lookup_impl_witness) [symbolic = %Iterate.facet.loc31_31.5 (constants.%Iterate.facet.b19)] +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.loc31_31.5) [symbolic = %Iterate.WithSelf.NewCursor.type (constants.%Iterate.WithSelf.NewCursor.type.217)] +// CHECK:STDOUT: %.loc31_31.20: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type, %Iterate.facet.loc31_31.5 [symbolic = %.loc31_31.20 (constants.%.a27)] +// CHECK:STDOUT: %impl.elem2.loc31_31.2: @Test.%.loc31_31.20 (%.a27) = impl_witness_access %Iterate.lookup_impl_witness, element2 [symbolic = %impl.elem2.loc31_31.2 (constants.%impl.elem2.7c0)] +// CHECK:STDOUT: %specific_impl_fn.loc31_31.4: = specific_impl_function %impl.elem2.loc31_31.2, @Iterate.WithSelf.NewCursor(%Iterate.facet.loc31_31.5) [symbolic = %specific_impl_fn.loc31_31.4 (constants.%specific_impl_fn.e23)] // CHECK:STDOUT: // CHECK:STDOUT: %ptr: type = ptr_type %as_type [symbolic = %ptr (constants.%ptr.530)] -// CHECK:STDOUT: %Iterate.WithSelf.Next.type: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.loc31_31.3) [symbolic = %Iterate.WithSelf.Next.type (constants.%Iterate.WithSelf.Next.type.10a)] -// CHECK:STDOUT: %.loc31_31.17: type = fn_type_with_self_type %Iterate.WithSelf.Next.type, %Iterate.facet.loc31_31.3 [symbolic = %.loc31_31.17 (constants.%.df57)] -// CHECK:STDOUT: %impl.elem3.loc31_31.2: @Test.%.loc31_31.17 (%.df57) = impl_witness_access %Iterate.lookup_impl_witness, element3 [symbolic = %impl.elem3.loc31_31.2 (constants.%impl.elem3.199)] -// CHECK:STDOUT: %specific_impl_fn.loc31_31.5: = specific_impl_function %impl.elem3.loc31_31.2, @Iterate.WithSelf.Next(%Iterate.facet.loc31_31.3) [symbolic = %specific_impl_fn.loc31_31.5 (constants.%specific_impl_fn.169)] +// CHECK:STDOUT: %Iterate.WithSelf.Next.type: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.loc31_31.5) [symbolic = %Iterate.WithSelf.Next.type (constants.%Iterate.WithSelf.Next.type.10a)] +// CHECK:STDOUT: %.loc31_31.21: type = fn_type_with_self_type %Iterate.WithSelf.Next.type, %Iterate.facet.loc31_31.5 [symbolic = %.loc31_31.21 (constants.%.df57)] +// CHECK:STDOUT: %impl.elem3.loc31_31.2: @Test.%.loc31_31.21 (%.df57) = impl_witness_access %Iterate.lookup_impl_witness, element3 [symbolic = %impl.elem3.loc31_31.2 (constants.%impl.elem3.199)] +// CHECK:STDOUT: %specific_impl_fn.loc31_31.5: = specific_impl_function %impl.elem3.loc31_31.2, @Iterate.WithSelf.Next(%Iterate.facet.loc31_31.5) [symbolic = %specific_impl_fn.loc31_31.5 (constants.%specific_impl_fn.169)] // CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%impl.elem1) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.e7e)] -// CHECK:STDOUT: %.loc31_31.18: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %impl.elem1 [symbolic = %.loc31_31.18 (constants.%.bc1)] +// CHECK:STDOUT: %.loc31_31.22: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %impl.elem1 [symbolic = %.loc31_31.22 (constants.%.bc1)] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %impl.elem1, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness.f37)] -// CHECK:STDOUT: %impl.elem0.loc31_31.2: @Test.%.loc31_31.18 (%.bc1) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc31_31.2 (constants.%impl.elem0.c7c)] +// CHECK:STDOUT: %impl.elem0.loc31_31.2: @Test.%.loc31_31.22 (%.bc1) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc31_31.2 (constants.%impl.elem0.c7c)] // CHECK:STDOUT: %specific_impl_fn.loc31_31.6: = specific_impl_function %impl.elem0.loc31_31.2, @Destroy.WithSelf.Op(%impl.elem1) [symbolic = %specific_impl_fn.loc31_31.6 (constants.%specific_impl_fn.cd3)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%r.param: @Test.%R.as_type.loc27_67.1 (%R.as_type.a62)) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %i.patt: %pattern_type.e41 = value_binding_pattern i [concrete] +// CHECK:STDOUT: %i.patt: %pattern_type.e41 = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %r.ref: @Test.%R.as_type.loc27_67.1 (%R.as_type.a62) = name_ref r, %r -// CHECK:STDOUT: %impl.elem2.loc31_31.1: @Test.%.loc31_31.16 (%.a27) = impl_witness_access constants.%Iterate.lookup_impl_witness.8b4, element2 [symbolic = %impl.elem2.loc31_31.2 (constants.%impl.elem2.7c0)] +// CHECK:STDOUT: %impl.elem2.loc31_31.1: @Test.%.loc31_31.20 (%.a27) = impl_witness_access constants.%Iterate.lookup_impl_witness.8b4, element2 [symbolic = %impl.elem2.loc31_31.2 (constants.%impl.elem2.7c0)] // CHECK:STDOUT: %bound_method.loc31_31.1: = bound_method %r.ref, %impl.elem2.loc31_31.1 -// CHECK:STDOUT: %Iterate.facet.loc31_31.1: %Iterate.type = facet_value constants.%R.as_type.a62, (constants.%Iterate.lookup_impl_witness.8b4) [symbolic = %Iterate.facet.loc31_31.3 (constants.%Iterate.facet.b19)] -// CHECK:STDOUT: %.loc31_31.1: %Iterate.type = converted constants.%R.as_type.a62, %Iterate.facet.loc31_31.1 [symbolic = %Iterate.facet.loc31_31.3 (constants.%Iterate.facet.b19)] +// CHECK:STDOUT: %Iterate.facet.loc31_31.1: %Iterate.type = facet_value constants.%R.as_type.a62, (constants.%Iterate.lookup_impl_witness.8b4) [symbolic = %Iterate.facet.loc31_31.5 (constants.%Iterate.facet.b19)] +// CHECK:STDOUT: %.loc31_31.1: %Iterate.type = converted constants.%R.as_type.a62, %Iterate.facet.loc31_31.1 [symbolic = %Iterate.facet.loc31_31.5 (constants.%Iterate.facet.b19)] +// CHECK:STDOUT: %Iterate.facet.loc31_31.2: %Iterate.type = facet_value constants.%R.as_type.a62, (constants.%Iterate.lookup_impl_witness.8b4) [symbolic = %Iterate.facet.loc31_31.5 (constants.%Iterate.facet.b19)] +// CHECK:STDOUT: %.loc31_31.2: %Iterate.type = converted constants.%R.as_type.a62, %Iterate.facet.loc31_31.2 [symbolic = %Iterate.facet.loc31_31.5 (constants.%Iterate.facet.b19)] // CHECK:STDOUT: %specific_impl_fn.loc31_31.1: = specific_impl_function %impl.elem2.loc31_31.1, @Iterate.WithSelf.NewCursor(constants.%Iterate.facet.b19) [symbolic = %specific_impl_fn.loc31_31.4 (constants.%specific_impl_fn.e23)] // CHECK:STDOUT: %bound_method.loc31_31.2: = bound_method %r.ref, %specific_impl_fn.loc31_31.1 // CHECK:STDOUT: %var: ref @Test.%as_type (%as_type.862) = var invalid @@ -2465,44 +2548,47 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: // CHECK:STDOUT: !for.next: // CHECK:STDOUT: %addr.loc31: @Test.%ptr (%ptr.530) = addr_of %var -// CHECK:STDOUT: %impl.elem3.loc31_31.1: @Test.%.loc31_31.17 (%.df57) = impl_witness_access constants.%Iterate.lookup_impl_witness.8b4, element3 [symbolic = %impl.elem3.loc31_31.2 (constants.%impl.elem3.199)] +// CHECK:STDOUT: %impl.elem3.loc31_31.1: @Test.%.loc31_31.21 (%.df57) = impl_witness_access constants.%Iterate.lookup_impl_witness.8b4, element3 [symbolic = %impl.elem3.loc31_31.2 (constants.%impl.elem3.199)] // CHECK:STDOUT: %bound_method.loc31_31.3: = bound_method %r.ref, %impl.elem3.loc31_31.1 -// CHECK:STDOUT: %Iterate.facet.loc31_31.2: %Iterate.type = facet_value constants.%R.as_type.a62, (constants.%Iterate.lookup_impl_witness.8b4) [symbolic = %Iterate.facet.loc31_31.3 (constants.%Iterate.facet.b19)] -// CHECK:STDOUT: %.loc31_31.2: %Iterate.type = converted constants.%R.as_type.a62, %Iterate.facet.loc31_31.2 [symbolic = %Iterate.facet.loc31_31.3 (constants.%Iterate.facet.b19)] -// CHECK:STDOUT: %.loc31_31.3: %Destroy.type = converted constants.%as_type.862, constants.%impl.elem1.46a [symbolic = %impl.elem1 (constants.%impl.elem1.46a)] +// CHECK:STDOUT: %Iterate.facet.loc31_31.3: %Iterate.type = facet_value constants.%R.as_type.a62, (constants.%Iterate.lookup_impl_witness.8b4) [symbolic = %Iterate.facet.loc31_31.5 (constants.%Iterate.facet.b19)] +// CHECK:STDOUT: %.loc31_31.3: %Iterate.type = converted constants.%R.as_type.a62, %Iterate.facet.loc31_31.3 [symbolic = %Iterate.facet.loc31_31.5 (constants.%Iterate.facet.b19)] +// CHECK:STDOUT: %Iterate.facet.loc31_31.4: %Iterate.type = facet_value constants.%R.as_type.a62, (constants.%Iterate.lookup_impl_witness.8b4) [symbolic = %Iterate.facet.loc31_31.5 (constants.%Iterate.facet.b19)] +// CHECK:STDOUT: %.loc31_31.4: %Iterate.type = converted constants.%R.as_type.a62, %Iterate.facet.loc31_31.4 [symbolic = %Iterate.facet.loc31_31.5 (constants.%Iterate.facet.b19)] +// CHECK:STDOUT: %.loc31_31.5: %Destroy.type = converted constants.%as_type.862, constants.%impl.elem1.46a [symbolic = %impl.elem1 (constants.%impl.elem1.46a)] +// CHECK:STDOUT: %.loc31_31.6: %Destroy.type = converted constants.%as_type.862, constants.%impl.elem1.46a [symbolic = %impl.elem1 (constants.%impl.elem1.46a)] // CHECK:STDOUT: %specific_impl_fn.loc31_31.2: = specific_impl_function %impl.elem3.loc31_31.1, @Iterate.WithSelf.Next(constants.%Iterate.facet.b19) [symbolic = %specific_impl_fn.loc31_31.5 (constants.%specific_impl_fn.169)] // CHECK:STDOUT: %bound_method.loc31_31.4: = bound_method %r.ref, %specific_impl_fn.loc31_31.2 -// CHECK:STDOUT: %.loc31_31.4: ref %Optional.552 = temporary_storage -// CHECK:STDOUT: %Iterate.WithSelf.Next.call: init %Optional.552 to %.loc31_31.4 = call %bound_method.loc31_31.4(%r.ref, %addr.loc31) -// CHECK:STDOUT: %.loc31_31.5: ref %Optional.552 = temporary %.loc31_31.4, %Iterate.WithSelf.Next.call -// CHECK:STDOUT: %.loc31_31.6: %Optional.HasValue.type.109 = specific_constant imports.%Core.import_ref.bb6, @Optional(constants.%OptionalStorage.facet.7ce) [concrete = constants.%Optional.HasValue.605] -// CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.109 = name_ref HasValue, %.loc31_31.6 [concrete = constants.%Optional.HasValue.605] -// CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc31_31.5, %HasValue.ref +// CHECK:STDOUT: %.loc31_31.7: ref %Optional.552 = temporary_storage +// CHECK:STDOUT: %Iterate.WithSelf.Next.call: init %Optional.552 to %.loc31_31.7 = call %bound_method.loc31_31.4(%r.ref, %addr.loc31) +// CHECK:STDOUT: %.loc31_31.8: ref %Optional.552 = temporary %.loc31_31.7, %Iterate.WithSelf.Next.call +// CHECK:STDOUT: %.loc31_31.9: %Optional.HasValue.type.109 = specific_constant imports.%Core.import_ref.bb6, @Optional(constants.%OptionalStorage.facet.7ce) [concrete = constants.%Optional.HasValue.605] +// CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.109 = name_ref HasValue, %.loc31_31.9 [concrete = constants.%Optional.HasValue.605] +// CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc31_31.8, %HasValue.ref // CHECK:STDOUT: %Optional.HasValue.specific_fn: = specific_function %HasValue.ref, @Optional.HasValue(constants.%OptionalStorage.facet.7ce) [concrete = constants.%Optional.HasValue.specific_fn] -// CHECK:STDOUT: %bound_method.loc31_31.5: = bound_method %.loc31_31.5, %Optional.HasValue.specific_fn -// CHECK:STDOUT: %.loc31_31.7: %Optional.552 = acquire_value %.loc31_31.5 -// CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc31_31.5(%.loc31_31.7) -// CHECK:STDOUT: %.loc31_31.8: bool = value_of_initializer %Optional.HasValue.call -// CHECK:STDOUT: %.loc31_31.9: bool = converted %Optional.HasValue.call, %.loc31_31.8 -// CHECK:STDOUT: if %.loc31_31.9 br !for.body else br !for.done +// CHECK:STDOUT: %bound_method.loc31_31.5: = bound_method %.loc31_31.8, %Optional.HasValue.specific_fn +// CHECK:STDOUT: %.loc31_31.10: %Optional.552 = acquire_value %.loc31_31.8 +// CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc31_31.5(%.loc31_31.10) +// CHECK:STDOUT: %.loc31_31.11: bool = value_of_initializer %Optional.HasValue.call +// CHECK:STDOUT: %.loc31_31.12: bool = converted %Optional.HasValue.call, %.loc31_31.11 +// CHECK:STDOUT: if %.loc31_31.12 br !for.body else br !for.done // CHECK:STDOUT: // CHECK:STDOUT: !for.body: -// CHECK:STDOUT: %.loc31_31.10: %Optional.Get.type.135 = specific_constant imports.%Core.import_ref.daba, @Optional(constants.%OptionalStorage.facet.7ce) [concrete = constants.%Optional.Get.5aa] -// CHECK:STDOUT: %Get.ref: %Optional.Get.type.135 = name_ref Get, %.loc31_31.10 [concrete = constants.%Optional.Get.5aa] -// CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc31_31.5, %Get.ref +// CHECK:STDOUT: %.loc31_31.13: %Optional.Get.type.135 = specific_constant imports.%Core.import_ref.daba, @Optional(constants.%OptionalStorage.facet.7ce) [concrete = constants.%Optional.Get.5aa] +// CHECK:STDOUT: %Get.ref: %Optional.Get.type.135 = name_ref Get, %.loc31_31.13 [concrete = constants.%Optional.Get.5aa] +// CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc31_31.8, %Get.ref // CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Get.ref, @Optional.Get(constants.%OptionalStorage.facet.7ce) [concrete = constants.%Optional.Get.specific_fn] -// CHECK:STDOUT: %bound_method.loc31_31.6: = bound_method %.loc31_31.5, %Optional.Get.specific_fn -// CHECK:STDOUT: %.loc31_31.11: ref %ValueType = temporary_storage -// CHECK:STDOUT: %.loc31_31.12: %Optional.552 = acquire_value %.loc31_31.5 -// CHECK:STDOUT: %Optional.Get.call: init %ValueType to %.loc31_31.11 = call %bound_method.loc31_31.6(%.loc31_31.12) +// CHECK:STDOUT: %bound_method.loc31_31.6: = bound_method %.loc31_31.8, %Optional.Get.specific_fn +// CHECK:STDOUT: %.loc31_31.14: ref %ValueType = temporary_storage +// CHECK:STDOUT: %.loc31_31.15: %Optional.552 = acquire_value %.loc31_31.8 +// CHECK:STDOUT: %Optional.Get.call: init %ValueType to %.loc31_31.14 = call %bound_method.loc31_31.6(%.loc31_31.15) +// CHECK:STDOUT: %.loc31_31.16: ref %ValueType = temporary %.loc31_31.14, %Optional.Get.call +// CHECK:STDOUT: %.loc31_31.17: %ValueType = acquire_value %.loc31_31.16 // CHECK:STDOUT: %.loc31_16: type = splice_block %ValueType.ref.loc31 [concrete = constants.%ValueType] { // CHECK:STDOUT: %Cpp.ref.loc31: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %N.ref.loc31: = name_ref N, imports.%N [concrete = imports.%N] // CHECK:STDOUT: %ValueType.ref.loc31: type = name_ref ValueType, imports.%ValueType.decl [concrete = constants.%ValueType] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc31_31.13: ref %ValueType = temporary %.loc31_31.11, %Optional.Get.call -// CHECK:STDOUT: %.loc31_31.14: %ValueType = acquire_value %.loc31_31.13 -// CHECK:STDOUT: %i: %ValueType = value_binding i, %.loc31_31.14 +// CHECK:STDOUT: %i: %ValueType = value_binding i, %.loc31_31.17 // CHECK:STDOUT: %sum.ref: ref %ValueType = name_ref sum, %sum // CHECK:STDOUT: %i.ref: %ValueType = name_ref i, %i // CHECK:STDOUT: %.loc32_12: ref %ValueType = value_as_ref %i.ref @@ -2513,15 +2599,16 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.done: -// CHECK:STDOUT: %ValueType.Op.bound.loc31: = bound_method %.loc31_31.13, constants.%ValueType.Op.4c94b9.1 +// CHECK:STDOUT: %ValueType.Op.bound.loc31: = bound_method %.loc31_31.16, constants.%ValueType.Op.4c94b9.1 // CHECK:STDOUT: %Op.ref.loc31: %ValueType.cpp_destructor.type = name_ref Op, imports.%ValueType.cpp_destructor.decl [concrete = constants.%ValueType.cpp_destructor] -// CHECK:STDOUT: %ValueType.cpp_destructor.bound.loc31: = bound_method %.loc31_31.13, %Op.ref.loc31 -// CHECK:STDOUT: %ValueType.cpp_destructor.call.loc31: init %empty_tuple.type = call %ValueType.cpp_destructor.bound.loc31(%.loc31_31.13) -// CHECK:STDOUT: %Destroy.Op.bound: = bound_method %.loc31_31.5, constants.%Destroy.Op.1a2547.7 -// CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%.loc31_31.5) -// CHECK:STDOUT: %impl.elem0.loc31_31.1: @Test.%.loc31_31.18 (%.bc1) = impl_witness_access constants.%Destroy.lookup_impl_witness.f37, element0 [symbolic = %impl.elem0.loc31_31.2 (constants.%impl.elem0.c7c)] +// CHECK:STDOUT: %ValueType.cpp_destructor.bound.loc31: = bound_method %.loc31_31.16, %Op.ref.loc31 +// CHECK:STDOUT: %ValueType.cpp_destructor.call.loc31: init %empty_tuple.type = call %ValueType.cpp_destructor.bound.loc31(%.loc31_31.16) +// CHECK:STDOUT: %Destroy.Op.bound: = bound_method %.loc31_31.8, constants.%Destroy.Op.1a2547.7 +// CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%.loc31_31.8) +// CHECK:STDOUT: %impl.elem0.loc31_31.1: @Test.%.loc31_31.22 (%.bc1) = impl_witness_access constants.%Destroy.lookup_impl_witness.f37, element0 [symbolic = %impl.elem0.loc31_31.2 (constants.%impl.elem0.c7c)] // CHECK:STDOUT: %bound_method.loc31_31.7: = bound_method %var, %impl.elem0.loc31_31.1 -// CHECK:STDOUT: %.loc31_31.15: %Destroy.type = converted constants.%as_type.862, constants.%impl.elem1.46a [symbolic = %impl.elem1 (constants.%impl.elem1.46a)] +// CHECK:STDOUT: %.loc31_31.18: %Destroy.type = converted constants.%as_type.862, constants.%impl.elem1.46a [symbolic = %impl.elem1 (constants.%impl.elem1.46a)] +// CHECK:STDOUT: %.loc31_31.19: %Destroy.type = converted constants.%as_type.862, constants.%impl.elem1.46a [symbolic = %impl.elem1 (constants.%impl.elem1.46a)] // CHECK:STDOUT: %specific_impl_fn.loc31_31.3: = specific_impl_function %impl.elem0.loc31_31.1, @Destroy.WithSelf.Op(constants.%impl.elem1.46a) [symbolic = %specific_impl_fn.loc31_31.6 (constants.%specific_impl_fn.cd3)] // CHECK:STDOUT: %bound_method.loc31_31.8: = bound_method %var, %specific_impl_fn.loc31_31.3 // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc31_31.8(%var) @@ -2557,22 +2644,28 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Test(constants.%R.623) { +// CHECK:STDOUT: %R.patt.loc27_10.2 => constants.%R.patt.324 // CHECK:STDOUT: %R.loc27_10.1 => constants.%R.623 // CHECK:STDOUT: %R.as_type.loc27_67.1 => constants.%R.as_type.a62 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.725 +// CHECK:STDOUT: %r.param_patt.loc27_65.2 => constants.%r.param_patt.162 +// CHECK:STDOUT: %r.patt.loc27_65.2 => constants.%r.patt.15b // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Test(constants.%facet_value.00d) { +// CHECK:STDOUT: %R.patt.loc27_10.2 => constants.%R.patt.324 // CHECK:STDOUT: %R.loc27_10.1 => constants.%facet_value.00d // CHECK:STDOUT: %R.as_type.loc27_67.1 => constants.%ConstRange // CHECK:STDOUT: %pattern_type => constants.%pattern_type.025 +// CHECK:STDOUT: %r.param_patt.loc27_65.2 => constants.%r.param_patt.a73 +// CHECK:STDOUT: %r.patt.loc27_65.2 => constants.%r.patt.0e2 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc27 => constants.%complete_type.357 // CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.466 -// CHECK:STDOUT: %Iterate.facet.loc31_31.3 => constants.%Iterate.facet.099 +// CHECK:STDOUT: %Iterate.facet.loc31_31.5 => constants.%Iterate.facet.099 // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.e43 -// CHECK:STDOUT: %.loc31_31.16 => constants.%.da4e +// CHECK:STDOUT: %.loc31_31.20 => constants.%.da4e // CHECK:STDOUT: %impl.elem2.loc31_31.2 => constants.%R.as_type.as.Iterate.impl.NewCursor.a27 // CHECK:STDOUT: %specific_impl_fn.loc31_31.4 => constants.%R.as_type.as.Iterate.impl.NewCursor.specific_fn // CHECK:STDOUT: %impl.elem1 => constants.%Destroy.facet.777 @@ -2580,11 +2673,11 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %require_complete.1 => constants.%complete_type.e35 // CHECK:STDOUT: %ptr => constants.%ptr.fc0 // CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.be4 -// CHECK:STDOUT: %.loc31_31.17 => constants.%.4b8 +// CHECK:STDOUT: %.loc31_31.21 => constants.%.4b8 // CHECK:STDOUT: %impl.elem3.loc31_31.2 => constants.%R.as_type.as.Iterate.impl.Next.bf3 // CHECK:STDOUT: %specific_impl_fn.loc31_31.5 => constants.%R.as_type.as.Iterate.impl.Next.specific_fn // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.589 -// CHECK:STDOUT: %.loc31_31.18 => constants.%.4e1 +// CHECK:STDOUT: %.loc31_31.22 => constants.%.4e1 // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.df9cc1.8 // CHECK:STDOUT: %impl.elem0.loc31_31.2 => constants.%Destroy.Op.1a2547.8 // CHECK:STDOUT: %specific_impl_fn.loc31_31.6 => constants.%Destroy.Op.1a2547.8 @@ -2627,9 +2720,14 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %custom_witness.c19: = custom_witness (%ValueType.Op.4c94b9.2), @Copy [concrete] // CHECK:STDOUT: %facet_value.ccb: %facet_type = facet_value %ValueType, (%custom_witness.fef, %custom_witness.c19) [concrete] // CHECK:STDOUT: %Iterate_where.type.99d: type = facet_type <@Iterate where %impl.elem0.903 = %facet_value.ccb> [concrete] +// CHECK:STDOUT: %pattern_type.3f6: type = pattern_type %Iterate_where.type.99d [concrete] +// CHECK:STDOUT: %R.patt.324: %pattern_type.3f6 = symbolic_binding_pattern R, 0 [symbolic] // CHECK:STDOUT: %R.623: %Iterate_where.type.99d = symbolic_binding R, 0 [symbolic] // CHECK:STDOUT: %R.as_type.a62: type = facet_access_type %R.623 [symbolic] // CHECK:STDOUT: %pattern_type.725: type = pattern_type %R.as_type.a62 [symbolic] +// CHECK:STDOUT: %r.param_patt: %pattern_type.725 = value_param_pattern [symbolic] +// CHECK:STDOUT: %r.patt: %pattern_type.725 = at_binding_pattern r, %r.param_patt [symbolic] +// CHECK:STDOUT: %i.patt: %pattern_type.e41 = value_binding_pattern i [concrete] // CHECK:STDOUT: %Iterate.lookup_impl_witness.8b4: = lookup_impl_witness %R.623, @Iterate [symbolic] // CHECK:STDOUT: %Iterate.facet: %Iterate.type = facet_value %R.as_type.a62, (%Iterate.lookup_impl_witness.8b4) [symbolic] // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.217: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet) [symbolic] @@ -2708,34 +2806,36 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: %Iterate.lookup_impl_witness: = lookup_impl_witness %R.loc28_10.1, @Iterate [symbolic = %Iterate.lookup_impl_witness (constants.%Iterate.lookup_impl_witness.8b4)] -// CHECK:STDOUT: %Iterate.facet.loc32_31.3: %Iterate.type = facet_value %R.as_type.loc28_67.1, (%Iterate.lookup_impl_witness) [symbolic = %Iterate.facet.loc32_31.3 (constants.%Iterate.facet)] -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.loc32_31.3) [symbolic = %Iterate.WithSelf.NewCursor.type (constants.%Iterate.WithSelf.NewCursor.type.217)] -// CHECK:STDOUT: %.loc32_31.16: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type, %Iterate.facet.loc32_31.3 [symbolic = %.loc32_31.16 (constants.%.a27)] -// CHECK:STDOUT: %impl.elem2.loc32_31.2: @Test.%.loc32_31.16 (%.a27) = impl_witness_access %Iterate.lookup_impl_witness, element2 [symbolic = %impl.elem2.loc32_31.2 (constants.%impl.elem2.7c0)] -// CHECK:STDOUT: %specific_impl_fn.loc32_31.4: = specific_impl_function %impl.elem2.loc32_31.2, @Iterate.WithSelf.NewCursor(%Iterate.facet.loc32_31.3) [symbolic = %specific_impl_fn.loc32_31.4 (constants.%specific_impl_fn.e23)] +// CHECK:STDOUT: %Iterate.facet.loc32_31.5: %Iterate.type = facet_value %R.as_type.loc28_67.1, (%Iterate.lookup_impl_witness) [symbolic = %Iterate.facet.loc32_31.5 (constants.%Iterate.facet)] +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.loc32_31.5) [symbolic = %Iterate.WithSelf.NewCursor.type (constants.%Iterate.WithSelf.NewCursor.type.217)] +// CHECK:STDOUT: %.loc32_31.20: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type, %Iterate.facet.loc32_31.5 [symbolic = %.loc32_31.20 (constants.%.a27)] +// CHECK:STDOUT: %impl.elem2.loc32_31.2: @Test.%.loc32_31.20 (%.a27) = impl_witness_access %Iterate.lookup_impl_witness, element2 [symbolic = %impl.elem2.loc32_31.2 (constants.%impl.elem2.7c0)] +// CHECK:STDOUT: %specific_impl_fn.loc32_31.4: = specific_impl_function %impl.elem2.loc32_31.2, @Iterate.WithSelf.NewCursor(%Iterate.facet.loc32_31.5) [symbolic = %specific_impl_fn.loc32_31.4 (constants.%specific_impl_fn.e23)] // CHECK:STDOUT: // CHECK:STDOUT: %ptr: type = ptr_type %as_type [symbolic = %ptr (constants.%ptr.530)] -// CHECK:STDOUT: %Iterate.WithSelf.Next.type: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.loc32_31.3) [symbolic = %Iterate.WithSelf.Next.type (constants.%Iterate.WithSelf.Next.type.10a)] -// CHECK:STDOUT: %.loc32_31.17: type = fn_type_with_self_type %Iterate.WithSelf.Next.type, %Iterate.facet.loc32_31.3 [symbolic = %.loc32_31.17 (constants.%.df57)] -// CHECK:STDOUT: %impl.elem3.loc32_31.2: @Test.%.loc32_31.17 (%.df57) = impl_witness_access %Iterate.lookup_impl_witness, element3 [symbolic = %impl.elem3.loc32_31.2 (constants.%impl.elem3.199)] -// CHECK:STDOUT: %specific_impl_fn.loc32_31.5: = specific_impl_function %impl.elem3.loc32_31.2, @Iterate.WithSelf.Next(%Iterate.facet.loc32_31.3) [symbolic = %specific_impl_fn.loc32_31.5 (constants.%specific_impl_fn.169)] +// CHECK:STDOUT: %Iterate.WithSelf.Next.type: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.loc32_31.5) [symbolic = %Iterate.WithSelf.Next.type (constants.%Iterate.WithSelf.Next.type.10a)] +// CHECK:STDOUT: %.loc32_31.21: type = fn_type_with_self_type %Iterate.WithSelf.Next.type, %Iterate.facet.loc32_31.5 [symbolic = %.loc32_31.21 (constants.%.df57)] +// CHECK:STDOUT: %impl.elem3.loc32_31.2: @Test.%.loc32_31.21 (%.df57) = impl_witness_access %Iterate.lookup_impl_witness, element3 [symbolic = %impl.elem3.loc32_31.2 (constants.%impl.elem3.199)] +// CHECK:STDOUT: %specific_impl_fn.loc32_31.5: = specific_impl_function %impl.elem3.loc32_31.2, @Iterate.WithSelf.Next(%Iterate.facet.loc32_31.5) [symbolic = %specific_impl_fn.loc32_31.5 (constants.%specific_impl_fn.169)] // CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%impl.elem1) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.e7e)] -// CHECK:STDOUT: %.loc32_31.18: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %impl.elem1 [symbolic = %.loc32_31.18 (constants.%.bc1)] +// CHECK:STDOUT: %.loc32_31.22: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %impl.elem1 [symbolic = %.loc32_31.22 (constants.%.bc1)] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %impl.elem1, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness.f37)] -// CHECK:STDOUT: %impl.elem0.loc32_31.2: @Test.%.loc32_31.18 (%.bc1) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc32_31.2 (constants.%impl.elem0.c7c)] +// CHECK:STDOUT: %impl.elem0.loc32_31.2: @Test.%.loc32_31.22 (%.bc1) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc32_31.2 (constants.%impl.elem0.c7c)] // CHECK:STDOUT: %specific_impl_fn.loc32_31.6: = specific_impl_function %impl.elem0.loc32_31.2, @Destroy.WithSelf.Op(%impl.elem1) [symbolic = %specific_impl_fn.loc32_31.6 (constants.%specific_impl_fn.cd3)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%r.param: @Test.%R.as_type.loc28_67.1 (%R.as_type.a62)) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %i.patt: %pattern_type.e41 = value_binding_pattern i [concrete] +// CHECK:STDOUT: %i.patt: %pattern_type.e41 = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %r.ref: @Test.%R.as_type.loc28_67.1 (%R.as_type.a62) = name_ref r, %r -// CHECK:STDOUT: %impl.elem2.loc32_31.1: @Test.%.loc32_31.16 (%.a27) = impl_witness_access constants.%Iterate.lookup_impl_witness.8b4, element2 [symbolic = %impl.elem2.loc32_31.2 (constants.%impl.elem2.7c0)] +// CHECK:STDOUT: %impl.elem2.loc32_31.1: @Test.%.loc32_31.20 (%.a27) = impl_witness_access constants.%Iterate.lookup_impl_witness.8b4, element2 [symbolic = %impl.elem2.loc32_31.2 (constants.%impl.elem2.7c0)] // CHECK:STDOUT: %bound_method.loc32_31.1: = bound_method %r.ref, %impl.elem2.loc32_31.1 -// CHECK:STDOUT: %Iterate.facet.loc32_31.1: %Iterate.type = facet_value constants.%R.as_type.a62, (constants.%Iterate.lookup_impl_witness.8b4) [symbolic = %Iterate.facet.loc32_31.3 (constants.%Iterate.facet)] -// CHECK:STDOUT: %.loc32_31.1: %Iterate.type = converted constants.%R.as_type.a62, %Iterate.facet.loc32_31.1 [symbolic = %Iterate.facet.loc32_31.3 (constants.%Iterate.facet)] +// CHECK:STDOUT: %Iterate.facet.loc32_31.1: %Iterate.type = facet_value constants.%R.as_type.a62, (constants.%Iterate.lookup_impl_witness.8b4) [symbolic = %Iterate.facet.loc32_31.5 (constants.%Iterate.facet)] +// CHECK:STDOUT: %.loc32_31.1: %Iterate.type = converted constants.%R.as_type.a62, %Iterate.facet.loc32_31.1 [symbolic = %Iterate.facet.loc32_31.5 (constants.%Iterate.facet)] +// CHECK:STDOUT: %Iterate.facet.loc32_31.2: %Iterate.type = facet_value constants.%R.as_type.a62, (constants.%Iterate.lookup_impl_witness.8b4) [symbolic = %Iterate.facet.loc32_31.5 (constants.%Iterate.facet)] +// CHECK:STDOUT: %.loc32_31.2: %Iterate.type = converted constants.%R.as_type.a62, %Iterate.facet.loc32_31.2 [symbolic = %Iterate.facet.loc32_31.5 (constants.%Iterate.facet)] // CHECK:STDOUT: %specific_impl_fn.loc32_31.1: = specific_impl_function %impl.elem2.loc32_31.1, @Iterate.WithSelf.NewCursor(constants.%Iterate.facet) [symbolic = %specific_impl_fn.loc32_31.4 (constants.%specific_impl_fn.e23)] // CHECK:STDOUT: %bound_method.loc32_31.2: = bound_method %r.ref, %specific_impl_fn.loc32_31.1 // CHECK:STDOUT: %var: ref @Test.%as_type (%as_type.862) = var invalid @@ -2745,44 +2845,47 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: // CHECK:STDOUT: !for.next: // CHECK:STDOUT: %addr.loc32: @Test.%ptr (%ptr.530) = addr_of %var -// CHECK:STDOUT: %impl.elem3.loc32_31.1: @Test.%.loc32_31.17 (%.df57) = impl_witness_access constants.%Iterate.lookup_impl_witness.8b4, element3 [symbolic = %impl.elem3.loc32_31.2 (constants.%impl.elem3.199)] +// CHECK:STDOUT: %impl.elem3.loc32_31.1: @Test.%.loc32_31.21 (%.df57) = impl_witness_access constants.%Iterate.lookup_impl_witness.8b4, element3 [symbolic = %impl.elem3.loc32_31.2 (constants.%impl.elem3.199)] // CHECK:STDOUT: %bound_method.loc32_31.3: = bound_method %r.ref, %impl.elem3.loc32_31.1 -// CHECK:STDOUT: %Iterate.facet.loc32_31.2: %Iterate.type = facet_value constants.%R.as_type.a62, (constants.%Iterate.lookup_impl_witness.8b4) [symbolic = %Iterate.facet.loc32_31.3 (constants.%Iterate.facet)] -// CHECK:STDOUT: %.loc32_31.2: %Iterate.type = converted constants.%R.as_type.a62, %Iterate.facet.loc32_31.2 [symbolic = %Iterate.facet.loc32_31.3 (constants.%Iterate.facet)] -// CHECK:STDOUT: %.loc32_31.3: %Destroy.type = converted constants.%as_type.862, constants.%impl.elem1.46a [symbolic = %impl.elem1 (constants.%impl.elem1.46a)] +// CHECK:STDOUT: %Iterate.facet.loc32_31.3: %Iterate.type = facet_value constants.%R.as_type.a62, (constants.%Iterate.lookup_impl_witness.8b4) [symbolic = %Iterate.facet.loc32_31.5 (constants.%Iterate.facet)] +// CHECK:STDOUT: %.loc32_31.3: %Iterate.type = converted constants.%R.as_type.a62, %Iterate.facet.loc32_31.3 [symbolic = %Iterate.facet.loc32_31.5 (constants.%Iterate.facet)] +// CHECK:STDOUT: %Iterate.facet.loc32_31.4: %Iterate.type = facet_value constants.%R.as_type.a62, (constants.%Iterate.lookup_impl_witness.8b4) [symbolic = %Iterate.facet.loc32_31.5 (constants.%Iterate.facet)] +// CHECK:STDOUT: %.loc32_31.4: %Iterate.type = converted constants.%R.as_type.a62, %Iterate.facet.loc32_31.4 [symbolic = %Iterate.facet.loc32_31.5 (constants.%Iterate.facet)] +// CHECK:STDOUT: %.loc32_31.5: %Destroy.type = converted constants.%as_type.862, constants.%impl.elem1.46a [symbolic = %impl.elem1 (constants.%impl.elem1.46a)] +// CHECK:STDOUT: %.loc32_31.6: %Destroy.type = converted constants.%as_type.862, constants.%impl.elem1.46a [symbolic = %impl.elem1 (constants.%impl.elem1.46a)] // CHECK:STDOUT: %specific_impl_fn.loc32_31.2: = specific_impl_function %impl.elem3.loc32_31.1, @Iterate.WithSelf.Next(constants.%Iterate.facet) [symbolic = %specific_impl_fn.loc32_31.5 (constants.%specific_impl_fn.169)] // CHECK:STDOUT: %bound_method.loc32_31.4: = bound_method %r.ref, %specific_impl_fn.loc32_31.2 -// CHECK:STDOUT: %.loc32_31.4: ref %Optional.be6 = temporary_storage -// CHECK:STDOUT: %Iterate.WithSelf.Next.call: init %Optional.be6 to %.loc32_31.4 = call %bound_method.loc32_31.4(%r.ref, %addr.loc32) -// CHECK:STDOUT: %.loc32_31.5: ref %Optional.be6 = temporary %.loc32_31.4, %Iterate.WithSelf.Next.call -// CHECK:STDOUT: %.loc32_31.6: %Optional.HasValue.type.2bf = specific_constant imports.%Core.import_ref.bb6, @Optional(constants.%OptionalStorage.facet.642) [concrete = constants.%Optional.HasValue.cdf] -// CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.2bf = name_ref HasValue, %.loc32_31.6 [concrete = constants.%Optional.HasValue.cdf] -// CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc32_31.5, %HasValue.ref +// CHECK:STDOUT: %.loc32_31.7: ref %Optional.be6 = temporary_storage +// CHECK:STDOUT: %Iterate.WithSelf.Next.call: init %Optional.be6 to %.loc32_31.7 = call %bound_method.loc32_31.4(%r.ref, %addr.loc32) +// CHECK:STDOUT: %.loc32_31.8: ref %Optional.be6 = temporary %.loc32_31.7, %Iterate.WithSelf.Next.call +// CHECK:STDOUT: %.loc32_31.9: %Optional.HasValue.type.2bf = specific_constant imports.%Core.import_ref.bb6, @Optional(constants.%OptionalStorage.facet.642) [concrete = constants.%Optional.HasValue.cdf] +// CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.2bf = name_ref HasValue, %.loc32_31.9 [concrete = constants.%Optional.HasValue.cdf] +// CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc32_31.8, %HasValue.ref // CHECK:STDOUT: %Optional.HasValue.specific_fn: = specific_function %HasValue.ref, @Optional.HasValue(constants.%OptionalStorage.facet.642) [concrete = constants.%Optional.HasValue.specific_fn] -// CHECK:STDOUT: %bound_method.loc32_31.5: = bound_method %.loc32_31.5, %Optional.HasValue.specific_fn -// CHECK:STDOUT: %.loc32_31.7: %Optional.be6 = acquire_value %.loc32_31.5 -// CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc32_31.5(%.loc32_31.7) -// CHECK:STDOUT: %.loc32_31.8: bool = value_of_initializer %Optional.HasValue.call -// CHECK:STDOUT: %.loc32_31.9: bool = converted %Optional.HasValue.call, %.loc32_31.8 -// CHECK:STDOUT: if %.loc32_31.9 br !for.body else br !for.done +// CHECK:STDOUT: %bound_method.loc32_31.5: = bound_method %.loc32_31.8, %Optional.HasValue.specific_fn +// CHECK:STDOUT: %.loc32_31.10: %Optional.be6 = acquire_value %.loc32_31.8 +// CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc32_31.5(%.loc32_31.10) +// CHECK:STDOUT: %.loc32_31.11: bool = value_of_initializer %Optional.HasValue.call +// CHECK:STDOUT: %.loc32_31.12: bool = converted %Optional.HasValue.call, %.loc32_31.11 +// CHECK:STDOUT: if %.loc32_31.12 br !for.body else br !for.done // CHECK:STDOUT: // CHECK:STDOUT: !for.body: -// CHECK:STDOUT: %.loc32_31.10: %Optional.Get.type.112 = specific_constant imports.%Core.import_ref.daba, @Optional(constants.%OptionalStorage.facet.642) [concrete = constants.%Optional.Get.6bf] -// CHECK:STDOUT: %Get.ref: %Optional.Get.type.112 = name_ref Get, %.loc32_31.10 [concrete = constants.%Optional.Get.6bf] -// CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc32_31.5, %Get.ref +// CHECK:STDOUT: %.loc32_31.13: %Optional.Get.type.112 = specific_constant imports.%Core.import_ref.daba, @Optional(constants.%OptionalStorage.facet.642) [concrete = constants.%Optional.Get.6bf] +// CHECK:STDOUT: %Get.ref: %Optional.Get.type.112 = name_ref Get, %.loc32_31.13 [concrete = constants.%Optional.Get.6bf] +// CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc32_31.8, %Get.ref // CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Get.ref, @Optional.Get(constants.%OptionalStorage.facet.642) [concrete = constants.%Optional.Get.specific_fn] -// CHECK:STDOUT: %bound_method.loc32_31.6: = bound_method %.loc32_31.5, %Optional.Get.specific_fn -// CHECK:STDOUT: %.loc32_31.11: ref %ValueType = temporary_storage -// CHECK:STDOUT: %.loc32_31.12: %Optional.be6 = acquire_value %.loc32_31.5 -// CHECK:STDOUT: %Optional.Get.call: init %ValueType to %.loc32_31.11 = call %bound_method.loc32_31.6(%.loc32_31.12) +// CHECK:STDOUT: %bound_method.loc32_31.6: = bound_method %.loc32_31.8, %Optional.Get.specific_fn +// CHECK:STDOUT: %.loc32_31.14: ref %ValueType = temporary_storage +// CHECK:STDOUT: %.loc32_31.15: %Optional.be6 = acquire_value %.loc32_31.8 +// CHECK:STDOUT: %Optional.Get.call: init %ValueType to %.loc32_31.14 = call %bound_method.loc32_31.6(%.loc32_31.15) +// CHECK:STDOUT: %.loc32_31.16: ref %ValueType = temporary %.loc32_31.14, %Optional.Get.call +// CHECK:STDOUT: %.loc32_31.17: %ValueType = acquire_value %.loc32_31.16 // CHECK:STDOUT: %.loc32_16: type = splice_block %ValueType.ref.loc32 [concrete = constants.%ValueType] { // CHECK:STDOUT: %Cpp.ref.loc32: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %N.ref.loc32: = name_ref N, imports.%N [concrete = imports.%N] // CHECK:STDOUT: %ValueType.ref.loc32: type = name_ref ValueType, imports.%ValueType.decl [concrete = constants.%ValueType] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc32_31.13: ref %ValueType = temporary %.loc32_31.11, %Optional.Get.call -// CHECK:STDOUT: %.loc32_31.14: %ValueType = acquire_value %.loc32_31.13 -// CHECK:STDOUT: %i: %ValueType = value_binding i, %.loc32_31.14 +// CHECK:STDOUT: %i: %ValueType = value_binding i, %.loc32_31.17 // CHECK:STDOUT: %sum.ref: ref %ValueType = name_ref sum, %sum // CHECK:STDOUT: %i.ref: %ValueType = name_ref i, %i // CHECK:STDOUT: %.loc33_12: ref %ValueType = value_as_ref %i.ref @@ -2793,15 +2896,16 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.done: -// CHECK:STDOUT: %ValueType.Op.bound.loc32: = bound_method %.loc32_31.13, constants.%ValueType.Op.4c94b9.1 +// CHECK:STDOUT: %ValueType.Op.bound.loc32: = bound_method %.loc32_31.16, constants.%ValueType.Op.4c94b9.1 // CHECK:STDOUT: %Op.ref.loc32: %ValueType.cpp_destructor.type = name_ref Op, imports.%ValueType.cpp_destructor.decl [concrete = constants.%ValueType.cpp_destructor] -// CHECK:STDOUT: %ValueType.cpp_destructor.bound.loc32: = bound_method %.loc32_31.13, %Op.ref.loc32 -// CHECK:STDOUT: %ValueType.cpp_destructor.call.loc32: init %empty_tuple.type = call %ValueType.cpp_destructor.bound.loc32(%.loc32_31.13) -// CHECK:STDOUT: %Destroy.Op.bound: = bound_method %.loc32_31.5, constants.%Destroy.Op.1a2547.7 -// CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%.loc32_31.5) -// CHECK:STDOUT: %impl.elem0.loc32_31.1: @Test.%.loc32_31.18 (%.bc1) = impl_witness_access constants.%Destroy.lookup_impl_witness.f37, element0 [symbolic = %impl.elem0.loc32_31.2 (constants.%impl.elem0.c7c)] +// CHECK:STDOUT: %ValueType.cpp_destructor.bound.loc32: = bound_method %.loc32_31.16, %Op.ref.loc32 +// CHECK:STDOUT: %ValueType.cpp_destructor.call.loc32: init %empty_tuple.type = call %ValueType.cpp_destructor.bound.loc32(%.loc32_31.16) +// CHECK:STDOUT: %Destroy.Op.bound: = bound_method %.loc32_31.8, constants.%Destroy.Op.1a2547.7 +// CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%.loc32_31.8) +// CHECK:STDOUT: %impl.elem0.loc32_31.1: @Test.%.loc32_31.22 (%.bc1) = impl_witness_access constants.%Destroy.lookup_impl_witness.f37, element0 [symbolic = %impl.elem0.loc32_31.2 (constants.%impl.elem0.c7c)] // CHECK:STDOUT: %bound_method.loc32_31.7: = bound_method %var, %impl.elem0.loc32_31.1 -// CHECK:STDOUT: %.loc32_31.15: %Destroy.type = converted constants.%as_type.862, constants.%impl.elem1.46a [symbolic = %impl.elem1 (constants.%impl.elem1.46a)] +// CHECK:STDOUT: %.loc32_31.18: %Destroy.type = converted constants.%as_type.862, constants.%impl.elem1.46a [symbolic = %impl.elem1 (constants.%impl.elem1.46a)] +// CHECK:STDOUT: %.loc32_31.19: %Destroy.type = converted constants.%as_type.862, constants.%impl.elem1.46a [symbolic = %impl.elem1 (constants.%impl.elem1.46a)] // CHECK:STDOUT: %specific_impl_fn.loc32_31.3: = specific_impl_function %impl.elem0.loc32_31.1, @Destroy.WithSelf.Op(constants.%impl.elem1.46a) [symbolic = %specific_impl_fn.loc32_31.6 (constants.%specific_impl_fn.cd3)] // CHECK:STDOUT: %bound_method.loc32_31.8: = bound_method %var, %specific_impl_fn.loc32_31.3 // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc32_31.8(%var) @@ -2837,9 +2941,12 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Test(constants.%R.623) { +// CHECK:STDOUT: %R.patt.loc28_10.2 => constants.%R.patt.324 // CHECK:STDOUT: %R.loc28_10.1 => constants.%R.623 // CHECK:STDOUT: %R.as_type.loc28_67.1 => constants.%R.as_type.a62 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.725 +// CHECK:STDOUT: %r.param_patt.loc28_65.2 => constants.%r.param_patt +// CHECK:STDOUT: %r.patt.loc28_65.2 => constants.%r.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_todo_adl_overloads.carbon @@ -2885,9 +2992,14 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %custom_witness.c19: = custom_witness (%ValueType.Op.4c94b9.2), @Copy [concrete] // CHECK:STDOUT: %facet_value.ccb: %facet_type = facet_value %ValueType, (%custom_witness.fef, %custom_witness.c19) [concrete] // CHECK:STDOUT: %Iterate_where.type.99d: type = facet_type <@Iterate where %impl.elem0.903 = %facet_value.ccb> [concrete] +// CHECK:STDOUT: %pattern_type.3f6: type = pattern_type %Iterate_where.type.99d [concrete] +// CHECK:STDOUT: %R.patt.324: %pattern_type.3f6 = symbolic_binding_pattern R, 0 [symbolic] // CHECK:STDOUT: %R.623: %Iterate_where.type.99d = symbolic_binding R, 0 [symbolic] // CHECK:STDOUT: %R.as_type.a62: type = facet_access_type %R.623 [symbolic] // CHECK:STDOUT: %pattern_type.725: type = pattern_type %R.as_type.a62 [symbolic] +// CHECK:STDOUT: %r.param_patt.162: %pattern_type.725 = value_param_pattern [symbolic] +// CHECK:STDOUT: %r.patt.15b: %pattern_type.725 = at_binding_pattern r, %r.param_patt.162 [symbolic] +// CHECK:STDOUT: %i.patt: %pattern_type.e41 = value_binding_pattern i [concrete] // CHECK:STDOUT: %CppRangeForIterate.type: type = facet_type <@CppRangeForIterate> [concrete] // CHECK:STDOUT: %.Self.6bd: %CppRangeForIterate.type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %CppRangeForIterate.lookup_impl_witness.143: = lookup_impl_witness %.Self.6bd, @CppRangeForIterate [symbolic_self] @@ -2986,6 +3098,8 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.683: %R.as_type.as.Iterate.impl.Next.type.b29 = struct_value () [concrete] // CHECK:STDOUT: %Iterate.facet.5cc: %Iterate.type = facet_value %MutableAndConstRange, (%Iterate.impl_witness.a6e) [concrete] // CHECK:STDOUT: %facet_value.0ec: %Iterate_where.type.99d = facet_value %MutableAndConstRange, (%Iterate.impl_witness.a6e) [concrete] +// CHECK:STDOUT: %r.param_patt.8bb: %pattern_type.394 = value_param_pattern [concrete] +// CHECK:STDOUT: %r.patt.ac4: %pattern_type.394 = at_binding_pattern r, %r.param_patt.8bb [concrete] // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.875: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.5cc) [concrete] // CHECK:STDOUT: %.7e3: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.875, %Iterate.facet.5cc [concrete] // CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.specific_fn: = specific_function %R.as_type.as.Iterate.impl.NewCursor.96c, @R.as_type.as.Iterate.impl.NewCursor(%facet_value.88d) [concrete] @@ -3042,34 +3156,36 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: %Iterate.lookup_impl_witness: = lookup_impl_witness %R.loc35_10.1, @Iterate [symbolic = %Iterate.lookup_impl_witness (constants.%Iterate.lookup_impl_witness.8b4)] -// CHECK:STDOUT: %Iterate.facet.loc39_31.3: %Iterate.type = facet_value %R.as_type.loc35_67.1, (%Iterate.lookup_impl_witness) [symbolic = %Iterate.facet.loc39_31.3 (constants.%Iterate.facet.b19)] -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.loc39_31.3) [symbolic = %Iterate.WithSelf.NewCursor.type (constants.%Iterate.WithSelf.NewCursor.type.217)] -// CHECK:STDOUT: %.loc39_31.16: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type, %Iterate.facet.loc39_31.3 [symbolic = %.loc39_31.16 (constants.%.a27)] -// CHECK:STDOUT: %impl.elem2.loc39_31.2: @Test.%.loc39_31.16 (%.a27) = impl_witness_access %Iterate.lookup_impl_witness, element2 [symbolic = %impl.elem2.loc39_31.2 (constants.%impl.elem2.7c0)] -// CHECK:STDOUT: %specific_impl_fn.loc39_31.4: = specific_impl_function %impl.elem2.loc39_31.2, @Iterate.WithSelf.NewCursor(%Iterate.facet.loc39_31.3) [symbolic = %specific_impl_fn.loc39_31.4 (constants.%specific_impl_fn.e23)] +// CHECK:STDOUT: %Iterate.facet.loc39_31.5: %Iterate.type = facet_value %R.as_type.loc35_67.1, (%Iterate.lookup_impl_witness) [symbolic = %Iterate.facet.loc39_31.5 (constants.%Iterate.facet.b19)] +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.loc39_31.5) [symbolic = %Iterate.WithSelf.NewCursor.type (constants.%Iterate.WithSelf.NewCursor.type.217)] +// CHECK:STDOUT: %.loc39_31.20: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type, %Iterate.facet.loc39_31.5 [symbolic = %.loc39_31.20 (constants.%.a27)] +// CHECK:STDOUT: %impl.elem2.loc39_31.2: @Test.%.loc39_31.20 (%.a27) = impl_witness_access %Iterate.lookup_impl_witness, element2 [symbolic = %impl.elem2.loc39_31.2 (constants.%impl.elem2.7c0)] +// CHECK:STDOUT: %specific_impl_fn.loc39_31.4: = specific_impl_function %impl.elem2.loc39_31.2, @Iterate.WithSelf.NewCursor(%Iterate.facet.loc39_31.5) [symbolic = %specific_impl_fn.loc39_31.4 (constants.%specific_impl_fn.e23)] // CHECK:STDOUT: // CHECK:STDOUT: %ptr: type = ptr_type %as_type [symbolic = %ptr (constants.%ptr.530)] -// CHECK:STDOUT: %Iterate.WithSelf.Next.type: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.loc39_31.3) [symbolic = %Iterate.WithSelf.Next.type (constants.%Iterate.WithSelf.Next.type.10a)] -// CHECK:STDOUT: %.loc39_31.17: type = fn_type_with_self_type %Iterate.WithSelf.Next.type, %Iterate.facet.loc39_31.3 [symbolic = %.loc39_31.17 (constants.%.df57)] -// CHECK:STDOUT: %impl.elem3.loc39_31.2: @Test.%.loc39_31.17 (%.df57) = impl_witness_access %Iterate.lookup_impl_witness, element3 [symbolic = %impl.elem3.loc39_31.2 (constants.%impl.elem3.199)] -// CHECK:STDOUT: %specific_impl_fn.loc39_31.5: = specific_impl_function %impl.elem3.loc39_31.2, @Iterate.WithSelf.Next(%Iterate.facet.loc39_31.3) [symbolic = %specific_impl_fn.loc39_31.5 (constants.%specific_impl_fn.169)] +// CHECK:STDOUT: %Iterate.WithSelf.Next.type: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.loc39_31.5) [symbolic = %Iterate.WithSelf.Next.type (constants.%Iterate.WithSelf.Next.type.10a)] +// CHECK:STDOUT: %.loc39_31.21: type = fn_type_with_self_type %Iterate.WithSelf.Next.type, %Iterate.facet.loc39_31.5 [symbolic = %.loc39_31.21 (constants.%.df57)] +// CHECK:STDOUT: %impl.elem3.loc39_31.2: @Test.%.loc39_31.21 (%.df57) = impl_witness_access %Iterate.lookup_impl_witness, element3 [symbolic = %impl.elem3.loc39_31.2 (constants.%impl.elem3.199)] +// CHECK:STDOUT: %specific_impl_fn.loc39_31.5: = specific_impl_function %impl.elem3.loc39_31.2, @Iterate.WithSelf.Next(%Iterate.facet.loc39_31.5) [symbolic = %specific_impl_fn.loc39_31.5 (constants.%specific_impl_fn.169)] // CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%impl.elem1) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.e7e)] -// CHECK:STDOUT: %.loc39_31.18: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %impl.elem1 [symbolic = %.loc39_31.18 (constants.%.bc1)] +// CHECK:STDOUT: %.loc39_31.22: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %impl.elem1 [symbolic = %.loc39_31.22 (constants.%.bc1)] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %impl.elem1, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness.f37)] -// CHECK:STDOUT: %impl.elem0.loc39_31.2: @Test.%.loc39_31.18 (%.bc1) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc39_31.2 (constants.%impl.elem0.c7c)] +// CHECK:STDOUT: %impl.elem0.loc39_31.2: @Test.%.loc39_31.22 (%.bc1) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc39_31.2 (constants.%impl.elem0.c7c)] // CHECK:STDOUT: %specific_impl_fn.loc39_31.6: = specific_impl_function %impl.elem0.loc39_31.2, @Destroy.WithSelf.Op(%impl.elem1) [symbolic = %specific_impl_fn.loc39_31.6 (constants.%specific_impl_fn.cd3)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%r.param: @Test.%R.as_type.loc35_67.1 (%R.as_type.a62)) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %i.patt: %pattern_type.e41 = value_binding_pattern i [concrete] +// CHECK:STDOUT: %i.patt: %pattern_type.e41 = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %r.ref: @Test.%R.as_type.loc35_67.1 (%R.as_type.a62) = name_ref r, %r -// CHECK:STDOUT: %impl.elem2.loc39_31.1: @Test.%.loc39_31.16 (%.a27) = impl_witness_access constants.%Iterate.lookup_impl_witness.8b4, element2 [symbolic = %impl.elem2.loc39_31.2 (constants.%impl.elem2.7c0)] +// CHECK:STDOUT: %impl.elem2.loc39_31.1: @Test.%.loc39_31.20 (%.a27) = impl_witness_access constants.%Iterate.lookup_impl_witness.8b4, element2 [symbolic = %impl.elem2.loc39_31.2 (constants.%impl.elem2.7c0)] // CHECK:STDOUT: %bound_method.loc39_31.1: = bound_method %r.ref, %impl.elem2.loc39_31.1 -// CHECK:STDOUT: %Iterate.facet.loc39_31.1: %Iterate.type = facet_value constants.%R.as_type.a62, (constants.%Iterate.lookup_impl_witness.8b4) [symbolic = %Iterate.facet.loc39_31.3 (constants.%Iterate.facet.b19)] -// CHECK:STDOUT: %.loc39_31.1: %Iterate.type = converted constants.%R.as_type.a62, %Iterate.facet.loc39_31.1 [symbolic = %Iterate.facet.loc39_31.3 (constants.%Iterate.facet.b19)] +// CHECK:STDOUT: %Iterate.facet.loc39_31.1: %Iterate.type = facet_value constants.%R.as_type.a62, (constants.%Iterate.lookup_impl_witness.8b4) [symbolic = %Iterate.facet.loc39_31.5 (constants.%Iterate.facet.b19)] +// CHECK:STDOUT: %.loc39_31.1: %Iterate.type = converted constants.%R.as_type.a62, %Iterate.facet.loc39_31.1 [symbolic = %Iterate.facet.loc39_31.5 (constants.%Iterate.facet.b19)] +// CHECK:STDOUT: %Iterate.facet.loc39_31.2: %Iterate.type = facet_value constants.%R.as_type.a62, (constants.%Iterate.lookup_impl_witness.8b4) [symbolic = %Iterate.facet.loc39_31.5 (constants.%Iterate.facet.b19)] +// CHECK:STDOUT: %.loc39_31.2: %Iterate.type = converted constants.%R.as_type.a62, %Iterate.facet.loc39_31.2 [symbolic = %Iterate.facet.loc39_31.5 (constants.%Iterate.facet.b19)] // CHECK:STDOUT: %specific_impl_fn.loc39_31.1: = specific_impl_function %impl.elem2.loc39_31.1, @Iterate.WithSelf.NewCursor(constants.%Iterate.facet.b19) [symbolic = %specific_impl_fn.loc39_31.4 (constants.%specific_impl_fn.e23)] // CHECK:STDOUT: %bound_method.loc39_31.2: = bound_method %r.ref, %specific_impl_fn.loc39_31.1 // CHECK:STDOUT: %var: ref @Test.%as_type (%as_type.862) = var invalid @@ -3079,44 +3195,47 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: // CHECK:STDOUT: !for.next: // CHECK:STDOUT: %addr.loc39: @Test.%ptr (%ptr.530) = addr_of %var -// CHECK:STDOUT: %impl.elem3.loc39_31.1: @Test.%.loc39_31.17 (%.df57) = impl_witness_access constants.%Iterate.lookup_impl_witness.8b4, element3 [symbolic = %impl.elem3.loc39_31.2 (constants.%impl.elem3.199)] +// CHECK:STDOUT: %impl.elem3.loc39_31.1: @Test.%.loc39_31.21 (%.df57) = impl_witness_access constants.%Iterate.lookup_impl_witness.8b4, element3 [symbolic = %impl.elem3.loc39_31.2 (constants.%impl.elem3.199)] // CHECK:STDOUT: %bound_method.loc39_31.3: = bound_method %r.ref, %impl.elem3.loc39_31.1 -// CHECK:STDOUT: %Iterate.facet.loc39_31.2: %Iterate.type = facet_value constants.%R.as_type.a62, (constants.%Iterate.lookup_impl_witness.8b4) [symbolic = %Iterate.facet.loc39_31.3 (constants.%Iterate.facet.b19)] -// CHECK:STDOUT: %.loc39_31.2: %Iterate.type = converted constants.%R.as_type.a62, %Iterate.facet.loc39_31.2 [symbolic = %Iterate.facet.loc39_31.3 (constants.%Iterate.facet.b19)] -// CHECK:STDOUT: %.loc39_31.3: %Destroy.type = converted constants.%as_type.862, constants.%impl.elem1.46a [symbolic = %impl.elem1 (constants.%impl.elem1.46a)] +// CHECK:STDOUT: %Iterate.facet.loc39_31.3: %Iterate.type = facet_value constants.%R.as_type.a62, (constants.%Iterate.lookup_impl_witness.8b4) [symbolic = %Iterate.facet.loc39_31.5 (constants.%Iterate.facet.b19)] +// CHECK:STDOUT: %.loc39_31.3: %Iterate.type = converted constants.%R.as_type.a62, %Iterate.facet.loc39_31.3 [symbolic = %Iterate.facet.loc39_31.5 (constants.%Iterate.facet.b19)] +// CHECK:STDOUT: %Iterate.facet.loc39_31.4: %Iterate.type = facet_value constants.%R.as_type.a62, (constants.%Iterate.lookup_impl_witness.8b4) [symbolic = %Iterate.facet.loc39_31.5 (constants.%Iterate.facet.b19)] +// CHECK:STDOUT: %.loc39_31.4: %Iterate.type = converted constants.%R.as_type.a62, %Iterate.facet.loc39_31.4 [symbolic = %Iterate.facet.loc39_31.5 (constants.%Iterate.facet.b19)] +// CHECK:STDOUT: %.loc39_31.5: %Destroy.type = converted constants.%as_type.862, constants.%impl.elem1.46a [symbolic = %impl.elem1 (constants.%impl.elem1.46a)] +// CHECK:STDOUT: %.loc39_31.6: %Destroy.type = converted constants.%as_type.862, constants.%impl.elem1.46a [symbolic = %impl.elem1 (constants.%impl.elem1.46a)] // CHECK:STDOUT: %specific_impl_fn.loc39_31.2: = specific_impl_function %impl.elem3.loc39_31.1, @Iterate.WithSelf.Next(constants.%Iterate.facet.b19) [symbolic = %specific_impl_fn.loc39_31.5 (constants.%specific_impl_fn.169)] // CHECK:STDOUT: %bound_method.loc39_31.4: = bound_method %r.ref, %specific_impl_fn.loc39_31.2 -// CHECK:STDOUT: %.loc39_31.4: ref %Optional.552 = temporary_storage -// CHECK:STDOUT: %Iterate.WithSelf.Next.call: init %Optional.552 to %.loc39_31.4 = call %bound_method.loc39_31.4(%r.ref, %addr.loc39) -// CHECK:STDOUT: %.loc39_31.5: ref %Optional.552 = temporary %.loc39_31.4, %Iterate.WithSelf.Next.call -// CHECK:STDOUT: %.loc39_31.6: %Optional.HasValue.type.109 = specific_constant imports.%Core.import_ref.bb6, @Optional(constants.%OptionalStorage.facet.7ce) [concrete = constants.%Optional.HasValue.605] -// CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.109 = name_ref HasValue, %.loc39_31.6 [concrete = constants.%Optional.HasValue.605] -// CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc39_31.5, %HasValue.ref +// CHECK:STDOUT: %.loc39_31.7: ref %Optional.552 = temporary_storage +// CHECK:STDOUT: %Iterate.WithSelf.Next.call: init %Optional.552 to %.loc39_31.7 = call %bound_method.loc39_31.4(%r.ref, %addr.loc39) +// CHECK:STDOUT: %.loc39_31.8: ref %Optional.552 = temporary %.loc39_31.7, %Iterate.WithSelf.Next.call +// CHECK:STDOUT: %.loc39_31.9: %Optional.HasValue.type.109 = specific_constant imports.%Core.import_ref.bb6, @Optional(constants.%OptionalStorage.facet.7ce) [concrete = constants.%Optional.HasValue.605] +// CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.109 = name_ref HasValue, %.loc39_31.9 [concrete = constants.%Optional.HasValue.605] +// CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc39_31.8, %HasValue.ref // CHECK:STDOUT: %Optional.HasValue.specific_fn: = specific_function %HasValue.ref, @Optional.HasValue(constants.%OptionalStorage.facet.7ce) [concrete = constants.%Optional.HasValue.specific_fn] -// CHECK:STDOUT: %bound_method.loc39_31.5: = bound_method %.loc39_31.5, %Optional.HasValue.specific_fn -// CHECK:STDOUT: %.loc39_31.7: %Optional.552 = acquire_value %.loc39_31.5 -// CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc39_31.5(%.loc39_31.7) -// CHECK:STDOUT: %.loc39_31.8: bool = value_of_initializer %Optional.HasValue.call -// CHECK:STDOUT: %.loc39_31.9: bool = converted %Optional.HasValue.call, %.loc39_31.8 -// CHECK:STDOUT: if %.loc39_31.9 br !for.body else br !for.done +// CHECK:STDOUT: %bound_method.loc39_31.5: = bound_method %.loc39_31.8, %Optional.HasValue.specific_fn +// CHECK:STDOUT: %.loc39_31.10: %Optional.552 = acquire_value %.loc39_31.8 +// CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc39_31.5(%.loc39_31.10) +// CHECK:STDOUT: %.loc39_31.11: bool = value_of_initializer %Optional.HasValue.call +// CHECK:STDOUT: %.loc39_31.12: bool = converted %Optional.HasValue.call, %.loc39_31.11 +// CHECK:STDOUT: if %.loc39_31.12 br !for.body else br !for.done // CHECK:STDOUT: // CHECK:STDOUT: !for.body: -// CHECK:STDOUT: %.loc39_31.10: %Optional.Get.type.135 = specific_constant imports.%Core.import_ref.daba, @Optional(constants.%OptionalStorage.facet.7ce) [concrete = constants.%Optional.Get.5aa] -// CHECK:STDOUT: %Get.ref: %Optional.Get.type.135 = name_ref Get, %.loc39_31.10 [concrete = constants.%Optional.Get.5aa] -// CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc39_31.5, %Get.ref +// CHECK:STDOUT: %.loc39_31.13: %Optional.Get.type.135 = specific_constant imports.%Core.import_ref.daba, @Optional(constants.%OptionalStorage.facet.7ce) [concrete = constants.%Optional.Get.5aa] +// CHECK:STDOUT: %Get.ref: %Optional.Get.type.135 = name_ref Get, %.loc39_31.13 [concrete = constants.%Optional.Get.5aa] +// CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc39_31.8, %Get.ref // CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Get.ref, @Optional.Get(constants.%OptionalStorage.facet.7ce) [concrete = constants.%Optional.Get.specific_fn] -// CHECK:STDOUT: %bound_method.loc39_31.6: = bound_method %.loc39_31.5, %Optional.Get.specific_fn -// CHECK:STDOUT: %.loc39_31.11: ref %ValueType = temporary_storage -// CHECK:STDOUT: %.loc39_31.12: %Optional.552 = acquire_value %.loc39_31.5 -// CHECK:STDOUT: %Optional.Get.call: init %ValueType to %.loc39_31.11 = call %bound_method.loc39_31.6(%.loc39_31.12) +// CHECK:STDOUT: %bound_method.loc39_31.6: = bound_method %.loc39_31.8, %Optional.Get.specific_fn +// CHECK:STDOUT: %.loc39_31.14: ref %ValueType = temporary_storage +// CHECK:STDOUT: %.loc39_31.15: %Optional.552 = acquire_value %.loc39_31.8 +// CHECK:STDOUT: %Optional.Get.call: init %ValueType to %.loc39_31.14 = call %bound_method.loc39_31.6(%.loc39_31.15) +// CHECK:STDOUT: %.loc39_31.16: ref %ValueType = temporary %.loc39_31.14, %Optional.Get.call +// CHECK:STDOUT: %.loc39_31.17: %ValueType = acquire_value %.loc39_31.16 // CHECK:STDOUT: %.loc39_16: type = splice_block %ValueType.ref.loc39 [concrete = constants.%ValueType] { // CHECK:STDOUT: %Cpp.ref.loc39: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %N.ref.loc39: = name_ref N, imports.%N [concrete = imports.%N] // CHECK:STDOUT: %ValueType.ref.loc39: type = name_ref ValueType, imports.%ValueType.decl [concrete = constants.%ValueType] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc39_31.13: ref %ValueType = temporary %.loc39_31.11, %Optional.Get.call -// CHECK:STDOUT: %.loc39_31.14: %ValueType = acquire_value %.loc39_31.13 -// CHECK:STDOUT: %i: %ValueType = value_binding i, %.loc39_31.14 +// CHECK:STDOUT: %i: %ValueType = value_binding i, %.loc39_31.17 // CHECK:STDOUT: %sum.ref: ref %ValueType = name_ref sum, %sum // CHECK:STDOUT: %i.ref: %ValueType = name_ref i, %i // CHECK:STDOUT: %.loc40_12: ref %ValueType = value_as_ref %i.ref @@ -3127,15 +3246,16 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.done: -// CHECK:STDOUT: %ValueType.Op.bound.loc39: = bound_method %.loc39_31.13, constants.%ValueType.Op.4c94b9.1 +// CHECK:STDOUT: %ValueType.Op.bound.loc39: = bound_method %.loc39_31.16, constants.%ValueType.Op.4c94b9.1 // CHECK:STDOUT: %Op.ref.loc39: %ValueType.cpp_destructor.type = name_ref Op, imports.%ValueType.cpp_destructor.decl [concrete = constants.%ValueType.cpp_destructor] -// CHECK:STDOUT: %ValueType.cpp_destructor.bound.loc39: = bound_method %.loc39_31.13, %Op.ref.loc39 -// CHECK:STDOUT: %ValueType.cpp_destructor.call.loc39: init %empty_tuple.type = call %ValueType.cpp_destructor.bound.loc39(%.loc39_31.13) -// CHECK:STDOUT: %Destroy.Op.bound: = bound_method %.loc39_31.5, constants.%Destroy.Op.1a2547.7 -// CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%.loc39_31.5) -// CHECK:STDOUT: %impl.elem0.loc39_31.1: @Test.%.loc39_31.18 (%.bc1) = impl_witness_access constants.%Destroy.lookup_impl_witness.f37, element0 [symbolic = %impl.elem0.loc39_31.2 (constants.%impl.elem0.c7c)] +// CHECK:STDOUT: %ValueType.cpp_destructor.bound.loc39: = bound_method %.loc39_31.16, %Op.ref.loc39 +// CHECK:STDOUT: %ValueType.cpp_destructor.call.loc39: init %empty_tuple.type = call %ValueType.cpp_destructor.bound.loc39(%.loc39_31.16) +// CHECK:STDOUT: %Destroy.Op.bound: = bound_method %.loc39_31.8, constants.%Destroy.Op.1a2547.7 +// CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%.loc39_31.8) +// CHECK:STDOUT: %impl.elem0.loc39_31.1: @Test.%.loc39_31.22 (%.bc1) = impl_witness_access constants.%Destroy.lookup_impl_witness.f37, element0 [symbolic = %impl.elem0.loc39_31.2 (constants.%impl.elem0.c7c)] // CHECK:STDOUT: %bound_method.loc39_31.7: = bound_method %var, %impl.elem0.loc39_31.1 -// CHECK:STDOUT: %.loc39_31.15: %Destroy.type = converted constants.%as_type.862, constants.%impl.elem1.46a [symbolic = %impl.elem1 (constants.%impl.elem1.46a)] +// CHECK:STDOUT: %.loc39_31.18: %Destroy.type = converted constants.%as_type.862, constants.%impl.elem1.46a [symbolic = %impl.elem1 (constants.%impl.elem1.46a)] +// CHECK:STDOUT: %.loc39_31.19: %Destroy.type = converted constants.%as_type.862, constants.%impl.elem1.46a [symbolic = %impl.elem1 (constants.%impl.elem1.46a)] // CHECK:STDOUT: %specific_impl_fn.loc39_31.3: = specific_impl_function %impl.elem0.loc39_31.1, @Destroy.WithSelf.Op(constants.%impl.elem1.46a) [symbolic = %specific_impl_fn.loc39_31.6 (constants.%specific_impl_fn.cd3)] // CHECK:STDOUT: %bound_method.loc39_31.8: = bound_method %var, %specific_impl_fn.loc39_31.3 // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc39_31.8(%var) @@ -3171,22 +3291,28 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Test(constants.%R.623) { +// CHECK:STDOUT: %R.patt.loc35_10.2 => constants.%R.patt.324 // CHECK:STDOUT: %R.loc35_10.1 => constants.%R.623 // CHECK:STDOUT: %R.as_type.loc35_67.1 => constants.%R.as_type.a62 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.725 +// CHECK:STDOUT: %r.param_patt.loc35_65.2 => constants.%r.param_patt.162 +// CHECK:STDOUT: %r.patt.loc35_65.2 => constants.%r.patt.15b // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Test(constants.%facet_value.0ec) { +// CHECK:STDOUT: %R.patt.loc35_10.2 => constants.%R.patt.324 // CHECK:STDOUT: %R.loc35_10.1 => constants.%facet_value.0ec // CHECK:STDOUT: %R.as_type.loc35_67.1 => constants.%MutableAndConstRange // CHECK:STDOUT: %pattern_type => constants.%pattern_type.394 +// CHECK:STDOUT: %r.param_patt.loc35_65.2 => constants.%r.param_patt.8bb +// CHECK:STDOUT: %r.patt.loc35_65.2 => constants.%r.patt.ac4 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc35 => constants.%complete_type.357 // CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.a6e -// CHECK:STDOUT: %Iterate.facet.loc39_31.3 => constants.%Iterate.facet.5cc +// CHECK:STDOUT: %Iterate.facet.loc39_31.5 => constants.%Iterate.facet.5cc // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.875 -// CHECK:STDOUT: %.loc39_31.16 => constants.%.7e3 +// CHECK:STDOUT: %.loc39_31.20 => constants.%.7e3 // CHECK:STDOUT: %impl.elem2.loc39_31.2 => constants.%R.as_type.as.Iterate.impl.NewCursor.96c // CHECK:STDOUT: %specific_impl_fn.loc39_31.4 => constants.%R.as_type.as.Iterate.impl.NewCursor.specific_fn // CHECK:STDOUT: %impl.elem1 => constants.%Destroy.facet.7aa @@ -3194,11 +3320,11 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %require_complete.1 => constants.%complete_type.1b5 // CHECK:STDOUT: %ptr => constants.%ptr.484 // CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.b41 -// CHECK:STDOUT: %.loc39_31.17 => constants.%.fef +// CHECK:STDOUT: %.loc39_31.21 => constants.%.fef // CHECK:STDOUT: %impl.elem3.loc39_31.2 => constants.%R.as_type.as.Iterate.impl.Next.683 // CHECK:STDOUT: %specific_impl_fn.loc39_31.5 => constants.%R.as_type.as.Iterate.impl.Next.specific_fn // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.b7b -// CHECK:STDOUT: %.loc39_31.18 => constants.%.1ad +// CHECK:STDOUT: %.loc39_31.22 => constants.%.1ad // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.df9cc1.8 // CHECK:STDOUT: %impl.elem0.loc39_31.2 => constants.%Destroy.Op.1a2547.8 // CHECK:STDOUT: %specific_impl_fn.loc39_31.6 => constants.%Destroy.Op.1a2547.8 diff --git a/toolchain/check/testdata/interop/cpp/stdlib/initializer_list.carbon b/toolchain/check/testdata/interop/cpp/stdlib/initializer_list.carbon index 0da549e0d7b2..8cefd5fe592d 100644 --- a/toolchain/check/testdata/interop/cpp/stdlib/initializer_list.carbon +++ b/toolchain/check/testdata/interop/cpp/stdlib/initializer_list.carbon @@ -63,6 +63,7 @@ fn F() { // CHECK:STDOUT: %initializer_list: type = class_type @initializer_list [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %pattern_type.7fc: type = pattern_type %initializer_list [concrete] +// CHECK:STDOUT: %_.patt.abb: %pattern_type.7fc = value_binding_pattern _ [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] @@ -70,7 +71,11 @@ fn F() { // CHECK:STDOUT: %tuple: %tuple.type = tuple_value (%int_1.5b8, %int_2.ecc, %int_3.1ba) [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_3.1ba, %i32 [concrete] // CHECK:STDOUT: %pattern_type.771: type = pattern_type %array_type [concrete] +// CHECK:STDOUT: %_.param_patt: %pattern_type.771 = value_param_pattern [concrete] +// CHECK:STDOUT: %_.patt.a48: %pattern_type.771 = at_binding_pattern _, %_.param_patt [concrete] // CHECK:STDOUT: %.0ee: Core.Form = init_form %initializer_list [concrete] +// CHECK:STDOUT: %return.param_patt.199: %pattern_type.7fc = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.07e: %pattern_type.7fc = return_slot_pattern %return.param_patt.199, %initializer_list [concrete] // CHECK:STDOUT: %initializer_list.initializer_list.type.0fbcd7.1: type = fn_type @initializer_list.initializer_list.loc8 [concrete] // CHECK:STDOUT: %initializer_list.initializer_list.0db5f6.1: %initializer_list.initializer_list.type.0fbcd7.1 = struct_value () [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] @@ -105,6 +110,7 @@ fn F() { // CHECK:STDOUT: %initializer_list.initializer_list.0db5f6.2: %initializer_list.initializer_list.type.0fbcd7.2 = struct_value () [concrete] // CHECK:STDOUT: %InitListConstructor: type = class_type @InitListConstructor [concrete] // CHECK:STDOUT: %pattern_type.ed6: type = pattern_type %InitListConstructor [concrete] +// CHECK:STDOUT: %_.patt.100: %pattern_type.ed6 = value_binding_pattern _ [concrete] // CHECK:STDOUT: %ptr.cbb: type = ptr_type %InitListConstructor [concrete] // CHECK:STDOUT: %InitListConstructor__carbon_thunk.type: type = fn_type @InitListConstructor__carbon_thunk [concrete] // CHECK:STDOUT: %InitListConstructor__carbon_thunk: %InitListConstructor__carbon_thunk.type = struct_value () [concrete] @@ -149,10 +155,10 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generated { // CHECK:STDOUT: %initializer_list.initializer_list.decl.f8e97d.1: %initializer_list.initializer_list.type.0fbcd7.1 = fn_decl @initializer_list.initializer_list.loc8 [concrete = constants.%initializer_list.initializer_list.0db5f6.1] { -// CHECK:STDOUT: %_.param_patt: %pattern_type.771 = value_param_pattern [concrete] -// CHECK:STDOUT: %_.patt: %pattern_type.771 = at_binding_pattern _, %_.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.7fc = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.7fc = return_slot_pattern %return.param_patt, constants.%initializer_list [concrete] +// CHECK:STDOUT: %_.param_patt: %pattern_type.771 = value_param_pattern [concrete = constants.%_.param_patt] +// CHECK:STDOUT: %_.patt: %pattern_type.771 = at_binding_pattern _, %_.param_patt [concrete = constants.%_.patt.a48] +// CHECK:STDOUT: %return.param_patt: %pattern_type.7fc = out_param_pattern [concrete = constants.%return.param_patt.199] +// CHECK:STDOUT: %return.patt: %pattern_type.7fc = return_slot_pattern %return.param_patt, constants.%initializer_list [concrete = constants.%return.patt.07e] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8: Core.Form = init_form constants.%initializer_list [concrete = constants.%.0ee] // CHECK:STDOUT: %_.param: %array_type = value_param call_param0 @@ -161,10 +167,10 @@ fn F() { // CHECK:STDOUT: %return: ref %initializer_list = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %initializer_list.initializer_list.decl.f8e97d.2: %initializer_list.initializer_list.type.0fbcd7.2 = fn_decl @initializer_list.initializer_list.loc10 [concrete = constants.%initializer_list.initializer_list.0db5f6.2] { -// CHECK:STDOUT: %_.param_patt: %pattern_type.771 = value_param_pattern [concrete] -// CHECK:STDOUT: %_.patt: %pattern_type.771 = at_binding_pattern _, %_.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.7fc = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.7fc = return_slot_pattern %return.param_patt, constants.%initializer_list [concrete] +// CHECK:STDOUT: %_.param_patt: %pattern_type.771 = value_param_pattern [concrete = constants.%_.param_patt] +// CHECK:STDOUT: %_.patt: %pattern_type.771 = at_binding_pattern _, %_.param_patt [concrete = constants.%_.patt.a48] +// CHECK:STDOUT: %return.param_patt: %pattern_type.7fc = out_param_pattern [concrete = constants.%return.param_patt.199] +// CHECK:STDOUT: %return.patt: %pattern_type.7fc = return_slot_pattern %return.param_patt, constants.%initializer_list [concrete = constants.%return.patt.07e] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc10: Core.Form = init_form constants.%initializer_list [concrete = constants.%.0ee] // CHECK:STDOUT: %_.param: %array_type = value_param call_param0 @@ -173,10 +179,10 @@ fn F() { // CHECK:STDOUT: %return: ref %initializer_list = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %initializer_list.initializer_list.decl.f8e97d.3: %initializer_list.initializer_list.type.0fbcd7.3 = fn_decl @initializer_list.initializer_list.loc12 [concrete = constants.%initializer_list.initializer_list.0db5f6.3] { -// CHECK:STDOUT: %_.param_patt: %pattern_type.771 = value_param_pattern [concrete] -// CHECK:STDOUT: %_.patt: %pattern_type.771 = at_binding_pattern _, %_.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.7fc = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.7fc = return_slot_pattern %return.param_patt, constants.%initializer_list [concrete] +// CHECK:STDOUT: %_.param_patt: %pattern_type.771 = value_param_pattern [concrete = constants.%_.param_patt] +// CHECK:STDOUT: %_.patt: %pattern_type.771 = at_binding_pattern _, %_.param_patt [concrete = constants.%_.patt.a48] +// CHECK:STDOUT: %return.param_patt: %pattern_type.7fc = out_param_pattern [concrete = constants.%return.param_patt.199] +// CHECK:STDOUT: %return.patt: %pattern_type.7fc = return_slot_pattern %return.param_patt, constants.%initializer_list [concrete = constants.%return.patt.07e] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc12: Core.Form = init_form constants.%initializer_list [concrete = constants.%.0ee] // CHECK:STDOUT: %_.param: %array_type = value_param call_param0 @@ -193,7 +199,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt.loc8: %pattern_type.7fc = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt.loc8: %pattern_type.7fc = value_binding_pattern _ [concrete = constants.%_.patt.abb] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1.loc8_43: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %int_2.loc8_46: Core.IntLiteral = int_value 2 [concrete = constants.%int_2.ecc] @@ -239,6 +245,7 @@ fn F() { // CHECK:STDOUT: %.loc8_50.17: init %initializer_list = converted %.loc8_50.1, %initializer_list.initializer_list.call.loc8 // CHECK:STDOUT: %.loc8_50.18: ref %initializer_list = temporary %.loc8_50.2, %.loc8_50.17 // CHECK:STDOUT: %.loc8_50.19: %initializer_list = acquire_value %.loc8_50.18 +// CHECK:STDOUT: // CHECK:STDOUT: %_.loc8: %initializer_list = value_binding _, %.loc8_50.19 // CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %Consume.ref: %Consume.cpp_overload_set.type = name_ref Consume, imports.%Consume.cpp_overload_set.value [concrete = constants.%Consume.cpp_overload_set.value] @@ -290,16 +297,12 @@ fn F() { // CHECK:STDOUT: %addr.loc10: %ptr.fac = addr_of %.loc10_23.20 // CHECK:STDOUT: %Consume__carbon_thunk.call: init %empty_tuple.type = call imports.%Consume__carbon_thunk.decl(%addr.loc10) // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt.loc12: %pattern_type.ed6 = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt.loc12: %pattern_type.ed6 = value_binding_pattern _ [concrete = constants.%_.patt.100] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1.loc12_37: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %int_2.loc12_40: Core.IntLiteral = int_value 2 [concrete = constants.%int_2.ecc] // CHECK:STDOUT: %int_3.loc12_43: Core.IntLiteral = int_value 3 [concrete = constants.%int_3.1ba] // CHECK:STDOUT: %.loc12_44.1: %tuple.type = tuple_literal (%int_1.loc12_37, %int_2.loc12_40, %int_3.loc12_43) [concrete = constants.%tuple] -// CHECK:STDOUT: %.loc12_13: type = splice_block %InitListConstructor.ref [concrete = constants.%InitListConstructor] { -// CHECK:STDOUT: %Cpp.ref.loc12: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %InitListConstructor.ref: type = name_ref InitListConstructor, imports.%InitListConstructor.decl [concrete = constants.%InitListConstructor] -// CHECK:STDOUT: } // CHECK:STDOUT: %.loc12_44.2: ref %InitListConstructor = temporary_storage // CHECK:STDOUT: // CHECK:STDOUT: %int_3.loc12_44: Core.IntLiteral = int_value 3 [concrete = constants.%int_3.1ba] @@ -349,6 +352,10 @@ fn F() { // CHECK:STDOUT: %.loc12_44.23: init %InitListConstructor = converted %.loc12_44.1, %.loc12_44.22 // CHECK:STDOUT: %.loc12_44.24: ref %InitListConstructor = temporary %.loc12_44.2, %.loc12_44.23 // CHECK:STDOUT: %.loc12_44.25: %InitListConstructor = acquire_value %.loc12_44.24 +// CHECK:STDOUT: %.loc12_13: type = splice_block %InitListConstructor.ref [concrete = constants.%InitListConstructor] { +// CHECK:STDOUT: %Cpp.ref.loc12: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %InitListConstructor.ref: type = name_ref InitListConstructor, imports.%InitListConstructor.decl [concrete = constants.%InitListConstructor] +// CHECK:STDOUT: } // CHECK:STDOUT: %_.loc12: %InitListConstructor = value_binding _, %.loc12_44.25 // CHECK:STDOUT: %InitListConstructor.cpp_destructor.bound: = bound_method %.loc12_44.24, constants.%InitListConstructor.cpp_destructor // CHECK:STDOUT: %InitListConstructor.cpp_destructor.call: init %empty_tuple.type = call %InitListConstructor.cpp_destructor.bound(%.loc12_44.24) diff --git a/toolchain/check/testdata/interop/cpp/stdlib/string_view.carbon b/toolchain/check/testdata/interop/cpp/stdlib/string_view.carbon index e3ff5c9319b3..b132ca089096 100644 --- a/toolchain/check/testdata/interop/cpp/stdlib/string_view.carbon +++ b/toolchain/check/testdata/interop/cpp/stdlib/string_view.carbon @@ -94,6 +94,8 @@ fn StarstWith(a: str, b: str) -> bool { // CHECK:STDOUT: %Consume__carbon_thunk.type: type = fn_type @Consume__carbon_thunk [concrete] // CHECK:STDOUT: %Consume__carbon_thunk: %Consume__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %.8e1: Core.Form = init_form %str.3d4 [concrete] +// CHECK:STDOUT: %return.param_patt.59a: %pattern_type.adf = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.156: %pattern_type.adf = return_slot_pattern %return.param_patt.59a, %str.3d4 [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %Produce.cpp_overload_set.type: type = cpp_overload_set_type @Produce.cpp_overload_set [concrete] @@ -125,8 +127,8 @@ fn StarstWith(a: str, b: str) -> bool { // CHECK:STDOUT: file { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {} // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.adf = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.adf = return_slot_pattern %return.param_patt, %str [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.adf = out_param_pattern [concrete = constants.%return.param_patt.59a] +// CHECK:STDOUT: %return.patt: %pattern_type.adf = return_slot_pattern %return.param_patt, %str [concrete = constants.%return.patt.156] // CHECK:STDOUT: } { // CHECK:STDOUT: %str: type = type_literal constants.%str.3d4 [concrete = constants.%str.3d4] // CHECK:STDOUT: %.loc13_11.2: Core.Form = init_form %str [concrete = constants.%.8e1] @@ -165,8 +167,14 @@ fn StarstWith(a: str, b: str) -> bool { // CHECK:STDOUT: %str: type = class_type @String [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %pattern_type.adf: type = pattern_type %str [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.adf = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.adf = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.adf = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.adf = at_binding_pattern b, %b.param_patt [concrete] // CHECK:STDOUT: %.f34: Core.Form = init_form bool [concrete] // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] +// CHECK:STDOUT: %return.param_patt.5a1: %pattern_type.831 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.c0c: %pattern_type.831 = return_slot_pattern %return.param_patt.5a1, bool [concrete] // CHECK:STDOUT: %StarstWith.type: type = fn_type @StarstWith [concrete] // CHECK:STDOUT: %StarstWith: %StarstWith.type = struct_value () [concrete] // CHECK:STDOUT: %DerivedFromStringView: type = class_type @DerivedFromStringView [concrete] @@ -194,12 +202,12 @@ fn StarstWith(a: str, b: str) -> bool { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %StarstWith.decl: %StarstWith.type = fn_decl @StarstWith [concrete = constants.%StarstWith] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.adf = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.adf = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.adf = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.adf = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc7_34.1 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.adf = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.adf = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %b.param_patt: %pattern_type.adf = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.adf = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete = constants.%return.param_patt.5a1] +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc7_34.1 [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc7_34.1: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc7_34.2: Core.Form = init_form %.loc7_34.1 [concrete = constants.%.f34] diff --git a/toolchain/check/testdata/interop/cpp/template/alias_template.carbon b/toolchain/check/testdata/interop/cpp/template/alias_template.carbon index 7871d70f4b38..4e7d6386a6e1 100644 --- a/toolchain/check/testdata/interop/cpp/template/alias_template.carbon +++ b/toolchain/check/testdata/interop/cpp/template/alias_template.carbon @@ -40,12 +40,16 @@ var a2: Cpp.Second(Cpp.B, Cpp.A) = Cpp.A.A(); // CHECK:STDOUT: %A: type = class_type @A [concrete] // CHECK:STDOUT: %B: type = class_type @B [concrete] // CHECK:STDOUT: %pattern_type.3fa: type = pattern_type %A [concrete] +// CHECK:STDOUT: %a1.patt: %pattern_type.3fa = ref_binding_pattern a1 [concrete] +// CHECK:STDOUT: %a1.var_patt: %pattern_type.3fa = var_pattern %a1.patt [concrete] // CHECK:STDOUT: %A.A.cpp_overload_set.type: type = cpp_overload_set_type @A.A.cpp_overload_set [concrete] // CHECK:STDOUT: %A.A.cpp_overload_set.value: %A.A.cpp_overload_set.type = cpp_overload_set_value @A.A.cpp_overload_set [concrete] // CHECK:STDOUT: %ptr.25f: type = ptr_type %A [concrete] // CHECK:STDOUT: %A__carbon_thunk.type: type = fn_type @A__carbon_thunk [concrete] // CHECK:STDOUT: %A__carbon_thunk: %A__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.65a: type = pattern_type %B [concrete] +// CHECK:STDOUT: %b1.patt: %pattern_type.65a = ref_binding_pattern b1 [concrete] +// CHECK:STDOUT: %b1.var_patt: %pattern_type.65a = var_pattern %b1.patt [concrete] // CHECK:STDOUT: %B.B.cpp_overload_set.type: type = cpp_overload_set_type @B.B.cpp_overload_set [concrete] // CHECK:STDOUT: %B.B.cpp_overload_set.value: %B.B.cpp_overload_set.type = cpp_overload_set_value @B.B.cpp_overload_set [concrete] // CHECK:STDOUT: %ptr.dc0: type = ptr_type %B [concrete] @@ -53,6 +57,10 @@ var a2: Cpp.Second(Cpp.B, Cpp.A) = Cpp.A.A(); // CHECK:STDOUT: %B__carbon_thunk: %B__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %Second.type: type = cpp_type_template_type Second [concrete] // CHECK:STDOUT: %Second.template: %Second.type = struct_value () [concrete] +// CHECK:STDOUT: %b2.patt: %pattern_type.65a = ref_binding_pattern b2 [concrete] +// CHECK:STDOUT: %b2.var_patt: %pattern_type.65a = var_pattern %b2.patt [concrete] +// CHECK:STDOUT: %a2.patt: %pattern_type.3fa = ref_binding_pattern a2 [concrete] +// CHECK:STDOUT: %a2.var_patt: %pattern_type.3fa = var_pattern %a2.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -83,26 +91,26 @@ var a2: Cpp.Second(Cpp.B, Cpp.A) = Cpp.A.A(); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a1.patt: %pattern_type.3fa = ref_binding_pattern a1 [concrete] -// CHECK:STDOUT: %a1.var_patt: %pattern_type.3fa = var_pattern %a1.patt [concrete] +// CHECK:STDOUT: %a1.patt: %pattern_type.3fa = ref_binding_pattern a1 [concrete = constants.%a1.patt] +// CHECK:STDOUT: %a1.var_patt: %pattern_type.3fa = var_pattern %a1.patt [concrete = constants.%a1.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a1.var: ref %A = var %a1.var_patt [concrete] // CHECK:STDOUT: %a1: ref %A = ref_binding a1, %a1.var [concrete = %a1.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b1.patt: %pattern_type.65a = ref_binding_pattern b1 [concrete] -// CHECK:STDOUT: %b1.var_patt: %pattern_type.65a = var_pattern %b1.patt [concrete] +// CHECK:STDOUT: %b1.patt: %pattern_type.65a = ref_binding_pattern b1 [concrete = constants.%b1.patt] +// CHECK:STDOUT: %b1.var_patt: %pattern_type.65a = var_pattern %b1.patt [concrete = constants.%b1.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b1.var: ref %B = var %b1.var_patt [concrete] // CHECK:STDOUT: %b1: ref %B = ref_binding b1, %b1.var [concrete = %b1.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b2.patt: %pattern_type.65a = ref_binding_pattern b2 [concrete] -// CHECK:STDOUT: %b2.var_patt: %pattern_type.65a = var_pattern %b2.patt [concrete] +// CHECK:STDOUT: %b2.patt: %pattern_type.65a = ref_binding_pattern b2 [concrete = constants.%b2.patt] +// CHECK:STDOUT: %b2.var_patt: %pattern_type.65a = var_pattern %b2.patt [concrete = constants.%b2.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b2.var: ref %B = var %b2.var_patt [concrete] // CHECK:STDOUT: %b2: ref %B = ref_binding b2, %b2.var [concrete = %b2.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a2.patt: %pattern_type.3fa = ref_binding_pattern a2 [concrete] -// CHECK:STDOUT: %a2.var_patt: %pattern_type.3fa = var_pattern %a2.patt [concrete] +// CHECK:STDOUT: %a2.patt: %pattern_type.3fa = ref_binding_pattern a2 [concrete = constants.%a2.patt] +// CHECK:STDOUT: %a2.var_patt: %pattern_type.3fa = var_pattern %a2.patt [concrete = constants.%a2.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a2.var: ref %A = var %a2.var_patt [concrete] // CHECK:STDOUT: %a2: ref %A = ref_binding a2, %a2.var [concrete = %a2.var] diff --git a/toolchain/check/testdata/interop/cpp/template/argument_count.carbon b/toolchain/check/testdata/interop/cpp/template/argument_count.carbon index d0b8a88cbcf2..81863eac53a8 100644 --- a/toolchain/check/testdata/interop/cpp/template/argument_count.carbon +++ b/toolchain/check/testdata/interop/cpp/template/argument_count.carbon @@ -123,6 +123,8 @@ var too_many: Cpp.FixedSizePack(Cpp.A, Cpp.A).Inner(Cpp.B, Cpp.B, Cpp.B); // CHECK:STDOUT: constants { // CHECK:STDOUT: %TwoTypes: type = class_type @TwoTypes [concrete] // CHECK:STDOUT: %pattern_type.83a: type = pattern_type %TwoTypes [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.83a = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.83a = var_pattern %x.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %Default.type: type = facet_type <@Default> [concrete] // CHECK:STDOUT: %T.b09: %Default.type = symbolic_binding T, 0 [symbolic] @@ -143,8 +145,8 @@ var too_many: Cpp.FixedSizePack(Cpp.A, Cpp.A).Inner(Cpp.B, Cpp.B, Cpp.B); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.83a = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.83a = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.83a = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.83a = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %TwoTypes = var %x.var_patt [concrete] // CHECK:STDOUT: %x: ref %TwoTypes = ref_binding x, %x.var [concrete = %x.var] @@ -168,6 +170,8 @@ var too_many: Cpp.FixedSizePack(Cpp.A, Cpp.A).Inner(Cpp.B, Cpp.B, Cpp.B); // CHECK:STDOUT: constants { // CHECK:STDOUT: %TypePack.78f: type = class_type @TypePack.1 [concrete] // CHECK:STDOUT: %pattern_type.a64: type = pattern_type %TypePack.78f [concrete] +// CHECK:STDOUT: %a0.patt: %pattern_type.a64 = ref_binding_pattern a0 [concrete] +// CHECK:STDOUT: %a0.var_patt: %pattern_type.a64 = var_pattern %a0.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %Default.type: type = facet_type <@Default> [concrete] // CHECK:STDOUT: %T.b09: %Default.type = symbolic_binding T, 0 [symbolic] @@ -181,6 +185,8 @@ var too_many: Cpp.FixedSizePack(Cpp.A, Cpp.A).Inner(Cpp.B, Cpp.B, Cpp.B); // CHECK:STDOUT: %DefaultOrUnformed.facet.be2: %DefaultOrUnformed.type = facet_value %TypePack.78f, (%DefaultOrUnformed.impl_witness.6f4) [concrete] // CHECK:STDOUT: %TypePack.0bc: type = class_type @TypePack.2 [concrete] // CHECK:STDOUT: %pattern_type.20e: type = pattern_type %TypePack.0bc [concrete] +// CHECK:STDOUT: %a1.patt: %pattern_type.20e = ref_binding_pattern a1 [concrete] +// CHECK:STDOUT: %a1.var_patt: %pattern_type.20e = var_pattern %a1.patt [concrete] // CHECK:STDOUT: %TypePack.Op.type.83af6e.2: type = fn_type @TypePack.Op.2 [concrete] // CHECK:STDOUT: %TypePack.Op.4dca31.2: %TypePack.Op.type.83af6e.2 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.9b40fb.2: = custom_witness (%TypePack.Op.4dca31.2), @Default [concrete] @@ -189,6 +195,8 @@ var too_many: Cpp.FixedSizePack(Cpp.A, Cpp.A).Inner(Cpp.B, Cpp.B, Cpp.B); // CHECK:STDOUT: %DefaultOrUnformed.facet.777: %DefaultOrUnformed.type = facet_value %TypePack.0bc, (%DefaultOrUnformed.impl_witness.8e2) [concrete] // CHECK:STDOUT: %TypePack.0ec: type = class_type @TypePack.3 [concrete] // CHECK:STDOUT: %pattern_type.c25: type = pattern_type %TypePack.0ec [concrete] +// CHECK:STDOUT: %a2.patt: %pattern_type.c25 = ref_binding_pattern a2 [concrete] +// CHECK:STDOUT: %a2.var_patt: %pattern_type.c25 = var_pattern %a2.patt [concrete] // CHECK:STDOUT: %TypePack.Op.type.83af6e.3: type = fn_type @TypePack.Op.3 [concrete] // CHECK:STDOUT: %TypePack.Op.4dca31.3: %TypePack.Op.type.83af6e.3 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.9b40fb.3: = custom_witness (%TypePack.Op.4dca31.3), @Default [concrete] @@ -197,6 +205,8 @@ var too_many: Cpp.FixedSizePack(Cpp.A, Cpp.A).Inner(Cpp.B, Cpp.B, Cpp.B); // CHECK:STDOUT: %DefaultOrUnformed.facet.967: %DefaultOrUnformed.type = facet_value %TypePack.0ec, (%DefaultOrUnformed.impl_witness.873) [concrete] // CHECK:STDOUT: %TypePack.186: type = class_type @TypePack.4 [concrete] // CHECK:STDOUT: %pattern_type.678: type = pattern_type %TypePack.186 [concrete] +// CHECK:STDOUT: %a3.patt: %pattern_type.678 = ref_binding_pattern a3 [concrete] +// CHECK:STDOUT: %a3.var_patt: %pattern_type.678 = var_pattern %a3.patt [concrete] // CHECK:STDOUT: %TypePack.Op.type.83af6e.4: type = fn_type @TypePack.Op.4 [concrete] // CHECK:STDOUT: %TypePack.Op.4dca31.4: %TypePack.Op.type.83af6e.4 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.9b40fb.4: = custom_witness (%TypePack.Op.4dca31.4), @Default [concrete] @@ -212,26 +222,26 @@ var too_many: Cpp.FixedSizePack(Cpp.A, Cpp.A).Inner(Cpp.B, Cpp.B, Cpp.B); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a0.patt: %pattern_type.a64 = ref_binding_pattern a0 [concrete] -// CHECK:STDOUT: %a0.var_patt: %pattern_type.a64 = var_pattern %a0.patt [concrete] +// CHECK:STDOUT: %a0.patt: %pattern_type.a64 = ref_binding_pattern a0 [concrete = constants.%a0.patt] +// CHECK:STDOUT: %a0.var_patt: %pattern_type.a64 = var_pattern %a0.patt [concrete = constants.%a0.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a0.var: ref %TypePack.78f = var %a0.var_patt [concrete] // CHECK:STDOUT: %a0: ref %TypePack.78f = ref_binding a0, %a0.var [concrete = %a0.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a1.patt: %pattern_type.20e = ref_binding_pattern a1 [concrete] -// CHECK:STDOUT: %a1.var_patt: %pattern_type.20e = var_pattern %a1.patt [concrete] +// CHECK:STDOUT: %a1.patt: %pattern_type.20e = ref_binding_pattern a1 [concrete = constants.%a1.patt] +// CHECK:STDOUT: %a1.var_patt: %pattern_type.20e = var_pattern %a1.patt [concrete = constants.%a1.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a1.var: ref %TypePack.0bc = var %a1.var_patt [concrete] // CHECK:STDOUT: %a1: ref %TypePack.0bc = ref_binding a1, %a1.var [concrete = %a1.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a2.patt: %pattern_type.c25 = ref_binding_pattern a2 [concrete] -// CHECK:STDOUT: %a2.var_patt: %pattern_type.c25 = var_pattern %a2.patt [concrete] +// CHECK:STDOUT: %a2.patt: %pattern_type.c25 = ref_binding_pattern a2 [concrete = constants.%a2.patt] +// CHECK:STDOUT: %a2.var_patt: %pattern_type.c25 = var_pattern %a2.patt [concrete = constants.%a2.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a2.var: ref %TypePack.0ec = var %a2.var_patt [concrete] // CHECK:STDOUT: %a2: ref %TypePack.0ec = ref_binding a2, %a2.var [concrete = %a2.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a3.patt: %pattern_type.678 = ref_binding_pattern a3 [concrete] -// CHECK:STDOUT: %a3.var_patt: %pattern_type.678 = var_pattern %a3.patt [concrete] +// CHECK:STDOUT: %a3.patt: %pattern_type.678 = ref_binding_pattern a3 [concrete = constants.%a3.patt] +// CHECK:STDOUT: %a3.var_patt: %pattern_type.678 = var_pattern %a3.patt [concrete = constants.%a3.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a3.var: ref %TypePack.186 = var %a3.var_patt [concrete] // CHECK:STDOUT: %a3: ref %TypePack.186 = ref_binding a3, %a3.var [concrete = %a3.var] diff --git a/toolchain/check/testdata/interop/cpp/template/class_template.carbon b/toolchain/check/testdata/interop/cpp/template/class_template.carbon index 0d77ddadb4ea..7b60129ea907 100644 --- a/toolchain/check/testdata/interop/cpp/template/class_template.carbon +++ b/toolchain/check/testdata/interop/cpp/template/class_template.carbon @@ -37,6 +37,8 @@ var a: Cpp.A = Cpp.X(Cpp.A, Cpp.B).f({} as Cpp.B); // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %pattern_type.3fa: type = pattern_type %A [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.3fa = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.3fa = var_pattern %a.patt [concrete] // CHECK:STDOUT: %X.type: type = cpp_type_template_type X [concrete] // CHECK:STDOUT: %X.template: %X.type = struct_value () [concrete] // CHECK:STDOUT: %B: type = class_type @B [concrete] @@ -71,8 +73,8 @@ var a: Cpp.A = Cpp.X(Cpp.A, Cpp.B).f({} as Cpp.B); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.3fa = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.3fa = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.3fa = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.3fa = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %A = var %a.var_patt [concrete] // CHECK:STDOUT: %.loc7: type = splice_block %A.ref [concrete = constants.%A] { diff --git a/toolchain/check/testdata/interop/cpp/template/concept.carbon b/toolchain/check/testdata/interop/cpp/template/concept.carbon index e32f61e9e592..71c6b7dea013 100644 --- a/toolchain/check/testdata/interop/cpp/template/concept.carbon +++ b/toolchain/check/testdata/interop/cpp/template/concept.carbon @@ -46,6 +46,8 @@ var x2: X(Cpp.IsLarge(Cpp.Large)) = X(true).Make(); // CHECK:STDOUT: %X.Make.type.243: type = fn_type @X.Make, @X(%false) [concrete] // CHECK:STDOUT: %X.Make.d05: %X.Make.type.243 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.26c: type = pattern_type %X.541 [concrete] +// CHECK:STDOUT: %x1.patt: %pattern_type.26c = ref_binding_pattern x1 [concrete] +// CHECK:STDOUT: %x1.var_patt: %pattern_type.26c = var_pattern %x1.patt [concrete] // CHECK:STDOUT: %X.Make.specific_fn.932: = specific_function %X.Make.d05, @X.Make(%false) [concrete] // CHECK:STDOUT: %Large: type = class_type @Large [concrete] // CHECK:STDOUT: %true: bool = bool_literal true [concrete] @@ -53,6 +55,8 @@ var x2: X(Cpp.IsLarge(Cpp.Large)) = X(true).Make(); // CHECK:STDOUT: %X.Make.type.4b0: type = fn_type @X.Make, @X(%true) [concrete] // CHECK:STDOUT: %X.Make.42d: %X.Make.type.4b0 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.795: type = pattern_type %X.7b4 [concrete] +// CHECK:STDOUT: %x2.patt: %pattern_type.795 = ref_binding_pattern x2 [concrete] +// CHECK:STDOUT: %x2.var_patt: %pattern_type.795 = var_pattern %x2.patt [concrete] // CHECK:STDOUT: %X.Make.specific_fn.8a7: = specific_function %X.Make.42d, @X.Make(%true) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -70,8 +74,8 @@ var x2: X(Cpp.IsLarge(Cpp.Large)) = X(true).Make(); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x1.patt: %pattern_type.26c = ref_binding_pattern x1 [concrete] -// CHECK:STDOUT: %x1.var_patt: %pattern_type.26c = var_pattern %x1.patt [concrete] +// CHECK:STDOUT: %x1.patt: %pattern_type.26c = ref_binding_pattern x1 [concrete = constants.%x1.patt] +// CHECK:STDOUT: %x1.var_patt: %pattern_type.26c = var_pattern %x1.patt [concrete = constants.%x1.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x1.var: ref %X.541 = var %x1.var_patt [concrete] // CHECK:STDOUT: %.loc11: type = splice_block %X.loc11 [concrete = constants.%X.541] { @@ -85,8 +89,8 @@ var x2: X(Cpp.IsLarge(Cpp.Large)) = X(true).Make(); // CHECK:STDOUT: } // CHECK:STDOUT: %x1: ref %X.541 = ref_binding x1, %x1.var [concrete = %x1.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x2.patt: %pattern_type.795 = ref_binding_pattern x2 [concrete] -// CHECK:STDOUT: %x2.var_patt: %pattern_type.795 = var_pattern %x2.patt [concrete] +// CHECK:STDOUT: %x2.patt: %pattern_type.795 = ref_binding_pattern x2 [concrete = constants.%x2.patt] +// CHECK:STDOUT: %x2.var_patt: %pattern_type.795 = var_pattern %x2.patt [concrete = constants.%x2.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x2.var: ref %X.7b4 = var %x2.var_patt [concrete] // CHECK:STDOUT: %.loc12: type = splice_block %X.loc12 [concrete = constants.%X.7b4] { diff --git a/toolchain/check/testdata/interop/cpp/template/non_type_param.carbon b/toolchain/check/testdata/interop/cpp/template/non_type_param.carbon index 8aa2faf45061..e55efd35fb0b 100644 --- a/toolchain/check/testdata/interop/cpp/template/non_type_param.carbon +++ b/toolchain/check/testdata/interop/cpp/template/non_type_param.carbon @@ -184,14 +184,16 @@ fn G() -> i32 { // CHECK:STDOUT: %TwoNonType: type = class_type @TwoNonType [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %pattern_type.2aa: type = pattern_type %TwoNonType [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.2aa = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.2aa = var_pattern %x.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %TwoNonType.val: %TwoNonType = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.2aa = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.2aa = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.2aa = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.2aa = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %TwoNonType = var %x.var_patt [concrete] // CHECK:STDOUT: %x: ref %TwoNonType = ref_binding x, %x.var [concrete = %x.var] @@ -218,13 +220,19 @@ fn G() -> i32 { // CHECK:STDOUT: %DependentNonType.43e: type = class_type @DependentNonType.1 [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %pattern_type.eef: type = pattern_type %DependentNonType.43e [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.eef = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.eef = var_pattern %x.patt [concrete] // CHECK:STDOUT: %MakeDependentNonType123.cpp_overload_set.type: type = cpp_overload_set_type @MakeDependentNonType123.cpp_overload_set [concrete] // CHECK:STDOUT: %MakeDependentNonType123.cpp_overload_set.value: %MakeDependentNonType123.cpp_overload_set.type = cpp_overload_set_value @MakeDependentNonType123.cpp_overload_set [concrete] // CHECK:STDOUT: %ptr.f0c: type = ptr_type %DependentNonType.43e [concrete] // CHECK:STDOUT: %MakeDependentNonType123__carbon_thunk.type: type = fn_type @MakeDependentNonType123__carbon_thunk [concrete] // CHECK:STDOUT: %MakeDependentNonType123__carbon_thunk: %MakeDependentNonType123__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %StaticInt.patt: %pattern_type.6b6 = ref_binding_pattern StaticInt [concrete] +// CHECK:STDOUT: %StaticInt.var_patt: %pattern_type.6b6 = var_pattern %StaticInt.patt [concrete] // CHECK:STDOUT: %DependentNonType.d43: type = class_type @DependentNonType.2 [concrete] // CHECK:STDOUT: %pattern_type.70d: type = pattern_type %DependentNonType.d43 [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.70d = ref_binding_pattern y [concrete] +// CHECK:STDOUT: %y.var_patt: %pattern_type.70d = var_pattern %y.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %DependentNonType.val: %DependentNonType.d43 = struct_value () [concrete] // CHECK:STDOUT: } @@ -243,21 +251,21 @@ fn G() -> i32 { // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } -// CHECK:STDOUT: %StaticInt.patt: %pattern_type.6b6 = ref_binding_pattern StaticInt [concrete] -// CHECK:STDOUT: %StaticInt.var_patt: %pattern_type.6b6 = var_pattern %StaticInt.patt [concrete] +// CHECK:STDOUT: %StaticInt.patt: %pattern_type.6b6 = ref_binding_pattern StaticInt [concrete = constants.%StaticInt.patt] +// CHECK:STDOUT: %StaticInt.var_patt: %pattern_type.6b6 = var_pattern %StaticInt.patt [concrete = constants.%StaticInt.var_patt] // CHECK:STDOUT: %StaticInt.var: ref %i32 = var %StaticInt.var_patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.eef = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.eef = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.eef = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.eef = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %DependentNonType.43e = var %x.var_patt [concrete] // CHECK:STDOUT: %x: ref %DependentNonType.43e = ref_binding x, %x.var [concrete = %x.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %pattern_type.70d = ref_binding_pattern y [concrete] -// CHECK:STDOUT: %y.var_patt: %pattern_type.70d = var_pattern %y.patt [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.70d = ref_binding_pattern y [concrete = constants.%y.patt] +// CHECK:STDOUT: %y.var_patt: %pattern_type.70d = var_pattern %y.patt [concrete = constants.%y.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %DependentNonType.d43 = var %y.var_patt [concrete] // CHECK:STDOUT: %y: ref %DependentNonType.d43 = ref_binding y, %y.var [concrete = %y.var] diff --git a/toolchain/check/testdata/interop/cpp/template/template_template_param.carbon b/toolchain/check/testdata/interop/cpp/template/template_template_param.carbon index b91c8f083bf9..4638aef255bb 100644 --- a/toolchain/check/testdata/interop/cpp/template/template_template_param.carbon +++ b/toolchain/check/testdata/interop/cpp/template/template_template_param.carbon @@ -85,6 +85,8 @@ var x: Cpp.TwoTemplates(Cpp.A, true); // CHECK:STDOUT: constants { // CHECK:STDOUT: %TwoTemplates: type = class_type @TwoTemplates [concrete] // CHECK:STDOUT: %pattern_type.f5e: type = pattern_type %TwoTemplates [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.f5e = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.f5e = var_pattern %x.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %Default.type: type = facet_type <@Default> [concrete] // CHECK:STDOUT: %T.b09: %Default.type = symbolic_binding T, 0 [symbolic] @@ -105,8 +107,8 @@ var x: Cpp.TwoTemplates(Cpp.A, true); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.f5e = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.f5e = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.f5e = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.f5e = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %TwoTemplates = var %x.var_patt [concrete] // CHECK:STDOUT: %x: ref %TwoTemplates = ref_binding x, %x.var [concrete = %x.var] @@ -129,8 +131,8 @@ var x: Cpp.TwoTemplates(Cpp.A, true); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: = ref_binding_pattern x [concrete = ] +// CHECK:STDOUT: %x.var_patt: = var_pattern %x.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref = var %x.var_patt [concrete = ] // CHECK:STDOUT: %x: ref = ref_binding x, [concrete = ] diff --git a/toolchain/check/testdata/interop/cpp/template/type_param.carbon b/toolchain/check/testdata/interop/cpp/template/type_param.carbon index 6a512f32a13e..e7b622220526 100644 --- a/toolchain/check/testdata/interop/cpp/template/type_param.carbon +++ b/toolchain/check/testdata/interop/cpp/template/type_param.carbon @@ -69,6 +69,8 @@ var x: Cpp.TwoTypes(Cpp.A, {}); // CHECK:STDOUT: constants { // CHECK:STDOUT: %TwoTypes: type = class_type @TwoTypes [concrete] // CHECK:STDOUT: %pattern_type.83a: type = pattern_type %TwoTypes [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.83a = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.83a = var_pattern %x.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %Default.type: type = facet_type <@Default> [concrete] // CHECK:STDOUT: %T.b09: %Default.type = symbolic_binding T, 0 [symbolic] @@ -89,8 +91,8 @@ var x: Cpp.TwoTypes(Cpp.A, {}); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.83a = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.83a = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.83a = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.83a = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %TwoTypes = var %x.var_patt [concrete] // CHECK:STDOUT: %x: ref %TwoTypes = ref_binding x, %x.var [concrete = %x.var] @@ -114,6 +116,8 @@ var x: Cpp.TwoTypes(Cpp.A, {}); // CHECK:STDOUT: constants { // CHECK:STDOUT: %TwoTypes: type = class_type @TwoTypes [concrete] // CHECK:STDOUT: %pattern_type.0c3: type = pattern_type %TwoTypes [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.0c3 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.0c3 = var_pattern %x.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %Default.type: type = facet_type <@Default> [concrete] // CHECK:STDOUT: %T.b09: %Default.type = symbolic_binding T, 0 [symbolic] @@ -134,8 +138,8 @@ var x: Cpp.TwoTypes(Cpp.A, {}); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.0c3 = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.0c3 = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.0c3 = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.0c3 = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %TwoTypes = var %x.var_patt [concrete] // CHECK:STDOUT: %x: ref %TwoTypes = ref_binding x, %x.var [concrete = %x.var] diff --git a/toolchain/check/testdata/interop/cpp/template/var_template.carbon b/toolchain/check/testdata/interop/cpp/template/var_template.carbon index 6aeec0859af3..2d707a103177 100644 --- a/toolchain/check/testdata/interop/cpp/template/var_template.carbon +++ b/toolchain/check/testdata/interop/cpp/template/var_template.carbon @@ -40,19 +40,31 @@ let pwb: Cpp.B* = &Cpp.Wrap.r#var(Cpp.B); // CHECK:STDOUT: %A: type = class_type @A [concrete] // CHECK:STDOUT: %ptr.25f: type = ptr_type %A [concrete] // CHECK:STDOUT: %pattern_type.1fa: type = pattern_type %ptr.25f [concrete] +// CHECK:STDOUT: %pa.patt: %pattern_type.1fa = value_binding_pattern pa [concrete] // CHECK:STDOUT: %var.type.fce: type = cpp_type_template_type r#var [concrete] // CHECK:STDOUT: %var.template.7db: %var.type.fce = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.3fa: type = pattern_type %A [concrete] +// CHECK:STDOUT: %var.patt.c98: %pattern_type.3fa = ref_binding_pattern r#var [concrete] +// CHECK:STDOUT: %var.var_patt.e06: %pattern_type.3fa = var_pattern %var.patt.c98 [concrete] // CHECK:STDOUT: %addr.58e: %ptr.25f = addr_of imports.%var.var.64d [concrete] // CHECK:STDOUT: %B: type = class_type @B [concrete] // CHECK:STDOUT: %ptr.dc0: type = ptr_type %B [concrete] // CHECK:STDOUT: %pattern_type.733: type = pattern_type %ptr.dc0 [concrete] +// CHECK:STDOUT: %pb.patt: %pattern_type.733 = value_binding_pattern pb [concrete] // CHECK:STDOUT: %pattern_type.65a: type = pattern_type %B [concrete] +// CHECK:STDOUT: %var.patt.de6: %pattern_type.65a = ref_binding_pattern r#var [concrete] +// CHECK:STDOUT: %var.var_patt.72d: %pattern_type.65a = var_pattern %var.patt.de6 [concrete] // CHECK:STDOUT: %addr.191: %ptr.dc0 = addr_of imports.%var.var.e6d [concrete] +// CHECK:STDOUT: %pwa.patt: %pattern_type.1fa = value_binding_pattern pwa [concrete] // CHECK:STDOUT: %Wrap: type = class_type @Wrap [concrete] // CHECK:STDOUT: %var.type.30e: type = cpp_type_template_type r#var [concrete] // CHECK:STDOUT: %var.template.28b: %var.type.30e = struct_value () [concrete] +// CHECK:STDOUT: %var.patt.4ff: %pattern_type.3fa = ref_binding_pattern r#var [concrete] +// CHECK:STDOUT: %var.var_patt.c1f: %pattern_type.3fa = var_pattern %var.patt.4ff [concrete] // CHECK:STDOUT: %addr.7e0: %ptr.25f = addr_of imports.%var.var.6a9 [concrete] +// CHECK:STDOUT: %pwb.patt: %pattern_type.733 = value_binding_pattern pwb [concrete] +// CHECK:STDOUT: %var.patt.96f: %pattern_type.65a = ref_binding_pattern r#var [concrete] +// CHECK:STDOUT: %var.var_patt.891: %pattern_type.65a = var_pattern %var.patt.96f [concrete] // CHECK:STDOUT: %addr.e65: %ptr.dc0 = addr_of imports.%var.var.061 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -66,26 +78,26 @@ let pwb: Cpp.B* = &Cpp.Wrap.r#var(Cpp.B); // CHECK:STDOUT: } // CHECK:STDOUT: %A.decl: type = class_decl @A [concrete = constants.%A] {} {} // CHECK:STDOUT: %var.template.7db: %var.type.fce = struct_value () [concrete = constants.%var.template.7db] -// CHECK:STDOUT: %var.patt.c98: %pattern_type.3fa = ref_binding_pattern r#var [concrete] -// CHECK:STDOUT: %var.var_patt.e06: %pattern_type.3fa = var_pattern %var.patt.c98 [concrete] +// CHECK:STDOUT: %var.patt.c98: %pattern_type.3fa = ref_binding_pattern r#var [concrete = constants.%var.patt.c98] +// CHECK:STDOUT: %var.var_patt.e06: %pattern_type.3fa = var_pattern %var.patt.c98 [concrete = constants.%var.var_patt.e06] // CHECK:STDOUT: %var.var.64d: ref %A = var %var.var_patt.e06 [concrete] // CHECK:STDOUT: %B.decl: type = class_decl @B [concrete = constants.%B] {} {} -// CHECK:STDOUT: %var.patt.de6: %pattern_type.65a = ref_binding_pattern r#var [concrete] -// CHECK:STDOUT: %var.var_patt.72d: %pattern_type.65a = var_pattern %var.patt.de6 [concrete] +// CHECK:STDOUT: %var.patt.de6: %pattern_type.65a = ref_binding_pattern r#var [concrete = constants.%var.patt.de6] +// CHECK:STDOUT: %var.var_patt.72d: %pattern_type.65a = var_pattern %var.patt.de6 [concrete = constants.%var.var_patt.72d] // CHECK:STDOUT: %var.var.e6d: ref %B = var %var.var_patt.72d [concrete] // CHECK:STDOUT: %Wrap.decl: type = class_decl @Wrap [concrete = constants.%Wrap] {} {} // CHECK:STDOUT: %var.template.28b: %var.type.30e = struct_value () [concrete = constants.%var.template.28b] -// CHECK:STDOUT: %var.patt.4ff: %pattern_type.3fa = ref_binding_pattern r#var [concrete] -// CHECK:STDOUT: %var.var_patt.c1f: %pattern_type.3fa = var_pattern %var.patt.4ff [concrete] +// CHECK:STDOUT: %var.patt.4ff: %pattern_type.3fa = ref_binding_pattern r#var [concrete = constants.%var.patt.4ff] +// CHECK:STDOUT: %var.var_patt.c1f: %pattern_type.3fa = var_pattern %var.patt.4ff [concrete = constants.%var.var_patt.c1f] // CHECK:STDOUT: %var.var.6a9: ref %A = var %var.var_patt.c1f [concrete] -// CHECK:STDOUT: %var.patt.96f: %pattern_type.65a = ref_binding_pattern r#var [concrete] -// CHECK:STDOUT: %var.var_patt.891: %pattern_type.65a = var_pattern %var.patt.96f [concrete] +// CHECK:STDOUT: %var.patt.96f: %pattern_type.65a = ref_binding_pattern r#var [concrete = constants.%var.patt.96f] +// CHECK:STDOUT: %var.var_patt.891: %pattern_type.65a = var_pattern %var.patt.96f [concrete = constants.%var.var_patt.891] // CHECK:STDOUT: %var.var.061: ref %B = var %var.var_patt.891 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %pa.patt: %pattern_type.1fa = value_binding_pattern pa [concrete] +// CHECK:STDOUT: %pa.patt: %pattern_type.1fa = value_binding_pattern pa [concrete = constants.%pa.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc7: type = splice_block %ptr.loc7 [concrete = constants.%ptr.25f] { // CHECK:STDOUT: %Cpp.ref.loc7: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] @@ -94,7 +106,7 @@ let pwb: Cpp.B* = &Cpp.Wrap.r#var(Cpp.B); // CHECK:STDOUT: } // CHECK:STDOUT: %pa: %ptr.25f = value_binding pa, @__global_init.%addr.loc7 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %pb.patt: %pattern_type.733 = value_binding_pattern pb [concrete] +// CHECK:STDOUT: %pb.patt: %pattern_type.733 = value_binding_pattern pb [concrete = constants.%pb.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc8: type = splice_block %ptr.loc8 [concrete = constants.%ptr.dc0] { // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] @@ -103,7 +115,7 @@ let pwb: Cpp.B* = &Cpp.Wrap.r#var(Cpp.B); // CHECK:STDOUT: } // CHECK:STDOUT: %pb: %ptr.dc0 = value_binding pb, @__global_init.%addr.loc8 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %pwa.patt: %pattern_type.1fa = value_binding_pattern pwa [concrete] +// CHECK:STDOUT: %pwa.patt: %pattern_type.1fa = value_binding_pattern pwa [concrete = constants.%pwa.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc9: type = splice_block %ptr.loc9 [concrete = constants.%ptr.25f] { // CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] @@ -112,7 +124,7 @@ let pwb: Cpp.B* = &Cpp.Wrap.r#var(Cpp.B); // CHECK:STDOUT: } // CHECK:STDOUT: %pwa: %ptr.25f = value_binding pwa, @__global_init.%addr.loc9 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %pwb.patt: %pattern_type.733 = value_binding_pattern pwb [concrete] +// CHECK:STDOUT: %pwb.patt: %pattern_type.733 = value_binding_pattern pwb [concrete = constants.%pwb.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc10: type = splice_block %ptr.loc10 [concrete = constants.%ptr.dc0] { // CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] diff --git a/toolchain/check/testdata/interop/cpp/type_alias/import.carbon b/toolchain/check/testdata/interop/cpp/type_alias/import.carbon index 49c95f48d26f..ad7b43661780 100644 --- a/toolchain/check/testdata/interop/cpp/type_alias/import.carbon +++ b/toolchain/check/testdata/interop/cpp/type_alias/import.carbon @@ -57,6 +57,8 @@ fn H(var c: Cpp.C, var d: Cpp.D) { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = ref_binding_pattern n [concrete] +// CHECK:STDOUT: %n.var_patt: %pattern_type.6b6 = var_pattern %n.patt [concrete] // CHECK:STDOUT: %int_42.20e: Core.IntLiteral = int_value 42 [concrete] // CHECK:STDOUT: %ImplicitAs.type.914: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %To: Core.IntLiteral = symbolic_binding To, 0 [symbolic] @@ -74,6 +76,8 @@ fn H(var c: Cpp.C, var d: Cpp.D) { // CHECK:STDOUT: %int_42.ac4: %i32 = int_value 42 [concrete] // CHECK:STDOUT: %ptr.d08: type = ptr_type %i32 [concrete] // CHECK:STDOUT: %pattern_type.f00: type = pattern_type %ptr.d08 [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.f00 = ref_binding_pattern p [concrete] +// CHECK:STDOUT: %p.var_patt: %pattern_type.f00 = var_pattern %p.patt [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.type.ff5: type = fn_type @ptr.as.Copy.impl.Op, @ptr.as.Copy.impl(%T.67d) [symbolic] @@ -106,8 +110,8 @@ fn H(var c: Cpp.C, var d: Cpp.D) { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = ref_binding_pattern n [concrete] -// CHECK:STDOUT: %n.var_patt: %pattern_type.6b6 = var_pattern %n.patt [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = ref_binding_pattern n [concrete = constants.%n.patt] +// CHECK:STDOUT: %n.var_patt: %pattern_type.6b6 = var_pattern %n.patt [concrete = constants.%n.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %n.var: ref %i32 = var %n.var_patt // CHECK:STDOUT: %int_42: Core.IntLiteral = int_value 42 [concrete = constants.%int_42.20e] @@ -125,8 +129,8 @@ fn H(var c: Cpp.C, var d: Cpp.D) { // CHECK:STDOUT: } // CHECK:STDOUT: %n: ref %i32 = ref_binding n, %n.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: %pattern_type.f00 = ref_binding_pattern p [concrete] -// CHECK:STDOUT: %p.var_patt: %pattern_type.f00 = var_pattern %p.patt [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.f00 = ref_binding_pattern p [concrete = constants.%p.patt] +// CHECK:STDOUT: %p.var_patt: %pattern_type.f00 = var_pattern %p.patt [concrete = constants.%p.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %p.var: ref %ptr.d08 = var %p.var_patt // CHECK:STDOUT: %n.ref: ref %i32 = name_ref n, %n @@ -167,6 +171,8 @@ fn H(var c: Cpp.C, var d: Cpp.D) { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %ptr.0a2: type = ptr_type %C [concrete] // CHECK:STDOUT: %pattern_type.8fa: type = pattern_type %ptr.0a2 [concrete] +// CHECK:STDOUT: %pd.patt: %pattern_type.8fa = ref_binding_pattern pd [concrete] +// CHECK:STDOUT: %pd.var_patt: %pattern_type.8fa = var_pattern %pd.patt [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.type.ff5: type = fn_type @ptr.as.Copy.impl.Op, @ptr.as.Copy.impl(%T.67d) [symbolic] @@ -178,6 +184,8 @@ fn H(var c: Cpp.C, var d: Cpp.D) { // CHECK:STDOUT: %Copy.WithSelf.Op.type.aaa: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet) [concrete] // CHECK:STDOUT: %.51b: type = fn_type_with_self_type %Copy.WithSelf.Op.type.aaa, %Copy.facet [concrete] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.specific_fn: = specific_function %ptr.as.Copy.impl.Op.4ad, @ptr.as.Copy.impl.Op(%C) [concrete] +// CHECK:STDOUT: %pc.patt: %pattern_type.8fa = ref_binding_pattern pc [concrete] +// CHECK:STDOUT: %pc.var_patt: %pattern_type.8fa = var_pattern %pc.patt [concrete] // CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] // CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -196,8 +204,8 @@ fn H(var c: Cpp.C, var d: Cpp.D) { // CHECK:STDOUT: fn @H(%c.param: ref %C, %d.param: ref %C) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %pd.patt: %pattern_type.8fa = ref_binding_pattern pd [concrete] -// CHECK:STDOUT: %pd.var_patt: %pattern_type.8fa = var_pattern %pd.patt [concrete] +// CHECK:STDOUT: %pd.patt: %pattern_type.8fa = ref_binding_pattern pd [concrete = constants.%pd.patt] +// CHECK:STDOUT: %pd.var_patt: %pattern_type.8fa = var_pattern %pd.patt [concrete = constants.%pd.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %pd.var: ref %ptr.0a2 = var %pd.var_patt // CHECK:STDOUT: %c.ref: ref %C = name_ref c, %c @@ -215,8 +223,8 @@ fn H(var c: Cpp.C, var d: Cpp.D) { // CHECK:STDOUT: } // CHECK:STDOUT: %pd: ref %ptr.0a2 = ref_binding pd, %pd.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %pc.patt: %pattern_type.8fa = ref_binding_pattern pc [concrete] -// CHECK:STDOUT: %pc.var_patt: %pattern_type.8fa = var_pattern %pc.patt [concrete] +// CHECK:STDOUT: %pc.patt: %pattern_type.8fa = ref_binding_pattern pc [concrete = constants.%pc.patt] +// CHECK:STDOUT: %pc.var_patt: %pattern_type.8fa = var_pattern %pc.patt [concrete = constants.%pc.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %pc.var: ref %ptr.0a2 = var %pc.var_patt // CHECK:STDOUT: %d.ref: ref %C = name_ref d, %d diff --git a/toolchain/check/testdata/interop/cpp/var/import/global.carbon b/toolchain/check/testdata/interop/cpp/var/import/global.carbon index 193e207958fb..89dea22bfee0 100644 --- a/toolchain/check/testdata/interop/cpp/var/import/global.carbon +++ b/toolchain/check/testdata/interop/cpp/var/import/global.carbon @@ -78,10 +78,19 @@ fn MyF() { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.bbc: type = pattern_type %C [concrete] +// CHECK:STDOUT: %local.patt: %pattern_type.bbc = value_binding_pattern local [concrete] +// CHECK:STDOUT: %global.patt: %pattern_type.bbc = ref_binding_pattern global [concrete] +// CHECK:STDOUT: %global.var_patt: %pattern_type.bbc = var_pattern %global.patt [concrete] // CHECK:STDOUT: %ptr.0a2: type = ptr_type %C [concrete] // CHECK:STDOUT: %pattern_type.8fa: type = pattern_type %ptr.0a2 [concrete] +// CHECK:STDOUT: %local_ptr.patt: %pattern_type.8fa = value_binding_pattern local_ptr [concrete] +// CHECK:STDOUT: %global_ptr.patt: %pattern_type.8fa = ref_binding_pattern global_ptr [concrete] +// CHECK:STDOUT: %global_ptr.var_patt: %pattern_type.8fa = var_pattern %global_ptr.patt [concrete] +// CHECK:STDOUT: %local_ref.patt: %pattern_type.8fa = value_binding_pattern local_ref [concrete] // CHECK:STDOUT: %const: type = const_type %ptr.0a2 [concrete] // CHECK:STDOUT: %pattern_type.635: type = pattern_type %const [concrete] +// CHECK:STDOUT: %global_ref.patt: %pattern_type.635 = ref_binding_pattern global_ref [concrete] +// CHECK:STDOUT: %global_ref.var_patt: %pattern_type.635 = var_pattern %global_ref.patt [concrete] // CHECK:STDOUT: %global_ref.var: ref %ptr.0a2 = var imports.%global_ref.var_patt [concrete] // CHECK:STDOUT: %addr: %ptr.0a2 = addr_of imports.%global.var [concrete] // CHECK:STDOUT: } @@ -99,14 +108,14 @@ fn MyF() { // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} -// CHECK:STDOUT: %global.patt: %pattern_type.bbc = ref_binding_pattern global [concrete] -// CHECK:STDOUT: %global.var_patt: %pattern_type.bbc = var_pattern %global.patt [concrete] +// CHECK:STDOUT: %global.patt: %pattern_type.bbc = ref_binding_pattern global [concrete = constants.%global.patt] +// CHECK:STDOUT: %global.var_patt: %pattern_type.bbc = var_pattern %global.patt [concrete = constants.%global.var_patt] // CHECK:STDOUT: %global.var: ref %C = var %global.var_patt [concrete] -// CHECK:STDOUT: %global_ptr.patt: %pattern_type.8fa = ref_binding_pattern global_ptr [concrete] -// CHECK:STDOUT: %global_ptr.var_patt: %pattern_type.8fa = var_pattern %global_ptr.patt [concrete] +// CHECK:STDOUT: %global_ptr.patt: %pattern_type.8fa = ref_binding_pattern global_ptr [concrete = constants.%global_ptr.patt] +// CHECK:STDOUT: %global_ptr.var_patt: %pattern_type.8fa = var_pattern %global_ptr.patt [concrete = constants.%global_ptr.var_patt] // CHECK:STDOUT: %global_ptr.var: ref %ptr.0a2 = var %global_ptr.var_patt [concrete] -// CHECK:STDOUT: %global_ref.patt: %pattern_type.635 = ref_binding_pattern global_ref [concrete] -// CHECK:STDOUT: %global_ref.var_patt: %pattern_type.635 = var_pattern %global_ref.patt [concrete] +// CHECK:STDOUT: %global_ref.patt: %pattern_type.635 = ref_binding_pattern global_ref [concrete = constants.%global_ref.patt] +// CHECK:STDOUT: %global_ref.var_patt: %pattern_type.635 = var_pattern %global_ref.patt [concrete = constants.%global_ref.var_patt] // CHECK:STDOUT: %global_ref.var: ref %const = var %global_ref.var_patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -135,42 +144,42 @@ fn MyF() { // CHECK:STDOUT: fn @MyF() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %local.patt: %pattern_type.bbc = value_binding_pattern local [concrete] +// CHECK:STDOUT: %local.patt: %pattern_type.bbc = value_binding_pattern local [concrete = constants.%local.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc7_29: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %global.ref: ref %C = name_ref global, imports.%global.var [concrete = imports.%global.var] +// CHECK:STDOUT: %.loc7_32: %C = acquire_value %global.ref // CHECK:STDOUT: %.loc7_24: type = splice_block %C.ref.loc7 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc7_21: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref.loc7: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc7_32: %C = acquire_value %global.ref // CHECK:STDOUT: %local: %C = value_binding local, %.loc7_32 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %local_ptr.patt: %pattern_type.8fa = value_binding_pattern local_ptr [concrete] +// CHECK:STDOUT: %local_ptr.patt: %pattern_type.8fa = value_binding_pattern local_ptr [concrete = constants.%local_ptr.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc8_34: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %global_ptr.ref: ref %ptr.0a2 = name_ref global_ptr, imports.%global_ptr.var [concrete = imports.%global_ptr.var] +// CHECK:STDOUT: %.loc8_37: %ptr.0a2 = acquire_value %global_ptr.ref // CHECK:STDOUT: %.loc8_30: type = splice_block %ptr.loc8 [concrete = constants.%ptr.0a2] { // CHECK:STDOUT: %Cpp.ref.loc8_25: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref.loc8: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %ptr.loc8: type = ptr_type %C.ref.loc8 [concrete = constants.%ptr.0a2] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc8_37: %ptr.0a2 = acquire_value %global_ptr.ref // CHECK:STDOUT: %local_ptr: %ptr.0a2 = value_binding local_ptr, %.loc8_37 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %local_ref.patt: %pattern_type.8fa = value_binding_pattern local_ref [concrete] +// CHECK:STDOUT: %local_ref.patt: %pattern_type.8fa = value_binding_pattern local_ref [concrete = constants.%local_ref.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc9_34: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %global_ref.ref: ref %const = name_ref global_ref, imports.%global_ref.var [concrete = imports.%global_ref.var] +// CHECK:STDOUT: %.loc9_37.1: ref %ptr.0a2 = as_compatible %global_ref.ref [concrete = constants.%global_ref.var] +// CHECK:STDOUT: %.loc9_37.2: ref %ptr.0a2 = converted %global_ref.ref, %.loc9_37.1 [concrete = constants.%global_ref.var] +// CHECK:STDOUT: %addr: %ptr.0a2 = addr_of imports.%global.var [concrete = constants.%addr] +// CHECK:STDOUT: %.loc9_37.3: %ptr.0a2 = acquire_value %.loc9_37.2 [concrete = constants.%addr] // CHECK:STDOUT: %.loc9_30: type = splice_block %ptr.loc9 [concrete = constants.%ptr.0a2] { // CHECK:STDOUT: %Cpp.ref.loc9_25: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %C.ref.loc9: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %ptr.loc9: type = ptr_type %C.ref.loc9 [concrete = constants.%ptr.0a2] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc9_37.1: ref %ptr.0a2 = as_compatible %global_ref.ref [concrete = constants.%global_ref.var] -// CHECK:STDOUT: %.loc9_37.2: ref %ptr.0a2 = converted %global_ref.ref, %.loc9_37.1 [concrete = constants.%global_ref.var] -// CHECK:STDOUT: %addr: %ptr.0a2 = addr_of imports.%global.var [concrete = constants.%addr] -// CHECK:STDOUT: %.loc9_37.3: %ptr.0a2 = acquire_value %.loc9_37.2 [concrete = constants.%addr] // CHECK:STDOUT: %local_ref: %ptr.0a2 = value_binding local_ref, %.loc9_37.3 // CHECK:STDOUT: return // CHECK:STDOUT: } @@ -210,7 +219,7 @@ fn MyF() { // CHECK:STDOUT: fn @MyF() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %local.patt: = value_binding_pattern local [concrete] +// CHECK:STDOUT: %local.patt: = value_binding_pattern local [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc22_44: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %global.ref: = name_ref global, [concrete = ] diff --git a/toolchain/check/testdata/interop/cpp/var/import/namespace.carbon b/toolchain/check/testdata/interop/cpp/var/import/namespace.carbon index c0b81b6ca657..c42a3269b1e5 100644 --- a/toolchain/check/testdata/interop/cpp/var/import/namespace.carbon +++ b/toolchain/check/testdata/interop/cpp/var/import/namespace.carbon @@ -52,6 +52,8 @@ fn F() { // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -59,8 +61,8 @@ fn F() { // CHECK:STDOUT: .c = %c.var // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/let/compile_time_bindings.carbon b/toolchain/check/testdata/let/compile_time_bindings.carbon index a49c08d5cb3b..fa0b4cd3d8a1 100644 --- a/toolchain/check/testdata/let/compile_time_bindings.carbon +++ b/toolchain/check/testdata/let/compile_time_bindings.carbon @@ -180,10 +180,13 @@ impl i32 as Empty { // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %.262: Core.Form = init_form %empty_tuple.type [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %empty_tuple.type [concrete] // CHECK:STDOUT: %C.F.type: type = fn_type @C.F [concrete] // CHECK:STDOUT: %C.F: %C.F.type = struct_value () [concrete] // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] +// CHECK:STDOUT: %x.patt: %pattern_type = value_binding_pattern x [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: } @@ -206,8 +209,8 @@ impl i32 as Empty { // CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: %C.F.decl: %C.F.type = fn_decl @C.F [concrete = constants.%C.F] { -// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %.loc5_14.2 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %.loc5_14.2 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc5_14.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc5_14.2: type = converted %.loc5_14.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -216,16 +219,16 @@ impl i32 as Empty { // CHECK:STDOUT: %return: ref %empty_tuple.type = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type = value_binding_pattern x [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = value_binding_pattern x [concrete = constants.%x.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc10_17.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc10_17.2: %empty_tuple.type = converted %.loc10_17.1, %empty_tuple [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc10_12.1: type = splice_block %.loc10_12.3 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] // CHECK:STDOUT: %.loc10_12.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc10_12.3: type = converted %.loc10_12.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: } -// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc10_17.2: %empty_tuple.type = converted %.loc10_17.1, %empty_tuple [concrete = constants.%empty_tuple] // CHECK:STDOUT: %x: %empty_tuple.type = value_binding x, %.loc10_17.2 // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -253,7 +256,10 @@ impl i32 as Empty { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = value_binding_pattern x [concrete] // CHECK:STDOUT: %.262: Core.Form = init_form %empty_tuple.type [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %empty_tuple.type [concrete] // CHECK:STDOUT: %C.F.type: type = fn_type @C.F [concrete] // CHECK:STDOUT: %C.F: %C.F.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] @@ -278,20 +284,20 @@ impl i32 as Empty { // CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type = value_binding_pattern x [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = value_binding_pattern x [concrete = constants.%x.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc9_17.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc9_17.2: %empty_tuple.type = converted %.loc9_17.1, %empty_tuple [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc9_12.1: type = splice_block %.loc9_12.3 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] // CHECK:STDOUT: %.loc9_12.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc9_12.3: type = converted %.loc9_12.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: } -// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc9_17.2: %empty_tuple.type = converted %.loc9_17.1, %empty_tuple [concrete = constants.%empty_tuple] // CHECK:STDOUT: %x: %empty_tuple.type = value_binding x, %.loc9_17.2 // CHECK:STDOUT: %C.F.decl: %C.F.type = fn_decl @C.F [concrete = constants.%C.F] { -// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %.loc10_14.2 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %.loc10_14.2 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc10_14.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc10_14.2: type = converted %.loc10_14.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -325,34 +331,37 @@ impl i32 as Empty { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = value_binding_pattern a [concrete] // CHECK:STDOUT: %tuple.type.9fb: type = tuple_type (%empty_tuple.type) [concrete] // CHECK:STDOUT: %tuple.f41: %tuple.type.9fb = tuple_value (%empty_tuple) [concrete] // CHECK:STDOUT: %pattern_type.559: type = pattern_type %tuple.type.9fb [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.559 = symbolic_binding_pattern b, 0 [symbolic] // CHECK:STDOUT: %b: %tuple.type.9fb = symbolic_binding b, 0 [symbolic] // CHECK:STDOUT: %C.F.type: type = fn_type @C.F [concrete] // CHECK:STDOUT: %C.F: %C.F.type = struct_value () [concrete] // CHECK:STDOUT: %tuple.type.2d5: type = tuple_type (%empty_tuple.type, %empty_tuple.type, %empty_tuple.type) [concrete] // CHECK:STDOUT: %tuple.7e4: %tuple.type.2d5 = tuple_value (%empty_tuple, %empty_tuple, %empty_tuple) [concrete] // CHECK:STDOUT: %pattern_type.8c1: type = pattern_type %tuple.type.2d5 [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.8c1 = value_binding_pattern d [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc9_17.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %empty_tuple.loc9: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc9_17.2: %empty_tuple.type = converted %.loc9_17.1, %empty_tuple.loc9 [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc9_12.1: type = splice_block %.loc9_12.3 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %.Self.loc9: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] // CHECK:STDOUT: %.loc9_12.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc9_12.3: type = converted %.loc9_12.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: } -// CHECK:STDOUT: %empty_tuple.loc9: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc9_17.2: %empty_tuple.type = converted %.loc9_17.1, %empty_tuple.loc9 [concrete = constants.%empty_tuple] // CHECK:STDOUT: %a: %empty_tuple.type = value_binding a, %.loc9_17.2 // CHECK:STDOUT: %C.F.decl: %C.F.type = fn_decl @C.F [concrete = constants.%C.F] { -// CHECK:STDOUT: %b.patt: %pattern_type.559 = symbolic_binding_pattern b, 0 [concrete] +// CHECK:STDOUT: %b.patt.loc10_9.1: %pattern_type.559 = symbolic_binding_pattern b, 0 [symbolic = %b.patt.loc10_9.2 (constants.%b.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc10_16.1: type = splice_block %.loc10_16.4 [concrete = constants.%tuple.type.9fb] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -364,12 +373,20 @@ impl i32 as Empty { // CHECK:STDOUT: %b.loc10_9.2: %tuple.type.9fb = symbolic_binding b, 0 [symbolic = %b.loc10_9.1 (constants.%b)] // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.8c1 = value_binding_pattern d [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.8c1 = value_binding_pattern d [concrete = constants.%d.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc26_28: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc26_32: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc26_36: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc26_37.1: %tuple.type.2d5 = tuple_literal (%.loc26_28, %.loc26_32, %.loc26_36) [concrete = constants.%tuple.7e4] +// CHECK:STDOUT: %empty_tuple.loc26_28: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc26_37.2: %empty_tuple.type = converted %.loc26_28, %empty_tuple.loc26_28 [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %empty_tuple.loc26_32: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc26_37.3: %empty_tuple.type = converted %.loc26_32, %empty_tuple.loc26_32 [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %empty_tuple.loc26_36: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc26_37.4: %empty_tuple.type = converted %.loc26_36, %empty_tuple.loc26_36 [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %tuple: %tuple.type.2d5 = tuple_value (%.loc26_37.2, %.loc26_37.3, %.loc26_37.4) [concrete = constants.%tuple.7e4] +// CHECK:STDOUT: %.loc26_37.5: %tuple.type.2d5 = converted %.loc26_37.1, %tuple [concrete = constants.%tuple.7e4] // CHECK:STDOUT: %.loc26_22.1: type = splice_block %.loc26_22.6 [concrete = constants.%tuple.type.2d5] { // CHECK:STDOUT: %.Self.loc26: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] // CHECK:STDOUT: %.loc26_13: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] @@ -381,14 +398,6 @@ impl i32 as Empty { // CHECK:STDOUT: %.loc26_22.5: type = converted constants.%empty_tuple, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: %.loc26_22.6: type = converted %.loc26_22.2, constants.%tuple.type.2d5 [concrete = constants.%tuple.type.2d5] // CHECK:STDOUT: } -// CHECK:STDOUT: %empty_tuple.loc26_28: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc26_37.2: %empty_tuple.type = converted %.loc26_28, %empty_tuple.loc26_28 [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %empty_tuple.loc26_32: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc26_37.3: %empty_tuple.type = converted %.loc26_32, %empty_tuple.loc26_32 [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %empty_tuple.loc26_36: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc26_37.4: %empty_tuple.type = converted %.loc26_36, %empty_tuple.loc26_36 [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %tuple: %tuple.type.2d5 = tuple_value (%.loc26_37.2, %.loc26_37.3, %.loc26_37.4) [concrete = constants.%tuple.7e4] -// CHECK:STDOUT: %.loc26_37.5: %tuple.type.2d5 = converted %.loc26_37.1, %tuple [concrete = constants.%tuple.7e4] // CHECK:STDOUT: %d: %tuple.type.2d5 = value_binding d, %.loc26_37.5 // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -401,12 +410,14 @@ impl i32 as Empty { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @C.F(%b.loc10_9.2: %tuple.type.9fb) { +// CHECK:STDOUT: %b.patt.loc10_9.2: %pattern_type.559 = symbolic_binding_pattern b, 0 [symbolic = %b.patt.loc10_9.2 (constants.%b.patt)] // CHECK:STDOUT: %b.loc10_9.1: %tuple.type.9fb = symbolic_binding b, 0 [symbolic = %b.loc10_9.1 (constants.%b)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C.F(constants.%b) { +// CHECK:STDOUT: %b.patt.loc10_9.2 => constants.%b.patt // CHECK:STDOUT: %b.loc10_9.1 => constants.%b // CHECK:STDOUT: } // CHECK:STDOUT: @@ -418,8 +429,11 @@ impl i32 as Empty { // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %.262: Core.Form = init_form %empty_tuple.type [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %empty_tuple.type [concrete] // CHECK:STDOUT: %C.F.type: type = fn_type @C.F [concrete] // CHECK:STDOUT: %C.F: %C.F.type = struct_value () [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = value_binding_pattern x [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: } @@ -442,8 +456,8 @@ impl i32 as Empty { // CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: %C.F.decl: %C.F.type = fn_decl @C.F [concrete = constants.%C.F] { -// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %.loc5_14.2 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %.loc5_14.2 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc5_14.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc5_14.2: type = converted %.loc5_14.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -452,7 +466,7 @@ impl i32 as Empty { // CHECK:STDOUT: %return: ref %empty_tuple.type = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type = value_binding_pattern x [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = value_binding_pattern x [concrete = constants.%x.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -504,6 +518,8 @@ impl i32 as Empty { // CHECK:STDOUT: %impl.elem0: type = impl_witness_access %I.lookup_impl_witness, element0 [symbolic] // CHECK:STDOUT: %.157: Core.Form = init_form %impl.elem0 [symbolic] // CHECK:STDOUT: %pattern_type.0a2: type = pattern_type %impl.elem0 [symbolic] +// CHECK:STDOUT: %return.param_patt: %pattern_type.0a2 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt: %pattern_type.0a2 = return_slot_pattern %return.param_patt, %impl.elem0 [symbolic] // CHECK:STDOUT: %I.WithSelf.F.type: type = fn_type @I.WithSelf.F, @I.WithSelf(%Self) [symbolic] // CHECK:STDOUT: %I.WithSelf.F: %I.WithSelf.F.type = struct_value () [symbolic] // CHECK:STDOUT: %assoc1: %I.assoc_type = assoc_entity element1, @I.WithSelf.%I.WithSelf.F.decl [concrete] @@ -537,8 +553,8 @@ impl i32 as Empty { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: } // CHECK:STDOUT: %I.WithSelf.F.decl: @I.WithSelf.%I.WithSelf.F.type (%I.WithSelf.F.type) = fn_decl @I.WithSelf.F [symbolic = @I.WithSelf.%I.WithSelf.F (constants.%I.WithSelf.F)] { -// CHECK:STDOUT: %return.param_patt: @I.WithSelf.F.%pattern_type (%pattern_type.0a2) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @I.WithSelf.F.%pattern_type (%pattern_type.0a2) = return_slot_pattern %return.param_patt, %T.ref [concrete] +// CHECK:STDOUT: %return.param_patt.loc6_13.1: @I.WithSelf.F.%pattern_type (%pattern_type.0a2) = out_param_pattern [symbolic = %return.param_patt.loc6_13.2 (constants.%return.param_patt)] +// CHECK:STDOUT: %return.patt.loc6_10.1: @I.WithSelf.F.%pattern_type (%pattern_type.0a2) = return_slot_pattern %return.param_patt.loc6_13.1, %T.ref [symbolic = %return.patt.loc6_10.2 (constants.%return.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %impl.elem0.loc6_13.2: type = impl_witness_access constants.%I.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc6_13.1 (constants.%impl.elem0)] // CHECK:STDOUT: %T.ref: type = name_ref T, %impl.elem0.loc6_13.2 [symbolic = %impl.elem0.loc6_13.1 (constants.%impl.elem0)] @@ -563,6 +579,8 @@ impl i32 as Empty { // CHECK:STDOUT: %impl.elem0.loc6_13.1: type = impl_witness_access %I.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc6_13.1 (constants.%impl.elem0)] // CHECK:STDOUT: %.loc6_13.1: Core.Form = init_form %impl.elem0.loc6_13.1 [symbolic = %.loc6_13.1 (constants.%.157)] // CHECK:STDOUT: %pattern_type: type = pattern_type %impl.elem0.loc6_13.1 [symbolic = %pattern_type (constants.%pattern_type.0a2)] +// CHECK:STDOUT: %return.param_patt.loc6_13.2: @I.WithSelf.F.%pattern_type (%pattern_type.0a2) = out_param_pattern [symbolic = %return.param_patt.loc6_13.2 (constants.%return.param_patt)] +// CHECK:STDOUT: %return.patt.loc6_10.2: @I.WithSelf.F.%pattern_type (%pattern_type.0a2) = return_slot_pattern %return.param_patt.loc6_13.2, %impl.elem0.loc6_13.1 [symbolic = %return.patt.loc6_10.2 (constants.%return.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn() -> out %return.param: @I.WithSelf.F.%impl.elem0.loc6_13.1 (%impl.elem0); // CHECK:STDOUT: } @@ -575,6 +593,8 @@ impl i32 as Empty { // CHECK:STDOUT: %impl.elem0.loc6_13.1 => constants.%impl.elem0 // CHECK:STDOUT: %.loc6_13.1 => constants.%.157 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.0a2 +// CHECK:STDOUT: %return.param_patt.loc6_13.2 => constants.%return.param_patt +// CHECK:STDOUT: %return.patt.loc6_10.2 => constants.%return.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_return_in_class.carbon @@ -584,6 +604,7 @@ impl i32 as Empty { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = value_binding_pattern T [concrete] // 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] @@ -614,7 +635,7 @@ impl i32 as Empty { // CHECK:STDOUT: // CHECK:STDOUT: class @I { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = value_binding_pattern T [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = value_binding_pattern T [concrete = constants.%T.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc9_11.1: type = splice_block %.loc9_11.2 [concrete = type] { @@ -623,7 +644,7 @@ impl i32 as Empty { // CHECK:STDOUT: } // CHECK:STDOUT: %T: type = value_binding T, %i32 // CHECK:STDOUT: %I.F.decl: %I.F.type = fn_decl @I.F [concrete = constants.%I.F] { -// CHECK:STDOUT: %return.patt: = return_slot_pattern , [concrete] +// CHECK:STDOUT: %return.patt: = return_slot_pattern , [concrete = ] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, @I.%T // CHECK:STDOUT: %return: = return_slot @@ -645,6 +666,7 @@ impl i32 as Empty { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = value_binding_pattern T [concrete] // 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] @@ -670,7 +692,7 @@ impl i32 as Empty { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = value_binding_pattern T [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = value_binding_pattern T [concrete = constants.%T.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc8_9.1: type = splice_block %.loc8_9.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -678,7 +700,7 @@ impl i32 as Empty { // CHECK:STDOUT: } // CHECK:STDOUT: %T: type = value_binding T, @__global_init.%i32 // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: = return_slot_pattern , [concrete] +// CHECK:STDOUT: %return.patt: = return_slot_pattern , [concrete = ] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, file.%T // CHECK:STDOUT: %return: = return_slot @@ -706,6 +728,7 @@ impl i32 as Empty { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %Zero.patt: %pattern_type.6b6 = value_binding_pattern Zero [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -765,13 +788,9 @@ impl i32 as Empty { // CHECK:STDOUT: // CHECK:STDOUT: impl @i32.as.Empty.impl: %i32.loc6 as %Empty.ref { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %Zero.patt: %pattern_type.6b6 = value_binding_pattern Zero [concrete] +// CHECK:STDOUT: %Zero.patt: %pattern_type.6b6 = value_binding_pattern Zero [concrete = constants.%Zero.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0.5c6] -// CHECK:STDOUT: %.loc11_14: type = splice_block %i32.loc11 [concrete = constants.%i32] { -// CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] -// CHECK:STDOUT: %i32.loc11: type = type_literal constants.%i32 [concrete = constants.%i32] -// CHECK:STDOUT: } // CHECK:STDOUT: %impl.elem0: %.1c5 = impl_witness_access constants.%ImplicitAs.impl_witness.a23, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] // CHECK:STDOUT: %bound_method.loc11_20.1: = bound_method %int_0, %impl.elem0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] // CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] @@ -779,6 +798,10 @@ impl i32 as Empty { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call: init %i32 = call %bound_method.loc11_20.2(%int_0) [concrete = constants.%int_0.3c0] // CHECK:STDOUT: %.loc11_20.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_0.3c0] // CHECK:STDOUT: %.loc11_20.2: %i32 = converted %int_0, %.loc11_20.1 [concrete = constants.%int_0.3c0] +// CHECK:STDOUT: %.loc11_14: type = splice_block %i32.loc11 [concrete = constants.%i32] { +// CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] +// CHECK:STDOUT: %i32.loc11: type = type_literal constants.%i32 [concrete = constants.%i32] +// CHECK:STDOUT: } // CHECK:STDOUT: %Zero: %i32 = value_binding Zero, %.loc11_20.2 // CHECK:STDOUT: %Empty.impl_witness_table = impl_witness_table (), @i32.as.Empty.impl [concrete] // CHECK:STDOUT: %Empty.impl_witness: = impl_witness %Empty.impl_witness_table [concrete = constants.%Empty.impl_witness] diff --git a/toolchain/check/testdata/let/convert.carbon b/toolchain/check/testdata/let/convert.carbon index 93352cda734d..e7b7e1d086fb 100644 --- a/toolchain/check/testdata/let/convert.carbon +++ b/toolchain/check/testdata/let/convert.carbon @@ -53,22 +53,16 @@ fn G() { // CHECK:STDOUT: %tuple.04d: %tuple.type.ff9 = tuple_value (%i32, %i32, %i32) [concrete] // CHECK:STDOUT: %tuple.type.555: type = tuple_type (%i32, %i32, %i32) [concrete] // CHECK:STDOUT: %pattern_type.777: type = pattern_type %tuple.type.555 [concrete] +// CHECK:STDOUT: %w.patt: %pattern_type.777 = value_binding_pattern w [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F() -> out %return.param: %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %w.patt: %pattern_type.777 = value_binding_pattern w [concrete] +// CHECK:STDOUT: %w.patt: %pattern_type.777 = value_binding_pattern w [concrete = constants.%w.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %v.ref: ref %tuple.type.555 = name_ref v, %v -// CHECK:STDOUT: %.loc8_24.1: type = splice_block %.loc8_24.3 [concrete = constants.%tuple.type.555] { -// CHECK:STDOUT: %i32.loc8_11: type = type_literal constants.%i32 [concrete = constants.%i32] -// CHECK:STDOUT: %i32.loc8_16: type = type_literal constants.%i32 [concrete = constants.%i32] -// CHECK:STDOUT: %i32.loc8_21: type = type_literal constants.%i32 [concrete = constants.%i32] -// CHECK:STDOUT: %.loc8_24.2: %tuple.type.ff9 = tuple_literal (%i32.loc8_11, %i32.loc8_16, %i32.loc8_21) [concrete = constants.%tuple.04d] -// CHECK:STDOUT: %.loc8_24.3: type = converted %.loc8_24.2, constants.%tuple.type.555 [concrete = constants.%tuple.type.555] -// CHECK:STDOUT: } // CHECK:STDOUT: %tuple.elem0.loc8: ref %i32 = tuple_access %v.ref, element0 // CHECK:STDOUT: %.loc8_28.1: %i32 = acquire_value %tuple.elem0.loc8 // CHECK:STDOUT: %tuple.elem1.loc8: ref %i32 = tuple_access %v.ref, element1 @@ -77,6 +71,13 @@ fn G() { // CHECK:STDOUT: %.loc8_28.3: %i32 = acquire_value %tuple.elem2.loc8 // CHECK:STDOUT: %tuple: %tuple.type.555 = tuple_value (%.loc8_28.1, %.loc8_28.2, %.loc8_28.3) // CHECK:STDOUT: %.loc8_28.4: %tuple.type.555 = converted %v.ref, %tuple +// CHECK:STDOUT: %.loc8_24.1: type = splice_block %.loc8_24.3 [concrete = constants.%tuple.type.555] { +// CHECK:STDOUT: %i32.loc8_11: type = type_literal constants.%i32 [concrete = constants.%i32] +// CHECK:STDOUT: %i32.loc8_16: type = type_literal constants.%i32 [concrete = constants.%i32] +// CHECK:STDOUT: %i32.loc8_21: type = type_literal constants.%i32 [concrete = constants.%i32] +// CHECK:STDOUT: %.loc8_24.2: %tuple.type.ff9 = tuple_literal (%i32.loc8_11, %i32.loc8_16, %i32.loc8_21) [concrete = constants.%tuple.04d] +// CHECK:STDOUT: %.loc8_24.3: type = converted %.loc8_24.2, constants.%tuple.type.555 [concrete = constants.%tuple.type.555] +// CHECK:STDOUT: } // CHECK:STDOUT: %w: %tuple.type.555 = value_binding w, %.loc8_28.4 // CHECK:STDOUT: // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/let/fail_duplicate_decl.carbon b/toolchain/check/testdata/let/fail_duplicate_decl.carbon index 15ce1c784f55..a2040291306d 100644 --- a/toolchain/check/testdata/let/fail_duplicate_decl.carbon +++ b/toolchain/check/testdata/let/fail_duplicate_decl.carbon @@ -34,6 +34,7 @@ fn F() { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.patt.bb2e5b.1: %pattern_type.6b6 = value_binding_pattern a [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -51,6 +52,7 @@ fn F() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39, @Core.IntLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete] // CHECK:STDOUT: %bound_method.953: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_1.0c6: %i32 = int_value 1 [concrete] +// CHECK:STDOUT: %a.patt.bb2e5b.2: %pattern_type.6b6 = value_binding_pattern a [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.9f3: = bound_method %int_2.ecc, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] // CHECK:STDOUT: %bound_method.3cb: = bound_method %int_2.ecc, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] @@ -82,10 +84,9 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt.loc16: %pattern_type.6b6 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt.loc16: %pattern_type.6b6 = value_binding_pattern a [concrete = constants.%a.patt.bb2e5b.1] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] -// CHECK:STDOUT: %i32.loc16: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %impl.elem0.loc16: %.1c5 = impl_witness_access constants.%ImplicitAs.impl_witness.a23, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] // CHECK:STDOUT: %bound_method.loc16_23.1: = bound_method %int_1, %impl.elem0.loc16 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.094] // CHECK:STDOUT: %specific_fn.loc16: = specific_function %impl.elem0.loc16, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] @@ -93,12 +94,12 @@ fn F() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc16: init %i32 = call %bound_method.loc16_23.2(%int_1) [concrete = constants.%int_1.0c6] // CHECK:STDOUT: %.loc16_23.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc16 [concrete = constants.%int_1.0c6] // CHECK:STDOUT: %.loc16_23.2: %i32 = converted %int_1, %.loc16_23.1 [concrete = constants.%int_1.0c6] +// CHECK:STDOUT: %i32.loc16: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %a.loc16: %i32 = value_binding a, %.loc16_23.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt.loc24: %pattern_type.6b6 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt.loc24: %pattern_type.6b6 = value_binding_pattern a [concrete = constants.%a.patt.bb2e5b.2] // CHECK:STDOUT: } // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2.ecc] -// CHECK:STDOUT: %i32.loc24: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %impl.elem0.loc24: %.1c5 = impl_witness_access constants.%ImplicitAs.impl_witness.a23, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] // CHECK:STDOUT: %bound_method.loc24_23.1: = bound_method %int_2, %impl.elem0.loc24 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.9f3] // CHECK:STDOUT: %specific_fn.loc24: = specific_function %impl.elem0.loc24, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] @@ -106,6 +107,7 @@ fn F() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc24: init %i32 = call %bound_method.loc24_23.2(%int_2) [concrete = constants.%int_2.295] // CHECK:STDOUT: %.loc24_23.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc24 [concrete = constants.%int_2.295] // CHECK:STDOUT: %.loc24_23.2: %i32 = converted %int_2, %.loc24_23.1 [concrete = constants.%int_2.295] +// CHECK:STDOUT: %i32.loc24: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %a.loc24: %i32 = value_binding a, %.loc24_23.2 // CHECK:STDOUT: return // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/let/fail_generic_import.carbon b/toolchain/check/testdata/let/fail_generic_import.carbon index c45621b3a8fd..50d74b86f7d0 100644 --- a/toolchain/check/testdata/let/fail_generic_import.carbon +++ b/toolchain/check/testdata/let/fail_generic_import.carbon @@ -39,6 +39,7 @@ let a: T = 0; // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = value_binding_pattern T [concrete] // 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] @@ -61,7 +62,7 @@ let a: T = 0; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = value_binding_pattern T [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = value_binding_pattern T [concrete = constants.%T.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc8_9.1: type = splice_block %.loc8_9.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -100,7 +101,7 @@ let a: T = 0; // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: = value_binding_pattern a [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %T.ref: type = name_ref T, imports.%Implicit.T // CHECK:STDOUT: %a: = value_binding a, [concrete = ] diff --git a/toolchain/check/testdata/let/fail_missing_value.carbon b/toolchain/check/testdata/let/fail_missing_value.carbon index b24e9451d289..06835b84423c 100644 --- a/toolchain/check/testdata/let/fail_missing_value.carbon +++ b/toolchain/check/testdata/let/fail_missing_value.carbon @@ -34,8 +34,10 @@ fn F() { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %n.patt.2df: %pattern_type.6b6 = value_binding_pattern n [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] +// CHECK:STDOUT: %n.patt.c48: %pattern_type.6b6 = value_binding_pattern n [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -55,7 +57,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = value_binding_pattern n [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = value_binding_pattern n [concrete = constants.%n.patt.2df] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {} // CHECK:STDOUT: } @@ -63,7 +65,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = value_binding_pattern n [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = value_binding_pattern n [concrete = constants.%n.patt.c48] // CHECK:STDOUT: } // CHECK:STDOUT: return // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/let/fail_modifiers.carbon b/toolchain/check/testdata/let/fail_modifiers.carbon index a2782eff05d9..18d3e6fd9465 100644 --- a/toolchain/check/testdata/let/fail_modifiers.carbon +++ b/toolchain/check/testdata/let/fail_modifiers.carbon @@ -96,6 +96,7 @@ protected protected let i: i32 = 1; // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = value_binding_pattern b [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -113,6 +114,13 @@ protected protected let i: i32 = 1; // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39, @Core.IntLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete] // CHECK:STDOUT: %bound_method: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_1.0c6: %i32 = int_value 1 [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.6b6 = value_binding_pattern c [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.6b6 = value_binding_pattern d [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type.6b6 = value_binding_pattern e [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type.6b6 = value_binding_pattern f [concrete] +// CHECK:STDOUT: %g.patt: %pattern_type.6b6 = value_binding_pattern g [concrete] +// CHECK:STDOUT: %h.patt: %pattern_type.6b6 = value_binding_pattern h [concrete] +// CHECK:STDOUT: %i.patt: %pattern_type.6b6 = value_binding_pattern i [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -142,9 +150,8 @@ protected protected let i: i32 = 1; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %i32.loc19: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %impl.elem0.loc19: %.1c5 = impl_witness_access constants.%ImplicitAs.impl_witness.a23, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] // CHECK:STDOUT: %bound_method.loc19_24.1: = bound_method @__global_init.%int_1.loc19, %impl.elem0.loc19 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] // CHECK:STDOUT: %specific_fn.loc19: = specific_function %impl.elem0.loc19, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] @@ -152,11 +159,11 @@ protected protected let i: i32 = 1; // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc19: init %i32 = call %bound_method.loc19_24.2(@__global_init.%int_1.loc19) [concrete = constants.%int_1.0c6] // CHECK:STDOUT: %.loc19_24.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc19 [concrete = constants.%int_1.0c6] // CHECK:STDOUT: %.loc19_24.2: %i32 = converted @__global_init.%int_1.loc19, %.loc19_24.1 [concrete = constants.%int_1.0c6] +// CHECK:STDOUT: %i32.loc19: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %b: %i32 = value_binding b, %.loc19_24.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.6b6 = value_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.6b6 = value_binding_pattern c [concrete = constants.%c.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %i32.loc25: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %impl.elem0.loc25: %.1c5 = impl_witness_access constants.%ImplicitAs.impl_witness.a23, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] // CHECK:STDOUT: %bound_method.loc25_22.1: = bound_method @__global_init.%int_1.loc25, %impl.elem0.loc25 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] // CHECK:STDOUT: %specific_fn.loc25: = specific_function %impl.elem0.loc25, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] @@ -164,11 +171,11 @@ protected protected let i: i32 = 1; // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc25: init %i32 = call %bound_method.loc25_22.2(@__global_init.%int_1.loc25) [concrete = constants.%int_1.0c6] // CHECK:STDOUT: %.loc25_22.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc25 [concrete = constants.%int_1.0c6] // CHECK:STDOUT: %.loc25_22.2: %i32 = converted @__global_init.%int_1.loc25, %.loc25_22.1 [concrete = constants.%int_1.0c6] +// CHECK:STDOUT: %i32.loc25: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %c: %i32 = value_binding c, %.loc25_22.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.6b6 = value_binding_pattern d [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.6b6 = value_binding_pattern d [concrete = constants.%d.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %i32.loc31: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %impl.elem0.loc31: %.1c5 = impl_witness_access constants.%ImplicitAs.impl_witness.a23, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] // CHECK:STDOUT: %bound_method.loc31_20.1: = bound_method @__global_init.%int_1.loc31, %impl.elem0.loc31 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] // CHECK:STDOUT: %specific_fn.loc31: = specific_function %impl.elem0.loc31, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] @@ -176,11 +183,11 @@ protected protected let i: i32 = 1; // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc31: init %i32 = call %bound_method.loc31_20.2(@__global_init.%int_1.loc31) [concrete = constants.%int_1.0c6] // CHECK:STDOUT: %.loc31_20.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc31 [concrete = constants.%int_1.0c6] // CHECK:STDOUT: %.loc31_20.2: %i32 = converted @__global_init.%int_1.loc31, %.loc31_20.1 [concrete = constants.%int_1.0c6] +// CHECK:STDOUT: %i32.loc31: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %d: %i32 = value_binding d, %.loc31_20.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %e.patt: %pattern_type.6b6 = value_binding_pattern e [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type.6b6 = value_binding_pattern e [concrete = constants.%e.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %i32.loc37: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %impl.elem0.loc37: %.1c5 = impl_witness_access constants.%ImplicitAs.impl_witness.a23, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] // CHECK:STDOUT: %bound_method.loc37_22.1: = bound_method @__global_init.%int_1.loc37, %impl.elem0.loc37 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] // CHECK:STDOUT: %specific_fn.loc37: = specific_function %impl.elem0.loc37, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] @@ -188,11 +195,11 @@ protected protected let i: i32 = 1; // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc37: init %i32 = call %bound_method.loc37_22.2(@__global_init.%int_1.loc37) [concrete = constants.%int_1.0c6] // CHECK:STDOUT: %.loc37_22.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc37 [concrete = constants.%int_1.0c6] // CHECK:STDOUT: %.loc37_22.2: %i32 = converted @__global_init.%int_1.loc37, %.loc37_22.1 [concrete = constants.%int_1.0c6] +// CHECK:STDOUT: %i32.loc37: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %e: %i32 = value_binding e, %.loc37_22.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %f.patt: %pattern_type.6b6 = value_binding_pattern f [concrete] +// CHECK:STDOUT: %f.patt: %pattern_type.6b6 = value_binding_pattern f [concrete = constants.%f.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %i32.loc50: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %impl.elem0.loc50: %.1c5 = impl_witness_access constants.%ImplicitAs.impl_witness.a23, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] // CHECK:STDOUT: %bound_method.loc50_28.1: = bound_method @__global_init.%int_1.loc50, %impl.elem0.loc50 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] // CHECK:STDOUT: %specific_fn.loc50: = specific_function %impl.elem0.loc50, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] @@ -200,11 +207,11 @@ protected protected let i: i32 = 1; // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc50: init %i32 = call %bound_method.loc50_28.2(@__global_init.%int_1.loc50) [concrete = constants.%int_1.0c6] // CHECK:STDOUT: %.loc50_28.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc50 [concrete = constants.%int_1.0c6] // CHECK:STDOUT: %.loc50_28.2: %i32 = converted @__global_init.%int_1.loc50, %.loc50_28.1 [concrete = constants.%int_1.0c6] +// CHECK:STDOUT: %i32.loc50: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %f: %i32 = value_binding f, %.loc50_28.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %g.patt: %pattern_type.6b6 = value_binding_pattern g [concrete] +// CHECK:STDOUT: %g.patt: %pattern_type.6b6 = value_binding_pattern g [concrete = constants.%g.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %i32.loc63: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %impl.elem0.loc63: %.1c5 = impl_witness_access constants.%ImplicitAs.impl_witness.a23, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] // CHECK:STDOUT: %bound_method.loc63_30.1: = bound_method @__global_init.%int_1.loc63, %impl.elem0.loc63 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] // CHECK:STDOUT: %specific_fn.loc63: = specific_function %impl.elem0.loc63, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] @@ -212,11 +219,11 @@ protected protected let i: i32 = 1; // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc63: init %i32 = call %bound_method.loc63_30.2(@__global_init.%int_1.loc63) [concrete = constants.%int_1.0c6] // CHECK:STDOUT: %.loc63_30.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc63 [concrete = constants.%int_1.0c6] // CHECK:STDOUT: %.loc63_30.2: %i32 = converted @__global_init.%int_1.loc63, %.loc63_30.1 [concrete = constants.%int_1.0c6] +// CHECK:STDOUT: %i32.loc63: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %g: %i32 = value_binding g, %.loc63_30.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %h.patt: %pattern_type.6b6 = value_binding_pattern h [concrete] +// CHECK:STDOUT: %h.patt: %pattern_type.6b6 = value_binding_pattern h [concrete = constants.%h.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %i32.loc76: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %impl.elem0.loc76: %.1c5 = impl_witness_access constants.%ImplicitAs.impl_witness.a23, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] // CHECK:STDOUT: %bound_method.loc76_32.1: = bound_method @__global_init.%int_1.loc76, %impl.elem0.loc76 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] // CHECK:STDOUT: %specific_fn.loc76: = specific_function %impl.elem0.loc76, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] @@ -224,11 +231,11 @@ protected protected let i: i32 = 1; // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc76: init %i32 = call %bound_method.loc76_32.2(@__global_init.%int_1.loc76) [concrete = constants.%int_1.0c6] // CHECK:STDOUT: %.loc76_32.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc76 [concrete = constants.%int_1.0c6] // CHECK:STDOUT: %.loc76_32.2: %i32 = converted @__global_init.%int_1.loc76, %.loc76_32.1 [concrete = constants.%int_1.0c6] +// CHECK:STDOUT: %i32.loc76: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %h: %i32 = value_binding h, %.loc76_32.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %i.patt: %pattern_type.6b6 = value_binding_pattern i [concrete] +// CHECK:STDOUT: %i.patt: %pattern_type.6b6 = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %i32.loc89: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %impl.elem0.loc89: %.1c5 = impl_witness_access constants.%ImplicitAs.impl_witness.a23, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] // CHECK:STDOUT: %bound_method.loc89_34.1: = bound_method @__global_init.%int_1.loc89, %impl.elem0.loc89 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] // CHECK:STDOUT: %specific_fn.loc89: = specific_function %impl.elem0.loc89, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] @@ -236,6 +243,7 @@ protected protected let i: i32 = 1; // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc89: init %i32 = call %bound_method.loc89_34.2(@__global_init.%int_1.loc89) [concrete = constants.%int_1.0c6] // CHECK:STDOUT: %.loc89_34.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc89 [concrete = constants.%int_1.0c6] // CHECK:STDOUT: %.loc89_34.2: %i32 = converted @__global_init.%int_1.loc89, %.loc89_34.1 [concrete = constants.%int_1.0c6] +// CHECK:STDOUT: %i32.loc89: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %i: %i32 = value_binding i, %.loc89_34.2 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/let/fail_use_in_init.carbon b/toolchain/check/testdata/let/fail_use_in_init.carbon index 7fc6a28b38b3..f7dfda003231 100644 --- a/toolchain/check/testdata/let/fail_use_in_init.carbon +++ b/toolchain/check/testdata/let/fail_use_in_init.carbon @@ -37,6 +37,7 @@ fn F() { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = value_binding_pattern a [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -60,7 +61,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.ref: = name_ref a, [concrete = ] // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] diff --git a/toolchain/check/testdata/let/generic_import.carbon b/toolchain/check/testdata/let/generic_import.carbon index 1a76f7e89532..ee4dc4837b1c 100644 --- a/toolchain/check/testdata/let/generic_import.carbon +++ b/toolchain/check/testdata/let/generic_import.carbon @@ -43,6 +43,7 @@ var b: T = *a; // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = value_binding_pattern T [concrete] // 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] @@ -65,7 +66,7 @@ var b: T = *a; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = value_binding_pattern T [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = value_binding_pattern T [concrete = constants.%T.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc8_9.1: type = splice_block %.loc8_9.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -101,8 +102,8 @@ var b: T = *a; // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: = ref_binding_pattern a [concrete = ] +// CHECK:STDOUT: %a.var_patt: = var_pattern %a.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref = var %a.var_patt [concrete = ] // CHECK:STDOUT: %.loc8: type = splice_block %ptr [concrete = ] { @@ -111,8 +112,8 @@ var b: T = *a; // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref = ref_binding a, [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: = ref_binding_pattern b [concrete = ] +// CHECK:STDOUT: %b.var_patt: = var_pattern %b.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref = var %b.var_patt [concrete = ] // CHECK:STDOUT: %T.ref.loc13: type = name_ref T, imports.%Implicit.T diff --git a/toolchain/check/testdata/let/global.carbon b/toolchain/check/testdata/let/global.carbon index a078d5827806..63b6bfe85b35 100644 --- a/toolchain/check/testdata/let/global.carbon +++ b/toolchain/check/testdata/let/global.carbon @@ -25,6 +25,7 @@ fn F() -> i32 { return n; } // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = value_binding_pattern n [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -40,9 +41,11 @@ fn F() -> i32 { return n; } // CHECK:STDOUT: %.1c5: type = fn_type_with_self_type %ImplicitAs.WithSelf.Convert.type.740, %ImplicitAs.facet [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39, @Core.IntLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete] // CHECK:STDOUT: %bound_method: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_1.0c6: %i32 = int_value 1 [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -82,9 +85,8 @@ fn F() -> i32 { return n; } // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = value_binding_pattern n [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = value_binding_pattern n [concrete = constants.%n.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %impl.elem0: %.1c5 = impl_witness_access constants.%ImplicitAs.impl_witness.a23, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] // CHECK:STDOUT: %bound_method.loc15_14.1: = bound_method @__global_init.%int_1, %impl.elem0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] // CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] @@ -92,10 +94,11 @@ fn F() -> i32 { return n; } // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call: init %i32 = call %bound_method.loc15_14.2(@__global_init.%int_1) [concrete = constants.%int_1.0c6] // CHECK:STDOUT: %.loc15_14.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_1.0c6] // CHECK:STDOUT: %.loc15_14.2: %i32 = converted @__global_init.%int_1, %.loc15_14.1 [concrete = constants.%int_1.0c6] +// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %n: %i32 = value_binding n, %.loc15_14.2 // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc17: Core.Form = init_form %i32 [concrete = constants.%.795] diff --git a/toolchain/check/testdata/let/import.carbon b/toolchain/check/testdata/let/import.carbon index 155a09e4cb54..5658f4327da0 100644 --- a/toolchain/check/testdata/let/import.carbon +++ b/toolchain/check/testdata/let/import.carbon @@ -42,6 +42,7 @@ let b: () = Other.a; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = value_binding_pattern a [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -49,14 +50,14 @@ let b: () = Other.a; // CHECK:STDOUT: .a = %a // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } +// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc4_14: %empty_tuple.type = converted @__global_init.%.loc4, %empty_tuple [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc4_9.1: type = splice_block %.loc4_9.3 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %.loc4_9.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc4_9.3: type = converted %.loc4_9.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: } -// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc4_14: %empty_tuple.type = converted @__global_init.%.loc4, %empty_tuple [concrete = constants.%empty_tuple] // CHECK:STDOUT: %a: %empty_tuple.type = value_binding a, %.loc4_14 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -72,6 +73,7 @@ let b: () = Other.a; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type = value_binding_pattern b [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -86,7 +88,7 @@ let b: () = Other.a; // CHECK:STDOUT: %Implicit.import = import Implicit // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc4_9.1: type = splice_block %.loc4_9.3 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %.loc4_9.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] @@ -107,6 +109,7 @@ let b: () = Other.a; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = value_binding_pattern a [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -114,14 +117,14 @@ let b: () = Other.a; // CHECK:STDOUT: .a = %a // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } +// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc4_14: %empty_tuple.type = converted @__global_init.%.loc4, %empty_tuple [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc4_9.1: type = splice_block %.loc4_9.3 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %.loc4_9.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc4_9.3: type = converted %.loc4_9.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: } -// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc4_14: %empty_tuple.type = converted @__global_init.%.loc4, %empty_tuple [concrete = constants.%empty_tuple] // CHECK:STDOUT: %a: %empty_tuple.type = value_binding a, %.loc4_14 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -137,6 +140,7 @@ let b: () = Other.a; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type = value_binding_pattern b [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -154,7 +158,7 @@ let b: () = Other.a; // CHECK:STDOUT: } // CHECK:STDOUT: %Other.import = import Other // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc4_9.1: type = splice_block %.loc4_9.3 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %.loc4_9.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] diff --git a/toolchain/check/testdata/let/import_access.carbon b/toolchain/check/testdata/let/import_access.carbon index e49cfe33d1ef..dea5f6241e7e 100644 --- a/toolchain/check/testdata/let/import_access.carbon +++ b/toolchain/check/testdata/let/import_access.carbon @@ -62,6 +62,7 @@ let v2: () = Test.v; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type = value_binding_pattern v [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -69,14 +70,14 @@ let v2: () = Test.v; // CHECK:STDOUT: .v [private] = %v // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %pattern_type = value_binding_pattern v [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type = value_binding_pattern v [concrete = constants.%v.patt] // CHECK:STDOUT: } +// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc4_22: %empty_tuple.type = converted @__global_init.%.loc4, %empty_tuple [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc4_17.1: type = splice_block %.loc4_17.3 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %.loc4_17.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc4_17.3: type = converted %.loc4_17.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: } -// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc4_22: %empty_tuple.type = converted @__global_init.%.loc4, %empty_tuple [concrete = constants.%empty_tuple] // CHECK:STDOUT: %v: %empty_tuple.type = value_binding v, %.loc4_22 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -92,6 +93,7 @@ let v2: () = Test.v; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %v2.patt: %pattern_type = value_binding_pattern v2 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -106,7 +108,7 @@ let v2: () = Test.v; // CHECK:STDOUT: %Test.import = import Test // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v2.patt: %pattern_type = value_binding_pattern v2 [concrete] +// CHECK:STDOUT: %v2.patt: %pattern_type = value_binding_pattern v2 [concrete = constants.%v2.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc4_10.1: type = splice_block %.loc4_10.3 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %.loc4_10.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] @@ -127,6 +129,7 @@ let v2: () = Test.v; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %v2.patt: %pattern_type = value_binding_pattern v2 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -136,7 +139,7 @@ let v2: () = Test.v; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v2.patt: %pattern_type = value_binding_pattern v2 [concrete] +// CHECK:STDOUT: %v2.patt: %pattern_type = value_binding_pattern v2 [concrete = constants.%v2.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc10_10.1: type = splice_block %.loc10_10.3 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %.loc10_10.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] @@ -157,6 +160,7 @@ let v2: () = Test.v; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %v2.patt: %pattern_type = value_binding_pattern v2 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -173,7 +177,7 @@ let v2: () = Test.v; // CHECK:STDOUT: } // CHECK:STDOUT: %Test.import = import Test // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v2.patt: %pattern_type = value_binding_pattern v2 [concrete] +// CHECK:STDOUT: %v2.patt: %pattern_type = value_binding_pattern v2 [concrete = constants.%v2.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc10_10.1: type = splice_block %.loc10_10.3 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %.loc10_10.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] diff --git a/toolchain/check/testdata/let/local.carbon b/toolchain/check/testdata/let/local.carbon index 0b4291ee4eaf..529c4a3366af 100644 --- a/toolchain/check/testdata/let/local.carbon +++ b/toolchain/check/testdata/let/local.carbon @@ -45,6 +45,7 @@ fn CallF() { // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = value_binding_pattern b [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.ac8: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N) [symbolic] // CHECK:STDOUT: %Int.as.Copy.impl.Op.5e0: %Int.as.Copy.impl.Op.type.ac8 = struct_value () [symbolic] @@ -65,7 +66,7 @@ fn CallF() { // CHECK:STDOUT: fn @F(%a.param: %i32) -> out %return.param: %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.ref: %i32 = name_ref a, %a // CHECK:STDOUT: %i32.loc5: type = type_literal constants.%i32 [concrete = constants.%i32] diff --git a/toolchain/check/testdata/let/ref.carbon b/toolchain/check/testdata/let/ref.carbon index 58fdfb6661e1..ce0047bb1205 100644 --- a/toolchain/check/testdata/let/ref.carbon +++ b/toolchain/check/testdata/let/ref.carbon @@ -54,23 +54,27 @@ fn F() { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.6b6 = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.6b6 = ref_binding_pattern d [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type.6b6 = ref_binding_pattern e [concrete] // CHECK:STDOUT: %tuple.type.e55: type = tuple_type (%i32, %i32) [concrete] // CHECK:STDOUT: %pattern_type.394: type = pattern_type %tuple.type.e55 [concrete] +// CHECK:STDOUT: %.dd8: %pattern_type.394 = tuple_pattern (%d.patt, %e.patt) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F(%a.param: %i32) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.6b6 = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.6b6 = ref_binding_pattern c [concrete = constants.%c.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.ref.loc7: ref %i32 = name_ref b, %b // CHECK:STDOUT: %i32.loc7: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %c: ref %i32 = ref_binding c, %b.ref.loc7 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.6b6 = ref_binding_pattern d [concrete] -// CHECK:STDOUT: %e.patt: %pattern_type.6b6 = ref_binding_pattern e [concrete] -// CHECK:STDOUT: %.loc8_44: %pattern_type.394 = tuple_pattern (%d.patt, %e.patt) [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.6b6 = ref_binding_pattern d [concrete = constants.%d.patt] +// CHECK:STDOUT: %e.patt: %pattern_type.6b6 = ref_binding_pattern e [concrete = constants.%e.patt] +// CHECK:STDOUT: %.loc8_44: %pattern_type.394 = tuple_pattern (%d.patt, %e.patt) [concrete = constants.%.dd8] // CHECK:STDOUT: } // CHECK:STDOUT: %b.ref.loc8: ref %i32 = name_ref b, %b // CHECK:STDOUT: %c.ref: ref %i32 = name_ref c, %c diff --git a/toolchain/check/testdata/let/shadowed_decl.carbon b/toolchain/check/testdata/let/shadowed_decl.carbon index d84229d0fcca..1b6e359b2f0f 100644 --- a/toolchain/check/testdata/let/shadowed_decl.carbon +++ b/toolchain/check/testdata/let/shadowed_decl.carbon @@ -27,9 +27,14 @@ fn F(unused a: i32) -> i32 { // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt.28e: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] +// CHECK:STDOUT: %a.patt.bb2: %pattern_type.6b6 = value_binding_pattern a [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -83,10 +88,10 @@ fn F(unused a: i32) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt.loc15: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc15_24 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt.loc15: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt.28e] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc15_24 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc15_24: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc15: Core.Form = init_form %i32.loc15_24 [concrete = constants.%.795] @@ -101,10 +106,9 @@ fn F(unused a: i32) -> i32 { // CHECK:STDOUT: fn @F(%a.param: %i32) -> out %return.param: %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt.loc16: %pattern_type.6b6 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt.loc16: %pattern_type.6b6 = value_binding_pattern a [concrete = constants.%a.patt.bb2] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] -// CHECK:STDOUT: %i32.loc16: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %impl.elem0.loc16: %.1c5 = impl_witness_access constants.%ImplicitAs.impl_witness.a23, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] // CHECK:STDOUT: %bound_method.loc16_16.1: = bound_method %int_1, %impl.elem0.loc16 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] // CHECK:STDOUT: %specific_fn.loc16: = specific_function %impl.elem0.loc16, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] @@ -112,6 +116,7 @@ fn F(unused a: i32) -> i32 { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call: init %i32 = call %bound_method.loc16_16.2(%int_1) [concrete = constants.%int_1.0c6] // CHECK:STDOUT: %.loc16_16.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_1.0c6] // CHECK:STDOUT: %.loc16_16.2: %i32 = converted %int_1, %.loc16_16.1 [concrete = constants.%int_1.0c6] +// CHECK:STDOUT: %i32.loc16: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %a.loc16: %i32 = value_binding a, %.loc16_16.2 // CHECK:STDOUT: %a.ref: %i32 = name_ref a, %a.loc16 // CHECK:STDOUT: %impl.elem0.loc18: %.7a6 = impl_witness_access constants.%Copy.impl_witness.0e0, element0 [concrete = constants.%Int.as.Copy.impl.Op.4f6] diff --git a/toolchain/check/testdata/main_run/no_return.carbon b/toolchain/check/testdata/main_run/no_return.carbon index f8894d458ef9..0dcfaa333429 100644 --- a/toolchain/check/testdata/main_run/no_return.carbon +++ b/toolchain/check/testdata/main_run/no_return.carbon @@ -60,8 +60,12 @@ fn Run(unused argc: i32, unused argv: i32*) {} // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %argc.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %argc.patt: %pattern_type.6b6 = at_binding_pattern argc, %argc.param_patt [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %i32 [concrete] // CHECK:STDOUT: %pattern_type.f00: type = pattern_type %ptr [concrete] +// CHECK:STDOUT: %argv.param_patt: %pattern_type.f00 = value_param_pattern [concrete] +// CHECK:STDOUT: %argv.patt: %pattern_type.f00 = at_binding_pattern argv, %argv.param_patt [concrete] // CHECK:STDOUT: %Run.type: type = fn_type @Run [concrete] // CHECK:STDOUT: %Run: %Run.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -82,10 +86,10 @@ fn Run(unused argc: i32, unused argv: i32*) {} // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Run.decl: %Run.type = fn_decl @Run [concrete = constants.%Run] { -// CHECK:STDOUT: %argc.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %argc.patt: %pattern_type.6b6 = at_binding_pattern argc, %argc.param_patt [concrete] -// CHECK:STDOUT: %argv.param_patt: %pattern_type.f00 = value_param_pattern [concrete] -// CHECK:STDOUT: %argv.patt: %pattern_type.f00 = at_binding_pattern argv, %argv.param_patt [concrete] +// CHECK:STDOUT: %argc.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%argc.param_patt] +// CHECK:STDOUT: %argc.patt: %pattern_type.6b6 = at_binding_pattern argc, %argc.param_patt [concrete = constants.%argc.patt] +// CHECK:STDOUT: %argv.param_patt: %pattern_type.f00 = value_param_pattern [concrete = constants.%argv.param_patt] +// CHECK:STDOUT: %argv.patt: %pattern_type.f00 = at_binding_pattern argv, %argv.param_patt [concrete = constants.%argv.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %argc.param: %i32 = value_param call_param0 // CHECK:STDOUT: %i32.loc5_21: type = type_literal constants.%i32 [concrete = constants.%i32] diff --git a/toolchain/check/testdata/main_run/return_i32.carbon b/toolchain/check/testdata/main_run/return_i32.carbon index 578c2c912b8f..68ea192a32ca 100644 --- a/toolchain/check/testdata/main_run/return_i32.carbon +++ b/toolchain/check/testdata/main_run/return_i32.carbon @@ -33,6 +33,8 @@ fn Run(unused argc: i32, unused argv: i32*) -> i32 { return 0; } // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %Run.type: type = fn_type @Run [concrete] // CHECK:STDOUT: %Run: %Run.type = struct_value () [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] @@ -74,8 +76,8 @@ fn Run(unused argc: i32, unused argv: i32*) -> i32 { return 0; } // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Run.decl: %Run.type = fn_decl @Run [concrete = constants.%Run] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc4_13: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -104,9 +106,15 @@ fn Run(unused argc: i32, unused argv: i32*) -> i32 { return 0; } // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %argc.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %argc.patt: %pattern_type.6b6 = at_binding_pattern argc, %argc.param_patt [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %i32 [concrete] // CHECK:STDOUT: %pattern_type.f00: type = pattern_type %ptr [concrete] +// CHECK:STDOUT: %argv.param_patt: %pattern_type.f00 = value_param_pattern [concrete] +// CHECK:STDOUT: %argv.patt: %pattern_type.f00 = at_binding_pattern argv, %argv.param_patt [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %Run.type: type = fn_type @Run [concrete] // CHECK:STDOUT: %Run: %Run.type = struct_value () [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] @@ -148,12 +156,12 @@ fn Run(unused argc: i32, unused argv: i32*) -> i32 { return 0; } // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Run.decl: %Run.type = fn_decl @Run [concrete = constants.%Run] { -// CHECK:STDOUT: %argc.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %argc.patt: %pattern_type.6b6 = at_binding_pattern argc, %argc.param_patt [concrete] -// CHECK:STDOUT: %argv.param_patt: %pattern_type.f00 = value_param_pattern [concrete] -// CHECK:STDOUT: %argv.patt: %pattern_type.f00 = at_binding_pattern argv, %argv.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc5_48 [concrete] +// CHECK:STDOUT: %argc.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%argc.param_patt] +// CHECK:STDOUT: %argc.patt: %pattern_type.6b6 = at_binding_pattern argc, %argc.param_patt [concrete = constants.%argc.patt] +// CHECK:STDOUT: %argv.param_patt: %pattern_type.f00 = value_param_pattern [concrete = constants.%argv.param_patt] +// CHECK:STDOUT: %argv.patt: %pattern_type.f00 = at_binding_pattern argv, %argv.param_patt [concrete = constants.%argv.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc5_48 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc5_48: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc5_48: Core.Form = init_form %i32.loc5_48 [concrete = constants.%.795] diff --git a/toolchain/check/testdata/named_constraint/convert.carbon b/toolchain/check/testdata/named_constraint/convert.carbon index b44bac410c66..478988a05eb1 100644 --- a/toolchain/check/testdata/named_constraint/convert.carbon +++ b/toolchain/check/testdata/named_constraint/convert.carbon @@ -77,6 +77,7 @@ fn G(T:! Z) { // CHECK:STDOUT: %type.as.BitAndWith.impl.Op.type: type = fn_type @type.as.BitAndWith.impl.Op [concrete] // CHECK:STDOUT: %type.as.BitAndWith.impl.Op: %type.as.BitAndWith.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %type.as.BitAndWith.impl.Op.bound: = bound_method %E.type, %type.as.BitAndWith.impl.Op [concrete] +// CHECK:STDOUT: %T.patt.3a0592.2: %pattern_type.9a5 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.f45530.2: %E.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] @@ -90,7 +91,7 @@ fn G(T:! Z) { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %T.patt: %pattern_type.9a5 = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc8_7.1: %pattern_type.9a5 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_7.2 (constants.%T.patt.3a0592.2)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8_12.1: type = splice_block %.loc8_12.3 [concrete = constants.%E.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -107,6 +108,7 @@ fn G(T:! Z) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @G(%T.loc8_7.2: %E.type) { +// CHECK:STDOUT: %T.patt.loc8_7.2: %pattern_type.9a5 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_7.2 (constants.%T.patt.3a0592.2)] // CHECK:STDOUT: %T.loc8_7.1: %E.type = symbolic_binding T, 0 [symbolic = %T.loc8_7.1 (constants.%T.f45530.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -123,6 +125,7 @@ fn G(T:! Z) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%T.f45530.2) { +// CHECK:STDOUT: %T.patt.loc8_7.2 => constants.%T.patt.3a0592.2 // CHECK:STDOUT: %T.loc8_7.1 => constants.%T.f45530.2 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -137,6 +140,7 @@ fn G(T:! Z) { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.9a587c.2: type = pattern_type %E2.type [concrete] +// CHECK:STDOUT: %T.patt.3a0592.2: %pattern_type.9a587c.2 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.f45530.2: %E2.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] @@ -147,7 +151,7 @@ fn G(T:! Z) { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %T.patt: %pattern_type.9a587c.2 = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc9_7.1: %pattern_type.9a587c.2 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_7.2 (constants.%T.patt.3a0592.2)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc9: type = splice_block %E2.ref [concrete = constants.%E2.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -158,6 +162,7 @@ fn G(T:! Z) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @G(%T.loc9_7.2: %E2.type) { +// CHECK:STDOUT: %T.patt.loc9_7.2: %pattern_type.9a587c.2 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_7.2 (constants.%T.patt.3a0592.2)] // CHECK:STDOUT: %T.loc9_7.1: %E2.type = symbolic_binding T, 0 [symbolic = %T.loc9_7.1 (constants.%T.f45530.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -179,6 +184,7 @@ fn G(T:! Z) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%T.f45530.2) { +// CHECK:STDOUT: %T.patt.loc9_7.2 => constants.%T.patt.3a0592.2 // CHECK:STDOUT: %T.loc9_7.1 => constants.%T.f45530.2 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/named_constraint/empty.carbon b/toolchain/check/testdata/named_constraint/empty.carbon index c28bd33200c0..492984688462 100644 --- a/toolchain/check/testdata/named_constraint/empty.carbon +++ b/toolchain/check/testdata/named_constraint/empty.carbon @@ -38,15 +38,19 @@ fn G(T:! Z, U:! type, V:! Empty) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.9a5: type = pattern_type %Empty.type [concrete] +// CHECK:STDOUT: %T.patt.3a0: %pattern_type.9a5 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.f45: %Empty.type = symbolic_binding T, 0 [symbolic] // 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: %Z.type: type = facet_type <@Z> [concrete] // CHECK:STDOUT: %pattern_type.5d7: type = pattern_type %Z.type [concrete] +// CHECK:STDOUT: %T.patt.4a7: %pattern_type.5d7 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.013: %Z.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %U: type = symbolic_binding U, 1 [symbolic] +// CHECK:STDOUT: %V.patt: %pattern_type.9a5 = symbolic_binding_pattern V, 2 [symbolic] // CHECK:STDOUT: %V: %Empty.type = symbolic_binding V, 2 [symbolic] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] @@ -66,7 +70,7 @@ fn G(T:! Z, U:! type, V:! Empty) { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type.9a5 = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc19_14.1: %pattern_type.9a5 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc19_14.2 (constants.%T.patt.3a0)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc19: type = splice_block %Empty.ref [concrete = constants.%Empty.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -75,9 +79,9 @@ fn G(T:! Z, U:! type, V:! Empty) { // CHECK:STDOUT: %T.loc19_14.2: %Empty.type = symbolic_binding T, 0 [symbolic = %T.loc19_14.1 (constants.%T.f45)] // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %T.patt: %pattern_type.5d7 = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [concrete] -// CHECK:STDOUT: %V.patt: %pattern_type.9a5 = symbolic_binding_pattern V, 2 [concrete] +// CHECK:STDOUT: %T.patt.loc25_7.1: %pattern_type.5d7 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc25_7.2 (constants.%T.patt.4a7)] +// CHECK:STDOUT: %U.patt.loc25_14.1: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc25_14.2 (constants.%U.patt)] +// CHECK:STDOUT: %V.patt.loc25_24.1: %pattern_type.9a5 = symbolic_binding_pattern V, 2 [symbolic = %V.patt.loc25_24.2 (constants.%V.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc25_10: type = splice_block %Z.ref [concrete = constants.%Z.type] { // CHECK:STDOUT: %.Self.loc25_7: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -98,6 +102,7 @@ fn G(T:! Z, U:! type, V:! Empty) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc19_14.2: %Empty.type) { +// CHECK:STDOUT: %T.patt.loc19_14.2: %pattern_type.9a5 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc19_14.2 (constants.%T.patt.3a0)] // CHECK:STDOUT: %T.loc19_14.1: %Empty.type = symbolic_binding T, 0 [symbolic = %T.loc19_14.1 (constants.%T.f45)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -109,8 +114,11 @@ fn G(T:! Z, U:! type, V:! Empty) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @G(%T.loc25_7.2: %Z.type, %U.loc25_14.2: type, %V.loc25_24.2: %Empty.type) { +// CHECK:STDOUT: %T.patt.loc25_7.2: %pattern_type.5d7 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc25_7.2 (constants.%T.patt.4a7)] // CHECK:STDOUT: %T.loc25_7.1: %Z.type = symbolic_binding T, 0 [symbolic = %T.loc25_7.1 (constants.%T.013)] +// CHECK:STDOUT: %U.patt.loc25_14.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc25_14.2 (constants.%U.patt)] // CHECK:STDOUT: %U.loc25_14.1: type = symbolic_binding U, 1 [symbolic = %U.loc25_14.1 (constants.%U)] +// CHECK:STDOUT: %V.patt.loc25_24.2: %pattern_type.9a5 = symbolic_binding_pattern V, 2 [symbolic = %V.patt.loc25_24.2 (constants.%V.patt)] // CHECK:STDOUT: %V.loc25_24.1: %Empty.type = symbolic_binding V, 2 [symbolic = %V.loc25_24.1 (constants.%V)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -157,40 +165,49 @@ fn G(T:! Z, U:! type, V:! Empty) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T.f45) { +// CHECK:STDOUT: %T.patt.loc19_14.2 => constants.%T.patt.3a0 // CHECK:STDOUT: %T.loc19_14.1 => constants.%T.f45 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%T.013, constants.%U, constants.%V) { +// CHECK:STDOUT: %T.patt.loc25_7.2 => constants.%T.patt.4a7 // CHECK:STDOUT: %T.loc25_7.1 => constants.%T.013 +// CHECK:STDOUT: %U.patt.loc25_14.2 => constants.%U.patt // CHECK:STDOUT: %U.loc25_14.1 => constants.%U +// CHECK:STDOUT: %V.patt.loc25_24.2 => constants.%V.patt // CHECK:STDOUT: %V.loc25_24.1 => constants.%V // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%Empty.facet.76f) { +// CHECK:STDOUT: %T.patt.loc19_14.2 => constants.%T.patt.3a0 // CHECK:STDOUT: %T.loc19_14.1 => constants.%Empty.facet.76f // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%Empty.facet.2cb) { +// CHECK:STDOUT: %T.patt.loc19_14.2 => constants.%T.patt.3a0 // CHECK:STDOUT: %T.loc19_14.1 => constants.%Empty.facet.2cb // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%Empty.facet.aa1) { +// CHECK:STDOUT: %T.patt.loc19_14.2 => constants.%T.patt.3a0 // CHECK:STDOUT: %T.loc19_14.1 => constants.%Empty.facet.aa1 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%Empty.facet.380) { +// CHECK:STDOUT: %T.patt.loc19_14.2 => constants.%T.patt.3a0 // CHECK:STDOUT: %T.loc19_14.1 => constants.%Empty.facet.380 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%V) { +// CHECK:STDOUT: %T.patt.loc19_14.2 => constants.%T.patt.3a0 // CHECK:STDOUT: %T.loc19_14.1 => constants.%V // CHECK:STDOUT: // CHECK:STDOUT: !definition: diff --git a/toolchain/check/testdata/named_constraint/empty_generic.carbon b/toolchain/check/testdata/named_constraint/empty_generic.carbon index 93d922e45e4e..4bc18db49471 100644 --- a/toolchain/check/testdata/named_constraint/empty_generic.carbon +++ b/toolchain/check/testdata/named_constraint/empty_generic.carbon @@ -33,6 +33,7 @@ fn G(T:! Z, U:! Empty(T), V:! type) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.d47: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Empty.type.f30: type = generic_named_constaint_type @Empty [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -40,15 +41,19 @@ fn G(T:! Z, U:! Empty(T), V:! type) { // CHECK:STDOUT: %Empty.type.d682d6.1: type = facet_type <@Empty, @Empty(%T.67d)> [symbolic] // CHECK:STDOUT: %Self.22bbf7.1: %Empty.type.d682d6.1 = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %pattern_type.9a587c.1: type = pattern_type %Empty.type.d682d6.1 [symbolic] +// CHECK:STDOUT: %U.patt.cb839c.1: %pattern_type.9a587c.1 = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %U.e1f642.1: %Empty.type.d682d6.1 = symbolic_binding U, 1 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.5d7: type = pattern_type %Z.type [concrete] +// CHECK:STDOUT: %T.patt.4a7: %pattern_type.5d7 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.013: %Z.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T.013 [symbolic] // CHECK:STDOUT: %Empty.type.d682d6.2: type = facet_type <@Empty, @Empty(%T.as_type)> [symbolic] // CHECK:STDOUT: %pattern_type.9a587c.2: type = pattern_type %Empty.type.d682d6.2 [symbolic] +// CHECK:STDOUT: %U.patt.cb839c.2: %pattern_type.9a587c.2 = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %U.e1f642.2: %Empty.type.d682d6.2 = symbolic_binding U, 1 [symbolic] +// CHECK:STDOUT: %V.patt: %pattern_type.98f = symbolic_binding_pattern V, 2 [symbolic] // CHECK:STDOUT: %V: type = symbolic_binding V, 2 [symbolic] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] @@ -56,6 +61,7 @@ fn G(T:! Z, U:! Empty(T), V:! type) { // CHECK:STDOUT: %empty_struct.a40: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct.type.facet: %type = facet_value %empty_struct_type, () [concrete] // CHECK:STDOUT: %Empty.facet.76f: %Empty.type.d682d6.2 = facet_value %empty_struct_type, () [symbolic] +// CHECK:STDOUT: %U.patt.cb839c.3: %pattern_type.9a587c.2 = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %F.specific_fn.eb3: = specific_function %F, @F(%T.as_type, %Empty.facet.76f) [symbolic] // CHECK:STDOUT: %facet_value.2cb: %type = facet_value type, () [concrete] // CHECK:STDOUT: %Empty.facet.2cb: %Empty.type.d682d6.2 = facet_value type, () [symbolic] @@ -71,7 +77,7 @@ fn G(T:! Z, U:! Empty(T), V:! type) { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %Empty.decl: %Empty.type.f30 = constraint_decl @Empty [concrete = constants.%empty_struct.26b] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc16_19.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc16_19.2 (constants.%T.patt.d47)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc16_22.1: type = splice_block %.loc16_22.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -80,8 +86,8 @@ fn G(T:! Z, U:! Empty(T), V:! type) { // CHECK:STDOUT: %T.loc16_19.2: type = symbolic_binding T, 0 [symbolic = %T.loc16_19.1 (constants.%T.67d)] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %U.patt: @F.%pattern_type (%pattern_type.9a587c.1) = symbolic_binding_pattern U, 1 [concrete] +// CHECK:STDOUT: %T.patt.loc18_7.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc18_7.2 (constants.%T.patt.d47)] +// CHECK:STDOUT: %U.patt.loc18_24.1: @F.%pattern_type (%pattern_type.9a587c.1) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc18_24.2 (constants.%U.patt.cb839c.1)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc18_10.1: type = splice_block %.loc18_10.2 [concrete = type] { // CHECK:STDOUT: %.Self.loc18_7: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -97,9 +103,9 @@ fn G(T:! Z, U:! Empty(T), V:! type) { // CHECK:STDOUT: %U.loc18_24.2: @F.%Empty.type.loc18_34.1 (%Empty.type.d682d6.1) = symbolic_binding U, 1 [symbolic = %U.loc18_24.1 (constants.%U.e1f642.1)] // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %T.patt: %pattern_type.5d7 = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %U.patt: @G.%pattern_type (%pattern_type.9a587c.2) = symbolic_binding_pattern U, 1 [concrete] -// CHECK:STDOUT: %V.patt: %pattern_type.98f = symbolic_binding_pattern V, 2 [concrete] +// CHECK:STDOUT: %T.patt.loc20_7.1: %pattern_type.5d7 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc20_7.2 (constants.%T.patt.4a7)] +// CHECK:STDOUT: %U.patt.loc20_14.1: @G.%pattern_type (%pattern_type.9a587c.2) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc20_14.2 (constants.%U.patt.cb839c.2)] +// CHECK:STDOUT: %V.patt.loc20_28.1: %pattern_type.98f = symbolic_binding_pattern V, 2 [symbolic = %V.patt.loc20_28.2 (constants.%V.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc20_10: type = splice_block %Z.ref [concrete = constants.%Z.type] { // CHECK:STDOUT: %.Self.loc20_7: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -124,6 +130,7 @@ fn G(T:! Z, U:! Empty(T), V:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic constraint @Empty(%T.loc16_19.2: type) { +// CHECK:STDOUT: %T.patt.loc16_19.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc16_19.2 (constants.%T.patt.d47)] // CHECK:STDOUT: %T.loc16_19.1: type = symbolic_binding T, 0 [symbolic = %T.loc16_19.1 (constants.%T.67d)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -142,10 +149,12 @@ fn G(T:! Z, U:! Empty(T), V:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc18_7.2: type, %U.loc18_24.2: @F.%Empty.type.loc18_34.1 (%Empty.type.d682d6.1)) { +// CHECK:STDOUT: %T.patt.loc18_7.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc18_7.2 (constants.%T.patt.d47)] // CHECK:STDOUT: %T.loc18_7.1: type = symbolic_binding T, 0 [symbolic = %T.loc18_7.1 (constants.%T.67d)] // CHECK:STDOUT: %Empty.type.loc18_34.1: type = facet_type <@Empty, @Empty(%T.loc18_7.1)> [symbolic = %Empty.type.loc18_34.1 (constants.%Empty.type.d682d6.1)] -// CHECK:STDOUT: %U.loc18_24.1: @F.%Empty.type.loc18_34.1 (%Empty.type.d682d6.1) = symbolic_binding U, 1 [symbolic = %U.loc18_24.1 (constants.%U.e1f642.1)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Empty.type.loc18_34.1 [symbolic = %pattern_type (constants.%pattern_type.9a587c.1)] +// CHECK:STDOUT: %U.patt.loc18_24.2: @F.%pattern_type (%pattern_type.9a587c.1) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc18_24.2 (constants.%U.patt.cb839c.1)] +// CHECK:STDOUT: %U.loc18_24.1: @F.%Empty.type.loc18_34.1 (%Empty.type.d682d6.1) = symbolic_binding U, 1 [symbolic = %U.loc18_24.1 (constants.%U.e1f642.1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -156,11 +165,14 @@ fn G(T:! Z, U:! Empty(T), V:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @G(%T.loc20_7.2: %Z.type, %U.loc20_14.2: @G.%Empty.type.loc20_24.1 (%Empty.type.d682d6.2), %V.loc20_28.2: type) { +// CHECK:STDOUT: %T.patt.loc20_7.2: %pattern_type.5d7 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc20_7.2 (constants.%T.patt.4a7)] // CHECK:STDOUT: %T.loc20_7.1: %Z.type = symbolic_binding T, 0 [symbolic = %T.loc20_7.1 (constants.%T.013)] // CHECK:STDOUT: %T.as_type.loc20_24.1: type = facet_access_type %T.loc20_7.1 [symbolic = %T.as_type.loc20_24.1 (constants.%T.as_type)] // CHECK:STDOUT: %Empty.type.loc20_24.1: type = facet_type <@Empty, @Empty(%T.as_type.loc20_24.1)> [symbolic = %Empty.type.loc20_24.1 (constants.%Empty.type.d682d6.2)] -// CHECK:STDOUT: %U.loc20_14.1: @G.%Empty.type.loc20_24.1 (%Empty.type.d682d6.2) = symbolic_binding U, 1 [symbolic = %U.loc20_14.1 (constants.%U.e1f642.2)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Empty.type.loc20_24.1 [symbolic = %pattern_type (constants.%pattern_type.9a587c.2)] +// CHECK:STDOUT: %U.patt.loc20_14.2: @G.%pattern_type (%pattern_type.9a587c.2) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc20_14.2 (constants.%U.patt.cb839c.2)] +// CHECK:STDOUT: %U.loc20_14.1: @G.%Empty.type.loc20_24.1 (%Empty.type.d682d6.2) = symbolic_binding U, 1 [symbolic = %U.loc20_14.1 (constants.%U.e1f642.2)] +// CHECK:STDOUT: %V.patt.loc20_28.2: %pattern_type.98f = symbolic_binding_pattern V, 2 [symbolic = %V.patt.loc20_28.2 (constants.%V.patt)] // CHECK:STDOUT: %V.loc20_28.1: type = symbolic_binding V, 2 [symbolic = %V.loc20_28.1 (constants.%V)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -227,19 +239,23 @@ fn G(T:! Z, U:! Empty(T), V:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Empty(constants.%T.67d) { +// CHECK:STDOUT: %T.patt.loc16_19.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc16_19.1 => constants.%T.67d // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Empty.WithSelf(constants.%T.67d, constants.%Self.22bbf7.1) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T.67d, constants.%U.e1f642.1) { +// CHECK:STDOUT: %T.patt.loc18_7.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc18_7.1 => constants.%T.67d // CHECK:STDOUT: %Empty.type.loc18_34.1 => constants.%Empty.type.d682d6.1 -// CHECK:STDOUT: %U.loc18_24.1 => constants.%U.e1f642.1 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.9a587c.1 +// CHECK:STDOUT: %U.patt.loc18_24.2 => constants.%U.patt.cb839c.1 +// CHECK:STDOUT: %U.loc18_24.1 => constants.%U.e1f642.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Empty(constants.%T.as_type) { +// CHECK:STDOUT: %T.patt.loc16_19.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc16_19.1 => constants.%T.as_type // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -248,11 +264,14 @@ fn G(T:! Z, U:! Empty(T), V:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%T.013, constants.%U.e1f642.2, constants.%V) { +// CHECK:STDOUT: %T.patt.loc20_7.2 => constants.%T.patt.4a7 // CHECK:STDOUT: %T.loc20_7.1 => constants.%T.013 // CHECK:STDOUT: %T.as_type.loc20_24.1 => constants.%T.as_type // CHECK:STDOUT: %Empty.type.loc20_24.1 => constants.%Empty.type.d682d6.2 -// CHECK:STDOUT: %U.loc20_14.1 => constants.%U.e1f642.2 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.9a587c.2 +// CHECK:STDOUT: %U.patt.loc20_14.2 => constants.%U.patt.cb839c.2 +// CHECK:STDOUT: %U.loc20_14.1 => constants.%U.e1f642.2 +// CHECK:STDOUT: %V.patt.loc20_28.2 => constants.%V.patt // CHECK:STDOUT: %V.loc20_28.1 => constants.%V // CHECK:STDOUT: } // CHECK:STDOUT: @@ -261,10 +280,12 @@ fn G(T:! Z, U:! Empty(T), V:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T.as_type, constants.%Empty.facet.76f) { +// CHECK:STDOUT: %T.patt.loc18_7.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc18_7.1 => constants.%T.as_type // CHECK:STDOUT: %Empty.type.loc18_34.1 => constants.%Empty.type.d682d6.2 -// CHECK:STDOUT: %U.loc18_24.1 => constants.%Empty.facet.76f // CHECK:STDOUT: %pattern_type => constants.%pattern_type.9a587c.2 +// CHECK:STDOUT: %U.patt.loc18_24.2 => constants.%U.patt.cb839c.3 +// CHECK:STDOUT: %U.loc18_24.1 => constants.%Empty.facet.76f // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } @@ -274,10 +295,12 @@ fn G(T:! Z, U:! Empty(T), V:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T.as_type, constants.%Empty.facet.2cb) { +// CHECK:STDOUT: %T.patt.loc18_7.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc18_7.1 => constants.%T.as_type // CHECK:STDOUT: %Empty.type.loc18_34.1 => constants.%Empty.type.d682d6.2 -// CHECK:STDOUT: %U.loc18_24.1 => constants.%Empty.facet.2cb // CHECK:STDOUT: %pattern_type => constants.%pattern_type.9a587c.2 +// CHECK:STDOUT: %U.patt.loc18_24.2 => constants.%U.patt.cb839c.3 +// CHECK:STDOUT: %U.loc18_24.1 => constants.%Empty.facet.2cb // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } @@ -287,10 +310,12 @@ fn G(T:! Z, U:! Empty(T), V:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T.as_type, constants.%Empty.facet.aa1) { +// CHECK:STDOUT: %T.patt.loc18_7.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc18_7.1 => constants.%T.as_type // CHECK:STDOUT: %Empty.type.loc18_34.1 => constants.%Empty.type.d682d6.2 -// CHECK:STDOUT: %U.loc18_24.1 => constants.%Empty.facet.aa1 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.9a587c.2 +// CHECK:STDOUT: %U.patt.loc18_24.2 => constants.%U.patt.cb839c.3 +// CHECK:STDOUT: %U.loc18_24.1 => constants.%Empty.facet.aa1 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } @@ -300,10 +325,12 @@ fn G(T:! Z, U:! Empty(T), V:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T.as_type, constants.%U.e1f642.2) { +// CHECK:STDOUT: %T.patt.loc18_7.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc18_7.1 => constants.%T.as_type // CHECK:STDOUT: %Empty.type.loc18_34.1 => constants.%Empty.type.d682d6.2 -// CHECK:STDOUT: %U.loc18_24.1 => constants.%U.e1f642.2 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.9a587c.2 +// CHECK:STDOUT: %U.patt.loc18_24.2 => constants.%U.patt.cb839c.3 +// CHECK:STDOUT: %U.loc18_24.1 => constants.%U.e1f642.2 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } @@ -313,10 +340,12 @@ fn G(T:! Z, U:! Empty(T), V:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T.as_type, constants.%Empty.facet.ed5) { +// CHECK:STDOUT: %T.patt.loc18_7.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc18_7.1 => constants.%T.as_type // CHECK:STDOUT: %Empty.type.loc18_34.1 => constants.%Empty.type.d682d6.2 -// CHECK:STDOUT: %U.loc18_24.1 => constants.%Empty.facet.ed5 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.9a587c.2 +// CHECK:STDOUT: %U.patt.loc18_24.2 => constants.%U.patt.cb839c.3 +// CHECK:STDOUT: %U.loc18_24.1 => constants.%Empty.facet.ed5 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/named_constraint/extend_name_lookup.carbon b/toolchain/check/testdata/named_constraint/extend_name_lookup.carbon index 4c509326f0f4..98e17a0ea4cb 100644 --- a/toolchain/check/testdata/named_constraint/extend_name_lookup.carbon +++ b/toolchain/check/testdata/named_constraint/extend_name_lookup.carbon @@ -109,6 +109,7 @@ fn F(T:! type where .Self impls W) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type %W.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: %W.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] @@ -129,7 +130,7 @@ fn F(T:! type where .Self impls W) { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc12_7.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_7.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc12: type = splice_block %W.ref [concrete = constants.%W.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -140,6 +141,7 @@ fn F(T:! type where .Self impls W) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc12_7.2: %W.type) { +// CHECK:STDOUT: %T.patt.loc12_7.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_7.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc12_7.1: %W.type = symbolic_binding T, 0 [symbolic = %T.loc12_7.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -180,6 +182,7 @@ fn F(T:! type where .Self impls W) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T) { +// CHECK:STDOUT: %T.patt.loc12_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc12_7.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -199,6 +202,7 @@ fn F(T:! type where .Self impls W) { // CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self [symbolic_self] // CHECK:STDOUT: %type_where: type = facet_type [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %type_where [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: %type_where = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] @@ -219,7 +223,7 @@ fn F(T:! type where .Self impls W) { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc12_7.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_7.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc12_15.1: type = splice_block %.loc12_15.2 [concrete = constants.%type_where] { // CHECK:STDOUT: %.Self.loc12_7: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -239,6 +243,7 @@ fn F(T:! type where .Self impls W) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc12_7.2: %type_where) { +// CHECK:STDOUT: %T.patt.loc12_7.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_7.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc12_7.1: %type_where = symbolic_binding T, 0 [symbolic = %T.loc12_7.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -281,6 +286,7 @@ fn F(T:! type where .Self impls W) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T) { +// CHECK:STDOUT: %T.patt.loc12_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc12_7.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/named_constraint/generic.carbon b/toolchain/check/testdata/named_constraint/generic.carbon index 3534481be789..d3c76b5f480e 100644 --- a/toolchain/check/testdata/named_constraint/generic.carbon +++ b/toolchain/check/testdata/named_constraint/generic.carbon @@ -81,6 +81,7 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %GenericType.type.d1d: type = generic_named_constaint_type @GenericType [concrete] // CHECK:STDOUT: %empty_struct.b7e: %GenericType.type.d1d = struct_value () [concrete] @@ -89,6 +90,7 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: %Z.type: type = facet_type <@Z> [concrete] // CHECK:STDOUT: %Self.cb6: %Z.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %pattern_type.5d7: type = pattern_type %Z.type [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.5d7 = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %U: %Z.type = symbolic_binding U, 0 [symbolic] // CHECK:STDOUT: %GenericZ.type.c42: type = generic_named_constaint_type @GenericZ [concrete] // CHECK:STDOUT: %empty_struct.a73: %GenericZ.type.c42 = struct_value () [concrete] @@ -108,7 +110,7 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: .ForwardDeclaredGeneric = %ForwardDeclaredGeneric.decl.loc9 // CHECK:STDOUT: } // CHECK:STDOUT: %GenericType.decl: %GenericType.type.d1d = constraint_decl @GenericType [concrete = constants.%empty_struct.b7e] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc4_25.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_25.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_28.1: type = splice_block %.loc4_28.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -118,7 +120,7 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: } // CHECK:STDOUT: %Z.decl: type = interface_decl @Z [concrete = constants.%Z.type] {} {} // CHECK:STDOUT: %GenericZ.decl: %GenericZ.type.c42 = constraint_decl @GenericZ [concrete = constants.%empty_struct.a73] { -// CHECK:STDOUT: %U.patt: %pattern_type.5d7 = symbolic_binding_pattern U, 0 [concrete] +// CHECK:STDOUT: %U.patt.loc7_22.1: %pattern_type.5d7 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc7_22.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc7: type = splice_block %Z.ref [concrete = constants.%Z.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -127,7 +129,7 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: %U.loc7_22.2: %Z.type = symbolic_binding U, 0 [symbolic = %U.loc7_22.1 (constants.%U)] // CHECK:STDOUT: } // CHECK:STDOUT: %ForwardDeclaredGeneric.decl.loc9: %ForwardDeclaredGeneric.type.650 = constraint_decl @ForwardDeclaredGeneric [concrete = constants.%empty_struct.43d] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc9_36.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_36.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc9_39.1: type = splice_block %.loc9_39.2 [concrete = type] { // CHECK:STDOUT: %.Self.loc9: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -136,7 +138,7 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: %T.loc9_36.2: type = symbolic_binding T, 0 [symbolic = %T.loc9_36.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %ForwardDeclaredGeneric.decl.loc10: %ForwardDeclaredGeneric.type.650 = constraint_decl @ForwardDeclaredGeneric [concrete = constants.%empty_struct.43d] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc9_36.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_36.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc10_39.1: type = splice_block %.loc10_39.2 [concrete = type] { // CHECK:STDOUT: %.Self.loc10: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -158,6 +160,7 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic constraint @GenericType(%T.loc4_25.2: type) { +// CHECK:STDOUT: %T.patt.loc4_25.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_25.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_25.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_25.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -176,6 +179,7 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic constraint @GenericZ(%U.loc7_22.2: %Z.type) { +// CHECK:STDOUT: %U.patt.loc7_22.2: %pattern_type.5d7 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc7_22.2 (constants.%U.patt)] // CHECK:STDOUT: %U.loc7_22.1: %Z.type = symbolic_binding U, 0 [symbolic = %U.loc7_22.1 (constants.%U)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -194,6 +198,7 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic constraint @ForwardDeclaredGeneric(%T.loc9_36.2: type) { +// CHECK:STDOUT: %T.patt.loc9_36.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_36.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc9_36.1: type = symbolic_binding T, 0 [symbolic = %T.loc9_36.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -212,6 +217,7 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @GenericType(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_25.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_25.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -220,12 +226,14 @@ fn F(unused T:! Generic((), ())) {} // CHECK:STDOUT: specific @Z.WithSelf(constants.%Self.cb6) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @GenericZ(constants.%U) { +// CHECK:STDOUT: %U.patt.loc7_22.2 => constants.%U.patt // CHECK:STDOUT: %U.loc7_22.1 => constants.%U // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @GenericZ.WithSelf(constants.%U, constants.%Self.22bbf7.2) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @ForwardDeclaredGeneric(constants.%T) { +// CHECK:STDOUT: %T.patt.loc9_36.2 => constants.%T.patt // CHECK:STDOUT: %T.loc9_36.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/named_constraint/import_constraint_decl.carbon b/toolchain/check/testdata/named_constraint/import_constraint_decl.carbon index f8cbcd0e96be..55fa8d7a052b 100644 --- a/toolchain/check/testdata/named_constraint/import_constraint_decl.carbon +++ b/toolchain/check/testdata/named_constraint/import_constraint_decl.carbon @@ -87,6 +87,7 @@ impl C as B {} // CHECK:STDOUT: %Self.dda: %I.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.f45 [symbolic] // CHECK:STDOUT: %pattern_type: type = pattern_type %B.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: %B.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] @@ -112,7 +113,7 @@ impl C as B {} // CHECK:STDOUT: %default.import.loc2_17.1 = import // CHECK:STDOUT: %default.import.loc2_17.2 = import // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc4_14.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4: type = splice_block %B.ref [concrete = constants.%B.type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -147,6 +148,7 @@ impl C as B {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc4_14.2: %B.type) { +// CHECK:STDOUT: %T.patt.loc4_14.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_14.1: %B.type = symbolic_binding T, 0 [symbolic = %T.loc4_14.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -169,6 +171,7 @@ impl C as B {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_14.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_14.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/named_constraint/require.carbon b/toolchain/check/testdata/named_constraint/require.carbon index e42d65761dc9..79ef895d0500 100644 --- a/toolchain/check/testdata/named_constraint/require.carbon +++ b/toolchain/check/testdata/named_constraint/require.carbon @@ -749,9 +749,13 @@ constraint N { // CHECK:STDOUT: %Z.type: type = facet_type <@Z> [concrete] // CHECK:STDOUT: %Self.d87: %Z.type = symbolic_binding Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.d87 [symbolic] +// CHECK:STDOUT: %pattern_type.9a5: type = pattern_type %Z.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.9a5 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: %Z.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] // CHECK:STDOUT: %pattern_type.86a: type = pattern_type %T.as_type [symbolic] +// CHECK:STDOUT: %t.param_patt: %pattern_type.86a = value_param_pattern [symbolic] +// CHECK:STDOUT: %t.patt: %pattern_type.86a = at_binding_pattern t, %t.param_patt [symbolic] // CHECK:STDOUT: %Y.lookup_impl_witness: = lookup_impl_witness %T, @Y [symbolic] // CHECK:STDOUT: %Y.facet: %Y.type = facet_value %T.as_type, (%Y.lookup_impl_witness) [symbolic] // CHECK:STDOUT: %Y.WithSelf.YY.type.0e8: type = fn_type @Y.WithSelf.YY, @Y.WithSelf(%Y.facet) [symbolic] @@ -844,9 +848,12 @@ constraint N { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T) { +// CHECK:STDOUT: %T.patt.loc13_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc13_7.1 => constants.%T // CHECK:STDOUT: %T.as_type.loc13_16.1 => constants.%T.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.86a +// CHECK:STDOUT: %t.param_patt.loc13_14.2 => constants.%t.param_patt +// CHECK:STDOUT: %t.patt.loc13_14.2 => constants.%t.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Z.WithSelf(constants.%T) { @@ -872,9 +879,13 @@ constraint N { // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.d87 [symbolic] // CHECK:STDOUT: %Y.type.f41: type = facet_type <@Y, @Y(%Self.as_type)> [symbolic] // CHECK:STDOUT: %require_complete.097: = require_complete_type %Y.type.f41 [symbolic] +// CHECK:STDOUT: %pattern_type.9a5: type = pattern_type %Z.type [concrete] +// CHECK:STDOUT: %T.patt.3a0: %pattern_type.9a5 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.f45: %Z.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T.f45 [symbolic] // CHECK:STDOUT: %pattern_type.86a: type = pattern_type %T.as_type [symbolic] +// CHECK:STDOUT: %t.param_patt: %pattern_type.86a = value_param_pattern [symbolic] +// CHECK:STDOUT: %t.patt: %pattern_type.86a = at_binding_pattern t, %t.param_patt [symbolic] // CHECK:STDOUT: %Y.type.40d: type = facet_type <@Y, @Y(%T.as_type)> [symbolic] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %Y.type.40d [symbolic] // CHECK:STDOUT: %Y.assoc_type.0ce: type = assoc_entity_type @Y, @Y(%T.as_type) [symbolic] @@ -992,9 +1003,12 @@ constraint N { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T.f45) { +// CHECK:STDOUT: %T.patt.loc13_7.2 => constants.%T.patt.3a0 // CHECK:STDOUT: %T.loc13_7.1 => constants.%T.f45 // CHECK:STDOUT: %T.as_type.loc13_16.1 => constants.%T.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.86a +// CHECK:STDOUT: %t.param_patt.loc13_14.2 => constants.%t.param_patt +// CHECK:STDOUT: %t.patt.loc13_14.2 => constants.%t.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Z.WithSelf(constants.%T.f45) { @@ -1294,6 +1308,7 @@ constraint N { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self.c39: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Z.type.8e1: type = generic_named_constaint_type @Z [concrete] // CHECK:STDOUT: %empty_struct: %Z.type.8e1 = struct_value () [concrete] @@ -1303,7 +1318,7 @@ constraint N { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %Z.decl: %Z.type.8e1 = constraint_decl @Z [concrete = constants.%empty_struct] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc8_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8_18.1: type = splice_block %.loc8_18.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.c39] @@ -1314,6 +1329,7 @@ constraint N { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic constraint @Z(%T.loc8_15.2: type) { +// CHECK:STDOUT: %T.patt.loc8_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc8_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc8_15.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1336,6 +1352,7 @@ constraint N { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Z(constants.%T) { +// CHECK:STDOUT: %T.patt.loc8_15.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_15.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/namespace/add_to_import.carbon b/toolchain/check/testdata/namespace/add_to_import.carbon index a216bb29e3fa..dc1fcbe44f24 100644 --- a/toolchain/check/testdata/namespace/add_to_import.carbon +++ b/toolchain/check/testdata/namespace/add_to_import.carbon @@ -53,6 +53,8 @@ var a: i32 = NS.A(); // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] @@ -72,6 +74,8 @@ var a: i32 = NS.A(); // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39, @Core.IntLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete] // CHECK:STDOUT: %bound_method: = bound_method %int_0.5c6, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_0.3c0: %i32 = int_value 0 [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.6b6 = var_pattern %a.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -101,8 +105,8 @@ var a: i32 = NS.A(); // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc4_14: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -110,8 +114,8 @@ var a: i32 = NS.A(); // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.6b6 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.6b6 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %i32 = var %a.var_patt [concrete] // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] diff --git a/toolchain/check/testdata/namespace/alias.carbon b/toolchain/check/testdata/namespace/alias.carbon index 8d3af4756e11..fb752dac47ed 100644 --- a/toolchain/check/testdata/namespace/alias.carbon +++ b/toolchain/check/testdata/namespace/alias.carbon @@ -33,6 +33,8 @@ fn D() -> i32 { return C(); } // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] @@ -87,8 +89,8 @@ fn D() -> i32 { return C(); } // CHECK:STDOUT: %NS.ref.loc17: = name_ref NS, %NS [concrete = %NS] // CHECK:STDOUT: %ns: = alias_binding ns, %NS.ref.loc17 [concrete = %NS] // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc19_14: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -96,8 +98,8 @@ fn D() -> i32 { return C(); } // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %B.decl: %B.type = fn_decl @B [concrete = constants.%B] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc21: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -108,8 +110,8 @@ fn D() -> i32 { return C(); } // CHECK:STDOUT: %A.ref: %A.type = name_ref A, %A.decl [concrete = constants.%A] // CHECK:STDOUT: %C: %A.type = alias_binding C, %A.ref [concrete = constants.%A] // CHECK:STDOUT: %D.decl: %D.type = fn_decl @D [concrete = constants.%D] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc25: Core.Form = init_form %i32 [concrete = constants.%.795] diff --git a/toolchain/check/testdata/namespace/fail_decl_in_alias.carbon b/toolchain/check/testdata/namespace/fail_decl_in_alias.carbon index aaddbbd267a9..4ab9121e464a 100644 --- a/toolchain/check/testdata/namespace/fail_decl_in_alias.carbon +++ b/toolchain/check/testdata/namespace/fail_decl_in_alias.carbon @@ -35,6 +35,8 @@ fn ns.A() -> i32 { return 0; } // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] @@ -80,8 +82,8 @@ fn ns.A() -> i32 { return 0; } // CHECK:STDOUT: %NS.ref: = name_ref NS, %NS [concrete = %NS] // CHECK:STDOUT: %ns: = alias_binding ns, %NS.ref [concrete = %NS] // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc27_14: Core.Form = init_form %i32 [concrete = constants.%.795] diff --git a/toolchain/check/testdata/namespace/fail_params.carbon b/toolchain/check/testdata/namespace/fail_params.carbon index 921ce5d4b3ef..f67e97afb067 100644 --- a/toolchain/check/testdata/namespace/fail_params.carbon +++ b/toolchain/check/testdata/namespace/fail_params.carbon @@ -54,6 +54,8 @@ fn D(unused T:! type).F() {} // CHECK:STDOUT: %F.19f: %F.type.14e = struct_value () [concrete] // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.67db0b.1: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.67db0b.2: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %F.type.eb3: type = fn_type @F.loc48 [concrete] @@ -110,6 +112,7 @@ fn D(unused T:! type).F() {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F.loc48(%T.loc48_14.3: type) { +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T.loc48_14.1: type = symbolic_binding T, 0 [symbolic = %T.loc48_14.1 (constants.%T.67db0b.1)] // CHECK:STDOUT: %T.loc48_14.2: type = symbolic_binding T, 0 [symbolic = %T.loc48_14.2 (constants.%T.67db0b.2)] // CHECK:STDOUT: @@ -122,6 +125,7 @@ fn D(unused T:! type).F() {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.loc48(constants.%T.67db0b.2) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T.loc48_14.1 => constants.%T.67db0b.2 // CHECK:STDOUT: %T.loc48_14.2 => constants.%T.67db0b.2 // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/namespace/imported.carbon b/toolchain/check/testdata/namespace/imported.carbon index a87d4c331383..57db56d2e1d7 100644 --- a/toolchain/check/testdata/namespace/imported.carbon +++ b/toolchain/check/testdata/namespace/imported.carbon @@ -75,10 +75,18 @@ var package_b: () = package.NS.ChildNS.B(); // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type = var_pattern %a.patt [concrete] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type = var_pattern %b.patt [concrete] // CHECK:STDOUT: %B.type: type = fn_type @B [concrete] // CHECK:STDOUT: %B: %B.type = struct_value () [concrete] +// CHECK:STDOUT: %package_a.patt: %pattern_type = ref_binding_pattern package_a [concrete] +// CHECK:STDOUT: %package_a.var_patt: %pattern_type = var_pattern %package_a.patt [concrete] +// CHECK:STDOUT: %package_b.patt: %pattern_type = ref_binding_pattern package_b [concrete] +// CHECK:STDOUT: %package_b.var_patt: %pattern_type = var_pattern %package_b.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -112,8 +120,8 @@ var package_b: () = package.NS.ChildNS.B(); // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %empty_tuple.type = var %a.var_patt [concrete] // CHECK:STDOUT: %.loc4_9.1: type = splice_block %.loc4_9.3 [concrete = constants.%empty_tuple.type] { @@ -122,8 +130,8 @@ var package_b: () = package.NS.ChildNS.B(); // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %empty_tuple.type = ref_binding a, %a.var [concrete = %a.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %empty_tuple.type = var %b.var_patt [concrete] // CHECK:STDOUT: %.loc5_9.1: type = splice_block %.loc5_9.3 [concrete = constants.%empty_tuple.type] { @@ -132,8 +140,8 @@ var package_b: () = package.NS.ChildNS.B(); // CHECK:STDOUT: } // CHECK:STDOUT: %b: ref %empty_tuple.type = ref_binding b, %b.var [concrete = %b.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %package_a.patt: %pattern_type = ref_binding_pattern package_a [concrete] -// CHECK:STDOUT: %package_a.var_patt: %pattern_type = var_pattern %package_a.patt [concrete] +// CHECK:STDOUT: %package_a.patt: %pattern_type = ref_binding_pattern package_a [concrete = constants.%package_a.patt] +// CHECK:STDOUT: %package_a.var_patt: %pattern_type = var_pattern %package_a.patt [concrete = constants.%package_a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %package_a.var: ref %empty_tuple.type = var %package_a.var_patt [concrete] // CHECK:STDOUT: %.loc7_17.1: type = splice_block %.loc7_17.3 [concrete = constants.%empty_tuple.type] { @@ -142,8 +150,8 @@ var package_b: () = package.NS.ChildNS.B(); // CHECK:STDOUT: } // CHECK:STDOUT: %package_a: ref %empty_tuple.type = ref_binding package_a, %package_a.var [concrete = %package_a.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %package_b.patt: %pattern_type = ref_binding_pattern package_b [concrete] -// CHECK:STDOUT: %package_b.var_patt: %pattern_type = var_pattern %package_b.patt [concrete] +// CHECK:STDOUT: %package_b.patt: %pattern_type = ref_binding_pattern package_b [concrete = constants.%package_b.patt] +// CHECK:STDOUT: %package_b.var_patt: %pattern_type = var_pattern %package_b.patt [concrete = constants.%package_b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %package_b.var: ref %empty_tuple.type = var %package_b.var_patt [concrete] // CHECK:STDOUT: %.loc8_17.1: type = splice_block %.loc8_17.3 [concrete = constants.%empty_tuple.type] { diff --git a/toolchain/check/testdata/namespace/imported_indirect.carbon b/toolchain/check/testdata/namespace/imported_indirect.carbon index d2803cc95417..5d525ed4287b 100644 --- a/toolchain/check/testdata/namespace/imported_indirect.carbon +++ b/toolchain/check/testdata/namespace/imported_indirect.carbon @@ -125,6 +125,8 @@ fn G() { Same.F(); } // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %.46c: Core.Form = init_form %C [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %C [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -152,8 +154,8 @@ fn G() { Same.F(); } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %B: = namespace [concrete] {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %C.ref [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %C.ref [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %A.ref: = name_ref A, imports.%A [concrete = imports.%A] // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Same.C [concrete = constants.%C] @@ -243,6 +245,8 @@ fn G() { Same.F(); } // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type = ref_binding_pattern e [concrete] +// CHECK:STDOUT: %e.var_patt: %pattern_type = var_pattern %e.patt [concrete] // CHECK:STDOUT: %D.type: type = fn_type @D [concrete] // CHECK:STDOUT: %D: %D.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -276,8 +280,8 @@ fn G() { Same.F(); } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %e.patt: %pattern_type = ref_binding_pattern e [concrete] -// CHECK:STDOUT: %e.var_patt: %pattern_type = var_pattern %e.patt [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type = ref_binding_pattern e [concrete = constants.%e.patt] +// CHECK:STDOUT: %e.var_patt: %pattern_type = var_pattern %e.patt [concrete = constants.%e.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %e.var: ref %empty_tuple.type = var %e.var_patt [concrete] // CHECK:STDOUT: %.loc5_9.1: type = splice_block %.loc5_9.3 [concrete = constants.%empty_tuple.type] { diff --git a/toolchain/check/testdata/namespace/merging_with_indirections.carbon b/toolchain/check/testdata/namespace/merging_with_indirections.carbon index ac434d05d9ae..c7ee7dff4295 100644 --- a/toolchain/check/testdata/namespace/merging_with_indirections.carbon +++ b/toolchain/check/testdata/namespace/merging_with_indirections.carbon @@ -89,6 +89,8 @@ fn Run() { // CHECK:STDOUT: %A: type = class_type @A [concrete] // CHECK:STDOUT: %.34d: Core.Form = init_form %A [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %A [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %A [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] @@ -124,8 +126,8 @@ fn Run() { // CHECK:STDOUT: } // 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: %return.param_patt: %pattern_type = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %A.ref [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %A.ref [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %NS1.ref: = name_ref NS1, imports.%NS1 [concrete = imports.%NS1] // CHECK:STDOUT: %A.ref: type = name_ref A, imports.%Other.A [concrete = constants.%A] @@ -170,6 +172,8 @@ fn Run() { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.821: type = pattern_type %A [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.821 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.821 = var_pattern %a.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.150: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] @@ -239,8 +243,8 @@ fn Run() { // CHECK:STDOUT: %F.call.loc7: init %A to %.loc7_11.1 = call %F.ref.loc7() // CHECK:STDOUT: %.loc7_11.2: ref %A = temporary %.loc7_11.1, %F.call.loc7 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.821 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.821 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.821 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.821 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %A = var %a.var_patt // CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%A, (constants.%DefaultOrUnformed.impl_witness.776) [concrete = constants.%DefaultOrUnformed.facet] diff --git a/toolchain/check/testdata/namespace/shadow.carbon b/toolchain/check/testdata/namespace/shadow.carbon index 3d8d95c35260..3c6d907e1568 100644 --- a/toolchain/check/testdata/namespace/shadow.carbon +++ b/toolchain/check/testdata/namespace/shadow.carbon @@ -46,10 +46,14 @@ fn N.M.B() -> i32 { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %B.type: type = fn_type @B [concrete] // CHECK:STDOUT: %B: %B.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %true: bool = bool_literal true [concrete] +// CHECK:STDOUT: %A.patt: %pattern_type.6b6 = ref_binding_pattern A [concrete] +// CHECK:STDOUT: %A.var_patt: %pattern_type.6b6 = var_pattern %A.patt [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -119,8 +123,8 @@ fn N.M.B() -> i32 { // CHECK:STDOUT: .A = // CHECK:STDOUT: } // CHECK:STDOUT: %B.decl: %B.type = fn_decl @B [concrete = constants.%B] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc22 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc22 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc22: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc22: Core.Form = init_form %i32.loc22 [concrete = constants.%.795] @@ -142,8 +146,8 @@ fn N.M.B() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: !if.then: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %A.patt: %pattern_type.6b6 = ref_binding_pattern A [concrete] -// CHECK:STDOUT: %A.var_patt: %pattern_type.6b6 = var_pattern %A.patt [concrete] +// CHECK:STDOUT: %A.patt: %pattern_type.6b6 = ref_binding_pattern A [concrete = constants.%A.patt] +// CHECK:STDOUT: %A.var_patt: %pattern_type.6b6 = var_pattern %A.patt [concrete = constants.%A.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %A.var: ref %i32 = var %A.var_patt // CHECK:STDOUT: %int_0.loc26: Core.IntLiteral = int_value 0 [concrete = constants.%int_0.5c6] diff --git a/toolchain/check/testdata/operators/builtin/and.carbon b/toolchain/check/testdata/operators/builtin/and.carbon index d28643eb3f03..f5003b95dcd9 100644 --- a/toolchain/check/testdata/operators/builtin/and.carbon +++ b/toolchain/check/testdata/operators/builtin/and.carbon @@ -35,6 +35,8 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: constants { // CHECK:STDOUT: %.f34: Core.Form = init_form bool [concrete] // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] +// CHECK:STDOUT: %return.param_patt.5a1: %pattern_type.831 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.c0c: %pattern_type.831 = return_slot_pattern %return.param_patt.5a1, bool [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] @@ -55,14 +57,26 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: %Constant.type: type = fn_type @Constant [concrete] // CHECK:STDOUT: %Constant: %Constant.type = struct_value () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] +// CHECK:STDOUT: %a.patt.d4c: %pattern_type.831 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt.41b: %pattern_type.831 = var_pattern %a.patt.d4c [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.cb1 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.cb1 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.cb1 = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.cb1 = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.cb1 = ref_binding_pattern d [concrete] +// CHECK:STDOUT: %d.var_patt: %pattern_type.cb1 = var_pattern %d.patt [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.1: type = fn_type @Destroy.Op.loc26 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.1: %Destroy.Op.type.1d8f74.1 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.2: type = fn_type @Destroy.Op.loc23 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.2: %Destroy.Op.type.1d8f74.2 = struct_value () [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.831 = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.831 = at_binding_pattern x, %x.param_patt [concrete] // CHECK:STDOUT: %PartialConstant.type: type = fn_type @PartialConstant [concrete] // CHECK:STDOUT: %PartialConstant: %PartialConstant.type = struct_value () [concrete] +// CHECK:STDOUT: %a.patt.728: %pattern_type.cb1 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt.06f: %pattern_type.cb1 = var_pattern %a.patt.728 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -91,8 +105,8 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc15_11.1 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete = constants.%return.param_patt.5a1] +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc15_11.1 [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc15_11.1: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc15_11.2: Core.Form = init_form %.loc15_11.1 [concrete = constants.%.f34] @@ -100,8 +114,8 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc16_11.1 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete = constants.%return.param_patt.5a1] +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc16_11.1 [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc16_11.1: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc16_11.2: Core.Form = init_form %.loc16_11.1 [concrete = constants.%.f34] @@ -109,8 +123,8 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %And.decl: %And.type = fn_decl @And [concrete = constants.%And] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc18_13.1 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete = constants.%return.param_patt.5a1] +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc18_13.1 [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc18_13.1: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc18_13.2: Core.Form = init_form %.loc18_13.1 [concrete = constants.%.f34] @@ -119,8 +133,8 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: } // CHECK:STDOUT: %Constant.decl: %Constant.type = fn_decl @Constant [concrete = constants.%Constant] {} {} // CHECK:STDOUT: %PartialConstant.decl: %PartialConstant.type = fn_decl @PartialConstant [concrete = constants.%PartialConstant] { -// CHECK:STDOUT: %x.param_patt: %pattern_type.831 = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.831 = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.831 = value_param_pattern [concrete = constants.%x.param_patt] +// CHECK:STDOUT: %x.patt: %pattern_type.831 = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: bool = value_param call_param0 // CHECK:STDOUT: %.loc29: type = type_literal bool [concrete = bool] @@ -173,8 +187,8 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: fn @Constant() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.831 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.831 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.831 = ref_binding_pattern a [concrete = constants.%a.patt.d4c] +// CHECK:STDOUT: %a.var_patt: %pattern_type.831 = var_pattern %a.patt [concrete = constants.%a.var_patt.41b] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref bool = var %a.var_patt // CHECK:STDOUT: %true.loc23_54: bool = bool_literal true [concrete = constants.%true] @@ -213,8 +227,8 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: !.loc23_15: // CHECK:STDOUT: %a: ref bool = ref_binding a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.cb1 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.cb1 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.cb1 = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type.cb1 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %empty_tuple.type = var %b.var_patt // CHECK:STDOUT: %.loc24_56.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] @@ -252,8 +266,8 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: !.loc24_15: // CHECK:STDOUT: %b: ref %empty_tuple.type = ref_binding b, %b.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.cb1 = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.cb1 = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.cb1 = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type.cb1 = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %empty_tuple.type = var %c.var_patt // CHECK:STDOUT: %.loc25_56.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] @@ -291,8 +305,8 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: !.loc25_15: // CHECK:STDOUT: %c: ref %empty_tuple.type = ref_binding c, %c.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.cb1 = ref_binding_pattern d [concrete] -// CHECK:STDOUT: %d.var_patt: %pattern_type.cb1 = var_pattern %d.patt [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.cb1 = ref_binding_pattern d [concrete = constants.%d.patt] +// CHECK:STDOUT: %d.var_patt: %pattern_type.cb1 = var_pattern %d.patt [concrete = constants.%d.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %empty_tuple.type = var %d.var_patt // CHECK:STDOUT: %.loc26_57.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] @@ -347,8 +361,8 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: fn @PartialConstant(%x.param: bool) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.cb1 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = ref_binding_pattern a [concrete = constants.%a.patt.728] +// CHECK:STDOUT: %a.var_patt: %pattern_type.cb1 = var_pattern %a.patt [concrete = constants.%a.var_patt.06f] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %empty_tuple.type = var %a.var_patt // CHECK:STDOUT: %.loc30_53.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] diff --git a/toolchain/check/testdata/operators/builtin/assignment.carbon b/toolchain/check/testdata/operators/builtin/assignment.carbon index ebb48df814e7..ae3fb9b4a924 100644 --- a/toolchain/check/testdata/operators/builtin/assignment.carbon +++ b/toolchain/check/testdata/operators/builtin/assignment.carbon @@ -42,6 +42,8 @@ fn Main() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.6b6 = var_pattern %a.patt [concrete] // CHECK:STDOUT: %int_12.6a3: Core.IntLiteral = int_value 12 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -67,6 +69,8 @@ fn Main() { // CHECK:STDOUT: %tuple.b59: %tuple.type.24b = tuple_value (%i32, %i32) [concrete] // CHECK:STDOUT: %tuple.type.e55: type = tuple_type (%i32, %i32) [concrete] // CHECK:STDOUT: %pattern_type.394: type = pattern_type %tuple.type.e55 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.394 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.394 = var_pattern %b.patt [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %tuple.type.f94: type = tuple_type (Core.IntLiteral, Core.IntLiteral) [concrete] @@ -89,11 +93,15 @@ fn Main() { // CHECK:STDOUT: %int_4.4eb: %i32 = int_value 4 [concrete] // CHECK:STDOUT: %struct_type.a.b.b4c: type = struct_type {.a: %i32, .b: %i32} [concrete] // CHECK:STDOUT: %pattern_type.20e3: type = pattern_type %struct_type.a.b.b4c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.20e3 = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.20e3 = var_pattern %c.patt [concrete] // CHECK:STDOUT: %struct_type.a.b.cfd: type = struct_type {.a: Core.IntLiteral, .b: Core.IntLiteral} [concrete] // CHECK:STDOUT: %struct.4aa: %struct_type.a.b.cfd = struct_value (%int_1.5b8, %int_2.ecc) [concrete] // CHECK:STDOUT: %struct.631: %struct_type.a.b.b4c = struct_value (%int_1.0c6, %int_2.295) [concrete] // CHECK:STDOUT: %ptr.d08: type = ptr_type %i32 [concrete] // CHECK:STDOUT: %pattern_type.f00: type = pattern_type %ptr.d08 [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.f00 = ref_binding_pattern p [concrete] +// CHECK:STDOUT: %p.var_patt: %pattern_type.f00 = var_pattern %p.patt [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.type.ff5: type = fn_type @ptr.as.Copy.impl.Op, @ptr.as.Copy.impl(%T.67d) [symbolic] @@ -156,8 +164,8 @@ fn Main() { // CHECK:STDOUT: fn @Main() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.6b6 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.6b6 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %i32 = var %a.var_patt // CHECK:STDOUT: %int_12: Core.IntLiteral = int_value 12 [concrete = constants.%int_12.6a3] @@ -180,8 +188,8 @@ fn Main() { // CHECK:STDOUT: %.loc17: init %i32 = converted %int_9, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc17 [concrete = constants.%int_9.056] // CHECK:STDOUT: assign %a.ref.loc17, %.loc17 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.394 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.394 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.394 = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type.394 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %tuple.type.e55 = var %b.var_patt // CHECK:STDOUT: %int_1.loc19: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -236,8 +244,8 @@ fn Main() { // CHECK:STDOUT: %.loc21: init %i32 = converted %int_4.loc21, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc21 [concrete = constants.%int_4.4eb] // CHECK:STDOUT: assign %tuple.elem1.loc21, %.loc21 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.20e3 = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.20e3 = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.20e3 = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type.20e3 = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %struct_type.a.b.b4c = var %c.var_patt // CHECK:STDOUT: %int_1.loc23: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -289,8 +297,8 @@ fn Main() { // CHECK:STDOUT: %.loc25_7: init %i32 = converted %int_4.loc25, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc25 [concrete = constants.%int_4.4eb] // CHECK:STDOUT: assign %.loc25_4, %.loc25_7 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: %pattern_type.f00 = ref_binding_pattern p [concrete] -// CHECK:STDOUT: %p.var_patt: %pattern_type.f00 = var_pattern %p.patt [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.f00 = ref_binding_pattern p [concrete = constants.%p.patt] +// CHECK:STDOUT: %p.var_patt: %pattern_type.f00 = var_pattern %p.patt [concrete = constants.%p.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %p.var: ref %ptr.d08 = var %p.var_patt // CHECK:STDOUT: %a.ref.loc27: ref %i32 = name_ref a, %a diff --git a/toolchain/check/testdata/operators/builtin/fail_and_or_not_in_function.carbon b/toolchain/check/testdata/operators/builtin/fail_and_or_not_in_function.carbon index a0732fdb5b27..6807e42ed4ea 100644 --- a/toolchain/check/testdata/operators/builtin/fail_and_or_not_in_function.carbon +++ b/toolchain/check/testdata/operators/builtin/fail_and_or_not_in_function.carbon @@ -168,6 +168,8 @@ fn F() { // CHECK:STDOUT: --- fail_nested.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { +// CHECK:STDOUT: %pattern_type: type = pattern_type bool [concrete] +// CHECK:STDOUT: %B.patt: %pattern_type = symbolic_binding_pattern B, 0 [symbolic] // CHECK:STDOUT: %B.a76: bool = symbolic_binding B, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] @@ -180,6 +182,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(.inst{{[0-9A-F]+}}.loc4_15: bool) { +// CHECK:STDOUT: %B.patt.loc4_15.2: %pattern_type = symbolic_binding_pattern B, 0 [symbolic = %B.patt.loc4_15.2 (constants.%B.patt)] // CHECK:STDOUT: %B: bool = symbolic_binding B, 0 [symbolic = %B (constants.%B.a76)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -209,6 +212,7 @@ fn F() { // CHECK:STDOUT: fn @F(); // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%B.a76) { +// CHECK:STDOUT: %B.patt.loc4_15.2 => constants.%B.patt // CHECK:STDOUT: %B => constants.%B.a76 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/operators/builtin/fail_and_or_partial_constant.carbon b/toolchain/check/testdata/operators/builtin/fail_and_or_partial_constant.carbon index 6f9a08bd02a9..4edb86763cd5 100644 --- a/toolchain/check/testdata/operators/builtin/fail_and_or_partial_constant.carbon +++ b/toolchain/check/testdata/operators/builtin/fail_and_or_partial_constant.carbon @@ -52,6 +52,8 @@ fn KnownValueButNonConstantCondition(x: bool) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.831 = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.831 = at_binding_pattern x, %x.param_patt [concrete] // CHECK:STDOUT: %PartialConstant.type: type = fn_type @PartialConstant [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %PartialConstant: %PartialConstant.type = struct_value () [concrete] @@ -79,8 +81,8 @@ fn KnownValueButNonConstantCondition(x: bool) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %PartialConstant.decl: %PartialConstant.type = fn_decl @PartialConstant [concrete = constants.%PartialConstant] { -// CHECK:STDOUT: %x.param_patt: %pattern_type.831 = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.831 = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.831 = value_param_pattern [concrete = constants.%x.param_patt] +// CHECK:STDOUT: %x.patt: %pattern_type.831 = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: bool = value_param call_param0 // CHECK:STDOUT: %.loc4: type = type_literal bool [concrete = bool] @@ -91,8 +93,8 @@ fn KnownValueButNonConstantCondition(x: bool) { // CHECK:STDOUT: fn @PartialConstant(%x.param: bool) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: = ref_binding_pattern a [concrete = ] +// CHECK:STDOUT: %a.var_patt: = var_pattern %a.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref = var %a.var_patt [concrete = ] // CHECK:STDOUT: assign %a.var, @@ -127,8 +129,8 @@ fn KnownValueButNonConstantCondition(x: bool) { // CHECK:STDOUT: !.loc9_15: // CHECK:STDOUT: %a: ref = ref_binding a, [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: = ref_binding_pattern b [concrete = ] +// CHECK:STDOUT: %b.var_patt: = var_pattern %b.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref = var %b.var_patt [concrete = ] // CHECK:STDOUT: assign %b.var, @@ -170,6 +172,8 @@ fn KnownValueButNonConstantCondition(x: bool) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.831 = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.831 = at_binding_pattern x, %x.param_patt [concrete] // CHECK:STDOUT: %KnownValueButNonConstantCondition.type: type = fn_type @KnownValueButNonConstantCondition [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %KnownValueButNonConstantCondition: %KnownValueButNonConstantCondition.type = struct_value () [concrete] @@ -197,8 +201,8 @@ fn KnownValueButNonConstantCondition(x: bool) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %KnownValueButNonConstantCondition.decl: %KnownValueButNonConstantCondition.type = fn_decl @KnownValueButNonConstantCondition [concrete = constants.%KnownValueButNonConstantCondition] { -// CHECK:STDOUT: %x.param_patt: %pattern_type.831 = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.831 = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.831 = value_param_pattern [concrete = constants.%x.param_patt] +// CHECK:STDOUT: %x.patt: %pattern_type.831 = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: bool = value_param call_param0 // CHECK:STDOUT: %.loc4: type = type_literal bool [concrete = bool] @@ -209,8 +213,8 @@ fn KnownValueButNonConstantCondition(x: bool) { // CHECK:STDOUT: fn @KnownValueButNonConstantCondition(%x.param: bool) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: = ref_binding_pattern c [concrete = ] +// CHECK:STDOUT: %c.var_patt: = var_pattern %c.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref = var %c.var_patt [concrete = ] // CHECK:STDOUT: assign %c.var, @@ -245,8 +249,8 @@ fn KnownValueButNonConstantCondition(x: bool) { // CHECK:STDOUT: !.loc11_15: // CHECK:STDOUT: %c: ref = ref_binding c, [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: = ref_binding_pattern d [concrete] -// CHECK:STDOUT: %d.var_patt: = var_pattern %d.patt [concrete] +// CHECK:STDOUT: %d.patt: = ref_binding_pattern d [concrete = ] +// CHECK:STDOUT: %d.var_patt: = var_pattern %d.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref = var %d.var_patt [concrete = ] // CHECK:STDOUT: assign %d.var, diff --git a/toolchain/check/testdata/operators/builtin/fail_assignment_to_non_assignable.carbon b/toolchain/check/testdata/operators/builtin/fail_assignment_to_non_assignable.carbon index 5c1367a150e9..06c50dff8ac2 100644 --- a/toolchain/check/testdata/operators/builtin/fail_assignment_to_non_assignable.carbon +++ b/toolchain/check/testdata/operators/builtin/fail_assignment_to_non_assignable.carbon @@ -71,6 +71,8 @@ fn Main() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] @@ -110,6 +112,8 @@ fn Main() { // CHECK:STDOUT: %tuple.302: %tuple.type.f94 = tuple_value (%int_3.1ba, %int_4) [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.Copy.impl.Op.bound.64e: = bound_method %int_3.1ba, %Core.IntLiteral.as.Copy.impl.Op [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.Copy.impl.Op.bound.50f: = bound_method %int_4, %Core.IntLiteral.as.Copy.impl.Op [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = ref_binding_pattern n [concrete] +// CHECK:STDOUT: %n.var_patt: %pattern_type.6b6 = var_pattern %n.patt [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.7b4: = bound_method %int_0.5c6, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] // CHECK:STDOUT: %bound_method.6e0: = bound_method %int_0.5c6, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] @@ -134,6 +138,8 @@ fn Main() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.485: = bound_method %int_3.1ba, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] // CHECK:STDOUT: %bound_method.763: = bound_method %int_3.1ba, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_3.410: %i32 = int_value 3 [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.6b6 = var_pattern %a.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.150: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.53a: %T.as.DefaultOrUnformed.impl.Op.type.150 = struct_value () [symbolic] @@ -184,8 +190,8 @@ fn Main() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc15: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -237,8 +243,8 @@ fn Main() { // CHECK:STDOUT: %tuple.loc32: %tuple.type.f94 = tuple_value (%int_1.loc32, %int_2.loc32) [concrete = constants.%tuple.ad8] // CHECK:STDOUT: %.loc32_8.2: %tuple.type.f94 = converted %.loc32_8.1, %tuple.loc32 [concrete = constants.%tuple.ad8] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = ref_binding_pattern n [concrete] -// CHECK:STDOUT: %n.var_patt: %pattern_type.6b6 = var_pattern %n.patt [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = ref_binding_pattern n [concrete = constants.%n.patt] +// CHECK:STDOUT: %n.var_patt: %pattern_type.6b6 = var_pattern %n.patt [concrete = constants.%n.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %n.var: ref %i32 = var %n.var_patt // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0.5c6] @@ -344,8 +350,8 @@ fn Main() { // CHECK:STDOUT: %.loc53_27: init %i32 = converted %int_3.loc53, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc53_27 [concrete = constants.%int_3.410] // CHECK:STDOUT: assign %.loc53_4, %.loc53_27 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.6b6 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.6b6 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %i32 = var %a.var_patt // CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%i32, (constants.%DefaultOrUnformed.impl_witness.e52) [concrete = constants.%DefaultOrUnformed.facet] diff --git a/toolchain/check/testdata/operators/builtin/fail_redundant_compound_access.carbon b/toolchain/check/testdata/operators/builtin/fail_redundant_compound_access.carbon index 4a96dab91809..298c26a7f235 100644 --- a/toolchain/check/testdata/operators/builtin/fail_redundant_compound_access.carbon +++ b/toolchain/check/testdata/operators/builtin/fail_redundant_compound_access.carbon @@ -39,6 +39,8 @@ fn Main() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] @@ -61,6 +63,8 @@ fn Main() { // CHECK:STDOUT: %int_0.3c0: %i32 = int_value 0 [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.6b6 = var_pattern %a.patt [concrete] // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.485: = bound_method %int_3.1ba, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] // CHECK:STDOUT: %bound_method.763: = bound_method %int_3.1ba, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] @@ -107,8 +111,8 @@ fn Main() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc15_11: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -133,8 +137,8 @@ fn Main() { // CHECK:STDOUT: fn @Main() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.6b6 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.6b6 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %i32 = var %a.var_patt // CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete = constants.%int_3.1ba] diff --git a/toolchain/check/testdata/operators/builtin/fail_type_mismatch.carbon b/toolchain/check/testdata/operators/builtin/fail_type_mismatch.carbon index 025a2f17d46d..617649f5b68e 100644 --- a/toolchain/check/testdata/operators/builtin/fail_type_mismatch.carbon +++ b/toolchain/check/testdata/operators/builtin/fail_type_mismatch.carbon @@ -30,6 +30,8 @@ fn Main() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.831 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.831 = var_pattern %x.patt [concrete] // CHECK:STDOUT: %int_12: Core.IntLiteral = int_value 12 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -63,8 +65,8 @@ fn Main() { // CHECK:STDOUT: fn @Main() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.831 = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.831 = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.831 = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.831 = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref bool = var %x.var_patt // CHECK:STDOUT: %int_12: Core.IntLiteral = int_value 12 [concrete = constants.%int_12] diff --git a/toolchain/check/testdata/operators/builtin/fail_type_mismatch_assignment.carbon b/toolchain/check/testdata/operators/builtin/fail_type_mismatch_assignment.carbon index a786c82a9e88..c9b3ebb967d3 100644 --- a/toolchain/check/testdata/operators/builtin/fail_type_mismatch_assignment.carbon +++ b/toolchain/check/testdata/operators/builtin/fail_type_mismatch_assignment.carbon @@ -36,6 +36,8 @@ fn Main() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.6b6 = var_pattern %a.patt [concrete] // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -86,8 +88,8 @@ fn Main() { // CHECK:STDOUT: fn @Main() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.6b6 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.6b6 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %i32 = var %a.var_patt // CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete = constants.%int_3.1ba] diff --git a/toolchain/check/testdata/operators/builtin/fail_type_mismatch_once.carbon b/toolchain/check/testdata/operators/builtin/fail_type_mismatch_once.carbon index d07060a1d71a..38372be4610e 100644 --- a/toolchain/check/testdata/operators/builtin/fail_type_mismatch_once.carbon +++ b/toolchain/check/testdata/operators/builtin/fail_type_mismatch_once.carbon @@ -31,6 +31,8 @@ fn Main() -> i32 { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] @@ -59,8 +61,8 @@ fn Main() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Main.decl: %Main.type = fn_decl @Main [concrete = constants.%Main] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc15: Core.Form = init_form %i32 [concrete = constants.%.795] diff --git a/toolchain/check/testdata/operators/builtin/fail_unimplemented_op.carbon b/toolchain/check/testdata/operators/builtin/fail_unimplemented_op.carbon index bbe83faf036d..2f41e2c918b4 100644 --- a/toolchain/check/testdata/operators/builtin/fail_unimplemented_op.carbon +++ b/toolchain/check/testdata/operators/builtin/fail_unimplemented_op.carbon @@ -29,6 +29,8 @@ fn Main() -> i32 { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] @@ -56,8 +58,8 @@ fn Main() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Main.decl: %Main.type = fn_decl @Main [concrete = constants.%Main] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc15: Core.Form = init_form %i32 [concrete = constants.%.795] diff --git a/toolchain/check/testdata/operators/builtin/or.carbon b/toolchain/check/testdata/operators/builtin/or.carbon index 005bcec15e21..a6383f68f564 100644 --- a/toolchain/check/testdata/operators/builtin/or.carbon +++ b/toolchain/check/testdata/operators/builtin/or.carbon @@ -35,6 +35,8 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: constants { // CHECK:STDOUT: %.f34: Core.Form = init_form bool [concrete] // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] +// CHECK:STDOUT: %return.param_patt.5a1: %pattern_type.831 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.c0c: %pattern_type.831 = return_slot_pattern %return.param_patt.5a1, bool [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] @@ -55,14 +57,26 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: %Constant: %Constant.type = struct_value () [concrete] // CHECK:STDOUT: %false: bool = bool_literal false [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] +// CHECK:STDOUT: %a.patt.d4ccad.1: %pattern_type.831 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt.41b89c.1: %pattern_type.831 = var_pattern %a.patt.d4ccad.1 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.831 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.831 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.831 = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.831 = var_pattern %c.patt [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.cb1 = ref_binding_pattern d [concrete] +// CHECK:STDOUT: %d.var_patt: %pattern_type.cb1 = var_pattern %d.patt [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.1: type = fn_type @Destroy.Op.loc26 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.1: %Destroy.Op.type.1d8f74.1 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.2: type = fn_type @Destroy.Op.loc25 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.2: %Destroy.Op.type.1d8f74.2 = struct_value () [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.831 = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.831 = at_binding_pattern x, %x.param_patt [concrete] // CHECK:STDOUT: %PartialConstant.type: type = fn_type @PartialConstant [concrete] // CHECK:STDOUT: %PartialConstant: %PartialConstant.type = struct_value () [concrete] +// CHECK:STDOUT: %a.patt.d4ccad.2: %pattern_type.831 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt.41b89c.2: %pattern_type.831 = var_pattern %a.patt.d4ccad.2 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -91,8 +105,8 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc15_11.1 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete = constants.%return.param_patt.5a1] +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc15_11.1 [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc15_11.1: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc15_11.2: Core.Form = init_form %.loc15_11.1 [concrete = constants.%.f34] @@ -100,8 +114,8 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc16_11.1 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete = constants.%return.param_patt.5a1] +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc16_11.1 [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc16_11.1: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc16_11.2: Core.Form = init_form %.loc16_11.1 [concrete = constants.%.f34] @@ -109,8 +123,8 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Or.decl: %Or.type = fn_decl @Or [concrete = constants.%Or] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc18_12.1 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete = constants.%return.param_patt.5a1] +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc18_12.1 [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc18_12.1: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc18_12.2: Core.Form = init_form %.loc18_12.1 [concrete = constants.%.f34] @@ -119,8 +133,8 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: } // CHECK:STDOUT: %Constant.decl: %Constant.type = fn_decl @Constant [concrete = constants.%Constant] {} {} // CHECK:STDOUT: %PartialConstant.decl: %PartialConstant.type = fn_decl @PartialConstant [concrete = constants.%PartialConstant] { -// CHECK:STDOUT: %x.param_patt: %pattern_type.831 = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.831 = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.831 = value_param_pattern [concrete = constants.%x.param_patt] +// CHECK:STDOUT: %x.patt: %pattern_type.831 = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: bool = value_param call_param0 // CHECK:STDOUT: %.loc29: type = type_literal bool [concrete = bool] @@ -174,8 +188,8 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: fn @Constant() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.831 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.831 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.831 = ref_binding_pattern a [concrete = constants.%a.patt.d4ccad.1] +// CHECK:STDOUT: %a.var_patt: %pattern_type.831 = var_pattern %a.patt [concrete = constants.%a.var_patt.41b89c.1] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref bool = var %a.var_patt // CHECK:STDOUT: %true.loc23_53: bool = bool_literal true [concrete = constants.%true] @@ -215,8 +229,8 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: !.loc23_15: // CHECK:STDOUT: %a: ref bool = ref_binding a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.831 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.831 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.831 = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type.831 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref bool = var %b.var_patt // CHECK:STDOUT: %true.loc24_54: bool = bool_literal true [concrete = constants.%true] @@ -256,8 +270,8 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: !.loc24_15: // CHECK:STDOUT: %b: ref bool = ref_binding b, %b.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.831 = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.831 = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.831 = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type.831 = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref bool = var %c.var_patt // CHECK:STDOUT: %true.loc25_54: bool = bool_literal true [concrete = constants.%true] @@ -297,8 +311,8 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: !.loc25_15: // CHECK:STDOUT: %c: ref bool = ref_binding c, %c.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.cb1 = ref_binding_pattern d [concrete] -// CHECK:STDOUT: %d.var_patt: %pattern_type.cb1 = var_pattern %d.patt [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.cb1 = ref_binding_pattern d [concrete = constants.%d.patt] +// CHECK:STDOUT: %d.var_patt: %pattern_type.cb1 = var_pattern %d.patt [concrete = constants.%d.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %empty_tuple.type = var %d.var_patt // CHECK:STDOUT: %.loc26_56.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] @@ -354,8 +368,8 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: fn @PartialConstant(%x.param: bool) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.831 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.831 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.831 = ref_binding_pattern a [concrete = constants.%a.patt.d4ccad.2] +// CHECK:STDOUT: %a.var_patt: %pattern_type.831 = var_pattern %a.patt [concrete = constants.%a.var_patt.41b89c.2] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref bool = var %a.var_patt // CHECK:STDOUT: %true.loc30_50: bool = bool_literal true [concrete = constants.%true] diff --git a/toolchain/check/testdata/operators/builtin/unary_op.carbon b/toolchain/check/testdata/operators/builtin/unary_op.carbon index 6f9d949bf931..35e2960efdd8 100644 --- a/toolchain/check/testdata/operators/builtin/unary_op.carbon +++ b/toolchain/check/testdata/operators/builtin/unary_op.carbon @@ -28,7 +28,11 @@ fn Constant() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt.4e2: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete] // CHECK:STDOUT: %.f34: Core.Form = init_form bool [concrete] +// CHECK:STDOUT: %return.param_patt.5a1: %pattern_type.831 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.c0c: %pattern_type.831 = return_slot_pattern %return.param_patt.5a1, bool [concrete] // CHECK:STDOUT: %Not.type: type = fn_type @Not [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Not: %Not.type = struct_value () [concrete] @@ -39,12 +43,18 @@ fn Constant() { // CHECK:STDOUT: %.15e: type = fn_type_with_self_type %Copy.WithSelf.Op.type.4a4, %Copy.facet [concrete] // CHECK:STDOUT: %bool.as.Copy.impl.Op.type: type = fn_type @bool.as.Copy.impl.Op [concrete] // CHECK:STDOUT: %bool.as.Copy.impl.Op: %bool.as.Copy.impl.Op.type = struct_value () [concrete] +// CHECK:STDOUT: %not_true.patt: %pattern_type.831 = value_binding_pattern not_true [concrete] // CHECK:STDOUT: %true: bool = bool_literal true [concrete] // CHECK:STDOUT: %false: bool = bool_literal false [concrete] +// CHECK:STDOUT: %not_false.patt: %pattern_type.831 = value_binding_pattern not_false [concrete] // CHECK:STDOUT: %Constant.type: type = fn_type @Constant [concrete] // CHECK:STDOUT: %Constant: %Constant.type = struct_value () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.cb1 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %b.patt.454: %pattern_type.831 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.831 = var_pattern %b.patt.454 [concrete] // CHECK:STDOUT: %bool.as.Copy.impl.Op.bound: = bound_method %true, %bool.as.Copy.impl.Op [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.1: type = fn_type @Destroy.Op.loc24 [concrete] @@ -78,10 +88,10 @@ fn Constant() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Not.decl: %Not.type = fn_decl @Not [concrete = constants.%Not] { -// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc15_20.1 [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt.4e2] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete = constants.%return.param_patt.5a1] +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc15_20.1 [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc15_20.1: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc15_20.2: Core.Form = init_form %.loc15_20.1 [concrete = constants.%.f34] @@ -92,12 +102,12 @@ fn Constant() { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %not_true.patt: %pattern_type.831 = value_binding_pattern not_true [concrete] +// CHECK:STDOUT: %not_true.patt: %pattern_type.831 = value_binding_pattern not_true [concrete = constants.%not_true.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc19: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %not_true: bool = value_binding not_true, @__global_init.%.loc19 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %not_false.patt: %pattern_type.831 = value_binding_pattern not_false [concrete] +// CHECK:STDOUT: %not_false.patt: %pattern_type.831 = value_binding_pattern not_false [concrete = constants.%not_false.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc20: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %not_false: bool = value_binding not_false, @__global_init.%.loc20 @@ -117,8 +127,8 @@ fn Constant() { // CHECK:STDOUT: fn @Constant() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.cb1 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.cb1 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %empty_tuple.type = var %a.var_patt // CHECK:STDOUT: %.loc23_50.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] @@ -148,8 +158,8 @@ fn Constant() { // CHECK:STDOUT: !.loc23_15: // CHECK:STDOUT: %a: ref %empty_tuple.type = ref_binding a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.831 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.831 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.831 = ref_binding_pattern b [concrete = constants.%b.patt.454] +// CHECK:STDOUT: %b.var_patt: %pattern_type.831 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref bool = var %b.var_patt // CHECK:STDOUT: %true.loc24: bool = bool_literal true [concrete = constants.%true] diff --git a/toolchain/check/testdata/operators/overloaded/eq.carbon b/toolchain/check/testdata/operators/overloaded/eq.carbon index 08a3ce8a84bc..69fdba813bb4 100644 --- a/toolchain/check/testdata/operators/overloaded/eq.carbon +++ b/toolchain/check/testdata/operators/overloaded/eq.carbon @@ -90,10 +90,16 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: %EqWith.type.f77: type = generic_interface_type @EqWith [concrete] // CHECK:STDOUT: %EqWith.generic: %EqWith.type.f77 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] // CHECK:STDOUT: %.f34: Core.Form = init_form bool [concrete] // CHECK:STDOUT: %EqWith.type.d1f: type = facet_type <@EqWith, @EqWith(%C)> [concrete] // CHECK:STDOUT: %EqWith.impl_witness: = impl_witness @C.as.EqWith.impl.%EqWith.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.4a7: type = pattern_type %C [concrete] +// CHECK:STDOUT: %self.param_patt.c03: %pattern_type.4a7 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.3a1: %pattern_type.4a7 = at_binding_pattern self, %self.param_patt.c03 [concrete] +// CHECK:STDOUT: %other.param_patt.b8c: %pattern_type.4a7 = value_param_pattern [concrete] +// CHECK:STDOUT: %other.patt.527: %pattern_type.4a7 = at_binding_pattern other, %other.param_patt.b8c [concrete] +// CHECK:STDOUT: %return.patt.c0c: %pattern_type.831 = return_slot_pattern %return.param_patt, bool [concrete] // CHECK:STDOUT: %C.as.EqWith.impl.Equal.type: type = fn_type @C.as.EqWith.impl.Equal [concrete] // CHECK:STDOUT: %C.as.EqWith.impl.Equal: %C.as.EqWith.impl.Equal.type = struct_value () [concrete] // CHECK:STDOUT: %C.as.EqWith.impl.NotEqual.type: type = fn_type @C.as.EqWith.impl.NotEqual [concrete] @@ -101,6 +107,10 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: %EqWith.facet: %EqWith.type.d1f = facet_value %C, (%EqWith.impl_witness) [concrete] // CHECK:STDOUT: %EqWith.WithSelf.Equal.type.084: type = fn_type @EqWith.WithSelf.Equal, @EqWith.WithSelf(%C, %EqWith.facet) [concrete] // CHECK:STDOUT: %EqWith.WithSelf.NotEqual.type.399: type = fn_type @EqWith.WithSelf.NotEqual, @EqWith.WithSelf(%C, %EqWith.facet) [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.4a7 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.4a7 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.4a7 = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.4a7 = at_binding_pattern b, %b.param_patt [concrete] // CHECK:STDOUT: %TestEqual.type: type = fn_type @TestEqual [concrete] // CHECK:STDOUT: %TestEqual: %TestEqual.type = struct_value () [concrete] // CHECK:STDOUT: %.0e9: type = fn_type_with_self_type %EqWith.WithSelf.Equal.type.084, %EqWith.facet [concrete] @@ -137,12 +147,12 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: %EqWith.type: type = facet_type <@EqWith, @EqWith(constants.%C)> [concrete = constants.%EqWith.type.d1f] // CHECK:STDOUT: } // CHECK:STDOUT: %TestEqual.decl: %TestEqual.type = fn_decl @TestEqual [concrete = constants.%TestEqual] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.4a7 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.4a7 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.4a7 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.4a7 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc11_29.1 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.4a7 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.4a7 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %b.param_patt: %pattern_type.4a7 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.4a7 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc11_29.1 [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc11_29.1: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc11_29.2: Core.Form = init_form %.loc11_29.1 [concrete = constants.%.f34] @@ -156,12 +166,12 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestNotEqual.decl: %TestNotEqual.type = fn_decl @TestNotEqual [concrete = constants.%TestNotEqual] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.4a7 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.4a7 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.4a7 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.4a7 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc15_32.1 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.4a7 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.4a7 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %b.param_patt: %pattern_type.4a7 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.4a7 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc15_32.1 [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc15_32.1: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc15_32.2: Core.Form = init_form %.loc15_32.1 [concrete = constants.%.f34] @@ -178,12 +188,12 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.EqWith.impl: %C.ref.loc6_6 as %EqWith.type { // CHECK:STDOUT: %C.as.EqWith.impl.Equal.decl: %C.as.EqWith.impl.Equal.type = fn_decl @C.as.EqWith.impl.Equal [concrete = constants.%C.as.EqWith.impl.Equal] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.4a7 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.4a7 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %other.param_patt: %pattern_type.4a7 = value_param_pattern [concrete] -// CHECK:STDOUT: %other.patt: %pattern_type.4a7 = at_binding_pattern other, %other.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc7_34.1 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.4a7 = value_param_pattern [concrete = constants.%self.param_patt.c03] +// CHECK:STDOUT: %self.patt: %pattern_type.4a7 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.3a1] +// CHECK:STDOUT: %other.param_patt: %pattern_type.4a7 = value_param_pattern [concrete = constants.%other.param_patt.b8c] +// CHECK:STDOUT: %other.patt: %pattern_type.4a7 = at_binding_pattern other, %other.param_patt [concrete = constants.%other.patt.527] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc7_34.1 [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc7_34.1: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc7_34.2: Core.Form = init_form %.loc7_34.1 [concrete = constants.%.f34] @@ -197,12 +207,12 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %C.as.EqWith.impl.NotEqual.decl: %C.as.EqWith.impl.NotEqual.type = fn_decl @C.as.EqWith.impl.NotEqual [concrete = constants.%C.as.EqWith.impl.NotEqual] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.4a7 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.4a7 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %other.param_patt: %pattern_type.4a7 = value_param_pattern [concrete] -// CHECK:STDOUT: %other.patt: %pattern_type.4a7 = at_binding_pattern other, %other.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc8_37.1 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.4a7 = value_param_pattern [concrete = constants.%self.param_patt.c03] +// CHECK:STDOUT: %self.patt: %pattern_type.4a7 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.3a1] +// CHECK:STDOUT: %other.param_patt: %pattern_type.4a7 = value_param_pattern [concrete = constants.%other.param_patt.b8c] +// CHECK:STDOUT: %other.patt: %pattern_type.4a7 = at_binding_pattern other, %other.param_patt [concrete = constants.%other.patt.527] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc8_37.1 [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8_37.1: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc8_37.2: Core.Form = init_form %.loc8_37.1 [concrete = constants.%.f34] @@ -265,8 +275,14 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.9dc: type = pattern_type %D [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.9dc = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.9dc = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.9dc = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.9dc = at_binding_pattern b, %b.param_patt [concrete] // CHECK:STDOUT: %.f34: Core.Form = init_form bool [concrete] // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.c0c: %pattern_type.831 = return_slot_pattern %return.param_patt, bool [concrete] // CHECK:STDOUT: %TestEqual.type: type = fn_type @TestEqual [concrete] // CHECK:STDOUT: %TestEqual: %TestEqual.type = struct_value () [concrete] // CHECK:STDOUT: %EqWith.type.f77: type = generic_interface_type @EqWith [concrete] @@ -296,12 +312,12 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %D.decl: type = class_decl @D [concrete = constants.%D] {} {} // CHECK:STDOUT: %TestEqual.decl: %TestEqual.type = fn_decl @TestEqual [concrete = constants.%TestEqual] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.9dc = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.9dc = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.9dc = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.9dc = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc6_29.1 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.9dc = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.9dc = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %b.param_patt: %pattern_type.9dc = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.9dc = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc6_29.1 [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6_29.1: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc6_29.2: Core.Form = init_form %.loc6_29.1 [concrete = constants.%.f34] @@ -315,12 +331,12 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestNotEqual.decl: %TestNotEqual.type = fn_decl @TestNotEqual [concrete = constants.%TestNotEqual] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.9dc = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.9dc = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.9dc = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.9dc = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc14_32.1 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.9dc = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.9dc = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %b.param_patt: %pattern_type.9dc = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.9dc = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc14_32.1 [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc14_32.1: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc14_32.2: Core.Form = init_form %.loc14_32.1 [concrete = constants.%.f34] @@ -367,17 +383,31 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: %EqWith.type.f77: type = generic_interface_type @EqWith [concrete] // CHECK:STDOUT: %EqWith.generic: %EqWith.type.f77 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] // CHECK:STDOUT: %.f34: Core.Form = init_form bool [concrete] // CHECK:STDOUT: %EqWith.type.c2a: type = facet_type <@EqWith, @EqWith(%C)> [concrete] // CHECK:STDOUT: %EqWith.impl_witness: = impl_witness @C.as.EqWith.impl.%EqWith.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.eae: type = pattern_type %C [concrete] +// CHECK:STDOUT: %self.param_patt.bcb: %pattern_type.eae = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.fa1: %pattern_type.eae = at_binding_pattern self, %self.param_patt.bcb [concrete] +// CHECK:STDOUT: %other.param_patt.d05: %pattern_type.eae = value_param_pattern [concrete] +// CHECK:STDOUT: %other.patt.bc9: %pattern_type.eae = at_binding_pattern other, %other.param_patt.d05 [concrete] +// CHECK:STDOUT: %return.patt.c0c: %pattern_type.831 = return_slot_pattern %return.param_patt, bool [concrete] // CHECK:STDOUT: %C.as.EqWith.impl.Equal.type: type = fn_type @C.as.EqWith.impl.Equal [concrete] // CHECK:STDOUT: %C.as.EqWith.impl.Equal: %C.as.EqWith.impl.Equal.type = struct_value () [concrete] // CHECK:STDOUT: %C.as.EqWith.impl.NotEqual.type: type = fn_type @C.as.EqWith.impl.NotEqual [concrete] // CHECK:STDOUT: %C.as.EqWith.impl.NotEqual: %C.as.EqWith.impl.NotEqual.type = struct_value () [concrete] +// CHECK:STDOUT: %a.param_patt.70a: %pattern_type.eae = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt.b94: %pattern_type.eae = at_binding_pattern a, %a.param_patt.70a [concrete] // CHECK:STDOUT: %pattern_type.d59: type = pattern_type %D [concrete] +// CHECK:STDOUT: %b.param_patt.758: %pattern_type.d59 = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt.99f: %pattern_type.d59 = at_binding_pattern b, %b.param_patt.758 [concrete] // CHECK:STDOUT: %TestRhsBad.type: type = fn_type @TestRhsBad [concrete] // CHECK:STDOUT: %TestRhsBad: %TestRhsBad.type = struct_value () [concrete] +// CHECK:STDOUT: %a.param_patt.66d: %pattern_type.d59 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt.e98: %pattern_type.d59 = at_binding_pattern a, %a.param_patt.66d [concrete] +// CHECK:STDOUT: %b.param_patt.16c: %pattern_type.eae = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt.a6b: %pattern_type.eae = at_binding_pattern b, %b.param_patt.16c [concrete] // CHECK:STDOUT: %TestLhsBad.type: type = fn_type @TestLhsBad [concrete] // CHECK:STDOUT: %TestLhsBad: %TestLhsBad.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -412,12 +442,12 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: %EqWith.type: type = facet_type <@EqWith, @EqWith(constants.%C)> [concrete = constants.%EqWith.type.c2a] // CHECK:STDOUT: } // CHECK:STDOUT: %TestRhsBad.decl: %TestRhsBad.type = fn_decl @TestRhsBad [concrete = constants.%TestRhsBad] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.eae = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.eae = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.d59 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.d59 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc12_30.1 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.eae = value_param_pattern [concrete = constants.%a.param_patt.70a] +// CHECK:STDOUT: %a.patt: %pattern_type.eae = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt.b94] +// CHECK:STDOUT: %b.param_patt: %pattern_type.d59 = value_param_pattern [concrete = constants.%b.param_patt.758] +// CHECK:STDOUT: %b.patt: %pattern_type.d59 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt.99f] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc12_30.1 [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc12_30.1: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc12_30.2: Core.Form = init_form %.loc12_30.1 [concrete = constants.%.f34] @@ -431,12 +461,12 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestLhsBad.decl: %TestLhsBad.type = fn_decl @TestLhsBad [concrete = constants.%TestLhsBad] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.d59 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.d59 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.eae = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.eae = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc20_30.1 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.d59 = value_param_pattern [concrete = constants.%a.param_patt.66d] +// CHECK:STDOUT: %a.patt: %pattern_type.d59 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt.e98] +// CHECK:STDOUT: %b.param_patt: %pattern_type.eae = value_param_pattern [concrete = constants.%b.param_patt.16c] +// CHECK:STDOUT: %b.patt: %pattern_type.eae = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt.a6b] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc20_30.1 [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc20_30.1: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc20_30.2: Core.Form = init_form %.loc20_30.1 [concrete = constants.%.f34] @@ -453,12 +483,12 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.EqWith.impl: %C.ref.loc7_6 as %EqWith.type { // CHECK:STDOUT: %C.as.EqWith.impl.Equal.decl: %C.as.EqWith.impl.Equal.type = fn_decl @C.as.EqWith.impl.Equal [concrete = constants.%C.as.EqWith.impl.Equal] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.eae = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.eae = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %other.param_patt: %pattern_type.eae = value_param_pattern [concrete] -// CHECK:STDOUT: %other.patt: %pattern_type.eae = at_binding_pattern other, %other.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc8_34.1 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.eae = value_param_pattern [concrete = constants.%self.param_patt.bcb] +// CHECK:STDOUT: %self.patt: %pattern_type.eae = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.fa1] +// CHECK:STDOUT: %other.param_patt: %pattern_type.eae = value_param_pattern [concrete = constants.%other.param_patt.d05] +// CHECK:STDOUT: %other.patt: %pattern_type.eae = at_binding_pattern other, %other.param_patt [concrete = constants.%other.patt.bc9] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc8_34.1 [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8_34.1: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc8_34.2: Core.Form = init_form %.loc8_34.1 [concrete = constants.%.f34] @@ -472,12 +502,12 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %C.as.EqWith.impl.NotEqual.decl: %C.as.EqWith.impl.NotEqual.type = fn_decl @C.as.EqWith.impl.NotEqual [concrete = constants.%C.as.EqWith.impl.NotEqual] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.eae = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.eae = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %other.param_patt: %pattern_type.eae = value_param_pattern [concrete] -// CHECK:STDOUT: %other.patt: %pattern_type.eae = at_binding_pattern other, %other.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc9_37.1 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.eae = value_param_pattern [concrete = constants.%self.param_patt.bcb] +// CHECK:STDOUT: %self.patt: %pattern_type.eae = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.fa1] +// CHECK:STDOUT: %other.param_patt: %pattern_type.eae = value_param_pattern [concrete = constants.%other.param_patt.d05] +// CHECK:STDOUT: %other.patt: %pattern_type.eae = at_binding_pattern other, %other.param_patt [concrete = constants.%other.patt.bc9] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc9_37.1 [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc9_37.1: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc9_37.2: Core.Form = init_form %.loc9_37.1 [concrete = constants.%.f34] diff --git a/toolchain/check/testdata/operators/overloaded/fail_assign_non_ref.carbon b/toolchain/check/testdata/operators/overloaded/fail_assign_non_ref.carbon index b736e6c9bf02..b06bf57336c2 100644 --- a/toolchain/check/testdata/operators/overloaded/fail_assign_non_ref.carbon +++ b/toolchain/check/testdata/operators/overloaded/fail_assign_non_ref.carbon @@ -54,6 +54,8 @@ fn TestAddAssignNonRef(a: C, b: C) { // CHECK:STDOUT: %Inc.type: type = facet_type <@Inc> [concrete] // CHECK:STDOUT: %Inc.impl_witness: = impl_witness @C.as.Inc.impl.%Inc.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.4a7: type = pattern_type %C [concrete] +// CHECK:STDOUT: %self.param_patt.26a: %pattern_type.4a7 = ref_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.46a: %pattern_type.4a7 = at_binding_pattern self, %self.param_patt.26a [concrete] // CHECK:STDOUT: %C.as.Inc.impl.Op.type: type = fn_type @C.as.Inc.impl.Op [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %C.as.Inc.impl.Op: %C.as.Inc.impl.Op.type = struct_value () [concrete] @@ -63,13 +65,19 @@ fn TestAddAssignNonRef(a: C, b: C) { // CHECK:STDOUT: %AddAssignWith.generic: %AddAssignWith.type.2fb = struct_value () [concrete] // CHECK:STDOUT: %AddAssignWith.type.cba: type = facet_type <@AddAssignWith, @AddAssignWith(%C)> [concrete] // CHECK:STDOUT: %AddAssignWith.impl_witness: = impl_witness @C.as.AddAssignWith.impl.%AddAssignWith.impl_witness_table [concrete] +// CHECK:STDOUT: %other.param_patt.b8c: %pattern_type.4a7 = value_param_pattern [concrete] +// CHECK:STDOUT: %other.patt.527: %pattern_type.4a7 = at_binding_pattern other, %other.param_patt.b8c [concrete] // CHECK:STDOUT: %C.as.AddAssignWith.impl.Op.type: type = fn_type @C.as.AddAssignWith.impl.Op [concrete] // CHECK:STDOUT: %C.as.AddAssignWith.impl.Op: %C.as.AddAssignWith.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %AddAssignWith.facet: %AddAssignWith.type.cba = facet_value %C, (%AddAssignWith.impl_witness) [concrete] // CHECK:STDOUT: %AddAssignWith.WithSelf.Op.type.62f: type = fn_type @AddAssignWith.WithSelf.Op, @AddAssignWith.WithSelf(%C, %AddAssignWith.facet) [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.4a7 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.4a7 = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %TestIncNonRef.type: type = fn_type @TestIncNonRef [concrete] // CHECK:STDOUT: %TestIncNonRef: %TestIncNonRef.type = struct_value () [concrete] // CHECK:STDOUT: %.b87: type = fn_type_with_self_type %Inc.WithSelf.Op.type.445, %Inc.facet [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.4a7 = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.4a7 = at_binding_pattern b, %b.param_patt [concrete] // CHECK:STDOUT: %TestAddAssignNonRef.type: type = fn_type @TestAddAssignNonRef [concrete] // CHECK:STDOUT: %TestAddAssignNonRef: %TestAddAssignNonRef.type = struct_value () [concrete] // CHECK:STDOUT: %.fbc: type = fn_type_with_self_type %AddAssignWith.WithSelf.Op.type.62f, %AddAssignWith.facet [concrete] @@ -108,18 +116,18 @@ fn TestAddAssignNonRef(a: C, b: C) { // CHECK:STDOUT: %AddAssignWith.type: type = facet_type <@AddAssignWith, @AddAssignWith(constants.%C)> [concrete = constants.%AddAssignWith.type.cba] // CHECK:STDOUT: } // CHECK:STDOUT: %TestIncNonRef.decl: %TestIncNonRef.type = fn_decl @TestIncNonRef [concrete = constants.%TestIncNonRef] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.4a7 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.4a7 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.4a7 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.4a7 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a: %C = value_binding a, %a.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestAddAssignNonRef.decl: %TestAddAssignNonRef.type = fn_decl @TestAddAssignNonRef [concrete = constants.%TestAddAssignNonRef] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.4a7 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.4a7 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.4a7 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.4a7 = at_binding_pattern b, %b.param_patt [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.4a7 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.4a7 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %b.param_patt: %pattern_type.4a7 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.4a7 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref.loc37_27: type = name_ref C, file.%C.decl [concrete = constants.%C] @@ -132,8 +140,8 @@ fn TestAddAssignNonRef(a: C, b: C) { // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.Inc.impl: %C.ref as %Inc.ref { // CHECK:STDOUT: %C.as.Inc.impl.Op.decl: %C.as.Inc.impl.Op.type = fn_decl @C.as.Inc.impl.Op [concrete = constants.%C.as.Inc.impl.Op] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.4a7 = ref_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.4a7 = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.4a7 = ref_param_pattern [concrete = constants.%self.param_patt.26a] +// CHECK:STDOUT: %self.patt: %pattern_type.4a7 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.46a] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %C = ref_param call_param0 // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] @@ -151,10 +159,10 @@ fn TestAddAssignNonRef(a: C, b: C) { // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.AddAssignWith.impl: %C.ref.loc22_6 as %AddAssignWith.type { // CHECK:STDOUT: %C.as.AddAssignWith.impl.Op.decl: %C.as.AddAssignWith.impl.Op.type = fn_decl @C.as.AddAssignWith.impl.Op [concrete = constants.%C.as.AddAssignWith.impl.Op] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.4a7 = ref_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.4a7 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %other.param_patt: %pattern_type.4a7 = value_param_pattern [concrete] -// CHECK:STDOUT: %other.patt: %pattern_type.4a7 = at_binding_pattern other, %other.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.4a7 = ref_param_pattern [concrete = constants.%self.param_patt.26a] +// CHECK:STDOUT: %self.patt: %pattern_type.4a7 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.46a] +// CHECK:STDOUT: %other.param_patt: %pattern_type.4a7 = value_param_pattern [concrete = constants.%other.param_patt.b8c] +// CHECK:STDOUT: %other.patt: %pattern_type.4a7 = at_binding_pattern other, %other.param_patt [concrete = constants.%other.patt.527] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %C = ref_param call_param0 // CHECK:STDOUT: %C.ref.loc23_19: type = name_ref C, file.%C.decl [concrete = constants.%C] diff --git a/toolchain/check/testdata/operators/overloaded/fail_error_recovery.carbon b/toolchain/check/testdata/operators/overloaded/fail_error_recovery.carbon index 3113d6ebe57b..76f5445ac817 100644 --- a/toolchain/check/testdata/operators/overloaded/fail_error_recovery.carbon +++ b/toolchain/check/testdata/operators/overloaded/fail_error_recovery.carbon @@ -44,6 +44,8 @@ fn G(n: i32) { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -69,8 +71,8 @@ fn G(n: i32) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {} // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%n.param_patt] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete = constants.%n.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %n.param: %i32 = value_param call_param0 // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] diff --git a/toolchain/check/testdata/operators/overloaded/fail_no_impl.carbon b/toolchain/check/testdata/operators/overloaded/fail_no_impl.carbon index 5e3cd2f6d50a..a5d27f76d0df 100644 --- a/toolchain/check/testdata/operators/overloaded/fail_no_impl.carbon +++ b/toolchain/check/testdata/operators/overloaded/fail_no_impl.carbon @@ -53,17 +53,25 @@ fn TestRef(b: C) { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.4a7: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.4a7 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt.023: %pattern_type.4a7 = at_binding_pattern a, %a.param_patt [concrete] // CHECK:STDOUT: %.79c: Core.Form = init_form %C [concrete] +// CHECK:STDOUT: %return.param_patt.415: %pattern_type.4a7 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.340: %pattern_type.4a7 = return_slot_pattern %return.param_patt.415, %C [concrete] // CHECK:STDOUT: %TestUnary.type: type = fn_type @TestUnary [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %TestUnary: %TestUnary.type = struct_value () [concrete] // CHECK:STDOUT: %Negate.type: type = facet_type <@Negate> [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.4a7 = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.4a7 = at_binding_pattern b, %b.param_patt [concrete] // CHECK:STDOUT: %TestBinary.type: type = fn_type @TestBinary [concrete] // CHECK:STDOUT: %TestBinary: %TestBinary.type = struct_value () [concrete] // CHECK:STDOUT: %AddWith.type.2ef: type = generic_interface_type @AddWith [concrete] // CHECK:STDOUT: %AddWith.generic: %AddWith.type.2ef = struct_value () [concrete] // CHECK:STDOUT: %TestRef.type: type = fn_type @TestRef [concrete] // CHECK:STDOUT: %TestRef: %TestRef.type = struct_value () [concrete] +// CHECK:STDOUT: %a.patt.28f: %pattern_type.4a7 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.4a7 = var_pattern %a.patt.28f [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %AddAssignWith.type.2fb: type = generic_interface_type @AddAssignWith [concrete] @@ -102,10 +110,10 @@ fn TestRef(b: C) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %TestUnary.decl: %TestUnary.type = fn_decl @TestUnary [concrete = constants.%TestUnary] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.4a7 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.4a7 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.4a7 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.4a7 = return_slot_pattern %return.param_patt, %C.ref.loc19_23 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.4a7 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.4a7 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt.023] +// CHECK:STDOUT: %return.param_patt: %pattern_type.4a7 = out_param_pattern [concrete = constants.%return.param_patt.415] +// CHECK:STDOUT: %return.patt: %pattern_type.4a7 = return_slot_pattern %return.param_patt, %C.ref.loc19_23 [concrete = constants.%return.patt.340] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc19_23: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %.loc19: Core.Form = init_form %C.ref.loc19_23 [concrete = constants.%.79c] @@ -116,12 +124,12 @@ fn TestRef(b: C) { // CHECK:STDOUT: %return: ref %C = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestBinary.decl: %TestBinary.type = fn_decl @TestBinary [concrete = constants.%TestBinary] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.4a7 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.4a7 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.4a7 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.4a7 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.4a7 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.4a7 = return_slot_pattern %return.param_patt, %C.ref.loc27_30 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.4a7 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.4a7 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt.023] +// CHECK:STDOUT: %b.param_patt: %pattern_type.4a7 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.4a7 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.4a7 = out_param_pattern [concrete = constants.%return.param_patt.415] +// CHECK:STDOUT: %return.patt: %pattern_type.4a7 = return_slot_pattern %return.param_patt, %C.ref.loc27_30 [concrete = constants.%return.patt.340] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc27_30: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %.loc27: Core.Form = init_form %C.ref.loc27_30 [concrete = constants.%.79c] @@ -135,8 +143,8 @@ fn TestRef(b: C) { // CHECK:STDOUT: %return: ref %C = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestRef.decl: %TestRef.type = fn_decl @TestRef [concrete = constants.%TestRef] { -// CHECK:STDOUT: %b.param_patt: %pattern_type.4a7 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.4a7 = at_binding_pattern b, %b.param_patt [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.4a7 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.4a7 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %b.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref.loc35: type = name_ref C, file.%C.decl [concrete = constants.%C] @@ -168,8 +176,8 @@ fn TestRef(b: C) { // CHECK:STDOUT: fn @TestRef(%b.param: %C) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.4a7 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.4a7 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.4a7 = ref_binding_pattern a [concrete = constants.%a.patt.28f] +// CHECK:STDOUT: %a.var_patt: %pattern_type.4a7 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %C = var %a.var_patt // CHECK:STDOUT: %.loc36_15.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] diff --git a/toolchain/check/testdata/operators/overloaded/implicit_as.carbon b/toolchain/check/testdata/operators/overloaded/implicit_as.carbon index 4ad37322eb93..9508cd50857f 100644 --- a/toolchain/check/testdata/operators/overloaded/implicit_as.carbon +++ b/toolchain/check/testdata/operators/overloaded/implicit_as.carbon @@ -57,8 +57,12 @@ fn Test() { // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %ImplicitAs.type.7cc: type = facet_type <@ImplicitAs, @ImplicitAs(%X)> [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.677: = impl_witness @i32.as.ImplicitAs.impl.%ImplicitAs.impl_witness_table [concrete] +// CHECK:STDOUT: %self.param_patt.049: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.f6c: %pattern_type.6b6 = at_binding_pattern self, %self.param_patt.049 [concrete] // CHECK:STDOUT: %.325: Core.Form = init_form %X [concrete] // CHECK:STDOUT: %pattern_type.6cb: type = pattern_type %X [concrete] +// CHECK:STDOUT: %return.param_patt.2e8: %pattern_type.6cb = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.d8e: %pattern_type.6cb = return_slot_pattern %return.param_patt.2e8, %X [concrete] // CHECK:STDOUT: %i32.as.ImplicitAs.impl.Convert.type: type = fn_type @i32.as.ImplicitAs.impl.Convert [concrete] // CHECK:STDOUT: %i32.as.ImplicitAs.impl.Convert: %i32.as.ImplicitAs.impl.Convert.type = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.facet.474: %ImplicitAs.type.7cc = facet_value %i32, (%ImplicitAs.impl_witness.677) [concrete] @@ -67,6 +71,7 @@ fn Test() { // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.ac8: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N) [symbolic] // CHECK:STDOUT: %Int.as.Copy.impl.Op.5e0: %Int.as.Copy.impl.Op.type.ac8 = struct_value () [symbolic] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.patt.d47: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Copy.impl_witness.0e0: = impl_witness imports.%Copy.impl_witness_table.367, @Int.as.Copy.impl(%int_32) [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.3f6: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%int_32) [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.4f6: %Int.as.Copy.impl.Op.type.3f6 = struct_value () [concrete] @@ -74,21 +79,31 @@ fn Test() { // CHECK:STDOUT: %Copy.WithSelf.Op.type.d09: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet) [concrete] // CHECK:STDOUT: %.7a6: type = fn_type_with_self_type %Copy.WithSelf.Op.type.d09, %Copy.facet [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.4f6, @Int.as.Copy.impl.Op(%int_32) [concrete] // CHECK:STDOUT: %ImplicitAs.type.914: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.90f: = impl_witness @X.as.ImplicitAs.impl.%ImplicitAs.impl_witness_table [concrete] +// CHECK:STDOUT: %self.param_patt.172: %pattern_type.6cb = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.7ac: %pattern_type.6cb = at_binding_pattern self, %self.param_patt.172 [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %X.as.ImplicitAs.impl.Convert.type: type = fn_type @X.as.ImplicitAs.impl.Convert [concrete] // CHECK:STDOUT: %X.as.ImplicitAs.impl.Convert: %X.as.ImplicitAs.impl.Convert.type = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.facet.1cb: %ImplicitAs.type.914 = facet_value %X, (%ImplicitAs.impl_witness.90f) [concrete] // CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.type.6bb: type = fn_type @ImplicitAs.WithSelf.Convert, @ImplicitAs.WithSelf(%i32, %ImplicitAs.facet.1cb) [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %n.patt.f0b: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete] // CHECK:STDOUT: %Sink_i32.type: type = fn_type @Sink_i32 [concrete] // CHECK:STDOUT: %Sink_i32: %Sink_i32.type = struct_value () [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.6cb = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.6cb = at_binding_pattern x, %x.param_patt [concrete] // CHECK:STDOUT: %Sink_X.type: type = fn_type @Sink_X [concrete] // CHECK:STDOUT: %Sink_X: %Sink_X.type = struct_value () [concrete] // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %.184347.2: Core.Form = init_form %T.67d [symbolic] // CHECK:STDOUT: %pattern_type.51d1c4.2: type = pattern_type %T.67d [symbolic] +// CHECK:STDOUT: %return.param_patt.41d2d9.2: %pattern_type.51d1c4.2 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.b39: %pattern_type.51d1c4.2 = return_slot_pattern %return.param_patt.41d2d9.2, %T.67d [symbolic] // CHECK:STDOUT: %Source.type: type = fn_type @Source [concrete] // CHECK:STDOUT: %Source: %Source.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.944: = require_complete_type %T.67d [symbolic] @@ -147,25 +162,25 @@ fn Test() { // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(constants.%i32)> [concrete = constants.%ImplicitAs.type.914] // CHECK:STDOUT: } // CHECK:STDOUT: %Sink_i32.decl: %Sink_i32.type = fn_decl @Sink_i32 [concrete = constants.%Sink_i32] { -// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%n.param_patt] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete = constants.%n.patt.f0b] // CHECK:STDOUT: } { // CHECK:STDOUT: %n.param: %i32 = value_param call_param0 // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %n: %i32 = value_binding n, %n.param // CHECK:STDOUT: } // CHECK:STDOUT: %Sink_X.decl: %Sink_X.type = fn_decl @Sink_X [concrete = constants.%Sink_X] { -// CHECK:STDOUT: %x.param_patt: %pattern_type.6cb = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.6cb = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.6cb = value_param_pattern [concrete = constants.%x.param_patt] +// CHECK:STDOUT: %x.patt: %pattern_type.6cb = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %X = value_param call_param0 // CHECK:STDOUT: %X.ref: type = name_ref X, file.%X.decl [concrete = constants.%X] // CHECK:STDOUT: %x: %X = value_binding x, %x.param // CHECK:STDOUT: } // CHECK:STDOUT: %Source.decl: %Source.type = fn_decl @Source [concrete = constants.%Source] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %return.param_patt: @Source.%pattern_type (%pattern_type.51d1c4.2) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @Source.%pattern_type (%pattern_type.51d1c4.2) = return_slot_pattern %return.param_patt, %T.ref.loc31_24 [concrete] +// CHECK:STDOUT: %T.patt.loc31_12.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc31_12.2 (constants.%T.patt.d47)] +// CHECK:STDOUT: %return.param_patt.loc31_24.1: @Source.%pattern_type (%pattern_type.51d1c4.2) = out_param_pattern [symbolic = %return.param_patt.loc31_24.2 (constants.%return.param_patt.41d2d9.2)] +// CHECK:STDOUT: %return.patt.loc31_21.1: @Source.%pattern_type (%pattern_type.51d1c4.2) = return_slot_pattern %return.param_patt.loc31_24.1, %T.ref.loc31_24 [symbolic = %return.patt.loc31_21.2 (constants.%return.patt.b39)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc31_24: type = name_ref T, %T.loc31_12.2 [symbolic = %T.loc31_12.1 (constants.%T.67d)] // CHECK:STDOUT: %.loc31_24.3: Core.Form = init_form %T.ref.loc31_24 [symbolic = %.loc31_24.2 (constants.%.184347.2)] @@ -182,10 +197,10 @@ fn Test() { // CHECK:STDOUT: // CHECK:STDOUT: impl @i32.as.ImplicitAs.impl: %i32 as %ImplicitAs.type { // CHECK:STDOUT: %i32.as.ImplicitAs.impl.Convert.decl: %i32.as.ImplicitAs.impl.Convert.type = fn_decl @i32.as.ImplicitAs.impl.Convert [concrete = constants.%i32.as.ImplicitAs.impl.Convert] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.6b6 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6cb = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6cb = return_slot_pattern %return.param_patt, %X.ref [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%self.param_patt.049] +// CHECK:STDOUT: %self.patt: %pattern_type.6b6 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.f6c] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6cb = out_param_pattern [concrete = constants.%return.param_patt.2e8] +// CHECK:STDOUT: %return.patt: %pattern_type.6cb = return_slot_pattern %return.param_patt, %X.ref [concrete = constants.%return.patt.d8e] // CHECK:STDOUT: } { // CHECK:STDOUT: %X.ref: type = name_ref X, file.%X.decl [concrete = constants.%X] // CHECK:STDOUT: %.loc20_28: Core.Form = init_form %X.ref [concrete = constants.%.325] @@ -207,10 +222,10 @@ fn Test() { // CHECK:STDOUT: // CHECK:STDOUT: impl @X.as.ImplicitAs.impl: %X.ref as %ImplicitAs.type { // CHECK:STDOUT: %X.as.ImplicitAs.impl.Convert.decl: %X.as.ImplicitAs.impl.Convert.type = fn_decl @X.as.ImplicitAs.impl.Convert [concrete = constants.%X.as.ImplicitAs.impl.Convert] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.6cb = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.6cb = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.6cb = value_param_pattern [concrete = constants.%self.param_patt.172] +// CHECK:STDOUT: %self.patt: %pattern_type.6cb = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.7ac] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc24_26: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -275,9 +290,12 @@ fn Test() { // CHECK:STDOUT: fn @Sink_X(%x.param: %X); // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Source(%T.loc31_12.2: type) { +// CHECK:STDOUT: %T.patt.loc31_12.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc31_12.2 (constants.%T.patt.d47)] // CHECK:STDOUT: %T.loc31_12.1: type = symbolic_binding T, 0 [symbolic = %T.loc31_12.1 (constants.%T.67d)] // CHECK:STDOUT: %.loc31_24.2: Core.Form = init_form %T.loc31_12.1 [symbolic = %.loc31_24.2 (constants.%.184347.2)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc31_12.1 [symbolic = %pattern_type (constants.%pattern_type.51d1c4.2)] +// CHECK:STDOUT: %return.param_patt.loc31_24.2: @Source.%pattern_type (%pattern_type.51d1c4.2) = out_param_pattern [symbolic = %return.param_patt.loc31_24.2 (constants.%return.param_patt.41d2d9.2)] +// CHECK:STDOUT: %return.patt.loc31_21.2: @Source.%pattern_type (%pattern_type.51d1c4.2) = return_slot_pattern %return.param_patt.loc31_24.2, %T.loc31_12.1 [symbolic = %return.patt.loc31_21.2 (constants.%return.patt.b39)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc31_12.1 [symbolic = %require_complete (constants.%require_complete.944)] @@ -350,9 +368,12 @@ fn Test() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Source(constants.%T.67d) { +// CHECK:STDOUT: %T.patt.loc31_12.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc31_12.1 => constants.%T.67d // CHECK:STDOUT: %.loc31_24.2 => constants.%.184347.2 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d1c4.2 +// CHECK:STDOUT: %return.param_patt.loc31_24.2 => constants.%return.param_patt.41d2d9.2 +// CHECK:STDOUT: %return.patt.loc31_21.2 => constants.%return.patt.b39 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.944 @@ -360,9 +381,12 @@ fn Test() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Source(constants.%X) { +// CHECK:STDOUT: %T.patt.loc31_12.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc31_12.1 => constants.%X // CHECK:STDOUT: %.loc31_24.2 => constants.%.325 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.6cb +// CHECK:STDOUT: %return.param_patt.loc31_24.2 => constants.%return.param_patt.2e8 +// CHECK:STDOUT: %return.patt.loc31_21.2 => constants.%return.patt.d8e // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.cdf @@ -370,9 +394,12 @@ fn Test() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Source(constants.%i32) { +// CHECK:STDOUT: %T.patt.loc31_12.2 => constants.%T.patt.d47 // CHECK:STDOUT: %T.loc31_12.1 => constants.%i32 // CHECK:STDOUT: %.loc31_24.2 => constants.%.795 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.6b6 +// CHECK:STDOUT: %return.param_patt.loc31_24.2 => constants.%return.param_patt.a9a +// CHECK:STDOUT: %return.patt.loc31_21.2 => constants.%return.patt.e1b // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.f8a diff --git a/toolchain/check/testdata/operators/overloaded/index.carbon b/toolchain/check/testdata/operators/overloaded/index.carbon index 9126e289ef6d..8975e0199fc0 100644 --- a/toolchain/check/testdata/operators/overloaded/index.carbon +++ b/toolchain/check/testdata/operators/overloaded/index.carbon @@ -185,7 +185,9 @@ fn F() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %SubscriptType.patt: %pattern_type.98f = symbolic_binding_pattern SubscriptType, 0 [symbolic] // CHECK:STDOUT: %SubscriptType: type = symbolic_binding SubscriptType, 0 [symbolic] +// CHECK:STDOUT: %ElementType.patt: %pattern_type.98f = symbolic_binding_pattern ElementType, 1 [symbolic] // CHECK:STDOUT: %ElementType: type = symbolic_binding ElementType, 1 [symbolic] // CHECK:STDOUT: %IndexWith.type.df6: type = generic_interface_type @IndexWith [concrete] // CHECK:STDOUT: %IndexWith.generic: %IndexWith.type.df6 = struct_value () [concrete] @@ -193,9 +195,15 @@ fn F() { // CHECK:STDOUT: %Self: %IndexWith.type.a54 = symbolic_binding Self, 2 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] // CHECK:STDOUT: %pattern_type.962: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt: %pattern_type.962 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt: %pattern_type.962 = at_binding_pattern self, %self.param_patt [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %SubscriptType [symbolic] +// CHECK:STDOUT: %subscript.param_patt: %pattern_type.51d = value_param_pattern [symbolic] +// CHECK:STDOUT: %subscript.patt: %pattern_type.51d = at_binding_pattern subscript, %subscript.param_patt [symbolic] // CHECK:STDOUT: %.822: Core.Form = init_form %ElementType [symbolic] // CHECK:STDOUT: %pattern_type.946: type = pattern_type %ElementType [symbolic] +// CHECK:STDOUT: %return.param_patt: %pattern_type.946 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt: %pattern_type.946 = return_slot_pattern %return.param_patt, %ElementType [symbolic] // CHECK:STDOUT: %IndexWith.WithSelf.At.type: type = fn_type @IndexWith.WithSelf.At, @IndexWith.WithSelf(%SubscriptType, %ElementType, %Self) [symbolic] // CHECK:STDOUT: %IndexWith.WithSelf.At: %IndexWith.WithSelf.At.type = struct_value () [symbolic] // CHECK:STDOUT: %IndexWith.assoc_type: type = assoc_entity_type @IndexWith, @IndexWith(%SubscriptType, %ElementType) [symbolic] @@ -207,8 +215,8 @@ fn F() { // CHECK:STDOUT: .IndexWith = %IndexWith.decl // CHECK:STDOUT: } // CHECK:STDOUT: %IndexWith.decl: %IndexWith.type.df6 = interface_decl @IndexWith [concrete = constants.%IndexWith.generic] { -// CHECK:STDOUT: %SubscriptType.patt: %pattern_type.98f = symbolic_binding_pattern SubscriptType, 0 [concrete] -// CHECK:STDOUT: %ElementType.patt: %pattern_type.98f = symbolic_binding_pattern ElementType, 1 [concrete] +// CHECK:STDOUT: %SubscriptType.patt.loc4_34.1: %pattern_type.98f = symbolic_binding_pattern SubscriptType, 0 [symbolic = %SubscriptType.patt.loc4_34.2 (constants.%SubscriptType.patt)] +// CHECK:STDOUT: %ElementType.patt.loc4_54.1: %pattern_type.98f = symbolic_binding_pattern ElementType, 1 [symbolic = %ElementType.patt.loc4_54.2 (constants.%ElementType.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_37.1: type = splice_block %.loc4_37.2 [concrete = type] { // CHECK:STDOUT: %.Self.loc4_34: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -224,7 +232,9 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @IndexWith(%SubscriptType.loc4_34.2: type, %ElementType.loc4_54.2: type) { +// CHECK:STDOUT: %SubscriptType.patt.loc4_34.2: %pattern_type.98f = symbolic_binding_pattern SubscriptType, 0 [symbolic = %SubscriptType.patt.loc4_34.2 (constants.%SubscriptType.patt)] // CHECK:STDOUT: %SubscriptType.loc4_34.1: type = symbolic_binding SubscriptType, 0 [symbolic = %SubscriptType.loc4_34.1 (constants.%SubscriptType)] +// CHECK:STDOUT: %ElementType.patt.loc4_54.2: %pattern_type.98f = symbolic_binding_pattern ElementType, 1 [symbolic = %ElementType.patt.loc4_54.2 (constants.%ElementType.patt)] // CHECK:STDOUT: %ElementType.loc4_54.1: type = symbolic_binding ElementType, 1 [symbolic = %ElementType.loc4_54.1 (constants.%ElementType)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -237,12 +247,12 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %IndexWith.WithSelf.At.decl: @IndexWith.WithSelf.%IndexWith.WithSelf.At.type (%IndexWith.WithSelf.At.type) = fn_decl @IndexWith.WithSelf.At [symbolic = @IndexWith.WithSelf.%IndexWith.WithSelf.At (constants.%IndexWith.WithSelf.At)] { -// CHECK:STDOUT: %self.param_patt: @IndexWith.WithSelf.At.%pattern_type.loc5_9 (%pattern_type.962) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @IndexWith.WithSelf.At.%pattern_type.loc5_9 (%pattern_type.962) = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %subscript.param_patt: @IndexWith.WithSelf.At.%pattern_type.loc5_24 (%pattern_type.51d) = value_param_pattern [concrete] -// CHECK:STDOUT: %subscript.patt: @IndexWith.WithSelf.At.%pattern_type.loc5_24 (%pattern_type.51d) = at_binding_pattern subscript, %subscript.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @IndexWith.WithSelf.At.%pattern_type.loc5_44 (%pattern_type.946) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @IndexWith.WithSelf.At.%pattern_type.loc5_44 (%pattern_type.946) = return_slot_pattern %return.param_patt, %ElementType.ref [concrete] +// CHECK:STDOUT: %self.param_patt.loc5_9.1: @IndexWith.WithSelf.At.%pattern_type.loc5_9 (%pattern_type.962) = value_param_pattern [symbolic = %self.param_patt.loc5_9.2 (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt.loc5_9.1: @IndexWith.WithSelf.At.%pattern_type.loc5_9 (%pattern_type.962) = at_binding_pattern self, %self.param_patt.loc5_9.1 [symbolic = %self.patt.loc5_9.2 (constants.%self.patt)] +// CHECK:STDOUT: %subscript.param_patt.loc5_24.1: @IndexWith.WithSelf.At.%pattern_type.loc5_24 (%pattern_type.51d) = value_param_pattern [symbolic = %subscript.param_patt.loc5_24.2 (constants.%subscript.param_patt)] +// CHECK:STDOUT: %subscript.patt.loc5_24.1: @IndexWith.WithSelf.At.%pattern_type.loc5_24 (%pattern_type.51d) = at_binding_pattern subscript, %subscript.param_patt.loc5_24.1 [symbolic = %subscript.patt.loc5_24.2 (constants.%subscript.patt)] +// CHECK:STDOUT: %return.param_patt.loc5_44.1: @IndexWith.WithSelf.At.%pattern_type.loc5_44 (%pattern_type.946) = out_param_pattern [symbolic = %return.param_patt.loc5_44.2 (constants.%return.param_patt)] +// CHECK:STDOUT: %return.patt.loc5_41.1: @IndexWith.WithSelf.At.%pattern_type.loc5_44 (%pattern_type.946) = return_slot_pattern %return.param_patt.loc5_44.1, %ElementType.ref [symbolic = %return.patt.loc5_41.2 (constants.%return.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %ElementType.ref: type = name_ref ElementType, @IndexWith.%ElementType.loc4_54.2 [symbolic = %ElementType (constants.%ElementType)] // CHECK:STDOUT: %.loc5_44.2: Core.Form = init_form %ElementType.ref [symbolic = %.loc5_44.1 (constants.%.822)] @@ -282,15 +292,23 @@ fn F() { // CHECK:STDOUT: %Self: @IndexWith.WithSelf.At.%IndexWith.type (%IndexWith.type.a54) = symbolic_binding Self, 2 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc5_9.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_9.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type.loc5_9: type = pattern_type %Self.as_type.loc5_9.1 [symbolic = %pattern_type.loc5_9 (constants.%pattern_type.962)] +// CHECK:STDOUT: %self.param_patt.loc5_9.2: @IndexWith.WithSelf.At.%pattern_type.loc5_9 (%pattern_type.962) = value_param_pattern [symbolic = %self.param_patt.loc5_9.2 (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt.loc5_9.2: @IndexWith.WithSelf.At.%pattern_type.loc5_9 (%pattern_type.962) = at_binding_pattern self, %self.param_patt.loc5_9.2 [symbolic = %self.patt.loc5_9.2 (constants.%self.patt)] // CHECK:STDOUT: %pattern_type.loc5_24: type = pattern_type %SubscriptType [symbolic = %pattern_type.loc5_24 (constants.%pattern_type.51d)] +// CHECK:STDOUT: %subscript.param_patt.loc5_24.2: @IndexWith.WithSelf.At.%pattern_type.loc5_24 (%pattern_type.51d) = value_param_pattern [symbolic = %subscript.param_patt.loc5_24.2 (constants.%subscript.param_patt)] +// CHECK:STDOUT: %subscript.patt.loc5_24.2: @IndexWith.WithSelf.At.%pattern_type.loc5_24 (%pattern_type.51d) = at_binding_pattern subscript, %subscript.param_patt.loc5_24.2 [symbolic = %subscript.patt.loc5_24.2 (constants.%subscript.patt)] // CHECK:STDOUT: %.loc5_44.1: Core.Form = init_form %ElementType [symbolic = %.loc5_44.1 (constants.%.822)] // CHECK:STDOUT: %pattern_type.loc5_44: type = pattern_type %ElementType [symbolic = %pattern_type.loc5_44 (constants.%pattern_type.946)] +// CHECK:STDOUT: %return.param_patt.loc5_44.2: @IndexWith.WithSelf.At.%pattern_type.loc5_44 (%pattern_type.946) = out_param_pattern [symbolic = %return.param_patt.loc5_44.2 (constants.%return.param_patt)] +// CHECK:STDOUT: %return.patt.loc5_41.2: @IndexWith.WithSelf.At.%pattern_type.loc5_44 (%pattern_type.946) = return_slot_pattern %return.param_patt.loc5_44.2, %ElementType [symbolic = %return.patt.loc5_41.2 (constants.%return.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @IndexWith.WithSelf.At.%Self.as_type.loc5_9.1 (%Self.as_type), %subscript.param: @IndexWith.WithSelf.At.%SubscriptType (%SubscriptType)) -> out %return.param: @IndexWith.WithSelf.At.%ElementType (%ElementType); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @IndexWith(constants.%SubscriptType, constants.%ElementType) { +// CHECK:STDOUT: %SubscriptType.patt.loc4_34.2 => constants.%SubscriptType.patt // CHECK:STDOUT: %SubscriptType.loc4_34.1 => constants.%SubscriptType +// CHECK:STDOUT: %ElementType.patt.loc4_54.2 => constants.%ElementType.patt // CHECK:STDOUT: %ElementType.loc4_54.1 => constants.%ElementType // CHECK:STDOUT: } // CHECK:STDOUT: @@ -303,9 +321,15 @@ fn F() { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc5_9.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type.loc5_9 => constants.%pattern_type.962 +// CHECK:STDOUT: %self.param_patt.loc5_9.2 => constants.%self.param_patt +// CHECK:STDOUT: %self.patt.loc5_9.2 => constants.%self.patt // CHECK:STDOUT: %pattern_type.loc5_24 => constants.%pattern_type.51d +// CHECK:STDOUT: %subscript.param_patt.loc5_24.2 => constants.%subscript.param_patt +// CHECK:STDOUT: %subscript.patt.loc5_24.2 => constants.%subscript.patt // CHECK:STDOUT: %.loc5_44.1 => constants.%.822 // CHECK:STDOUT: %pattern_type.loc5_44 => constants.%pattern_type.946 +// CHECK:STDOUT: %return.param_patt.loc5_44.2 => constants.%return.param_patt +// CHECK:STDOUT: %return.patt.loc5_41.2 => constants.%return.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_wrong_arg_count.carbon @@ -320,14 +344,23 @@ fn F() { // CHECK:STDOUT: %ElementType: type = symbolic_binding ElementType, 1 [symbolic] // CHECK:STDOUT: %SubscriptType: type = symbolic_binding SubscriptType, 0 [symbolic] // CHECK:STDOUT: %IndexWith.type.a54: type = facet_type <@IndexWith, @IndexWith(%SubscriptType, %ElementType)> [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %ElementType.patt: %pattern_type.98f = symbolic_binding_pattern ElementType, 1 [symbolic] +// CHECK:STDOUT: %SubscriptType.patt: %pattern_type.98f = symbolic_binding_pattern SubscriptType, 0 [symbolic] // CHECK:STDOUT: %Self.799: %IndexWith.type.a54 = symbolic_binding Self, 2 [symbolic] // CHECK:STDOUT: %IndexWith.WithSelf.At.type.404: type = fn_type @IndexWith.WithSelf.At, @IndexWith.WithSelf(%SubscriptType, %ElementType, %Self.799) [symbolic] // CHECK:STDOUT: %IndexWith.WithSelf.At.310: %IndexWith.WithSelf.At.type.404 = struct_value () [symbolic] // CHECK:STDOUT: %pattern_type.946: type = pattern_type %ElementType [symbolic] +// CHECK:STDOUT: %return.param_patt.6dd: %pattern_type.946 = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.fc9: %pattern_type.946 = return_slot_pattern %return.param_patt.6dd, invalid [symbolic] // CHECK:STDOUT: %Self.as_type.194: type = facet_access_type %Self.799 [symbolic] // CHECK:STDOUT: %pattern_type.f87: type = pattern_type %Self.as_type.194 [symbolic] +// CHECK:STDOUT: %self.param_patt.fd0: %pattern_type.f87 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt.33f: %pattern_type.f87 = at_binding_pattern self, %self.param_patt.fd0 [symbolic] // CHECK:STDOUT: %.822: Core.Form = init_form %ElementType [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %SubscriptType [symbolic] +// CHECK:STDOUT: %subscript.param_patt.fd1: %pattern_type.51d = value_param_pattern [symbolic] +// CHECK:STDOUT: %subscript.patt.bdc: %pattern_type.51d = at_binding_pattern subscript, %subscript.param_patt.fd1 [symbolic] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %IndexWith.type.de8: type = facet_type <@IndexWith, @IndexWith(%empty_tuple.type, %empty_tuple.type)> [concrete] // CHECK:STDOUT: %IndexWith.impl_witness: = impl_witness @C.as.IndexWith.impl.%IndexWith.impl_witness_table [concrete] @@ -337,15 +370,23 @@ fn F() { // CHECK:STDOUT: %IndexWith.assoc_type.e52: type = assoc_entity_type @IndexWith, @IndexWith(%empty_tuple.type, %empty_tuple.type) [concrete] // CHECK:STDOUT: %assoc0.a9a: %IndexWith.assoc_type.e52 = assoc_entity element0, imports.%Core.import_ref.dac [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %self.param_patt.303: %pattern_type.98b = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.49a: %pattern_type.98b = at_binding_pattern self, %self.param_patt.303 [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %subscript.param_patt.0ba: %pattern_type.cb1 = value_param_pattern [concrete] +// CHECK:STDOUT: %subscript.patt.db1: %pattern_type.cb1 = at_binding_pattern subscript, %subscript.param_patt.0ba [concrete] // CHECK:STDOUT: %.262: Core.Form = init_form %empty_tuple.type [concrete] +// CHECK:STDOUT: %return.param_patt.900: %pattern_type.cb1 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.427: %pattern_type.cb1 = return_slot_pattern %return.param_patt.900, %empty_tuple.type [concrete] // CHECK:STDOUT: %C.as.IndexWith.impl.At.type: type = fn_type @C.as.IndexWith.impl.At [concrete] // CHECK:STDOUT: %C.as.IndexWith.impl.At: %C.as.IndexWith.impl.At.type = struct_value () [concrete] // CHECK:STDOUT: %IndexWith.facet: %IndexWith.type.de8 = facet_value %C, (%IndexWith.impl_witness) [concrete] // CHECK:STDOUT: %IndexWith.WithSelf.At.type.9d6: type = fn_type @IndexWith.WithSelf.At, @IndexWith.WithSelf(%empty_tuple.type, %empty_tuple.type, %IndexWith.facet) [concrete] // CHECK:STDOUT: %IndexWith.WithSelf.At.a95: %IndexWith.WithSelf.At.type.9d6 = struct_value () [concrete] +// CHECK:STDOUT: %return.patt.9ca: %pattern_type.cb1 = return_slot_pattern %return.param_patt.900, invalid [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = value_binding_pattern c [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %.115: ref %C = temporary invalid, %C.val [concrete] @@ -398,7 +439,9 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @IndexWith(imports.%Core.import_ref.b3bc94.3: type, imports.%Core.import_ref.8e8b42.3: type) [from "core_wrong_arg_count.carbon"] { +// CHECK:STDOUT: %SubscriptType.patt: %pattern_type.98f = symbolic_binding_pattern SubscriptType, 0 [symbolic = %SubscriptType.patt (constants.%SubscriptType.patt)] // CHECK:STDOUT: %SubscriptType: type = symbolic_binding SubscriptType, 0 [symbolic = %SubscriptType (constants.%SubscriptType)] +// CHECK:STDOUT: %ElementType.patt: %pattern_type.98f = symbolic_binding_pattern ElementType, 1 [symbolic = %ElementType.patt (constants.%ElementType.patt)] // CHECK:STDOUT: %ElementType: type = symbolic_binding ElementType, 1 [symbolic = %ElementType (constants.%ElementType)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -417,12 +460,12 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.IndexWith.impl: %C.ref as %IndexWith.type { // CHECK:STDOUT: %C.as.IndexWith.impl.At.decl: %C.as.IndexWith.impl.At.type = fn_decl @C.as.IndexWith.impl.At [concrete = constants.%C.as.IndexWith.impl.At] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.98b = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.98b = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %subscript.param_patt: %pattern_type.cb1 = value_param_pattern [concrete] -// CHECK:STDOUT: %subscript.patt: %pattern_type.cb1 = at_binding_pattern subscript, %subscript.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern %return.param_patt, %.loc9_48.2 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.98b = value_param_pattern [concrete = constants.%self.param_patt.303] +// CHECK:STDOUT: %self.patt: %pattern_type.98b = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.49a] +// CHECK:STDOUT: %subscript.param_patt: %pattern_type.cb1 = value_param_pattern [concrete = constants.%subscript.param_patt.0ba] +// CHECK:STDOUT: %subscript.patt: %pattern_type.cb1 = at_binding_pattern subscript, %subscript.param_patt [concrete = constants.%subscript.patt.db1] +// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern [concrete = constants.%return.param_patt.900] +// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern %return.param_patt, %.loc9_48.2 [concrete = constants.%return.patt.427] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc9_48.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc9_48.2: type = converted %.loc9_48.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -463,9 +506,15 @@ fn F() { // CHECK:STDOUT: %Self: @IndexWith.WithSelf.At.%IndexWith.type (%IndexWith.type.a54) = symbolic_binding Self, 2 [symbolic = %Self (constants.%Self.799)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.194)] // CHECK:STDOUT: %pattern_type.1: type = pattern_type %Self.as_type [symbolic = %pattern_type.1 (constants.%pattern_type.f87)] +// CHECK:STDOUT: %self.param_patt: @IndexWith.WithSelf.At.%pattern_type.1 (%pattern_type.f87) = value_param_pattern [symbolic = %self.param_patt (constants.%self.param_patt.fd0)] +// CHECK:STDOUT: %self.patt: @IndexWith.WithSelf.At.%pattern_type.1 (%pattern_type.f87) = at_binding_pattern self, %self.param_patt [symbolic = %self.patt (constants.%self.patt.33f)] // CHECK:STDOUT: %pattern_type.2: type = pattern_type %SubscriptType [symbolic = %pattern_type.2 (constants.%pattern_type.51d)] +// CHECK:STDOUT: %subscript.param_patt: @IndexWith.WithSelf.At.%pattern_type.2 (%pattern_type.51d) = value_param_pattern [symbolic = %subscript.param_patt (constants.%subscript.param_patt.fd1)] +// CHECK:STDOUT: %subscript.patt: @IndexWith.WithSelf.At.%pattern_type.2 (%pattern_type.51d) = at_binding_pattern subscript, %subscript.param_patt [symbolic = %subscript.patt (constants.%subscript.patt.bdc)] // CHECK:STDOUT: %.1: Core.Form = init_form %ElementType [symbolic = %.1 (constants.%.822)] // CHECK:STDOUT: %pattern_type.3: type = pattern_type %ElementType [symbolic = %pattern_type.3 (constants.%pattern_type.946)] +// CHECK:STDOUT: %return.param_patt: @IndexWith.WithSelf.At.%pattern_type.3 (%pattern_type.946) = out_param_pattern [symbolic = %return.param_patt (constants.%return.param_patt.6dd)] +// CHECK:STDOUT: %return.patt: @IndexWith.WithSelf.At.%pattern_type.3 (%pattern_type.946) = return_slot_pattern %return.param_patt, invalid [symbolic = %return.patt (constants.%return.patt.fc9)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -481,15 +530,15 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.98b = value_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = value_binding_pattern c [concrete = constants.%c.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc15_15.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] -// CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %.loc15_15.2: ref %C = temporary_storage // CHECK:STDOUT: %.loc15_15.3: init %C to %.loc15_15.2 = class_init () [concrete = constants.%C.val] // CHECK:STDOUT: %.loc15_15.4: init %C = converted %.loc15_15.1, %.loc15_15.3 [concrete = constants.%C.val] // CHECK:STDOUT: %.loc15_15.5: ref %C = temporary %.loc15_15.2, %.loc15_15.4 [concrete = constants.%.115] // CHECK:STDOUT: %.loc15_15.6: %C = acquire_value %.loc15_15.5 [concrete = constants.%C.val] +// CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %c: %C = value_binding c, %.loc15_15.6 // CHECK:STDOUT: %c.ref: %C = name_ref c, %c // CHECK:STDOUT: %.loc23: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] @@ -505,7 +554,9 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @IndexWith(constants.%SubscriptType, constants.%ElementType) { +// CHECK:STDOUT: %SubscriptType.patt => constants.%SubscriptType.patt // CHECK:STDOUT: %SubscriptType => constants.%SubscriptType +// CHECK:STDOUT: %ElementType.patt => constants.%ElementType.patt // CHECK:STDOUT: %ElementType => constants.%ElementType // CHECK:STDOUT: } // CHECK:STDOUT: @@ -518,13 +569,21 @@ fn F() { // CHECK:STDOUT: %Self => constants.%Self.799 // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.194 // CHECK:STDOUT: %pattern_type.1 => constants.%pattern_type.f87 +// CHECK:STDOUT: %self.param_patt => constants.%self.param_patt.fd0 +// CHECK:STDOUT: %self.patt => constants.%self.patt.33f // CHECK:STDOUT: %pattern_type.2 => constants.%pattern_type.51d +// CHECK:STDOUT: %subscript.param_patt => constants.%subscript.param_patt.fd1 +// CHECK:STDOUT: %subscript.patt => constants.%subscript.patt.bdc // CHECK:STDOUT: %.1 => constants.%.822 // CHECK:STDOUT: %pattern_type.3 => constants.%pattern_type.946 +// CHECK:STDOUT: %return.param_patt => constants.%return.param_patt.6dd +// CHECK:STDOUT: %return.patt => constants.%return.patt.fc9 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @IndexWith(constants.%empty_tuple.type, constants.%empty_tuple.type) { +// CHECK:STDOUT: %SubscriptType.patt => constants.%SubscriptType.patt // CHECK:STDOUT: %SubscriptType => constants.%empty_tuple.type +// CHECK:STDOUT: %ElementType.patt => constants.%ElementType.patt // CHECK:STDOUT: %ElementType => constants.%empty_tuple.type // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -563,8 +622,14 @@ fn F() { // CHECK:STDOUT: %Self => constants.%IndexWith.facet // CHECK:STDOUT: %Self.as_type => constants.%C // CHECK:STDOUT: %pattern_type.1 => constants.%pattern_type.98b +// CHECK:STDOUT: %self.param_patt => constants.%self.param_patt.303 +// CHECK:STDOUT: %self.patt => constants.%self.patt.49a // CHECK:STDOUT: %pattern_type.2 => constants.%pattern_type.cb1 +// CHECK:STDOUT: %subscript.param_patt => constants.%subscript.param_patt.0ba +// CHECK:STDOUT: %subscript.patt => constants.%subscript.patt.db1 // CHECK:STDOUT: %.1 => constants.%.262 // CHECK:STDOUT: %pattern_type.3 => constants.%pattern_type.cb1 +// CHECK:STDOUT: %return.param_patt => constants.%return.param_patt.900 +// CHECK:STDOUT: %return.patt => constants.%return.patt.9ca // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/operators/overloaded/index_with_prelude.carbon b/toolchain/check/testdata/operators/overloaded/index_with_prelude.carbon index 1c9f6b0b3d93..db3452ba6534 100644 --- a/toolchain/check/testdata/operators/overloaded/index_with_prelude.carbon +++ b/toolchain/check/testdata/operators/overloaded/index_with_prelude.carbon @@ -106,19 +106,28 @@ let x: i32 = c[0]; // CHECK:STDOUT: %IndexWith_where.type: type = facet_type <@IndexWith, @IndexWith(%SubscriptType.f8f) where %impl.elem0.8a5 = %ElementType> [concrete] // CHECK:STDOUT: %IndexWith.impl_witness: = impl_witness @C.as.IndexWith.impl.%IndexWith.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %self.param_patt.303: %pattern_type.98b = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.49a: %pattern_type.98b = at_binding_pattern self, %self.param_patt.303 [concrete] // CHECK:STDOUT: %pattern_type.ea5: type = pattern_type %SubscriptType.f8f [concrete] +// CHECK:STDOUT: %subscript.param_patt.5ee: %pattern_type.ea5 = value_param_pattern [concrete] +// CHECK:STDOUT: %subscript.patt.a6f: %pattern_type.ea5 = at_binding_pattern subscript, %subscript.param_patt.5ee [concrete] // CHECK:STDOUT: %IndexWith.facet: %IndexWith.type.d74 = facet_value %C, (%IndexWith.impl_witness) [concrete] // CHECK:STDOUT: %IndexWith.WithSelf.At.type.bb5: type = fn_type @IndexWith.WithSelf.At, @IndexWith.WithSelf(%SubscriptType.f8f, %IndexWith.facet) [concrete] // CHECK:STDOUT: %.4d0: Core.Form = init_form %ElementType [concrete] // CHECK:STDOUT: %pattern_type.67c: type = pattern_type %ElementType [concrete] +// CHECK:STDOUT: %return.param_patt.41c: %pattern_type.67c = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.66a: %pattern_type.67c = return_slot_pattern %return.param_patt.41c, %ElementType [concrete] // CHECK:STDOUT: %C.as.IndexWith.impl.At.type: type = fn_type @C.as.IndexWith.impl.At [concrete] // CHECK:STDOUT: %C.as.IndexWith.impl.At: %C.as.IndexWith.impl.At.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %ElementType.val: %ElementType = struct_value () [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.ea5 = value_binding_pattern s [concrete] // CHECK:STDOUT: %SubscriptType.val: %SubscriptType.f8f = struct_value () [concrete] // CHECK:STDOUT: %.b1d: ref %SubscriptType.f8f = temporary invalid, %SubscriptType.val [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = value_binding_pattern c [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %.115: ref %C = temporary invalid, %C.val [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.67c = value_binding_pattern x [concrete] // CHECK:STDOUT: %.227: type = fn_type_with_self_type %IndexWith.WithSelf.At.type.bb5, %IndexWith.facet [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -169,42 +178,42 @@ let x: i32 = c[0]; // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %s.patt: %pattern_type.ea5 = value_binding_pattern s [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.ea5 = value_binding_pattern s [concrete = constants.%s.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %SubscriptType.ref: type = name_ref SubscriptType, %SubscriptType.decl [concrete = constants.%SubscriptType.f8f] // CHECK:STDOUT: %.loc14_25.1: ref %SubscriptType.f8f = temporary_storage // CHECK:STDOUT: %.loc14_25.2: init %SubscriptType.f8f to %.loc14_25.1 = class_init () [concrete = constants.%SubscriptType.val] // CHECK:STDOUT: %.loc14_25.3: init %SubscriptType.f8f = converted @__global_init.%.loc14, %.loc14_25.2 [concrete = constants.%SubscriptType.val] // CHECK:STDOUT: %.loc14_25.4: ref %SubscriptType.f8f = temporary %.loc14_25.1, %.loc14_25.3 [concrete = constants.%.b1d] // CHECK:STDOUT: %.loc14_25.5: %SubscriptType.f8f = acquire_value %.loc14_25.4 [concrete = constants.%SubscriptType.val] +// CHECK:STDOUT: %SubscriptType.ref: type = name_ref SubscriptType, %SubscriptType.decl [concrete = constants.%SubscriptType.f8f] // CHECK:STDOUT: %s: %SubscriptType.f8f = value_binding s, %.loc14_25.5 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.98b = value_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = value_binding_pattern c [concrete = constants.%c.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %.loc15_13.1: ref %C = temporary_storage // CHECK:STDOUT: %.loc15_13.2: init %C to %.loc15_13.1 = class_init () [concrete = constants.%C.val] // CHECK:STDOUT: %.loc15_13.3: init %C = converted @__global_init.%.loc15, %.loc15_13.2 [concrete = constants.%C.val] // CHECK:STDOUT: %.loc15_13.4: ref %C = temporary %.loc15_13.1, %.loc15_13.3 [concrete = constants.%.115] // CHECK:STDOUT: %.loc15_13.5: %C = acquire_value %.loc15_13.4 [concrete = constants.%C.val] +// CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %c: %C = value_binding c, %.loc15_13.5 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.67c = value_binding_pattern x [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.67c = value_binding_pattern x [concrete = constants.%x.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %ElementType.ref: type = name_ref ElementType, %ElementType.decl [concrete = constants.%ElementType] // CHECK:STDOUT: %.loc16_25.1: ref %ElementType = temporary @__global_init.%.loc16, @__global_init.%C.as.IndexWith.impl.At.call // CHECK:STDOUT: %.loc16_25.2: %ElementType = acquire_value %.loc16_25.1 +// CHECK:STDOUT: %ElementType.ref: type = name_ref ElementType, %ElementType.decl [concrete = constants.%ElementType] // CHECK:STDOUT: %x: %ElementType = value_binding x, %.loc16_25.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.IndexWith.impl: %C.ref as %.loc8_41 { // CHECK:STDOUT: %C.as.IndexWith.impl.At.decl: %C.as.IndexWith.impl.At.type = fn_decl @C.as.IndexWith.impl.At [concrete = constants.%C.as.IndexWith.impl.At] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.98b = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.98b = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %subscript.param_patt: %pattern_type.ea5 = value_param_pattern [concrete] -// CHECK:STDOUT: %subscript.patt: %pattern_type.ea5 = at_binding_pattern subscript, %subscript.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.67c = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.67c = return_slot_pattern %return.param_patt, %ElementType.ref [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.98b = value_param_pattern [concrete = constants.%self.param_patt.303] +// CHECK:STDOUT: %self.patt: %pattern_type.98b = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.49a] +// CHECK:STDOUT: %subscript.param_patt: %pattern_type.ea5 = value_param_pattern [concrete = constants.%subscript.param_patt.5ee] +// CHECK:STDOUT: %subscript.patt: %pattern_type.ea5 = at_binding_pattern subscript, %subscript.param_patt [concrete = constants.%subscript.patt.a6f] +// CHECK:STDOUT: %return.param_patt: %pattern_type.67c = out_param_pattern [concrete = constants.%return.param_patt.41c] +// CHECK:STDOUT: %return.patt: %pattern_type.67c = return_slot_pattern %return.param_patt, %ElementType.ref [concrete = constants.%return.patt.66a] // CHECK:STDOUT: } { // CHECK:STDOUT: %IndexWith.facet: %IndexWith.type.d74 = facet_value @C.as.IndexWith.impl.%C.ref, (constants.%IndexWith.impl_witness) [concrete = constants.%IndexWith.facet] // CHECK:STDOUT: %.loc9_58.1: %IndexWith.type.d74 = converted @C.as.IndexWith.impl.%C.ref, %IndexWith.facet [concrete = constants.%IndexWith.facet] @@ -302,16 +311,24 @@ let x: i32 = c[0]; // CHECK:STDOUT: %IndexWith_where.type: type = facet_type <@IndexWith, @IndexWith(Core.IntLiteral) where %impl.elem0.c76 = %C> [concrete] // CHECK:STDOUT: %IndexWith.impl_witness: = impl_witness @tuple.type.as.IndexWith.impl.%IndexWith.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.8b4: type = pattern_type %tuple.type.748 [concrete] +// CHECK:STDOUT: %self.param_patt.284: %pattern_type.8b4 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.dd1: %pattern_type.8b4 = at_binding_pattern self, %self.param_patt.284 [concrete] // CHECK:STDOUT: %pattern_type.dc0: type = pattern_type Core.IntLiteral [concrete] +// CHECK:STDOUT: %subscript.param_patt.d18: %pattern_type.dc0 = value_param_pattern [concrete] +// CHECK:STDOUT: %subscript.patt.f21: %pattern_type.dc0 = at_binding_pattern subscript, %subscript.param_patt.d18 [concrete] // CHECK:STDOUT: %.a44: Core.Form = init_form %C [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %return.param_patt.89a: %pattern_type.98b = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e4a: %pattern_type.98b = return_slot_pattern %return.param_patt.89a, %C [concrete] // CHECK:STDOUT: %tuple.type.as.IndexWith.impl.At.type: type = fn_type @tuple.type.as.IndexWith.impl.At [concrete] // CHECK:STDOUT: %tuple.type.as.IndexWith.impl.At: %tuple.type.as.IndexWith.impl.At.type = struct_value () [concrete] // CHECK:STDOUT: %IndexWith.facet: %IndexWith.type.385 = facet_value %tuple.type.748, (%IndexWith.impl_witness) [concrete] // CHECK:STDOUT: %IndexWith.WithSelf.At.type.6cb: type = fn_type @IndexWith.WithSelf.At, @IndexWith.WithSelf(Core.IntLiteral, %IndexWith.facet) [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %empty_tuple.4db: %C = tuple_value () [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.8b4 = value_binding_pattern s [concrete] // CHECK:STDOUT: %tuple.adf: %tuple.type.748 = tuple_value (%empty_tuple.4db, %empty_tuple.4db) [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type.98b = value_binding_pattern e [concrete] // CHECK:STDOUT: %.fdc: type = fn_type_with_self_type %IndexWith.WithSelf.At.type.6cb, %IndexWith.facet [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -363,38 +380,38 @@ let x: i32 = c[0]; // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %s.patt: %pattern_type.8b4 = value_binding_pattern s [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.8b4 = value_binding_pattern s [concrete = constants.%s.patt] // CHECK:STDOUT: } +// CHECK:STDOUT: %tuple.loc14: %tuple.type.748 = tuple_value (@__global_init.%.loc14_21.2, @__global_init.%.loc14_30.2) [concrete = constants.%tuple.adf] +// CHECK:STDOUT: %.loc14_34: %tuple.type.748 = converted @__global_init.%.loc14_34, %tuple.loc14 [concrete = constants.%tuple.adf] // CHECK:STDOUT: %.loc14_13.1: type = splice_block %.loc14_13.3 [concrete = constants.%tuple.type.748] { // CHECK:STDOUT: %C.ref.loc14_9: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %C.ref.loc14_12: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %.loc14_13.2: %tuple.type.24b = tuple_literal (%C.ref.loc14_9, %C.ref.loc14_12) [concrete = constants.%tuple.d95] // CHECK:STDOUT: %.loc14_13.3: type = converted %.loc14_13.2, constants.%tuple.type.748 [concrete = constants.%tuple.type.748] // CHECK:STDOUT: } -// CHECK:STDOUT: %tuple.loc14: %tuple.type.748 = tuple_value (@__global_init.%.loc14_21.2, @__global_init.%.loc14_30.2) [concrete = constants.%tuple.adf] -// CHECK:STDOUT: %.loc14_34: %tuple.type.748 = converted @__global_init.%.loc14_34, %tuple.loc14 [concrete = constants.%tuple.adf] // CHECK:STDOUT: %s: %tuple.type.748 = value_binding s, %.loc14_34 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %e.patt: %pattern_type.98b = value_binding_pattern e [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type.98b = value_binding_pattern e [concrete = constants.%e.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %C.ref.loc15: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %.loc15_15.1: init %empty_tuple.type = as_compatible @__global_init.%tuple.type.as.IndexWith.impl.At.call // CHECK:STDOUT: %.loc15_15.2: ref %empty_tuple.type = temporary_storage // CHECK:STDOUT: %.loc15_15.3: ref %empty_tuple.type = temporary %.loc15_15.2, %.loc15_15.1 // CHECK:STDOUT: %tuple.loc15: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple.af4] // CHECK:STDOUT: %.loc15_15.4: %C = as_compatible %tuple.loc15 [concrete = constants.%empty_tuple.4db] // CHECK:STDOUT: %.loc15_15.5: %C = converted @__global_init.%tuple.type.as.IndexWith.impl.At.call, %.loc15_15.4 [concrete = constants.%empty_tuple.4db] +// CHECK:STDOUT: %C.ref.loc15: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %e: %C = value_binding e, %.loc15_15.5 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @tuple.type.as.IndexWith.impl: %.loc8_11.2 as %.loc8_48 { // CHECK:STDOUT: %tuple.type.as.IndexWith.impl.At.decl: %tuple.type.as.IndexWith.impl.At.type = fn_decl @tuple.type.as.IndexWith.impl.At [concrete = constants.%tuple.type.as.IndexWith.impl.At] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.8b4 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.8b4 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %subscript.param_patt: %pattern_type.dc0 = value_param_pattern [concrete] -// CHECK:STDOUT: %subscript.patt: %pattern_type.dc0 = at_binding_pattern subscript, %subscript.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C.ref [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.8b4 = value_param_pattern [concrete = constants.%self.param_patt.284] +// CHECK:STDOUT: %self.patt: %pattern_type.8b4 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.dd1] +// CHECK:STDOUT: %subscript.param_patt: %pattern_type.dc0 = value_param_pattern [concrete = constants.%subscript.param_patt.d18] +// CHECK:STDOUT: %subscript.patt: %pattern_type.dc0 = at_binding_pattern subscript, %subscript.param_patt [concrete = constants.%subscript.patt.f21] +// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete = constants.%return.param_patt.89a] +// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C.ref [concrete = constants.%return.patt.e4a] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %.loc9_53: Core.Form = init_form %C.ref [concrete = constants.%.a44] @@ -488,16 +505,24 @@ let x: i32 = c[0]; // CHECK:STDOUT: %IndexWith_where.type: type = facet_type <@IndexWith, @IndexWith(%SubscriptType.f8f) where %impl.elem0.8a5 = %ElementType> [concrete] // CHECK:STDOUT: %IndexWith.impl_witness: = impl_witness @C.as.IndexWith.impl.%IndexWith.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %self.param_patt.303: %pattern_type.98b = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.49a: %pattern_type.98b = at_binding_pattern self, %self.param_patt.303 [concrete] // CHECK:STDOUT: %pattern_type.ea5: type = pattern_type %SubscriptType.f8f [concrete] +// CHECK:STDOUT: %subscript.param_patt.5ee: %pattern_type.ea5 = value_param_pattern [concrete] +// CHECK:STDOUT: %subscript.patt.a6f: %pattern_type.ea5 = at_binding_pattern subscript, %subscript.param_patt.5ee [concrete] // CHECK:STDOUT: %IndexWith.facet: %IndexWith.type.d74 = facet_value %C, (%IndexWith.impl_witness) [concrete] // CHECK:STDOUT: %.4d0: Core.Form = init_form %ElementType [concrete] // CHECK:STDOUT: %pattern_type.67c: type = pattern_type %ElementType [concrete] +// CHECK:STDOUT: %return.param_patt.41c: %pattern_type.67c = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.66a: %pattern_type.67c = return_slot_pattern %return.param_patt.41c, %ElementType [concrete] // CHECK:STDOUT: %C.as.IndexWith.impl.At.type: type = fn_type @C.as.IndexWith.impl.At [concrete] // CHECK:STDOUT: %C.as.IndexWith.impl.At: %C.as.IndexWith.impl.At.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %ElementType.val: %ElementType = struct_value () [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = value_binding_pattern c [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %.115: ref %C = temporary invalid, %C.val [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.67c = value_binding_pattern x [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -547,17 +572,17 @@ let x: i32 = c[0]; // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.98b = value_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = value_binding_pattern c [concrete = constants.%c.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %.loc14_13.1: ref %C = temporary_storage // CHECK:STDOUT: %.loc14_13.2: init %C to %.loc14_13.1 = class_init () [concrete = constants.%C.val] // CHECK:STDOUT: %.loc14_13.3: init %C = converted @__global_init.%.loc14, %.loc14_13.2 [concrete = constants.%C.val] // CHECK:STDOUT: %.loc14_13.4: ref %C = temporary %.loc14_13.1, %.loc14_13.3 [concrete = constants.%.115] // CHECK:STDOUT: %.loc14_13.5: %C = acquire_value %.loc14_13.4 [concrete = constants.%C.val] +// CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %c: %C = value_binding c, %.loc14_13.5 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.67c = value_binding_pattern x [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.67c = value_binding_pattern x [concrete = constants.%x.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %ElementType.ref: type = name_ref ElementType, %ElementType.decl [concrete = constants.%ElementType] // CHECK:STDOUT: %x: %ElementType = value_binding x, [concrete = ] @@ -565,12 +590,12 @@ let x: i32 = c[0]; // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.IndexWith.impl: %C.ref as %.loc8_41 { // CHECK:STDOUT: %C.as.IndexWith.impl.At.decl: %C.as.IndexWith.impl.At.type = fn_decl @C.as.IndexWith.impl.At [concrete = constants.%C.as.IndexWith.impl.At] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.98b = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.98b = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %subscript.param_patt: %pattern_type.ea5 = value_param_pattern [concrete] -// CHECK:STDOUT: %subscript.patt: %pattern_type.ea5 = at_binding_pattern subscript, %subscript.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.67c = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.67c = return_slot_pattern %return.param_patt, %ElementType.ref [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.98b = value_param_pattern [concrete = constants.%self.param_patt.303] +// CHECK:STDOUT: %self.patt: %pattern_type.98b = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.49a] +// CHECK:STDOUT: %subscript.param_patt: %pattern_type.ea5 = value_param_pattern [concrete = constants.%subscript.param_patt.5ee] +// CHECK:STDOUT: %subscript.patt: %pattern_type.ea5 = at_binding_pattern subscript, %subscript.param_patt [concrete = constants.%subscript.patt.a6f] +// CHECK:STDOUT: %return.param_patt: %pattern_type.67c = out_param_pattern [concrete = constants.%return.param_patt.41c] +// CHECK:STDOUT: %return.patt: %pattern_type.67c = return_slot_pattern %return.param_patt, %ElementType.ref [concrete = constants.%return.patt.66a] // CHECK:STDOUT: } { // CHECK:STDOUT: %IndexWith.facet: %IndexWith.type.d74 = facet_value @C.as.IndexWith.impl.%C.ref, (constants.%IndexWith.impl_witness) [concrete = constants.%IndexWith.facet] // CHECK:STDOUT: %.loc9_58.1: %IndexWith.type.d74 = converted @C.as.IndexWith.impl.%C.ref, %IndexWith.facet [concrete = constants.%IndexWith.facet] @@ -645,6 +670,7 @@ let x: i32 = c[0]; // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = value_binding_pattern c [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %.115: ref %C = temporary invalid, %C.val [concrete] @@ -653,6 +679,7 @@ let x: i32 = c[0]; // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = value_binding_pattern x [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %IndexWith.type.df6: type = generic_interface_type @IndexWith [concrete] // CHECK:STDOUT: %IndexWith.generic: %IndexWith.type.df6 = struct_value () [concrete] @@ -679,17 +706,17 @@ let x: i32 = c[0]; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.98b = value_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = value_binding_pattern c [concrete = constants.%c.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %.loc6_13.1: ref %C = temporary_storage // CHECK:STDOUT: %.loc6_13.2: init %C to %.loc6_13.1 = class_init () [concrete = constants.%C.val] // CHECK:STDOUT: %.loc6_13.3: init %C = converted @__global_init.%.loc6, %.loc6_13.2 [concrete = constants.%C.val] // CHECK:STDOUT: %.loc6_13.4: ref %C = temporary %.loc6_13.1, %.loc6_13.3 [concrete = constants.%.115] // CHECK:STDOUT: %.loc6_13.5: %C = acquire_value %.loc6_13.4 [concrete = constants.%C.val] +// CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %c: %C = value_binding c, %.loc6_13.5 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = value_binding_pattern x [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = value_binding_pattern x [concrete = constants.%x.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %x: %i32 = value_binding x, [concrete = ] diff --git a/toolchain/check/testdata/operators/overloaded/ordered.carbon b/toolchain/check/testdata/operators/overloaded/ordered.carbon index 6cdb6667dc5d..dfa34c166b3e 100644 --- a/toolchain/check/testdata/operators/overloaded/ordered.carbon +++ b/toolchain/check/testdata/operators/overloaded/ordered.carbon @@ -88,10 +88,16 @@ fn TestGreaterEqual(a: D, b: D) -> bool { // CHECK:STDOUT: %OrderedWith.type.ad8: type = generic_interface_type @OrderedWith [concrete] // CHECK:STDOUT: %OrderedWith.generic: %OrderedWith.type.ad8 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] // CHECK:STDOUT: %.f34: Core.Form = init_form bool [concrete] // CHECK:STDOUT: %OrderedWith.type.108: type = facet_type <@OrderedWith, @OrderedWith(%C)> [concrete] // CHECK:STDOUT: %OrderedWith.impl_witness: = impl_witness @C.as.OrderedWith.impl.%OrderedWith.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.4a7: type = pattern_type %C [concrete] +// CHECK:STDOUT: %self.param_patt.c03: %pattern_type.4a7 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.3a1: %pattern_type.4a7 = at_binding_pattern self, %self.param_patt.c03 [concrete] +// CHECK:STDOUT: %other.param_patt.b8c: %pattern_type.4a7 = value_param_pattern [concrete] +// CHECK:STDOUT: %other.patt.527: %pattern_type.4a7 = at_binding_pattern other, %other.param_patt.b8c [concrete] +// CHECK:STDOUT: %return.patt.c0c: %pattern_type.831 = return_slot_pattern %return.param_patt, bool [concrete] // CHECK:STDOUT: %C.as.OrderedWith.impl.Less.type: type = fn_type @C.as.OrderedWith.impl.Less [concrete] // CHECK:STDOUT: %C.as.OrderedWith.impl.Less: %C.as.OrderedWith.impl.Less.type = struct_value () [concrete] // CHECK:STDOUT: %C.as.OrderedWith.impl.LessOrEquivalent.type: type = fn_type @C.as.OrderedWith.impl.LessOrEquivalent [concrete] @@ -105,6 +111,10 @@ fn TestGreaterEqual(a: D, b: D) -> bool { // CHECK:STDOUT: %OrderedWith.WithSelf.LessOrEquivalent.type.392: type = fn_type @OrderedWith.WithSelf.LessOrEquivalent, @OrderedWith.WithSelf(%C, %OrderedWith.facet) [concrete] // CHECK:STDOUT: %OrderedWith.WithSelf.Greater.type.2b0: type = fn_type @OrderedWith.WithSelf.Greater, @OrderedWith.WithSelf(%C, %OrderedWith.facet) [concrete] // CHECK:STDOUT: %OrderedWith.WithSelf.GreaterOrEquivalent.type.9fb: type = fn_type @OrderedWith.WithSelf.GreaterOrEquivalent, @OrderedWith.WithSelf(%C, %OrderedWith.facet) [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.4a7 = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.4a7 = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.4a7 = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.4a7 = at_binding_pattern b, %b.param_patt [concrete] // CHECK:STDOUT: %TestLess.type: type = fn_type @TestLess [concrete] // CHECK:STDOUT: %TestLess: %TestLess.type = struct_value () [concrete] // CHECK:STDOUT: %.e71: type = fn_type_with_self_type %OrderedWith.WithSelf.Less.type.671, %OrderedWith.facet [concrete] @@ -149,12 +159,12 @@ fn TestGreaterEqual(a: D, b: D) -> bool { // CHECK:STDOUT: %OrderedWith.type: type = facet_type <@OrderedWith, @OrderedWith(constants.%C)> [concrete = constants.%OrderedWith.type.108] // CHECK:STDOUT: } // CHECK:STDOUT: %TestLess.decl: %TestLess.type = fn_decl @TestLess [concrete = constants.%TestLess] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.4a7 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.4a7 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.4a7 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.4a7 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc13_28.1 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.4a7 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.4a7 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %b.param_patt: %pattern_type.4a7 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.4a7 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc13_28.1 [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc13_28.1: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc13_28.2: Core.Form = init_form %.loc13_28.1 [concrete = constants.%.f34] @@ -168,12 +178,12 @@ fn TestGreaterEqual(a: D, b: D) -> bool { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestLessEqual.decl: %TestLessEqual.type = fn_decl @TestLessEqual [concrete = constants.%TestLessEqual] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.4a7 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.4a7 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.4a7 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.4a7 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc17_33.1 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.4a7 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.4a7 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %b.param_patt: %pattern_type.4a7 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.4a7 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc17_33.1 [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc17_33.1: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc17_33.2: Core.Form = init_form %.loc17_33.1 [concrete = constants.%.f34] @@ -187,12 +197,12 @@ fn TestGreaterEqual(a: D, b: D) -> bool { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestGreater.decl: %TestGreater.type = fn_decl @TestGreater [concrete = constants.%TestGreater] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.4a7 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.4a7 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.4a7 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.4a7 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc21_31.1 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.4a7 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.4a7 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %b.param_patt: %pattern_type.4a7 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.4a7 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc21_31.1 [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc21_31.1: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc21_31.2: Core.Form = init_form %.loc21_31.1 [concrete = constants.%.f34] @@ -206,12 +216,12 @@ fn TestGreaterEqual(a: D, b: D) -> bool { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestGreaterEqual.decl: %TestGreaterEqual.type = fn_decl @TestGreaterEqual [concrete = constants.%TestGreaterEqual] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.4a7 = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.4a7 = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.4a7 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.4a7 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc25_36.1 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.4a7 = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.4a7 = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %b.param_patt: %pattern_type.4a7 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.4a7 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc25_36.1 [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc25_36.1: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc25_36.2: Core.Form = init_form %.loc25_36.1 [concrete = constants.%.f34] @@ -228,12 +238,12 @@ fn TestGreaterEqual(a: D, b: D) -> bool { // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.OrderedWith.impl: %C.ref.loc6_6 as %OrderedWith.type { // CHECK:STDOUT: %C.as.OrderedWith.impl.Less.decl: %C.as.OrderedWith.impl.Less.type = fn_decl @C.as.OrderedWith.impl.Less [concrete = constants.%C.as.OrderedWith.impl.Less] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.4a7 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.4a7 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %other.param_patt: %pattern_type.4a7 = value_param_pattern [concrete] -// CHECK:STDOUT: %other.patt: %pattern_type.4a7 = at_binding_pattern other, %other.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc7_33.1 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.4a7 = value_param_pattern [concrete = constants.%self.param_patt.c03] +// CHECK:STDOUT: %self.patt: %pattern_type.4a7 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.3a1] +// CHECK:STDOUT: %other.param_patt: %pattern_type.4a7 = value_param_pattern [concrete = constants.%other.param_patt.b8c] +// CHECK:STDOUT: %other.patt: %pattern_type.4a7 = at_binding_pattern other, %other.param_patt [concrete = constants.%other.patt.527] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc7_33.1 [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc7_33.1: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc7_33.2: Core.Form = init_form %.loc7_33.1 [concrete = constants.%.f34] @@ -247,12 +257,12 @@ fn TestGreaterEqual(a: D, b: D) -> bool { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %C.as.OrderedWith.impl.LessOrEquivalent.decl: %C.as.OrderedWith.impl.LessOrEquivalent.type = fn_decl @C.as.OrderedWith.impl.LessOrEquivalent [concrete = constants.%C.as.OrderedWith.impl.LessOrEquivalent] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.4a7 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.4a7 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %other.param_patt: %pattern_type.4a7 = value_param_pattern [concrete] -// CHECK:STDOUT: %other.patt: %pattern_type.4a7 = at_binding_pattern other, %other.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc8_45.1 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.4a7 = value_param_pattern [concrete = constants.%self.param_patt.c03] +// CHECK:STDOUT: %self.patt: %pattern_type.4a7 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.3a1] +// CHECK:STDOUT: %other.param_patt: %pattern_type.4a7 = value_param_pattern [concrete = constants.%other.param_patt.b8c] +// CHECK:STDOUT: %other.patt: %pattern_type.4a7 = at_binding_pattern other, %other.param_patt [concrete = constants.%other.patt.527] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc8_45.1 [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8_45.1: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc8_45.2: Core.Form = init_form %.loc8_45.1 [concrete = constants.%.f34] @@ -266,12 +276,12 @@ fn TestGreaterEqual(a: D, b: D) -> bool { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %C.as.OrderedWith.impl.Greater.decl: %C.as.OrderedWith.impl.Greater.type = fn_decl @C.as.OrderedWith.impl.Greater [concrete = constants.%C.as.OrderedWith.impl.Greater] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.4a7 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.4a7 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %other.param_patt: %pattern_type.4a7 = value_param_pattern [concrete] -// CHECK:STDOUT: %other.patt: %pattern_type.4a7 = at_binding_pattern other, %other.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc9_36.1 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.4a7 = value_param_pattern [concrete = constants.%self.param_patt.c03] +// CHECK:STDOUT: %self.patt: %pattern_type.4a7 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.3a1] +// CHECK:STDOUT: %other.param_patt: %pattern_type.4a7 = value_param_pattern [concrete = constants.%other.param_patt.b8c] +// CHECK:STDOUT: %other.patt: %pattern_type.4a7 = at_binding_pattern other, %other.param_patt [concrete = constants.%other.patt.527] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc9_36.1 [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc9_36.1: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc9_36.2: Core.Form = init_form %.loc9_36.1 [concrete = constants.%.f34] @@ -285,12 +295,12 @@ fn TestGreaterEqual(a: D, b: D) -> bool { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %C.as.OrderedWith.impl.GreaterOrEquivalent.decl: %C.as.OrderedWith.impl.GreaterOrEquivalent.type = fn_decl @C.as.OrderedWith.impl.GreaterOrEquivalent [concrete = constants.%C.as.OrderedWith.impl.GreaterOrEquivalent] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.4a7 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.4a7 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %other.param_patt: %pattern_type.4a7 = value_param_pattern [concrete] -// CHECK:STDOUT: %other.patt: %pattern_type.4a7 = at_binding_pattern other, %other.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc10_48.1 [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.4a7 = value_param_pattern [concrete = constants.%self.param_patt.c03] +// CHECK:STDOUT: %self.patt: %pattern_type.4a7 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.3a1] +// CHECK:STDOUT: %other.param_patt: %pattern_type.4a7 = value_param_pattern [concrete = constants.%other.param_patt.b8c] +// CHECK:STDOUT: %other.patt: %pattern_type.4a7 = at_binding_pattern other, %other.param_patt [concrete = constants.%other.patt.527] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc10_48.1 [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc10_48.1: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc10_48.2: Core.Form = init_form %.loc10_48.1 [concrete = constants.%.f34] @@ -379,8 +389,14 @@ fn TestGreaterEqual(a: D, b: D) -> bool { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.9dc: type = pattern_type %D [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.9dc = value_param_pattern [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.9dc = at_binding_pattern a, %a.param_patt [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.9dc = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.9dc = at_binding_pattern b, %b.param_patt [concrete] // CHECK:STDOUT: %.f34: Core.Form = init_form bool [concrete] // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.c0c: %pattern_type.831 = return_slot_pattern %return.param_patt, bool [concrete] // CHECK:STDOUT: %TestLess.type: type = fn_type @TestLess [concrete] // CHECK:STDOUT: %TestLess: %TestLess.type = struct_value () [concrete] // CHECK:STDOUT: %OrderedWith.type.ad8: type = generic_interface_type @OrderedWith [concrete] @@ -416,12 +432,12 @@ fn TestGreaterEqual(a: D, b: D) -> bool { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %D.decl: type = class_decl @D [concrete = constants.%D] {} {} // CHECK:STDOUT: %TestLess.decl: %TestLess.type = fn_decl @TestLess [concrete = constants.%TestLess] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.9dc = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.9dc = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.9dc = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.9dc = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc6_28.1 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.9dc = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.9dc = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %b.param_patt: %pattern_type.9dc = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.9dc = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc6_28.1 [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6_28.1: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc6_28.2: Core.Form = init_form %.loc6_28.1 [concrete = constants.%.f34] @@ -435,12 +451,12 @@ fn TestGreaterEqual(a: D, b: D) -> bool { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestLessEqual.decl: %TestLessEqual.type = fn_decl @TestLessEqual [concrete = constants.%TestLessEqual] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.9dc = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.9dc = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.9dc = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.9dc = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc14_33.1 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.9dc = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.9dc = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %b.param_patt: %pattern_type.9dc = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.9dc = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc14_33.1 [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc14_33.1: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc14_33.2: Core.Form = init_form %.loc14_33.1 [concrete = constants.%.f34] @@ -454,12 +470,12 @@ fn TestGreaterEqual(a: D, b: D) -> bool { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestGreater.decl: %TestGreater.type = fn_decl @TestGreater [concrete = constants.%TestGreater] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.9dc = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.9dc = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.9dc = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.9dc = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc22_31.1 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.9dc = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.9dc = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %b.param_patt: %pattern_type.9dc = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.9dc = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc22_31.1 [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc22_31.1: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc22_31.2: Core.Form = init_form %.loc22_31.1 [concrete = constants.%.f34] @@ -473,12 +489,12 @@ fn TestGreaterEqual(a: D, b: D) -> bool { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestGreaterEqual.decl: %TestGreaterEqual.type = fn_decl @TestGreaterEqual [concrete = constants.%TestGreaterEqual] { -// CHECK:STDOUT: %a.param_patt: %pattern_type.9dc = value_param_pattern [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.9dc = at_binding_pattern a, %a.param_patt [concrete] -// CHECK:STDOUT: %b.param_patt: %pattern_type.9dc = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.9dc = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc30_36.1 [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.9dc = value_param_pattern [concrete = constants.%a.param_patt] +// CHECK:STDOUT: %a.patt: %pattern_type.9dc = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt] +// CHECK:STDOUT: %b.param_patt: %pattern_type.9dc = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.9dc = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern %return.param_patt, %.loc30_36.1 [concrete = constants.%return.patt.c0c] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc30_36.1: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %.loc30_36.2: Core.Form = init_form %.loc30_36.1 [concrete = constants.%.f34] diff --git a/toolchain/check/testdata/operators/overloaded/string_indexing.carbon b/toolchain/check/testdata/operators/overloaded/string_indexing.carbon index 8bb1008cce60..b9f768f4bffc 100644 --- a/toolchain/check/testdata/operators/overloaded/string_indexing.carbon +++ b/toolchain/check/testdata/operators/overloaded/string_indexing.carbon @@ -106,6 +106,7 @@ fn TestStringIndexing() { // CHECK:STDOUT: constants { // CHECK:STDOUT: %char: type = class_type @Char [concrete] // CHECK:STDOUT: %pattern_type.2ff: type = pattern_type %char [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.2ff = value_binding_pattern c [concrete] // CHECK:STDOUT: %str.3d4: type = class_type @String [concrete] // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %u64: type = class_type @UInt, @UInt(%int_64) [concrete] @@ -132,6 +133,7 @@ fn TestStringIndexing() { // CHECK:STDOUT: %str.as.IndexWith.impl.At.specific_fn: = specific_function %str.as.IndexWith.impl.At.7f4, @str.as.IndexWith.impl.At(%ImplicitAs.facet) [concrete] // CHECK:STDOUT: %bound_method: = bound_method %String.val, %str.as.IndexWith.impl.At.specific_fn [concrete] // CHECK:STDOUT: %int_84: %char = int_value 84 [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.2ff = value_binding_pattern d [concrete] // CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %int_116: %char = int_value 116 [concrete] // CHECK:STDOUT: } @@ -147,7 +149,7 @@ fn TestStringIndexing() { // CHECK:STDOUT: fn @TestStringIndexing() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.2ff = value_binding_pattern c [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.2ff = value_binding_pattern c [concrete = constants.%c.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %str.loc5: %ptr.b46 = string_literal "Test" [concrete = constants.%str.4f8] // CHECK:STDOUT: %int_4.loc5: %u64 = int_value 4 [concrete = constants.%int_4] @@ -155,17 +157,19 @@ fn TestStringIndexing() { // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0] // CHECK:STDOUT: %impl.elem1.loc5: %.182 = impl_witness_access constants.%IndexWith.impl_witness.0e3, element1 [concrete = constants.%str.as.IndexWith.impl.At.7f4] // CHECK:STDOUT: %bound_method.loc5_32.1: = bound_method %String.val.loc5, %impl.elem1.loc5 [concrete = constants.%str.as.IndexWith.impl.At.bound] -// CHECK:STDOUT: %ImplicitAs.facet.loc5: %ImplicitAs.type.221 = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.5a9) [concrete = constants.%ImplicitAs.facet] -// CHECK:STDOUT: %.loc5_32.1: %ImplicitAs.type.221 = converted Core.IntLiteral, %ImplicitAs.facet.loc5 [concrete = constants.%ImplicitAs.facet] +// CHECK:STDOUT: %ImplicitAs.facet.loc5_32.1: %ImplicitAs.type.221 = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.5a9) [concrete = constants.%ImplicitAs.facet] +// CHECK:STDOUT: %.loc5_32.1: %ImplicitAs.type.221 = converted Core.IntLiteral, %ImplicitAs.facet.loc5_32.1 [concrete = constants.%ImplicitAs.facet] +// CHECK:STDOUT: %ImplicitAs.facet.loc5_32.2: %ImplicitAs.type.221 = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.5a9) [concrete = constants.%ImplicitAs.facet] +// CHECK:STDOUT: %.loc5_32.2: %ImplicitAs.type.221 = converted Core.IntLiteral, %ImplicitAs.facet.loc5_32.2 [concrete = constants.%ImplicitAs.facet] // CHECK:STDOUT: %specific_fn.loc5: = specific_function %impl.elem1.loc5, @str.as.IndexWith.impl.At(constants.%ImplicitAs.facet) [concrete = constants.%str.as.IndexWith.impl.At.specific_fn] // CHECK:STDOUT: %bound_method.loc5_32.2: = bound_method %String.val.loc5, %specific_fn.loc5 [concrete = constants.%bound_method] // CHECK:STDOUT: %str.as.IndexWith.impl.At.call.loc5: init %char = call %bound_method.loc5_32.2(%String.val.loc5, %int_0) [concrete = constants.%int_84] +// CHECK:STDOUT: %.loc5_32.3: %char = value_of_initializer %str.as.IndexWith.impl.At.call.loc5 [concrete = constants.%int_84] +// CHECK:STDOUT: %.loc5_32.4: %char = converted %str.as.IndexWith.impl.At.call.loc5, %.loc5_32.3 [concrete = constants.%int_84] // CHECK:STDOUT: %char.loc5: type = type_literal constants.%char [concrete = constants.%char] -// CHECK:STDOUT: %.loc5_32.2: %char = value_of_initializer %str.as.IndexWith.impl.At.call.loc5 [concrete = constants.%int_84] -// CHECK:STDOUT: %.loc5_32.3: %char = converted %str.as.IndexWith.impl.At.call.loc5, %.loc5_32.2 [concrete = constants.%int_84] -// CHECK:STDOUT: %c: %char = value_binding c, %.loc5_32.3 +// CHECK:STDOUT: %c: %char = value_binding c, %.loc5_32.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.2ff = value_binding_pattern d [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.2ff = value_binding_pattern d [concrete = constants.%d.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %str.loc6: %ptr.b46 = string_literal "Test" [concrete = constants.%str.4f8] // CHECK:STDOUT: %int_4.loc6: %u64 = int_value 4 [concrete = constants.%int_4] @@ -173,15 +177,17 @@ fn TestStringIndexing() { // CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete = constants.%int_3] // CHECK:STDOUT: %impl.elem1.loc6: %.182 = impl_witness_access constants.%IndexWith.impl_witness.0e3, element1 [concrete = constants.%str.as.IndexWith.impl.At.7f4] // CHECK:STDOUT: %bound_method.loc6_32.1: = bound_method %String.val.loc6, %impl.elem1.loc6 [concrete = constants.%str.as.IndexWith.impl.At.bound] -// CHECK:STDOUT: %ImplicitAs.facet.loc6: %ImplicitAs.type.221 = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.5a9) [concrete = constants.%ImplicitAs.facet] -// CHECK:STDOUT: %.loc6_32.1: %ImplicitAs.type.221 = converted Core.IntLiteral, %ImplicitAs.facet.loc6 [concrete = constants.%ImplicitAs.facet] +// CHECK:STDOUT: %ImplicitAs.facet.loc6_32.1: %ImplicitAs.type.221 = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.5a9) [concrete = constants.%ImplicitAs.facet] +// CHECK:STDOUT: %.loc6_32.1: %ImplicitAs.type.221 = converted Core.IntLiteral, %ImplicitAs.facet.loc6_32.1 [concrete = constants.%ImplicitAs.facet] +// CHECK:STDOUT: %ImplicitAs.facet.loc6_32.2: %ImplicitAs.type.221 = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.5a9) [concrete = constants.%ImplicitAs.facet] +// CHECK:STDOUT: %.loc6_32.2: %ImplicitAs.type.221 = converted Core.IntLiteral, %ImplicitAs.facet.loc6_32.2 [concrete = constants.%ImplicitAs.facet] // CHECK:STDOUT: %specific_fn.loc6: = specific_function %impl.elem1.loc6, @str.as.IndexWith.impl.At(constants.%ImplicitAs.facet) [concrete = constants.%str.as.IndexWith.impl.At.specific_fn] // CHECK:STDOUT: %bound_method.loc6_32.2: = bound_method %String.val.loc6, %specific_fn.loc6 [concrete = constants.%bound_method] // CHECK:STDOUT: %str.as.IndexWith.impl.At.call.loc6: init %char = call %bound_method.loc6_32.2(%String.val.loc6, %int_3) [concrete = constants.%int_116] +// CHECK:STDOUT: %.loc6_32.3: %char = value_of_initializer %str.as.IndexWith.impl.At.call.loc6 [concrete = constants.%int_116] +// CHECK:STDOUT: %.loc6_32.4: %char = converted %str.as.IndexWith.impl.At.call.loc6, %.loc6_32.3 [concrete = constants.%int_116] // CHECK:STDOUT: %char.loc6: type = type_literal constants.%char [concrete = constants.%char] -// CHECK:STDOUT: %.loc6_32.2: %char = value_of_initializer %str.as.IndexWith.impl.At.call.loc6 [concrete = constants.%int_116] -// CHECK:STDOUT: %.loc6_32.3: %char = converted %str.as.IndexWith.impl.At.call.loc6, %.loc6_32.2 [concrete = constants.%int_116] -// CHECK:STDOUT: %d: %char = value_binding d, %.loc6_32.3 +// CHECK:STDOUT: %d: %char = value_binding d, %.loc6_32.4 // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/package_expr/syntax.carbon b/toolchain/check/testdata/package_expr/syntax.carbon index 33f2de04ed8a..9a3874b961b0 100644 --- a/toolchain/check/testdata/package_expr/syntax.carbon +++ b/toolchain/check/testdata/package_expr/syntax.carbon @@ -54,6 +54,8 @@ fn Main() { // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.6b6 = var_pattern %x.patt [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -71,6 +73,8 @@ fn Main() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39, @Core.IntLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete] // CHECK:STDOUT: %bound_method: = bound_method %int_0.5c6, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_0.3c0: %i32 = int_value 0 [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.6b6 = ref_binding_pattern y [concrete] +// CHECK:STDOUT: %y.var_patt: %pattern_type.6b6 = var_pattern %y.patt [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.ac8: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N) [symbolic] // CHECK:STDOUT: %Int.as.Copy.impl.Op.5e0: %Int.as.Copy.impl.Op.type.ac8 = struct_value () [symbolic] @@ -108,15 +112,15 @@ fn Main() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.6b6 = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.6b6 = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %i32 = var %x.var_patt [concrete] // CHECK:STDOUT: %i32.loc4: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %x: ref %i32 = ref_binding x, %x.var [concrete = %x.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %pattern_type.6b6 = ref_binding_pattern y [concrete] -// CHECK:STDOUT: %y.var_patt: %pattern_type.6b6 = var_pattern %y.patt [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.6b6 = ref_binding_pattern y [concrete = constants.%y.patt] +// CHECK:STDOUT: %y.var_patt: %pattern_type.6b6 = var_pattern %y.patt [concrete = constants.%y.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %i32 = var %y.var_patt [concrete] // CHECK:STDOUT: %i32.loc5: type = type_literal constants.%i32 [concrete = constants.%i32] @@ -156,6 +160,8 @@ fn Main() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %x.patt.1ad: %pattern_type.6b6 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt.16c: %pattern_type.6b6 = var_pattern %x.patt.1ad [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -175,10 +181,14 @@ fn Main() { // CHECK:STDOUT: %int_0.3c0: %i32 = int_value 0 [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] +// CHECK:STDOUT: %x.patt.aaf: %pattern_type.6b6 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt.c4a: %pattern_type.6b6 = var_pattern %x.patt.aaf [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.094: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] // CHECK:STDOUT: %bound_method.953: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_1.0c6: %i32 = int_value 1 [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.6b6 = ref_binding_pattern y [concrete] +// CHECK:STDOUT: %y.var_patt: %pattern_type.6b6 = var_pattern %y.patt [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.ac8: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N) [symbolic] // CHECK:STDOUT: %Int.as.Copy.impl.Op.5e0: %Int.as.Copy.impl.Op.type.ac8 = struct_value () [symbolic] @@ -221,8 +231,8 @@ fn Main() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.6b6 = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = ref_binding_pattern x [concrete = constants.%x.patt.1ad] +// CHECK:STDOUT: %x.var_patt: %pattern_type.6b6 = var_pattern %x.patt [concrete = constants.%x.var_patt.16c] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %i32 = var %x.var_patt [concrete] // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] @@ -233,8 +243,8 @@ fn Main() { // CHECK:STDOUT: fn @Main() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.6b6 = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = ref_binding_pattern x [concrete = constants.%x.patt.aaf] +// CHECK:STDOUT: %x.var_patt: %pattern_type.6b6 = var_pattern %x.patt [concrete = constants.%x.var_patt.c4a] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %i32 = var %x.var_patt // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -248,8 +258,8 @@ fn Main() { // CHECK:STDOUT: %i32.loc7: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %x: ref %i32 = ref_binding x, %x.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %pattern_type.6b6 = ref_binding_pattern y [concrete] -// CHECK:STDOUT: %y.var_patt: %pattern_type.6b6 = var_pattern %y.patt [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.6b6 = ref_binding_pattern y [concrete = constants.%y.patt] +// CHECK:STDOUT: %y.var_patt: %pattern_type.6b6 = var_pattern %y.patt [concrete = constants.%y.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %i32 = var %y.var_patt // CHECK:STDOUT: %package.ref: = name_ref package, package [concrete = package] diff --git a/toolchain/check/testdata/packages/cross_package_export.carbon b/toolchain/check/testdata/packages/cross_package_export.carbon index 16c84e721111..e0aec24a5bb3 100644 --- a/toolchain/check/testdata/packages/cross_package_export.carbon +++ b/toolchain/check/testdata/packages/cross_package_export.carbon @@ -385,6 +385,8 @@ alias C = Other.C; // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %struct: %struct_type.x = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %.0c9: ref %empty_tuple.type = class_element_access file.%c.var, element0 [concrete] @@ -410,8 +412,8 @@ alias C = Other.C; // CHECK:STDOUT: } // CHECK:STDOUT: %Other.import = import Other // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt [concrete] // CHECK:STDOUT: %.loc6: type = splice_block %C.ref [concrete = constants.%C] { @@ -451,6 +453,8 @@ alias C = Other.C; // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %struct: %struct_type.x = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %.0c9: ref %empty_tuple.type = class_element_access file.%c.var, element0 [concrete] @@ -477,8 +481,8 @@ alias C = Other.C; // CHECK:STDOUT: } // CHECK:STDOUT: %Other.import = import Other // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt [concrete] // CHECK:STDOUT: %.loc7: type = splice_block %C.ref [concrete = constants.%C] { @@ -518,6 +522,8 @@ alias C = Other.C; // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %struct: %struct_type.x = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %.0c9: ref %empty_tuple.type = class_element_access file.%c.var, element0 [concrete] @@ -544,8 +550,8 @@ alias C = Other.C; // CHECK:STDOUT: } // CHECK:STDOUT: %Other.import = import Other // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt [concrete] // CHECK:STDOUT: %.loc6: type = splice_block %C.ref [concrete = constants.%C] { @@ -585,6 +591,8 @@ alias C = Other.C; // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %struct: %struct_type.x = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %.0c9: ref %empty_tuple.type = class_element_access file.%c.var, element0 [concrete] @@ -609,8 +617,8 @@ alias C = Other.C; // CHECK:STDOUT: } // CHECK:STDOUT: %Other.import = import Other // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt [concrete] // CHECK:STDOUT: %.loc6: type = splice_block %C.ref [concrete = constants.%C] { @@ -650,6 +658,8 @@ alias C = Other.C; // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %struct: %struct_type.x = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %.0c9: ref %empty_tuple.type = class_element_access file.%c.var, element0 [concrete] @@ -675,8 +685,8 @@ alias C = Other.C; // CHECK:STDOUT: } // CHECK:STDOUT: %Other.import = import Other // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt [concrete] // CHECK:STDOUT: %.loc7: type = splice_block %C.ref [concrete = constants.%C] { @@ -716,6 +726,8 @@ alias C = Other.C; // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %struct: %struct_type.x = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %.0c9: ref %empty_tuple.type = class_element_access file.%c.var, element0 [concrete] @@ -740,8 +752,8 @@ alias C = Other.C; // CHECK:STDOUT: } // CHECK:STDOUT: %Other.import = import Other // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt [concrete] // CHECK:STDOUT: %.loc6: type = splice_block %C.ref [concrete = constants.%C] { @@ -781,6 +793,8 @@ alias C = Other.C; // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %struct: %struct_type.x = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %.0c9: ref %empty_tuple.type = class_element_access file.%c.var, element0 [concrete] @@ -811,8 +825,8 @@ alias C = Other.C; // CHECK:STDOUT: } // CHECK:STDOUT: %Other.import = import Other // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt [concrete] // CHECK:STDOUT: %.loc11: type = splice_block %C.ref [concrete = constants.%C] { diff --git a/toolchain/check/testdata/packages/cross_package_import.carbon b/toolchain/check/testdata/packages/cross_package_import.carbon index fd5efc022218..c3ae62f3dec0 100644 --- a/toolchain/check/testdata/packages/cross_package_import.carbon +++ b/toolchain/check/testdata/packages/cross_package_import.carbon @@ -252,6 +252,8 @@ fn UseF() { Other.F(); } // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = at_binding_pattern x, %x.param_patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -261,8 +263,8 @@ fn UseF() { Other.F(); } // CHECK:STDOUT: .F = %F.decl // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %x.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type = value_param_pattern [concrete = constants.%x.param_patt] +// CHECK:STDOUT: %x.patt: %pattern_type = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %empty_tuple.type = value_param call_param0 // CHECK:STDOUT: %.loc4_17.1: type = splice_block %.loc4_17.3 [concrete = constants.%empty_tuple.type] { diff --git a/toolchain/check/testdata/packages/export_import.carbon b/toolchain/check/testdata/packages/export_import.carbon index 2318b8651e5d..aa9882e09e3a 100644 --- a/toolchain/check/testdata/packages/export_import.carbon +++ b/toolchain/check/testdata/packages/export_import.carbon @@ -296,6 +296,8 @@ export Poison; // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %struct: %struct_type.x = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %.eda: ref %empty_tuple.type = class_element_access file.%c.var, element0 [concrete] @@ -316,8 +318,8 @@ export Poison; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt [concrete] // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] @@ -356,6 +358,8 @@ export Poison; // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %struct: %struct_type.x = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %.eda: ref %empty_tuple.type = class_element_access file.%c.var, element0 [concrete] @@ -377,8 +381,8 @@ export Poison; // CHECK:STDOUT: %default.import.loc2_29.1 = import // CHECK:STDOUT: %default.import.loc2_29.2 = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt [concrete] // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] @@ -415,6 +419,8 @@ export Poison; // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %struct: %struct_type.x = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %.eda: ref %empty_tuple.type = class_element_access file.%c.var, element0 [concrete] @@ -435,8 +441,8 @@ export Poison; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt [concrete] // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] @@ -473,6 +479,8 @@ export Poison; // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %struct: %struct_type.x = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %.eda: ref %empty_tuple.type = class_element_access file.%c.var, element0 [concrete] @@ -493,8 +501,8 @@ export Poison; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt [concrete] // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] @@ -531,6 +539,8 @@ export Poison; // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %struct: %struct_type.x = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %.eda: ref %empty_tuple.type = class_element_access file.%c.var, element0 [concrete] @@ -551,8 +561,8 @@ export Poison; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt [concrete] // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] @@ -589,6 +599,8 @@ export Poison; // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %struct: %struct_type.x = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %.eda: ref %empty_tuple.type = class_element_access file.%c.var, element0 [concrete] @@ -609,8 +621,8 @@ export Poison; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt [concrete] // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] @@ -647,6 +659,8 @@ export Poison; // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %struct: %struct_type.x = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %.eda: ref %empty_tuple.type = class_element_access file.%c.var, element0 [concrete] @@ -667,8 +681,8 @@ export Poison; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt [concrete] // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] @@ -705,6 +719,8 @@ export Poison; // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %struct: %struct_type.x = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %.eda: ref %empty_tuple.type = class_element_access file.%c.var, element0 [concrete] @@ -725,8 +741,8 @@ export Poison; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt [concrete] // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] @@ -775,6 +791,8 @@ export Poison; // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %struct: %struct_type.x = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %.eda: ref %empty_tuple.type = class_element_access file.%c.var, element0 [concrete] @@ -795,8 +813,8 @@ export Poison; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt [concrete] // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] @@ -833,6 +851,8 @@ export Poison; // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %indirect_c.patt: %pattern_type = ref_binding_pattern indirect_c [concrete] +// CHECK:STDOUT: %indirect_c.var_patt: %pattern_type = var_pattern %indirect_c.patt [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %struct: %struct_type.x = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %.ad5: ref %empty_tuple.type = class_element_access file.%indirect_c.var, element0 [concrete] @@ -855,8 +875,8 @@ export Poison; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %indirect_c.patt: %pattern_type = ref_binding_pattern indirect_c [concrete] -// CHECK:STDOUT: %indirect_c.var_patt: %pattern_type = var_pattern %indirect_c.patt [concrete] +// CHECK:STDOUT: %indirect_c.patt: %pattern_type = ref_binding_pattern indirect_c [concrete = constants.%indirect_c.patt] +// CHECK:STDOUT: %indirect_c.var_patt: %pattern_type = var_pattern %indirect_c.patt [concrete = constants.%indirect_c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %indirect_c.var: ref %C = var %indirect_c.var_patt [concrete] // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] @@ -898,7 +918,7 @@ export Poison; // CHECK:STDOUT: .F = %F.decl // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: = return_slot_pattern , [concrete] +// CHECK:STDOUT: %return.patt: = return_slot_pattern , [concrete = ] // CHECK:STDOUT: } { // CHECK:STDOUT: %Poison.ref: = name_ref Poison, [concrete = ] // CHECK:STDOUT: %return: = return_slot diff --git a/toolchain/check/testdata/packages/export_mixed.carbon b/toolchain/check/testdata/packages/export_mixed.carbon index 670b5ddd7d2e..5ee79b4731f4 100644 --- a/toolchain/check/testdata/packages/export_mixed.carbon +++ b/toolchain/check/testdata/packages/export_mixed.carbon @@ -265,6 +265,8 @@ var d: D = {.y = ()}; // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %struct: %struct_type.x = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %.eda: ref %empty_tuple.type = class_element_access file.%c.var, element0 [concrete] @@ -285,8 +287,8 @@ var d: D = {.y = ()}; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt [concrete] // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] @@ -323,6 +325,8 @@ var d: D = {.y = ()}; // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %struct: %struct_type.x = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %.eda: ref %empty_tuple.type = class_element_access file.%c.var, element0 [concrete] @@ -343,8 +347,8 @@ var d: D = {.y = ()}; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt [concrete] // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] @@ -381,6 +385,8 @@ var d: D = {.y = ()}; // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %struct: %struct_type.x = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %.eda: ref %empty_tuple.type = class_element_access file.%c.var, element0 [concrete] @@ -401,8 +407,8 @@ var d: D = {.y = ()}; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt [concrete] // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] @@ -452,8 +458,8 @@ var d: D = {.y = ()}; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: = ref_binding_pattern d [concrete] -// CHECK:STDOUT: %d.var_patt: = var_pattern %d.patt [concrete] +// CHECK:STDOUT: %d.patt: = ref_binding_pattern d [concrete = ] +// CHECK:STDOUT: %d.var_patt: = var_pattern %d.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref = var %d.var_patt [concrete = ] // CHECK:STDOUT: %D.ref: = name_ref D, [concrete = ] @@ -476,6 +482,8 @@ var d: D = {.y = ()}; // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %struct: %struct_type.x = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %.eda: ref %empty_tuple.type = class_element_access file.%c.var, element0 [concrete] @@ -496,8 +504,8 @@ var d: D = {.y = ()}; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt [concrete] // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] @@ -534,6 +542,8 @@ var d: D = {.y = ()}; // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type.9be: = complete_type_witness %struct_type.x [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %struct.948: %struct_type.x = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %.eda: ref %empty_tuple.type = class_element_access file.%c.var, element0 [concrete] @@ -542,6 +552,8 @@ var d: D = {.y = ()}; // CHECK:STDOUT: %struct_type.y: type = struct_type {.y: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type.9f4: = complete_type_witness %struct_type.y [concrete] // CHECK:STDOUT: %pattern_type.d8d: type = pattern_type %D [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.d8d = ref_binding_pattern d [concrete] +// CHECK:STDOUT: %d.var_patt: %pattern_type.d8d = var_pattern %d.patt [concrete] // CHECK:STDOUT: %struct.8ce: %struct_type.y = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %.15f: ref %empty_tuple.type = class_element_access file.%d.var, element0 [concrete] // CHECK:STDOUT: %D.val: %D = struct_value (%empty_tuple) [concrete] @@ -567,15 +579,15 @@ var d: D = {.y = ()}; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt [concrete] // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %c: ref %C = ref_binding c, %c.var [concrete = %c.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.d8d = ref_binding_pattern d [concrete] -// CHECK:STDOUT: %d.var_patt: %pattern_type.d8d = var_pattern %d.patt [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.d8d = ref_binding_pattern d [concrete = constants.%d.patt] +// CHECK:STDOUT: %d.var_patt: %pattern_type.d8d = var_pattern %d.patt [concrete = constants.%d.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %D = var %d.var_patt [concrete] // CHECK:STDOUT: %D.ref: type = name_ref D, imports.%Main.D [concrete = constants.%D] diff --git a/toolchain/check/testdata/packages/export_name.carbon b/toolchain/check/testdata/packages/export_name.carbon index 58d7ee891ce6..c5fb74ee20e8 100644 --- a/toolchain/check/testdata/packages/export_name.carbon +++ b/toolchain/check/testdata/packages/export_name.carbon @@ -390,6 +390,8 @@ private export C; // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type.9be: = complete_type_witness %struct_type.x [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %struct.948: %struct_type.x = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %.eda: ref %empty_tuple.type = class_element_access file.%c.var, element0 [concrete] @@ -398,6 +400,8 @@ private export C; // CHECK:STDOUT: %struct_type.y: type = struct_type {.y: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type.9f4: = complete_type_witness %struct_type.y [concrete] // CHECK:STDOUT: %pattern_type.533: type = pattern_type %NSC [concrete] +// CHECK:STDOUT: %nsc.patt: %pattern_type.533 = ref_binding_pattern nsc [concrete] +// CHECK:STDOUT: %nsc.var_patt: %pattern_type.533 = var_pattern %nsc.patt [concrete] // CHECK:STDOUT: %struct.8ce: %struct_type.y = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %.e7e: ref %empty_tuple.type = class_element_access file.%nsc.var, element0 [concrete] // CHECK:STDOUT: %NSC.val: %NSC = struct_value (%empty_tuple) [concrete] @@ -427,15 +431,15 @@ private export C; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt [concrete] // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %c: ref %C = ref_binding c, %c.var [concrete = %c.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %nsc.patt: %pattern_type.533 = ref_binding_pattern nsc [concrete] -// CHECK:STDOUT: %nsc.var_patt: %pattern_type.533 = var_pattern %nsc.patt [concrete] +// CHECK:STDOUT: %nsc.patt: %pattern_type.533 = ref_binding_pattern nsc [concrete = constants.%nsc.patt] +// CHECK:STDOUT: %nsc.var_patt: %pattern_type.533 = var_pattern %nsc.patt [concrete = constants.%nsc.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %nsc.var: ref %NSC = var %nsc.var_patt [concrete] // CHECK:STDOUT: %.loc7: type = splice_block %NSC.ref [concrete = constants.%NSC] { @@ -492,6 +496,8 @@ private export C; // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type.9be: = complete_type_witness %struct_type.x [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %struct.948: %struct_type.x = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %.eda: ref %empty_tuple.type = class_element_access file.%c.var, element0 [concrete] @@ -500,6 +506,8 @@ private export C; // CHECK:STDOUT: %struct_type.y: type = struct_type {.y: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type.9f4: = complete_type_witness %struct_type.y [concrete] // CHECK:STDOUT: %pattern_type.533: type = pattern_type %NSC [concrete] +// CHECK:STDOUT: %nsc.patt: %pattern_type.533 = ref_binding_pattern nsc [concrete] +// CHECK:STDOUT: %nsc.var_patt: %pattern_type.533 = var_pattern %nsc.patt [concrete] // CHECK:STDOUT: %struct.8ce: %struct_type.y = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %.e7e: ref %empty_tuple.type = class_element_access file.%nsc.var, element0 [concrete] // CHECK:STDOUT: %NSC.val: %NSC = struct_value (%empty_tuple) [concrete] @@ -530,15 +538,15 @@ private export C; // CHECK:STDOUT: %default.import.loc2_29.1 = import // CHECK:STDOUT: %default.import.loc2_29.2 = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt [concrete] // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %c: ref %C = ref_binding c, %c.var [concrete = %c.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %nsc.patt: %pattern_type.533 = ref_binding_pattern nsc [concrete] -// CHECK:STDOUT: %nsc.var_patt: %pattern_type.533 = var_pattern %nsc.patt [concrete] +// CHECK:STDOUT: %nsc.patt: %pattern_type.533 = ref_binding_pattern nsc [concrete = constants.%nsc.patt] +// CHECK:STDOUT: %nsc.var_patt: %pattern_type.533 = var_pattern %nsc.patt [concrete = constants.%nsc.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %nsc.var: ref %NSC = var %nsc.var_patt [concrete] // CHECK:STDOUT: %.loc5: type = splice_block %NSC.ref [concrete = constants.%NSC] { @@ -595,6 +603,8 @@ private export C; // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type.9be: = complete_type_witness %struct_type.x [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %struct.948: %struct_type.x = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %.eda: ref %empty_tuple.type = class_element_access file.%c.var, element0 [concrete] @@ -603,6 +613,8 @@ private export C; // CHECK:STDOUT: %struct_type.y: type = struct_type {.y: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type.9f4: = complete_type_witness %struct_type.y [concrete] // CHECK:STDOUT: %pattern_type.533: type = pattern_type %NSC [concrete] +// CHECK:STDOUT: %nsc.patt: %pattern_type.533 = ref_binding_pattern nsc [concrete] +// CHECK:STDOUT: %nsc.var_patt: %pattern_type.533 = var_pattern %nsc.patt [concrete] // CHECK:STDOUT: %struct.8ce: %struct_type.y = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %.e7e: ref %empty_tuple.type = class_element_access file.%nsc.var, element0 [concrete] // CHECK:STDOUT: %NSC.val: %NSC = struct_value (%empty_tuple) [concrete] @@ -632,15 +644,15 @@ private export C; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt [concrete] // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %c: ref %C = ref_binding c, %c.var [concrete = %c.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %nsc.patt: %pattern_type.533 = ref_binding_pattern nsc [concrete] -// CHECK:STDOUT: %nsc.var_patt: %pattern_type.533 = var_pattern %nsc.patt [concrete] +// CHECK:STDOUT: %nsc.patt: %pattern_type.533 = ref_binding_pattern nsc [concrete = constants.%nsc.patt] +// CHECK:STDOUT: %nsc.var_patt: %pattern_type.533 = var_pattern %nsc.patt [concrete = constants.%nsc.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %nsc.var: ref %NSC = var %nsc.var_patt [concrete] // CHECK:STDOUT: %.loc7: type = splice_block %NSC.ref [concrete = constants.%NSC] { @@ -776,6 +788,8 @@ private export C; // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type.9be: = complete_type_witness %struct_type.x [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %struct.948: %struct_type.x = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %.eda: ref %empty_tuple.type = class_element_access file.%c.var, element0 [concrete] @@ -784,6 +798,8 @@ private export C; // CHECK:STDOUT: %struct_type.y: type = struct_type {.y: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type.9f4: = complete_type_witness %struct_type.y [concrete] // CHECK:STDOUT: %pattern_type.533: type = pattern_type %NSC [concrete] +// CHECK:STDOUT: %nsc.patt: %pattern_type.533 = ref_binding_pattern nsc [concrete] +// CHECK:STDOUT: %nsc.var_patt: %pattern_type.533 = var_pattern %nsc.patt [concrete] // CHECK:STDOUT: %struct.8ce: %struct_type.y = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %.e7e: ref %empty_tuple.type = class_element_access file.%nsc.var, element0 [concrete] // CHECK:STDOUT: %NSC.val: %NSC = struct_value (%empty_tuple) [concrete] @@ -813,15 +829,15 @@ private export C; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt [concrete] // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %c: ref %C = ref_binding c, %c.var [concrete = %c.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %nsc.patt: %pattern_type.533 = ref_binding_pattern nsc [concrete] -// CHECK:STDOUT: %nsc.var_patt: %pattern_type.533 = var_pattern %nsc.patt [concrete] +// CHECK:STDOUT: %nsc.patt: %pattern_type.533 = ref_binding_pattern nsc [concrete = constants.%nsc.patt] +// CHECK:STDOUT: %nsc.var_patt: %pattern_type.533 = var_pattern %nsc.patt [concrete = constants.%nsc.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %nsc.var: ref %NSC = var %nsc.var_patt [concrete] // CHECK:STDOUT: %.loc8: type = splice_block %NSC.ref [concrete = constants.%NSC] { @@ -878,6 +894,8 @@ private export C; // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type.9be: = complete_type_witness %struct_type.x [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %struct.948: %struct_type.x = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %.eda: ref %empty_tuple.type = class_element_access file.%c.var, element0 [concrete] @@ -886,6 +904,8 @@ private export C; // CHECK:STDOUT: %struct_type.y: type = struct_type {.y: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type.9f4: = complete_type_witness %struct_type.y [concrete] // CHECK:STDOUT: %pattern_type.533: type = pattern_type %NSC [concrete] +// CHECK:STDOUT: %nsc.patt: %pattern_type.533 = ref_binding_pattern nsc [concrete] +// CHECK:STDOUT: %nsc.var_patt: %pattern_type.533 = var_pattern %nsc.patt [concrete] // CHECK:STDOUT: %struct.8ce: %struct_type.y = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %.e7e: ref %empty_tuple.type = class_element_access file.%nsc.var, element0 [concrete] // CHECK:STDOUT: %NSC.val: %NSC = struct_value (%empty_tuple) [concrete] @@ -915,15 +935,15 @@ private export C; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt [concrete] // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %c: ref %C = ref_binding c, %c.var [concrete = %c.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %nsc.patt: %pattern_type.533 = ref_binding_pattern nsc [concrete] -// CHECK:STDOUT: %nsc.var_patt: %pattern_type.533 = var_pattern %nsc.patt [concrete] +// CHECK:STDOUT: %nsc.patt: %pattern_type.533 = ref_binding_pattern nsc [concrete = constants.%nsc.patt] +// CHECK:STDOUT: %nsc.var_patt: %pattern_type.533 = var_pattern %nsc.patt [concrete = constants.%nsc.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %nsc.var: ref %NSC = var %nsc.var_patt [concrete] // CHECK:STDOUT: %.loc8: type = splice_block %NSC.ref [concrete = constants.%NSC] { @@ -1035,6 +1055,8 @@ private export C; // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %struct: %struct_type.x = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %.eda: ref %empty_tuple.type = class_element_access file.%c.var, element0 [concrete] @@ -1055,8 +1077,8 @@ private export C; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt [concrete] // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] diff --git a/toolchain/check/testdata/packages/fail_conflict_no_namespaces.carbon b/toolchain/check/testdata/packages/fail_conflict_no_namespaces.carbon index d141f6e5f696..88f0d6ff23d1 100644 --- a/toolchain/check/testdata/packages/fail_conflict_no_namespaces.carbon +++ b/toolchain/check/testdata/packages/fail_conflict_no_namespaces.carbon @@ -73,6 +73,8 @@ import library "var"; // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %Foo.patt: %pattern_type.6b6 = ref_binding_pattern Foo [concrete] +// CHECK:STDOUT: %Foo.var_patt: %pattern_type.6b6 = var_pattern %Foo.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.150: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] @@ -104,8 +106,8 @@ import library "var"; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %Foo.patt: %pattern_type.6b6 = ref_binding_pattern Foo [concrete] -// CHECK:STDOUT: %Foo.var_patt: %pattern_type.6b6 = var_pattern %Foo.patt [concrete] +// CHECK:STDOUT: %Foo.patt: %pattern_type.6b6 = ref_binding_pattern Foo [concrete = constants.%Foo.patt] +// CHECK:STDOUT: %Foo.var_patt: %pattern_type.6b6 = var_pattern %Foo.patt [concrete = constants.%Foo.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.var: ref %i32 = var %Foo.var_patt [concrete] // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] diff --git a/toolchain/check/testdata/packages/fail_export_name_params.carbon b/toolchain/check/testdata/packages/fail_export_name_params.carbon index eea0e01dca39..7dba1980e554 100644 --- a/toolchain/check/testdata/packages/fail_export_name_params.carbon +++ b/toolchain/check/testdata/packages/fail_export_name_params.carbon @@ -39,6 +39,7 @@ export C2(T:! type); // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %C1.type: type = generic_class_type @C1 [concrete] // CHECK:STDOUT: %C1.generic: %C1.type = struct_value () [concrete] @@ -52,7 +53,7 @@ export C2(T:! type); // CHECK:STDOUT: .C2 = %C2.decl // CHECK:STDOUT: } // CHECK:STDOUT: %C1.decl: %C1.type = class_decl @C1 [concrete = constants.%C1.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc4_11.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_11.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_14.1: type = splice_block %.loc4_14.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -61,7 +62,7 @@ export C2(T:! type); // CHECK:STDOUT: %T.loc4_11.2: type = symbolic_binding T, 0 [symbolic = %T.loc4_11.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %C2.decl: %C2.type = class_decl @C2 [concrete = constants.%C2.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc5_11.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_11.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc5_14.1: type = splice_block %.loc5_14.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -72,22 +73,26 @@ export C2(T:! type); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C1(%T.loc4_11.2: type) { +// CHECK:STDOUT: %T.patt.loc4_11.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_11.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc4_11.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_11.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C2(%T.loc5_11.2: type) { +// CHECK:STDOUT: %T.patt.loc5_11.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_11.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc5_11.1: type = symbolic_binding T, 0 [symbolic = %T.loc5_11.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C1(constants.%T) { +// CHECK:STDOUT: %T.patt.loc4_11.2 => constants.%T.patt // CHECK:STDOUT: %T.loc4_11.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C2(constants.%T) { +// CHECK:STDOUT: %T.patt.loc5_11.2 => constants.%T.patt // CHECK:STDOUT: %T.loc5_11.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -97,6 +102,8 @@ export C2(T:! type); // CHECK:STDOUT: %C1.type: type = generic_class_type @C1 [concrete] // CHECK:STDOUT: %C1.generic: %C1.type = struct_value () [concrete] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %C2.type: type = generic_class_type @C2 [concrete] @@ -126,22 +133,26 @@ export C2(T:! type); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C1(imports.%Foo.import_ref.b3bc94.1: type) [from "a.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C2(imports.%Foo.import_ref.b3bc94.2: type) [from "a.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C1(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C2(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/packages/fail_import_type_error.carbon b/toolchain/check/testdata/packages/fail_import_type_error.carbon index d3441bc5091b..978f9aa555da 100644 --- a/toolchain/check/testdata/packages/fail_import_type_error.carbon +++ b/toolchain/check/testdata/packages/fail_import_type_error.carbon @@ -68,15 +68,15 @@ var d: i32 = d_ref; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a_ref.patt: = ref_binding_pattern a_ref [concrete] -// CHECK:STDOUT: %a_ref.var_patt: = var_pattern %a_ref.patt [concrete] +// CHECK:STDOUT: %a_ref.patt: = ref_binding_pattern a_ref [concrete = ] +// CHECK:STDOUT: %a_ref.var_patt: = var_pattern %a_ref.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %a_ref.var: ref = var %a_ref.var_patt [concrete = ] // CHECK:STDOUT: %x.ref.loc8: = name_ref x, [concrete = ] // CHECK:STDOUT: %a_ref: ref = ref_binding a_ref, [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b_ref.patt: = ref_binding_pattern b_ref [concrete] -// CHECK:STDOUT: %b_ref.var_patt: = var_pattern %b_ref.patt [concrete] +// CHECK:STDOUT: %b_ref.patt: = ref_binding_pattern b_ref [concrete = ] +// CHECK:STDOUT: %b_ref.var_patt: = var_pattern %b_ref.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %b_ref.var: ref = var %b_ref.var_patt [concrete = ] // CHECK:STDOUT: %.1: = splice_block [concrete = ] { @@ -85,8 +85,8 @@ var d: i32 = d_ref; // CHECK:STDOUT: } // CHECK:STDOUT: %b_ref: ref = ref_binding b_ref, [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c_ref.patt: = ref_binding_pattern c_ref [concrete] -// CHECK:STDOUT: %c_ref.var_patt: = var_pattern %c_ref.patt [concrete] +// CHECK:STDOUT: %c_ref.patt: = ref_binding_pattern c_ref [concrete = ] +// CHECK:STDOUT: %c_ref.var_patt: = var_pattern %c_ref.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %c_ref.var: ref = var %c_ref.var_patt [concrete = ] // CHECK:STDOUT: %.2: = splice_block [concrete = ] { @@ -95,8 +95,8 @@ var d: i32 = d_ref; // CHECK:STDOUT: } // CHECK:STDOUT: %c_ref: ref = ref_binding c_ref, [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d_ref.patt: = ref_binding_pattern d_ref [concrete] -// CHECK:STDOUT: %d_ref.var_patt: = var_pattern %d_ref.patt [concrete] +// CHECK:STDOUT: %d_ref.patt: = ref_binding_pattern d_ref [concrete = ] +// CHECK:STDOUT: %d_ref.var_patt: = var_pattern %d_ref.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %d_ref.var: ref = var %d_ref.var_patt [concrete = ] // CHECK:STDOUT: %.loc23: type = splice_block %ptr [concrete = ] { @@ -123,6 +123,14 @@ var d: i32 = d_ref; // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.6b6 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.6b6 = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.6b6 = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.6b6 = ref_binding_pattern d [concrete] +// CHECK:STDOUT: %d.var_patt: %pattern_type.6b6 = var_pattern %d.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -154,29 +162,29 @@ var d: i32 = d_ref; // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.6b6 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.6b6 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %i32 = var %a.var_patt [concrete] // CHECK:STDOUT: %i32.loc6: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %a: ref %i32 = ref_binding a, %a.var [concrete = %a.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var %b.var_patt [concrete] // CHECK:STDOUT: %i32.loc7: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %b: ref %i32 = ref_binding b, %b.var [concrete = %b.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.6b6 = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.6b6 = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.6b6 = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type.6b6 = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %i32 = var %c.var_patt [concrete] // CHECK:STDOUT: %i32.loc8: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %c: ref %i32 = ref_binding c, %c.var [concrete = %c.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.6b6 = ref_binding_pattern d [concrete] -// CHECK:STDOUT: %d.var_patt: %pattern_type.6b6 = var_pattern %d.patt [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.6b6 = ref_binding_pattern d [concrete = constants.%d.patt] +// CHECK:STDOUT: %d.var_patt: %pattern_type.6b6 = var_pattern %d.patt [concrete = constants.%d.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %i32 = var %d.var_patt [concrete] // CHECK:STDOUT: %i32.loc9: type = type_literal constants.%i32 [concrete = constants.%i32] diff --git a/toolchain/check/testdata/packages/fail_name_with_import_failure.carbon b/toolchain/check/testdata/packages/fail_name_with_import_failure.carbon index d5448aab10bf..787689ec8c1e 100644 --- a/toolchain/check/testdata/packages/fail_name_with_import_failure.carbon +++ b/toolchain/check/testdata/packages/fail_name_with_import_failure.carbon @@ -28,6 +28,8 @@ var a: () = A(); // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type = var_pattern %a.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -38,8 +40,8 @@ var a: () = A(); // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %empty_tuple.type = var %a.var_patt [concrete] // CHECK:STDOUT: %.loc8_9.1: type = splice_block %.loc8_9.3 [concrete = constants.%empty_tuple.type] { diff --git a/toolchain/check/testdata/packages/implicit_imports_entities.carbon b/toolchain/check/testdata/packages/implicit_imports_entities.carbon index a5b081c6089f..3960ef033c2c 100644 --- a/toolchain/check/testdata/packages/implicit_imports_entities.carbon +++ b/toolchain/check/testdata/packages/implicit_imports_entities.carbon @@ -330,10 +330,14 @@ import Other library "o1"; // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.0b2: type = pattern_type %C1 [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.0b2 = ref_binding_pattern c1 [concrete] +// CHECK:STDOUT: %c1.var_patt: %pattern_type.0b2 = var_pattern %c1.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %C1.val: %C1 = struct_value () [concrete] // CHECK:STDOUT: %C2: type = class_type @C2 [concrete] // CHECK:STDOUT: %pattern_type.5ca: type = pattern_type %C2 [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.5ca = ref_binding_pattern c2 [concrete] +// CHECK:STDOUT: %c2.var_patt: %pattern_type.5ca = var_pattern %c2.patt [concrete] // CHECK:STDOUT: %C2.val: %C2 = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -356,15 +360,15 @@ import Other library "o1"; // CHECK:STDOUT: %default.import.loc2_35.1 = import // CHECK:STDOUT: %default.import.loc2_35.2 = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c1.patt: %pattern_type.0b2 = ref_binding_pattern c1 [concrete] -// CHECK:STDOUT: %c1.var_patt: %pattern_type.0b2 = var_pattern %c1.patt [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.0b2 = ref_binding_pattern c1 [concrete = constants.%c1.patt] +// CHECK:STDOUT: %c1.var_patt: %pattern_type.0b2 = var_pattern %c1.patt [concrete = constants.%c1.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c1.var: ref %C1 = var %c1.var_patt [concrete] // CHECK:STDOUT: %C1.ref: type = name_ref C1, imports.%Main.C1 [concrete = constants.%C1] // CHECK:STDOUT: %c1: ref %C1 = ref_binding c1, %c1.var [concrete = %c1.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c2.patt: %pattern_type.5ca = ref_binding_pattern c2 [concrete] -// CHECK:STDOUT: %c2.var_patt: %pattern_type.5ca = var_pattern %c2.patt [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.5ca = ref_binding_pattern c2 [concrete = constants.%c2.patt] +// CHECK:STDOUT: %c2.var_patt: %pattern_type.5ca = var_pattern %c2.patt [concrete = constants.%c2.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c2.var: ref %C2 = var %c2.var_patt [concrete] // CHECK:STDOUT: %C2.ref: type = name_ref C2, imports.%Main.C2 [concrete = constants.%C2] @@ -418,6 +422,8 @@ import Other library "o1"; // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C1 [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type = ref_binding_pattern c1 [concrete] +// CHECK:STDOUT: %c1.var_patt: %pattern_type = var_pattern %c1.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %C1.val: %C1 = struct_value () [concrete] // CHECK:STDOUT: } @@ -436,8 +442,8 @@ import Other library "o1"; // CHECK:STDOUT: %default.import.loc2_22.1 = import // CHECK:STDOUT: %default.import.loc2_22.2 = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c1.patt: %pattern_type = ref_binding_pattern c1 [concrete] -// CHECK:STDOUT: %c1.var_patt: %pattern_type = var_pattern %c1.patt [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type = ref_binding_pattern c1 [concrete = constants.%c1.patt] +// CHECK:STDOUT: %c1.var_patt: %pattern_type = var_pattern %c1.patt [concrete = constants.%c1.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c1.var: ref %C1 = var %c1.var_patt [concrete] // CHECK:STDOUT: %C1.ref: type = name_ref C1, imports.%Main.C1 [concrete = constants.%C1] @@ -484,6 +490,8 @@ import Other library "o1"; // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: } @@ -506,8 +514,8 @@ import Other library "o1"; // CHECK:STDOUT: %default.import.loc2_22.1 = import // CHECK:STDOUT: %default.import.loc2_22.2 = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt [concrete] // CHECK:STDOUT: %.loc4: type = splice_block %C.ref [concrete = constants.%C] { @@ -555,10 +563,14 @@ import Other library "o1"; // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.1e6: type = pattern_type %O1 [concrete] +// CHECK:STDOUT: %o1.patt: %pattern_type.1e6 = ref_binding_pattern o1 [concrete] +// CHECK:STDOUT: %o1.var_patt: %pattern_type.1e6 = var_pattern %o1.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %O1.val: %O1 = struct_value () [concrete] // CHECK:STDOUT: %O2: type = class_type @O2 [concrete] // CHECK:STDOUT: %pattern_type.327: type = pattern_type %O2 [concrete] +// CHECK:STDOUT: %o2.patt: %pattern_type.327 = ref_binding_pattern o2 [concrete] +// CHECK:STDOUT: %o2.var_patt: %pattern_type.327 = var_pattern %o2.patt [concrete] // CHECK:STDOUT: %O2.val: %O2 = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -587,8 +599,8 @@ import Other library "o1"; // CHECK:STDOUT: %default.import.loc2_25.2 = import // CHECK:STDOUT: %Other.import = import Other // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %o1.patt: %pattern_type.1e6 = ref_binding_pattern o1 [concrete] -// CHECK:STDOUT: %o1.var_patt: %pattern_type.1e6 = var_pattern %o1.patt [concrete] +// CHECK:STDOUT: %o1.patt: %pattern_type.1e6 = ref_binding_pattern o1 [concrete = constants.%o1.patt] +// CHECK:STDOUT: %o1.var_patt: %pattern_type.1e6 = var_pattern %o1.patt [concrete = constants.%o1.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %o1.var: ref %O1 = var %o1.var_patt [concrete] // CHECK:STDOUT: %.loc6: type = splice_block %O1.ref [concrete = constants.%O1] { @@ -597,8 +609,8 @@ import Other library "o1"; // CHECK:STDOUT: } // CHECK:STDOUT: %o1: ref %O1 = ref_binding o1, %o1.var [concrete = %o1.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %o2.patt: %pattern_type.327 = ref_binding_pattern o2 [concrete] -// CHECK:STDOUT: %o2.var_patt: %pattern_type.327 = var_pattern %o2.patt [concrete] +// CHECK:STDOUT: %o2.patt: %pattern_type.327 = ref_binding_pattern o2 [concrete = constants.%o2.patt] +// CHECK:STDOUT: %o2.var_patt: %pattern_type.327 = var_pattern %o2.patt [concrete = constants.%o2.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %o2.var: ref %O2 = var %o2.var_patt [concrete] // CHECK:STDOUT: %.loc7: type = splice_block %O2.ref [concrete = constants.%O2] { @@ -657,6 +669,8 @@ import Other library "o1"; // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %O1 [concrete] +// CHECK:STDOUT: %o1.patt: %pattern_type = ref_binding_pattern o1 [concrete] +// CHECK:STDOUT: %o1.var_patt: %pattern_type = var_pattern %o1.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %O1.val: %O1 = struct_value () [concrete] // CHECK:STDOUT: } @@ -680,8 +694,8 @@ import Other library "o1"; // CHECK:STDOUT: %default.import.loc2_22.2 = import // CHECK:STDOUT: %Other.import = import Other // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %o1.patt: %pattern_type = ref_binding_pattern o1 [concrete] -// CHECK:STDOUT: %o1.var_patt: %pattern_type = var_pattern %o1.patt [concrete] +// CHECK:STDOUT: %o1.patt: %pattern_type = ref_binding_pattern o1 [concrete = constants.%o1.patt] +// CHECK:STDOUT: %o1.var_patt: %pattern_type = var_pattern %o1.patt [concrete = constants.%o1.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %o1.var: ref %O1 = var %o1.var_patt [concrete] // CHECK:STDOUT: %.loc6: type = splice_block %O1.ref [concrete = constants.%O1] { diff --git a/toolchain/check/testdata/packages/implicit_imports_prelude.carbon b/toolchain/check/testdata/packages/implicit_imports_prelude.carbon index 654efd5a1b09..8fdb979054ce 100644 --- a/toolchain/check/testdata/packages/implicit_imports_prelude.carbon +++ b/toolchain/check/testdata/packages/implicit_imports_prelude.carbon @@ -34,6 +34,8 @@ var b: i32 = a; // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.6b6 = var_pattern %a.patt [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -73,8 +75,8 @@ var b: i32 = a; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.6b6 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.6b6 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %i32 = var %a.var_patt [concrete] // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] @@ -103,6 +105,10 @@ var b: i32 = a; // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.6b6 = var_pattern %a.patt [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.ac8: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N) [symbolic] // CHECK:STDOUT: %Int.as.Copy.impl.Op.5e0: %Int.as.Copy.impl.Op.type.ac8 = struct_value () [symbolic] @@ -124,9 +130,7 @@ var b: i32 = a; // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } // CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] -// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.6b6 = var_pattern %a.patt [concrete] -// CHECK:STDOUT: %a.var: ref %i32 = var %a.var_patt [concrete] +// CHECK:STDOUT: %a.var: ref %i32 = var constants.%a.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.cd6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.ac8) = import_ref Core//prelude/parts/int, loc{{\d+_\d+}}, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.5e0)] // CHECK:STDOUT: %Copy.impl_witness_table.367 = impl_witness_table (%Core.import_ref.cd6), @Int.as.Copy.impl [concrete] @@ -142,8 +146,8 @@ var b: i32 = a; // CHECK:STDOUT: %default.import.loc2_19.2 = import // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var %b.var_patt [concrete] // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] diff --git a/toolchain/check/testdata/packages/loaded_global.carbon b/toolchain/check/testdata/packages/loaded_global.carbon index d67760fa181b..124fcf379614 100644 --- a/toolchain/check/testdata/packages/loaded_global.carbon +++ b/toolchain/check/testdata/packages/loaded_global.carbon @@ -64,8 +64,12 @@ var package_b: () = package.B(); // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type = var_pattern %a.patt [concrete] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] +// CHECK:STDOUT: %package_a.patt: %pattern_type = ref_binding_pattern package_a [concrete] +// CHECK:STDOUT: %package_a.var_patt: %pattern_type = var_pattern %package_a.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -81,8 +85,8 @@ var package_b: () = package.B(); // CHECK:STDOUT: %Implicit.import = import Implicit // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %empty_tuple.type = var %a.var_patt [concrete] // CHECK:STDOUT: %.loc4_9.1: type = splice_block %.loc4_9.3 [concrete = constants.%empty_tuple.type] { @@ -91,8 +95,8 @@ var package_b: () = package.B(); // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %empty_tuple.type = ref_binding a, %a.var [concrete = %a.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %package_a.patt: %pattern_type = ref_binding_pattern package_a [concrete] -// CHECK:STDOUT: %package_a.var_patt: %pattern_type = var_pattern %package_a.patt [concrete] +// CHECK:STDOUT: %package_a.patt: %pattern_type = ref_binding_pattern package_a [concrete = constants.%package_a.patt] +// CHECK:STDOUT: %package_a.var_patt: %pattern_type = var_pattern %package_a.patt [concrete = constants.%package_a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %package_a.var: ref %empty_tuple.type = var %package_a.var_patt [concrete] // CHECK:STDOUT: %.loc6_17.1: type = splice_block %.loc6_17.3 [concrete = constants.%empty_tuple.type] { @@ -138,8 +142,12 @@ var package_b: () = package.B(); // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type = var_pattern %b.patt [concrete] // CHECK:STDOUT: %B.type: type = fn_type @B [concrete] // CHECK:STDOUT: %B: %B.type = struct_value () [concrete] +// CHECK:STDOUT: %package_b.patt: %pattern_type = ref_binding_pattern package_b [concrete] +// CHECK:STDOUT: %package_b.var_patt: %pattern_type = var_pattern %package_b.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -154,8 +162,8 @@ var package_b: () = package.B(); // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %empty_tuple.type = var %b.var_patt [concrete] // CHECK:STDOUT: %.loc6_9.1: type = splice_block %.loc6_9.3 [concrete = constants.%empty_tuple.type] { @@ -164,8 +172,8 @@ var package_b: () = package.B(); // CHECK:STDOUT: } // CHECK:STDOUT: %b: ref %empty_tuple.type = ref_binding b, %b.var [concrete = %b.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %package_b.patt: %pattern_type = ref_binding_pattern package_b [concrete] -// CHECK:STDOUT: %package_b.var_patt: %pattern_type = var_pattern %package_b.patt [concrete] +// CHECK:STDOUT: %package_b.patt: %pattern_type = ref_binding_pattern package_b [concrete = constants.%package_b.patt] +// CHECK:STDOUT: %package_b.var_patt: %pattern_type = var_pattern %package_b.patt [concrete = constants.%package_b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %package_b.var: ref %empty_tuple.type = var %package_b.var_patt [concrete] // CHECK:STDOUT: %.loc8_17.1: type = splice_block %.loc8_17.3 [concrete = constants.%empty_tuple.type] { diff --git a/toolchain/check/testdata/packages/missing_prelude.carbon b/toolchain/check/testdata/packages/missing_prelude.carbon index fb144256d097..47605d904c7b 100644 --- a/toolchain/check/testdata/packages/missing_prelude.carbon +++ b/toolchain/check/testdata/packages/missing_prelude.carbon @@ -132,8 +132,8 @@ let n: type = i32; // CHECK:STDOUT: .n = %n // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: = ref_binding_pattern n [concrete] -// CHECK:STDOUT: %n.var_patt: = var_pattern %n.patt [concrete] +// CHECK:STDOUT: %n.patt: = ref_binding_pattern n [concrete = ] +// CHECK:STDOUT: %n.var_patt: = var_pattern %n.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %n.var: ref = var %n.var_patt [concrete = ] // CHECK:STDOUT: %.loc8: type = type_literal [concrete = ] @@ -168,8 +168,8 @@ let n: type = i32; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: = ref_binding_pattern n [concrete] -// CHECK:STDOUT: %n.var_patt: = var_pattern %n.patt [concrete] +// CHECK:STDOUT: %n.patt: = ref_binding_pattern n [concrete = ] +// CHECK:STDOUT: %n.var_patt: = var_pattern %n.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %n.var: ref = var %n.var_patt [concrete = ] // CHECK:STDOUT: %.loc10: type = type_literal [concrete = ] @@ -191,11 +191,15 @@ let n: type = i32; // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %N.patt: %pattern_type.51d = symbolic_binding_pattern N, 1 [symbolic] // CHECK:STDOUT: %N: %T = symbolic_binding N, 1 [symbolic] // CHECK:STDOUT: %.7b0: Core.Form = init_form %X [concrete] // CHECK:STDOUT: %pattern_type.e00: type = pattern_type %X [concrete] +// CHECK:STDOUT: %return.param_patt.cb6: %pattern_type.e00 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.88a: %pattern_type.e00 = return_slot_pattern %return.param_patt.cb6, %X [concrete] // CHECK:STDOUT: %Int.type: type = fn_type @Int [concrete] // CHECK:STDOUT: %Int: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] @@ -206,7 +210,11 @@ let n: type = i32; // CHECK:STDOUT: %Self: %ImplicitAs.type.3aa = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] // CHECK:STDOUT: %pattern_type.701: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt: %pattern_type.701 = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt: %pattern_type.701 = at_binding_pattern self, %self.param_patt [symbolic] // CHECK:STDOUT: %.184: Core.Form = init_form %T [symbolic] +// CHECK:STDOUT: %return.param_patt.41d: %pattern_type.51d = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.b39: %pattern_type.51d = return_slot_pattern %return.param_patt.41d, %T [symbolic] // CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.type: type = fn_type @ImplicitAs.WithSelf.Convert, @ImplicitAs.WithSelf(%T, %Self) [symbolic] // CHECK:STDOUT: %ImplicitAs.WithSelf.Convert: %ImplicitAs.WithSelf.Convert.type = struct_value () [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%T) [symbolic] @@ -221,10 +229,10 @@ let n: type = i32; // CHECK:STDOUT: } // CHECK:STDOUT: %X.decl: type = class_decl @X [concrete = constants.%X] {} {} // CHECK:STDOUT: %Int.decl: %Int.type = fn_decl @Int [concrete = constants.%Int] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %N.patt: @Int.%pattern_type (%pattern_type.51d) = symbolic_binding_pattern N, 1 [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.e00 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.e00 = return_slot_pattern %return.param_patt, %X.ref [concrete] +// CHECK:STDOUT: %T.patt.loc6_9.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %N.patt.loc6_26.1: @Int.%pattern_type (%pattern_type.51d) = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc6_26.2 (constants.%N.patt)] +// CHECK:STDOUT: %return.param_patt: %pattern_type.e00 = out_param_pattern [concrete = constants.%return.param_patt.cb6] +// CHECK:STDOUT: %return.patt: %pattern_type.e00 = return_slot_pattern %return.param_patt, %X.ref [concrete = constants.%return.patt.88a] // CHECK:STDOUT: } { // CHECK:STDOUT: %X.ref: type = name_ref X, file.%X.decl [concrete = constants.%X] // CHECK:STDOUT: %.loc6_35: Core.Form = init_form %X.ref [concrete = constants.%.7b0] @@ -242,7 +250,7 @@ let n: type = i32; // CHECK:STDOUT: %return: ref %X = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %ImplicitAs.decl: %ImplicitAs.type.0ff = interface_decl @ImplicitAs [concrete = constants.%ImplicitAs.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc8_23.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_23.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8_26.1: type = splice_block %.loc8_26.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -253,6 +261,7 @@ let n: type = i32; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(%T.loc8_23.2: type) { +// CHECK:STDOUT: %T.patt.loc8_23.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_23.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc8_23.1: type = symbolic_binding T, 0 [symbolic = %T.loc8_23.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -265,10 +274,10 @@ let n: type = i32; // CHECK:STDOUT: // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.decl: @ImplicitAs.WithSelf.%ImplicitAs.WithSelf.Convert.type (%ImplicitAs.WithSelf.Convert.type) = fn_decl @ImplicitAs.WithSelf.Convert [symbolic = @ImplicitAs.WithSelf.%ImplicitAs.WithSelf.Convert (constants.%ImplicitAs.WithSelf.Convert)] { -// CHECK:STDOUT: %self.param_patt: @ImplicitAs.WithSelf.Convert.%pattern_type.loc9_14 (%pattern_type.701) = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: @ImplicitAs.WithSelf.Convert.%pattern_type.loc9_14 (%pattern_type.701) = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: @ImplicitAs.WithSelf.Convert.%pattern_type.loc9_23 (%pattern_type.51d) = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: @ImplicitAs.WithSelf.Convert.%pattern_type.loc9_23 (%pattern_type.51d) = return_slot_pattern %return.param_patt, %T.ref [concrete] +// CHECK:STDOUT: %self.param_patt.loc9_14.1: @ImplicitAs.WithSelf.Convert.%pattern_type.loc9_14 (%pattern_type.701) = value_param_pattern [symbolic = %self.param_patt.loc9_14.2 (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt.loc9_14.1: @ImplicitAs.WithSelf.Convert.%pattern_type.loc9_14 (%pattern_type.701) = at_binding_pattern self, %self.param_patt.loc9_14.1 [symbolic = %self.patt.loc9_14.2 (constants.%self.patt)] +// CHECK:STDOUT: %return.param_patt.loc9_23.1: @ImplicitAs.WithSelf.Convert.%pattern_type.loc9_23 (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt.loc9_23.2 (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt.loc9_20.1: @ImplicitAs.WithSelf.Convert.%pattern_type.loc9_23 (%pattern_type.51d) = return_slot_pattern %return.param_patt.loc9_23.1, %T.ref [symbolic = %return.patt.loc9_20.2 (constants.%return.patt.b39)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, @ImplicitAs.%T.loc8_23.2 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %.loc9_23.2: Core.Form = init_form %T.ref [symbolic = %.loc9_23.1 (constants.%.184)] @@ -305,9 +314,11 @@ let n: type = i32; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Int(%T.loc6_9.2: type, %N.loc6_26.2: @Int.%T.loc6_9.1 (%T)) { +// CHECK:STDOUT: %T.patt.loc6_9.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_9.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc6_9.1: type = symbolic_binding T, 0 [symbolic = %T.loc6_9.1 (constants.%T)] -// CHECK:STDOUT: %N.loc6_26.1: @Int.%T.loc6_9.1 (%T) = symbolic_binding N, 1 [symbolic = %N.loc6_26.1 (constants.%N)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc6_9.1 [symbolic = %pattern_type (constants.%pattern_type.51d)] +// CHECK:STDOUT: %N.patt.loc6_26.2: @Int.%pattern_type (%pattern_type.51d) = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc6_26.2 (constants.%N.patt)] +// CHECK:STDOUT: %N.loc6_26.1: @Int.%T.loc6_9.1 (%T) = symbolic_binding N, 1 [symbolic = %N.loc6_26.1 (constants.%N)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -326,19 +337,26 @@ let n: type = i32; // CHECK:STDOUT: %Self: @ImplicitAs.WithSelf.Convert.%ImplicitAs.type (%ImplicitAs.type.3aa) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc9_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc9_14.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type.loc9_14: type = pattern_type %Self.as_type.loc9_14.1 [symbolic = %pattern_type.loc9_14 (constants.%pattern_type.701)] +// CHECK:STDOUT: %self.param_patt.loc9_14.2: @ImplicitAs.WithSelf.Convert.%pattern_type.loc9_14 (%pattern_type.701) = value_param_pattern [symbolic = %self.param_patt.loc9_14.2 (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt.loc9_14.2: @ImplicitAs.WithSelf.Convert.%pattern_type.loc9_14 (%pattern_type.701) = at_binding_pattern self, %self.param_patt.loc9_14.2 [symbolic = %self.patt.loc9_14.2 (constants.%self.patt)] // CHECK:STDOUT: %.loc9_23.1: Core.Form = init_form %T [symbolic = %.loc9_23.1 (constants.%.184)] // CHECK:STDOUT: %pattern_type.loc9_23: type = pattern_type %T [symbolic = %pattern_type.loc9_23 (constants.%pattern_type.51d)] +// CHECK:STDOUT: %return.param_patt.loc9_23.2: @ImplicitAs.WithSelf.Convert.%pattern_type.loc9_23 (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt.loc9_23.2 (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt.loc9_20.2: @ImplicitAs.WithSelf.Convert.%pattern_type.loc9_23 (%pattern_type.51d) = return_slot_pattern %return.param_patt.loc9_23.2, %T [symbolic = %return.patt.loc9_20.2 (constants.%return.patt.b39)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @ImplicitAs.WithSelf.Convert.%Self.as_type.loc9_14.1 (%Self.as_type)) -> out %return.param: @ImplicitAs.WithSelf.Convert.%T (%T); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Int(constants.%T, constants.%N) { +// CHECK:STDOUT: %T.patt.loc6_9.2 => constants.%T.patt // CHECK:STDOUT: %T.loc6_9.1 => constants.%T -// CHECK:STDOUT: %N.loc6_26.1 => constants.%N // CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d +// CHECK:STDOUT: %N.patt.loc6_26.2 => constants.%N.patt +// CHECK:STDOUT: %N.loc6_26.1 => constants.%N // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(constants.%T) { +// CHECK:STDOUT: %T.patt.loc8_23.2 => constants.%T.patt // CHECK:STDOUT: %T.loc8_23.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -350,8 +368,12 @@ let n: type = i32; // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc9_14.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type.loc9_14 => constants.%pattern_type.701 +// CHECK:STDOUT: %self.param_patt.loc9_14.2 => constants.%self.param_patt +// CHECK:STDOUT: %self.patt.loc9_14.2 => constants.%self.patt // CHECK:STDOUT: %.loc9_23.1 => constants.%.184 // CHECK:STDOUT: %pattern_type.loc9_23 => constants.%pattern_type.51d +// CHECK:STDOUT: %return.param_patt.loc9_23.2 => constants.%return.param_patt.41d +// CHECK:STDOUT: %return.patt.loc9_20.2 => constants.%return.patt.b39 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_use_fake_int.carbon @@ -361,13 +383,18 @@ let n: type = i32; // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.e00: type = pattern_type %X [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.e00 = value_binding_pattern n [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %Int.type: type = fn_type @Int [concrete] // CHECK:STDOUT: %Int: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] -// CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] // CHECK:STDOUT: %N: %T = symbolic_binding N, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %N.patt.9f0: %pattern_type.51d = symbolic_binding_pattern N, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %pattern_type.dc0: type = pattern_type Core.IntLiteral [concrete] +// CHECK:STDOUT: %N.patt.94a: %pattern_type.dc0 = symbolic_binding_pattern N, 1 [symbolic] // CHECK:STDOUT: %Int.specific_fn: = specific_function %Int, @Int(Core.IntLiteral, %int_32) [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -376,8 +403,12 @@ let n: type = i32; // CHECK:STDOUT: %ImplicitAs.assoc_type.fcc: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%T) [symbolic] // CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.type.97e: type = fn_type @ImplicitAs.WithSelf.Convert, @ImplicitAs.WithSelf(%T, %Self.294) [symbolic] // CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.945: %ImplicitAs.WithSelf.Convert.type.97e = struct_value () [symbolic] +// CHECK:STDOUT: %return.param_patt.41d: %pattern_type.51d = out_param_pattern [symbolic] +// CHECK:STDOUT: %return.patt.c39: %pattern_type.51d = return_slot_pattern %return.param_patt.41d, invalid [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.294 [symbolic] // CHECK:STDOUT: %pattern_type.20e: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %self.param_patt: %pattern_type.20e = value_param_pattern [symbolic] +// CHECK:STDOUT: %self.patt: %pattern_type.20e = at_binding_pattern self, %self.param_patt [symbolic] // CHECK:STDOUT: %.184: Core.Form = init_form %T [symbolic] // CHECK:STDOUT: %ImplicitAs.type.5f1: type = facet_type <@ImplicitAs, @ImplicitAs(type)> [concrete] // CHECK:STDOUT: %Self.966: %ImplicitAs.type.5f1 = symbolic_binding Self, 1 [symbolic] @@ -425,17 +456,18 @@ let n: type = i32; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: %pattern_type.e00 = value_binding_pattern n [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.e00 = value_binding_pattern n [concrete = constants.%n.patt] // CHECK:STDOUT: } +// CHECK:STDOUT: %.loc21_17: %X = converted @__global_init.%.loc21_17.3, [concrete = ] // CHECK:STDOUT: %.loc21_12: type = splice_block %X.ref [concrete = constants.%X] { // CHECK:STDOUT: %Core.ref: = name_ref Core, imports.%Core [concrete = imports.%Core] // CHECK:STDOUT: %X.ref: type = name_ref X, imports.%Core.X [concrete = constants.%X] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc21_17: %X = converted @__global_init.%.loc21_17.3, [concrete = ] // CHECK:STDOUT: %n: %X = value_binding n, [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(imports.%Core.import_ref.b3bc94.4: type) [from "prelude_fake_int.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -460,9 +492,11 @@ let n: type = i32; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Int(imports.%Core.import_ref.b3bc94.1: type, imports.%Core.import_ref.b42: @Int.%T (%T)) [from "prelude_fake_int.carbon"] { +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %N: @Int.%T (%T) = symbolic_binding N, 1 [symbolic = %N (constants.%N)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.51d)] +// CHECK:STDOUT: %N.patt: @Int.%pattern_type (%pattern_type.51d) = symbolic_binding_pattern N, 1 [symbolic = %N.patt (constants.%N.patt.9f0)] +// CHECK:STDOUT: %N: @Int.%T (%T) = symbolic_binding N, 1 [symbolic = %N (constants.%N)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -475,8 +509,12 @@ let n: type = i32; // CHECK:STDOUT: %Self: @ImplicitAs.WithSelf.Convert.%ImplicitAs.type (%ImplicitAs.type.3aa) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self.294)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type.1: type = pattern_type %Self.as_type [symbolic = %pattern_type.1 (constants.%pattern_type.20e)] +// CHECK:STDOUT: %self.param_patt: @ImplicitAs.WithSelf.Convert.%pattern_type.1 (%pattern_type.20e) = value_param_pattern [symbolic = %self.param_patt (constants.%self.param_patt)] +// CHECK:STDOUT: %self.patt: @ImplicitAs.WithSelf.Convert.%pattern_type.1 (%pattern_type.20e) = at_binding_pattern self, %self.param_patt [symbolic = %self.patt (constants.%self.patt)] // CHECK:STDOUT: %.1: Core.Form = init_form %T [symbolic = %.1 (constants.%.184)] // CHECK:STDOUT: %pattern_type.2: type = pattern_type %T [symbolic = %pattern_type.2 (constants.%pattern_type.51d)] +// CHECK:STDOUT: %return.param_patt: @ImplicitAs.WithSelf.Convert.%pattern_type.2 (%pattern_type.51d) = out_param_pattern [symbolic = %return.param_patt (constants.%return.param_patt.41d)] +// CHECK:STDOUT: %return.patt: @ImplicitAs.WithSelf.Convert.%pattern_type.2 (%pattern_type.51d) = return_slot_pattern %return.param_patt, invalid [symbolic = %return.patt (constants.%return.patt.c39)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -492,20 +530,25 @@ let n: type = i32; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Int(constants.%T, constants.%N) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %N => constants.%N // CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d +// CHECK:STDOUT: %N.patt => constants.%N.patt.9f0 +// CHECK:STDOUT: %N => constants.%N // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Int(Core.IntLiteral, constants.%int_32) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => Core.IntLiteral -// CHECK:STDOUT: %N => constants.%int_32 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.dc0 +// CHECK:STDOUT: %N.patt => constants.%N.patt.94a +// CHECK:STDOUT: %N => constants.%int_32 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(constants.%T) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -517,11 +560,16 @@ let n: type = i32; // CHECK:STDOUT: %Self => constants.%Self.294 // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type // CHECK:STDOUT: %pattern_type.1 => constants.%pattern_type.20e +// CHECK:STDOUT: %self.param_patt => constants.%self.param_patt +// CHECK:STDOUT: %self.patt => constants.%self.patt // CHECK:STDOUT: %.1 => constants.%.184 // CHECK:STDOUT: %pattern_type.2 => constants.%pattern_type.51d +// CHECK:STDOUT: %return.param_patt => constants.%return.param_patt.41d +// CHECK:STDOUT: %return.patt => constants.%return.patt.c39 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(type) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => type // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -541,6 +589,7 @@ let n: type = i32; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(constants.%X) { +// CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T => constants.%X // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -565,8 +614,10 @@ let n: type = i32; // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %N.patt.9f0: %pattern_type.51d = symbolic_binding_pattern N, 1 [symbolic] // CHECK:STDOUT: %N: %T = symbolic_binding N, 1 [symbolic] // CHECK:STDOUT: %Int.type: type = generic_class_type @Int [concrete] // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] @@ -575,8 +626,10 @@ let n: type = i32; // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %pattern_type.dc0: type = pattern_type Core.IntLiteral [concrete] +// CHECK:STDOUT: %N.patt.94a: %pattern_type.dc0 = symbolic_binding_pattern N, 1 [symbolic] // CHECK:STDOUT: %Int.382: type = class_type @Int, @Int(Core.IntLiteral, %int_32) [concrete] // CHECK:STDOUT: %pattern_type.0c6: type = pattern_type %Int.382 [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.0c6 = value_binding_pattern n [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %Int.val: %Int.382 = struct_value () [concrete] // CHECK:STDOUT: %.d67: ref %Int.382 = temporary invalid, %Int.val [concrete] @@ -588,8 +641,8 @@ let n: type = i32; // CHECK:STDOUT: .n = %n // CHECK:STDOUT: } // CHECK:STDOUT: %Int.decl: %Int.type = class_decl @Int [concrete = constants.%Int.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] -// CHECK:STDOUT: %N.patt: @Int.%pattern_type (%pattern_type.51d) = symbolic_binding_pattern N, 1 [concrete] +// CHECK:STDOUT: %T.patt.loc6_12.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_12.2 (constants.%T.patt)] +// CHECK:STDOUT: %N.patt.loc6_29.1: @Int.%pattern_type (%pattern_type.51d) = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc6_29.2 (constants.%N.patt.9f0)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6_15.1: type = splice_block %.loc6_15.2 [concrete = type] { // CHECK:STDOUT: %.Self.loc6_12: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -603,21 +656,23 @@ let n: type = i32; // CHECK:STDOUT: %N.loc6_29.2: @Int.%T.loc6_12.1 (%T) = symbolic_binding N, 1 [symbolic = %N.loc6_29.1 (constants.%N)] // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: %pattern_type.0c6 = value_binding_pattern n [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.0c6 = value_binding_pattern n [concrete = constants.%n.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc8_8: type = type_literal constants.%Int.382 [concrete = constants.%Int.382] // CHECK:STDOUT: %.loc8_15.1: ref %Int.382 = temporary_storage // CHECK:STDOUT: %.loc8_15.2: init %Int.382 to %.loc8_15.1 = class_init () [concrete = constants.%Int.val] // CHECK:STDOUT: %.loc8_15.3: init %Int.382 = converted @__global_init.%.loc8, %.loc8_15.2 [concrete = constants.%Int.val] // CHECK:STDOUT: %.loc8_15.4: ref %Int.382 = temporary %.loc8_15.1, %.loc8_15.3 [concrete = constants.%.d67] // CHECK:STDOUT: %.loc8_15.5: %Int.382 = acquire_value %.loc8_15.4 [concrete = constants.%Int.val] +// CHECK:STDOUT: %.loc8_8: type = type_literal constants.%Int.382 [concrete = constants.%Int.382] // CHECK:STDOUT: %n: %Int.382 = value_binding n, %.loc8_15.5 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Int(%T.loc6_12.2: type, %N.loc6_29.2: @Int.%T.loc6_12.1 (%T)) { +// CHECK:STDOUT: %T.patt.loc6_12.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_12.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc6_12.1: type = symbolic_binding T, 0 [symbolic = %T.loc6_12.1 (constants.%T)] -// CHECK:STDOUT: %N.loc6_29.1: @Int.%T.loc6_12.1 (%T) = symbolic_binding N, 1 [symbolic = %N.loc6_29.1 (constants.%N)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc6_12.1 [symbolic = %pattern_type (constants.%pattern_type.51d)] +// CHECK:STDOUT: %N.patt.loc6_29.2: @Int.%pattern_type (%pattern_type.51d) = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc6_29.2 (constants.%N.patt.9f0)] +// CHECK:STDOUT: %N.loc6_29.1: @Int.%T.loc6_12.1 (%T) = symbolic_binding N, 1 [symbolic = %N.loc6_29.1 (constants.%N)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -637,15 +692,19 @@ let n: type = i32; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Int(constants.%T, constants.%N) { +// CHECK:STDOUT: %T.patt.loc6_12.2 => constants.%T.patt // CHECK:STDOUT: %T.loc6_12.1 => constants.%T -// CHECK:STDOUT: %N.loc6_29.1 => constants.%N // CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d +// CHECK:STDOUT: %N.patt.loc6_29.2 => constants.%N.patt.9f0 +// CHECK:STDOUT: %N.loc6_29.1 => constants.%N // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Int(Core.IntLiteral, constants.%int_32) { +// CHECK:STDOUT: %T.patt.loc6_12.2 => constants.%T.patt // CHECK:STDOUT: %T.loc6_12.1 => Core.IntLiteral -// CHECK:STDOUT: %N.loc6_29.1 => constants.%int_32 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.dc0 +// CHECK:STDOUT: %N.patt.loc6_29.2 => constants.%N.patt.94a +// CHECK:STDOUT: %N.loc6_29.1 => constants.%int_32 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/packages/raw_core.carbon b/toolchain/check/testdata/packages/raw_core.carbon index 73e9b06bf08a..3bf53c61651f 100644 --- a/toolchain/check/testdata/packages/raw_core.carbon +++ b/toolchain/check/testdata/packages/raw_core.carbon @@ -204,6 +204,8 @@ var c: r#Core = {.n = 0 as Core.Int(32)}; // CHECK:STDOUT: %struct_type.n: type = struct_type {.n: %i32} [concrete] // CHECK:STDOUT: %complete_type.cdf: = complete_type_witness %struct_type.n [concrete] // CHECK:STDOUT: %pattern_type.8dc: type = pattern_type %Core [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.8dc = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.8dc = var_pattern %c.patt [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %As.type.116: type = generic_interface_type @As [concrete] // CHECK:STDOUT: %As.generic: %As.type.116 = struct_value () [concrete] @@ -264,8 +266,8 @@ var c: r#Core = {.n = 0 as Core.Int(32)}; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Core.decl: type = class_decl @Core [concrete = constants.%Core] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.8dc = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.8dc = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.8dc = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type.8dc = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %Core = var %c.var_patt [concrete] // CHECK:STDOUT: %Core.ref: type = name_ref r#Core, %Core.decl [concrete = constants.%Core] diff --git a/toolchain/check/testdata/patterns/expression.carbon b/toolchain/check/testdata/patterns/expression.carbon index 18ddbc38cbf2..2a8d168b3f6a 100644 --- a/toolchain/check/testdata/patterns/expression.carbon +++ b/toolchain/check/testdata/patterns/expression.carbon @@ -89,6 +89,7 @@ fn F() { // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (bool, bool) [concrete] // CHECK:STDOUT: %pattern_type.860: type = pattern_type %tuple.type [concrete] +// CHECK:STDOUT: %.2f0: %pattern_type.860 = tuple_pattern (@F.%expr_patt.loc16_26, @F.%expr_patt.loc16_43) [concrete] // CHECK:STDOUT: %tuple: %tuple.type = tuple_value (%true, %true) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -124,7 +125,7 @@ fn F() { // CHECK:STDOUT: %.loc16_43: bool = block_arg !.loc16 [concrete = constants.%true] // CHECK:STDOUT: // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc16_51: %pattern_type.860 = tuple_pattern (%expr_patt.loc16_26, %expr_patt.loc16_43) [concrete] +// CHECK:STDOUT: %.loc16_51: %pattern_type.860 = tuple_pattern (%expr_patt.loc16_26, %expr_patt.loc16_43) [concrete = constants.%.2f0] // CHECK:STDOUT: } // CHECK:STDOUT: %true.loc16_56: bool = bool_literal true [concrete = constants.%true] // CHECK:STDOUT: %true.loc16_62: bool = bool_literal true [concrete = constants.%true] diff --git a/toolchain/check/testdata/patterns/tuple.carbon b/toolchain/check/testdata/patterns/tuple.carbon index e4d1fe6e3a2b..a4b1a37e548d 100644 --- a/toolchain/check/testdata/patterns/tuple.carbon +++ b/toolchain/check/testdata/patterns/tuple.carbon @@ -64,30 +64,33 @@ let (((b: ()),)) = ((),); // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.cb1 = value_binding_pattern b [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (%empty_tuple.type, %empty_tuple.type) [concrete] // CHECK:STDOUT: %pattern_type.5b8: type = pattern_type %tuple.type [concrete] +// CHECK:STDOUT: %.045: %pattern_type.5b8 = tuple_pattern (%a.patt, %b.patt) [concrete] // CHECK:STDOUT: %tuple: %tuple.type = tuple_value (%empty_tuple, %empty_tuple) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = value_binding_pattern a [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.cb1 = value_binding_pattern b [concrete] -// CHECK:STDOUT: %.loc5_18: %pattern_type.5b8 = tuple_pattern (%a.patt, %b.patt) [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = value_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %b.patt: %pattern_type.cb1 = value_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %.loc5_18: %pattern_type.5b8 = tuple_pattern (%a.patt, %b.patt) [concrete = constants.%.045] // CHECK:STDOUT: } +// CHECK:STDOUT: %empty_tuple.loc5_24: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc5_24: %empty_tuple.type = converted @__global_init.%.loc5_24, %empty_tuple.loc5_24 [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc5_10.1: type = splice_block %.loc5_10.3 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %.loc5_10.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc5_10.3: type = converted %.loc5_10.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: } -// CHECK:STDOUT: %empty_tuple.loc5_24: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc5_24: %empty_tuple.type = converted @__global_init.%.loc5_24, %empty_tuple.loc5_24 [concrete = constants.%empty_tuple] // CHECK:STDOUT: %a: %empty_tuple.type = value_binding a, %.loc5_24 +// CHECK:STDOUT: %empty_tuple.loc5_28: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc5_28: %empty_tuple.type = converted @__global_init.%.loc5_28, %empty_tuple.loc5_28 [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc5_17.1: type = splice_block %.loc5_17.3 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %.loc5_17.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc5_17.3: type = converted %.loc5_17.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: } -// CHECK:STDOUT: %empty_tuple.loc5_28: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc5_28: %empty_tuple.type = converted @__global_init.%.loc5_28, %empty_tuple.loc5_28 [concrete = constants.%empty_tuple] // CHECK:STDOUT: %b: %empty_tuple.type = value_binding b, %.loc5_28 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -109,30 +112,33 @@ let (((b: ()),)) = ((),); // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.cb1 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %.045: %pattern_type.5b8 = tuple_pattern (%a.patt, %b.patt) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = value_binding_pattern a [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.cb1 = value_binding_pattern b [concrete] -// CHECK:STDOUT: %.loc7_18: %pattern_type.5b8 = tuple_pattern (%a.patt, %b.patt) [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = value_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %b.patt: %pattern_type.cb1 = value_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %.loc7_18: %pattern_type.5b8 = tuple_pattern (%a.patt, %b.patt) [concrete = constants.%.045] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc7_24.1: ref %tuple.type = temporary @__global_init.%.loc7, @__global_init.%F.call // CHECK:STDOUT: %tuple.elem0: ref %empty_tuple.type = tuple_access %.loc7_24.1, element0 // CHECK:STDOUT: %tuple.elem1: ref %empty_tuple.type = tuple_access %.loc7_24.1, element1 +// CHECK:STDOUT: %tuple.loc7_24.1: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc7_24.2: %empty_tuple.type = converted %tuple.elem0, %tuple.loc7_24.1 [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc7_10.1: type = splice_block %.loc7_10.3 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %.loc7_10.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc7_10.3: type = converted %.loc7_10.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: } -// CHECK:STDOUT: %tuple.loc7_24.1: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc7_24.2: %empty_tuple.type = converted %tuple.elem0, %tuple.loc7_24.1 [concrete = constants.%empty_tuple] // CHECK:STDOUT: %a: %empty_tuple.type = value_binding a, %.loc7_24.2 +// CHECK:STDOUT: %tuple.loc7_24.2: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc7_24.3: %empty_tuple.type = converted %tuple.elem1, %tuple.loc7_24.2 [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc7_17.1: type = splice_block %.loc7_17.3 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %.loc7_17.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc7_17.3: type = converted %.loc7_17.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: } -// CHECK:STDOUT: %tuple.loc7_24.2: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc7_24.3: %empty_tuple.type = converted %tuple.elem1, %tuple.loc7_24.2 [concrete = constants.%empty_tuple] // CHECK:STDOUT: %b: %empty_tuple.type = value_binding b, %.loc7_24.3 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -154,29 +160,32 @@ let (((b: ()),)) = ((),); // CHECK:STDOUT: %tuple.elem0: ref %empty_tuple.type = tuple_access file.%t.var, element0 [concrete] // CHECK:STDOUT: %tuple.elem1: ref %empty_tuple.type = tuple_access file.%t.var, element1 [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.cb1 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %.045: %pattern_type.5b8 = tuple_pattern (%a.patt, %b.patt) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = value_binding_pattern a [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.cb1 = value_binding_pattern b [concrete] -// CHECK:STDOUT: %.loc6_18: %pattern_type.5b8 = tuple_pattern (%a.patt, %b.patt) [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = value_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %b.patt: %pattern_type.cb1 = value_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %.loc6_18: %pattern_type.5b8 = tuple_pattern (%a.patt, %b.patt) [concrete = constants.%.045] // CHECK:STDOUT: } // CHECK:STDOUT: %tuple.elem0: ref %empty_tuple.type = tuple_access @__global_init.%t.ref, element0 [concrete = constants.%tuple.elem0] // CHECK:STDOUT: %tuple.elem1: ref %empty_tuple.type = tuple_access @__global_init.%t.ref, element1 [concrete = constants.%tuple.elem1] +// CHECK:STDOUT: %tuple.loc6_22.1: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc6_22.1: %empty_tuple.type = converted %tuple.elem0, %tuple.loc6_22.1 [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc6_10.1: type = splice_block %.loc6_10.3 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %.loc6_10.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc6_10.3: type = converted %.loc6_10.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: } -// CHECK:STDOUT: %tuple.loc6_22.1: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc6_22.1: %empty_tuple.type = converted %tuple.elem0, %tuple.loc6_22.1 [concrete = constants.%empty_tuple] // CHECK:STDOUT: %a: %empty_tuple.type = value_binding a, %.loc6_22.1 +// CHECK:STDOUT: %tuple.loc6_22.2: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc6_22.2: %empty_tuple.type = converted %tuple.elem1, %tuple.loc6_22.2 [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc6_17.1: type = splice_block %.loc6_17.3 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %.loc6_17.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc6_17.3: type = converted %.loc6_17.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: } -// CHECK:STDOUT: %tuple.loc6_22.2: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc6_22.2: %empty_tuple.type = converted %tuple.elem1, %tuple.loc6_22.2 [concrete = constants.%empty_tuple] // CHECK:STDOUT: %b: %empty_tuple.type = value_binding b, %.loc6_22.2 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -193,28 +202,30 @@ let (((b: ()),)) = ((),); // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = value_binding_pattern a [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type = value_binding_pattern b [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } +// CHECK:STDOUT: %empty_tuple.loc5: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc5_16: %empty_tuple.type = converted @__global_init.%.loc5, %empty_tuple.loc5 [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc5_10.1: type = splice_block %.loc5_10.3 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %.loc5_10.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc5_10.3: type = converted %.loc5_10.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: } -// CHECK:STDOUT: %empty_tuple.loc5: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc5_16: %empty_tuple.type = converted @__global_init.%.loc5, %empty_tuple.loc5 [concrete = constants.%empty_tuple] // CHECK:STDOUT: %a: %empty_tuple.type = value_binding a, %.loc5_16 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type = value_binding_pattern b [concrete = constants.%b.patt] // CHECK:STDOUT: } +// CHECK:STDOUT: %empty_tuple.loc6: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc6_20: %empty_tuple.type = converted @__global_init.%.loc6, %empty_tuple.loc6 [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc6_12.1: type = splice_block %.loc6_12.3 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %.loc6_12.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc6_12.3: type = converted %.loc6_12.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: } -// CHECK:STDOUT: %empty_tuple.loc6: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc6_20: %empty_tuple.type = converted @__global_init.%.loc6, %empty_tuple.loc6 [concrete = constants.%empty_tuple] // CHECK:STDOUT: %b: %empty_tuple.type = value_binding b, %.loc6_20 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -231,33 +242,37 @@ let (((b: ()),)) = ((),); // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = value_binding_pattern a [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (%empty_tuple.type) [concrete] // CHECK:STDOUT: %pattern_type.559: type = pattern_type %tuple.type [concrete] +// CHECK:STDOUT: %.62f: %pattern_type.559 = tuple_pattern (%a.patt) [concrete] // CHECK:STDOUT: %tuple: %tuple.type = tuple_value (%empty_tuple) [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.cb1 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %.00b: %pattern_type.559 = tuple_pattern (%b.patt) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = value_binding_pattern a [concrete] -// CHECK:STDOUT: %.loc5_12: %pattern_type.559 = tuple_pattern (%a.patt) [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = value_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %.loc5_12: %pattern_type.559 = tuple_pattern (%a.patt) [concrete = constants.%.62f] // CHECK:STDOUT: } +// CHECK:STDOUT: %empty_tuple.loc5: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc5_18: %empty_tuple.type = converted @__global_init.%.loc5_18, %empty_tuple.loc5 [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc5_10.1: type = splice_block %.loc5_10.3 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %.loc5_10.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc5_10.3: type = converted %.loc5_10.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: } -// CHECK:STDOUT: %empty_tuple.loc5: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc5_18: %empty_tuple.type = converted @__global_init.%.loc5_18, %empty_tuple.loc5 [concrete = constants.%empty_tuple] // CHECK:STDOUT: %a: %empty_tuple.type = value_binding a, %.loc5_18 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.cb1 = value_binding_pattern b [concrete] -// CHECK:STDOUT: %.loc6_15: %pattern_type.559 = tuple_pattern (%b.patt) [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.cb1 = value_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %.loc6_15: %pattern_type.559 = tuple_pattern (%b.patt) [concrete = constants.%.00b] // CHECK:STDOUT: } +// CHECK:STDOUT: %empty_tuple.loc6: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc6_22: %empty_tuple.type = converted @__global_init.%.loc6_22, %empty_tuple.loc6 [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc6_12.1: type = splice_block %.loc6_12.3 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %.loc6_12.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc6_12.3: type = converted %.loc6_12.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: } -// CHECK:STDOUT: %empty_tuple.loc6: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc6_22: %empty_tuple.type = converted @__global_init.%.loc6_22, %empty_tuple.loc6 [concrete = constants.%empty_tuple] // CHECK:STDOUT: %b: %empty_tuple.type = value_binding b, %.loc6_22 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/patterns/underscore.carbon b/toolchain/check/testdata/patterns/underscore.carbon index fbf73bfc615c..b17aa772dfce 100644 --- a/toolchain/check/testdata/patterns/underscore.carbon +++ b/toolchain/check/testdata/patterns/underscore.carbon @@ -112,8 +112,14 @@ fn F() -> {} { // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %pattern_type.a96: type = pattern_type %empty_struct_type [concrete] +// CHECK:STDOUT: %_.patt.bc3: %pattern_type.a96 = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt.7e8: %pattern_type.a96 = ref_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.var_patt.d5b: %pattern_type.a96 = var_pattern %_.patt.7e8 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] +// CHECK:STDOUT: %_.patt.bc9: %pattern_type.a96 = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt.3b4: %pattern_type.a96 = ref_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.var_patt.f52: %pattern_type.a96 = var_pattern %_.patt.3b4 [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] // CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] @@ -135,18 +141,18 @@ fn F() -> {} { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt.loc4: %pattern_type.a96 = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt.loc4: %pattern_type.a96 = value_binding_pattern _ [concrete = constants.%_.patt.bc3] // CHECK:STDOUT: } +// CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc4_14: %empty_struct_type = converted @__global_init.%.loc4, %empty_struct [concrete = constants.%empty_struct] // CHECK:STDOUT: %.loc4_9.1: type = splice_block %.loc4_9.3 [concrete = constants.%empty_struct_type] { // CHECK:STDOUT: %.loc4_9.2: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] // CHECK:STDOUT: %.loc4_9.3: type = converted %.loc4_9.2, constants.%empty_struct_type [concrete = constants.%empty_struct_type] // CHECK:STDOUT: } -// CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete = constants.%empty_struct] -// CHECK:STDOUT: %.loc4_14: %empty_struct_type = converted @__global_init.%.loc4, %empty_struct [concrete = constants.%empty_struct] // CHECK:STDOUT: %_.loc4: %empty_struct_type = value_binding _, %.loc4_14 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt.loc5: %pattern_type.a96 = ref_binding_pattern _ [concrete] -// CHECK:STDOUT: %_.var_patt: %pattern_type.a96 = var_pattern %_.patt.loc5 [concrete] +// CHECK:STDOUT: %_.patt.loc5: %pattern_type.a96 = ref_binding_pattern _ [concrete = constants.%_.patt.7e8] +// CHECK:STDOUT: %_.var_patt: %pattern_type.a96 = var_pattern %_.patt.loc5 [concrete = constants.%_.var_patt.d5b] // CHECK:STDOUT: } // CHECK:STDOUT: %_.var: ref %empty_struct_type = var %_.var_patt // CHECK:STDOUT: %.loc5_9.1: type = splice_block %.loc5_9.3 [concrete = constants.%empty_struct_type] { @@ -160,19 +166,19 @@ fn F() -> {} { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt.loc8: %pattern_type.a96 = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %_.patt.loc8: %pattern_type.a96 = value_binding_pattern _ [concrete = constants.%_.patt.bc9] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc8_16.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc8_16.2: %empty_struct_type = converted %.loc8_16.1, %empty_struct [concrete = constants.%empty_struct] // CHECK:STDOUT: %.loc8_11.1: type = splice_block %.loc8_11.3 [concrete = constants.%empty_struct_type] { // CHECK:STDOUT: %.loc8_11.2: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] // CHECK:STDOUT: %.loc8_11.3: type = converted %.loc8_11.2, constants.%empty_struct_type [concrete = constants.%empty_struct_type] // CHECK:STDOUT: } -// CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete = constants.%empty_struct] -// CHECK:STDOUT: %.loc8_16.2: %empty_struct_type = converted %.loc8_16.1, %empty_struct [concrete = constants.%empty_struct] // CHECK:STDOUT: %_.loc8: %empty_struct_type = value_binding _, %.loc8_16.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt.loc9: %pattern_type.a96 = ref_binding_pattern _ [concrete] -// CHECK:STDOUT: %_.var_patt: %pattern_type.a96 = var_pattern %_.patt.loc9 [concrete] +// CHECK:STDOUT: %_.patt.loc9: %pattern_type.a96 = ref_binding_pattern _ [concrete = constants.%_.patt.3b4] +// CHECK:STDOUT: %_.var_patt: %pattern_type.a96 = var_pattern %_.patt.loc9 [concrete = constants.%_.var_patt.f52] // CHECK:STDOUT: } // CHECK:STDOUT: %_.var: ref %empty_struct_type = var %_.var_patt // CHECK:STDOUT: %.loc9_16.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] @@ -208,6 +214,8 @@ fn F() -> {} { // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_struct_type [concrete] +// CHECK:STDOUT: %_.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %_.patt: %pattern_type = at_binding_pattern _, %_.param_patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] @@ -232,8 +240,8 @@ fn F() -> {} { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %_.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %_.patt: %pattern_type = at_binding_pattern _, %_.param_patt [concrete] +// CHECK:STDOUT: %_.param_patt: %pattern_type = value_param_pattern [concrete = constants.%_.param_patt] +// CHECK:STDOUT: %_.patt: %pattern_type = at_binding_pattern _, %_.param_patt [concrete = constants.%_.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %_.param: %empty_struct_type = value_param call_param0 // CHECK:STDOUT: %.loc4_10.1: type = splice_block %.loc4_10.3 [concrete = constants.%empty_struct_type] { @@ -243,8 +251,8 @@ fn F() -> {} { // CHECK:STDOUT: %_: %empty_struct_type = value_binding _, %_.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %_.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %_.patt: %pattern_type = at_binding_pattern _, %_.param_patt [concrete] +// CHECK:STDOUT: %_.param_patt: %pattern_type = value_param_pattern [concrete = constants.%_.param_patt] +// CHECK:STDOUT: %_.patt: %pattern_type = at_binding_pattern _, %_.param_patt [concrete = constants.%_.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %_.param: %empty_struct_type = value_param call_param0 // CHECK:STDOUT: %.loc6_10.1: type = splice_block %.loc6_10.3 [concrete = constants.%empty_struct_type] { @@ -279,6 +287,7 @@ fn F() -> {} { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %_.patt: %pattern_type = symbolic_binding_pattern _, 0 [symbolic] // CHECK:STDOUT: %_: type = symbolic_binding _, 0 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -305,7 +314,7 @@ fn F() -> {} { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %_.patt: %pattern_type = symbolic_binding_pattern _, 0 [concrete] +// CHECK:STDOUT: %_.patt.loc4_7.1: %pattern_type = symbolic_binding_pattern _, 0 [symbolic = %_.patt.loc4_7.2 (constants.%_.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_10.1: type = splice_block %.loc4_10.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -317,6 +326,7 @@ fn F() -> {} { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%_.loc4_7.2: type) { +// CHECK:STDOUT: %_.patt.loc4_7.2: %pattern_type = symbolic_binding_pattern _, 0 [symbolic = %_.patt.loc4_7.2 (constants.%_.patt)] // CHECK:STDOUT: %_.loc4_7.1: type = symbolic_binding _, 0 [symbolic = %_.loc4_7.1 (constants.%_)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -338,10 +348,12 @@ fn F() -> {} { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%_) { +// CHECK:STDOUT: %_.patt.loc4_7.2 => constants.%_.patt // CHECK:STDOUT: %_.loc4_7.1 => constants.%_ // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%empty_struct_type) { +// CHECK:STDOUT: %_.patt.loc4_7.2 => constants.%_.patt // CHECK:STDOUT: %_.loc4_7.1 => constants.%empty_struct_type // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -353,6 +365,7 @@ fn F() -> {} { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %_.patt: %pattern_type = symbolic_binding_pattern _, 0 [symbolic] // CHECK:STDOUT: %_: type = symbolic_binding _, 0 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -379,7 +392,7 @@ fn F() -> {} { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %_.patt: %pattern_type = symbolic_binding_pattern _, 0 [concrete] +// CHECK:STDOUT: %_.patt.loc4_7.1: %pattern_type = symbolic_binding_pattern _, 0 [symbolic = %_.patt.loc4_7.2 (constants.%_.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_10.1: type = splice_block %.loc4_10.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -391,6 +404,7 @@ fn F() -> {} { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%_.loc4_7.2: type) { +// CHECK:STDOUT: %_.patt.loc4_7.2: %pattern_type = symbolic_binding_pattern _, 0 [symbolic = %_.patt.loc4_7.2 (constants.%_.patt)] // CHECK:STDOUT: %_.loc4_7.1: type = symbolic_binding _, 0 [symbolic = %_.loc4_7.1 (constants.%_)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); @@ -407,10 +421,12 @@ fn F() -> {} { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%_) { +// CHECK:STDOUT: %_.patt.loc4_7.2 => constants.%_.patt // CHECK:STDOUT: %_.loc4_7.1 => constants.%_ // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%empty_struct_type) { +// CHECK:STDOUT: %_.patt.loc4_7.2 => constants.%_.patt // CHECK:STDOUT: %_.loc4_7.1 => constants.%empty_struct_type // CHECK:STDOUT: } // CHECK:STDOUT: @@ -420,6 +436,7 @@ fn F() -> {} { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %_.patt: %pattern_type = symbolic_binding_pattern _, 0 [symbolic] // CHECK:STDOUT: %_: type = symbolic_binding _, 0 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] @@ -442,7 +459,7 @@ fn F() -> {} { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %_.patt: %pattern_type = symbolic_binding_pattern _, 0 [concrete] +// CHECK:STDOUT: %_.patt.loc4_7.1: %pattern_type = symbolic_binding_pattern _, 0 [symbolic = %_.patt.loc4_7.2 (constants.%_.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_10.1: type = splice_block %.loc4_10.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -451,7 +468,7 @@ fn F() -> {} { // CHECK:STDOUT: %_.loc4_7.2: type = symbolic_binding _, 0 [symbolic = %_.loc4_7.1 (constants.%_)] // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %_.patt: %pattern_type = symbolic_binding_pattern _, 0 [concrete] +// CHECK:STDOUT: %_.patt.loc6_7.1: %pattern_type = symbolic_binding_pattern _, 0 [symbolic = %_.patt.loc6_7.2 (constants.%_.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6_10.1: type = splice_block %.loc6_10.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -462,12 +479,14 @@ fn F() -> {} { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%_.loc4_7.2: type) { +// CHECK:STDOUT: %_.patt.loc4_7.2: %pattern_type = symbolic_binding_pattern _, 0 [symbolic = %_.patt.loc4_7.2 (constants.%_.patt)] // CHECK:STDOUT: %_.loc4_7.1: type = symbolic_binding _, 0 [symbolic = %_.loc4_7.1 (constants.%_)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @G(%_.loc6_7.2: type) { +// CHECK:STDOUT: %_.patt.loc6_7.2: %pattern_type = symbolic_binding_pattern _, 0 [symbolic = %_.patt.loc6_7.2 (constants.%_.patt)] // CHECK:STDOUT: %_.loc6_7.1: type = symbolic_binding _, 0 [symbolic = %_.loc6_7.1 (constants.%_)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -479,10 +498,12 @@ fn F() -> {} { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%_) { +// CHECK:STDOUT: %_.patt.loc4_7.2 => constants.%_.patt // CHECK:STDOUT: %_.loc4_7.1 => constants.%_ // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%_) { +// CHECK:STDOUT: %_.patt.loc6_7.2 => constants.%_.patt // CHECK:STDOUT: %_.loc6_7.1 => constants.%_ // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/pointer/address_of_deref.carbon b/toolchain/check/testdata/pointer/address_of_deref.carbon index c6e429344867..ee772417df9a 100644 --- a/toolchain/check/testdata/pointer/address_of_deref.carbon +++ b/toolchain/check/testdata/pointer/address_of_deref.carbon @@ -28,9 +28,13 @@ fn F() -> i32 { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = ref_binding_pattern n [concrete] +// CHECK:STDOUT: %n.var_patt: %pattern_type.6b6 = var_pattern %n.patt [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -90,8 +94,8 @@ fn F() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc15 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc15 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc15: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc15: Core.Form = init_form %i32.loc15 [concrete = constants.%.795] @@ -103,8 +107,8 @@ fn F() -> i32 { // CHECK:STDOUT: fn @F() -> out %return.param: %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = ref_binding_pattern n [concrete] -// CHECK:STDOUT: %n.var_patt: %pattern_type.6b6 = var_pattern %n.patt [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = ref_binding_pattern n [concrete = constants.%n.patt] +// CHECK:STDOUT: %n.var_patt: %pattern_type.6b6 = var_pattern %n.patt [concrete = constants.%n.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %n.var: ref %i32 = var %n.var_patt // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0.5c6] diff --git a/toolchain/check/testdata/pointer/address_of_lvalue.carbon b/toolchain/check/testdata/pointer/address_of_lvalue.carbon index 047d9679763b..fa5fd24d40b9 100644 --- a/toolchain/check/testdata/pointer/address_of_lvalue.carbon +++ b/toolchain/check/testdata/pointer/address_of_lvalue.carbon @@ -38,6 +38,8 @@ fn F() { // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %ptr.939: type = ptr_type %struct_type.a.b.b4c [concrete] // CHECK:STDOUT: %pattern_type.20e3: type = pattern_type %struct_type.a.b.b4c [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.20e3 = ref_binding_pattern s [concrete] +// CHECK:STDOUT: %s.var_patt: %pattern_type.20e3 = var_pattern %s.patt [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %struct_type.a.b.cfd: type = struct_type {.a: Core.IntLiteral, .b: Core.IntLiteral} [concrete] @@ -63,6 +65,8 @@ fn F() { // CHECK:STDOUT: %int_2.295: %i32 = int_value 2 [concrete] // CHECK:STDOUT: %struct.631: %struct_type.a.b.b4c = struct_value (%int_1.0c6, %int_2.295) [concrete] // CHECK:STDOUT: %pattern_type.88d: type = pattern_type %ptr.939 [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.88d = ref_binding_pattern p [concrete] +// CHECK:STDOUT: %p.var_patt: %pattern_type.88d = var_pattern %p.patt [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.type.ff5: type = fn_type @ptr.as.Copy.impl.Op, @ptr.as.Copy.impl(%T.67d) [symbolic] @@ -76,6 +80,8 @@ fn F() { // CHECK:STDOUT: %ptr.as.Copy.impl.Op.specific_fn.867: = specific_function %ptr.as.Copy.impl.Op.287, @ptr.as.Copy.impl.Op(%struct_type.a.b.b4c) [concrete] // CHECK:STDOUT: %ptr.d08: type = ptr_type %i32 [concrete] // CHECK:STDOUT: %pattern_type.f00: type = pattern_type %ptr.d08 [concrete] +// CHECK:STDOUT: %q.patt: %pattern_type.f00 = ref_binding_pattern q [concrete] +// CHECK:STDOUT: %q.var_patt: %pattern_type.f00 = var_pattern %q.patt [concrete] // CHECK:STDOUT: %Copy.impl_witness.ce1: = impl_witness imports.%Copy.impl_witness_table.4f1, @ptr.as.Copy.impl(%i32) [concrete] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.type.c1c: type = fn_type @ptr.as.Copy.impl.Op, @ptr.as.Copy.impl(%i32) [concrete] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.d1c: %ptr.as.Copy.impl.Op.type.c1c = struct_value () [concrete] @@ -83,14 +89,22 @@ fn F() { // CHECK:STDOUT: %Copy.WithSelf.Op.type.f9d: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.b49) [concrete] // CHECK:STDOUT: %.ac9: type = fn_type_with_self_type %Copy.WithSelf.Op.type.f9d, %Copy.facet.b49 [concrete] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.specific_fn.b3e: = specific_function %ptr.as.Copy.impl.Op.d1c, @ptr.as.Copy.impl.Op(%i32) [concrete] +// CHECK:STDOUT: %r.patt: %pattern_type.f00 = ref_binding_pattern r [concrete] +// CHECK:STDOUT: %r.var_patt: %pattern_type.f00 = var_pattern %r.patt [concrete] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.b59: %tuple.type.24b = tuple_value (%i32, %i32) [concrete] // CHECK:STDOUT: %tuple.type.e55: type = tuple_type (%i32, %i32) [concrete] // CHECK:STDOUT: %pattern_type.394: type = pattern_type %tuple.type.e55 [concrete] +// CHECK:STDOUT: %t.patt: %pattern_type.394 = ref_binding_pattern t [concrete] +// CHECK:STDOUT: %t.var_patt: %pattern_type.394 = var_pattern %t.patt [concrete] // CHECK:STDOUT: %tuple.type.f94: type = tuple_type (Core.IntLiteral, Core.IntLiteral) [concrete] // CHECK:STDOUT: %tuple.ad8: %tuple.type.f94 = tuple_value (%int_1.5b8, %int_2.ecc) [concrete] // CHECK:STDOUT: %tuple.102: %tuple.type.e55 = tuple_value (%int_1.0c6, %int_2.295) [concrete] +// CHECK:STDOUT: %t0.patt: %pattern_type.f00 = ref_binding_pattern t0 [concrete] +// CHECK:STDOUT: %t0.var_patt: %pattern_type.f00 = var_pattern %t0.patt [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] +// CHECK:STDOUT: %t1.patt: %pattern_type.f00 = ref_binding_pattern t1 [concrete] +// CHECK:STDOUT: %t1.var_patt: %pattern_type.f00 = var_pattern %t1.patt [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.1: type = fn_type @Destroy.Op.loc24 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.1: %Destroy.Op.type.1d8f74.1 = struct_value () [concrete] @@ -133,8 +147,8 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %s.patt: %pattern_type.20e3 = ref_binding_pattern s [concrete] -// CHECK:STDOUT: %s.var_patt: %pattern_type.20e3 = var_pattern %s.patt [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.20e3 = ref_binding_pattern s [concrete = constants.%s.patt] +// CHECK:STDOUT: %s.var_patt: %pattern_type.20e3 = var_pattern %s.patt [concrete = constants.%s.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %s.var: ref %struct_type.a.b.b4c = var %s.var_patt // CHECK:STDOUT: %int_1.loc16: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -166,8 +180,8 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %s: ref %struct_type.a.b.b4c = ref_binding s, %s.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: %pattern_type.88d = ref_binding_pattern p [concrete] -// CHECK:STDOUT: %p.var_patt: %pattern_type.88d = var_pattern %p.patt [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.88d = ref_binding_pattern p [concrete = constants.%p.patt] +// CHECK:STDOUT: %p.var_patt: %pattern_type.88d = var_pattern %p.patt [concrete = constants.%p.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %p.var: ref %ptr.939 = var %p.var_patt // CHECK:STDOUT: %s.ref.loc18: ref %struct_type.a.b.b4c = name_ref s, %s @@ -186,8 +200,8 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %p: ref %ptr.939 = ref_binding p, %p.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %q.patt: %pattern_type.f00 = ref_binding_pattern q [concrete] -// CHECK:STDOUT: %q.var_patt: %pattern_type.f00 = var_pattern %q.patt [concrete] +// CHECK:STDOUT: %q.patt: %pattern_type.f00 = ref_binding_pattern q [concrete = constants.%q.patt] +// CHECK:STDOUT: %q.var_patt: %pattern_type.f00 = var_pattern %q.patt [concrete = constants.%q.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %q.var: ref %ptr.d08 = var %q.var_patt // CHECK:STDOUT: %s.ref.loc19: ref %struct_type.a.b.b4c = name_ref s, %s @@ -205,8 +219,8 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %q: ref %ptr.d08 = ref_binding q, %q.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %r.patt: %pattern_type.f00 = ref_binding_pattern r [concrete] -// CHECK:STDOUT: %r.var_patt: %pattern_type.f00 = var_pattern %r.patt [concrete] +// CHECK:STDOUT: %r.patt: %pattern_type.f00 = ref_binding_pattern r [concrete = constants.%r.patt] +// CHECK:STDOUT: %r.var_patt: %pattern_type.f00 = var_pattern %r.patt [concrete = constants.%r.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %r.var: ref %ptr.d08 = var %r.var_patt // CHECK:STDOUT: %s.ref.loc20: ref %struct_type.a.b.b4c = name_ref s, %s @@ -224,8 +238,8 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %r: ref %ptr.d08 = ref_binding r, %r.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %t.patt: %pattern_type.394 = ref_binding_pattern t [concrete] -// CHECK:STDOUT: %t.var_patt: %pattern_type.394 = var_pattern %t.patt [concrete] +// CHECK:STDOUT: %t.patt: %pattern_type.394 = ref_binding_pattern t [concrete = constants.%t.patt] +// CHECK:STDOUT: %t.var_patt: %pattern_type.394 = var_pattern %t.patt [concrete = constants.%t.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %t.var: ref %tuple.type.e55 = var %t.var_patt // CHECK:STDOUT: %int_1.loc22: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -258,8 +272,8 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %t: ref %tuple.type.e55 = ref_binding t, %t.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %t0.patt: %pattern_type.f00 = ref_binding_pattern t0 [concrete] -// CHECK:STDOUT: %t0.var_patt: %pattern_type.f00 = var_pattern %t0.patt [concrete] +// CHECK:STDOUT: %t0.patt: %pattern_type.f00 = ref_binding_pattern t0 [concrete = constants.%t0.patt] +// CHECK:STDOUT: %t0.var_patt: %pattern_type.f00 = var_pattern %t0.patt [concrete = constants.%t0.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %t0.var: ref %ptr.d08 = var %t0.var_patt // CHECK:STDOUT: %t.ref.loc23: ref %tuple.type.e55 = name_ref t, %t @@ -278,8 +292,8 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %t0: ref %ptr.d08 = ref_binding t0, %t0.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %t1.patt: %pattern_type.f00 = ref_binding_pattern t1 [concrete] -// CHECK:STDOUT: %t1.var_patt: %pattern_type.f00 = var_pattern %t1.patt [concrete] +// CHECK:STDOUT: %t1.patt: %pattern_type.f00 = ref_binding_pattern t1 [concrete = constants.%t1.patt] +// CHECK:STDOUT: %t1.var_patt: %pattern_type.f00 = var_pattern %t1.patt [concrete = constants.%t1.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %t1.var: ref %ptr.d08 = var %t1.var_patt // CHECK:STDOUT: %t.ref.loc24: ref %tuple.type.e55 = name_ref t, %t diff --git a/toolchain/check/testdata/pointer/arrow.carbon b/toolchain/check/testdata/pointer/arrow.carbon index 76fcf6ffe0db..70a3f36beec9 100644 --- a/toolchain/check/testdata/pointer/arrow.carbon +++ b/toolchain/check/testdata/pointer/arrow.carbon @@ -32,6 +32,8 @@ fn Foo(ptr: C*) { // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.98b = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt: %pattern_type.98b = at_binding_pattern self, %self.param_patt [concrete] // CHECK:STDOUT: %C.Member.type: type = fn_type @C.Member [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %C.Member: %C.Member.type = struct_value () [concrete] @@ -40,6 +42,8 @@ fn Foo(ptr: C*) { // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %ptr.6b6 [concrete] // CHECK:STDOUT: %struct_type.field: type = struct_type {.field: %ptr.6b6} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.field [concrete] +// CHECK:STDOUT: %ptr.param_patt: %pattern_type.fcb = value_param_pattern [concrete] +// CHECK:STDOUT: %ptr.patt: %pattern_type.fcb = at_binding_pattern ptr, %ptr.param_patt [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -60,8 +64,8 @@ fn Foo(ptr: C*) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %Foo.decl: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %ptr.param_patt: %pattern_type.fcb = value_param_pattern [concrete] -// CHECK:STDOUT: %ptr.patt: %pattern_type.fcb = at_binding_pattern ptr, %ptr.param_patt [concrete] +// CHECK:STDOUT: %ptr.param_patt: %pattern_type.fcb = value_param_pattern [concrete = constants.%ptr.param_patt] +// CHECK:STDOUT: %ptr.patt: %pattern_type.fcb = at_binding_pattern ptr, %ptr.param_patt [concrete = constants.%ptr.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %ptr.param: %ptr.6b6 = value_param call_param0 // CHECK:STDOUT: %.loc20: type = splice_block %ptr.loc20_14 [concrete = constants.%ptr.6b6] { @@ -74,8 +78,8 @@ fn Foo(ptr: C*) { // CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: %C.Member.decl: %C.Member.type = fn_decl @C.Member [concrete = constants.%C.Member] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.98b = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.98b = at_binding_pattern self, %self.param_patt [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.98b = value_param_pattern [concrete = constants.%self.param_patt] +// CHECK:STDOUT: %self.patt: %pattern_type.98b = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %C = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] diff --git a/toolchain/check/testdata/pointer/basic.carbon b/toolchain/check/testdata/pointer/basic.carbon index 01fba64e627f..c3226f406744 100644 --- a/toolchain/check/testdata/pointer/basic.carbon +++ b/toolchain/check/testdata/pointer/basic.carbon @@ -30,9 +30,13 @@ fn F() -> i32 { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = ref_binding_pattern n [concrete] +// CHECK:STDOUT: %n.var_patt: %pattern_type.6b6 = var_pattern %n.patt [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -52,6 +56,8 @@ fn F() -> i32 { // CHECK:STDOUT: %int_0.3c0: %i32 = int_value 0 [concrete] // CHECK:STDOUT: %ptr.d08: type = ptr_type %i32 [concrete] // CHECK:STDOUT: %pattern_type.f00: type = pattern_type %ptr.d08 [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.f00 = ref_binding_pattern p [concrete] +// CHECK:STDOUT: %p.var_patt: %pattern_type.f00 = var_pattern %p.patt [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.ac8: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N) [symbolic] // CHECK:STDOUT: %Int.as.Copy.impl.Op.5e0: %Int.as.Copy.impl.Op.type.ac8 = struct_value () [symbolic] @@ -107,8 +113,8 @@ fn F() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc15 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc15 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc15: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc15: Core.Form = init_form %i32.loc15 [concrete = constants.%.795] @@ -120,8 +126,8 @@ fn F() -> i32 { // CHECK:STDOUT: fn @F() -> out %return.param: %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = ref_binding_pattern n [concrete] -// CHECK:STDOUT: %n.var_patt: %pattern_type.6b6 = var_pattern %n.patt [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = ref_binding_pattern n [concrete = constants.%n.patt] +// CHECK:STDOUT: %n.var_patt: %pattern_type.6b6 = var_pattern %n.patt [concrete = constants.%n.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %n.var: ref %i32 = var %n.var_patt // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0.5c6] @@ -135,8 +141,8 @@ fn F() -> i32 { // CHECK:STDOUT: %i32.loc16: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %n: ref %i32 = ref_binding n, %n.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: %pattern_type.f00 = ref_binding_pattern p [concrete] -// CHECK:STDOUT: %p.var_patt: %pattern_type.f00 = var_pattern %p.patt [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.f00 = ref_binding_pattern p [concrete = constants.%p.patt] +// CHECK:STDOUT: %p.var_patt: %pattern_type.f00 = var_pattern %p.patt [concrete = constants.%p.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %p.var: ref %ptr.d08 = var %p.var_patt // CHECK:STDOUT: %n.ref: ref %i32 = name_ref n, %n diff --git a/toolchain/check/testdata/pointer/fail_deref_error.carbon b/toolchain/check/testdata/pointer/fail_deref_error.carbon index f6cb056fb4a3..b5322a490eb6 100644 --- a/toolchain/check/testdata/pointer/fail_deref_error.carbon +++ b/toolchain/check/testdata/pointer/fail_deref_error.carbon @@ -31,6 +31,8 @@ let n2: i32 = undeclared->foo; // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = value_binding_pattern n [concrete] +// CHECK:STDOUT: %n2.patt: %pattern_type.6b6 = value_binding_pattern n2 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -51,12 +53,12 @@ let n2: i32 = undeclared->foo; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = value_binding_pattern n [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = value_binding_pattern n [concrete = constants.%n.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %i32.loc19: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %n: %i32 = value_binding n, [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n2.patt: %pattern_type.6b6 = value_binding_pattern n2 [concrete] +// CHECK:STDOUT: %n2.patt: %pattern_type.6b6 = value_binding_pattern n2 [concrete = constants.%n2.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %i32.loc24: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %n2: %i32 = value_binding n2, [concrete = ] diff --git a/toolchain/check/testdata/pointer/fail_deref_not_pointer.carbon b/toolchain/check/testdata/pointer/fail_deref_not_pointer.carbon index c1d4d9773622..b7fa4620c957 100644 --- a/toolchain/check/testdata/pointer/fail_deref_not_pointer.carbon +++ b/toolchain/check/testdata/pointer/fail_deref_not_pointer.carbon @@ -54,6 +54,8 @@ fn Deref(n: i32) { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete] // CHECK:STDOUT: %Deref.type: type = fn_type @Deref [concrete] // CHECK:STDOUT: %Deref: %Deref.type = struct_value () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] @@ -77,8 +79,8 @@ fn Deref(n: i32) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Deref.decl: %Deref.type = fn_decl @Deref [concrete = constants.%Deref] { -// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%n.param_patt] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete = constants.%n.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %n.param: %i32 = value_param call_param0 // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] diff --git a/toolchain/check/testdata/pointer/fail_deref_type.carbon b/toolchain/check/testdata/pointer/fail_deref_type.carbon index 119613cfeb79..0326952cc388 100644 --- a/toolchain/check/testdata/pointer/fail_deref_type.carbon +++ b/toolchain/check/testdata/pointer/fail_deref_type.carbon @@ -52,8 +52,8 @@ var p2: i32->foo; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: = ref_binding_pattern p [concrete] -// CHECK:STDOUT: %p.var_patt: = var_pattern %p.patt [concrete] +// CHECK:STDOUT: %p.patt: = ref_binding_pattern p [concrete = ] +// CHECK:STDOUT: %p.var_patt: = var_pattern %p.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %p.var: ref = var %p.var_patt [concrete = ] // CHECK:STDOUT: %.1: = splice_block [concrete = ] { @@ -62,8 +62,8 @@ var p2: i32->foo; // CHECK:STDOUT: } // CHECK:STDOUT: %p: ref = ref_binding p, [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p2.patt: = ref_binding_pattern p2 [concrete] -// CHECK:STDOUT: %p2.var_patt: = var_pattern %p2.patt [concrete] +// CHECK:STDOUT: %p2.patt: = ref_binding_pattern p2 [concrete = ] +// CHECK:STDOUT: %p2.var_patt: = var_pattern %p2.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %p2.var: ref = var %p2.var_patt [concrete = ] // CHECK:STDOUT: %.2: = splice_block [concrete = ] { diff --git a/toolchain/check/testdata/pointer/fail_type_mismatch.carbon b/toolchain/check/testdata/pointer/fail_type_mismatch.carbon index bfa7b1e21e72..2d7e6d008419 100644 --- a/toolchain/check/testdata/pointer/fail_type_mismatch.carbon +++ b/toolchain/check/testdata/pointer/fail_type_mismatch.carbon @@ -31,10 +31,14 @@ fn ConstMismatch(p: const {}*) -> const ({}*) { // CHECK:STDOUT: %const.c48: type = const_type %empty_struct_type [concrete] // CHECK:STDOUT: %ptr.bf9: type = ptr_type %const.c48 [concrete] // CHECK:STDOUT: %pattern_type.db0: type = pattern_type %ptr.bf9 [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.db0 = value_param_pattern [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.db0 = at_binding_pattern p, %p.param_patt [concrete] // CHECK:STDOUT: %ptr.c28: type = ptr_type %empty_struct_type [concrete] // CHECK:STDOUT: %const.987: type = const_type %ptr.c28 [concrete] // CHECK:STDOUT: %.45c: Core.Form = init_form %const.987 [concrete] // CHECK:STDOUT: %pattern_type.3c6: type = pattern_type %const.987 [concrete] +// CHECK:STDOUT: %return.param_patt.b04: %pattern_type.3c6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.f8c: %pattern_type.3c6 = return_slot_pattern %return.param_patt.b04, %const.987 [concrete] // CHECK:STDOUT: %ConstMismatch.type: type = fn_type @ConstMismatch [concrete] // CHECK:STDOUT: %ConstMismatch: %ConstMismatch.type = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] @@ -57,10 +61,10 @@ fn ConstMismatch(p: const {}*) -> const ({}*) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %ConstMismatch.decl: %ConstMismatch.type = fn_decl @ConstMismatch [concrete = constants.%ConstMismatch] { -// CHECK:STDOUT: %p.param_patt: %pattern_type.db0 = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.db0 = at_binding_pattern p, %p.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.3c6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.3c6 = return_slot_pattern %return.param_patt, %const.loc15_35 [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.db0 = value_param_pattern [concrete = constants.%p.param_patt] +// CHECK:STDOUT: %p.patt: %pattern_type.db0 = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.3c6 = out_param_pattern [concrete = constants.%return.param_patt.b04] +// CHECK:STDOUT: %return.patt: %pattern_type.3c6 = return_slot_pattern %return.param_patt, %const.loc15_35 [concrete = constants.%return.patt.f8c] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc15_43: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] // CHECK:STDOUT: %.loc15_44: type = converted %.loc15_43, constants.%empty_struct_type [concrete = constants.%empty_struct_type] diff --git a/toolchain/check/testdata/pointer/import.carbon b/toolchain/check/testdata/pointer/import.carbon index cf9b8239f1b2..c11b2cbf704c 100644 --- a/toolchain/check/testdata/pointer/import.carbon +++ b/toolchain/check/testdata/pointer/import.carbon @@ -33,6 +33,8 @@ var a: i32* = a_ref; // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a_orig.patt: %pattern_type.6b6 = ref_binding_pattern a_orig [concrete] +// CHECK:STDOUT: %a_orig.var_patt: %pattern_type.6b6 = var_pattern %a_orig.patt [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -52,6 +54,8 @@ var a: i32* = a_ref; // CHECK:STDOUT: %int_0.3c0: %i32 = int_value 0 [concrete] // CHECK:STDOUT: %ptr.d08: type = ptr_type %i32 [concrete] // CHECK:STDOUT: %pattern_type.f00: type = pattern_type %ptr.d08 [concrete] +// CHECK:STDOUT: %a_ref.patt: %pattern_type.f00 = ref_binding_pattern a_ref [concrete] +// CHECK:STDOUT: %a_ref.var_patt: %pattern_type.f00 = var_pattern %a_ref.patt [concrete] // CHECK:STDOUT: %addr: %ptr.d08 = addr_of file.%a_orig.var [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] @@ -93,15 +97,15 @@ var a: i32* = a_ref; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a_orig.patt: %pattern_type.6b6 = ref_binding_pattern a_orig [concrete] -// CHECK:STDOUT: %a_orig.var_patt: %pattern_type.6b6 = var_pattern %a_orig.patt [concrete] +// CHECK:STDOUT: %a_orig.patt: %pattern_type.6b6 = ref_binding_pattern a_orig [concrete = constants.%a_orig.patt] +// CHECK:STDOUT: %a_orig.var_patt: %pattern_type.6b6 = var_pattern %a_orig.patt [concrete = constants.%a_orig.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a_orig.var: ref %i32 = var %a_orig.var_patt [concrete] // CHECK:STDOUT: %i32.loc4: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %a_orig: ref %i32 = ref_binding a_orig, %a_orig.var [concrete = %a_orig.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a_ref.patt: %pattern_type.f00 = ref_binding_pattern a_ref [concrete] -// CHECK:STDOUT: %a_ref.var_patt: %pattern_type.f00 = var_pattern %a_ref.patt [concrete] +// CHECK:STDOUT: %a_ref.patt: %pattern_type.f00 = ref_binding_pattern a_ref [concrete = constants.%a_ref.patt] +// CHECK:STDOUT: %a_ref.var_patt: %pattern_type.f00 = var_pattern %a_ref.patt [concrete = constants.%a_ref.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a_ref.var: ref %ptr.d08 = var %a_ref.var_patt [concrete] // CHECK:STDOUT: %.loc5: type = splice_block %ptr [concrete = constants.%ptr.d08] { @@ -145,6 +149,10 @@ var a: i32* = a_ref; // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %ptr.d08: type = ptr_type %i32 [concrete] // CHECK:STDOUT: %pattern_type.f00: type = pattern_type %ptr.d08 [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.f00 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.f00 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a_ref.patt: %pattern_type.f00 = ref_binding_pattern a_ref [concrete] +// CHECK:STDOUT: %a_ref.var_patt: %pattern_type.f00 = var_pattern %a_ref.patt [concrete] // CHECK:STDOUT: %Copy.impl_witness.101: = impl_witness imports.%Copy.impl_witness_table.90e, @ptr.as.Copy.impl(%i32) [concrete] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.type.c1c: type = fn_type @ptr.as.Copy.impl.Op, @ptr.as.Copy.impl(%i32) [concrete] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.d1c: %ptr.as.Copy.impl.Op.type.c1c = struct_value () [concrete] @@ -166,9 +174,7 @@ var a: i32* = a_ref; // CHECK:STDOUT: %Implicit.import_ref.499: @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op.type (%ptr.as.Copy.impl.Op.type.ff5) = import_ref Implicit//default, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op (constants.%ptr.as.Copy.impl.Op.ce9)] // CHECK:STDOUT: %Copy.impl_witness_table.90e = impl_witness_table (%Implicit.import_ref.499), @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: %a_ref.patt: %pattern_type.f00 = ref_binding_pattern a_ref [concrete] -// CHECK:STDOUT: %a_ref.var_patt: %pattern_type.f00 = var_pattern %a_ref.patt [concrete] -// CHECK:STDOUT: %a_ref.var: ref %ptr.d08 = var %a_ref.var_patt [concrete] +// CHECK:STDOUT: %a_ref.var: ref %ptr.d08 = var constants.%a_ref.var_patt [concrete] // CHECK:STDOUT: %Core.Copy: type = import_ref Core//prelude/parts/copy, Copy, loaded [concrete = constants.%Copy.type] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -183,8 +189,8 @@ var a: i32* = a_ref; // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.f00 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.f00 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.f00 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.f00 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %ptr.d08 = var %a.var_patt [concrete] // CHECK:STDOUT: %.loc4: type = splice_block %ptr [concrete = constants.%ptr.d08] { diff --git a/toolchain/check/testdata/pointer/nested_const.carbon b/toolchain/check/testdata/pointer/nested_const.carbon index b4b8c946623c..7c0842eb92c4 100644 --- a/toolchain/check/testdata/pointer/nested_const.carbon +++ b/toolchain/check/testdata/pointer/nested_const.carbon @@ -32,8 +32,12 @@ fn F(p: const (const (const i32*)*)) -> const i32 { // CHECK:STDOUT: %ptr.f93: type = ptr_type %const.8df [concrete] // CHECK:STDOUT: %const.99e: type = const_type %ptr.f93 [concrete] // CHECK:STDOUT: %pattern_type.a04: type = pattern_type %const.99e [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.a04 = value_param_pattern [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.a04 = at_binding_pattern p, %p.param_patt [concrete] // CHECK:STDOUT: %.242: Core.Form = init_form %const.6a8 [concrete] // CHECK:STDOUT: %pattern_type.ed1: type = pattern_type %const.6a8 [concrete] +// CHECK:STDOUT: %return.param_patt.2ae: %pattern_type.ed1 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.524: %pattern_type.ed1 = return_slot_pattern %return.param_patt.2ae, %const.6a8 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -75,10 +79,10 @@ fn F(p: const (const (const i32*)*)) -> const i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %p.param_patt: %pattern_type.a04 = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.a04 = at_binding_pattern p, %p.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.ed1 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.ed1 = return_slot_pattern %return.param_patt, %const.loc16_41 [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.a04 = value_param_pattern [concrete = constants.%p.param_patt] +// CHECK:STDOUT: %p.patt: %pattern_type.a04 = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.ed1 = out_param_pattern [concrete = constants.%return.param_patt.2ae] +// CHECK:STDOUT: %return.patt: %pattern_type.ed1 = return_slot_pattern %return.param_patt, %const.loc16_41 [concrete = constants.%return.patt.524] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc16_47: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %const.loc16_41: type = const_type %i32.loc16_47 [concrete = constants.%const.6a8] @@ -107,8 +111,10 @@ fn F(p: const (const (const i32*)*)) -> const i32 { // CHECK:STDOUT: %.loc17_10.2: %const.6a8 = acquire_value %.loc17_10.1 // CHECK:STDOUT: %impl.elem0: %.367 = impl_witness_access constants.%Copy.impl_witness.0b0, element0 [concrete = constants.%const.as.Copy.impl.Op.9cf] // CHECK:STDOUT: %bound_method.loc17_10.1: = bound_method %.loc17_10.2, %impl.elem0 -// CHECK:STDOUT: %Copy.facet: %Copy.type = facet_value constants.%i32, (constants.%Copy.impl_witness.0e0) [concrete = constants.%Copy.facet.987] -// CHECK:STDOUT: %.loc17_10.3: %Copy.type = converted constants.%i32, %Copy.facet [concrete = constants.%Copy.facet.987] +// CHECK:STDOUT: %Copy.facet.loc17_10.1: %Copy.type = facet_value constants.%i32, (constants.%Copy.impl_witness.0e0) [concrete = constants.%Copy.facet.987] +// CHECK:STDOUT: %.loc17_10.3: %Copy.type = converted constants.%i32, %Copy.facet.loc17_10.1 [concrete = constants.%Copy.facet.987] +// CHECK:STDOUT: %Copy.facet.loc17_10.2: %Copy.type = facet_value constants.%i32, (constants.%Copy.impl_witness.0e0) [concrete = constants.%Copy.facet.987] +// CHECK:STDOUT: %.loc17_10.4: %Copy.type = converted constants.%i32, %Copy.facet.loc17_10.2 [concrete = constants.%Copy.facet.987] // CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0, @const.as.Copy.impl.Op(constants.%Copy.facet.987) [concrete = constants.%const.as.Copy.impl.Op.specific_fn] // CHECK:STDOUT: %bound_method.loc17_10.2: = bound_method %.loc17_10.2, %specific_fn // CHECK:STDOUT: %const.as.Copy.impl.Op.call: init %const.6a8 = call %bound_method.loc17_10.2(%.loc17_10.2) diff --git a/toolchain/check/testdata/pointer/types.carbon b/toolchain/check/testdata/pointer/types.carbon index 025df1e2e3fd..c522106d5d5e 100644 --- a/toolchain/check/testdata/pointer/types.carbon +++ b/toolchain/check/testdata/pointer/types.carbon @@ -29,7 +29,11 @@ fn ConstPtr(p: const i32*) -> (const i32)* { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %ptr.d08: type = ptr_type %i32 [concrete] // CHECK:STDOUT: %pattern_type.f00: type = pattern_type %ptr.d08 [concrete] +// CHECK:STDOUT: %p.param_patt.b89: %pattern_type.f00 = value_param_pattern [concrete] +// CHECK:STDOUT: %p.patt.204: %pattern_type.f00 = at_binding_pattern p, %p.param_patt.b89 [concrete] // CHECK:STDOUT: %.952: Core.Form = init_form %ptr.d08 [concrete] +// CHECK:STDOUT: %return.param_patt.7dd: %pattern_type.f00 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.dbe: %pattern_type.f00 = return_slot_pattern %return.param_patt.7dd, %ptr.d08 [concrete] // CHECK:STDOUT: %Ptr.type: type = fn_type @Ptr [concrete] // CHECK:STDOUT: %Ptr: %Ptr.type = struct_value () [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -46,7 +50,11 @@ fn ConstPtr(p: const i32*) -> (const i32)* { // CHECK:STDOUT: %const.6a8: type = const_type %i32 [concrete] // CHECK:STDOUT: %ptr.774: type = ptr_type %const.6a8 [concrete] // CHECK:STDOUT: %pattern_type.8c1: type = pattern_type %ptr.774 [concrete] +// CHECK:STDOUT: %p.param_patt.5f6: %pattern_type.8c1 = value_param_pattern [concrete] +// CHECK:STDOUT: %p.patt.226: %pattern_type.8c1 = at_binding_pattern p, %p.param_patt.5f6 [concrete] // CHECK:STDOUT: %.af2: Core.Form = init_form %ptr.774 [concrete] +// CHECK:STDOUT: %return.param_patt.0fc: %pattern_type.8c1 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e15: %pattern_type.8c1 = return_slot_pattern %return.param_patt.0fc, %ptr.774 [concrete] // CHECK:STDOUT: %ConstPtr.type: type = fn_type @ConstPtr [concrete] // CHECK:STDOUT: %ConstPtr: %ConstPtr.type = struct_value () [concrete] // CHECK:STDOUT: %Copy.impl_witness.1fe: = impl_witness imports.%Copy.impl_witness_table.4f1, @ptr.as.Copy.impl(%const.6a8) [concrete] @@ -79,10 +87,10 @@ fn ConstPtr(p: const i32*) -> (const i32)* { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Ptr.decl: %Ptr.type = fn_decl @Ptr [concrete = constants.%Ptr] { -// CHECK:STDOUT: %p.param_patt: %pattern_type.f00 = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.f00 = at_binding_pattern p, %p.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.f00 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.f00 = return_slot_pattern %return.param_patt, %ptr.loc15_23 [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.f00 = value_param_pattern [concrete = constants.%p.param_patt.b89] +// CHECK:STDOUT: %p.patt: %pattern_type.f00 = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt.204] +// CHECK:STDOUT: %return.param_patt: %pattern_type.f00 = out_param_pattern [concrete = constants.%return.param_patt.7dd] +// CHECK:STDOUT: %return.patt: %pattern_type.f00 = return_slot_pattern %return.param_patt, %ptr.loc15_23 [concrete = constants.%return.patt.dbe] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc15_20: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %ptr.loc15_23: type = ptr_type %i32.loc15_20 [concrete = constants.%ptr.d08] @@ -97,10 +105,10 @@ fn ConstPtr(p: const i32*) -> (const i32)* { // CHECK:STDOUT: %return: ref %ptr.d08 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %ConstPtr.decl: %ConstPtr.type = fn_decl @ConstPtr [concrete = constants.%ConstPtr] { -// CHECK:STDOUT: %p.param_patt: %pattern_type.8c1 = value_param_pattern [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.8c1 = at_binding_pattern p, %p.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.8c1 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.8c1 = return_slot_pattern %return.param_patt, %ptr.loc19_42 [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.8c1 = value_param_pattern [concrete = constants.%p.param_patt.5f6] +// CHECK:STDOUT: %p.patt: %pattern_type.8c1 = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt.226] +// CHECK:STDOUT: %return.param_patt: %pattern_type.8c1 = out_param_pattern [concrete = constants.%return.param_patt.0fc] +// CHECK:STDOUT: %return.patt: %pattern_type.8c1 = return_slot_pattern %return.param_patt, %ptr.loc19_42 [concrete = constants.%return.patt.e15] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc19_38: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %const.loc19_32: type = const_type %i32.loc19_38 [concrete = constants.%const.6a8] diff --git a/toolchain/check/testdata/primitives/string_literals.carbon b/toolchain/check/testdata/primitives/string_literals.carbon index fbe92fa2ab14..2f64ae5bd691 100644 --- a/toolchain/check/testdata/primitives/string_literals.carbon +++ b/toolchain/check/testdata/primitives/string_literals.carbon @@ -121,6 +121,7 @@ This string contains 256 characters. Among them are: // CHECK:STDOUT: %u8: type = class_type @UInt, @UInt(%int_8) [concrete] // CHECK:STDOUT: %ptr.093: type = ptr_type %u8 [concrete] // CHECK:STDOUT: %pattern_type.adf: type = pattern_type %str.3d4 [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.adf = value_binding_pattern x [concrete] // CHECK:STDOUT: %str.f81: %ptr.093 = string_literal "hello" [concrete] // CHECK:STDOUT: %int_5: %u8 = int_value 5 [concrete] // CHECK:STDOUT: %String.val: %str.3d4 = struct_value (%str.f81, %int_5) [concrete] @@ -128,7 +129,7 @@ This string contains 256 characters. Among them are: // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.adf = value_binding_pattern x [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.adf = value_binding_pattern x [concrete = constants.%x.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %str: type = type_literal constants.%str.3d4 [concrete = constants.%str.3d4] // CHECK:STDOUT: %x: %str.3d4 = value_binding x, @__global_init.%String.val @@ -150,12 +151,13 @@ This string contains 256 characters. Among them are: // CHECK:STDOUT: %u8: type = class_type @UInt, @UInt(%int_8) [concrete] // CHECK:STDOUT: %ptr.093: type = ptr_type %u8 [concrete] // CHECK:STDOUT: %pattern_type.adf: type = pattern_type %str.3d4 [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.adf = value_binding_pattern x [concrete] // CHECK:STDOUT: %str.9e7: %ptr.093 = string_literal "A string so long its size does not fit in `u8`. This results in an error,\nbecause we can't form a `Core.String` value that describes this string.\n\nThis string contains 256 characters. Among them are:\n\n* 6 `g`s,\n* 21 `s`s,\n* 9 newlines,\n* and only one `p`.\n" [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.adf = value_binding_pattern x [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.adf = value_binding_pattern x [concrete = constants.%x.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %str: type = type_literal constants.%str.3d4 [concrete = constants.%str.3d4] // CHECK:STDOUT: %x: %str.3d4 = value_binding x, [concrete = ] diff --git a/toolchain/check/testdata/primitives/type_literals.carbon b/toolchain/check/testdata/primitives/type_literals.carbon index 74643c366e0d..b2398265f466 100644 --- a/toolchain/check/testdata/primitives/type_literals.carbon +++ b/toolchain/check/testdata/primitives/type_literals.carbon @@ -295,6 +295,8 @@ var test_str: str = (); // CHECK:STDOUT: %int_8: Core.IntLiteral = int_value 8 [concrete] // CHECK:STDOUT: %i8: type = class_type @Int, @Int(%int_8) [concrete] // CHECK:STDOUT: %pattern_type.0cf: type = pattern_type %i8 [concrete] +// CHECK:STDOUT: %test_i8.patt: %pattern_type.0cf = ref_binding_pattern test_i8 [concrete] +// CHECK:STDOUT: %test_i8.var_patt: %pattern_type.0cf = var_pattern %test_i8.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.150: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] @@ -304,16 +306,22 @@ var test_str: str = (); // CHECK:STDOUT: %int_16: Core.IntLiteral = int_value 16 [concrete] // CHECK:STDOUT: %i16: type = class_type @Int, @Int(%int_16) [concrete] // CHECK:STDOUT: %pattern_type.203: type = pattern_type %i16 [concrete] +// CHECK:STDOUT: %test_i16.patt: %pattern_type.203 = ref_binding_pattern test_i16 [concrete] +// CHECK:STDOUT: %test_i16.var_patt: %pattern_type.203 = var_pattern %test_i16.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.impl_witness.77c: = impl_witness imports.%DefaultOrUnformed.impl_witness_table.374, @T.as.DefaultOrUnformed.impl(%i16) [concrete] // CHECK:STDOUT: %DefaultOrUnformed.facet.0f9: %DefaultOrUnformed.type = facet_value %i16, (%DefaultOrUnformed.impl_witness.77c) [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %test_i32.patt: %pattern_type.6b6 = ref_binding_pattern test_i32 [concrete] +// CHECK:STDOUT: %test_i32.var_patt: %pattern_type.6b6 = var_pattern %test_i32.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.impl_witness.e52: = impl_witness imports.%DefaultOrUnformed.impl_witness_table.374, @T.as.DefaultOrUnformed.impl(%i32) [concrete] // CHECK:STDOUT: %DefaultOrUnformed.facet.e5a: %DefaultOrUnformed.type = facet_value %i32, (%DefaultOrUnformed.impl_witness.e52) [concrete] // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %i64: type = class_type @Int, @Int(%int_64) [concrete] // CHECK:STDOUT: %pattern_type.f57: type = pattern_type %i64 [concrete] +// CHECK:STDOUT: %test_i64.patt: %pattern_type.f57 = ref_binding_pattern test_i64 [concrete] +// CHECK:STDOUT: %test_i64.var_patt: %pattern_type.f57 = var_pattern %test_i64.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.impl_witness.bba: = impl_witness imports.%DefaultOrUnformed.impl_witness_table.374, @T.as.DefaultOrUnformed.impl(%i64) [concrete] // CHECK:STDOUT: %DefaultOrUnformed.facet.b9d: %DefaultOrUnformed.type = facet_value %i64, (%DefaultOrUnformed.impl_witness.bba) [concrete] // CHECK:STDOUT: } @@ -325,29 +333,29 @@ var test_str: str = (); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %test_i8.patt: %pattern_type.0cf = ref_binding_pattern test_i8 [concrete] -// CHECK:STDOUT: %test_i8.var_patt: %pattern_type.0cf = var_pattern %test_i8.patt [concrete] +// CHECK:STDOUT: %test_i8.patt: %pattern_type.0cf = ref_binding_pattern test_i8 [concrete = constants.%test_i8.patt] +// CHECK:STDOUT: %test_i8.var_patt: %pattern_type.0cf = var_pattern %test_i8.patt [concrete = constants.%test_i8.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %test_i8.var: ref %i8 = var %test_i8.var_patt [concrete] // CHECK:STDOUT: %i8: type = type_literal constants.%i8 [concrete = constants.%i8] // CHECK:STDOUT: %test_i8: ref %i8 = ref_binding test_i8, %test_i8.var [concrete = %test_i8.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %test_i16.patt: %pattern_type.203 = ref_binding_pattern test_i16 [concrete] -// CHECK:STDOUT: %test_i16.var_patt: %pattern_type.203 = var_pattern %test_i16.patt [concrete] +// CHECK:STDOUT: %test_i16.patt: %pattern_type.203 = ref_binding_pattern test_i16 [concrete = constants.%test_i16.patt] +// CHECK:STDOUT: %test_i16.var_patt: %pattern_type.203 = var_pattern %test_i16.patt [concrete = constants.%test_i16.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %test_i16.var: ref %i16 = var %test_i16.var_patt [concrete] // CHECK:STDOUT: %i16: type = type_literal constants.%i16 [concrete = constants.%i16] // CHECK:STDOUT: %test_i16: ref %i16 = ref_binding test_i16, %test_i16.var [concrete = %test_i16.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %test_i32.patt: %pattern_type.6b6 = ref_binding_pattern test_i32 [concrete] -// CHECK:STDOUT: %test_i32.var_patt: %pattern_type.6b6 = var_pattern %test_i32.patt [concrete] +// CHECK:STDOUT: %test_i32.patt: %pattern_type.6b6 = ref_binding_pattern test_i32 [concrete = constants.%test_i32.patt] +// CHECK:STDOUT: %test_i32.var_patt: %pattern_type.6b6 = var_pattern %test_i32.patt [concrete = constants.%test_i32.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %test_i32.var: ref %i32 = var %test_i32.var_patt [concrete] // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %test_i32: ref %i32 = ref_binding test_i32, %test_i32.var [concrete = %test_i32.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %test_i64.patt: %pattern_type.f57 = ref_binding_pattern test_i64 [concrete] -// CHECK:STDOUT: %test_i64.var_patt: %pattern_type.f57 = var_pattern %test_i64.patt [concrete] +// CHECK:STDOUT: %test_i64.patt: %pattern_type.f57 = ref_binding_pattern test_i64 [concrete = constants.%test_i64.patt] +// CHECK:STDOUT: %test_i64.var_patt: %pattern_type.f57 = var_pattern %test_i64.patt [concrete = constants.%test_i64.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %test_i64.var: ref %i64 = var %test_i64.var_patt [concrete] // CHECK:STDOUT: %i64: type = type_literal constants.%i64 [concrete = constants.%i64] @@ -393,6 +401,8 @@ var test_str: str = (); // CHECK:STDOUT: %int_8: Core.IntLiteral = int_value 8 [concrete] // CHECK:STDOUT: %u8: type = class_type @UInt, @UInt(%int_8) [concrete] // CHECK:STDOUT: %pattern_type.186: type = pattern_type %u8 [concrete] +// CHECK:STDOUT: %test_u8.patt: %pattern_type.186 = ref_binding_pattern test_u8 [concrete] +// CHECK:STDOUT: %test_u8.var_patt: %pattern_type.186 = var_pattern %test_u8.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.150: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] @@ -402,16 +412,22 @@ var test_str: str = (); // CHECK:STDOUT: %int_16: Core.IntLiteral = int_value 16 [concrete] // CHECK:STDOUT: %u16: type = class_type @UInt, @UInt(%int_16) [concrete] // CHECK:STDOUT: %pattern_type.17c: type = pattern_type %u16 [concrete] +// CHECK:STDOUT: %test_u16.patt: %pattern_type.17c = ref_binding_pattern test_u16 [concrete] +// CHECK:STDOUT: %test_u16.var_patt: %pattern_type.17c = var_pattern %test_u16.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.impl_witness.caf: = impl_witness imports.%DefaultOrUnformed.impl_witness_table.374, @T.as.DefaultOrUnformed.impl(%u16) [concrete] // CHECK:STDOUT: %DefaultOrUnformed.facet.2f2: %DefaultOrUnformed.type = facet_value %u16, (%DefaultOrUnformed.impl_witness.caf) [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %u32: type = class_type @UInt, @UInt(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.668: type = pattern_type %u32 [concrete] +// CHECK:STDOUT: %test_u32.patt: %pattern_type.668 = ref_binding_pattern test_u32 [concrete] +// CHECK:STDOUT: %test_u32.var_patt: %pattern_type.668 = var_pattern %test_u32.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.impl_witness.4e1: = impl_witness imports.%DefaultOrUnformed.impl_witness_table.374, @T.as.DefaultOrUnformed.impl(%u32) [concrete] // CHECK:STDOUT: %DefaultOrUnformed.facet.4eb: %DefaultOrUnformed.type = facet_value %u32, (%DefaultOrUnformed.impl_witness.4e1) [concrete] // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %u64: type = class_type @UInt, @UInt(%int_64) [concrete] // CHECK:STDOUT: %pattern_type.b35: type = pattern_type %u64 [concrete] +// CHECK:STDOUT: %test_u64.patt: %pattern_type.b35 = ref_binding_pattern test_u64 [concrete] +// CHECK:STDOUT: %test_u64.var_patt: %pattern_type.b35 = var_pattern %test_u64.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.impl_witness.4ac: = impl_witness imports.%DefaultOrUnformed.impl_witness_table.374, @T.as.DefaultOrUnformed.impl(%u64) [concrete] // CHECK:STDOUT: %DefaultOrUnformed.facet.662: %DefaultOrUnformed.type = facet_value %u64, (%DefaultOrUnformed.impl_witness.4ac) [concrete] // CHECK:STDOUT: } @@ -423,29 +439,29 @@ var test_str: str = (); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %test_u8.patt: %pattern_type.186 = ref_binding_pattern test_u8 [concrete] -// CHECK:STDOUT: %test_u8.var_patt: %pattern_type.186 = var_pattern %test_u8.patt [concrete] +// CHECK:STDOUT: %test_u8.patt: %pattern_type.186 = ref_binding_pattern test_u8 [concrete = constants.%test_u8.patt] +// CHECK:STDOUT: %test_u8.var_patt: %pattern_type.186 = var_pattern %test_u8.patt [concrete = constants.%test_u8.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %test_u8.var: ref %u8 = var %test_u8.var_patt [concrete] // CHECK:STDOUT: %u8: type = type_literal constants.%u8 [concrete = constants.%u8] // CHECK:STDOUT: %test_u8: ref %u8 = ref_binding test_u8, %test_u8.var [concrete = %test_u8.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %test_u16.patt: %pattern_type.17c = ref_binding_pattern test_u16 [concrete] -// CHECK:STDOUT: %test_u16.var_patt: %pattern_type.17c = var_pattern %test_u16.patt [concrete] +// CHECK:STDOUT: %test_u16.patt: %pattern_type.17c = ref_binding_pattern test_u16 [concrete = constants.%test_u16.patt] +// CHECK:STDOUT: %test_u16.var_patt: %pattern_type.17c = var_pattern %test_u16.patt [concrete = constants.%test_u16.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %test_u16.var: ref %u16 = var %test_u16.var_patt [concrete] // CHECK:STDOUT: %u16: type = type_literal constants.%u16 [concrete = constants.%u16] // CHECK:STDOUT: %test_u16: ref %u16 = ref_binding test_u16, %test_u16.var [concrete = %test_u16.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %test_u32.patt: %pattern_type.668 = ref_binding_pattern test_u32 [concrete] -// CHECK:STDOUT: %test_u32.var_patt: %pattern_type.668 = var_pattern %test_u32.patt [concrete] +// CHECK:STDOUT: %test_u32.patt: %pattern_type.668 = ref_binding_pattern test_u32 [concrete = constants.%test_u32.patt] +// CHECK:STDOUT: %test_u32.var_patt: %pattern_type.668 = var_pattern %test_u32.patt [concrete = constants.%test_u32.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %test_u32.var: ref %u32 = var %test_u32.var_patt [concrete] // CHECK:STDOUT: %u32: type = type_literal constants.%u32 [concrete = constants.%u32] // CHECK:STDOUT: %test_u32: ref %u32 = ref_binding test_u32, %test_u32.var [concrete = %test_u32.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %test_u64.patt: %pattern_type.b35 = ref_binding_pattern test_u64 [concrete] -// CHECK:STDOUT: %test_u64.var_patt: %pattern_type.b35 = var_pattern %test_u64.patt [concrete] +// CHECK:STDOUT: %test_u64.patt: %pattern_type.b35 = ref_binding_pattern test_u64 [concrete = constants.%test_u64.patt] +// CHECK:STDOUT: %test_u64.var_patt: %pattern_type.b35 = var_pattern %test_u64.patt [concrete = constants.%test_u64.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %test_u64.var: ref %u64 = var %test_u64.var_patt [concrete] // CHECK:STDOUT: %u64: type = type_literal constants.%u64 [concrete = constants.%u64] @@ -491,6 +507,8 @@ var test_str: str = (); // CHECK:STDOUT: %int_16: Core.IntLiteral = int_value 16 [concrete] // CHECK:STDOUT: %f16.907: type = class_type @Float, @Float(%int_16) [concrete] // CHECK:STDOUT: %pattern_type.7cc: type = pattern_type %f16.907 [concrete] +// CHECK:STDOUT: %test_f16.patt: %pattern_type.7cc = ref_binding_pattern test_f16 [concrete] +// CHECK:STDOUT: %test_f16.var_patt: %pattern_type.7cc = var_pattern %test_f16.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.150: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] @@ -500,16 +518,22 @@ var test_str: str = (); // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %f32.c73: type = class_type @Float, @Float(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.240: type = pattern_type %f32.c73 [concrete] +// CHECK:STDOUT: %test_f32.patt: %pattern_type.240 = ref_binding_pattern test_f32 [concrete] +// CHECK:STDOUT: %test_f32.var_patt: %pattern_type.240 = var_pattern %test_f32.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.impl_witness.be8: = impl_witness imports.%DefaultOrUnformed.impl_witness_table.374, @T.as.DefaultOrUnformed.impl(%f32.c73) [concrete] // CHECK:STDOUT: %DefaultOrUnformed.facet.92c: %DefaultOrUnformed.type = facet_value %f32.c73, (%DefaultOrUnformed.impl_witness.be8) [concrete] // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %f64.dc1: type = class_type @Float, @Float(%int_64) [concrete] // CHECK:STDOUT: %pattern_type.fb7: type = pattern_type %f64.dc1 [concrete] +// CHECK:STDOUT: %test_f64.patt: %pattern_type.fb7 = ref_binding_pattern test_f64 [concrete] +// CHECK:STDOUT: %test_f64.var_patt: %pattern_type.fb7 = var_pattern %test_f64.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.impl_witness.994: = impl_witness imports.%DefaultOrUnformed.impl_witness_table.374, @T.as.DefaultOrUnformed.impl(%f64.dc1) [concrete] // CHECK:STDOUT: %DefaultOrUnformed.facet.a01: %DefaultOrUnformed.type = facet_value %f64.dc1, (%DefaultOrUnformed.impl_witness.994) [concrete] // CHECK:STDOUT: %int_128: Core.IntLiteral = int_value 128 [concrete] // CHECK:STDOUT: %f128.e39: type = class_type @Float, @Float(%int_128) [concrete] // CHECK:STDOUT: %pattern_type.847: type = pattern_type %f128.e39 [concrete] +// CHECK:STDOUT: %test_f128.patt: %pattern_type.847 = ref_binding_pattern test_f128 [concrete] +// CHECK:STDOUT: %test_f128.var_patt: %pattern_type.847 = var_pattern %test_f128.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.impl_witness.44c: = impl_witness imports.%DefaultOrUnformed.impl_witness_table.374, @T.as.DefaultOrUnformed.impl(%f128.e39) [concrete] // CHECK:STDOUT: %DefaultOrUnformed.facet.566: %DefaultOrUnformed.type = facet_value %f128.e39, (%DefaultOrUnformed.impl_witness.44c) [concrete] // CHECK:STDOUT: } @@ -521,29 +545,29 @@ var test_str: str = (); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %test_f16.patt: %pattern_type.7cc = ref_binding_pattern test_f16 [concrete] -// CHECK:STDOUT: %test_f16.var_patt: %pattern_type.7cc = var_pattern %test_f16.patt [concrete] +// CHECK:STDOUT: %test_f16.patt: %pattern_type.7cc = ref_binding_pattern test_f16 [concrete = constants.%test_f16.patt] +// CHECK:STDOUT: %test_f16.var_patt: %pattern_type.7cc = var_pattern %test_f16.patt [concrete = constants.%test_f16.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %test_f16.var: ref %f16.907 = var %test_f16.var_patt [concrete] // CHECK:STDOUT: %f16: type = type_literal constants.%f16.907 [concrete = constants.%f16.907] // CHECK:STDOUT: %test_f16: ref %f16.907 = ref_binding test_f16, %test_f16.var [concrete = %test_f16.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %test_f32.patt: %pattern_type.240 = ref_binding_pattern test_f32 [concrete] -// CHECK:STDOUT: %test_f32.var_patt: %pattern_type.240 = var_pattern %test_f32.patt [concrete] +// CHECK:STDOUT: %test_f32.patt: %pattern_type.240 = ref_binding_pattern test_f32 [concrete = constants.%test_f32.patt] +// CHECK:STDOUT: %test_f32.var_patt: %pattern_type.240 = var_pattern %test_f32.patt [concrete = constants.%test_f32.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %test_f32.var: ref %f32.c73 = var %test_f32.var_patt [concrete] // CHECK:STDOUT: %f32: type = type_literal constants.%f32.c73 [concrete = constants.%f32.c73] // CHECK:STDOUT: %test_f32: ref %f32.c73 = ref_binding test_f32, %test_f32.var [concrete = %test_f32.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %test_f64.patt: %pattern_type.fb7 = ref_binding_pattern test_f64 [concrete] -// CHECK:STDOUT: %test_f64.var_patt: %pattern_type.fb7 = var_pattern %test_f64.patt [concrete] +// CHECK:STDOUT: %test_f64.patt: %pattern_type.fb7 = ref_binding_pattern test_f64 [concrete = constants.%test_f64.patt] +// CHECK:STDOUT: %test_f64.var_patt: %pattern_type.fb7 = var_pattern %test_f64.patt [concrete = constants.%test_f64.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %test_f64.var: ref %f64.dc1 = var %test_f64.var_patt [concrete] // CHECK:STDOUT: %f64: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %test_f64: ref %f64.dc1 = ref_binding test_f64, %test_f64.var [concrete = %test_f64.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %test_f128.patt: %pattern_type.847 = ref_binding_pattern test_f128 [concrete] -// CHECK:STDOUT: %test_f128.var_patt: %pattern_type.847 = var_pattern %test_f128.patt [concrete] +// CHECK:STDOUT: %test_f128.patt: %pattern_type.847 = ref_binding_pattern test_f128 [concrete = constants.%test_f128.patt] +// CHECK:STDOUT: %test_f128.var_patt: %pattern_type.847 = var_pattern %test_f128.patt [concrete = constants.%test_f128.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %test_f128.var: ref %f128.e39 = var %test_f128.var_patt [concrete] // CHECK:STDOUT: %f128: type = type_literal constants.%f128.e39 [concrete = constants.%f128.e39] @@ -588,6 +612,7 @@ var test_str: str = (); // CHECK:STDOUT: constants { // CHECK:STDOUT: %char: type = class_type @Char [concrete] // CHECK:STDOUT: %pattern_type.2ff: type = pattern_type %char [concrete] +// CHECK:STDOUT: %test_char.patt: %pattern_type.2ff = value_binding_pattern test_char [concrete] // CHECK:STDOUT: %.b9b: Core.CharLiteral = char_value U+0063 [concrete] // CHECK:STDOUT: %ImplicitAs.type.e81: type = facet_type <@ImplicitAs, @ImplicitAs(%char)> [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness: = impl_witness imports.%ImplicitAs.impl_witness_table [concrete] @@ -607,14 +632,14 @@ var test_str: str = (); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %test_char.patt: %pattern_type.2ff = value_binding_pattern test_char [concrete] +// CHECK:STDOUT: %test_char.patt: %pattern_type.2ff = value_binding_pattern test_char [concrete = constants.%test_char.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %char: type = type_literal constants.%char [concrete = constants.%char] // CHECK:STDOUT: %impl.elem0: %.1e6 = impl_witness_access constants.%ImplicitAs.impl_witness, element0 [concrete = constants.%Core.CharLiteral.as.ImplicitAs.impl.Convert] // CHECK:STDOUT: %bound_method: = bound_method @__global_init.%.loc5, %impl.elem0 [concrete = constants.%Core.CharLiteral.as.ImplicitAs.impl.Convert.bound] // CHECK:STDOUT: %Core.CharLiteral.as.ImplicitAs.impl.Convert.call: init %char = call %bound_method(@__global_init.%.loc5) [concrete = constants.%int_99] // CHECK:STDOUT: %.loc5_23.1: %char = value_of_initializer %Core.CharLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_99] // CHECK:STDOUT: %.loc5_23.2: %char = converted @__global_init.%.loc5, %.loc5_23.1 [concrete = constants.%int_99] +// CHECK:STDOUT: %char: type = type_literal constants.%char [concrete = constants.%char] // CHECK:STDOUT: %test_char: %char = value_binding test_char, %.loc5_23.2 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -634,6 +659,7 @@ var test_str: str = (); // CHECK:STDOUT: %u8: type = class_type @UInt, @UInt(%int_8) [concrete] // CHECK:STDOUT: %ptr.093: type = ptr_type %u8 [concrete] // CHECK:STDOUT: %pattern_type.adf: type = pattern_type %str.3d4 [concrete] +// CHECK:STDOUT: %test_str.patt: %pattern_type.adf = value_binding_pattern test_str [concrete] // CHECK:STDOUT: %str.16f: %ptr.093 = string_literal "Test" [concrete] // CHECK:STDOUT: %int_4: %u64 = int_value 4 [concrete] // CHECK:STDOUT: %String.val: %str.3d4 = struct_value (%str.16f, %int_4) [concrete] @@ -641,7 +667,7 @@ var test_str: str = (); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %test_str.patt: %pattern_type.adf = value_binding_pattern test_str [concrete] +// CHECK:STDOUT: %test_str.patt: %pattern_type.adf = value_binding_pattern test_str [concrete = constants.%test_str.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %str: type = type_literal constants.%str.3d4 [concrete = constants.%str.3d4] // CHECK:STDOUT: %test_str: %str.3d4 = value_binding test_str, @__global_init.%String.val @@ -659,6 +685,8 @@ var test_str: str = (); // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %test_type.patt: %pattern_type.98f = ref_binding_pattern test_type [concrete] +// CHECK:STDOUT: %test_type.var_patt: %pattern_type.98f = var_pattern %test_type.patt [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -678,8 +706,8 @@ var test_str: str = (); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %test_type.patt: %pattern_type.98f = ref_binding_pattern test_type [concrete] -// CHECK:STDOUT: %test_type.var_patt: %pattern_type.98f = var_pattern %test_type.patt [concrete] +// CHECK:STDOUT: %test_type.patt: %pattern_type.98f = ref_binding_pattern test_type [concrete = constants.%test_type.patt] +// CHECK:STDOUT: %test_type.var_patt: %pattern_type.98f = var_pattern %test_type.patt [concrete = constants.%test_type.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %test_type.var: ref type = var %test_type.var_patt [concrete] // CHECK:STDOUT: %.loc5: type = type_literal type [concrete = type] diff --git a/toolchain/check/testdata/return/code_after_return_value.carbon b/toolchain/check/testdata/return/code_after_return_value.carbon index d9db7c562593..562067cbb43d 100644 --- a/toolchain/check/testdata/return/code_after_return_value.carbon +++ b/toolchain/check/testdata/return/code_after_return_value.carbon @@ -28,12 +28,16 @@ fn F(unused b: bool) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete] // 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: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] @@ -80,10 +84,10 @@ fn F(unused b: bool) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc15_25: Core.Form = init_form %i32 [concrete = constants.%.795] diff --git a/toolchain/check/testdata/return/fail_call_in_type.carbon b/toolchain/check/testdata/return/fail_call_in_type.carbon index 23e2de9dd3fd..71a3a4ffec6d 100644 --- a/toolchain/check/testdata/return/fail_call_in_type.carbon +++ b/toolchain/check/testdata/return/fail_call_in_type.carbon @@ -26,6 +26,8 @@ fn Six() -> ReturnType() { return 6; } // CHECK:STDOUT: constants { // CHECK:STDOUT: %.805: Core.Form = init_form type [concrete] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %return.param_patt.70e: %pattern_type.98f = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.3ae: %pattern_type.98f = return_slot_pattern %return.param_patt.70e, type [concrete] // CHECK:STDOUT: %ReturnType.type: type = fn_type @ReturnType [concrete] // CHECK:STDOUT: %ReturnType: %ReturnType.type = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] @@ -66,8 +68,8 @@ fn Six() -> ReturnType() { return 6; } // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %ReturnType.decl: %ReturnType.type = fn_decl @ReturnType [concrete = constants.%ReturnType] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.98f = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern %return.param_patt, %.loc17_20.1 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.98f = out_param_pattern [concrete = constants.%return.param_patt.70e] +// CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern %return.param_patt, %.loc17_20.1 [concrete = constants.%return.patt.3ae] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc17_20.1: type = type_literal type [concrete = type] // CHECK:STDOUT: %.loc17_20.2: Core.Form = init_form %.loc17_20.1 [concrete = constants.%.805] @@ -75,7 +77,7 @@ fn Six() -> ReturnType() { return 6; } // CHECK:STDOUT: %return: ref type = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Six.decl: %Six.type = fn_decl @Six [concrete = constants.%Six] { -// CHECK:STDOUT: %return.patt: = return_slot_pattern , [concrete] +// CHECK:STDOUT: %return.patt: = return_slot_pattern , [concrete = ] // CHECK:STDOUT: } { // CHECK:STDOUT: %ReturnType.ref: %ReturnType.type = name_ref ReturnType, file.%ReturnType.decl [concrete = constants.%ReturnType] // CHECK:STDOUT: %ReturnType.call: init type = call %ReturnType.ref() diff --git a/toolchain/check/testdata/return/fail_error_in_type.carbon b/toolchain/check/testdata/return/fail_error_in_type.carbon index 03f67e3c5cba..8dfdba0ab6ce 100644 --- a/toolchain/check/testdata/return/fail_error_in_type.carbon +++ b/toolchain/check/testdata/return/fail_error_in_type.carbon @@ -40,7 +40,7 @@ fn Six() -> x; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Six.decl: %Six.type = fn_decl @Six [concrete = constants.%Six] { -// CHECK:STDOUT: %return.patt: = return_slot_pattern , [concrete] +// CHECK:STDOUT: %return.patt: = return_slot_pattern , [concrete = ] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.ref: = name_ref x, [concrete = ] // CHECK:STDOUT: %return: = return_slot diff --git a/toolchain/check/testdata/return/fail_let_in_type.carbon b/toolchain/check/testdata/return/fail_let_in_type.carbon index d3c8a70e51cb..f5ac24d741a6 100644 --- a/toolchain/check/testdata/return/fail_let_in_type.carbon +++ b/toolchain/check/testdata/return/fail_let_in_type.carbon @@ -47,6 +47,7 @@ fn FirstPerfectNumber() -> z { return 6; } // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.98f = value_binding_pattern x [concrete] // 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] @@ -56,8 +57,10 @@ fn FirstPerfectNumber() -> z { return 6; } // CHECK:STDOUT: %int_6: Core.IntLiteral = int_value 6 [concrete] // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] +// CHECK:STDOUT: %y.patt: %pattern_type.98f = value_binding_pattern y [concrete] // CHECK:STDOUT: %HalfDozen.type: type = fn_type @HalfDozen [concrete] // CHECK:STDOUT: %HalfDozen: %HalfDozen.type = struct_value () [concrete] +// CHECK:STDOUT: %z.patt: %pattern_type.98f = value_binding_pattern z [concrete] // CHECK:STDOUT: %FirstPerfectNumber.type: type = fn_type @FirstPerfectNumber [concrete] // CHECK:STDOUT: %FirstPerfectNumber: %FirstPerfectNumber.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -83,18 +86,18 @@ fn FirstPerfectNumber() -> z { return 6; } // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.98f = value_binding_pattern x [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.98f = value_binding_pattern x [concrete = constants.%x.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc15: type = type_literal type [concrete = type] // CHECK:STDOUT: %x: type = value_binding x, @__global_init.%i32.loc15 // CHECK:STDOUT: %Six.decl: %Six.type = fn_decl @Six [concrete = constants.%Six] { -// CHECK:STDOUT: %return.patt: = return_slot_pattern , [concrete] +// CHECK:STDOUT: %return.patt: = return_slot_pattern , [concrete = ] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.ref: type = name_ref x, file.%x // CHECK:STDOUT: %return: = return_slot // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %pattern_type.98f = value_binding_pattern y [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.98f = value_binding_pattern y [concrete = constants.%y.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc27_9.1: type = splice_block %.loc27_9.2 [concrete = type] { // CHECK:STDOUT: %.Self.loc27: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -102,13 +105,13 @@ fn FirstPerfectNumber() -> z { return 6; } // CHECK:STDOUT: } // CHECK:STDOUT: %y: type = value_binding y, @__global_init.%i32.loc27 // CHECK:STDOUT: %HalfDozen.decl: %HalfDozen.type = fn_decl @HalfDozen [concrete = constants.%HalfDozen] { -// CHECK:STDOUT: %return.patt: = return_slot_pattern , [concrete] +// CHECK:STDOUT: %return.patt: = return_slot_pattern , [concrete = ] // CHECK:STDOUT: } { // CHECK:STDOUT: %y.ref: type = name_ref y, file.%y // CHECK:STDOUT: %return: = return_slot // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %z.patt: %pattern_type.98f = value_binding_pattern z [concrete] +// CHECK:STDOUT: %z.patt: %pattern_type.98f = value_binding_pattern z [concrete = constants.%z.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc39_18.1: type = splice_block %.loc39_18.2 [concrete = type] { // CHECK:STDOUT: %.Self.loc39: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -116,7 +119,7 @@ fn FirstPerfectNumber() -> z { return 6; } // CHECK:STDOUT: } // CHECK:STDOUT: %z: type = value_binding z, @__global_init.%i32.loc39 // CHECK:STDOUT: %FirstPerfectNumber.decl: %FirstPerfectNumber.type = fn_decl @FirstPerfectNumber [concrete = constants.%FirstPerfectNumber] { -// CHECK:STDOUT: %return.patt: = return_slot_pattern , [concrete] +// CHECK:STDOUT: %return.patt: = return_slot_pattern , [concrete = ] // CHECK:STDOUT: } { // CHECK:STDOUT: %z.ref: type = name_ref z, file.%z // CHECK:STDOUT: %return: = return_slot diff --git a/toolchain/check/testdata/return/fail_missing_return.carbon b/toolchain/check/testdata/return/fail_missing_return.carbon index ba1a2a0c1ec4..23784c7993b9 100644 --- a/toolchain/check/testdata/return/fail_missing_return.carbon +++ b/toolchain/check/testdata/return/fail_missing_return.carbon @@ -28,6 +28,8 @@ fn Main() -> i32 { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -48,8 +50,8 @@ fn Main() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Main.decl: %Main.type = fn_decl @Main [concrete = constants.%Main] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc15: Core.Form = init_form %i32 [concrete = constants.%.795] diff --git a/toolchain/check/testdata/return/fail_missing_return_empty_tuple.carbon b/toolchain/check/testdata/return/fail_missing_return_empty_tuple.carbon index 5122d4028814..767c84cc6e6b 100644 --- a/toolchain/check/testdata/return/fail_missing_return_empty_tuple.carbon +++ b/toolchain/check/testdata/return/fail_missing_return_empty_tuple.carbon @@ -26,6 +26,8 @@ fn F() -> () { // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %.262: Core.Form = init_form %empty_tuple.type [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %empty_tuple.type [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -35,8 +37,8 @@ fn F() -> () { // CHECK:STDOUT: .F = %F.decl // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %.loc15_12.2 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %.loc15_12.2 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc15_12.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc15_12.2: type = converted %.loc15_12.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] diff --git a/toolchain/check/testdata/return/fail_return_var_no_returned_var.carbon b/toolchain/check/testdata/return/fail_return_var_no_returned_var.carbon index 4aaac0b72fc3..dc4916fe6b5a 100644 --- a/toolchain/check/testdata/return/fail_return_var_no_returned_var.carbon +++ b/toolchain/check/testdata/return/fail_return_var_no_returned_var.carbon @@ -27,6 +27,8 @@ fn Procedure() -> {} { // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %.469: Core.Form = init_form %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_struct_type [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %empty_struct_type [concrete] // CHECK:STDOUT: %Procedure.type: type = fn_type @Procedure [concrete] // CHECK:STDOUT: %Procedure: %Procedure.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -36,8 +38,8 @@ fn Procedure() -> {} { // CHECK:STDOUT: .Procedure = %Procedure.decl // CHECK:STDOUT: } // CHECK:STDOUT: %Procedure.decl: %Procedure.type = fn_decl @Procedure [concrete = constants.%Procedure] { -// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %.loc15_20.2 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %.loc15_20.2 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc15_20.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] // CHECK:STDOUT: %.loc15_20.2: type = converted %.loc15_20.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type] diff --git a/toolchain/check/testdata/return/fail_return_with_returned_var.carbon b/toolchain/check/testdata/return/fail_return_with_returned_var.carbon index c0e20842aa91..678401429fde 100644 --- a/toolchain/check/testdata/return/fail_return_with_returned_var.carbon +++ b/toolchain/check/testdata/return/fail_return_with_returned_var.carbon @@ -47,9 +47,13 @@ fn G() -> C { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.6b6 = ref_binding_pattern v [concrete] +// CHECK:STDOUT: %v.var_patt: %pattern_type.6b6 = var_pattern %v.patt [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -77,8 +81,12 @@ fn G() -> C { // CHECK:STDOUT: %complete_type.7b9: = complete_type_witness %struct_type.a.b.b4c [concrete] // CHECK:STDOUT: %.a44: Core.Form = init_form %C [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %return.param_patt.89a: %pattern_type.98b = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e4a: %pattern_type.98b = return_slot_pattern %return.param_patt.89a, %C [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %struct_type.a.b.cfd: type = struct_type {.a: Core.IntLiteral, .b: Core.IntLiteral} [concrete] // CHECK:STDOUT: %struct: %struct_type.a.b.cfd = struct_value (%int_1.5b8, %int_2.ecc) [concrete] @@ -115,8 +123,8 @@ fn G() -> C { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc15 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc15 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc15: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc15: Core.Form = init_form %i32.loc15 [concrete = constants.%.795] @@ -125,8 +133,8 @@ fn G() -> C { // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C.ref.loc28 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete = constants.%return.param_patt.89a] +// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C.ref.loc28 [concrete = constants.%return.patt.e4a] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc28: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %.loc28: Core.Form = init_form %C.ref.loc28 [concrete = constants.%.a44] @@ -150,8 +158,8 @@ fn G() -> C { // CHECK:STDOUT: fn @F() -> out %return.param: %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %pattern_type.6b6 = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: %pattern_type.6b6 = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.6b6 = ref_binding_pattern v [concrete = constants.%v.patt] +// CHECK:STDOUT: %v.var_patt: %pattern_type.6b6 = var_pattern %v.patt [concrete = constants.%v.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %i32 = var %v.var_patt // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0.5c6] @@ -180,8 +188,8 @@ fn G() -> C { // CHECK:STDOUT: fn @G() -> out %return.param: %C { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.98b = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type.98b = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2.ecc] diff --git a/toolchain/check/testdata/return/fail_returned_var_no_return_type.carbon b/toolchain/check/testdata/return/fail_returned_var_no_return_type.carbon index a99449e91d70..e6ed43ef4b01 100644 --- a/toolchain/check/testdata/return/fail_returned_var_no_return_type.carbon +++ b/toolchain/check/testdata/return/fail_returned_var_no_return_type.carbon @@ -56,6 +56,8 @@ fn ForgotReturnType() { // CHECK:STDOUT: %Procedure: %Procedure.type = struct_value () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.cb1 = ref_binding_pattern v [concrete] +// CHECK:STDOUT: %v.var_patt: %pattern_type.cb1 = var_pattern %v.patt [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] // CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] @@ -82,8 +84,8 @@ fn ForgotReturnType() { // CHECK:STDOUT: fn @Procedure() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %pattern_type.cb1 = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: %pattern_type.cb1 = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.cb1 = ref_binding_pattern v [concrete = constants.%v.patt] +// CHECK:STDOUT: %v.var_patt: %pattern_type.cb1 = var_pattern %v.patt [concrete = constants.%v.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %empty_tuple.type = var %v.var_patt // CHECK:STDOUT: %.loc12_32.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] @@ -110,6 +112,8 @@ fn ForgotReturnType() { // CHECK:STDOUT: %ForgotReturnType: %ForgotReturnType.type = struct_value () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.cb1 = ref_binding_pattern v [concrete] +// CHECK:STDOUT: %v.var_patt: %pattern_type.cb1 = var_pattern %v.patt [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] // CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] @@ -136,8 +140,8 @@ fn ForgotReturnType() { // CHECK:STDOUT: fn @ForgotReturnType() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %pattern_type.cb1 = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: %pattern_type.cb1 = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.cb1 = ref_binding_pattern v [concrete = constants.%v.patt] +// CHECK:STDOUT: %v.var_patt: %pattern_type.cb1 = var_pattern %v.patt [concrete = constants.%v.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %empty_tuple.type = var %v.var_patt // CHECK:STDOUT: %.loc12_32.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] diff --git a/toolchain/check/testdata/return/fail_returned_var_shadow.carbon b/toolchain/check/testdata/return/fail_returned_var_shadow.carbon index 016c11a13025..a0d150e15114 100644 --- a/toolchain/check/testdata/return/fail_returned_var_shadow.carbon +++ b/toolchain/check/testdata/return/fail_returned_var_shadow.carbon @@ -54,10 +54,14 @@ fn DifferentScopes() -> i32 { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %SameScope.type: type = fn_type @SameScope [concrete] // CHECK:STDOUT: %SameScope: %SameScope.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %true: bool = bool_literal true [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.6b6 = ref_binding_pattern v [concrete] +// CHECK:STDOUT: %v.var_patt: %pattern_type.6b6 = var_pattern %v.patt [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -75,6 +79,8 @@ fn DifferentScopes() -> i32 { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39, @Core.IntLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete] // CHECK:STDOUT: %bound_method.6e0: = bound_method %int_0.5c6, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_0.3c0: %i32 = int_value 0 [concrete] +// CHECK:STDOUT: %w.patt.859340.1: %pattern_type.6b6 = ref_binding_pattern w [concrete] +// CHECK:STDOUT: %w.var_patt.82cc74.1: %pattern_type.6b6 = var_pattern %w.patt.859340.1 [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.094: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] // CHECK:STDOUT: %bound_method.953: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] @@ -84,6 +90,8 @@ fn DifferentScopes() -> i32 { // CHECK:STDOUT: %Destroy.Op.1a2547.2: %Destroy.Op.type.1d8f74.2 = struct_value () [concrete] // CHECK:STDOUT: %DifferentScopes.type: type = fn_type @DifferentScopes [concrete] // CHECK:STDOUT: %DifferentScopes: %DifferentScopes.type = struct_value () [concrete] +// CHECK:STDOUT: %w.patt.859340.2: %pattern_type.6b6 = ref_binding_pattern w [concrete] +// CHECK:STDOUT: %w.var_patt.82cc74.2: %pattern_type.6b6 = var_pattern %w.patt.859340.2 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -109,8 +117,8 @@ fn DifferentScopes() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %SameScope.decl: %SameScope.type = fn_decl @SameScope [concrete = constants.%SameScope] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc15 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc15 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc15: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc15: Core.Form = init_form %i32.loc15 [concrete = constants.%.795] @@ -118,8 +126,8 @@ fn DifferentScopes() -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %DifferentScopes.decl: %DifferentScopes.type = fn_decl @DifferentScopes [concrete = constants.%DifferentScopes] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc30 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc30 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc30: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc30: Core.Form = init_form %i32.loc30 [concrete = constants.%.795] @@ -135,8 +143,8 @@ fn DifferentScopes() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: !if.then: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %pattern_type.6b6 = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: %pattern_type.6b6 = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.6b6 = ref_binding_pattern v [concrete = constants.%v.patt] +// CHECK:STDOUT: %v.var_patt: %pattern_type.6b6 = var_pattern %v.patt [concrete = constants.%v.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %i32 = var %v.var_patt // CHECK:STDOUT: %int_0.loc17: Core.IntLiteral = int_value 0 [concrete = constants.%int_0.5c6] @@ -150,8 +158,8 @@ fn DifferentScopes() -> i32 { // CHECK:STDOUT: %i32.loc17: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %v: ref %i32 = ref_binding v, %v.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %w.patt: %pattern_type.6b6 = ref_binding_pattern w [concrete] -// CHECK:STDOUT: %w.var_patt: %pattern_type.6b6 = var_pattern %w.patt [concrete] +// CHECK:STDOUT: %w.patt: %pattern_type.6b6 = ref_binding_pattern w [concrete = constants.%w.patt.859340.1] +// CHECK:STDOUT: %w.var_patt: %pattern_type.6b6 = var_pattern %w.patt [concrete = constants.%w.var_patt.82cc74.1] // CHECK:STDOUT: } // CHECK:STDOUT: %w.var: ref %i32 = var %w.var_patt // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -195,8 +203,8 @@ fn DifferentScopes() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: !if.then.loc31: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %pattern_type.6b6 = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: %pattern_type.6b6 = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.6b6 = ref_binding_pattern v [concrete = constants.%v.patt] +// CHECK:STDOUT: %v.var_patt: %pattern_type.6b6 = var_pattern %v.patt [concrete = constants.%v.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %i32 = var %v.var_patt // CHECK:STDOUT: %int_0.loc32: Core.IntLiteral = int_value 0 [concrete = constants.%int_0.5c6] @@ -214,8 +222,8 @@ fn DifferentScopes() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: !if.then.loc33: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %w.patt: %pattern_type.6b6 = ref_binding_pattern w [concrete] -// CHECK:STDOUT: %w.var_patt: %pattern_type.6b6 = var_pattern %w.patt [concrete] +// CHECK:STDOUT: %w.patt: %pattern_type.6b6 = ref_binding_pattern w [concrete = constants.%w.patt.859340.2] +// CHECK:STDOUT: %w.var_patt: %pattern_type.6b6 = var_pattern %w.patt [concrete = constants.%w.var_patt.82cc74.2] // CHECK:STDOUT: } // CHECK:STDOUT: %w.var: ref %i32 = var %w.var_patt // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] diff --git a/toolchain/check/testdata/return/fail_returned_var_type.carbon b/toolchain/check/testdata/return/fail_returned_var_type.carbon index 63ef0bb334c8..57e82060c56a 100644 --- a/toolchain/check/testdata/return/fail_returned_var_type.carbon +++ b/toolchain/check/testdata/return/fail_returned_var_type.carbon @@ -34,6 +34,8 @@ fn Mismatch() -> i32 { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %Mismatch.type: type = fn_type @Mismatch [concrete] // CHECK:STDOUT: %Mismatch: %Mismatch.type = struct_value () [concrete] // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] @@ -42,6 +44,8 @@ fn Mismatch() -> i32 { // CHECK:STDOUT: %f64.dc1: type = class_type @Float, @Float(%int_64) [concrete] // CHECK:STDOUT: %f64.794: type = float_type %int_64, f64 [concrete] // CHECK:STDOUT: %pattern_type.fb7: type = pattern_type %f64.dc1 [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.fb7 = ref_binding_pattern v [concrete] +// CHECK:STDOUT: %v.var_patt: %pattern_type.fb7 = var_pattern %v.patt [concrete] // CHECK:STDOUT: %float.1f7: Core.FloatLiteral = float_literal_value 0e-1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -88,8 +92,8 @@ fn Mismatch() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Mismatch.decl: %Mismatch.type = fn_decl @Mismatch [concrete = constants.%Mismatch] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc15: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -101,8 +105,8 @@ fn Mismatch() -> i32 { // CHECK:STDOUT: fn @Mismatch() -> out %return.param: %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %pattern_type.fb7 = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: %pattern_type.fb7 = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.fb7 = ref_binding_pattern v [concrete = constants.%v.patt] +// CHECK:STDOUT: %v.var_patt: %pattern_type.fb7 = var_pattern %v.patt [concrete = constants.%v.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %f64.dc1 = var %v.var_patt // CHECK:STDOUT: %float: Core.FloatLiteral = float_literal_value 0e-1 [concrete = constants.%float.1f7] diff --git a/toolchain/check/testdata/return/fail_type_mismatch.carbon b/toolchain/check/testdata/return/fail_type_mismatch.carbon index 88cf9c740077..2322e9f5b811 100644 --- a/toolchain/check/testdata/return/fail_type_mismatch.carbon +++ b/toolchain/check/testdata/return/fail_type_mismatch.carbon @@ -32,6 +32,8 @@ fn Main() -> i32 { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] // CHECK:STDOUT: %float: Core.FloatLiteral = float_literal_value 10e-1 [concrete] @@ -57,8 +59,8 @@ fn Main() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Main.decl: %Main.type = fn_decl @Main [concrete = constants.%Main] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc15: Core.Form = init_form %i32 [concrete = constants.%.795] diff --git a/toolchain/check/testdata/return/fail_value_missing.carbon b/toolchain/check/testdata/return/fail_value_missing.carbon index 391da78ae726..a7ac5defc592 100644 --- a/toolchain/check/testdata/return/fail_value_missing.carbon +++ b/toolchain/check/testdata/return/fail_value_missing.carbon @@ -32,6 +32,8 @@ fn Main() -> i32 { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -52,8 +54,8 @@ fn Main() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Main.decl: %Main.type = fn_decl @Main [concrete = constants.%Main] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc15: Core.Form = init_form %i32 [concrete = constants.%.795] diff --git a/toolchain/check/testdata/return/fail_var_in_type.carbon b/toolchain/check/testdata/return/fail_var_in_type.carbon index 394377fa1edb..cc93dbd60db0 100644 --- a/toolchain/check/testdata/return/fail_var_in_type.carbon +++ b/toolchain/check/testdata/return/fail_var_in_type.carbon @@ -23,6 +23,8 @@ fn Six() -> x { return 6; } // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.98f = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.98f = var_pattern %x.patt [concrete] // 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] @@ -61,14 +63,14 @@ fn Six() -> x { return 6; } // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.98f = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.98f = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.98f = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.98f = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref type = var %x.var_patt [concrete] // CHECK:STDOUT: %.loc15: type = type_literal type [concrete = type] // CHECK:STDOUT: %x: ref type = ref_binding x, %x.var [concrete = %x.var] // CHECK:STDOUT: %Six.decl: %Six.type = fn_decl @Six [concrete = constants.%Six] { -// CHECK:STDOUT: %return.patt: = return_slot_pattern , [concrete] +// CHECK:STDOUT: %return.patt: = return_slot_pattern , [concrete = ] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.ref: ref type = name_ref x, file.%x [concrete = file.%x.var] // CHECK:STDOUT: %.loc20: type = acquire_value %x.ref diff --git a/toolchain/check/testdata/return/import_convert_function.carbon b/toolchain/check/testdata/return/import_convert_function.carbon index 31da74135241..254122c46713 100644 --- a/toolchain/check/testdata/return/import_convert_function.carbon +++ b/toolchain/check/testdata/return/import_convert_function.carbon @@ -58,6 +58,7 @@ fn F0(unused n: i32) -> P.D { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %N.patt.38a: %pattern_type.6b6 = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %N.37f: %i32 = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] @@ -70,6 +71,8 @@ fn F0(unused n: i32) -> P.D { // CHECK:STDOUT: %complete_type.237: = complete_type_witness %struct_type.n.m.fa1 [concrete] // CHECK:STDOUT: %.128: Core.Form = init_form %D [concrete] // CHECK:STDOUT: %pattern_type.b22: type = pattern_type %D [concrete] +// CHECK:STDOUT: %return.param_patt.dca: %pattern_type.b22 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.904: %pattern_type.b22 = return_slot_pattern %return.param_patt.dca, %D [concrete] // CHECK:STDOUT: %Make.type: type = fn_type @Make [concrete] // CHECK:STDOUT: %Make: %Make.type = struct_value () [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] @@ -96,6 +99,8 @@ fn F0(unused n: i32) -> P.D { // CHECK:STDOUT: %ImplicitAs.type.24d: type = facet_type <@ImplicitAs, @ImplicitAs(%D)> [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.4c1: = impl_witness @C.as.ImplicitAs.impl.0e1.%ImplicitAs.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.84d: type = pattern_type %C.771 [concrete] +// CHECK:STDOUT: %self.param_patt.98b: %pattern_type.84d = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.975: %pattern_type.84d = at_binding_pattern self, %self.param_patt.98b [concrete] // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.type.860b0a.1: type = fn_type @C.as.ImplicitAs.impl.Convert.loc8 [concrete] // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.54620a.1: %C.as.ImplicitAs.impl.Convert.type.860b0a.1 = struct_value () [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] @@ -105,6 +110,8 @@ fn F0(unused n: i32) -> P.D { // CHECK:STDOUT: %C.83b: type = class_type @C, @C(%int_1.0c6) [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.c46: = impl_witness @C.as.ImplicitAs.impl.f6a.%ImplicitAs.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.91a: type = pattern_type %C.83b [concrete] +// CHECK:STDOUT: %self.param_patt.327: %pattern_type.91a = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.533: %pattern_type.91a = at_binding_pattern self, %self.param_patt.327 [concrete] // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.type.860b0a.2: type = fn_type @C.as.ImplicitAs.impl.Convert.loc9 [concrete] // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.54620a.2: %C.as.ImplicitAs.impl.Convert.type.860b0a.2 = struct_value () [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] @@ -114,6 +121,8 @@ fn F0(unused n: i32) -> P.D { // CHECK:STDOUT: %C.5ce: type = class_type @C, @C(%int_2.295) [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.430: = impl_witness @C.as.ImplicitAs.impl.aab.%ImplicitAs.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.7dd: type = pattern_type %C.5ce [concrete] +// CHECK:STDOUT: %self.param_patt.e14: %pattern_type.7dd = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.426: %pattern_type.7dd = at_binding_pattern self, %self.param_patt.e14 [concrete] // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.type.860b0a.3: type = fn_type @C.as.ImplicitAs.impl.Convert.loc10 [concrete] // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.54620a.3: %C.as.ImplicitAs.impl.Convert.type.860b0a.3 = struct_value () [concrete] // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] @@ -123,6 +132,8 @@ fn F0(unused n: i32) -> P.D { // CHECK:STDOUT: %C.b3e: type = class_type @C, @C(%int_3.410) [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.b6d: = impl_witness @C.as.ImplicitAs.impl.203.%ImplicitAs.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.26a: type = pattern_type %C.b3e [concrete] +// CHECK:STDOUT: %self.param_patt.0fc: %pattern_type.26a = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.450: %pattern_type.26a = at_binding_pattern self, %self.param_patt.0fc [concrete] // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.type.860b0a.4: type = fn_type @C.as.ImplicitAs.impl.Convert.loc11 [concrete] // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.54620a.4: %C.as.ImplicitAs.impl.Convert.type.860b0a.4 = struct_value () [concrete] // CHECK:STDOUT: %int_4.0c1: Core.IntLiteral = int_value 4 [concrete] @@ -132,6 +143,8 @@ fn F0(unused n: i32) -> P.D { // CHECK:STDOUT: %C.8ee: type = class_type @C, @C(%int_4.4eb) [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.c85: = impl_witness @C.as.ImplicitAs.impl.371.%ImplicitAs.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.387: type = pattern_type %C.8ee [concrete] +// CHECK:STDOUT: %self.param_patt.826: %pattern_type.387 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.401: %pattern_type.387 = at_binding_pattern self, %self.param_patt.826 [concrete] // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.type.860b0a.5: type = fn_type @C.as.ImplicitAs.impl.Convert.loc12 [concrete] // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.54620a.5: %C.as.ImplicitAs.impl.Convert.type.860b0a.5 = struct_value () [concrete] // CHECK:STDOUT: %int_5.64b: Core.IntLiteral = int_value 5 [concrete] @@ -141,6 +154,8 @@ fn F0(unused n: i32) -> P.D { // CHECK:STDOUT: %C.5c1: type = class_type @C, @C(%int_5.eef) [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.1af: = impl_witness @C.as.ImplicitAs.impl.c73.%ImplicitAs.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.05e: type = pattern_type %C.5c1 [concrete] +// CHECK:STDOUT: %self.param_patt.f7b: %pattern_type.05e = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.283: %pattern_type.05e = at_binding_pattern self, %self.param_patt.f7b [concrete] // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.type.860b0a.6: type = fn_type @C.as.ImplicitAs.impl.Convert.loc13 [concrete] // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.54620a.6: %C.as.ImplicitAs.impl.Convert.type.860b0a.6 = struct_value () [concrete] // CHECK:STDOUT: %int_6.462: Core.IntLiteral = int_value 6 [concrete] @@ -150,6 +165,8 @@ fn F0(unused n: i32) -> P.D { // CHECK:STDOUT: %C.57b: type = class_type @C, @C(%int_6.439) [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.c9c: = impl_witness @C.as.ImplicitAs.impl.2f3.%ImplicitAs.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.4b0: type = pattern_type %C.57b [concrete] +// CHECK:STDOUT: %self.param_patt.e33: %pattern_type.4b0 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.7b4: %pattern_type.4b0 = at_binding_pattern self, %self.param_patt.e33 [concrete] // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.type.860b0a.7: type = fn_type @C.as.ImplicitAs.impl.Convert.loc14 [concrete] // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.54620a.7: %C.as.ImplicitAs.impl.Convert.type.860b0a.7 = struct_value () [concrete] // CHECK:STDOUT: %int_7.29f: Core.IntLiteral = int_value 7 [concrete] @@ -159,6 +176,8 @@ fn F0(unused n: i32) -> P.D { // CHECK:STDOUT: %C.b0a: type = class_type @C, @C(%int_7.690) [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.642: = impl_witness @C.as.ImplicitAs.impl.28a.%ImplicitAs.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.bc2: type = pattern_type %C.b0a [concrete] +// CHECK:STDOUT: %self.param_patt.21a: %pattern_type.bc2 = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt.94c: %pattern_type.bc2 = at_binding_pattern self, %self.param_patt.21a [concrete] // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.type.860b0a.8: type = fn_type @C.as.ImplicitAs.impl.Convert.loc15 [concrete] // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.54620a.8: %C.as.ImplicitAs.impl.Convert.type.860b0a.8 = struct_value () [concrete] // CHECK:STDOUT: } @@ -185,7 +204,7 @@ fn F0(unused n: i32) -> P.D { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %N.patt: %pattern_type.6b6 = symbolic_binding_pattern N, 0 [concrete] +// CHECK:STDOUT: %N.patt.loc4_10.1: %pattern_type.6b6 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_10.2 (constants.%N.patt.38a)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4: type = splice_block %i32 [concrete = constants.%i32] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -195,8 +214,8 @@ fn F0(unused n: i32) -> P.D { // CHECK:STDOUT: } // CHECK:STDOUT: %D.decl: type = class_decl @D [concrete = constants.%D] {} {} // CHECK:STDOUT: %Make.decl: %Make.type = fn_decl @Make [concrete = constants.%Make] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.b22 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.b22 = return_slot_pattern %return.param_patt, %D.ref [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.b22 = out_param_pattern [concrete = constants.%return.param_patt.dca] +// CHECK:STDOUT: %return.patt: %pattern_type.b22 = return_slot_pattern %return.param_patt, %D.ref [concrete = constants.%return.patt.904] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl [concrete = constants.%D] // CHECK:STDOUT: %.loc6_14: Core.Form = init_form %D.ref [concrete = constants.%.128] @@ -335,10 +354,10 @@ fn F0(unused n: i32) -> P.D { // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.ImplicitAs.impl.0e1: %C as %ImplicitAs.type { // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.decl: %C.as.ImplicitAs.impl.Convert.type.860b0a.1 = fn_decl @C.as.ImplicitAs.impl.Convert.loc8 [concrete = constants.%C.as.ImplicitAs.impl.Convert.54620a.1] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.84d = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.84d = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.b22 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.b22 = return_slot_pattern %return.param_patt, %D.ref [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.84d = value_param_pattern [concrete = constants.%self.param_patt.98b] +// CHECK:STDOUT: %self.patt: %pattern_type.84d = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.975] +// CHECK:STDOUT: %return.param_patt: %pattern_type.b22 = out_param_pattern [concrete = constants.%return.param_patt.dca] +// CHECK:STDOUT: %return.patt: %pattern_type.b22 = return_slot_pattern %return.param_patt, %D.ref [concrete = constants.%return.patt.904] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl [concrete = constants.%D] // CHECK:STDOUT: %.loc8_62.2: Core.Form = init_form %D.ref [concrete = constants.%.128] @@ -361,10 +380,10 @@ fn F0(unused n: i32) -> P.D { // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.ImplicitAs.impl.f6a: %C as %ImplicitAs.type { // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.decl: %C.as.ImplicitAs.impl.Convert.type.860b0a.2 = fn_decl @C.as.ImplicitAs.impl.Convert.loc9 [concrete = constants.%C.as.ImplicitAs.impl.Convert.54620a.2] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.91a = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.91a = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.b22 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.b22 = return_slot_pattern %return.param_patt, %D.ref [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.91a = value_param_pattern [concrete = constants.%self.param_patt.327] +// CHECK:STDOUT: %self.patt: %pattern_type.91a = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.533] +// CHECK:STDOUT: %return.param_patt: %pattern_type.b22 = out_param_pattern [concrete = constants.%return.param_patt.dca] +// CHECK:STDOUT: %return.patt: %pattern_type.b22 = return_slot_pattern %return.param_patt, %D.ref [concrete = constants.%return.patt.904] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl [concrete = constants.%D] // CHECK:STDOUT: %.loc9_62.2: Core.Form = init_form %D.ref [concrete = constants.%.128] @@ -387,10 +406,10 @@ fn F0(unused n: i32) -> P.D { // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.ImplicitAs.impl.aab: %C as %ImplicitAs.type { // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.decl: %C.as.ImplicitAs.impl.Convert.type.860b0a.3 = fn_decl @C.as.ImplicitAs.impl.Convert.loc10 [concrete = constants.%C.as.ImplicitAs.impl.Convert.54620a.3] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.7dd = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.7dd = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.b22 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.b22 = return_slot_pattern %return.param_patt, %D.ref [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.7dd = value_param_pattern [concrete = constants.%self.param_patt.e14] +// CHECK:STDOUT: %self.patt: %pattern_type.7dd = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.426] +// CHECK:STDOUT: %return.param_patt: %pattern_type.b22 = out_param_pattern [concrete = constants.%return.param_patt.dca] +// CHECK:STDOUT: %return.patt: %pattern_type.b22 = return_slot_pattern %return.param_patt, %D.ref [concrete = constants.%return.patt.904] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl [concrete = constants.%D] // CHECK:STDOUT: %.loc10_62.2: Core.Form = init_form %D.ref [concrete = constants.%.128] @@ -413,10 +432,10 @@ fn F0(unused n: i32) -> P.D { // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.ImplicitAs.impl.203: %C as %ImplicitAs.type { // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.decl: %C.as.ImplicitAs.impl.Convert.type.860b0a.4 = fn_decl @C.as.ImplicitAs.impl.Convert.loc11 [concrete = constants.%C.as.ImplicitAs.impl.Convert.54620a.4] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.26a = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.26a = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.b22 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.b22 = return_slot_pattern %return.param_patt, %D.ref [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.26a = value_param_pattern [concrete = constants.%self.param_patt.0fc] +// CHECK:STDOUT: %self.patt: %pattern_type.26a = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.450] +// CHECK:STDOUT: %return.param_patt: %pattern_type.b22 = out_param_pattern [concrete = constants.%return.param_patt.dca] +// CHECK:STDOUT: %return.patt: %pattern_type.b22 = return_slot_pattern %return.param_patt, %D.ref [concrete = constants.%return.patt.904] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl [concrete = constants.%D] // CHECK:STDOUT: %.loc11_62.2: Core.Form = init_form %D.ref [concrete = constants.%.128] @@ -439,10 +458,10 @@ fn F0(unused n: i32) -> P.D { // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.ImplicitAs.impl.371: %C as %ImplicitAs.type { // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.decl: %C.as.ImplicitAs.impl.Convert.type.860b0a.5 = fn_decl @C.as.ImplicitAs.impl.Convert.loc12 [concrete = constants.%C.as.ImplicitAs.impl.Convert.54620a.5] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.387 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.387 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.b22 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.b22 = return_slot_pattern %return.param_patt, %D.ref [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.387 = value_param_pattern [concrete = constants.%self.param_patt.826] +// CHECK:STDOUT: %self.patt: %pattern_type.387 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.401] +// CHECK:STDOUT: %return.param_patt: %pattern_type.b22 = out_param_pattern [concrete = constants.%return.param_patt.dca] +// CHECK:STDOUT: %return.patt: %pattern_type.b22 = return_slot_pattern %return.param_patt, %D.ref [concrete = constants.%return.patt.904] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl [concrete = constants.%D] // CHECK:STDOUT: %.loc12_62.2: Core.Form = init_form %D.ref [concrete = constants.%.128] @@ -465,10 +484,10 @@ fn F0(unused n: i32) -> P.D { // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.ImplicitAs.impl.c73: %C as %ImplicitAs.type { // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.decl: %C.as.ImplicitAs.impl.Convert.type.860b0a.6 = fn_decl @C.as.ImplicitAs.impl.Convert.loc13 [concrete = constants.%C.as.ImplicitAs.impl.Convert.54620a.6] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.05e = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.05e = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.b22 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.b22 = return_slot_pattern %return.param_patt, %D.ref [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.05e = value_param_pattern [concrete = constants.%self.param_patt.f7b] +// CHECK:STDOUT: %self.patt: %pattern_type.05e = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.283] +// CHECK:STDOUT: %return.param_patt: %pattern_type.b22 = out_param_pattern [concrete = constants.%return.param_patt.dca] +// CHECK:STDOUT: %return.patt: %pattern_type.b22 = return_slot_pattern %return.param_patt, %D.ref [concrete = constants.%return.patt.904] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl [concrete = constants.%D] // CHECK:STDOUT: %.loc13_62.2: Core.Form = init_form %D.ref [concrete = constants.%.128] @@ -491,10 +510,10 @@ fn F0(unused n: i32) -> P.D { // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.ImplicitAs.impl.2f3: %C as %ImplicitAs.type { // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.decl: %C.as.ImplicitAs.impl.Convert.type.860b0a.7 = fn_decl @C.as.ImplicitAs.impl.Convert.loc14 [concrete = constants.%C.as.ImplicitAs.impl.Convert.54620a.7] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.4b0 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.4b0 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.b22 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.b22 = return_slot_pattern %return.param_patt, %D.ref [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.4b0 = value_param_pattern [concrete = constants.%self.param_patt.e33] +// CHECK:STDOUT: %self.patt: %pattern_type.4b0 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.7b4] +// CHECK:STDOUT: %return.param_patt: %pattern_type.b22 = out_param_pattern [concrete = constants.%return.param_patt.dca] +// CHECK:STDOUT: %return.patt: %pattern_type.b22 = return_slot_pattern %return.param_patt, %D.ref [concrete = constants.%return.patt.904] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl [concrete = constants.%D] // CHECK:STDOUT: %.loc14_62.2: Core.Form = init_form %D.ref [concrete = constants.%.128] @@ -517,10 +536,10 @@ fn F0(unused n: i32) -> P.D { // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.ImplicitAs.impl.28a: %C as %ImplicitAs.type { // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.decl: %C.as.ImplicitAs.impl.Convert.type.860b0a.8 = fn_decl @C.as.ImplicitAs.impl.Convert.loc15 [concrete = constants.%C.as.ImplicitAs.impl.Convert.54620a.8] { -// CHECK:STDOUT: %self.param_patt: %pattern_type.bc2 = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type.bc2 = at_binding_pattern self, %self.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.b22 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.b22 = return_slot_pattern %return.param_patt, %D.ref [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type.bc2 = value_param_pattern [concrete = constants.%self.param_patt.21a] +// CHECK:STDOUT: %self.patt: %pattern_type.bc2 = at_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.94c] +// CHECK:STDOUT: %return.param_patt: %pattern_type.b22 = out_param_pattern [concrete = constants.%return.param_patt.dca] +// CHECK:STDOUT: %return.patt: %pattern_type.b22 = return_slot_pattern %return.param_patt, %D.ref [concrete = constants.%return.patt.904] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl [concrete = constants.%D] // CHECK:STDOUT: %.loc15_62.2: Core.Form = init_form %D.ref [concrete = constants.%.128] @@ -542,6 +561,7 @@ fn F0(unused n: i32) -> P.D { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%N.loc4_10.2: %i32) { +// CHECK:STDOUT: %N.patt.loc4_10.2: %pattern_type.6b6 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_10.2 (constants.%N.patt.38a)] // CHECK:STDOUT: %N.loc4_10.1: %i32 = symbolic_binding N, 0 [symbolic = %N.loc4_10.1 (constants.%N.37f)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -658,52 +678,61 @@ fn F0(unused n: i32) -> P.D { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%N.37f) { +// CHECK:STDOUT: %N.patt.loc4_10.2 => constants.%N.patt.38a // CHECK:STDOUT: %N.loc4_10.1 => constants.%N.37f // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%int_0.3c0) { +// CHECK:STDOUT: %N.patt.loc4_10.2 => constants.%N.patt.38a // CHECK:STDOUT: %N.loc4_10.1 => constants.%int_0.3c0 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%int_1.0c6) { +// CHECK:STDOUT: %N.patt.loc4_10.2 => constants.%N.patt.38a // CHECK:STDOUT: %N.loc4_10.1 => constants.%int_1.0c6 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%int_2.295) { +// CHECK:STDOUT: %N.patt.loc4_10.2 => constants.%N.patt.38a // CHECK:STDOUT: %N.loc4_10.1 => constants.%int_2.295 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%int_3.410) { +// CHECK:STDOUT: %N.patt.loc4_10.2 => constants.%N.patt.38a // CHECK:STDOUT: %N.loc4_10.1 => constants.%int_3.410 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%int_4.4eb) { +// CHECK:STDOUT: %N.patt.loc4_10.2 => constants.%N.patt.38a // CHECK:STDOUT: %N.loc4_10.1 => constants.%int_4.4eb // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%int_5.eef) { +// CHECK:STDOUT: %N.patt.loc4_10.2 => constants.%N.patt.38a // CHECK:STDOUT: %N.loc4_10.1 => constants.%int_5.eef // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%int_6.439) { +// CHECK:STDOUT: %N.patt.loc4_10.2 => constants.%N.patt.38a // CHECK:STDOUT: %N.loc4_10.1 => constants.%int_6.439 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%int_7.690) { +// CHECK:STDOUT: %N.patt.loc4_10.2 => constants.%N.patt.38a // CHECK:STDOUT: %N.loc4_10.1 => constants.%int_7.690 // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -718,11 +747,15 @@ fn F0(unused n: i32) -> P.D { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete] // CHECK:STDOUT: %D: type = class_type @D [concrete] // CHECK:STDOUT: %struct_type.n.m: type = struct_type {.n: %i32, .m: %i32} [concrete] // CHECK:STDOUT: %complete_type.237: = complete_type_witness %struct_type.n.m [concrete] // CHECK:STDOUT: %.128: Core.Form = init_form %D [concrete] // CHECK:STDOUT: %pattern_type.b22: type = pattern_type %D [concrete] +// CHECK:STDOUT: %return.param_patt.dca: %pattern_type.b22 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.904: %pattern_type.b22 = return_slot_pattern %return.param_patt.dca, %D [concrete] // CHECK:STDOUT: %F0.type: type = fn_type @F0 [concrete] // CHECK:STDOUT: %F0: %F0.type = struct_value () [concrete] // CHECK:STDOUT: %false: bool = bool_literal false [concrete] @@ -732,6 +765,7 @@ fn F0(unused n: i32) -> P.D { // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %N.37f: %i32 = symbolic_binding N, 0 [symbolic] +// CHECK:STDOUT: %N.patt.38a: %pattern_type.6b6 = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -967,10 +1001,10 @@ fn F0(unused n: i32) -> P.D { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %P.import = import P // CHECK:STDOUT: %F0.decl: %F0.type = fn_decl @F0 [concrete = constants.%F0] { -// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.b22 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.b22 = return_slot_pattern %return.param_patt, %D.ref [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%n.param_patt] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete = constants.%n.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.b22 = out_param_pattern [concrete = constants.%return.param_patt.dca] +// CHECK:STDOUT: %return.patt: %pattern_type.b22 = return_slot_pattern %return.param_patt, %D.ref [concrete = constants.%return.patt.904] // CHECK:STDOUT: } { // CHECK:STDOUT: %P.ref.loc6: = name_ref P, imports.%P [concrete = imports.%P] // CHECK:STDOUT: %D.ref: type = name_ref D, imports.%P.D [concrete = constants.%D] @@ -1033,6 +1067,7 @@ fn F0(unused n: i32) -> P.D { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(imports.%P.import_ref.d2a: %i32) [from "library.carbon"] { +// CHECK:STDOUT: %N.patt: %pattern_type.6b6 = symbolic_binding_pattern N, 0 [symbolic = %N.patt (constants.%N.patt.38a)] // CHECK:STDOUT: %N: %i32 = symbolic_binding N, 0 [symbolic = %N (constants.%N.37f)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1391,52 +1426,61 @@ fn F0(unused n: i32) -> P.D { // CHECK:STDOUT: fn @Make [from "library.carbon"]; // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%N.37f) { +// CHECK:STDOUT: %N.patt => constants.%N.patt.38a // CHECK:STDOUT: %N => constants.%N.37f // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%int_0.3c0) { +// CHECK:STDOUT: %N.patt => constants.%N.patt.38a // CHECK:STDOUT: %N => constants.%int_0.3c0 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%int_1.0c6) { +// CHECK:STDOUT: %N.patt => constants.%N.patt.38a // CHECK:STDOUT: %N => constants.%int_1.0c6 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%int_2.295) { +// CHECK:STDOUT: %N.patt => constants.%N.patt.38a // CHECK:STDOUT: %N => constants.%int_2.295 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%int_3.410) { +// CHECK:STDOUT: %N.patt => constants.%N.patt.38a // CHECK:STDOUT: %N => constants.%int_3.410 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%int_4.4eb) { +// CHECK:STDOUT: %N.patt => constants.%N.patt.38a // CHECK:STDOUT: %N => constants.%int_4.4eb // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%int_5.eef) { +// CHECK:STDOUT: %N.patt => constants.%N.patt.38a // CHECK:STDOUT: %N => constants.%int_5.eef // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%int_6.439) { +// CHECK:STDOUT: %N.patt => constants.%N.patt.38a // CHECK:STDOUT: %N => constants.%int_6.439 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%int_7.690) { +// CHECK:STDOUT: %N.patt => constants.%N.patt.38a // CHECK:STDOUT: %N => constants.%int_7.690 // CHECK:STDOUT: // CHECK:STDOUT: !definition: diff --git a/toolchain/check/testdata/return/returned_var.carbon b/toolchain/check/testdata/return/returned_var.carbon index 7cb382d1d4d9..09e95435f59e 100644 --- a/toolchain/check/testdata/return/returned_var.carbon +++ b/toolchain/check/testdata/return/returned_var.carbon @@ -43,8 +43,12 @@ fn G() -> i32 { // CHECK:STDOUT: %complete_type.7b9: = complete_type_witness %struct_type.a.b.b4c [concrete] // CHECK:STDOUT: %.a44: Core.Form = init_form %C [concrete] // CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %return.param_patt.89a: %pattern_type.98b = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e4a: %pattern_type.98b = return_slot_pattern %return.param_patt.89a, %C [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] +// CHECK:STDOUT: %result.patt.29e: %pattern_type.98b = ref_binding_pattern result [concrete] +// CHECK:STDOUT: %result.var_patt.d89: %pattern_type.98b = var_pattern %result.patt.29e [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %struct_type.a.b.cfd: type = struct_type {.a: Core.IntLiteral, .b: Core.IntLiteral} [concrete] @@ -63,6 +67,7 @@ fn G() -> i32 { // CHECK:STDOUT: %.1c5: type = fn_type_with_self_type %ImplicitAs.WithSelf.Convert.type.740, %ImplicitAs.facet [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.094: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39, @Core.IntLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete] // CHECK:STDOUT: %bound_method.953: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_1.0c6: %i32 = int_value 1 [concrete] @@ -70,8 +75,11 @@ fn G() -> i32 { // CHECK:STDOUT: %bound_method.3cb: = bound_method %int_2.ecc, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_2.295: %i32 = int_value 2 [concrete] // CHECK:STDOUT: %C.val: %C = struct_value (%int_1.0c6, %int_2.295) [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] +// CHECK:STDOUT: %result.patt.808: %pattern_type.6b6 = ref_binding_pattern result [concrete] +// CHECK:STDOUT: %result.var_patt.a44: %pattern_type.6b6 = var_pattern %result.patt.808 [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.7b4: = bound_method %int_0.5c6, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] // CHECK:STDOUT: %bound_method.6e0: = bound_method %int_0.5c6, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] @@ -106,8 +114,8 @@ fn G() -> i32 { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C.ref.loc20 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.98b = out_param_pattern [concrete = constants.%return.param_patt.89a] +// CHECK:STDOUT: %return.patt: %pattern_type.98b = return_slot_pattern %return.param_patt, %C.ref.loc20 [concrete = constants.%return.patt.e4a] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc20: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %.loc20: Core.Form = init_form %C.ref.loc20 [concrete = constants.%.a44] @@ -115,8 +123,8 @@ fn G() -> i32 { // CHECK:STDOUT: %return: ref %C = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc25 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc25 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc25: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc25: Core.Form = init_form %i32.loc25 [concrete = constants.%.795] @@ -140,8 +148,8 @@ fn G() -> i32 { // CHECK:STDOUT: fn @F() -> out %return.param: %C { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %result.patt: %pattern_type.98b = ref_binding_pattern result [concrete] -// CHECK:STDOUT: %result.var_patt: %pattern_type.98b = var_pattern %result.patt [concrete] +// CHECK:STDOUT: %result.patt: %pattern_type.98b = ref_binding_pattern result [concrete = constants.%result.patt.29e] +// CHECK:STDOUT: %result.var_patt: %pattern_type.98b = var_pattern %result.patt [concrete = constants.%result.var_patt.d89] // CHECK:STDOUT: } // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2.ecc] @@ -174,8 +182,8 @@ fn G() -> i32 { // CHECK:STDOUT: fn @G() -> out %return.param: %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %result.patt: %pattern_type.6b6 = ref_binding_pattern result [concrete] -// CHECK:STDOUT: %result.var_patt: %pattern_type.6b6 = var_pattern %result.patt [concrete] +// CHECK:STDOUT: %result.patt: %pattern_type.6b6 = ref_binding_pattern result [concrete = constants.%result.patt.808] +// CHECK:STDOUT: %result.var_patt: %pattern_type.6b6 = var_pattern %result.patt [concrete = constants.%result.var_patt.a44] // CHECK:STDOUT: } // CHECK:STDOUT: %result.var: ref %i32 = var %result.var_patt // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0.5c6] diff --git a/toolchain/check/testdata/return/returned_var_scope.carbon b/toolchain/check/testdata/return/returned_var_scope.carbon index 48d359b1160b..e764a39f14a4 100644 --- a/toolchain/check/testdata/return/returned_var_scope.carbon +++ b/toolchain/check/testdata/return/returned_var_scope.carbon @@ -41,10 +41,14 @@ fn EnclosingButAfter(b: bool) -> i32 { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %UnrelatedScopes.type: type = fn_type @UnrelatedScopes [concrete] // CHECK:STDOUT: %UnrelatedScopes: %UnrelatedScopes.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %true: bool = bool_literal true [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.6b6 = ref_binding_pattern v [concrete] +// CHECK:STDOUT: %v.var_patt: %pattern_type.6b6 = var_pattern %v.patt [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -62,6 +66,8 @@ fn EnclosingButAfter(b: bool) -> i32 { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39, @Core.IntLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete] // CHECK:STDOUT: %bound_method.6e0: = bound_method %int_0.5c6, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_0.3c0: %i32 = int_value 0 [concrete] +// CHECK:STDOUT: %w.patt: %pattern_type.6b6 = ref_binding_pattern w [concrete] +// CHECK:STDOUT: %w.var_patt: %pattern_type.6b6 = var_pattern %w.patt [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.094: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] // CHECK:STDOUT: %bound_method.953: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] @@ -70,6 +76,8 @@ fn EnclosingButAfter(b: bool) -> i32 { // CHECK:STDOUT: %Destroy.Op.type.1d8f74.2: type = fn_type @Destroy.Op.loc20_14.2 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.2: %Destroy.Op.type.1d8f74.2 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete] // CHECK:STDOUT: %EnclosingButAfter.type: type = fn_type @EnclosingButAfter [concrete] // CHECK:STDOUT: %EnclosingButAfter: %EnclosingButAfter.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -99,8 +107,8 @@ fn EnclosingButAfter(b: bool) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %UnrelatedScopes.decl: %UnrelatedScopes.type = fn_decl @UnrelatedScopes [concrete = constants.%UnrelatedScopes] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc15 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc15 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc15: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc15: Core.Form = init_form %i32.loc15 [concrete = constants.%.795] @@ -108,10 +116,10 @@ fn EnclosingButAfter(b: bool) -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %EnclosingButAfter.decl: %EnclosingButAfter.type = fn_decl @EnclosingButAfter [concrete = constants.%EnclosingButAfter] { -// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc25 [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern [concrete = constants.%b.param_patt] +// CHECK:STDOUT: %b.patt: %pattern_type.831 = at_binding_pattern b, %b.param_patt [concrete = constants.%b.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc25 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc25: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc25_34: Core.Form = init_form %i32.loc25 [concrete = constants.%.795] @@ -130,8 +138,8 @@ fn EnclosingButAfter(b: bool) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: !if.then.loc16: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %pattern_type.6b6 = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: %pattern_type.6b6 = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.6b6 = ref_binding_pattern v [concrete = constants.%v.patt] +// CHECK:STDOUT: %v.var_patt: %pattern_type.6b6 = var_pattern %v.patt [concrete = constants.%v.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %i32 = var %v.var_patt // CHECK:STDOUT: %int_0.loc17: Core.IntLiteral = int_value 0 [concrete = constants.%int_0.5c6] @@ -152,8 +160,8 @@ fn EnclosingButAfter(b: bool) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: !if.then.loc19: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %w.patt: %pattern_type.6b6 = ref_binding_pattern w [concrete] -// CHECK:STDOUT: %w.var_patt: %pattern_type.6b6 = var_pattern %w.patt [concrete] +// CHECK:STDOUT: %w.patt: %pattern_type.6b6 = ref_binding_pattern w [concrete = constants.%w.patt] +// CHECK:STDOUT: %w.var_patt: %pattern_type.6b6 = var_pattern %w.patt [concrete = constants.%w.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %w.var: ref %i32 = var %w.var_patt // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -197,8 +205,8 @@ fn EnclosingButAfter(b: bool) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: !if.then: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %pattern_type.6b6 = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: %pattern_type.6b6 = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.6b6 = ref_binding_pattern v [concrete = constants.%v.patt] +// CHECK:STDOUT: %v.var_patt: %pattern_type.6b6 = var_pattern %v.patt [concrete = constants.%v.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %i32 = var %v.var_patt // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0.5c6] @@ -218,8 +226,8 @@ fn EnclosingButAfter(b: bool) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: !if.else: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %w.patt: %pattern_type.6b6 = ref_binding_pattern w [concrete] -// CHECK:STDOUT: %w.var_patt: %pattern_type.6b6 = var_pattern %w.patt [concrete] +// CHECK:STDOUT: %w.patt: %pattern_type.6b6 = ref_binding_pattern w [concrete = constants.%w.patt] +// CHECK:STDOUT: %w.var_patt: %pattern_type.6b6 = var_pattern %w.patt [concrete = constants.%w.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %w.var: ref %i32 = var %w.var_patt // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] diff --git a/toolchain/check/testdata/return/struct.carbon b/toolchain/check/testdata/return/struct.carbon index 5833b706d599..b80e7c4735d6 100644 --- a/toolchain/check/testdata/return/struct.carbon +++ b/toolchain/check/testdata/return/struct.carbon @@ -26,6 +26,8 @@ fn Main() -> {.a: i32} { // CHECK:STDOUT: %struct_type.a.a92: type = struct_type {.a: %i32} [concrete] // CHECK:STDOUT: %.a89: Core.Form = init_form %struct_type.a.a92 [concrete] // CHECK:STDOUT: %pattern_type.506: type = pattern_type %struct_type.a.a92 [concrete] +// CHECK:STDOUT: %return.param_patt.ba6: %pattern_type.506 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.99f: %pattern_type.506 = return_slot_pattern %return.param_patt.ba6, %struct_type.a.a92 [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] @@ -70,8 +72,8 @@ fn Main() -> {.a: i32} { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Main.decl: %Main.type = fn_decl @Main [concrete = constants.%Main] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.506 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.506 = return_slot_pattern %return.param_patt, %struct_type.a [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.506 = out_param_pattern [concrete = constants.%return.param_patt.ba6] +// CHECK:STDOUT: %return.patt: %pattern_type.506 = return_slot_pattern %return.param_patt, %struct_type.a [concrete = constants.%return.patt.99f] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %i32} [concrete = constants.%struct_type.a.a92] diff --git a/toolchain/check/testdata/return/tuple.carbon b/toolchain/check/testdata/return/tuple.carbon index d384a3621d3a..f8ea0f6d1dad 100644 --- a/toolchain/check/testdata/return/tuple.carbon +++ b/toolchain/check/testdata/return/tuple.carbon @@ -29,6 +29,8 @@ fn Main() -> (i32, i32) { // CHECK:STDOUT: %tuple.type.e55: type = tuple_type (%i32, %i32) [concrete] // CHECK:STDOUT: %.c11: Core.Form = init_form %tuple.type.e55 [concrete] // CHECK:STDOUT: %pattern_type.394: type = pattern_type %tuple.type.e55 [concrete] +// CHECK:STDOUT: %return.param_patt.a90: %pattern_type.394 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.2ed: %pattern_type.394 = return_slot_pattern %return.param_patt.a90, %tuple.type.e55 [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] // CHECK:STDOUT: %int_15.447: Core.IntLiteral = int_value 15 [concrete] @@ -77,8 +79,8 @@ fn Main() -> (i32, i32) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Main.decl: %Main.type = fn_decl @Main [concrete = constants.%Main] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.394 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.394 = return_slot_pattern %return.param_patt, %.loc16_23.2 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.394 = out_param_pattern [concrete = constants.%return.param_patt.a90] +// CHECK:STDOUT: %return.patt: %pattern_type.394 = return_slot_pattern %return.param_patt, %.loc16_23.2 [concrete = constants.%return.patt.2ed] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc16_15: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %i32.loc16_20: type = type_literal constants.%i32 [concrete = constants.%i32] diff --git a/toolchain/check/testdata/return/value.carbon b/toolchain/check/testdata/return/value.carbon index ffa5f2fb6267..73a7c4d78623 100644 --- a/toolchain/check/testdata/return/value.carbon +++ b/toolchain/check/testdata/return/value.carbon @@ -25,6 +25,8 @@ fn Main() -> i32 { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] @@ -66,8 +68,8 @@ fn Main() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Main.decl: %Main.type = fn_decl @Main [concrete = constants.%Main] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc15: Core.Form = init_form %i32 [concrete = constants.%.795] diff --git a/toolchain/check/testdata/struct/empty.carbon b/toolchain/check/testdata/struct/empty.carbon index 980fd86ec80f..026ce352b399 100644 --- a/toolchain/check/testdata/struct/empty.carbon +++ b/toolchain/check/testdata/struct/empty.carbon @@ -21,6 +21,10 @@ var y: {} = x; // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_struct_type [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type = ref_binding_pattern y [concrete] +// CHECK:STDOUT: %y.var_patt: %pattern_type = var_pattern %y.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -29,8 +33,8 @@ var y: {} = x; // CHECK:STDOUT: .y = %y // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %empty_struct_type = var %x.var_patt [concrete] // CHECK:STDOUT: %.loc15_9.1: type = splice_block %.loc15_9.3 [concrete = constants.%empty_struct_type] { @@ -39,8 +43,8 @@ var y: {} = x; // CHECK:STDOUT: } // CHECK:STDOUT: %x: ref %empty_struct_type = ref_binding x, %x.var [concrete = %x.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %pattern_type = ref_binding_pattern y [concrete] -// CHECK:STDOUT: %y.var_patt: %pattern_type = var_pattern %y.patt [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type = ref_binding_pattern y [concrete = constants.%y.patt] +// CHECK:STDOUT: %y.var_patt: %pattern_type = var_pattern %y.patt [concrete = constants.%y.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %empty_struct_type = var %y.var_patt [concrete] // CHECK:STDOUT: %.loc16_9.1: type = splice_block %.loc16_9.3 [concrete = constants.%empty_struct_type] { diff --git a/toolchain/check/testdata/struct/fail_assign_empty.carbon b/toolchain/check/testdata/struct/fail_assign_empty.carbon index 4674f3218a9d..6b0549e75dc0 100644 --- a/toolchain/check/testdata/struct/fail_assign_empty.carbon +++ b/toolchain/check/testdata/struct/fail_assign_empty.carbon @@ -27,6 +27,8 @@ var x: {.a: i32} = {}; // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %i32} [concrete] // CHECK:STDOUT: %pattern_type.506: type = pattern_type %struct_type.a [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.506 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.506 = var_pattern %x.patt [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: } @@ -47,8 +49,8 @@ var x: {.a: i32} = {}; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.506 = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.506 = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.506 = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.506 = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %struct_type.a = var %x.var_patt [concrete] // CHECK:STDOUT: %.loc19: type = splice_block %struct_type.a [concrete = constants.%struct_type.a] { diff --git a/toolchain/check/testdata/struct/fail_assign_nested.carbon b/toolchain/check/testdata/struct/fail_assign_nested.carbon index 64459c61b40d..67fb49fb7e11 100644 --- a/toolchain/check/testdata/struct/fail_assign_nested.carbon +++ b/toolchain/check/testdata/struct/fail_assign_nested.carbon @@ -25,6 +25,8 @@ var x: {.a: {}} = {.b = {}}; // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.a.225: type = struct_type {.a: %empty_struct_type} [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %struct_type.a.225 [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete] // CHECK:STDOUT: %struct_type.b.347: type = struct_type {.b: %empty_struct_type} [concrete] // CHECK:STDOUT: %struct: %struct_type.b.347 = struct_value (%empty_struct) [concrete] // CHECK:STDOUT: } @@ -34,8 +36,8 @@ var x: {.a: {}} = {.b = {}}; // CHECK:STDOUT: .x = %x // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %struct_type.a.225 = var %x.var_patt [concrete] // CHECK:STDOUT: %.loc19_15: type = splice_block %struct_type.a [concrete = constants.%struct_type.a.225] { diff --git a/toolchain/check/testdata/struct/fail_assign_to_empty.carbon b/toolchain/check/testdata/struct/fail_assign_to_empty.carbon index 4162cc5abfd5..d8a05e5b7529 100644 --- a/toolchain/check/testdata/struct/fail_assign_to_empty.carbon +++ b/toolchain/check/testdata/struct/fail_assign_to_empty.carbon @@ -24,6 +24,8 @@ var x: {} = {.a = 1}; // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_struct_type [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: Core.IntLiteral} [concrete] // CHECK:STDOUT: %struct: %struct_type.a = struct_value (%int_1) [concrete] @@ -43,8 +45,8 @@ var x: {} = {.a = 1}; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %empty_struct_type = var %x.var_patt [concrete] // CHECK:STDOUT: %.loc19_9.1: type = splice_block %.loc19_9.3 [concrete = constants.%empty_struct_type] { diff --git a/toolchain/check/testdata/struct/fail_duplicate_name.carbon b/toolchain/check/testdata/struct/fail_duplicate_name.carbon index 3661e1df12f9..04d2a15fb950 100644 --- a/toolchain/check/testdata/struct/fail_duplicate_name.carbon +++ b/toolchain/check/testdata/struct/fail_duplicate_name.carbon @@ -70,11 +70,16 @@ var y: {.b: i32, .c: i32} = {.b = 3, .b = 4}; // CHECK:STDOUT: %struct_type.a.a6c: type = struct_type {.a: Core.IntLiteral} [concrete] // CHECK:STDOUT: %struct: %struct_type.a.a6c = struct_value (%int_1) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %w.patt: %pattern_type.6b6 = value_binding_pattern w [concrete] // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %struct_type.a.a92: type = struct_type {.a: %i32} [concrete] // CHECK:STDOUT: %pattern_type.506: type = pattern_type %struct_type.a.a92 [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.506 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.506 = var_pattern %x.patt [concrete] // CHECK:STDOUT: %struct_type.b.c: type = struct_type {.b: %i32, .c: %i32} [concrete] // CHECK:STDOUT: %pattern_type.f19: type = pattern_type %struct_type.b.c [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.f19 = ref_binding_pattern y [concrete] +// CHECK:STDOUT: %y.var_patt: %pattern_type.f19 = var_pattern %y.patt [concrete] // CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %int_4: Core.IntLiteral = int_value 4 [concrete] // CHECK:STDOUT: } @@ -99,7 +104,7 @@ var y: {.b: i32, .c: i32} = {.b = 3, .b = 4}; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: = return_slot_pattern , [concrete] +// CHECK:STDOUT: %return.patt: = return_slot_pattern , [concrete = ] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc22_16: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %i32.loc22_27: type = type_literal constants.%i32 [concrete = constants.%i32] @@ -109,7 +114,7 @@ var y: {.b: i32, .c: i32} = {.b = 3, .b = 4}; // CHECK:STDOUT: %return: = return_slot // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: = value_binding_pattern v [concrete] +// CHECK:STDOUT: %v.patt: = value_binding_pattern v [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %.1: = splice_block [concrete = ] { // CHECK:STDOUT: %i32.loc31_13: type = type_literal constants.%i32 [concrete = constants.%i32] @@ -117,13 +122,13 @@ var y: {.b: i32, .c: i32} = {.b = 3, .b = 4}; // CHECK:STDOUT: } // CHECK:STDOUT: %v: = value_binding v, [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %w.patt: %pattern_type.6b6 = value_binding_pattern w [concrete] +// CHECK:STDOUT: %w.patt: %pattern_type.6b6 = value_binding_pattern w [concrete = constants.%w.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %i32.loc40: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %w: %i32 = value_binding w, [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.506 = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.506 = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.506 = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.506 = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %struct_type.a.a92 = var %x.var_patt [concrete] // CHECK:STDOUT: %.loc49: type = splice_block %struct_type.a [concrete = constants.%struct_type.a.a92] { @@ -132,8 +137,8 @@ var y: {.b: i32, .c: i32} = {.b = 3, .b = 4}; // CHECK:STDOUT: } // CHECK:STDOUT: %x: ref %struct_type.a.a92 = ref_binding x, %x.var [concrete = %x.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %pattern_type.f19 = ref_binding_pattern y [concrete] -// CHECK:STDOUT: %y.var_patt: %pattern_type.f19 = var_pattern %y.patt [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.f19 = ref_binding_pattern y [concrete = constants.%y.patt] +// CHECK:STDOUT: %y.var_patt: %pattern_type.f19 = var_pattern %y.patt [concrete = constants.%y.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %struct_type.b.c = var %y.var_patt [concrete] // CHECK:STDOUT: %.loc58: type = splice_block %struct_type.b.c [concrete = constants.%struct_type.b.c] { diff --git a/toolchain/check/testdata/struct/fail_field_name_mismatch.carbon b/toolchain/check/testdata/struct/fail_field_name_mismatch.carbon index 0298e75ff048..6bbe8de5bc02 100644 --- a/toolchain/check/testdata/struct/fail_field_name_mismatch.carbon +++ b/toolchain/check/testdata/struct/fail_field_name_mismatch.carbon @@ -41,6 +41,8 @@ var y: {.b: i32} = x; // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %struct_type.a.a92: type = struct_type {.a: %i32} [concrete] // CHECK:STDOUT: %pattern_type.506: type = pattern_type %struct_type.a.a92 [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.506 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.506 = var_pattern %a.patt [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %struct_type.a.a6c: type = struct_type {.a: Core.IntLiteral} [concrete] // CHECK:STDOUT: %struct.48c: %struct_type.a.a6c = struct_value (%int_1.5b8) [concrete] @@ -64,6 +66,8 @@ var y: {.b: i32} = x; // CHECK:STDOUT: %struct.406: %struct_type.a.a92 = struct_value (%int_1.0c6) [concrete] // CHECK:STDOUT: %struct_type.a.b: type = struct_type {.a: %i32, .b: %i32} [concrete] // CHECK:STDOUT: %pattern_type.20e3: type = pattern_type %struct_type.a.b [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.20e3 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.20e3 = var_pattern %b.patt [concrete] // CHECK:STDOUT: %.27c: ref %i32 = struct_access file.%b.var, element0 [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.ac8: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N) [symbolic] @@ -75,10 +79,14 @@ var y: {.b: i32} = x; // CHECK:STDOUT: %Copy.WithSelf.Op.type.d09: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet) [concrete] // CHECK:STDOUT: %.7a6: type = fn_type_with_self_type %Copy.WithSelf.Op.type.d09, %Copy.facet [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.4f6, @Int.as.Copy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.506 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.506 = var_pattern %x.patt [concrete] // CHECK:STDOUT: %struct_type.b.a15: type = struct_type {.b: Core.IntLiteral} [concrete] // CHECK:STDOUT: %struct.62b: %struct_type.b.a15 = struct_value (%int_1.5b8) [concrete] // CHECK:STDOUT: %struct_type.b.0bf: type = struct_type {.b: %i32} [concrete] // CHECK:STDOUT: %pattern_type.b29: type = pattern_type %struct_type.b.0bf [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.b29 = ref_binding_pattern y [concrete] +// CHECK:STDOUT: %y.var_patt: %pattern_type.b29 = var_pattern %y.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -108,8 +116,8 @@ var y: {.b: i32} = x; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.506 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.506 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.506 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.506 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %struct_type.a.a92 = var %a.var_patt [concrete] // CHECK:STDOUT: %.loc15: type = splice_block %struct_type.a.loc15 [concrete = constants.%struct_type.a.a92] { @@ -118,8 +126,8 @@ var y: {.b: i32} = x; // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %struct_type.a.a92 = ref_binding a, %a.var [concrete = %a.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.20e3 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.20e3 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.20e3 = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type.20e3 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %struct_type.a.b = var %b.var_patt [concrete] // CHECK:STDOUT: %.loc20: type = splice_block %struct_type.a.b [concrete = constants.%struct_type.a.b] { @@ -129,8 +137,8 @@ var y: {.b: i32} = x; // CHECK:STDOUT: } // CHECK:STDOUT: %b: ref %struct_type.a.b = ref_binding b, %b.var [concrete = %b.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.506 = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.506 = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.506 = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.506 = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %struct_type.a.a92 = var %x.var_patt [concrete] // CHECK:STDOUT: %.loc26: type = splice_block %struct_type.a.loc26 [concrete = constants.%struct_type.a.a92] { @@ -139,8 +147,8 @@ var y: {.b: i32} = x; // CHECK:STDOUT: } // CHECK:STDOUT: %x: ref %struct_type.a.a92 = ref_binding x, %x.var [concrete = %x.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %pattern_type.b29 = ref_binding_pattern y [concrete] -// CHECK:STDOUT: %y.var_patt: %pattern_type.b29 = var_pattern %y.patt [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.b29 = ref_binding_pattern y [concrete = constants.%y.patt] +// CHECK:STDOUT: %y.var_patt: %pattern_type.b29 = var_pattern %y.patt [concrete = constants.%y.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %struct_type.b.0bf = var %y.var_patt [concrete] // CHECK:STDOUT: %.loc32: type = splice_block %struct_type.b [concrete = constants.%struct_type.b.0bf] { diff --git a/toolchain/check/testdata/struct/fail_field_type_mismatch.carbon b/toolchain/check/testdata/struct/fail_field_type_mismatch.carbon index 71c45a443729..2ae3c6c1f97d 100644 --- a/toolchain/check/testdata/struct/fail_field_type_mismatch.carbon +++ b/toolchain/check/testdata/struct/fail_field_type_mismatch.carbon @@ -27,6 +27,8 @@ var x: {.a: i32} = {.b = 1.0}; // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %i32} [concrete] // CHECK:STDOUT: %pattern_type.506: type = pattern_type %struct_type.a [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.506 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.506 = var_pattern %x.patt [concrete] // CHECK:STDOUT: %float: Core.FloatLiteral = float_literal_value 10e-1 [concrete] // CHECK:STDOUT: %struct_type.b: type = struct_type {.b: Core.FloatLiteral} [concrete] // CHECK:STDOUT: %struct: %struct_type.b = struct_value (%float) [concrete] @@ -48,8 +50,8 @@ var x: {.a: i32} = {.b = 1.0}; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.506 = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.506 = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.506 = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.506 = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %struct_type.a = var %x.var_patt [concrete] // CHECK:STDOUT: %.loc19: type = splice_block %struct_type.a [concrete = constants.%struct_type.a] { diff --git a/toolchain/check/testdata/struct/fail_member_access_type.carbon b/toolchain/check/testdata/struct/fail_member_access_type.carbon index 591003c6f35f..363d9cf54185 100644 --- a/toolchain/check/testdata/struct/fail_member_access_type.carbon +++ b/toolchain/check/testdata/struct/fail_member_access_type.carbon @@ -28,6 +28,8 @@ var y: i32 = x.b; // CHECK:STDOUT: %f64.dc1: type = class_type @Float, @Float(%int_64) [concrete] // CHECK:STDOUT: %struct_type.a.752: type = struct_type {.a: %f64.dc1} [concrete] // CHECK:STDOUT: %pattern_type.6b7: type = pattern_type %struct_type.a.752 [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.6b7 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.6b7 = var_pattern %x.patt [concrete] // CHECK:STDOUT: %float.a4e: Core.FloatLiteral = float_literal_value 40e-1 [concrete] // CHECK:STDOUT: %struct_type.a.b4b: type = struct_type {.a: Core.FloatLiteral} [concrete] // CHECK:STDOUT: %struct.f91: %struct_type.a.b4b = struct_value (%float.a4e) [concrete] @@ -53,6 +55,8 @@ var y: i32 = x.b; // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.6b6 = ref_binding_pattern y [concrete] +// CHECK:STDOUT: %y.var_patt: %pattern_type.6b6 = var_pattern %y.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -78,8 +82,8 @@ var y: i32 = x.b; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.6b7 = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.6b7 = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.6b7 = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.6b7 = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %struct_type.a.752 = var %x.var_patt [concrete] // CHECK:STDOUT: %.loc15: type = splice_block %struct_type.a [concrete = constants.%struct_type.a.752] { @@ -88,8 +92,8 @@ var y: i32 = x.b; // CHECK:STDOUT: } // CHECK:STDOUT: %x: ref %struct_type.a.752 = ref_binding x, %x.var [concrete = %x.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %pattern_type.6b6 = ref_binding_pattern y [concrete] -// CHECK:STDOUT: %y.var_patt: %pattern_type.6b6 = var_pattern %y.patt [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.6b6 = ref_binding_pattern y [concrete = constants.%y.patt] +// CHECK:STDOUT: %y.var_patt: %pattern_type.6b6 = var_pattern %y.patt [concrete = constants.%y.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %i32 = var %y.var_patt [concrete] // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] diff --git a/toolchain/check/testdata/struct/fail_nested_incomplete.carbon b/toolchain/check/testdata/struct/fail_nested_incomplete.carbon index 83e6fe4cd3b7..7b3a5da683b8 100644 --- a/toolchain/check/testdata/struct/fail_nested_incomplete.carbon +++ b/toolchain/check/testdata/struct/fail_nested_incomplete.carbon @@ -32,6 +32,8 @@ var p: Incomplete* = &s.a; // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %Incomplete} [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %Incomplete [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type = ref_binding_pattern p [concrete] +// CHECK:STDOUT: %p.var_patt: %pattern_type = var_pattern %p.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -42,8 +44,8 @@ var p: Incomplete* = &s.a; // CHECK:STDOUT: } // CHECK:STDOUT: %Incomplete.decl: type = class_decl @Incomplete [concrete = constants.%Incomplete] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %s.patt: = ref_binding_pattern s [concrete] -// CHECK:STDOUT: %s.var_patt: = var_pattern %s.patt [concrete] +// CHECK:STDOUT: %s.patt: = ref_binding_pattern s [concrete = ] +// CHECK:STDOUT: %s.var_patt: = var_pattern %s.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %s.var: ref = var %s.var_patt [concrete = ] // CHECK:STDOUT: %.loc24: type = splice_block %struct_type.a [concrete = constants.%struct_type.a] { @@ -52,8 +54,8 @@ var p: Incomplete* = &s.a; // CHECK:STDOUT: } // CHECK:STDOUT: %s: ref = ref_binding s, [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: %pattern_type = ref_binding_pattern p [concrete] -// CHECK:STDOUT: %p.var_patt: %pattern_type = var_pattern %p.patt [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type = ref_binding_pattern p [concrete = constants.%p.patt] +// CHECK:STDOUT: %p.var_patt: %pattern_type = var_pattern %p.patt [concrete = constants.%p.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %p.var: ref %ptr = var %p.var_patt [concrete] // CHECK:STDOUT: %.loc26: type = splice_block %ptr [concrete = constants.%ptr] { diff --git a/toolchain/check/testdata/struct/fail_non_member_access.carbon b/toolchain/check/testdata/struct/fail_non_member_access.carbon index 4ac33b1a67a9..1c3f2f528f5c 100644 --- a/toolchain/check/testdata/struct/fail_non_member_access.carbon +++ b/toolchain/check/testdata/struct/fail_non_member_access.carbon @@ -28,6 +28,8 @@ var y: i32 = x.b; // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %struct_type.a.a92: type = struct_type {.a: %i32} [concrete] // CHECK:STDOUT: %pattern_type.506: type = pattern_type %struct_type.a.a92 [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.506 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.506 = var_pattern %x.patt [concrete] // CHECK:STDOUT: %int_4.0c1: Core.IntLiteral = int_value 4 [concrete] // CHECK:STDOUT: %struct_type.a.a6c: type = struct_type {.a: Core.IntLiteral} [concrete] // CHECK:STDOUT: %struct.2cb: %struct_type.a.a6c = struct_value (%int_4.0c1) [concrete] @@ -49,6 +51,8 @@ var y: i32 = x.b; // CHECK:STDOUT: %bound_method: = bound_method %int_4.0c1, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_4.4eb: %i32 = int_value 4 [concrete] // CHECK:STDOUT: %struct.751: %struct_type.a.a92 = struct_value (%int_4.4eb) [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.6b6 = ref_binding_pattern y [concrete] +// CHECK:STDOUT: %y.var_patt: %pattern_type.6b6 = var_pattern %y.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -72,8 +76,8 @@ var y: i32 = x.b; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.506 = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.506 = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.506 = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.506 = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %struct_type.a.a92 = var %x.var_patt [concrete] // CHECK:STDOUT: %.loc15: type = splice_block %struct_type.a [concrete = constants.%struct_type.a.a92] { @@ -82,8 +86,8 @@ var y: i32 = x.b; // CHECK:STDOUT: } // CHECK:STDOUT: %x: ref %struct_type.a.a92 = ref_binding x, %x.var [concrete = %x.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %pattern_type.6b6 = ref_binding_pattern y [concrete] -// CHECK:STDOUT: %y.var_patt: %pattern_type.6b6 = var_pattern %y.patt [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.6b6 = ref_binding_pattern y [concrete = constants.%y.patt] +// CHECK:STDOUT: %y.var_patt: %pattern_type.6b6 = var_pattern %y.patt [concrete = constants.%y.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %i32 = var %y.var_patt [concrete] // CHECK:STDOUT: %i32.loc20: type = type_literal constants.%i32 [concrete = constants.%i32] diff --git a/toolchain/check/testdata/struct/fail_too_few_values.carbon b/toolchain/check/testdata/struct/fail_too_few_values.carbon index ecd07ced68b6..53d58a050fd9 100644 --- a/toolchain/check/testdata/struct/fail_too_few_values.carbon +++ b/toolchain/check/testdata/struct/fail_too_few_values.carbon @@ -27,6 +27,8 @@ var x: {.a: i32, .b: i32} = {.a = 1}; // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %struct_type.a.b: type = struct_type {.a: %i32, .b: %i32} [concrete] // CHECK:STDOUT: %pattern_type.20e3: type = pattern_type %struct_type.a.b [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.20e3 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.20e3 = var_pattern %x.patt [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: Core.IntLiteral} [concrete] // CHECK:STDOUT: %struct: %struct_type.a = struct_value (%int_1.5b8) [concrete] @@ -69,8 +71,8 @@ var x: {.a: i32, .b: i32} = {.a = 1}; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.20e3 = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.20e3 = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.20e3 = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.20e3 = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %struct_type.a.b = var %x.var_patt [concrete] // CHECK:STDOUT: %.loc19: type = splice_block %struct_type.a.b [concrete = constants.%struct_type.a.b] { diff --git a/toolchain/check/testdata/struct/fail_type_assign.carbon b/toolchain/check/testdata/struct/fail_type_assign.carbon index dc1685c6dfd3..208d8e065567 100644 --- a/toolchain/check/testdata/struct/fail_type_assign.carbon +++ b/toolchain/check/testdata/struct/fail_type_assign.carbon @@ -30,6 +30,8 @@ var x: {.a: i32} = {.a: i32}; // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %i32} [concrete] // CHECK:STDOUT: %pattern_type.506: type = pattern_type %struct_type.a [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.506 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.506 = var_pattern %x.patt [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] // CHECK:STDOUT: } @@ -52,8 +54,8 @@ var x: {.a: i32} = {.a: i32}; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.506 = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.506 = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.506 = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.506 = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %struct_type.a = var %x.var_patt [concrete] // CHECK:STDOUT: %.loc22: type = splice_block %struct_type.a [concrete = constants.%struct_type.a] { diff --git a/toolchain/check/testdata/struct/fail_value_as_type.carbon b/toolchain/check/testdata/struct/fail_value_as_type.carbon index 09efdd546256..e8b10d073e55 100644 --- a/toolchain/check/testdata/struct/fail_value_as_type.carbon +++ b/toolchain/check/testdata/struct/fail_value_as_type.carbon @@ -47,8 +47,8 @@ var x: {.a = 1}; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: = ref_binding_pattern x [concrete = ] +// CHECK:STDOUT: %x.var_patt: = var_pattern %x.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref = var %x.var_patt [concrete = ] // CHECK:STDOUT: %.1: = splice_block [concrete = ] { diff --git a/toolchain/check/testdata/struct/import.carbon b/toolchain/check/testdata/struct/import.carbon index 30b33c92193a..2c1ad1b7d01b 100644 --- a/toolchain/check/testdata/struct/import.carbon +++ b/toolchain/check/testdata/struct/import.carbon @@ -90,6 +90,10 @@ fn F() -> {.x: i32} { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %i32} [concrete] // CHECK:STDOUT: %pattern_type.506: type = pattern_type %struct_type.a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.506 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.506 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a_ref.patt: %pattern_type.506 = ref_binding_pattern a_ref [concrete] +// CHECK:STDOUT: %a_ref.var_patt: %pattern_type.506 = var_pattern %a_ref.patt [concrete] // CHECK:STDOUT: %.802: ref %i32 = struct_access imports.%a_ref.var, element0 [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.ac8: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N) [symbolic] @@ -107,6 +111,10 @@ fn F() -> {.x: i32} { // CHECK:STDOUT: %struct_type.b.c: type = struct_type {.b: %i32, .c: %tuple.type.a8a} [concrete] // CHECK:STDOUT: %struct_type.a.d.01c: type = struct_type {.a: %struct_type.b.c, .d: %i32} [concrete] // CHECK:STDOUT: %pattern_type.1fb: type = pattern_type %struct_type.a.d.01c [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.1fb = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.1fb = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b_ref.patt: %pattern_type.1fb = ref_binding_pattern b_ref [concrete] +// CHECK:STDOUT: %b_ref.var_patt: %pattern_type.1fb = var_pattern %b_ref.patt [concrete] // CHECK:STDOUT: %.355: ref %struct_type.b.c = struct_access imports.%b_ref.var, element0 [concrete] // CHECK:STDOUT: %.8dc: ref %struct_type.b.c = struct_access file.%b.var, element0 [concrete] // CHECK:STDOUT: %.379: ref %i32 = struct_access %.355, element0 [concrete] @@ -140,6 +148,8 @@ fn F() -> {.x: i32} { // CHECK:STDOUT: %struct.631: %struct_type.a.b.b4c = struct_value (%int_1.0c6, %int_2.295) [concrete] // CHECK:STDOUT: %C.8d3: type = class_type @C, @C(%struct.631) [concrete] // CHECK:STDOUT: %pattern_type.20c: type = pattern_type %C.8d3 [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.20c = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.20c = var_pattern %c.patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -151,20 +161,16 @@ fn F() -> {.x: i32} { // CHECK:STDOUT: %Implicit.F: %F.type = import_ref Implicit//default, F, loaded [concrete = constants.%F] // CHECK:STDOUT: %Implicit.import_ref.717: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.e74) = import_ref Implicit//default, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.845)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.1f3 = impl_witness_table (%Implicit.import_ref.717), @Core.IntLiteral.as.ImplicitAs.impl [concrete] -// CHECK:STDOUT: %a_ref.patt: %pattern_type.506 = ref_binding_pattern a_ref [concrete] -// CHECK:STDOUT: %a_ref.var_patt: %pattern_type.506 = var_pattern %a_ref.patt [concrete] -// CHECK:STDOUT: %a_ref.var: ref %struct_type.a = var %a_ref.var_patt [concrete] +// CHECK:STDOUT: %a_ref.var: ref %struct_type.a = var constants.%a_ref.var_patt [concrete] // CHECK:STDOUT: %Core.import_ref.cd6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.ac8) = import_ref Core//prelude/parts/int, loc{{\d+_\d+}}, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.5e0)] // CHECK:STDOUT: %Copy.impl_witness_table.367 = impl_witness_table (%Core.import_ref.cd6), @Int.as.Copy.impl [concrete] -// CHECK:STDOUT: %b_ref.patt: %pattern_type.1fb = ref_binding_pattern b_ref [concrete] -// CHECK:STDOUT: %b_ref.var_patt: %pattern_type.1fb = var_pattern %b_ref.patt [concrete] -// CHECK:STDOUT: %b_ref.var: ref %struct_type.a.d.01c = var %b_ref.var_patt [concrete] +// CHECK:STDOUT: %b_ref.var: ref %struct_type.a.d.01c = var constants.%b_ref.var_patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.506 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.506 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.506 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.506 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %struct_type.a = var %a.var_patt [concrete] // CHECK:STDOUT: %.loc5: type = splice_block %struct_type.a [concrete = constants.%struct_type.a] { @@ -173,8 +179,8 @@ fn F() -> {.x: i32} { // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %struct_type.a = ref_binding a, %a.var [concrete = %a.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.1fb = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.1fb = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.1fb = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type.1fb = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %struct_type.a.d.01c = var %b.var_patt [concrete] // CHECK:STDOUT: %.loc6_43: type = splice_block %struct_type.a.d [concrete = constants.%struct_type.a.d.01c] { @@ -188,8 +194,8 @@ fn F() -> {.x: i32} { // CHECK:STDOUT: } // CHECK:STDOUT: %b: ref %struct_type.a.d.01c = ref_binding b, %b.var [concrete = %b.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.20c = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.20c = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.20c = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type.20c = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C.8d3 = var %c.var_patt [concrete] // CHECK:STDOUT: %.loc7_26.1: type = splice_block %C [concrete = constants.%C.8d3] { diff --git a/toolchain/check/testdata/struct/literal_member_access.carbon b/toolchain/check/testdata/struct/literal_member_access.carbon index 26d28f7738df..de0f85b8d2fb 100644 --- a/toolchain/check/testdata/struct/literal_member_access.carbon +++ b/toolchain/check/testdata/struct/literal_member_access.carbon @@ -30,10 +30,14 @@ fn F() -> i32 { // CHECK:STDOUT: %struct_type.x.y.z: type = struct_type {.x: %i32, .y: %i32, .z: %i32} [concrete] // CHECK:STDOUT: %.2d9: Core.Form = init_form %struct_type.x.y.z [concrete] // CHECK:STDOUT: %pattern_type.62c: type = pattern_type %struct_type.x.y.z [concrete] +// CHECK:STDOUT: %return.param_patt.c67: %pattern_type.62c = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.f01: %pattern_type.62c = return_slot_pattern %return.param_patt.c67, %struct_type.x.y.z [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] @@ -78,8 +82,8 @@ fn F() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.62c = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.62c = return_slot_pattern %return.param_patt, %struct_type.x.y.z [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.62c = out_param_pattern [concrete = constants.%return.param_patt.c67] +// CHECK:STDOUT: %return.patt: %pattern_type.62c = return_slot_pattern %return.param_patt, %struct_type.x.y.z [concrete = constants.%return.patt.f01] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc15_16: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %i32.loc15_25: type = type_literal constants.%i32 [concrete = constants.%i32] @@ -90,8 +94,8 @@ fn F() -> i32 { // CHECK:STDOUT: %return: ref %struct_type.x.y.z = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc17: Core.Form = init_form %i32 [concrete = constants.%.795] diff --git a/toolchain/check/testdata/struct/member_access.carbon b/toolchain/check/testdata/struct/member_access.carbon index 12a68e59f000..45b8a699c5a6 100644 --- a/toolchain/check/testdata/struct/member_access.carbon +++ b/toolchain/check/testdata/struct/member_access.carbon @@ -30,6 +30,8 @@ var z: i32 = y; // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %struct_type.a.b.09c: type = struct_type {.a: %f64.dc1, .b: %i32} [concrete] // CHECK:STDOUT: %pattern_type.0ed: type = pattern_type %struct_type.a.b.09c [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.0ed = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.0ed = var_pattern %x.patt [concrete] // CHECK:STDOUT: %float.1f7: Core.FloatLiteral = float_literal_value 0e-1 [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %struct_type.a.b.0cc: type = struct_type {.a: Core.FloatLiteral, .b: Core.IntLiteral} [concrete] @@ -67,6 +69,8 @@ var z: i32 = y; // CHECK:STDOUT: %bound_method.953: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_1.0c6: %i32 = int_value 1 [concrete] // CHECK:STDOUT: %struct.77f: %struct_type.a.b.09c = struct_value (%float.895, %int_1.0c6) [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.6b6 = ref_binding_pattern y [concrete] +// CHECK:STDOUT: %y.var_patt: %pattern_type.6b6 = var_pattern %y.patt [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.ac8: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N) [symbolic] // CHECK:STDOUT: %Int.as.Copy.impl.Op.5e0: %Int.as.Copy.impl.Op.type.ac8 = struct_value () [symbolic] @@ -77,6 +81,8 @@ var z: i32 = y; // CHECK:STDOUT: %Copy.WithSelf.Op.type.d09: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet) [concrete] // CHECK:STDOUT: %.7a6: type = fn_type_with_self_type %Copy.WithSelf.Op.type.d09, %Copy.facet [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.4f6, @Int.as.Copy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %z.patt: %pattern_type.6b6 = ref_binding_pattern z [concrete] +// CHECK:STDOUT: %z.var_patt: %pattern_type.6b6 = var_pattern %z.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -109,8 +115,8 @@ var z: i32 = y; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.0ed = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.0ed = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.0ed = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.0ed = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %struct_type.a.b.09c = var %x.var_patt [concrete] // CHECK:STDOUT: %.loc15: type = splice_block %struct_type.a.b [concrete = constants.%struct_type.a.b.09c] { @@ -120,15 +126,15 @@ var z: i32 = y; // CHECK:STDOUT: } // CHECK:STDOUT: %x: ref %struct_type.a.b.09c = ref_binding x, %x.var [concrete = %x.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %pattern_type.6b6 = ref_binding_pattern y [concrete] -// CHECK:STDOUT: %y.var_patt: %pattern_type.6b6 = var_pattern %y.patt [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.6b6 = ref_binding_pattern y [concrete = constants.%y.patt] +// CHECK:STDOUT: %y.var_patt: %pattern_type.6b6 = var_pattern %y.patt [concrete = constants.%y.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %i32 = var %y.var_patt [concrete] // CHECK:STDOUT: %i32.loc16: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %y: ref %i32 = ref_binding y, %y.var [concrete = %y.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %z.patt: %pattern_type.6b6 = ref_binding_pattern z [concrete] -// CHECK:STDOUT: %z.var_patt: %pattern_type.6b6 = var_pattern %z.patt [concrete] +// CHECK:STDOUT: %z.patt: %pattern_type.6b6 = ref_binding_pattern z [concrete = constants.%z.patt] +// CHECK:STDOUT: %z.var_patt: %pattern_type.6b6 = var_pattern %z.patt [concrete = constants.%z.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %z.var: ref %i32 = var %z.var_patt [concrete] // CHECK:STDOUT: %i32.loc17: type = type_literal constants.%i32 [concrete = constants.%i32] diff --git a/toolchain/check/testdata/struct/nested_struct_in_place.carbon b/toolchain/check/testdata/struct/nested_struct_in_place.carbon index a7a9653cc2d8..2b1632e6f549 100644 --- a/toolchain/check/testdata/struct/nested_struct_in_place.carbon +++ b/toolchain/check/testdata/struct/nested_struct_in_place.carbon @@ -31,6 +31,8 @@ fn G() { // CHECK:STDOUT: %tuple.type.555: type = tuple_type (%i32, %i32, %i32) [concrete] // CHECK:STDOUT: %.718: Core.Form = init_form %tuple.type.555 [concrete] // CHECK:STDOUT: %pattern_type.777: type = pattern_type %tuple.type.555 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.777 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type.777 = return_slot_pattern %return.param_patt, %tuple.type.555 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] @@ -38,6 +40,8 @@ fn G() { // CHECK:STDOUT: %struct_type.a.b.2a0: type = struct_type {.a: %tuple.type.555, .b: %tuple.type.555} [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %pattern_type.28f: type = pattern_type %struct_type.a.b.2a0 [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.28f = ref_binding_pattern v [concrete] +// CHECK:STDOUT: %v.var_patt: %pattern_type.28f = var_pattern %v.patt [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.4: type = fn_type @Destroy.Op.loc18_3.4 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.4: %Destroy.Op.type.1d8f74.4 = struct_value () [concrete] @@ -62,8 +66,8 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.777 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.777 = return_slot_pattern %return.param_patt, %.loc15_25.2 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.777 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.777 = return_slot_pattern %return.param_patt, %.loc15_25.2 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc15_12: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %i32.loc15_17: type = type_literal constants.%i32 [concrete = constants.%i32] @@ -82,8 +86,8 @@ fn G() { // CHECK:STDOUT: fn @G() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %pattern_type.28f = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: %pattern_type.28f = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.28f = ref_binding_pattern v [concrete = constants.%v.patt] +// CHECK:STDOUT: %v.var_patt: %pattern_type.28f = var_pattern %v.patt [concrete = constants.%v.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %struct_type.a.b.2a0 = var %v.var_patt // CHECK:STDOUT: %F.ref.loc18_68: %F.type = name_ref F, file.%F.decl [concrete = constants.%F] diff --git a/toolchain/check/testdata/struct/one_entry.carbon b/toolchain/check/testdata/struct/one_entry.carbon index 29e4d9fa3303..165dc525a74a 100644 --- a/toolchain/check/testdata/struct/one_entry.carbon +++ b/toolchain/check/testdata/struct/one_entry.carbon @@ -25,6 +25,8 @@ var y: {.a: i32} = x; // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %struct_type.a.a92: type = struct_type {.a: %i32} [concrete] // CHECK:STDOUT: %pattern_type.506: type = pattern_type %struct_type.a.a92 [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.506 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.506 = var_pattern %x.patt [concrete] // CHECK:STDOUT: %int_4.0c1: Core.IntLiteral = int_value 4 [concrete] // CHECK:STDOUT: %struct_type.a.a6c: type = struct_type {.a: Core.IntLiteral} [concrete] // CHECK:STDOUT: %struct.2cb: %struct_type.a.a6c = struct_value (%int_4.0c1) [concrete] @@ -46,6 +48,8 @@ var y: {.a: i32} = x; // CHECK:STDOUT: %bound_method: = bound_method %int_4.0c1, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_4.4eb: %i32 = int_value 4 [concrete] // CHECK:STDOUT: %struct.751: %struct_type.a.a92 = struct_value (%int_4.4eb) [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.506 = ref_binding_pattern y [concrete] +// CHECK:STDOUT: %y.var_patt: %pattern_type.506 = var_pattern %y.patt [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.ac8: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N) [symbolic] // CHECK:STDOUT: %Int.as.Copy.impl.Op.5e0: %Int.as.Copy.impl.Op.type.ac8 = struct_value () [symbolic] @@ -83,8 +87,8 @@ var y: {.a: i32} = x; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.506 = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.506 = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.506 = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.506 = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %struct_type.a.a92 = var %x.var_patt [concrete] // CHECK:STDOUT: %.loc15: type = splice_block %struct_type.a.loc15 [concrete = constants.%struct_type.a.a92] { @@ -93,8 +97,8 @@ var y: {.a: i32} = x; // CHECK:STDOUT: } // CHECK:STDOUT: %x: ref %struct_type.a.a92 = ref_binding x, %x.var [concrete = %x.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %pattern_type.506 = ref_binding_pattern y [concrete] -// CHECK:STDOUT: %y.var_patt: %pattern_type.506 = var_pattern %y.patt [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.506 = ref_binding_pattern y [concrete = constants.%y.patt] +// CHECK:STDOUT: %y.var_patt: %pattern_type.506 = var_pattern %y.patt [concrete = constants.%y.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %struct_type.a.a92 = var %y.var_patt [concrete] // CHECK:STDOUT: %.loc16: type = splice_block %struct_type.a.loc16 [concrete = constants.%struct_type.a.a92] { diff --git a/toolchain/check/testdata/struct/partially_const.carbon b/toolchain/check/testdata/struct/partially_const.carbon index 60f5c2425e31..c6bd1fe8e371 100644 --- a/toolchain/check/testdata/struct/partially_const.carbon +++ b/toolchain/check/testdata/struct/partially_const.carbon @@ -25,9 +25,13 @@ fn Make(n: i32) -> {.a: i32, .b: i32, .c: i32} { // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete] // CHECK:STDOUT: %struct_type.a.b.c.fde: type = struct_type {.a: %i32, .b: %i32, .c: %i32} [concrete] // CHECK:STDOUT: %.5b5: Core.Form = init_form %struct_type.a.b.c.fde [concrete] // CHECK:STDOUT: %pattern_type.9c3: type = pattern_type %struct_type.a.b.c.fde [concrete] +// CHECK:STDOUT: %return.param_patt.e20: %pattern_type.9c3 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.94b: %pattern_type.9c3 = return_slot_pattern %return.param_patt.e20, %struct_type.a.b.c.fde [concrete] // CHECK:STDOUT: %Make.type: type = fn_type @Make [concrete] // CHECK:STDOUT: %Make: %Make.type = struct_value () [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] @@ -84,10 +88,10 @@ fn Make(n: i32) -> {.a: i32, .b: i32, .c: i32} { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Make.decl: %Make.type = fn_decl @Make [concrete = constants.%Make] { -// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.9c3 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.9c3 = return_slot_pattern %return.param_patt, %struct_type.a.b.c [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%n.param_patt] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete = constants.%n.patt] +// CHECK:STDOUT: %return.param_patt: %pattern_type.9c3 = out_param_pattern [concrete = constants.%return.param_patt.e20] +// CHECK:STDOUT: %return.patt: %pattern_type.9c3 = return_slot_pattern %return.param_patt, %struct_type.a.b.c [concrete = constants.%return.patt.94b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc15_25: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %i32.loc15_34: type = type_literal constants.%i32 [concrete = constants.%i32] diff --git a/toolchain/check/testdata/struct/reorder_fields.carbon b/toolchain/check/testdata/struct/reorder_fields.carbon index 67cd392980b2..6b87f26fb9f2 100644 --- a/toolchain/check/testdata/struct/reorder_fields.carbon +++ b/toolchain/check/testdata/struct/reorder_fields.carbon @@ -31,6 +31,8 @@ fn F() -> {.a: i32, .b: f64} { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete] // CHECK:STDOUT: %MakeI32.type: type = fn_type @MakeI32 [concrete] // CHECK:STDOUT: %MakeI32: %MakeI32.type = struct_value () [concrete] // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] @@ -39,15 +41,21 @@ fn F() -> {.a: i32, .b: f64} { // CHECK:STDOUT: %f64.dc1: type = class_type @Float, @Float(%int_64) [concrete] // CHECK:STDOUT: %.b6c: Core.Form = init_form %f64.dc1 [concrete] // CHECK:STDOUT: %pattern_type.fb7: type = pattern_type %f64.dc1 [concrete] +// CHECK:STDOUT: %return.param_patt.b08: %pattern_type.fb7 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.8e6: %pattern_type.fb7 = return_slot_pattern %return.param_patt.b08, %f64.dc1 [concrete] // CHECK:STDOUT: %MakeF64.type: type = fn_type @MakeF64 [concrete] // CHECK:STDOUT: %MakeF64: %MakeF64.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.a.b: type = struct_type {.a: %i32, .b: %f64.dc1} [concrete] // CHECK:STDOUT: %.88b: Core.Form = init_form %struct_type.a.b [concrete] // CHECK:STDOUT: %pattern_type.3e6: type = pattern_type %struct_type.a.b [concrete] +// CHECK:STDOUT: %return.param_patt.eed: %pattern_type.3e6 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt.200: %pattern_type.3e6 = return_slot_pattern %return.param_patt.eed, %struct_type.a.b [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.3e6 = value_binding_pattern x [concrete] // CHECK:STDOUT: %struct_type.b.a: type = struct_type {.b: %f64.dc1, .a: %i32} [concrete] // CHECK:STDOUT: %pattern_type.cc6: type = pattern_type %struct_type.b.a [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.cc6 = value_binding_pattern y [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.ac8: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N) [symbolic] // CHECK:STDOUT: %Int.as.Copy.impl.Op.5e0: %Int.as.Copy.impl.Op.type.ac8 = struct_value () [symbolic] @@ -95,8 +103,8 @@ fn F() -> {.a: i32, .b: f64} { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %MakeI32.decl: %MakeI32.type = fn_decl @MakeI32 [concrete = constants.%MakeI32] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a] +// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc15: Core.Form = init_form %i32 [concrete = constants.%.795] @@ -104,8 +112,8 @@ fn F() -> {.a: i32, .b: f64} { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %MakeF64.decl: %MakeF64.type = fn_decl @MakeF64 [concrete = constants.%MakeF64] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.fb7 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.fb7 = return_slot_pattern %return.param_patt, %f64 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.fb7 = out_param_pattern [concrete = constants.%return.param_patt.b08] +// CHECK:STDOUT: %return.patt: %pattern_type.fb7 = return_slot_pattern %return.param_patt, %f64 [concrete = constants.%return.patt.8e6] // CHECK:STDOUT: } { // CHECK:STDOUT: %f64: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %.loc16: Core.Form = init_form %f64 [concrete = constants.%.b6c] @@ -113,8 +121,8 @@ fn F() -> {.a: i32, .b: f64} { // CHECK:STDOUT: %return: ref %f64.dc1 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.3e6 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.3e6 = return_slot_pattern %return.param_patt, %struct_type.a.b.loc18 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.3e6 = out_param_pattern [concrete = constants.%return.param_patt.eed] +// CHECK:STDOUT: %return.patt: %pattern_type.3e6 = return_slot_pattern %return.param_patt, %struct_type.a.b.loc18 [concrete = constants.%return.patt.200] // CHECK:STDOUT: } { // CHECK:STDOUT: %i32.loc18: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %f64.loc18: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] @@ -132,38 +140,38 @@ fn F() -> {.a: i32, .b: f64} { // CHECK:STDOUT: fn @F() -> out %return.param: %struct_type.a.b { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.3e6 = value_binding_pattern x [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.3e6 = value_binding_pattern x [concrete = constants.%x.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %MakeF64.ref: %MakeF64.type = name_ref MakeF64, file.%MakeF64.decl [concrete = constants.%MakeF64] // CHECK:STDOUT: %MakeF64.call: init %f64.dc1 = call %MakeF64.ref() // CHECK:STDOUT: %MakeI32.ref: %MakeI32.type = name_ref MakeI32, file.%MakeI32.decl [concrete = constants.%MakeI32] // CHECK:STDOUT: %MakeI32.call: init %i32 = call %MakeI32.ref() // CHECK:STDOUT: %.loc19_62.1: %struct_type.b.a = struct_literal (%MakeF64.call, %MakeI32.call) -// CHECK:STDOUT: %.loc19_27: type = splice_block %struct_type.a.b.loc19 [concrete = constants.%struct_type.a.b] { -// CHECK:STDOUT: %i32.loc19: type = type_literal constants.%i32 [concrete = constants.%i32] -// CHECK:STDOUT: %f64.loc19: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] -// CHECK:STDOUT: %struct_type.a.b.loc19: type = struct_type {.a: %i32, .b: %f64.dc1} [concrete = constants.%struct_type.a.b] -// CHECK:STDOUT: } // CHECK:STDOUT: %.loc19_62.2: %i32 = value_of_initializer %MakeI32.call // CHECK:STDOUT: %.loc19_62.3: %i32 = converted %MakeI32.call, %.loc19_62.2 // CHECK:STDOUT: %.loc19_62.4: %f64.dc1 = value_of_initializer %MakeF64.call // CHECK:STDOUT: %.loc19_62.5: %f64.dc1 = converted %MakeF64.call, %.loc19_62.4 // CHECK:STDOUT: %struct.loc19: %struct_type.a.b = struct_value (%.loc19_62.3, %.loc19_62.5) // CHECK:STDOUT: %.loc19_62.6: %struct_type.a.b = converted %.loc19_62.1, %struct.loc19 +// CHECK:STDOUT: %.loc19_27: type = splice_block %struct_type.a.b.loc19 [concrete = constants.%struct_type.a.b] { +// CHECK:STDOUT: %i32.loc19: type = type_literal constants.%i32 [concrete = constants.%i32] +// CHECK:STDOUT: %f64.loc19: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] +// CHECK:STDOUT: %struct_type.a.b.loc19: type = struct_type {.a: %i32, .b: %f64.dc1} [concrete = constants.%struct_type.a.b] +// CHECK:STDOUT: } // CHECK:STDOUT: %x: %struct_type.a.b = value_binding x, %.loc19_62.6 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %pattern_type.cc6 = value_binding_pattern y [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.cc6 = value_binding_pattern y [concrete = constants.%y.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.ref: %struct_type.a.b = name_ref x, %x +// CHECK:STDOUT: %.loc20_31.1: %f64.dc1 = struct_access %x.ref, element1 +// CHECK:STDOUT: %.loc20_31.2: %i32 = struct_access %x.ref, element0 +// CHECK:STDOUT: %struct.loc20: %struct_type.b.a = struct_value (%.loc20_31.1, %.loc20_31.2) +// CHECK:STDOUT: %.loc20_31.3: %struct_type.b.a = converted %x.ref, %struct.loc20 // CHECK:STDOUT: %.loc20_27: type = splice_block %struct_type.b.a [concrete = constants.%struct_type.b.a] { // CHECK:STDOUT: %f64.loc20: type = type_literal constants.%f64.dc1 [concrete = constants.%f64.dc1] // CHECK:STDOUT: %i32.loc20: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %struct_type.b.a: type = struct_type {.b: %f64.dc1, .a: %i32} [concrete = constants.%struct_type.b.a] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc20_31.1: %f64.dc1 = struct_access %x.ref, element1 -// CHECK:STDOUT: %.loc20_31.2: %i32 = struct_access %x.ref, element0 -// CHECK:STDOUT: %struct.loc20: %struct_type.b.a = struct_value (%.loc20_31.1, %.loc20_31.2) -// CHECK:STDOUT: %.loc20_31.3: %struct_type.b.a = converted %x.ref, %struct.loc20 // CHECK:STDOUT: %y: %struct_type.b.a = value_binding y, %.loc20_31.3 // CHECK:STDOUT: %y.ref: %struct_type.b.a = name_ref y, %y // CHECK:STDOUT: %.loc21_10.1: %i32 = struct_access %y.ref, element1 diff --git a/toolchain/check/testdata/struct/tuple_as_element.carbon b/toolchain/check/testdata/struct/tuple_as_element.carbon index 9968e0fcc3f7..83a95de8ac7c 100644 --- a/toolchain/check/testdata/struct/tuple_as_element.carbon +++ b/toolchain/check/testdata/struct/tuple_as_element.carbon @@ -28,6 +28,8 @@ var y: {.a: i32, .b: (i32,)} = x; // CHECK:STDOUT: %tuple.type.a8a: type = tuple_type (%i32) [concrete] // CHECK:STDOUT: %struct_type.a.b.388: type = struct_type {.a: %i32, .b: %tuple.type.a8a} [concrete] // CHECK:STDOUT: %pattern_type.227: type = pattern_type %struct_type.a.b.388 [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.227 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.227 = var_pattern %x.patt [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %tuple.type.985: type = tuple_type (Core.IntLiteral) [concrete] @@ -58,6 +60,8 @@ var y: {.a: i32, .b: (i32,)} = x; // CHECK:STDOUT: %int_2.295: %i32 = int_value 2 [concrete] // CHECK:STDOUT: %tuple.b60: %tuple.type.a8a = tuple_value (%int_2.295) [concrete] // CHECK:STDOUT: %struct.390: %struct_type.a.b.388 = struct_value (%int_1.0c6, %tuple.b60) [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.227 = ref_binding_pattern y [concrete] +// CHECK:STDOUT: %y.var_patt: %pattern_type.227 = var_pattern %y.patt [concrete] // CHECK:STDOUT: %.377: ref %i32 = struct_access file.%y.var, element0 [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.ac8: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N) [symbolic] @@ -97,8 +101,8 @@ var y: {.a: i32, .b: (i32,)} = x; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.227 = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.227 = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.227 = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.227 = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %struct_type.a.b.388 = var %x.var_patt [concrete] // CHECK:STDOUT: %.loc15_28: type = splice_block %struct_type.a.b.loc15 [concrete = constants.%struct_type.a.b.388] { @@ -110,8 +114,8 @@ var y: {.a: i32, .b: (i32,)} = x; // CHECK:STDOUT: } // CHECK:STDOUT: %x: ref %struct_type.a.b.388 = ref_binding x, %x.var [concrete = %x.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %pattern_type.227 = ref_binding_pattern y [concrete] -// CHECK:STDOUT: %y.var_patt: %pattern_type.227 = var_pattern %y.patt [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.227 = ref_binding_pattern y [concrete = constants.%y.patt] +// CHECK:STDOUT: %y.var_patt: %pattern_type.227 = var_pattern %y.patt [concrete = constants.%y.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %struct_type.a.b.388 = var %y.var_patt [concrete] // CHECK:STDOUT: %.loc16_28: type = splice_block %struct_type.a.b.loc16 [concrete = constants.%struct_type.a.b.388] { diff --git a/toolchain/check/testdata/struct/two_entries.carbon b/toolchain/check/testdata/struct/two_entries.carbon index 374f81b4ef18..23888d2f974f 100644 --- a/toolchain/check/testdata/struct/two_entries.carbon +++ b/toolchain/check/testdata/struct/two_entries.carbon @@ -28,6 +28,7 @@ var y: {.a: i32, .b: i32} = x; // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %struct_type.a.b.b4c: type = struct_type {.a: %i32, .b: %i32} [concrete] // CHECK:STDOUT: %pattern_type.20e3: type = pattern_type %struct_type.a.b.b4c [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.20e3 = value_binding_pattern v [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %struct_type.a.b.cfd: type = struct_type {.a: Core.IntLiteral, .b: Core.IntLiteral} [concrete] @@ -52,8 +53,13 @@ var y: {.a: i32, .b: i32} = x; // CHECK:STDOUT: %bound_method.3cb: = bound_method %int_2.ecc, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_2.295: %i32 = int_value 2 [concrete] // CHECK:STDOUT: %struct.631: %struct_type.a.b.b4c = struct_value (%int_1.0c6, %int_2.295) [concrete] +// CHECK:STDOUT: %w.patt: %pattern_type.20e3 = value_binding_pattern w [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.20e3 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.20e3 = var_pattern %x.patt [concrete] // CHECK:STDOUT: %.2c1: ref %i32 = struct_access file.%x.var, element0 [concrete] // CHECK:STDOUT: %.38d: ref %i32 = struct_access file.%x.var, element1 [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.20e3 = ref_binding_pattern y [concrete] +// CHECK:STDOUT: %y.var_patt: %pattern_type.20e3 = var_pattern %y.patt [concrete] // CHECK:STDOUT: %.27d: ref %i32 = struct_access file.%y.var, element0 [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.ac8: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N) [symbolic] @@ -95,12 +101,7 @@ var y: {.a: i32, .b: i32} = x; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %pattern_type.20e3 = value_binding_pattern v [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: %.loc15_25: type = splice_block %struct_type.a.b.loc15 [concrete = constants.%struct_type.a.b.b4c] { -// CHECK:STDOUT: %i32.loc15_13: type = type_literal constants.%i32 [concrete = constants.%i32] -// CHECK:STDOUT: %i32.loc15_22: type = type_literal constants.%i32 [concrete = constants.%i32] -// CHECK:STDOUT: %struct_type.a.b.loc15: type = struct_type {.a: %i32, .b: %i32} [concrete = constants.%struct_type.a.b.b4c] +// CHECK:STDOUT: %v.patt: %pattern_type.20e3 = value_binding_pattern v [concrete = constants.%v.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %impl.elem0.loc15_44.1: %.1c5 = impl_witness_access constants.%ImplicitAs.impl_witness.a23, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] // CHECK:STDOUT: %bound_method.loc15_44.1: = bound_method @__global_init.%int_1.loc15, %impl.elem0.loc15_44.1 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.094] @@ -118,9 +119,14 @@ var y: {.a: i32, .b: i32} = x; // CHECK:STDOUT: %.loc15_44.4: %i32 = converted @__global_init.%int_2.loc15, %.loc15_44.3 [concrete = constants.%int_2.295] // CHECK:STDOUT: %struct: %struct_type.a.b.b4c = struct_value (%.loc15_44.2, %.loc15_44.4) [concrete = constants.%struct.631] // CHECK:STDOUT: %.loc15_44.5: %struct_type.a.b.b4c = converted @__global_init.%.loc15, %struct [concrete = constants.%struct.631] +// CHECK:STDOUT: %.loc15_25: type = splice_block %struct_type.a.b.loc15 [concrete = constants.%struct_type.a.b.b4c] { +// CHECK:STDOUT: %i32.loc15_13: type = type_literal constants.%i32 [concrete = constants.%i32] +// CHECK:STDOUT: %i32.loc15_22: type = type_literal constants.%i32 [concrete = constants.%i32] +// CHECK:STDOUT: %struct_type.a.b.loc15: type = struct_type {.a: %i32, .b: %i32} [concrete = constants.%struct_type.a.b.b4c] +// CHECK:STDOUT: } // CHECK:STDOUT: %v: %struct_type.a.b.b4c = value_binding v, %.loc15_44.5 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %w.patt: %pattern_type.20e3 = value_binding_pattern w [concrete] +// CHECK:STDOUT: %w.patt: %pattern_type.20e3 = value_binding_pattern w [concrete = constants.%w.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc16: type = splice_block %struct_type.a.b.loc16 [concrete = constants.%struct_type.a.b.b4c] { // CHECK:STDOUT: %i32.loc16_13: type = type_literal constants.%i32 [concrete = constants.%i32] @@ -129,8 +135,8 @@ var y: {.a: i32, .b: i32} = x; // CHECK:STDOUT: } // CHECK:STDOUT: %w: %struct_type.a.b.b4c = value_binding w, @__global_init.%v.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.20e3 = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.20e3 = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.20e3 = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.20e3 = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %struct_type.a.b.b4c = var %x.var_patt [concrete] // CHECK:STDOUT: %.loc18: type = splice_block %struct_type.a.b.loc18 [concrete = constants.%struct_type.a.b.b4c] { @@ -140,8 +146,8 @@ var y: {.a: i32, .b: i32} = x; // CHECK:STDOUT: } // CHECK:STDOUT: %x: ref %struct_type.a.b.b4c = ref_binding x, %x.var [concrete = %x.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %pattern_type.20e3 = ref_binding_pattern y [concrete] -// CHECK:STDOUT: %y.var_patt: %pattern_type.20e3 = var_pattern %y.patt [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.20e3 = ref_binding_pattern y [concrete = constants.%y.patt] +// CHECK:STDOUT: %y.var_patt: %pattern_type.20e3 = var_pattern %y.patt [concrete = constants.%y.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %struct_type.a.b.b4c = var %y.var_patt [concrete] // CHECK:STDOUT: %.loc19: type = splice_block %struct_type.a.b.loc19 [concrete = constants.%struct_type.a.b.b4c] { diff --git a/toolchain/check/testdata/tuple/basics.carbon b/toolchain/check/testdata/tuple/basics.carbon index 90ebca872e3b..1cf6afab6cf7 100644 --- a/toolchain/check/testdata/tuple/basics.carbon +++ b/toolchain/check/testdata/tuple/basics.carbon @@ -54,12 +54,16 @@ var y: ((), ()) = x; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type = ref_binding_pattern y [concrete] +// CHECK:STDOUT: %y.var_patt: %pattern_type = var_pattern %y.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %empty_tuple.type = var %x.var_patt [concrete] // CHECK:STDOUT: %.loc4_9.1: type = splice_block %.loc4_9.3 [concrete = constants.%empty_tuple.type] { @@ -68,8 +72,8 @@ var y: ((), ()) = x; // CHECK:STDOUT: } // CHECK:STDOUT: %x: ref %empty_tuple.type = ref_binding x, %x.var [concrete = %x.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %pattern_type = ref_binding_pattern y [concrete] -// CHECK:STDOUT: %y.var_patt: %pattern_type = var_pattern %y.patt [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type = ref_binding_pattern y [concrete = constants.%y.patt] +// CHECK:STDOUT: %y.var_patt: %pattern_type = var_pattern %y.patt [concrete = constants.%y.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %empty_tuple.type = var %y.var_patt [concrete] // CHECK:STDOUT: %.loc5_9.1: type = splice_block %.loc5_9.3 [concrete = constants.%empty_tuple.type] { @@ -102,6 +106,8 @@ var y: ((), ()) = x; // CHECK:STDOUT: %tuple.type.6e8: type = tuple_type (%tuple.type.bcd, %empty_tuple.type) [concrete] // CHECK:STDOUT: %tuple.0ca: %tuple.type.6e8 = tuple_value (%tuple.d8f, %empty_tuple) [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %tuple.type.6e8 [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete] // CHECK:STDOUT: %tuple.elem0.d36: ref %tuple.type.bcd = tuple_access file.%x.var, element0 [concrete] // CHECK:STDOUT: %tuple.elem0.b69: ref %empty_tuple.type = tuple_access %tuple.elem0.d36, element0 [concrete] // CHECK:STDOUT: %tuple.elem1.221: ref %empty_tuple.type = tuple_access %tuple.elem0.d36, element1 [concrete] @@ -110,8 +116,8 @@ var y: ((), ()) = x; // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %tuple.type.6e8 = var %x.var_patt [concrete] // CHECK:STDOUT: %.loc4_21.1: type = splice_block %.loc4_21.7 [concrete = constants.%tuple.type.6e8] { @@ -165,14 +171,18 @@ var y: ((), ()) = x; // CHECK:STDOUT: %tuple.type: type = tuple_type (%empty_tuple.type) [concrete] // CHECK:STDOUT: %tuple: %tuple.type = tuple_value (%empty_tuple) [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %tuple.type [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete] // CHECK:STDOUT: %tuple.elem0.750: ref %empty_tuple.type = tuple_access file.%x.var, element0 [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type = ref_binding_pattern y [concrete] +// CHECK:STDOUT: %y.var_patt: %pattern_type = var_pattern %y.patt [concrete] // CHECK:STDOUT: %tuple.elem0.918: ref %empty_tuple.type = tuple_access file.%y.var, element0 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %tuple.type = var %x.var_patt [concrete] // CHECK:STDOUT: %.loc4_12.1: type = splice_block %.loc4_12.4 [concrete = constants.%tuple.type] { @@ -183,8 +193,8 @@ var y: ((), ()) = x; // CHECK:STDOUT: } // CHECK:STDOUT: %x: ref %tuple.type = ref_binding x, %x.var [concrete = %x.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %pattern_type = ref_binding_pattern y [concrete] -// CHECK:STDOUT: %y.var_patt: %pattern_type = var_pattern %y.patt [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type = ref_binding_pattern y [concrete = constants.%y.patt] +// CHECK:STDOUT: %y.var_patt: %pattern_type = var_pattern %y.patt [concrete = constants.%y.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %tuple.type = var %y.var_patt [concrete] // CHECK:STDOUT: %.loc5_12.1: type = splice_block %.loc5_12.4 [concrete = constants.%tuple.type] { @@ -225,16 +235,28 @@ var y: ((), ()) = x; // CHECK:STDOUT: %tuple.type: type = tuple_type (%empty_tuple.type, %empty_tuple.type) [concrete] // CHECK:STDOUT: %tuple: %tuple.type = tuple_value (%empty_tuple, %empty_tuple) [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %tuple.type [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type = value_binding_pattern v [concrete] +// CHECK:STDOUT: %w.patt: %pattern_type = value_binding_pattern w [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete] // CHECK:STDOUT: %tuple.elem0.475: ref %empty_tuple.type = tuple_access file.%x.var, element0 [concrete] // CHECK:STDOUT: %tuple.elem1.6cc: ref %empty_tuple.type = tuple_access file.%x.var, element1 [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type = ref_binding_pattern y [concrete] +// CHECK:STDOUT: %y.var_patt: %pattern_type = var_pattern %y.patt [concrete] // CHECK:STDOUT: %tuple.elem0.9a9: ref %empty_tuple.type = tuple_access file.%y.var, element0 [concrete] // CHECK:STDOUT: %tuple.elem1.1af: ref %empty_tuple.type = tuple_access file.%y.var, element1 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %pattern_type = value_binding_pattern v [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type = value_binding_pattern v [concrete = constants.%v.patt] // CHECK:STDOUT: } +// CHECK:STDOUT: %empty_tuple.loc4_21: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc4_26.1: %empty_tuple.type = converted @__global_init.%.loc4_21, %empty_tuple.loc4_21 [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %empty_tuple.loc4_25: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc4_26.2: %empty_tuple.type = converted @__global_init.%.loc4_25, %empty_tuple.loc4_25 [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %tuple: %tuple.type = tuple_value (%.loc4_26.1, %.loc4_26.2) [concrete = constants.%tuple] +// CHECK:STDOUT: %.loc4_26.3: %tuple.type = converted @__global_init.%.loc4_26, %tuple [concrete = constants.%tuple] // CHECK:STDOUT: %.loc4_15.1: type = splice_block %.loc4_15.5 [concrete = constants.%tuple.type] { // CHECK:STDOUT: %.loc4_10: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc4_14: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] @@ -243,15 +265,9 @@ var y: ((), ()) = x; // CHECK:STDOUT: %.loc4_15.4: type = converted constants.%empty_tuple, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: %.loc4_15.5: type = converted %.loc4_15.2, constants.%tuple.type [concrete = constants.%tuple.type] // CHECK:STDOUT: } -// CHECK:STDOUT: %empty_tuple.loc4_21: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc4_26.1: %empty_tuple.type = converted @__global_init.%.loc4_21, %empty_tuple.loc4_21 [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %empty_tuple.loc4_25: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc4_26.2: %empty_tuple.type = converted @__global_init.%.loc4_25, %empty_tuple.loc4_25 [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %tuple: %tuple.type = tuple_value (%.loc4_26.1, %.loc4_26.2) [concrete = constants.%tuple] -// CHECK:STDOUT: %.loc4_26.3: %tuple.type = converted @__global_init.%.loc4_26, %tuple [concrete = constants.%tuple] // CHECK:STDOUT: %v: %tuple.type = value_binding v, %.loc4_26.3 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %w.patt: %pattern_type = value_binding_pattern w [concrete] +// CHECK:STDOUT: %w.patt: %pattern_type = value_binding_pattern w [concrete = constants.%w.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc5_15.1: type = splice_block %.loc5_15.5 [concrete = constants.%tuple.type] { // CHECK:STDOUT: %.loc5_10: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] @@ -263,8 +279,8 @@ var y: ((), ()) = x; // CHECK:STDOUT: } // CHECK:STDOUT: %w: %tuple.type = value_binding w, @__global_init.%v.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %tuple.type = var %x.var_patt [concrete] // CHECK:STDOUT: %.loc7_15.1: type = splice_block %.loc7_15.5 [concrete = constants.%tuple.type] { @@ -277,8 +293,8 @@ var y: ((), ()) = x; // CHECK:STDOUT: } // CHECK:STDOUT: %x: ref %tuple.type = ref_binding x, %x.var [concrete = %x.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %pattern_type = ref_binding_pattern y [concrete] -// CHECK:STDOUT: %y.var_patt: %pattern_type = var_pattern %y.patt [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type = ref_binding_pattern y [concrete = constants.%y.patt] +// CHECK:STDOUT: %y.var_patt: %pattern_type = var_pattern %y.patt [concrete = constants.%y.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %tuple.type = var %y.var_patt [concrete] // CHECK:STDOUT: %.loc8_15.1: type = splice_block %.loc8_15.5 [concrete = constants.%tuple.type] { diff --git a/toolchain/check/testdata/tuple/element_access.carbon b/toolchain/check/testdata/tuple/element_access.carbon index eb29f108dcfe..f723d44857ea 100644 --- a/toolchain/check/testdata/tuple/element_access.carbon +++ b/toolchain/check/testdata/tuple/element_access.carbon @@ -220,6 +220,8 @@ var b: i32 = a.({.index = 2}.index); // CHECK:STDOUT: %Copy.WithSelf.Op.type.d09: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet) [concrete] // CHECK:STDOUT: %.7a6: type = fn_type_with_self_type %Copy.WithSelf.Op.type.d09, %Copy.facet [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.4f6, @Int.as.Copy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.6b6 = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.6b6 = var_pattern %c.patt [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -230,8 +232,8 @@ var b: i32 = a.({.index = 2}.index); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.6b6 = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.6b6 = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.6b6 = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type.6b6 = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %i32 = var %c.var_patt [concrete] // CHECK:STDOUT: %i32.loc6: type = type_literal constants.%i32 [concrete = constants.%i32] @@ -271,6 +273,8 @@ var b: i32 = a.({.index = 2}.index); // CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.type.48d: type = fn_type @Int.as.ImplicitAs.impl.Convert, @Int.as.ImplicitAs.impl(%From) [symbolic] // CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.0f9: %Int.as.ImplicitAs.impl.Convert.type.48d = struct_value () [symbolic] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %struct_type.index.b1b: type = struct_type {.index: Core.IntLiteral} [concrete] // CHECK:STDOUT: %struct.972: %struct_type.index.b1b = struct_value (%int_1.5b8) [concrete] @@ -285,6 +289,8 @@ var b: i32 = a.({.index = 2}.index); // CHECK:STDOUT: %.7a6: type = fn_type_with_self_type %Copy.WithSelf.Op.type.d09, %Copy.facet [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.4f6, @Int.as.Copy.impl.Op(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.cb1 = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.cb1 = var_pattern %c.patt [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %As.type.155: type = facet_type <@As, @As(%i32)> [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.type.c5d: type = fn_type @Core.IntLiteral.as.As.impl.Convert, @Core.IntLiteral.as.As.impl(%To) [symbolic] @@ -308,6 +314,8 @@ var b: i32 = a.({.index = 2}.index); // CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.bound.319: = bound_method %int_0.3c0, %Int.as.ImplicitAs.impl.Convert.69e [concrete] // CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Int.as.ImplicitAs.impl.Convert.69e, @Int.as.ImplicitAs.impl.Convert(%int_32) [concrete] // CHECK:STDOUT: %bound_method.df0: = bound_method %int_0.3c0, %Int.as.ImplicitAs.impl.Convert.specific_fn [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.6b6 = ref_binding_pattern d [concrete] +// CHECK:STDOUT: %d.var_patt: %pattern_type.6b6 = var_pattern %d.patt [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.bound.3a0: = bound_method %int_1.5b8, %Core.IntLiteral.as.As.impl.Convert.8a4 [concrete] // CHECK:STDOUT: %bound_method.18b: = bound_method %int_1.5b8, %Core.IntLiteral.as.As.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_1.0c6: %i32 = int_value 1 [concrete] @@ -328,15 +336,15 @@ var b: i32 = a.({.index = 2}.index); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type.6b6 = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var %b.var_patt [concrete] // CHECK:STDOUT: %i32.loc5: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %b: ref %i32 = ref_binding b, %b.var [concrete = %b.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.cb1 = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.cb1 = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.cb1 = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type.cb1 = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %empty_tuple.type = var %c.var_patt [concrete] // CHECK:STDOUT: %.loc6_9.1: type = splice_block %.loc6_9.3 [concrete = constants.%empty_tuple.type] { @@ -345,8 +353,8 @@ var b: i32 = a.({.index = 2}.index); // CHECK:STDOUT: } // CHECK:STDOUT: %c: ref %empty_tuple.type = ref_binding c, %c.var [concrete = %c.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.6b6 = ref_binding_pattern d [concrete] -// CHECK:STDOUT: %d.var_patt: %pattern_type.6b6 = var_pattern %d.patt [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.6b6 = ref_binding_pattern d [concrete = constants.%d.patt] +// CHECK:STDOUT: %d.var_patt: %pattern_type.6b6 = var_pattern %d.patt [concrete = constants.%d.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %i32 = var %d.var_patt [concrete] // CHECK:STDOUT: %i32.loc7: type = type_literal constants.%i32 [concrete = constants.%i32] diff --git a/toolchain/check/testdata/tuple/import.carbon b/toolchain/check/testdata/tuple/import.carbon index a2b6cd5a7b02..0e2df41ae188 100644 --- a/toolchain/check/testdata/tuple/import.carbon +++ b/toolchain/check/testdata/tuple/import.carbon @@ -94,6 +94,10 @@ fn F() -> (i32,) { // CHECK:STDOUT: %tuple.19c: %tuple.type.85c = tuple_value (%i32) [concrete] // CHECK:STDOUT: %tuple.type.a8a: type = tuple_type (%i32) [concrete] // CHECK:STDOUT: %pattern_type.e71: type = pattern_type %tuple.type.a8a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.e71 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.e71 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a_ref.patt: %pattern_type.e71 = ref_binding_pattern a_ref [concrete] +// CHECK:STDOUT: %a_ref.var_patt: %pattern_type.e71 = var_pattern %a_ref.patt [concrete] // CHECK:STDOUT: %tuple.elem0.8b2: ref %i32 = tuple_access imports.%a_ref.var, element0 [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.ac8: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N) [symbolic] @@ -115,6 +119,10 @@ fn F() -> (i32,) { // CHECK:STDOUT: %tuple.type.e55: type = tuple_type (%i32, %i32) [concrete] // CHECK:STDOUT: %tuple.type.e23: type = tuple_type (%tuple.type.cc8, %tuple.type.e55) [concrete] // CHECK:STDOUT: %pattern_type.05e: type = pattern_type %tuple.type.e23 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.05e = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.05e = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b_ref.patt: %pattern_type.05e = ref_binding_pattern b_ref [concrete] +// CHECK:STDOUT: %b_ref.var_patt: %pattern_type.05e = var_pattern %b_ref.patt [concrete] // CHECK:STDOUT: %tuple.elem0.383: ref %tuple.type.cc8 = tuple_access imports.%b_ref.var, element0 [concrete] // CHECK:STDOUT: %tuple.elem0.92c: ref %tuple.type.cc8 = tuple_access file.%b.var, element0 [concrete] // CHECK:STDOUT: %tuple.elem0.0e5: ref %tuple.type.a8a = tuple_access %tuple.elem0.383, element0 [concrete] @@ -151,6 +159,8 @@ fn F() -> (i32,) { // CHECK:STDOUT: %tuple.102: %tuple.type.e55 = tuple_value (%int_1.0c6, %int_2.295) [concrete] // CHECK:STDOUT: %C.372: type = class_type @C, @C(%tuple.102) [concrete] // CHECK:STDOUT: %pattern_type.717: type = pattern_type %C.372 [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.717 = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.717 = var_pattern %c.patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -162,20 +172,16 @@ fn F() -> (i32,) { // CHECK:STDOUT: %Implicit.F: %F.type = import_ref Implicit//default, F, loaded [concrete = constants.%F] // CHECK:STDOUT: %Implicit.import_ref.717: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.e74) = import_ref Implicit//default, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.845)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.1f3 = impl_witness_table (%Implicit.import_ref.717), @Core.IntLiteral.as.ImplicitAs.impl [concrete] -// CHECK:STDOUT: %a_ref.patt: %pattern_type.e71 = ref_binding_pattern a_ref [concrete] -// CHECK:STDOUT: %a_ref.var_patt: %pattern_type.e71 = var_pattern %a_ref.patt [concrete] -// CHECK:STDOUT: %a_ref.var: ref %tuple.type.a8a = var %a_ref.var_patt [concrete] +// CHECK:STDOUT: %a_ref.var: ref %tuple.type.a8a = var constants.%a_ref.var_patt [concrete] // CHECK:STDOUT: %Core.import_ref.cd6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.ac8) = import_ref Core//prelude/parts/int, loc{{\d+_\d+}}, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.5e0)] // CHECK:STDOUT: %Copy.impl_witness_table.367 = impl_witness_table (%Core.import_ref.cd6), @Int.as.Copy.impl [concrete] -// CHECK:STDOUT: %b_ref.patt: %pattern_type.05e = ref_binding_pattern b_ref [concrete] -// CHECK:STDOUT: %b_ref.var_patt: %pattern_type.05e = var_pattern %b_ref.patt [concrete] -// CHECK:STDOUT: %b_ref.var: ref %tuple.type.e23 = var %b_ref.var_patt [concrete] +// CHECK:STDOUT: %b_ref.var: ref %tuple.type.e23 = var constants.%b_ref.var_patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.e71 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.e71 = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.e71 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type.e71 = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %tuple.type.a8a = var %a.var_patt [concrete] // CHECK:STDOUT: %.loc5_13.1: type = splice_block %.loc5_13.3 [concrete = constants.%tuple.type.a8a] { @@ -185,8 +191,8 @@ fn F() -> (i32,) { // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %tuple.type.a8a = ref_binding a, %a.var [concrete = %a.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.05e = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.05e = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.05e = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %b.var_patt: %pattern_type.05e = var_pattern %b.patt [concrete = constants.%b.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %tuple.type.e23 = var %b.var_patt [concrete] // CHECK:STDOUT: %.loc6_34.1: type = splice_block %.loc6_34.6 [concrete = constants.%tuple.type.e23] { @@ -205,8 +211,8 @@ fn F() -> (i32,) { // CHECK:STDOUT: } // CHECK:STDOUT: %b: ref %tuple.type.e23 = ref_binding b, %b.var [concrete = %b.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.717 = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.717 = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.717 = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type.717 = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C.372 = var %c.var_patt [concrete] // CHECK:STDOUT: %.loc7_16.1: type = splice_block %C [concrete = constants.%C.372] { diff --git a/toolchain/check/testdata/tuple/in_place_tuple_init.carbon b/toolchain/check/testdata/tuple/in_place_tuple_init.carbon index e3a84802e977..3d1e7cdd5921 100644 --- a/toolchain/check/testdata/tuple/in_place_tuple_init.carbon +++ b/toolchain/check/testdata/tuple/in_place_tuple_init.carbon @@ -62,6 +62,8 @@ fn H() { // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.394 = ref_binding_pattern v [concrete] +// CHECK:STDOUT: %v.var_patt: %pattern_type.394 = var_pattern %v.patt [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.3: type = fn_type @Destroy.Op.loc7_3.3 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.3: %Destroy.Op.type.1d8f74.3 = struct_value () [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] @@ -85,8 +87,8 @@ fn H() { // CHECK:STDOUT: fn @G() -> out %return.param: %tuple.type.e55 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %pattern_type.394 = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: %pattern_type.394 = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.394 = ref_binding_pattern v [concrete = constants.%v.patt] +// CHECK:STDOUT: %v.var_patt: %pattern_type.394 = var_pattern %v.patt [concrete = constants.%v.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %tuple.type.e55 = var %v.var_patt // CHECK:STDOUT: %F.ref.loc7: %F.type = name_ref F, file.%F.decl [concrete = constants.%F] @@ -160,12 +162,16 @@ fn H() { // CHECK:STDOUT: %tuple.type.015: type = tuple_type (%tuple.type.555, %tuple.type.555) [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %pattern_type.e12: type = pattern_type %tuple.type.015 [concrete] +// CHECK:STDOUT: %v.patt.dde: %pattern_type.e12 = ref_binding_pattern v [concrete] +// CHECK:STDOUT: %v.var_patt.678: %pattern_type.e12 = var_pattern %v.patt.dde [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.4: type = fn_type @Destroy.Op.loc7_3.4 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.4: %Destroy.Op.type.1d8f74.4 = struct_value () [concrete] // CHECK:STDOUT: %tuple.type.3a3: type = tuple_type (type, %tuple.type.ff9, type) [concrete] // CHECK:STDOUT: %tuple.82e: %tuple.type.3a3 = tuple_value (%i32, %tuple.04d, %i32) [concrete] // CHECK:STDOUT: %tuple.type.b7e: type = tuple_type (%i32, %tuple.type.555, %i32) [concrete] // CHECK:STDOUT: %pattern_type.f8e: type = pattern_type %tuple.type.b7e [concrete] +// CHECK:STDOUT: %v.patt.7e2: %pattern_type.f8e = ref_binding_pattern v [concrete] +// CHECK:STDOUT: %v.var_patt.409: %pattern_type.f8e = var_pattern %v.patt.7e2 [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %tuple.type.c47: type = tuple_type (Core.IntLiteral, %tuple.type.555, Core.IntLiteral) [concrete] @@ -198,8 +204,8 @@ fn H() { // CHECK:STDOUT: fn @G() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %pattern_type.e12 = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: %pattern_type.e12 = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.e12 = ref_binding_pattern v [concrete = constants.%v.patt.dde] +// CHECK:STDOUT: %v.var_patt: %pattern_type.e12 = var_pattern %v.patt [concrete = constants.%v.var_patt.678] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %tuple.type.015 = var %v.var_patt // CHECK:STDOUT: %F.ref.loc7_55: %F.type = name_ref F, file.%F.decl [concrete = constants.%F] @@ -252,8 +258,8 @@ fn H() { // CHECK:STDOUT: fn @H() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %pattern_type.f8e = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: %pattern_type.f8e = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.f8e = ref_binding_pattern v [concrete = constants.%v.patt.7e2] +// CHECK:STDOUT: %v.var_patt: %pattern_type.f8e = var_pattern %v.patt [concrete = constants.%v.var_patt.409] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %tuple.type.b7e = var %v.var_patt // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] diff --git a/toolchain/check/testdata/tuple/tuple_pattern.carbon b/toolchain/check/testdata/tuple/tuple_pattern.carbon index a8b04041d15d..6f09b28b652c 100644 --- a/toolchain/check/testdata/tuple/tuple_pattern.carbon +++ b/toolchain/check/testdata/tuple/tuple_pattern.carbon @@ -105,6 +105,17 @@ let (a: {}, b: {}) = ({}, {}, {}); // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %pattern_type.de4: type = pattern_type %tuple.type.b6b [concrete] // CHECK:STDOUT: %pattern_type.a96: type = pattern_type %empty_struct_type [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.a96 = value_binding_pattern x [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.a96 = value_binding_pattern y [concrete] +// CHECK:STDOUT: %.68f: %pattern_type.de4 = tuple_pattern (%x.patt, %y.patt) [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.a96 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.a96 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %.763: %pattern_type.de4 = tuple_pattern (%a.patt, %b.patt) [concrete] +// CHECK:STDOUT: %.var_patt.cb3: %pattern_type.de4 = var_pattern %.763 [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.a96 = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type.a96 = ref_binding_pattern d [concrete] +// CHECK:STDOUT: %.a7b: %pattern_type.de4 = tuple_pattern (%c.patt, %d.patt) [concrete] +// CHECK:STDOUT: %.var_patt.288: %pattern_type.de4 = var_pattern %.a7b [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.2: type = fn_type @Destroy.Op.loc8_3.2 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.2: %Destroy.Op.type.1d8f74.2 = struct_value () [concrete] // CHECK:STDOUT: } @@ -112,32 +123,32 @@ let (a: {}, b: {}) = ({}, {}, {}); // CHECK:STDOUT: fn @F(%v.param: %tuple.type.b6b) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.a96 = value_binding_pattern x [concrete] -// CHECK:STDOUT: %y.patt: %pattern_type.a96 = value_binding_pattern y [concrete] -// CHECK:STDOUT: %.loc6_34: %pattern_type.de4 = tuple_pattern (%x.patt, %y.patt) [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.a96 = value_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %y.patt: %pattern_type.a96 = value_binding_pattern y [concrete = constants.%y.patt] +// CHECK:STDOUT: %.loc6_34: %pattern_type.de4 = tuple_pattern (%x.patt, %y.patt) [concrete = constants.%.68f] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc6_40.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] // CHECK:STDOUT: %.loc6_44.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] // CHECK:STDOUT: %.loc6_45: %tuple.type.b6b = tuple_literal (%.loc6_40.1, %.loc6_44.1) [concrete = constants.%tuple] +// CHECK:STDOUT: %empty_struct.loc6_40: %empty_struct_type = struct_value () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc6_40.2: %empty_struct_type = converted %.loc6_40.1, %empty_struct.loc6_40 [concrete = constants.%empty_struct] // CHECK:STDOUT: %.loc6_19.1: type = splice_block %.loc6_19.3 [concrete = constants.%empty_struct_type] { // CHECK:STDOUT: %.loc6_19.2: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] // CHECK:STDOUT: %.loc6_19.3: type = converted %.loc6_19.2, constants.%empty_struct_type [concrete = constants.%empty_struct_type] // CHECK:STDOUT: } -// CHECK:STDOUT: %empty_struct.loc6_40: %empty_struct_type = struct_value () [concrete = constants.%empty_struct] -// CHECK:STDOUT: %.loc6_40.2: %empty_struct_type = converted %.loc6_40.1, %empty_struct.loc6_40 [concrete = constants.%empty_struct] // CHECK:STDOUT: %x: %empty_struct_type = value_binding x, %.loc6_40.2 +// CHECK:STDOUT: %empty_struct.loc6_44: %empty_struct_type = struct_value () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc6_44.2: %empty_struct_type = converted %.loc6_44.1, %empty_struct.loc6_44 [concrete = constants.%empty_struct] // CHECK:STDOUT: %.loc6_33.1: type = splice_block %.loc6_33.3 [concrete = constants.%empty_struct_type] { // CHECK:STDOUT: %.loc6_33.2: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] // CHECK:STDOUT: %.loc6_33.3: type = converted %.loc6_33.2, constants.%empty_struct_type [concrete = constants.%empty_struct_type] // CHECK:STDOUT: } -// CHECK:STDOUT: %empty_struct.loc6_44: %empty_struct_type = struct_value () [concrete = constants.%empty_struct] -// CHECK:STDOUT: %.loc6_44.2: %empty_struct_type = converted %.loc6_44.1, %empty_struct.loc6_44 [concrete = constants.%empty_struct] // CHECK:STDOUT: %y: %empty_struct_type = value_binding y, %.loc6_44.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.a96 = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %b.patt: %pattern_type.a96 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %.loc7_34: %pattern_type.de4 = tuple_pattern (%a.patt, %b.patt) [concrete] -// CHECK:STDOUT: %.var_patt.loc7: %pattern_type.de4 = var_pattern %.loc7_34 [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.a96 = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %b.patt: %pattern_type.a96 = ref_binding_pattern b [concrete = constants.%b.patt] +// CHECK:STDOUT: %.loc7_34: %pattern_type.de4 = tuple_pattern (%a.patt, %b.patt) [concrete = constants.%.763] +// CHECK:STDOUT: %.var_patt.loc7: %pattern_type.de4 = var_pattern %.loc7_34 [concrete = constants.%.var_patt.cb3] // CHECK:STDOUT: } // CHECK:STDOUT: %.var.loc7: ref %tuple.type.b6b = var %.var_patt.loc7 // CHECK:STDOUT: %v.ref: %tuple.type.b6b = name_ref v, %v @@ -167,10 +178,10 @@ let (a: {}, b: {}) = ({}, {}, {}); // CHECK:STDOUT: } // CHECK:STDOUT: %b: ref %empty_struct_type = ref_binding b, %tuple.elem1.loc7_3 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.a96 = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %d.patt: %pattern_type.a96 = ref_binding_pattern d [concrete] -// CHECK:STDOUT: %.loc8_34: %pattern_type.de4 = tuple_pattern (%c.patt, %d.patt) [concrete] -// CHECK:STDOUT: %.var_patt.loc8: %pattern_type.de4 = var_pattern %.loc8_34 [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.a96 = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %d.patt: %pattern_type.a96 = ref_binding_pattern d [concrete = constants.%d.patt] +// CHECK:STDOUT: %.loc8_34: %pattern_type.de4 = tuple_pattern (%c.patt, %d.patt) [concrete = constants.%.a7b] +// CHECK:STDOUT: %.var_patt.loc8: %pattern_type.de4 = var_pattern %.loc8_34 [concrete = constants.%.var_patt.288] // CHECK:STDOUT: } // CHECK:STDOUT: %.var.loc8: ref %tuple.type.b6b = var %.var_patt.loc8 // CHECK:STDOUT: %.loc8_40.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] @@ -222,18 +233,33 @@ let (a: {}, b: {}) = ({}, {}, {}); // CHECK:STDOUT: %tuple.type.b6b: type = tuple_type (%empty_struct_type, %empty_struct_type) [concrete] // CHECK:STDOUT: %tuple: %tuple.type.b6b = tuple_value (%empty_struct, %empty_struct) [concrete] // CHECK:STDOUT: %pattern_type.de4: type = pattern_type %tuple.type.b6b [concrete] +// CHECK:STDOUT: %tuple.patt.3eb: %pattern_type.de4 = ref_binding_pattern tuple [concrete] +// CHECK:STDOUT: %tuple.var_patt: %pattern_type.de4 = var_pattern %tuple.patt.3eb [concrete] // CHECK:STDOUT: %pattern_type.a96: type = pattern_type %empty_struct_type [concrete] +// CHECK:STDOUT: %x.patt.691773.1: %pattern_type.a96 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %y.patt.a7119c.1: %pattern_type.a96 = ref_binding_pattern y [concrete] +// CHECK:STDOUT: %.4ca32d.1: %pattern_type.de4 = tuple_pattern (%x.patt.691773.1, %y.patt.a7119c.1) [concrete] +// CHECK:STDOUT: %.var_patt.c3725e.1: %pattern_type.de4 = var_pattern %.4ca32d.1 [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.2: type = fn_type @Destroy.Op.loc7_3.2 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.2: %Destroy.Op.type.1d8f74.2 = struct_value () [concrete] +// CHECK:STDOUT: %tuple.patt.29f: %pattern_type.de4 = value_binding_pattern tuple [concrete] +// CHECK:STDOUT: %x.patt.691773.2: %pattern_type.a96 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %y.patt.a7119c.2: %pattern_type.a96 = ref_binding_pattern y [concrete] +// CHECK:STDOUT: %.4ca32d.2: %pattern_type.de4 = tuple_pattern (%x.patt.691773.2, %y.patt.a7119c.2) [concrete] +// CHECK:STDOUT: %.var_patt.c3725e.2: %pattern_type.de4 = var_pattern %.4ca32d.2 [concrete] // CHECK:STDOUT: %MakeTuple.type: type = fn_type @MakeTuple [concrete] // CHECK:STDOUT: %MakeTuple: %MakeTuple.type = struct_value () [concrete] +// CHECK:STDOUT: %x.patt.691773.3: %pattern_type.a96 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %y.patt.a7119c.3: %pattern_type.a96 = ref_binding_pattern y [concrete] +// CHECK:STDOUT: %.4ca32d.3: %pattern_type.de4 = tuple_pattern (%x.patt.691773.3, %y.patt.a7119c.3) [concrete] +// CHECK:STDOUT: %.var_patt.c3725e.3: %pattern_type.de4 = var_pattern %.4ca32d.3 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %tuple.patt: %pattern_type.de4 = ref_binding_pattern tuple [concrete] -// CHECK:STDOUT: %tuple.var_patt: %pattern_type.de4 = var_pattern %tuple.patt [concrete] +// CHECK:STDOUT: %tuple.patt: %pattern_type.de4 = ref_binding_pattern tuple [concrete = constants.%tuple.patt.3eb] +// CHECK:STDOUT: %tuple.var_patt: %pattern_type.de4 = var_pattern %tuple.patt [concrete = constants.%tuple.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %tuple.var: ref %tuple.type.b6b = var %tuple.var_patt // CHECK:STDOUT: %.loc6_27.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] @@ -260,10 +286,10 @@ let (a: {}, b: {}) = ({}, {}, {}); // CHECK:STDOUT: } // CHECK:STDOUT: %tuple: ref %tuple.type.b6b = ref_binding tuple, %tuple.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.a96 = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %y.patt: %pattern_type.a96 = ref_binding_pattern y [concrete] -// CHECK:STDOUT: %.loc7_34: %pattern_type.de4 = tuple_pattern (%x.patt, %y.patt) [concrete] -// CHECK:STDOUT: %.var_patt: %pattern_type.de4 = var_pattern %.loc7_34 [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.a96 = ref_binding_pattern x [concrete = constants.%x.patt.691773.1] +// CHECK:STDOUT: %y.patt: %pattern_type.a96 = ref_binding_pattern y [concrete = constants.%y.patt.a7119c.1] +// CHECK:STDOUT: %.loc7_34: %pattern_type.de4 = tuple_pattern (%x.patt, %y.patt) [concrete = constants.%.4ca32d.1] +// CHECK:STDOUT: %.var_patt: %pattern_type.de4 = var_pattern %.loc7_34 [concrete = constants.%.var_patt.c3725e.1] // CHECK:STDOUT: } // CHECK:STDOUT: %.var: ref %tuple.type.b6b = var %.var_patt // CHECK:STDOUT: %tuple.ref: ref %tuple.type.b6b = name_ref tuple, %tuple @@ -309,11 +335,17 @@ let (a: {}, b: {}) = ({}, {}, {}); // CHECK:STDOUT: fn @G() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %tuple.patt: %pattern_type.de4 = value_binding_pattern tuple [concrete] +// CHECK:STDOUT: %tuple.patt: %pattern_type.de4 = value_binding_pattern tuple [concrete = constants.%tuple.patt.29f] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc13_27: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] // CHECK:STDOUT: %.loc13_31: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] // CHECK:STDOUT: %.loc13_32.1: %tuple.type.b6b = tuple_literal (%.loc13_27, %.loc13_31) [concrete = constants.%tuple] +// CHECK:STDOUT: %empty_struct.loc13_27: %empty_struct_type = struct_value () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc13_32.2: %empty_struct_type = converted %.loc13_27, %empty_struct.loc13_27 [concrete = constants.%empty_struct] +// CHECK:STDOUT: %empty_struct.loc13_31: %empty_struct_type = struct_value () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc13_32.3: %empty_struct_type = converted %.loc13_31, %empty_struct.loc13_31 [concrete = constants.%empty_struct] +// CHECK:STDOUT: %tuple.loc13_32: %tuple.type.b6b = tuple_value (%.loc13_32.2, %.loc13_32.3) [concrete = constants.%tuple] +// CHECK:STDOUT: %.loc13_32.4: %tuple.type.b6b = converted %.loc13_32.1, %tuple.loc13_32 [concrete = constants.%tuple] // CHECK:STDOUT: %.loc13_21.1: type = splice_block %.loc13_21.5 [concrete = constants.%tuple.type.b6b] { // CHECK:STDOUT: %.loc13_16: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] // CHECK:STDOUT: %.loc13_20: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] @@ -322,18 +354,12 @@ let (a: {}, b: {}) = ({}, {}, {}); // CHECK:STDOUT: %.loc13_21.4: type = converted constants.%empty_struct, constants.%empty_struct_type [concrete = constants.%empty_struct_type] // CHECK:STDOUT: %.loc13_21.5: type = converted %.loc13_21.2, constants.%tuple.type.b6b [concrete = constants.%tuple.type.b6b] // CHECK:STDOUT: } -// CHECK:STDOUT: %empty_struct.loc13_27: %empty_struct_type = struct_value () [concrete = constants.%empty_struct] -// CHECK:STDOUT: %.loc13_32.2: %empty_struct_type = converted %.loc13_27, %empty_struct.loc13_27 [concrete = constants.%empty_struct] -// CHECK:STDOUT: %empty_struct.loc13_31: %empty_struct_type = struct_value () [concrete = constants.%empty_struct] -// CHECK:STDOUT: %.loc13_32.3: %empty_struct_type = converted %.loc13_31, %empty_struct.loc13_31 [concrete = constants.%empty_struct] -// CHECK:STDOUT: %tuple.loc13_32: %tuple.type.b6b = tuple_value (%.loc13_32.2, %.loc13_32.3) [concrete = constants.%tuple] -// CHECK:STDOUT: %.loc13_32.4: %tuple.type.b6b = converted %.loc13_32.1, %tuple.loc13_32 [concrete = constants.%tuple] // CHECK:STDOUT: %tuple.loc13_12: %tuple.type.b6b = value_binding tuple, %.loc13_32.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.a96 = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %y.patt: %pattern_type.a96 = ref_binding_pattern y [concrete] -// CHECK:STDOUT: %.loc14_34: %pattern_type.de4 = tuple_pattern (%x.patt, %y.patt) [concrete] -// CHECK:STDOUT: %.var_patt: %pattern_type.de4 = var_pattern %.loc14_34 [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.a96 = ref_binding_pattern x [concrete = constants.%x.patt.691773.2] +// CHECK:STDOUT: %y.patt: %pattern_type.a96 = ref_binding_pattern y [concrete = constants.%y.patt.a7119c.2] +// CHECK:STDOUT: %.loc14_34: %pattern_type.de4 = tuple_pattern (%x.patt, %y.patt) [concrete = constants.%.4ca32d.2] +// CHECK:STDOUT: %.var_patt: %pattern_type.de4 = var_pattern %.loc14_34 [concrete = constants.%.var_patt.c3725e.2] // CHECK:STDOUT: } // CHECK:STDOUT: %.var: ref %tuple.type.b6b = var %.var_patt // CHECK:STDOUT: %tuple.ref: %tuple.type.b6b = name_ref tuple, %tuple.loc13_12 @@ -370,10 +396,10 @@ let (a: {}, b: {}) = ({}, {}, {}); // CHECK:STDOUT: fn @H() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.a96 = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %y.patt: %pattern_type.a96 = ref_binding_pattern y [concrete] -// CHECK:STDOUT: %.loc22_34: %pattern_type.de4 = tuple_pattern (%x.patt, %y.patt) [concrete] -// CHECK:STDOUT: %.var_patt: %pattern_type.de4 = var_pattern %.loc22_34 [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.a96 = ref_binding_pattern x [concrete = constants.%x.patt.691773.3] +// CHECK:STDOUT: %y.patt: %pattern_type.a96 = ref_binding_pattern y [concrete = constants.%y.patt.a7119c.3] +// CHECK:STDOUT: %.loc22_34: %pattern_type.de4 = tuple_pattern (%x.patt, %y.patt) [concrete = constants.%.4ca32d.3] +// CHECK:STDOUT: %.var_patt: %pattern_type.de4 = var_pattern %.loc22_34 [concrete = constants.%.var_patt.c3725e.3] // CHECK:STDOUT: } // CHECK:STDOUT: %.var: ref %tuple.type.b6b = var %.var_patt // CHECK:STDOUT: %MakeTuple.ref: %MakeTuple.type = name_ref MakeTuple, file.%MakeTuple.decl [concrete = constants.%MakeTuple] @@ -403,10 +429,15 @@ let (a: {}, b: {}) = ({}, {}, {}); // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.a96: type = pattern_type %empty_struct_type [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.a96 = value_binding_pattern x [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.a96 = value_binding_pattern y [concrete] +// CHECK:STDOUT: %z.patt: %pattern_type.a96 = value_binding_pattern z [concrete] // CHECK:STDOUT: %tuple.type.b6b: type = tuple_type (%empty_struct_type, %empty_struct_type) [concrete] // CHECK:STDOUT: %pattern_type.de4: type = pattern_type %tuple.type.b6b [concrete] +// CHECK:STDOUT: %.258: %pattern_type.de4 = tuple_pattern (%y.patt, %z.patt) [concrete] // CHECK:STDOUT: %tuple.type.6ca: type = tuple_type (%empty_struct_type, %tuple.type.b6b) [concrete] // CHECK:STDOUT: %pattern_type.361: type = pattern_type %tuple.type.6ca [concrete] +// CHECK:STDOUT: %.1e3: %pattern_type.361 = tuple_pattern (%x.patt, %.258) [concrete] // CHECK:STDOUT: %tuple.9a3: %tuple.type.b6b = tuple_value (%empty_struct, %empty_struct) [concrete] // CHECK:STDOUT: %tuple.56c: %tuple.type.6ca = tuple_value (%empty_struct, %tuple.9a3) [concrete] // CHECK:STDOUT: } @@ -414,37 +445,37 @@ let (a: {}, b: {}) = ({}, {}, {}); // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.a96 = value_binding_pattern x [concrete] -// CHECK:STDOUT: %y.patt: %pattern_type.a96 = value_binding_pattern y [concrete] -// CHECK:STDOUT: %z.patt: %pattern_type.a96 = value_binding_pattern z [concrete] -// CHECK:STDOUT: %.loc6_49: %pattern_type.de4 = tuple_pattern (%y.patt, %z.patt) [concrete] -// CHECK:STDOUT: %.loc6_50: %pattern_type.361 = tuple_pattern (%x.patt, %.loc6_49) [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.a96 = value_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %y.patt: %pattern_type.a96 = value_binding_pattern y [concrete = constants.%y.patt] +// CHECK:STDOUT: %z.patt: %pattern_type.a96 = value_binding_pattern z [concrete = constants.%z.patt] +// CHECK:STDOUT: %.loc6_49: %pattern_type.de4 = tuple_pattern (%y.patt, %z.patt) [concrete = constants.%.258] +// CHECK:STDOUT: %.loc6_50: %pattern_type.361 = tuple_pattern (%x.patt, %.loc6_49) [concrete = constants.%.1e3] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc6_56.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] // CHECK:STDOUT: %.loc6_61.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] // CHECK:STDOUT: %.loc6_65.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] // CHECK:STDOUT: %.loc6_66: %tuple.type.b6b = tuple_literal (%.loc6_61.1, %.loc6_65.1) [concrete = constants.%tuple.9a3] // CHECK:STDOUT: %.loc6_67: %tuple.type.6ca = tuple_literal (%.loc6_56.1, %.loc6_66) [concrete = constants.%tuple.56c] +// CHECK:STDOUT: %empty_struct.loc6_56: %empty_struct_type = struct_value () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc6_56.2: %empty_struct_type = converted %.loc6_56.1, %empty_struct.loc6_56 [concrete = constants.%empty_struct] // CHECK:STDOUT: %.loc6_19.1: type = splice_block %.loc6_19.3 [concrete = constants.%empty_struct_type] { // CHECK:STDOUT: %.loc6_19.2: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] // CHECK:STDOUT: %.loc6_19.3: type = converted %.loc6_19.2, constants.%empty_struct_type [concrete = constants.%empty_struct_type] // CHECK:STDOUT: } -// CHECK:STDOUT: %empty_struct.loc6_56: %empty_struct_type = struct_value () [concrete = constants.%empty_struct] -// CHECK:STDOUT: %.loc6_56.2: %empty_struct_type = converted %.loc6_56.1, %empty_struct.loc6_56 [concrete = constants.%empty_struct] // CHECK:STDOUT: %x: %empty_struct_type = value_binding x, %.loc6_56.2 +// CHECK:STDOUT: %empty_struct.loc6_61: %empty_struct_type = struct_value () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc6_61.2: %empty_struct_type = converted %.loc6_61.1, %empty_struct.loc6_61 [concrete = constants.%empty_struct] // CHECK:STDOUT: %.loc6_34.1: type = splice_block %.loc6_34.3 [concrete = constants.%empty_struct_type] { // CHECK:STDOUT: %.loc6_34.2: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] // CHECK:STDOUT: %.loc6_34.3: type = converted %.loc6_34.2, constants.%empty_struct_type [concrete = constants.%empty_struct_type] // CHECK:STDOUT: } -// CHECK:STDOUT: %empty_struct.loc6_61: %empty_struct_type = struct_value () [concrete = constants.%empty_struct] -// CHECK:STDOUT: %.loc6_61.2: %empty_struct_type = converted %.loc6_61.1, %empty_struct.loc6_61 [concrete = constants.%empty_struct] // CHECK:STDOUT: %y: %empty_struct_type = value_binding y, %.loc6_61.2 +// CHECK:STDOUT: %empty_struct.loc6_65: %empty_struct_type = struct_value () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc6_65.2: %empty_struct_type = converted %.loc6_65.1, %empty_struct.loc6_65 [concrete = constants.%empty_struct] // CHECK:STDOUT: %.loc6_48.1: type = splice_block %.loc6_48.3 [concrete = constants.%empty_struct_type] { // CHECK:STDOUT: %.loc6_48.2: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] // CHECK:STDOUT: %.loc6_48.3: type = converted %.loc6_48.2, constants.%empty_struct_type [concrete = constants.%empty_struct_type] // CHECK:STDOUT: } -// CHECK:STDOUT: %empty_struct.loc6_65: %empty_struct_type = struct_value () [concrete = constants.%empty_struct] -// CHECK:STDOUT: %.loc6_65.2: %empty_struct_type = converted %.loc6_65.1, %empty_struct.loc6_65 [concrete = constants.%empty_struct] // CHECK:STDOUT: %z: %empty_struct_type = value_binding z, %.loc6_65.2 // CHECK:STDOUT: // CHECK:STDOUT: } @@ -455,30 +486,33 @@ let (a: {}, b: {}) = ({}, {}, {}); // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.a96: type = pattern_type %empty_struct_type [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.a96 = value_binding_pattern x [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.a96 = value_binding_pattern y [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (%empty_struct_type, %empty_struct_type) [concrete] // CHECK:STDOUT: %pattern_type.de4: type = pattern_type %tuple.type [concrete] +// CHECK:STDOUT: %.fa7: %pattern_type.de4 = tuple_pattern (%x.patt, %y.patt) [concrete] // CHECK:STDOUT: %tuple: %tuple.type = tuple_value (%empty_struct, %empty_struct) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.a96 = value_binding_pattern x [concrete] -// CHECK:STDOUT: %y.patt: %pattern_type.a96 = value_binding_pattern y [concrete] -// CHECK:STDOUT: %.loc5_18: %pattern_type.de4 = tuple_pattern (%x.patt, %y.patt) [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.a96 = value_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %y.patt: %pattern_type.a96 = value_binding_pattern y [concrete = constants.%y.patt] +// CHECK:STDOUT: %.loc5_18: %pattern_type.de4 = tuple_pattern (%x.patt, %y.patt) [concrete = constants.%.fa7] // CHECK:STDOUT: } +// CHECK:STDOUT: %empty_struct.loc5_24: %empty_struct_type = struct_value () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc5_24: %empty_struct_type = converted @__global_init.%.loc5_24, %empty_struct.loc5_24 [concrete = constants.%empty_struct] // CHECK:STDOUT: %.loc5_10.1: type = splice_block %.loc5_10.3 [concrete = constants.%empty_struct_type] { // CHECK:STDOUT: %.loc5_10.2: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] // CHECK:STDOUT: %.loc5_10.3: type = converted %.loc5_10.2, constants.%empty_struct_type [concrete = constants.%empty_struct_type] // CHECK:STDOUT: } -// CHECK:STDOUT: %empty_struct.loc5_24: %empty_struct_type = struct_value () [concrete = constants.%empty_struct] -// CHECK:STDOUT: %.loc5_24: %empty_struct_type = converted @__global_init.%.loc5_24, %empty_struct.loc5_24 [concrete = constants.%empty_struct] // CHECK:STDOUT: %x: %empty_struct_type = value_binding x, %.loc5_24 +// CHECK:STDOUT: %empty_struct.loc5_28: %empty_struct_type = struct_value () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc5_28: %empty_struct_type = converted @__global_init.%.loc5_28, %empty_struct.loc5_28 [concrete = constants.%empty_struct] // CHECK:STDOUT: %.loc5_17.1: type = splice_block %.loc5_17.3 [concrete = constants.%empty_struct_type] { // CHECK:STDOUT: %.loc5_17.2: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] // CHECK:STDOUT: %.loc5_17.3: type = converted %.loc5_17.2, constants.%empty_struct_type [concrete = constants.%empty_struct_type] // CHECK:STDOUT: } -// CHECK:STDOUT: %empty_struct.loc5_28: %empty_struct_type = struct_value () [concrete = constants.%empty_struct] -// CHECK:STDOUT: %.loc5_28: %empty_struct_type = converted @__global_init.%.loc5_28, %empty_struct.loc5_28 [concrete = constants.%empty_struct] // CHECK:STDOUT: %y: %empty_struct_type = value_binding y, %.loc5_28 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/var/export_name.carbon b/toolchain/check/testdata/var/export_name.carbon index 4d15ea979de7..cf618b3d798f 100644 --- a/toolchain/check/testdata/var/export_name.carbon +++ b/toolchain/check/testdata/var/export_name.carbon @@ -48,6 +48,8 @@ var w: () = v; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.cb1 = ref_binding_pattern v [concrete] +// CHECK:STDOUT: %v.var_patt: %pattern_type.cb1 = var_pattern %v.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.150: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] @@ -77,8 +79,8 @@ var w: () = v; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %pattern_type.cb1 = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: %pattern_type.cb1 = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.cb1 = ref_binding_pattern v [concrete = constants.%v.patt] +// CHECK:STDOUT: %v.var_patt: %pattern_type.cb1 = var_pattern %v.patt [concrete = constants.%v.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %empty_tuple.type = var %v.var_patt [concrete] // CHECK:STDOUT: %.loc4_9.1: type = splice_block %.loc4_9.3 [concrete = constants.%empty_tuple.type] { @@ -105,6 +107,8 @@ var w: () = v; // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type = ref_binding_pattern v [concrete] +// CHECK:STDOUT: %v.var_patt: %pattern_type = var_pattern %v.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -113,9 +117,7 @@ var w: () = v; // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } -// CHECK:STDOUT: %v.patt: %pattern_type = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: %pattern_type = var_pattern %v.patt [concrete] -// CHECK:STDOUT: %v.var: ref %empty_tuple.type = var %v.var_patt [concrete] +// CHECK:STDOUT: %v.var: ref %empty_tuple.type = var constants.%v.var_patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -134,6 +136,10 @@ var w: () = v; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %w.patt: %pattern_type = ref_binding_pattern w [concrete] +// CHECK:STDOUT: %w.var_patt: %pattern_type = var_pattern %w.patt [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type = ref_binding_pattern v [concrete] +// CHECK:STDOUT: %v.var_patt: %pattern_type = var_pattern %v.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -142,9 +148,7 @@ var w: () = v; // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } -// CHECK:STDOUT: %v.patt: %pattern_type = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: %pattern_type = var_pattern %v.patt [concrete] -// CHECK:STDOUT: %v.var: ref %empty_tuple.type = var %v.var_patt [concrete] +// CHECK:STDOUT: %v.var: ref %empty_tuple.type = var constants.%v.var_patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -156,8 +160,8 @@ var w: () = v; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %w.patt: %pattern_type = ref_binding_pattern w [concrete] -// CHECK:STDOUT: %w.var_patt: %pattern_type = var_pattern %w.patt [concrete] +// CHECK:STDOUT: %w.patt: %pattern_type = ref_binding_pattern w [concrete = constants.%w.patt] +// CHECK:STDOUT: %w.var_patt: %pattern_type = var_pattern %w.patt [concrete = constants.%w.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %w.var: ref %empty_tuple.type = var %w.var_patt [concrete] // CHECK:STDOUT: %.loc6_9.1: type = splice_block %.loc6_9.3 [concrete = constants.%empty_tuple.type] { diff --git a/toolchain/check/testdata/var/fail_duplicate_decl.carbon b/toolchain/check/testdata/var/fail_duplicate_decl.carbon index 3d5deca43e14..14bd9c21ba8b 100644 --- a/toolchain/check/testdata/var/fail_duplicate_decl.carbon +++ b/toolchain/check/testdata/var/fail_duplicate_decl.carbon @@ -34,6 +34,10 @@ fn Main() { // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %x.patt.06838d.1: %pattern_type.cb1 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt.28d573.1: %pattern_type.cb1 = var_pattern %x.patt.06838d.1 [concrete] +// CHECK:STDOUT: %x.patt.06838d.2: %pattern_type.cb1 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt.28d573.2: %pattern_type.cb1 = var_pattern %x.patt.06838d.2 [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] // CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] @@ -60,8 +64,8 @@ fn Main() { // CHECK:STDOUT: fn @Main() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt.loc3: %pattern_type.cb1 = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt.loc3: %pattern_type.cb1 = var_pattern %x.patt.loc3 [concrete] +// CHECK:STDOUT: %x.patt.loc3: %pattern_type.cb1 = ref_binding_pattern x [concrete = constants.%x.patt.06838d.1] +// CHECK:STDOUT: %x.var_patt.loc3: %pattern_type.cb1 = var_pattern %x.patt.loc3 [concrete = constants.%x.var_patt.28d573.1] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var.loc3: ref %empty_tuple.type = var %x.var_patt.loc3 // CHECK:STDOUT: %.loc3_23.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] @@ -74,8 +78,8 @@ fn Main() { // CHECK:STDOUT: } // CHECK:STDOUT: %x.loc3: ref %empty_tuple.type = ref_binding x, %x.var.loc3 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt.loc11: %pattern_type.cb1 = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt.loc11: %pattern_type.cb1 = var_pattern %x.patt.loc11 [concrete] +// CHECK:STDOUT: %x.patt.loc11: %pattern_type.cb1 = ref_binding_pattern x [concrete = constants.%x.patt.06838d.2] +// CHECK:STDOUT: %x.var_patt.loc11: %pattern_type.cb1 = var_pattern %x.patt.loc11 [concrete = constants.%x.var_patt.28d573.2] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var.loc11: ref %empty_tuple.type = var %x.var_patt.loc11 // CHECK:STDOUT: %.loc11_23.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] diff --git a/toolchain/check/testdata/var/fail_init_type_mismatch.carbon b/toolchain/check/testdata/var/fail_init_type_mismatch.carbon index 7aeaded5e7b7..1ec374fed46b 100644 --- a/toolchain/check/testdata/var/fail_init_type_mismatch.carbon +++ b/toolchain/check/testdata/var/fail_init_type_mismatch.carbon @@ -28,6 +28,8 @@ var x: {} = (); // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %pattern_type.a96: type = pattern_type %empty_struct_type [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.a96 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.a96 = var_pattern %x.patt [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] @@ -49,8 +51,8 @@ var x: {} = (); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.a96 = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.a96 = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.a96 = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.a96 = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %empty_struct_type = var %x.var_patt [concrete] // CHECK:STDOUT: %.loc22_9.1: type = splice_block %.loc22_9.3 [concrete = constants.%empty_struct_type] { diff --git a/toolchain/check/testdata/var/fail_init_with_self.carbon b/toolchain/check/testdata/var/fail_init_with_self.carbon index 05ef19723d5f..3add5179cd1d 100644 --- a/toolchain/check/testdata/var/fail_init_with_self.carbon +++ b/toolchain/check/testdata/var/fail_init_with_self.carbon @@ -37,6 +37,8 @@ fn Main() { // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.cb1 = var_pattern %x.patt [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] // CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] @@ -63,8 +65,8 @@ fn Main() { // CHECK:STDOUT: fn @Main() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.cb1 = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.cb1 = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %empty_tuple.type = var %x.var_patt // CHECK:STDOUT: %x.ref: = name_ref x, [concrete = ] diff --git a/toolchain/check/testdata/var/fail_storage_is_literal.carbon b/toolchain/check/testdata/var/fail_storage_is_literal.carbon index c69dc74103a3..79a5c35cfb14 100644 --- a/toolchain/check/testdata/var/fail_storage_is_literal.carbon +++ b/toolchain/check/testdata/var/fail_storage_is_literal.carbon @@ -57,8 +57,8 @@ fn Main() { // CHECK:STDOUT: fn @Main() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: = ref_binding_pattern x [concrete = ] +// CHECK:STDOUT: %x.var_patt: = var_pattern %x.patt [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref = var %x.var_patt [concrete = ] // CHECK:STDOUT: %int_1.loc23_21: Core.IntLiteral = int_value 1 [concrete = constants.%int_1] diff --git a/toolchain/check/testdata/var/global_decl.carbon b/toolchain/check/testdata/var/global_decl.carbon index 75ab7b52534b..a0eaae1f8f8e 100644 --- a/toolchain/check/testdata/var/global_decl.carbon +++ b/toolchain/check/testdata/var/global_decl.carbon @@ -21,14 +21,16 @@ var x: {.v: ()} = {.v = ()}; // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %struct_type.v: type = struct_type {.v: %empty_tuple.type} [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %struct_type.v [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete] // CHECK:STDOUT: %struct: %struct_type.v = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %.267: ref %empty_tuple.type = struct_access file.%x.var, element0 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %struct_type.v = var %x.var_patt [concrete] // CHECK:STDOUT: %.loc14_15: type = splice_block %struct_type.v [concrete = constants.%struct_type.v] { diff --git a/toolchain/check/testdata/var/global_decl_import.carbon b/toolchain/check/testdata/var/global_decl_import.carbon index f9d3ff084fb4..a82034eae67f 100644 --- a/toolchain/check/testdata/var/global_decl_import.carbon +++ b/toolchain/check/testdata/var/global_decl_import.carbon @@ -35,15 +35,15 @@ fn G() -> {.v: ()} { // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %struct_type.v: type = struct_type {.v: %empty_tuple.type} [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %struct_type.v [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete] // CHECK:STDOUT: %.267: ref %empty_tuple.type = struct_access imports.%x.var, element0 [concrete] // CHECK:STDOUT: %struct: %struct_type.v = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Main.x: ref %struct_type.v = import_ref Main//decl, x, loaded [concrete = %x.var] -// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete] -// CHECK:STDOUT: %x.var: ref %struct_type.v = var %x.var_patt [concrete] +// CHECK:STDOUT: %x.var: ref %struct_type.v = var constants.%x.var_patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @G() -> out %return.param: %struct_type.v { diff --git a/toolchain/check/testdata/var/global_decl_with_init.carbon b/toolchain/check/testdata/var/global_decl_with_init.carbon index dc1ff9657163..4d41ee40b6ef 100644 --- a/toolchain/check/testdata/var/global_decl_with_init.carbon +++ b/toolchain/check/testdata/var/global_decl_with_init.carbon @@ -37,6 +37,8 @@ var (x: (), y: ()) = ((), ()); // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %struct_type.v: type = struct_type {.v: %empty_tuple.type} [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %struct_type.v [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete] // CHECK:STDOUT: %struct: %struct_type.v = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %.267: ref %empty_tuple.type = struct_access file.%x.var, element0 [concrete] // CHECK:STDOUT: } @@ -46,8 +48,8 @@ var (x: (), y: ()) = ((), ()); // CHECK:STDOUT: .x = %x // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %struct_type.v = var %x.var_patt [concrete] // CHECK:STDOUT: %.loc4_15: type = splice_block %struct_type.v [concrete = constants.%struct_type.v] { @@ -77,8 +79,12 @@ var (x: (), y: ()) = ((), ()); // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = value_binding_pattern x [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.cb1 = ref_binding_pattern y [concrete] +// CHECK:STDOUT: %y.var_patt: %pattern_type.cb1 = var_pattern %y.patt [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (%empty_tuple.type, %empty_tuple.type) [concrete] // CHECK:STDOUT: %pattern_type.5b8: type = pattern_type %tuple.type [concrete] +// CHECK:STDOUT: %.311: %pattern_type.5b8 = tuple_pattern (%x.patt, %y.var_patt) [concrete] // CHECK:STDOUT: %tuple: %tuple.type = tuple_value (%empty_tuple, %empty_tuple) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -88,18 +94,18 @@ var (x: (), y: ()) = ((), ()); // CHECK:STDOUT: .y = %y // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = value_binding_pattern x [concrete] -// CHECK:STDOUT: %y.patt: %pattern_type.cb1 = ref_binding_pattern y [concrete] -// CHECK:STDOUT: %y.var_patt: %pattern_type.cb1 = var_pattern %y.patt [concrete] -// CHECK:STDOUT: %.loc4_22: %pattern_type.5b8 = tuple_pattern (%x.patt, %y.var_patt) [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = value_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %y.patt: %pattern_type.cb1 = ref_binding_pattern y [concrete = constants.%y.patt] +// CHECK:STDOUT: %y.var_patt: %pattern_type.cb1 = var_pattern %y.patt [concrete = constants.%y.var_patt] +// CHECK:STDOUT: %.loc4_22: %pattern_type.5b8 = tuple_pattern (%x.patt, %y.var_patt) [concrete = constants.%.311] // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %empty_tuple.type = var %y.var_patt [concrete] +// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc4_28: %empty_tuple.type = converted @__global_init.%.loc4_28, %empty_tuple [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc4_10.1: type = splice_block %.loc4_10.3 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %.loc4_10.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc4_10.3: type = converted %.loc4_10.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: } -// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc4_28: %empty_tuple.type = converted @__global_init.%.loc4_28, %empty_tuple [concrete = constants.%empty_tuple] // CHECK:STDOUT: %x: %empty_tuple.type = value_binding x, %.loc4_28 // CHECK:STDOUT: %.loc4_21.1: type = splice_block %.loc4_21.3 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %.loc4_21.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] @@ -125,8 +131,12 @@ var (x: (), y: ()) = ((), ()); // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.cb1 = ref_binding_pattern y [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (%empty_tuple.type, %empty_tuple.type) [concrete] // CHECK:STDOUT: %pattern_type.5b8: type = pattern_type %tuple.type [concrete] +// CHECK:STDOUT: %.c88: %pattern_type.5b8 = tuple_pattern (%x.patt, %y.patt) [concrete] +// CHECK:STDOUT: %.var_patt: %pattern_type.5b8 = var_pattern %.c88 [concrete] // CHECK:STDOUT: %tuple: %tuple.type = tuple_value (%empty_tuple, %empty_tuple) [concrete] // CHECK:STDOUT: %tuple.elem0: ref %empty_tuple.type = tuple_access file.%.var, element0 [concrete] // CHECK:STDOUT: %tuple.elem1: ref %empty_tuple.type = tuple_access file.%.var, element1 [concrete] @@ -138,10 +148,10 @@ var (x: (), y: ()) = ((), ()); // CHECK:STDOUT: .y = %y // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %y.patt: %pattern_type.cb1 = ref_binding_pattern y [concrete] -// CHECK:STDOUT: %.loc4_18: %pattern_type.5b8 = tuple_pattern (%x.patt, %y.patt) [concrete] -// CHECK:STDOUT: %.var_patt: %pattern_type.5b8 = var_pattern %.loc4_18 [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %y.patt: %pattern_type.cb1 = ref_binding_pattern y [concrete = constants.%y.patt] +// CHECK:STDOUT: %.loc4_18: %pattern_type.5b8 = tuple_pattern (%x.patt, %y.patt) [concrete = constants.%.c88] +// CHECK:STDOUT: %.var_patt: %pattern_type.5b8 = var_pattern %.loc4_18 [concrete = constants.%.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.var: ref %tuple.type = var %.var_patt [concrete] // CHECK:STDOUT: %tuple.elem0: ref %empty_tuple.type = tuple_access %.var, element0 [concrete = constants.%tuple.elem0] diff --git a/toolchain/check/testdata/var/global_lookup.carbon b/toolchain/check/testdata/var/global_lookup.carbon index 11d5c16a3ca4..4ee365171e8c 100644 --- a/toolchain/check/testdata/var/global_lookup.carbon +++ b/toolchain/check/testdata/var/global_lookup.carbon @@ -22,8 +22,12 @@ var y: {.v: ()} = x; // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %struct_type.v: type = struct_type {.v: %empty_tuple.type} [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %struct_type.v [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete] // CHECK:STDOUT: %struct: %struct_type.v = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %.267: ref %empty_tuple.type = struct_access file.%x.var, element0 [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type = ref_binding_pattern y [concrete] +// CHECK:STDOUT: %y.var_patt: %pattern_type = var_pattern %y.patt [concrete] // CHECK:STDOUT: %.268: ref %empty_tuple.type = struct_access file.%y.var, element0 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -33,8 +37,8 @@ var y: {.v: ()} = x; // CHECK:STDOUT: .y = %y // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %struct_type.v = var %x.var_patt [concrete] // CHECK:STDOUT: %.loc15_15: type = splice_block %struct_type.v.loc15 [concrete = constants.%struct_type.v] { @@ -44,8 +48,8 @@ var y: {.v: ()} = x; // CHECK:STDOUT: } // CHECK:STDOUT: %x: ref %struct_type.v = ref_binding x, %x.var [concrete = %x.var] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %pattern_type = ref_binding_pattern y [concrete] -// CHECK:STDOUT: %y.var_patt: %pattern_type = var_pattern %y.patt [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type = ref_binding_pattern y [concrete = constants.%y.patt] +// CHECK:STDOUT: %y.var_patt: %pattern_type = var_pattern %y.patt [concrete = constants.%y.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %struct_type.v = var %y.var_patt [concrete] // CHECK:STDOUT: %.loc16_15: type = splice_block %struct_type.v.loc16 [concrete = constants.%struct_type.v] { diff --git a/toolchain/check/testdata/var/global_lookup_in_scope.carbon b/toolchain/check/testdata/var/global_lookup_in_scope.carbon index 1ccc46716b96..ec4eb7e725ec 100644 --- a/toolchain/check/testdata/var/global_lookup_in_scope.carbon +++ b/toolchain/check/testdata/var/global_lookup_in_scope.carbon @@ -27,10 +27,14 @@ fn Main() { // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %struct_type.v: type = struct_type {.v: %empty_tuple.type} [concrete] // CHECK:STDOUT: %pattern_type.c4c: type = pattern_type %struct_type.v [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.c4c = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.c4c = var_pattern %x.patt [concrete] // CHECK:STDOUT: %struct: %struct_type.v = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %.267: ref %empty_tuple.type = struct_access file.%x.var, element0 [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.c4c = ref_binding_pattern y [concrete] +// CHECK:STDOUT: %y.var_patt: %pattern_type.c4c = var_pattern %y.patt [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.2: type = fn_type @Destroy.Op.loc5_3.2 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.2: %Destroy.Op.type.1d8f74.2 = struct_value () [concrete] @@ -53,8 +57,8 @@ fn Main() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.c4c = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.c4c = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.c4c = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.c4c = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %struct_type.v = var %x.var_patt [concrete] // CHECK:STDOUT: %.loc2_15: type = splice_block %struct_type.v [concrete = constants.%struct_type.v] { @@ -69,8 +73,8 @@ fn Main() { // CHECK:STDOUT: fn @Main() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %pattern_type.c4c = ref_binding_pattern y [concrete] -// CHECK:STDOUT: %y.var_patt: %pattern_type.c4c = var_pattern %y.patt [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.c4c = ref_binding_pattern y [concrete = constants.%y.patt] +// CHECK:STDOUT: %y.var_patt: %pattern_type.c4c = var_pattern %y.patt [concrete = constants.%y.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %struct_type.v = var %y.var_patt // CHECK:STDOUT: %x.ref: ref %struct_type.v = name_ref x, file.%x [concrete = file.%x.var] diff --git a/toolchain/check/testdata/var/import.carbon b/toolchain/check/testdata/var/import.carbon index 5ce8f5793e22..09d8a67bf349 100644 --- a/toolchain/check/testdata/var/import.carbon +++ b/toolchain/check/testdata/var/import.carbon @@ -30,6 +30,8 @@ var a: () = a_ref; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %a_ref.patt: %pattern_type = ref_binding_pattern a_ref [concrete] +// CHECK:STDOUT: %a_ref.var_patt: %pattern_type = var_pattern %a_ref.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -37,8 +39,8 @@ var a: () = a_ref; // CHECK:STDOUT: .a_ref = %a_ref // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a_ref.patt: %pattern_type = ref_binding_pattern a_ref [concrete] -// CHECK:STDOUT: %a_ref.var_patt: %pattern_type = var_pattern %a_ref.patt [concrete] +// CHECK:STDOUT: %a_ref.patt: %pattern_type = ref_binding_pattern a_ref [concrete = constants.%a_ref.patt] +// CHECK:STDOUT: %a_ref.var_patt: %pattern_type = var_pattern %a_ref.patt [concrete = constants.%a_ref.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a_ref.var: ref %empty_tuple.type = var %a_ref.var_patt [concrete] // CHECK:STDOUT: %.loc4_13.1: type = splice_block %.loc4_13.3 [concrete = constants.%empty_tuple.type] { @@ -63,13 +65,15 @@ var a: () = a_ref; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a_ref.patt: %pattern_type = ref_binding_pattern a_ref [concrete] +// CHECK:STDOUT: %a_ref.var_patt: %pattern_type = var_pattern %a_ref.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Implicit.a_ref: ref %empty_tuple.type = import_ref Implicit//default, a_ref, loaded [concrete = %a_ref.var] -// CHECK:STDOUT: %a_ref.patt: %pattern_type = ref_binding_pattern a_ref [concrete] -// CHECK:STDOUT: %a_ref.var_patt: %pattern_type = var_pattern %a_ref.patt [concrete] -// CHECK:STDOUT: %a_ref.var: ref %empty_tuple.type = var %a_ref.var_patt [concrete] +// CHECK:STDOUT: %a_ref.var: ref %empty_tuple.type = var constants.%a_ref.var_patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -80,8 +84,8 @@ var a: () = a_ref; // CHECK:STDOUT: %Implicit.import = import Implicit // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.var_patt: %pattern_type = var_pattern %a.patt [concrete = constants.%a.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %empty_tuple.type = var %a.var_patt [concrete] // CHECK:STDOUT: %.loc4_9.1: type = splice_block %.loc4_9.3 [concrete = constants.%empty_tuple.type] { diff --git a/toolchain/check/testdata/var/import_access.carbon b/toolchain/check/testdata/var/import_access.carbon index 89314d235faf..2ae6b4d5a018 100644 --- a/toolchain/check/testdata/var/import_access.carbon +++ b/toolchain/check/testdata/var/import_access.carbon @@ -62,6 +62,8 @@ var v2: () = Test.v; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type = ref_binding_pattern v [concrete] +// CHECK:STDOUT: %v.var_patt: %pattern_type = var_pattern %v.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -69,8 +71,8 @@ var v2: () = Test.v; // CHECK:STDOUT: .v [private] = %v // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %pattern_type = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: %pattern_type = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type = ref_binding_pattern v [concrete = constants.%v.patt] +// CHECK:STDOUT: %v.var_patt: %pattern_type = var_pattern %v.patt [concrete = constants.%v.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %empty_tuple.type = var %v.var_patt [concrete] // CHECK:STDOUT: %.loc4_17.1: type = splice_block %.loc4_17.3 [concrete = constants.%empty_tuple.type] { @@ -95,13 +97,15 @@ var v2: () = Test.v; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %v2.patt: %pattern_type = ref_binding_pattern v2 [concrete] +// CHECK:STDOUT: %v2.var_patt: %pattern_type = var_pattern %v2.patt [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type = ref_binding_pattern v [concrete] +// CHECK:STDOUT: %v.var_patt: %pattern_type = var_pattern %v.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Test.v: ref %empty_tuple.type = import_ref Test//def, v, loaded [concrete = %v.var] -// CHECK:STDOUT: %v.patt: %pattern_type = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: %pattern_type = var_pattern %v.patt [concrete] -// CHECK:STDOUT: %v.var: ref %empty_tuple.type = var %v.var_patt [concrete] +// CHECK:STDOUT: %v.var: ref %empty_tuple.type = var constants.%v.var_patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -112,8 +116,8 @@ var v2: () = Test.v; // CHECK:STDOUT: %Test.import = import Test // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v2.patt: %pattern_type = ref_binding_pattern v2 [concrete] -// CHECK:STDOUT: %v2.var_patt: %pattern_type = var_pattern %v2.patt [concrete] +// CHECK:STDOUT: %v2.patt: %pattern_type = ref_binding_pattern v2 [concrete = constants.%v2.patt] +// CHECK:STDOUT: %v2.var_patt: %pattern_type = var_pattern %v2.patt [concrete = constants.%v2.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %v2.var: ref %empty_tuple.type = var %v2.var_patt [concrete] // CHECK:STDOUT: %.loc4_10.1: type = splice_block %.loc4_10.3 [concrete = constants.%empty_tuple.type] { @@ -138,6 +142,8 @@ var v2: () = Test.v; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %v2.patt: %pattern_type = ref_binding_pattern v2 [concrete] +// CHECK:STDOUT: %v2.var_patt: %pattern_type = var_pattern %v2.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -147,8 +153,8 @@ var v2: () = Test.v; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v2.patt: %pattern_type = ref_binding_pattern v2 [concrete] -// CHECK:STDOUT: %v2.var_patt: %pattern_type = var_pattern %v2.patt [concrete] +// CHECK:STDOUT: %v2.patt: %pattern_type = ref_binding_pattern v2 [concrete = constants.%v2.patt] +// CHECK:STDOUT: %v2.var_patt: %pattern_type = var_pattern %v2.patt [concrete = constants.%v2.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %v2.var: ref %empty_tuple.type = var %v2.var_patt [concrete] // CHECK:STDOUT: %.loc10_10.1: type = splice_block %.loc10_10.3 [concrete = constants.%empty_tuple.type] { @@ -171,6 +177,8 @@ var v2: () = Test.v; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %v2.patt: %pattern_type = ref_binding_pattern v2 [concrete] +// CHECK:STDOUT: %v2.var_patt: %pattern_type = var_pattern %v2.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -187,8 +195,8 @@ var v2: () = Test.v; // CHECK:STDOUT: } // CHECK:STDOUT: %Test.import = import Test // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v2.patt: %pattern_type = ref_binding_pattern v2 [concrete] -// CHECK:STDOUT: %v2.var_patt: %pattern_type = var_pattern %v2.patt [concrete] +// CHECK:STDOUT: %v2.patt: %pattern_type = ref_binding_pattern v2 [concrete = constants.%v2.patt] +// CHECK:STDOUT: %v2.var_patt: %pattern_type = var_pattern %v2.patt [concrete = constants.%v2.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %v2.var: ref %empty_tuple.type = var %v2.var_patt [concrete] // CHECK:STDOUT: %.loc10_10.1: type = splice_block %.loc10_10.3 [concrete = constants.%empty_tuple.type] { diff --git a/toolchain/check/testdata/var/initialization.carbon b/toolchain/check/testdata/var/initialization.carbon index 8b559b68aba2..863a7cc954ff 100644 --- a/toolchain/check/testdata/var/initialization.carbon +++ b/toolchain/check/testdata/var/initialization.carbon @@ -72,6 +72,8 @@ fn Main() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.cb1 = var_pattern %x.patt [concrete] // CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] // CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -79,8 +81,8 @@ fn Main() { // CHECK:STDOUT: fn @Main() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.cb1 = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.cb1 = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %empty_tuple.type = var %x.var_patt // CHECK:STDOUT: %.loc8_23.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] @@ -105,6 +107,8 @@ fn Main() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.cb1 = var_pattern %x.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %DefaultOrUnformed.impl_witness: = impl_witness imports.%DefaultOrUnformed.impl_witness_table [concrete] // CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %empty_tuple.type, (%DefaultOrUnformed.impl_witness) [concrete] @@ -122,8 +126,8 @@ fn Main() { // CHECK:STDOUT: fn @Main() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.cb1 = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.cb1 = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %empty_tuple.type = var %x.var_patt // CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%empty_tuple.type, (constants.%DefaultOrUnformed.impl_witness) [concrete = constants.%DefaultOrUnformed.facet] diff --git a/toolchain/check/testdata/var/lookup.carbon b/toolchain/check/testdata/var/lookup.carbon index 5e5368ef11ea..047eceee84d8 100644 --- a/toolchain/check/testdata/var/lookup.carbon +++ b/toolchain/check/testdata/var/lookup.carbon @@ -25,6 +25,8 @@ fn Main() { // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.cb1 = var_pattern %x.patt [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] // CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] @@ -51,8 +53,8 @@ fn Main() { // CHECK:STDOUT: fn @Main() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.cb1 = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.cb1 = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %empty_tuple.type = var %x.var_patt // CHECK:STDOUT: %.loc16_16.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] diff --git a/toolchain/check/testdata/var/shadowing.carbon b/toolchain/check/testdata/var/shadowing.carbon index 47238ff1a520..26c289ffe5a5 100644 --- a/toolchain/check/testdata/var/shadowing.carbon +++ b/toolchain/check/testdata/var/shadowing.carbon @@ -37,7 +37,13 @@ fn Main() { // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %NS.patt: %pattern_type.cb1 = ref_binding_pattern NS [concrete] +// CHECK:STDOUT: %NS.var_patt: %pattern_type.cb1 = var_pattern %NS.patt [concrete] +// CHECK:STDOUT: %x.patt.06838d.1: %pattern_type.cb1 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt.28d573.1: %pattern_type.cb1 = var_pattern %x.patt.06838d.1 [concrete] // CHECK:STDOUT: %true: bool = bool_literal true [concrete] +// CHECK:STDOUT: %x.patt.06838d.2: %pattern_type.cb1 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt.28d573.2: %pattern_type.cb1 = var_pattern %x.patt.06838d.2 [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] // CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] @@ -66,8 +72,8 @@ fn Main() { // CHECK:STDOUT: fn @Main() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %NS.patt: %pattern_type.cb1 = ref_binding_pattern NS [concrete] -// CHECK:STDOUT: %NS.var_patt: %pattern_type.cb1 = var_pattern %NS.patt [concrete] +// CHECK:STDOUT: %NS.patt: %pattern_type.cb1 = ref_binding_pattern NS [concrete = constants.%NS.patt] +// CHECK:STDOUT: %NS.var_patt: %pattern_type.cb1 = var_pattern %NS.patt [concrete = constants.%NS.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %NS.var: ref %empty_tuple.type = var %NS.var_patt // CHECK:STDOUT: %.loc5_17.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] @@ -85,8 +91,8 @@ fn Main() { // CHECK:STDOUT: %.loc6_6: init %empty_tuple.type = converted %.loc6_9.1, %.loc6_9.2 [concrete = constants.%empty_tuple] // CHECK:STDOUT: assign %NS.ref, %.loc6_6 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt.loc8: %pattern_type.cb1 = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt.loc8: %pattern_type.cb1 = var_pattern %x.patt.loc8 [concrete] +// CHECK:STDOUT: %x.patt.loc8: %pattern_type.cb1 = ref_binding_pattern x [concrete = constants.%x.patt.06838d.1] +// CHECK:STDOUT: %x.var_patt.loc8: %pattern_type.cb1 = var_pattern %x.patt.loc8 [concrete = constants.%x.var_patt.28d573.1] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var.loc8: ref %empty_tuple.type = var %x.var_patt.loc8 // CHECK:STDOUT: %.loc8_23.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] @@ -103,8 +109,8 @@ fn Main() { // CHECK:STDOUT: // CHECK:STDOUT: !if.then: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt.loc10: %pattern_type.cb1 = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt.loc10: %pattern_type.cb1 = var_pattern %x.patt.loc10 [concrete] +// CHECK:STDOUT: %x.patt.loc10: %pattern_type.cb1 = ref_binding_pattern x [concrete = constants.%x.patt.06838d.2] +// CHECK:STDOUT: %x.var_patt.loc10: %pattern_type.cb1 = var_pattern %x.patt.loc10 [concrete = constants.%x.var_patt.28d573.2] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var.loc10: ref %empty_tuple.type = var %x.var_patt.loc10 // CHECK:STDOUT: %.loc10_18.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] diff --git a/toolchain/check/testdata/var/var_pattern.carbon b/toolchain/check/testdata/var/var_pattern.carbon index b3e217792d47..b7c4f3efb39a 100644 --- a/toolchain/check/testdata/var/var_pattern.carbon +++ b/toolchain/check/testdata/var/var_pattern.carbon @@ -185,6 +185,8 @@ fn Call() { // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.cb1 = var_pattern %x.patt [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] // CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] @@ -211,8 +213,8 @@ fn Call() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.cb1 = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.cb1 = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %empty_tuple.type = var %x.var_patt // CHECK:STDOUT: %.loc5_27.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] @@ -239,8 +241,12 @@ fn Call() { // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = value_binding_pattern x [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.cb1 = ref_binding_pattern y [concrete] +// CHECK:STDOUT: %y.var_patt: %pattern_type.cb1 = var_pattern %y.patt [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (%empty_tuple.type, %empty_tuple.type) [concrete] // CHECK:STDOUT: %pattern_type.5b8: type = pattern_type %tuple.type [concrete] +// CHECK:STDOUT: %.5ae: %pattern_type.5b8 = tuple_pattern (%x.patt, %y.var_patt) [concrete] // CHECK:STDOUT: %tuple: %tuple.type = tuple_value (%empty_tuple, %empty_tuple) [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] @@ -268,21 +274,21 @@ fn Call() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = value_binding_pattern x [concrete] -// CHECK:STDOUT: %y.patt: %pattern_type.cb1 = ref_binding_pattern y [concrete] -// CHECK:STDOUT: %y.var_patt: %pattern_type.cb1 = var_pattern %y.patt [concrete] -// CHECK:STDOUT: %.loc5_38: %pattern_type.5b8 = tuple_pattern (%x.patt, %y.var_patt) [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = value_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %y.patt: %pattern_type.cb1 = ref_binding_pattern y [concrete = constants.%y.patt] +// CHECK:STDOUT: %y.var_patt: %pattern_type.cb1 = var_pattern %y.patt [concrete = constants.%y.var_patt] +// CHECK:STDOUT: %.loc5_38: %pattern_type.5b8 = tuple_pattern (%x.patt, %y.var_patt) [concrete = constants.%.5ae] // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %empty_tuple.type = var %y.var_patt // CHECK:STDOUT: %.loc5_44.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc5_48.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc5_49: %tuple.type = tuple_literal (%.loc5_44.1, %.loc5_48.1) [concrete = constants.%tuple] +// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc5_44.2: %empty_tuple.type = converted %.loc5_44.1, %empty_tuple [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc5_19.1: type = splice_block %.loc5_19.3 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %.loc5_19.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc5_19.3: type = converted %.loc5_19.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: } -// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc5_44.2: %empty_tuple.type = converted %.loc5_44.1, %empty_tuple [concrete = constants.%empty_tuple] // CHECK:STDOUT: %x: %empty_tuple.type = value_binding x, %.loc5_44.2 // CHECK:STDOUT: %.loc5_48.2: init %empty_tuple.type = tuple_init () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc5_22: init %empty_tuple.type = converted %.loc5_48.1, %.loc5_48.2 [concrete = constants.%empty_tuple] @@ -307,8 +313,12 @@ fn Call() { // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.cb1 = ref_binding_pattern y [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (%empty_tuple.type, %empty_tuple.type) [concrete] // CHECK:STDOUT: %pattern_type.5b8: type = pattern_type %tuple.type [concrete] +// CHECK:STDOUT: %.8b4: %pattern_type.5b8 = tuple_pattern (%x.patt, %y.patt) [concrete] +// CHECK:STDOUT: %.var_patt: %pattern_type.5b8 = var_pattern %.8b4 [concrete] // CHECK:STDOUT: %tuple: %tuple.type = tuple_value (%empty_tuple, %empty_tuple) [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.2: type = fn_type @Destroy.Op.loc5_3.2 [concrete] @@ -336,10 +346,10 @@ fn Call() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %y.patt: %pattern_type.cb1 = ref_binding_pattern y [concrete] -// CHECK:STDOUT: %.loc5_34: %pattern_type.5b8 = tuple_pattern (%x.patt, %y.patt) [concrete] -// CHECK:STDOUT: %.var_patt: %pattern_type.5b8 = var_pattern %.loc5_34 [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %y.patt: %pattern_type.cb1 = ref_binding_pattern y [concrete = constants.%y.patt] +// CHECK:STDOUT: %.loc5_34: %pattern_type.5b8 = tuple_pattern (%x.patt, %y.patt) [concrete = constants.%.8b4] +// CHECK:STDOUT: %.var_patt: %pattern_type.5b8 = var_pattern %.loc5_34 [concrete = constants.%.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.var: ref %tuple.type = var %.var_patt // CHECK:STDOUT: %.loc5_40.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] @@ -388,8 +398,12 @@ fn Call() { // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.cb1 = ref_binding_pattern y [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (%empty_tuple.type, %empty_tuple.type) [concrete] // CHECK:STDOUT: %pattern_type.5b8: type = pattern_type %tuple.type [concrete] +// CHECK:STDOUT: %.8b4: %pattern_type.5b8 = tuple_pattern (%x.patt, %y.patt) [concrete] +// CHECK:STDOUT: %.var_patt: %pattern_type.5b8 = var_pattern %.8b4 [concrete] // CHECK:STDOUT: %tuple: %tuple.type = tuple_value (%empty_tuple, %empty_tuple) [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.2: type = fn_type @Destroy.Op.loc5_7.2 [concrete] @@ -417,10 +431,10 @@ fn Call() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %y.patt: %pattern_type.cb1 = ref_binding_pattern y [concrete] -// CHECK:STDOUT: %.loc5_38: %pattern_type.5b8 = tuple_pattern (%x.patt, %y.patt) [concrete] -// CHECK:STDOUT: %.var_patt: %pattern_type.5b8 = var_pattern %.loc5_38 [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %y.patt: %pattern_type.cb1 = ref_binding_pattern y [concrete = constants.%y.patt] +// CHECK:STDOUT: %.loc5_38: %pattern_type.5b8 = tuple_pattern (%x.patt, %y.patt) [concrete = constants.%.8b4] +// CHECK:STDOUT: %.var_patt: %pattern_type.5b8 = var_pattern %.loc5_38 [concrete = constants.%.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.var: ref %tuple.type = var %.var_patt // CHECK:STDOUT: %.loc5_44.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] @@ -467,10 +481,16 @@ fn Call() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.cb1 = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.cb1 = ref_binding_pattern y [concrete] +// CHECK:STDOUT: %y.param_patt: %pattern_type.cb1 = var_param_pattern %y.patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.cb1 = ref_binding_pattern v [concrete] +// CHECK:STDOUT: %v.var_patt: %pattern_type.cb1 = var_pattern %v.patt [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] // CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] @@ -493,10 +513,10 @@ fn Call() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %x.param_patt: %pattern_type.cb1 = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %y.patt: %pattern_type.cb1 = ref_binding_pattern y [concrete] -// CHECK:STDOUT: %y.param_patt: %pattern_type.cb1 = var_param_pattern %y.patt [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type.cb1 = value_param_pattern [concrete = constants.%x.param_patt] +// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt] +// CHECK:STDOUT: %y.patt: %pattern_type.cb1 = ref_binding_pattern y [concrete = constants.%y.patt] +// CHECK:STDOUT: %y.param_patt: %pattern_type.cb1 = var_param_pattern %y.patt [concrete = constants.%y.param_patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %empty_tuple.type = value_param call_param0 // CHECK:STDOUT: %.loc4_10.1: type = splice_block %.loc4_10.3 [concrete = constants.%empty_tuple.type] { @@ -519,8 +539,8 @@ fn Call() { // CHECK:STDOUT: fn @G() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %pattern_type.cb1 = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: %pattern_type.cb1 = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.cb1 = ref_binding_pattern v [concrete = constants.%v.patt] +// CHECK:STDOUT: %v.var_patt: %pattern_type.cb1 = var_pattern %v.patt [concrete = constants.%v.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %empty_tuple.type = var %v.var_patt // CHECK:STDOUT: %.loc7_16.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] @@ -557,6 +577,10 @@ fn Call() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type = ref_binding_pattern y [concrete] +// CHECK:STDOUT: %y.param_patt: %pattern_type = var_param_pattern %y.patt [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -575,10 +599,10 @@ fn Call() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %x.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %y.patt: %pattern_type = ref_binding_pattern y [concrete] -// CHECK:STDOUT: %y.param_patt: %pattern_type = var_param_pattern %y.patt [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type = value_param_pattern [concrete = constants.%x.param_patt] +// CHECK:STDOUT: %x.patt: %pattern_type = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt] +// CHECK:STDOUT: %y.patt: %pattern_type = ref_binding_pattern y [concrete = constants.%y.patt] +// CHECK:STDOUT: %y.param_patt: %pattern_type = var_param_pattern %y.patt [concrete = constants.%y.param_patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %empty_tuple.type = value_param call_param0 // CHECK:STDOUT: %.loc4_10.1: type = splice_block %.loc4_10.3 [concrete = constants.%empty_tuple.type] { @@ -603,6 +627,10 @@ fn Call() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %x.patt.7ba44d.1: %pattern_type = at_binding_pattern x, %x.param_patt [concrete] +// CHECK:STDOUT: %y.patt.d25273.1: %pattern_type = ref_binding_pattern y [concrete] +// CHECK:STDOUT: %y.param_patt.ce1148.1: %pattern_type = var_param_pattern %y.patt.d25273.1 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -623,10 +651,10 @@ fn Call() { // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %x.param_patt: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type = at_binding_pattern x, %x.param_patt [concrete] -// CHECK:STDOUT: %y.patt: %pattern_type = ref_binding_pattern y [concrete] -// CHECK:STDOUT: %y.param_patt: %pattern_type = var_param_pattern %y.patt [concrete] +// CHECK:STDOUT: %x.param_patt: %pattern_type = value_param_pattern [concrete = constants.%x.param_patt] +// CHECK:STDOUT: %x.patt: %pattern_type = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt.7ba44d.1] +// CHECK:STDOUT: %y.patt: %pattern_type = ref_binding_pattern y [concrete = constants.%y.patt.d25273.1] +// CHECK:STDOUT: %y.param_patt: %pattern_type = var_param_pattern %y.patt [concrete = constants.%y.param_patt.ce1148.1] // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %empty_tuple.type = value_param call_param0 // CHECK:STDOUT: %.loc4_17.1: type = splice_block %.loc4_17.3 [concrete = constants.%empty_tuple.type] { @@ -657,6 +685,8 @@ fn Call() { // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.cb1 = ref_binding_pattern y [concrete] +// CHECK:STDOUT: %y.param_patt: %pattern_type.cb1 = var_param_pattern %y.patt [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Self: %Destroy.type = symbolic_binding Self, 0 [symbolic] @@ -683,8 +713,6 @@ fn Call() { // CHECK:STDOUT: import P//default // CHECK:STDOUT: } // CHECK:STDOUT: %P.F: %F.type = import_ref P//default, F, loaded [concrete = constants.%F] -// CHECK:STDOUT: %y.patt: %pattern_type.cb1 = ref_binding_pattern y [concrete] -// CHECK:STDOUT: %y.param_patt: %pattern_type.cb1 = var_param_pattern %y.patt [concrete] // CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.import_ref.c64: %Destroy.assoc_type = import_ref Core//prelude/parts/destroy, loc{{\d+_\d+}}, loaded [concrete = constants.%assoc0] // CHECK:STDOUT: %Core.import_ref.918: @Destroy.WithSelf.%Destroy.WithSelf.Op.type (%Destroy.WithSelf.Op.type.d3e) = import_ref Core//prelude/parts/destroy, loc{{\d+_\d+}}, loaded [symbolic = @Destroy.WithSelf.%Destroy.WithSelf.Op (constants.%Destroy.WithSelf.Op.42b)] @@ -709,7 +737,7 @@ fn Call() { // CHECK:STDOUT: %.loc7_12.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc7_8.2: %empty_tuple.type = converted %.loc7_8.1, %empty_tuple [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %y.var: ref %empty_tuple.type = var imports.%y.param_patt +// CHECK:STDOUT: %y.var: ref %empty_tuple.type = var constants.%y.param_patt // CHECK:STDOUT: %.loc7_12.2: init %empty_tuple.type = tuple_init () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.1: init %empty_tuple.type = converted %.loc7_12.1, %.loc7_12.2 [concrete = constants.%empty_tuple] // CHECK:STDOUT: assign %y.var, %.1 @@ -733,10 +761,17 @@ fn Call() { // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = value_binding_pattern x [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.cb1 = ref_binding_pattern y [concrete] +// CHECK:STDOUT: %z.patt: %pattern_type.cb1 = ref_binding_pattern z [concrete] +// CHECK:STDOUT: %z.var_patt: %pattern_type.cb1 = var_pattern %z.patt [concrete] // CHECK:STDOUT: %tuple.type.bcd: type = tuple_type (%empty_tuple.type, %empty_tuple.type) [concrete] // CHECK:STDOUT: %pattern_type.5b8: type = pattern_type %tuple.type.bcd [concrete] +// CHECK:STDOUT: %.e9e: %pattern_type.5b8 = tuple_pattern (%y.patt, %z.var_patt) [concrete] +// CHECK:STDOUT: %.var_patt: %pattern_type.5b8 = var_pattern %.e9e [concrete] // CHECK:STDOUT: %tuple.type.a21: type = tuple_type (%empty_tuple.type, %tuple.type.bcd) [concrete] // CHECK:STDOUT: %pattern_type.c6c: type = pattern_type %tuple.type.a21 [concrete] +// CHECK:STDOUT: %.441: %pattern_type.c6c = tuple_pattern (%x.patt, %.var_patt) [concrete] // CHECK:STDOUT: %tuple.d8f: %tuple.type.bcd = tuple_value (%empty_tuple, %empty_tuple) [concrete] // CHECK:STDOUT: %tuple.c9e: %tuple.type.a21 = tuple_value (%empty_tuple, %tuple.d8f) [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] @@ -767,13 +802,13 @@ fn Call() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = value_binding_pattern x [concrete] -// CHECK:STDOUT: %y.patt: %pattern_type.cb1 = ref_binding_pattern y [concrete] -// CHECK:STDOUT: %z.patt: %pattern_type.cb1 = ref_binding_pattern z [concrete] -// CHECK:STDOUT: %z.var_patt: %pattern_type.cb1 = var_pattern %z.patt [concrete] -// CHECK:STDOUT: %.loc9_57: %pattern_type.5b8 = tuple_pattern (%y.patt, %z.var_patt) [concrete] -// CHECK:STDOUT: %.var_patt: %pattern_type.5b8 = var_pattern %.loc9_57 [concrete] -// CHECK:STDOUT: %.loc9_58: %pattern_type.c6c = tuple_pattern (%x.patt, %.var_patt) [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = value_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %y.patt: %pattern_type.cb1 = ref_binding_pattern y [concrete = constants.%y.patt] +// CHECK:STDOUT: %z.patt: %pattern_type.cb1 = ref_binding_pattern z [concrete = constants.%z.patt] +// CHECK:STDOUT: %z.var_patt: %pattern_type.cb1 = var_pattern %z.patt [concrete = constants.%z.var_patt] +// CHECK:STDOUT: %.loc9_57: %pattern_type.5b8 = tuple_pattern (%y.patt, %z.var_patt) [concrete = constants.%.e9e] +// CHECK:STDOUT: %.var_patt: %pattern_type.5b8 = var_pattern %.loc9_57 [concrete = constants.%.var_patt] +// CHECK:STDOUT: %.loc9_58: %pattern_type.c6c = tuple_pattern (%x.patt, %.var_patt) [concrete = constants.%.441] // CHECK:STDOUT: } // CHECK:STDOUT: %z.var: ref %empty_tuple.type = var %z.var_patt // CHECK:STDOUT: %.var: ref %tuple.type.bcd = var %.var_patt @@ -782,12 +817,12 @@ fn Call() { // CHECK:STDOUT: %.loc9_73.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc9_74.1: %tuple.type.bcd = tuple_literal (%.loc9_69.1, %.loc9_73.1) [concrete = constants.%tuple.d8f] // CHECK:STDOUT: %.loc9_75: %tuple.type.a21 = tuple_literal (%.loc9_64.1, %.loc9_74.1) [concrete = constants.%tuple.c9e] +// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc9_64.2: %empty_tuple.type = converted %.loc9_64.1, %empty_tuple [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc9_19.1: type = splice_block %.loc9_19.3 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %.loc9_19.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc9_19.3: type = converted %.loc9_19.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: } -// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc9_64.2: %empty_tuple.type = converted %.loc9_64.1, %empty_tuple [concrete = constants.%empty_tuple] // CHECK:STDOUT: %x: %empty_tuple.type = value_binding x, %.loc9_64.2 // CHECK:STDOUT: %tuple.elem0.loc9_74: ref %empty_tuple.type = tuple_access %.var, element0 // CHECK:STDOUT: %.loc9_69.2: init %empty_tuple.type to %tuple.elem0.loc9_74 = tuple_init () [concrete = constants.%empty_tuple] @@ -842,6 +877,9 @@ fn Call() { // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %self.param_patt.303: %pattern_type = value_param_pattern [concrete] +// CHECK:STDOUT: %self.patt: %pattern_type = at_binding_pattern self, %self.param_patt.303 [concrete] +// CHECK:STDOUT: %self.param_patt.b69: %pattern_type = var_param_pattern %self.patt [concrete] // CHECK:STDOUT: %C.F.type: type = fn_type @C.F [concrete] // CHECK:STDOUT: %C.F: %C.F.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] @@ -866,9 +904,9 @@ fn Call() { // CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: %C.F.decl: %C.F.type = fn_decl @C.F [concrete = constants.%C.F] { -// CHECK:STDOUT: %self.param_patt.loc5_12: %pattern_type = value_param_pattern [concrete] -// CHECK:STDOUT: %self.patt: %pattern_type = at_binding_pattern self, %self.param_patt.loc5_12 [concrete] -// CHECK:STDOUT: %self.param_patt.loc5_8: %pattern_type = var_param_pattern %self.patt [concrete] +// CHECK:STDOUT: %self.param_patt.loc5_12: %pattern_type = value_param_pattern [concrete = constants.%self.param_patt.303] +// CHECK:STDOUT: %self.patt: %pattern_type = at_binding_pattern self, %self.param_patt.loc5_12 [concrete = constants.%self.patt] +// CHECK:STDOUT: %self.param_patt.loc5_8: %pattern_type = var_param_pattern %self.patt [concrete = constants.%self.param_patt.b69] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param.loc5_8: ref %C = ref_param call_param0 // CHECK:STDOUT: %self.param.loc5_12: %C = value_param call_param1 @@ -892,12 +930,19 @@ fn Call() { // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %.262: Core.Form = init_form %empty_tuple.type [concrete] // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern %return.param_patt, %empty_tuple.type [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = value_binding_pattern x [concrete] +// CHECK:STDOUT: %y.patt: %pattern_type.cb1 = ref_binding_pattern y [concrete] +// CHECK:STDOUT: %y.var_patt: %pattern_type.cb1 = var_pattern %y.patt [concrete] +// CHECK:STDOUT: %z.patt: %pattern_type.cb1 = value_binding_pattern z [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (%empty_tuple.type, %empty_tuple.type, %empty_tuple.type) [concrete] // CHECK:STDOUT: %pattern_type.8c1: type = pattern_type %tuple.type [concrete] +// CHECK:STDOUT: %.b14: %pattern_type.8c1 = tuple_pattern (%x.patt, %y.var_patt, %z.patt) [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] // CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] @@ -920,8 +965,8 @@ fn Call() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern %return.param_patt, %.loc4_12.2 [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern [concrete = constants.%return.param_patt] +// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern %return.param_patt, %.loc4_12.2 [concrete = constants.%return.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_12.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc4_12.2: type = converted %.loc4_12.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -937,11 +982,11 @@ fn Call() { // CHECK:STDOUT: fn @G() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = value_binding_pattern x [concrete] -// CHECK:STDOUT: %y.patt: %pattern_type.cb1 = ref_binding_pattern y [concrete] -// CHECK:STDOUT: %y.var_patt: %pattern_type.cb1 = var_pattern %y.patt [concrete] -// CHECK:STDOUT: %z.patt: %pattern_type.cb1 = value_binding_pattern z [concrete] -// CHECK:STDOUT: %.loc8_52: %pattern_type.8c1 = tuple_pattern (%x.patt, %y.var_patt, %z.patt) [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = value_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %y.patt: %pattern_type.cb1 = ref_binding_pattern y [concrete = constants.%y.patt] +// CHECK:STDOUT: %y.var_patt: %pattern_type.cb1 = var_pattern %y.patt [concrete = constants.%y.var_patt] +// CHECK:STDOUT: %z.patt: %pattern_type.cb1 = value_binding_pattern z [concrete = constants.%z.patt] +// CHECK:STDOUT: %.loc8_52: %pattern_type.8c1 = tuple_pattern (%x.patt, %y.var_patt, %z.patt) [concrete = constants.%.b14] // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %empty_tuple.type = var %y.var_patt // CHECK:STDOUT: %F.ref.loc8_57: %F.type = name_ref F, file.%F.decl [concrete = constants.%F] @@ -951,14 +996,14 @@ fn Call() { // CHECK:STDOUT: %F.ref.loc8_67: %F.type = name_ref F, file.%F.decl [concrete = constants.%F] // CHECK:STDOUT: %F.call.loc8_69: init %empty_tuple.type = call %F.ref.loc8_67() // CHECK:STDOUT: %.loc8_70: %tuple.type = tuple_literal (%F.call.loc8_59, %F.call.loc8_64, %F.call.loc8_69) -// CHECK:STDOUT: %.loc8_19.1: type = splice_block %.loc8_19.3 [concrete = constants.%empty_tuple.type] { -// CHECK:STDOUT: %.loc8_19.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc8_19.3: type = converted %.loc8_19.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] -// CHECK:STDOUT: } // CHECK:STDOUT: %.loc8_59.1: ref %empty_tuple.type = temporary_storage // CHECK:STDOUT: %.loc8_59.2: ref %empty_tuple.type = temporary %.loc8_59.1, %F.call.loc8_59 // CHECK:STDOUT: %tuple.loc8_59: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc8_59.3: %empty_tuple.type = converted %F.call.loc8_59, %tuple.loc8_59 [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc8_19.1: type = splice_block %.loc8_19.3 [concrete = constants.%empty_tuple.type] { +// CHECK:STDOUT: %.loc8_19.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc8_19.3: type = converted %.loc8_19.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] +// CHECK:STDOUT: } // CHECK:STDOUT: %x: %empty_tuple.type = value_binding x, %.loc8_59.3 // CHECK:STDOUT: assign %y.var, %F.call.loc8_64 // CHECK:STDOUT: %.loc8_37.1: type = splice_block %.loc8_37.3 [concrete = constants.%empty_tuple.type] { @@ -966,14 +1011,14 @@ fn Call() { // CHECK:STDOUT: %.loc8_37.3: type = converted %.loc8_37.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: } // CHECK:STDOUT: %y: ref %empty_tuple.type = ref_binding y, %y.var -// CHECK:STDOUT: %.loc8_51.1: type = splice_block %.loc8_51.3 [concrete = constants.%empty_tuple.type] { -// CHECK:STDOUT: %.loc8_51.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc8_51.3: type = converted %.loc8_51.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] -// CHECK:STDOUT: } // CHECK:STDOUT: %.loc8_69.1: ref %empty_tuple.type = temporary_storage // CHECK:STDOUT: %.loc8_69.2: ref %empty_tuple.type = temporary %.loc8_69.1, %F.call.loc8_69 // CHECK:STDOUT: %tuple.loc8_69: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc8_69.3: %empty_tuple.type = converted %F.call.loc8_69, %tuple.loc8_69 [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc8_51.1: type = splice_block %.loc8_51.3 [concrete = constants.%empty_tuple.type] { +// CHECK:STDOUT: %.loc8_51.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc8_51.3: type = converted %.loc8_51.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] +// CHECK:STDOUT: } // CHECK:STDOUT: %z: %empty_tuple.type = value_binding z, %.loc8_69.3 // CHECK:STDOUT: %Destroy.Op.bound.loc8_69: = bound_method %.loc8_69.2, constants.%Destroy.Op // CHECK:STDOUT: %Destroy.Op.call.loc8_69: init %empty_tuple.type = call %Destroy.Op.bound.loc8_69(%.loc8_69.2) @@ -992,6 +1037,8 @@ fn Call() { // CHECK:STDOUT: %X: type = class_type @X [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %pattern_type.6cb: type = pattern_type %X [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6cb = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6cb = var_param_pattern %a.patt [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %TakeVar.type: type = fn_type @TakeVar [concrete] // CHECK:STDOUT: %TakeVar: %TakeVar.type = struct_value () [concrete] @@ -1003,8 +1050,8 @@ fn Call() { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %TakeVar.decl: %TakeVar.type = fn_decl @TakeVar [concrete = constants.%TakeVar] { -// CHECK:STDOUT: %a.patt: %pattern_type.6cb = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.param_patt: %pattern_type.6cb = var_param_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.6cb = ref_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.param_patt: %pattern_type.6cb = var_param_pattern %a.patt [concrete = constants.%a.param_patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: ref %X = ref_param call_param0 // CHECK:STDOUT: %X.ref: type = name_ref X, file.%X.decl [concrete = constants.%X] @@ -1041,6 +1088,8 @@ fn Call() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = ref_binding_pattern n [concrete] +// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = var_param_pattern %n.patt [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %TakeVar.type: type = fn_type @TakeVar [concrete] // CHECK:STDOUT: %TakeVar: %TakeVar.type = struct_value () [concrete] @@ -1070,8 +1119,8 @@ fn Call() { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %TakeVar.decl: %TakeVar.type = fn_decl @TakeVar [concrete = constants.%TakeVar] { -// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = ref_binding_pattern n [concrete] -// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = var_param_pattern %n.patt [concrete] +// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = ref_binding_pattern n [concrete = constants.%n.patt] +// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = var_param_pattern %n.patt [concrete = constants.%n.param_patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %n.param: ref %i32 = ref_param call_param0 // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] diff --git a/toolchain/check/testdata/where_expr/constraints.carbon b/toolchain/check/testdata/where_expr/constraints.carbon index 424cdae509a5..4bc7996a26fe 100644 --- a/toolchain/check/testdata/where_expr/constraints.carbon +++ b/toolchain/check/testdata/where_expr/constraints.carbon @@ -193,6 +193,7 @@ fn F() { // CHECK:STDOUT: %.Self.9e9: %I.type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self.9e9 [symbolic_self] // CHECK:STDOUT: %pattern_type: type = pattern_type %I.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: %I.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] @@ -202,7 +203,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc7_7.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_7.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc7_12.1: type = splice_block %.loc7_12.2 [concrete = constants.%I.type] { // CHECK:STDOUT: %.Self.loc7_7: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.c39] @@ -220,7 +221,7 @@ fn F() { // CHECK:STDOUT: %T.loc7_7.2: %I.type = symbolic_binding T, 0 [symbolic = %T.loc7_7.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc13_7.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_7.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc13_12.1: type = splice_block %.loc13_12.2 [concrete = constants.%I.type] { // CHECK:STDOUT: %.Self.loc13_7: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.c39] @@ -240,22 +241,26 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc7_7.2: %I.type) { +// CHECK:STDOUT: %T.patt.loc7_7.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_7.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc7_7.1: %I.type = symbolic_binding T, 0 [symbolic = %T.loc7_7.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @G(%T.loc13_7.2: %I.type) { +// CHECK:STDOUT: %T.patt.loc13_7.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_7.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc13_7.1: %I.type = symbolic_binding T, 0 [symbolic = %T.loc13_7.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T) { +// CHECK:STDOUT: %T.patt.loc7_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc7_7.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%T) { +// CHECK:STDOUT: %T.patt.loc13_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc13_7.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -273,7 +278,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt: = symbolic_binding_pattern T, 0 [concrete = ] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc14_12.1: type = splice_block %.loc14_12.2 [concrete = ] { // CHECK:STDOUT: %.Self.loc14_7: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.c39] @@ -312,6 +317,7 @@ fn F() { // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %I_where.type.267: type = facet_type <@I where TODO> [concrete] // CHECK:STDOUT: %pattern_type.603: type = pattern_type %I_where.type.267 [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.603 = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %U: %I_where.type.267 = symbolic_binding U, 0 [symbolic] // CHECK:STDOUT: %EqualEqual.type: type = fn_type @EqualEqual [concrete] // CHECK:STDOUT: %EqualEqual: %EqualEqual.type = struct_value () [concrete] @@ -319,6 +325,7 @@ fn F() { // CHECK:STDOUT: %.Self.as_type.29a: type = facet_access_type %.Self.d2f [symbolic_self] // CHECK:STDOUT: %J_where.type: type = facet_type <@J where .Self impls @I> [concrete] // CHECK:STDOUT: %pattern_type.17c: type = pattern_type %J_where.type [concrete] +// CHECK:STDOUT: %V.patt: %pattern_type.17c = symbolic_binding_pattern V, 0 [symbolic] // CHECK:STDOUT: %V: %J_where.type = symbolic_binding V, 0 [symbolic] // CHECK:STDOUT: %Impls.type: type = fn_type @Impls [concrete] // CHECK:STDOUT: %Impls: %Impls.type = struct_value () [concrete] @@ -327,6 +334,7 @@ fn F() { // CHECK:STDOUT: %impl.elem0: type = impl_witness_access %I.lookup_impl_witness, element0 [symbolic_self] // CHECK:STDOUT: %I_where.type.a1d: type = facet_type <@I where .Self impls @J and TODO> [concrete] // CHECK:STDOUT: %pattern_type.e37: type = pattern_type %I_where.type.a1d [concrete] +// CHECK:STDOUT: %W.patt: %pattern_type.e37 = symbolic_binding_pattern W, 0 [symbolic] // CHECK:STDOUT: %W: %I_where.type.a1d = symbolic_binding W, 0 [symbolic] // CHECK:STDOUT: %And.type: type = fn_type @And [concrete] // CHECK:STDOUT: %And: %And.type = struct_value () [concrete] @@ -334,7 +342,7 @@ 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.603 = symbolic_binding_pattern U, 0 [concrete] +// CHECK:STDOUT: %U.patt.loc12_16.1: %pattern_type.603 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc12_16.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc12_21.1: type = splice_block %.loc12_21.2 [concrete = constants.%I_where.type.267] { // CHECK:STDOUT: %.Self.loc12_16: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.c39] @@ -350,7 +358,7 @@ fn F() { // CHECK:STDOUT: %U.loc12_16.2: %I_where.type.267 = symbolic_binding U, 0 [symbolic = %U.loc12_16.1 (constants.%U)] // CHECK:STDOUT: } // CHECK:STDOUT: %Impls.decl: %Impls.type = fn_decl @Impls [concrete = constants.%Impls] { -// CHECK:STDOUT: %V.patt: %pattern_type.17c = symbolic_binding_pattern V, 0 [concrete] +// CHECK:STDOUT: %V.patt.loc14_11.1: %pattern_type.17c = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc14_11.2 (constants.%V.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc14_16.1: type = splice_block %.loc14_16.2 [concrete = constants.%J_where.type] { // CHECK:STDOUT: %.Self.loc14_11: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.c39] @@ -368,7 +376,7 @@ fn F() { // CHECK:STDOUT: %V.loc14_11.2: %J_where.type = symbolic_binding V, 0 [symbolic = %V.loc14_11.1 (constants.%V)] // CHECK:STDOUT: } // CHECK:STDOUT: %And.decl: %And.type = fn_decl @And [concrete = constants.%And] { -// CHECK:STDOUT: %W.patt: %pattern_type.e37 = symbolic_binding_pattern W, 0 [concrete] +// CHECK:STDOUT: %W.patt.loc16_9.1: %pattern_type.e37 = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc16_9.2 (constants.%W.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc16_14.1: type = splice_block %.loc16_14.2 [concrete = constants.%I_where.type.a1d] { // CHECK:STDOUT: %.Self.loc16_9: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.c39] @@ -395,32 +403,38 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @EqualEqual(%U.loc12_16.2: %I_where.type.267) { +// CHECK:STDOUT: %U.patt.loc12_16.2: %pattern_type.603 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc12_16.2 (constants.%U.patt)] // CHECK:STDOUT: %U.loc12_16.1: %I_where.type.267 = symbolic_binding U, 0 [symbolic = %U.loc12_16.1 (constants.%U)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Impls(%V.loc14_11.2: %J_where.type) { +// CHECK:STDOUT: %V.patt.loc14_11.2: %pattern_type.17c = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc14_11.2 (constants.%V.patt)] // CHECK:STDOUT: %V.loc14_11.1: %J_where.type = symbolic_binding V, 0 [symbolic = %V.loc14_11.1 (constants.%V)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @And(%W.loc16_9.2: %I_where.type.a1d) { +// CHECK:STDOUT: %W.patt.loc16_9.2: %pattern_type.e37 = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc16_9.2 (constants.%W.patt)] // CHECK:STDOUT: %W.loc16_9.1: %I_where.type.a1d = symbolic_binding W, 0 [symbolic = %W.loc16_9.1 (constants.%W)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @EqualEqual(constants.%U) { +// CHECK:STDOUT: %U.patt.loc12_16.2 => constants.%U.patt // CHECK:STDOUT: %U.loc12_16.1 => constants.%U // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Impls(constants.%V) { +// CHECK:STDOUT: %V.patt.loc14_11.2 => constants.%V.patt // CHECK:STDOUT: %V.loc14_11.1 => constants.%V // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @And(constants.%W) { +// CHECK:STDOUT: %W.patt.loc16_9.2 => constants.%W.patt // CHECK:STDOUT: %W.loc16_9.1 => constants.%W // CHECK:STDOUT: } // CHECK:STDOUT: @@ -441,6 +455,7 @@ fn F() { // CHECK:STDOUT: %as_type: type = facet_access_type %impl.elem0 [symbolic_self] // CHECK:STDOUT: %K_where.type: type = facet_type <@K where %impl.elem0 impls @M> [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %K_where.type [concrete] +// CHECK:STDOUT: %W.patt: %pattern_type = symbolic_binding_pattern W, 0 [symbolic] // CHECK:STDOUT: %W: %K_where.type = symbolic_binding W, 0 [symbolic] // CHECK:STDOUT: %AssociatedTypeImpls.type: type = fn_type @AssociatedTypeImpls [concrete] // CHECK:STDOUT: %AssociatedTypeImpls: %AssociatedTypeImpls.type = struct_value () [concrete] @@ -448,7 +463,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %AssociatedTypeImpls.decl: %AssociatedTypeImpls.type = fn_decl @AssociatedTypeImpls [concrete = constants.%AssociatedTypeImpls] { -// CHECK:STDOUT: %W.patt: %pattern_type = symbolic_binding_pattern W, 0 [concrete] +// CHECK:STDOUT: %W.patt.loc12_25.1: %pattern_type = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc12_25.2 (constants.%W.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc12_30.1: type = splice_block %.loc12_30.2 [concrete = constants.%K_where.type] { // CHECK:STDOUT: %.Self.loc12_25: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.c39] @@ -472,12 +487,14 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @AssociatedTypeImpls(%W.loc12_25.2: %K_where.type) { +// CHECK:STDOUT: %W.patt.loc12_25.2: %pattern_type = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc12_25.2 (constants.%W.patt)] // CHECK:STDOUT: %W.loc12_25.1: %K_where.type = symbolic_binding W, 0 [symbolic = %W.loc12_25.1 (constants.%W)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @AssociatedTypeImpls(constants.%W) { +// CHECK:STDOUT: %W.patt.loc12_25.2 => constants.%W.patt // CHECK:STDOUT: %W.loc12_25.1 => constants.%W // CHECK:STDOUT: } // CHECK:STDOUT: @@ -493,7 +510,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %WithError.decl: %WithError.type = fn_decl @WithError [concrete = constants.%WithError] { -// CHECK:STDOUT: %U.patt: = symbolic_binding_pattern U, 0 [concrete] +// CHECK:STDOUT: %U.patt: = symbolic_binding_pattern U, 0 [concrete = ] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc9_23.1: type = splice_block %.loc9_23.2 [concrete = ] { // CHECK:STDOUT: %.Self.loc9_15: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] @@ -524,6 +541,7 @@ fn F() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = value_binding_pattern x [concrete] // CHECK:STDOUT: %WithError.type: type = fn_type @WithError [concrete] // CHECK:STDOUT: %WithError: %WithError.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -535,7 +553,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type = value_binding_pattern x [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = value_binding_pattern x [concrete = constants.%x.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %WithError.ref: %WithError.type = name_ref WithError, imports.%Main.WithError [concrete = constants.%WithError] // CHECK:STDOUT: %.loc8_33: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] diff --git a/toolchain/check/testdata/where_expr/designator.carbon b/toolchain/check/testdata/where_expr/designator.carbon index cbc0b4ad63ec..3407e2bee6c3 100644 --- a/toolchain/check/testdata/where_expr/designator.carbon +++ b/toolchain/check/testdata/where_expr/designator.carbon @@ -363,18 +363,21 @@ fn G(unused T:! Z where C impls (I & J(.Z0))) {} // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %I_where.type: type = facet_type <@I where TODO> [concrete] // CHECK:STDOUT: %pattern_type.603: type = pattern_type %I_where.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.603 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: %I_where.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %PeriodSelf.type: type = fn_type @PeriodSelf [concrete] // CHECK:STDOUT: %PeriodSelf: %PeriodSelf.type = struct_value () [concrete] // CHECK:STDOUT: %.Self.as_type.a2f: type = facet_access_type %.Self.9e9 [symbolic_self] // CHECK:STDOUT: %I.lookup_impl_witness: = lookup_impl_witness %.Self.9e9, @I [symbolic_self] // CHECK:STDOUT: %impl.elem0: type = impl_witness_access %I.lookup_impl_witness, element0 [symbolic_self] +// CHECK:STDOUT: %U.patt: %pattern_type.603 = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %U: %I_where.type = symbolic_binding U, 0 [symbolic] // CHECK:STDOUT: %PeriodMember.type: type = fn_type @PeriodMember [concrete] // CHECK:STDOUT: %PeriodMember: %PeriodMember.type = struct_value () [concrete] // CHECK:STDOUT: %.Self.as_type.246: type = facet_access_type %.Self.c39 [symbolic_self] // CHECK:STDOUT: %type_where: type = facet_type [concrete] // CHECK:STDOUT: %pattern_type.951: type = pattern_type %type_where [concrete] +// CHECK:STDOUT: %V.patt: %pattern_type.951 = symbolic_binding_pattern V, 0 [symbolic] // CHECK:STDOUT: %V: %type_where = symbolic_binding V, 0 [symbolic] // CHECK:STDOUT: %TypeSelfImpls.type: type = fn_type @TypeSelfImpls [concrete] // CHECK:STDOUT: %TypeSelfImpls: %TypeSelfImpls.type = struct_value () [concrete] @@ -382,7 +385,7 @@ fn G(unused T:! Z where C impls (I & J(.Z0))) {} // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %PeriodSelf.decl: %PeriodSelf.type = fn_decl @PeriodSelf [concrete = constants.%PeriodSelf] { -// CHECK:STDOUT: %T.patt: %pattern_type.603 = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc9_16.1: %pattern_type.603 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_16.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc9_21.1: type = splice_block %.loc9_21.2 [concrete = constants.%I_where.type] { // CHECK:STDOUT: %.Self.loc9_16: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.c39] @@ -398,7 +401,7 @@ fn G(unused T:! Z where C impls (I & J(.Z0))) {} // CHECK:STDOUT: %T.loc9_16.2: %I_where.type = symbolic_binding T, 0 [symbolic = %T.loc9_16.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %PeriodMember.decl: %PeriodMember.type = fn_decl @PeriodMember [concrete = constants.%PeriodMember] { -// CHECK:STDOUT: %U.patt: %pattern_type.603 = symbolic_binding_pattern U, 0 [concrete] +// CHECK:STDOUT: %U.patt.loc11_18.1: %pattern_type.603 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc11_18.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc11_23.1: type = splice_block %.loc11_23.2 [concrete = constants.%I_where.type] { // CHECK:STDOUT: %.Self.loc11_18: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.c39] @@ -418,7 +421,7 @@ fn G(unused T:! Z where C impls (I & J(.Z0))) {} // CHECK:STDOUT: %U.loc11_18.2: %I_where.type = symbolic_binding U, 0 [symbolic = %U.loc11_18.1 (constants.%U)] // CHECK:STDOUT: } // CHECK:STDOUT: %TypeSelfImpls.decl: %TypeSelfImpls.type = fn_decl @TypeSelfImpls [concrete = constants.%TypeSelfImpls] { -// CHECK:STDOUT: %V.patt: %pattern_type.951 = symbolic_binding_pattern V, 0 [concrete] +// CHECK:STDOUT: %V.patt.loc13_19.1: %pattern_type.951 = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc13_19.2 (constants.%V.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc13_27.1: type = splice_block %.loc13_27.2 [concrete = constants.%type_where] { // CHECK:STDOUT: %.Self.loc13_19: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.c39] @@ -438,32 +441,38 @@ fn G(unused T:! Z where C impls (I & J(.Z0))) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @PeriodSelf(%T.loc9_16.2: %I_where.type) { +// CHECK:STDOUT: %T.patt.loc9_16.2: %pattern_type.603 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_16.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc9_16.1: %I_where.type = symbolic_binding T, 0 [symbolic = %T.loc9_16.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @PeriodMember(%U.loc11_18.2: %I_where.type) { +// CHECK:STDOUT: %U.patt.loc11_18.2: %pattern_type.603 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc11_18.2 (constants.%U.patt)] // CHECK:STDOUT: %U.loc11_18.1: %I_where.type = symbolic_binding U, 0 [symbolic = %U.loc11_18.1 (constants.%U)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @TypeSelfImpls(%V.loc13_19.2: %type_where) { +// CHECK:STDOUT: %V.patt.loc13_19.2: %pattern_type.951 = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc13_19.2 (constants.%V.patt)] // CHECK:STDOUT: %V.loc13_19.1: %type_where = symbolic_binding V, 0 [symbolic = %V.loc13_19.1 (constants.%V)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @PeriodSelf(constants.%T) { +// CHECK:STDOUT: %T.patt.loc9_16.2 => constants.%T.patt // CHECK:STDOUT: %T.loc9_16.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @PeriodMember(constants.%U) { +// CHECK:STDOUT: %U.patt.loc11_18.2 => constants.%U.patt // CHECK:STDOUT: %U.loc11_18.1 => constants.%U // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TypeSelfImpls(constants.%V) { +// CHECK:STDOUT: %V.patt.loc13_19.2 => constants.%V.patt // CHECK:STDOUT: %V.loc13_19.1 => constants.%V // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/where_expr/dot_self_index.carbon b/toolchain/check/testdata/where_expr/dot_self_index.carbon index 07a2cbdb6b7b..70962136fb51 100644 --- a/toolchain/check/testdata/where_expr/dot_self_index.carbon +++ b/toolchain/check/testdata/where_expr/dot_self_index.carbon @@ -33,6 +33,7 @@ fn G(U: Empty(i32) where .A = i32*) { // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %Empty.type.c52: type = generic_interface_type @Empty [concrete] // CHECK:STDOUT: %Empty.generic: %Empty.type.c52 = struct_value () [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Empty.type.95d624.2: type = facet_type <@Empty, @Empty(%T)> [symbolic] // CHECK:STDOUT: %.Self.b11: %Empty.type.95d624.2 = symbolic_binding .Self [symbolic] @@ -45,6 +46,9 @@ fn G(U: Empty(i32) where .A = i32*) { // CHECK:STDOUT: %ptr.e8f: type = ptr_type %T [symbolic] // CHECK:STDOUT: %Empty_where.type.e78: type = facet_type <@Empty, @Empty(%T) where %impl.elem0.cd8 = %ptr.e8f> [symbolic] // CHECK:STDOUT: %pattern_type.eb8: type = pattern_type %Empty_where.type.e78 [symbolic] +// CHECK:STDOUT: %U.param_patt.10f: %pattern_type.eb8 = value_param_pattern [symbolic] +// CHECK:STDOUT: %U.patt.b11: %pattern_type.eb8 = at_binding_pattern U, %U.param_patt.10f [symbolic] +// CHECK:STDOUT: %V.patt: %pattern_type.98f = symbolic_binding_pattern V, 1 [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] @@ -61,16 +65,18 @@ fn G(U: Empty(i32) where .A = i32*) { // CHECK:STDOUT: %ptr.d08: type = ptr_type %i32 [concrete] // CHECK:STDOUT: %Empty_where.type.2e4: type = facet_type <@Empty, @Empty(%i32) where %impl.elem0.1e1 = %ptr.d08> [concrete] // CHECK:STDOUT: %pattern_type.ce6: type = pattern_type %Empty_where.type.2e4 [concrete] +// CHECK:STDOUT: %U.param_patt.57b: %pattern_type.ce6 = value_param_pattern [concrete] // CHECK:STDOUT: %complete_type.c56: = complete_type_witness %Empty.type.39c [concrete] +// CHECK:STDOUT: %U.patt.a9b134.2: %pattern_type.ce6 = at_binding_pattern U, %U.param_patt.57b [concrete] // CHECK:STDOUT: %complete_type.6eb: = complete_type_witness %Empty_where.type.2e4 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // 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.param_patt: @H.%pattern_type (%pattern_type.eb8) = value_param_pattern [concrete] -// CHECK:STDOUT: %U.patt: @H.%pattern_type (%pattern_type.eb8) = at_binding_pattern U, %U.param_patt [concrete] -// CHECK:STDOUT: %V.patt: %pattern_type.98f = symbolic_binding_pattern V, 1 [concrete] +// CHECK:STDOUT: %T.patt.loc21_7.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_7.2 (constants.%T.patt)] +// CHECK:STDOUT: %U.param_patt.loc21_24.1: @H.%pattern_type (%pattern_type.eb8) = value_param_pattern [symbolic = %U.param_patt.loc21_24.2 (constants.%U.param_patt.10f)] +// CHECK:STDOUT: %U.patt.loc21_24.1: @H.%pattern_type (%pattern_type.eb8) = at_binding_pattern U, %U.param_patt.loc21_24.1 [symbolic = %U.patt.loc21_24.2 (constants.%U.patt.b11)] +// CHECK:STDOUT: %V.patt.loc21_58.1: %pattern_type.98f = symbolic_binding_pattern V, 1 [symbolic = %V.patt.loc21_58.2 (constants.%V.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc21_10.1: type = splice_block %.loc21_10.2 [concrete = type] { // CHECK:STDOUT: %.Self.loc21_7: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.c39] @@ -106,6 +112,7 @@ fn G(U: Empty(i32) where .A = i32*) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @H(%T.loc21_7.2: type, %V.loc21_58.2: type) { +// CHECK:STDOUT: %T.patt.loc21_7.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_7.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc21_7.1: type = symbolic_binding T, 0 [symbolic = %T.loc21_7.1 (constants.%T)] // CHECK:STDOUT: %Empty.type.loc21_33.1: type = facet_type <@Empty, @Empty(%T.loc21_7.1)> [symbolic = %Empty.type.loc21_33.1 (constants.%Empty.type.95d624.2)] // CHECK:STDOUT: %.Self.loc21_35.1: @H.%Empty.type.loc21_33.1 (%Empty.type.95d624.2) = symbolic_binding .Self [symbolic = %.Self.loc21_35.1 (constants.%.Self.b11)] @@ -118,6 +125,9 @@ fn G(U: Empty(i32) where .A = i32*) { // CHECK:STDOUT: %ptr.loc21_47.1: type = ptr_type %T.loc21_7.1 [symbolic = %ptr.loc21_47.1 (constants.%ptr.e8f)] // CHECK:STDOUT: %Empty_where.type: type = facet_type <@Empty, @Empty(%T.loc21_7.1) where %impl.elem0.loc21_41.1 = %ptr.loc21_47.1> [symbolic = %Empty_where.type (constants.%Empty_where.type.e78)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Empty_where.type [symbolic = %pattern_type (constants.%pattern_type.eb8)] +// CHECK:STDOUT: %U.param_patt.loc21_24.2: @H.%pattern_type (%pattern_type.eb8) = value_param_pattern [symbolic = %U.param_patt.loc21_24.2 (constants.%U.param_patt.10f)] +// CHECK:STDOUT: %U.patt.loc21_24.2: @H.%pattern_type (%pattern_type.eb8) = at_binding_pattern U, %U.param_patt.loc21_24.2 [symbolic = %U.patt.loc21_24.2 (constants.%U.patt.b11)] +// CHECK:STDOUT: %V.patt.loc21_58.2: %pattern_type.98f = symbolic_binding_pattern V, 1 [symbolic = %V.patt.loc21_58.2 (constants.%V.patt)] // CHECK:STDOUT: %V.loc21_58.1: type = symbolic_binding V, 1 [symbolic = %V.loc21_58.1 (constants.%V)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -130,6 +140,7 @@ fn G(U: Empty(i32) where .A = i32*) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @H(constants.%T, constants.%V) { +// CHECK:STDOUT: %T.patt.loc21_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc21_7.1 => constants.%T // CHECK:STDOUT: %Empty.type.loc21_33.1 => constants.%Empty.type.95d624.2 // CHECK:STDOUT: %.Self.loc21_35.1 => constants.%.Self.b11 @@ -142,10 +153,14 @@ fn G(U: Empty(i32) where .A = i32*) { // CHECK:STDOUT: %ptr.loc21_47.1 => constants.%ptr.e8f // CHECK:STDOUT: %Empty_where.type => constants.%Empty_where.type.e78 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.eb8 +// CHECK:STDOUT: %U.param_patt.loc21_24.2 => constants.%U.param_patt.10f +// CHECK:STDOUT: %U.patt.loc21_24.2 => constants.%U.patt.b11 +// CHECK:STDOUT: %V.patt.loc21_58.2 => constants.%V.patt // CHECK:STDOUT: %V.loc21_58.1 => constants.%V // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @H(constants.%i32, bool) { +// CHECK:STDOUT: %T.patt.loc21_7.2 => constants.%T.patt // CHECK:STDOUT: %T.loc21_7.1 => constants.%i32 // CHECK:STDOUT: %Empty.type.loc21_33.1 => constants.%Empty.type.39c // CHECK:STDOUT: %.Self.loc21_35.1 => constants.%.Self.21a @@ -158,6 +173,9 @@ fn G(U: Empty(i32) where .A = i32*) { // CHECK:STDOUT: %ptr.loc21_47.1 => constants.%ptr.d08 // CHECK:STDOUT: %Empty_where.type => constants.%Empty_where.type.2e4 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.ce6 +// CHECK:STDOUT: %U.param_patt.loc21_24.2 => constants.%U.param_patt.57b +// CHECK:STDOUT: %U.patt.loc21_24.2 => constants.%U.patt.a9b134.2 +// CHECK:STDOUT: %V.patt.loc21_58.2 => constants.%V.patt // CHECK:STDOUT: %V.loc21_58.1 => bool // CHECK:STDOUT: // CHECK:STDOUT: !definition: diff --git a/toolchain/check/testdata/where_expr/equal_rewrite.carbon b/toolchain/check/testdata/where_expr/equal_rewrite.carbon index 6bcac3ee7c80..e9c6f3b8ba9e 100644 --- a/toolchain/check/testdata/where_expr/equal_rewrite.carbon +++ b/toolchain/check/testdata/where_expr/equal_rewrite.carbon @@ -237,6 +237,7 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %N_where.type: type = facet_type <@N where %impl.elem0 = %empty_struct_type> [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %N_where.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: %N_where.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Equal.type: type = fn_type @Equal [concrete] // CHECK:STDOUT: %Equal: %Equal.type = struct_value () [concrete] @@ -244,7 +245,7 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %Equal.decl: %Equal.type = fn_decl @Equal [concrete = constants.%Equal] { -// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt.loc9_11.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_11.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc9_16.1: type = splice_block %.loc9_16.2 [concrete = constants.%N_where.type] { // CHECK:STDOUT: %.Self.loc9_11: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.c39] @@ -267,12 +268,14 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Equal(%T.loc9_11.2: %N_where.type) { +// CHECK:STDOUT: %T.patt.loc9_11.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_11.2 (constants.%T.patt)] // CHECK:STDOUT: %T.loc9_11.1: %N_where.type = symbolic_binding T, 0 [symbolic = %T.loc9_11.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Equal(constants.%T) { +// CHECK:STDOUT: %T.patt.loc9_11.2 => constants.%T.patt // CHECK:STDOUT: %T.loc9_11.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -295,6 +298,7 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %A_where.type.879: type = facet_type <@A where %impl.elem0 = bool and %impl.elem1 = %empty_tuple.type> [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %A_where.type.879 [concrete] +// CHECK:STDOUT: %D.patt: %pattern_type = symbolic_binding_pattern D, 0 [symbolic] // CHECK:STDOUT: %D: %A_where.type.879 = symbolic_binding D, 0 [symbolic] // CHECK:STDOUT: %NestedRewrite.type: type = fn_type @NestedRewrite [concrete] // CHECK:STDOUT: %NestedRewrite: %NestedRewrite.type = struct_value () [concrete] @@ -302,7 +306,7 @@ 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 = symbolic_binding_pattern D, 0 [concrete] +// CHECK:STDOUT: %D.patt.loc10_19.1: %pattern_type = symbolic_binding_pattern D, 0 [symbolic = %D.patt.loc10_19.2 (constants.%D.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc10_42.1: type = splice_block %.loc10_42.2 [concrete = constants.%A_where.type.879] { // CHECK:STDOUT: %.Self.loc10_19: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.c39] @@ -336,12 +340,14 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @NestedRewrite(%D.loc10_19.2: %A_where.type.879) { +// CHECK:STDOUT: %D.patt.loc10_19.2: %pattern_type = symbolic_binding_pattern D, 0 [symbolic = %D.patt.loc10_19.2 (constants.%D.patt)] // CHECK:STDOUT: %D.loc10_19.1: %A_where.type.879 = symbolic_binding D, 0 [symbolic = %D.loc10_19.1 (constants.%D)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @NestedRewrite(constants.%D) { +// CHECK:STDOUT: %D.patt.loc10_19.2 => constants.%D.patt // CHECK:STDOUT: %D.loc10_19.1 => constants.%D // CHECK:STDOUT: } // CHECK:STDOUT: @@ -361,9 +367,11 @@ let K: (E where .F = .Self.G) = bool; // 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: %pattern_type.97c: type = pattern_type %E_where.type [concrete] +// CHECK:STDOUT: %G.patt: %pattern_type.97c = symbolic_binding_pattern G, 0 [symbolic] // CHECK:STDOUT: %G: %E_where.type = symbolic_binding G, 0 [symbolic] // CHECK:STDOUT: %OneRewrite.type: type = fn_type @OneRewrite [concrete] // CHECK:STDOUT: %OneRewrite: %OneRewrite.type = struct_value () [concrete] +// CHECK:STDOUT: %H.patt: %pattern_type.97c = symbolic_binding_pattern H, 0 [symbolic] // 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] @@ -373,7 +381,7 @@ 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.97c = symbolic_binding_pattern G, 0 [concrete] +// CHECK:STDOUT: %G.patt.loc9_23.1: %pattern_type.97c = symbolic_binding_pattern G, 0 [symbolic = %G.patt.loc9_23.2 (constants.%G.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc9_28.1: type = splice_block %.loc9_28.2 [concrete = constants.%E_where.type] { // CHECK:STDOUT: %.Self.loc9_23: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.c39] @@ -393,7 +401,7 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: %G.loc9_23.2: %E_where.type = symbolic_binding G, 0 [symbolic = %G.loc9_23.1 (constants.%G)] // CHECK:STDOUT: } // CHECK:STDOUT: %RepeatedRewrite.decl: %RepeatedRewrite.type = fn_decl @RepeatedRewrite [concrete = constants.%RepeatedRewrite] { -// CHECK:STDOUT: %H.patt: %pattern_type.97c = symbolic_binding_pattern H, 0 [concrete] +// CHECK:STDOUT: %H.patt.loc11_21.1: %pattern_type.97c = symbolic_binding_pattern H, 0 [symbolic = %H.patt.loc11_21.2 (constants.%H.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc11_26.1: type = splice_block %.loc11_26.2 [concrete = constants.%E_where.type] { // CHECK:STDOUT: %.Self.loc11_21: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.c39] @@ -423,6 +431,7 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @OneRewrite(%G.loc9_23.2: %E_where.type) { +// CHECK:STDOUT: %G.patt.loc9_23.2: %pattern_type.97c = symbolic_binding_pattern G, 0 [symbolic = %G.patt.loc9_23.2 (constants.%G.patt)] // CHECK:STDOUT: %G.loc9_23.1: %E_where.type = symbolic_binding G, 0 [symbolic = %G.loc9_23.1 (constants.%G)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -434,6 +443,7 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @RepeatedRewrite(%H.loc11_21.2: %E_where.type) { +// CHECK:STDOUT: %H.patt.loc11_21.2: %pattern_type.97c = symbolic_binding_pattern H, 0 [symbolic = %H.patt.loc11_21.2 (constants.%H.patt)] // CHECK:STDOUT: %H.loc11_21.1: %E_where.type = symbolic_binding H, 0 [symbolic = %H.loc11_21.1 (constants.%H)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -446,20 +456,24 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @OneRewrite(constants.%G) { +// CHECK:STDOUT: %G.patt.loc9_23.2 => constants.%G.patt // CHECK:STDOUT: %G.loc9_23.1 => constants.%G // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @RepeatedRewrite(constants.%H) { +// CHECK:STDOUT: %H.patt.loc11_21.2 => constants.%H.patt // CHECK:STDOUT: %H.loc11_21.1 => constants.%H // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @OneRewrite(constants.%H) { +// CHECK:STDOUT: %G.patt.loc9_23.2 => constants.%G.patt // CHECK:STDOUT: %G.loc9_23.1 => constants.%H // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @RepeatedRewrite(constants.%I) { +// CHECK:STDOUT: %H.patt.loc11_21.2 => constants.%H.patt // CHECK:STDOUT: %H.loc11_21.1 => constants.%I // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -467,6 +481,7 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @OneRewrite(constants.%I) { +// CHECK:STDOUT: %G.patt.loc9_23.2 => constants.%G.patt // CHECK:STDOUT: %G.loc9_23.1 => constants.%I // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -490,9 +505,11 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: %impl.elem1: type = impl_witness_access %J.lookup_impl_witness, element1 [symbolic_self] // CHECK:STDOUT: %J_where.type: type = facet_type <@J where %impl.elem0 = %empty_tuple.type and %impl.elem1 = bool> [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %J_where.type [concrete] +// CHECK:STDOUT: %M.patt: %pattern_type = symbolic_binding_pattern M, 0 [symbolic] // CHECK:STDOUT: %M: %J_where.type = symbolic_binding M, 0 [symbolic] // CHECK:STDOUT: %Alphabetical.type: type = fn_type @Alphabetical [concrete] // CHECK:STDOUT: %Alphabetical: %Alphabetical.type = struct_value () [concrete] +// CHECK:STDOUT: %N.patt: %pattern_type = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %N: %J_where.type = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %Reversed.type: type = fn_type @Reversed [concrete] // CHECK:STDOUT: %Reversed: %Reversed.type = struct_value () [concrete] @@ -500,7 +517,7 @@ 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 = symbolic_binding_pattern M, 0 [concrete] +// CHECK:STDOUT: %M.patt.loc10_25.1: %pattern_type = symbolic_binding_pattern M, 0 [symbolic = %M.patt.loc10_25.2 (constants.%M.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc10_30.1: type = splice_block %.loc10_30.2 [concrete = constants.%J_where.type] { // CHECK:STDOUT: %.Self.loc10_25: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.c39] @@ -528,7 +545,7 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: %M.loc10_25.2: %J_where.type = symbolic_binding M, 0 [symbolic = %M.loc10_25.1 (constants.%M)] // CHECK:STDOUT: } // CHECK:STDOUT: %Reversed.decl: %Reversed.type = fn_decl @Reversed [concrete = constants.%Reversed] { -// CHECK:STDOUT: %N.patt: %pattern_type = symbolic_binding_pattern N, 0 [concrete] +// CHECK:STDOUT: %N.patt.loc12_14.1: %pattern_type = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc12_14.2 (constants.%N.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc12_19.1: type = splice_block %.loc12_19.2 [concrete = constants.%J_where.type] { // CHECK:STDOUT: %.Self.loc12_14: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.c39] @@ -558,6 +575,7 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Alphabetical(%M.loc10_25.2: %J_where.type) { +// CHECK:STDOUT: %M.patt.loc10_25.2: %pattern_type = symbolic_binding_pattern M, 0 [symbolic = %M.patt.loc10_25.2 (constants.%M.patt)] // CHECK:STDOUT: %M.loc10_25.1: %J_where.type = symbolic_binding M, 0 [symbolic = %M.loc10_25.1 (constants.%M)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -569,6 +587,7 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Reversed(%N.loc12_14.2: %J_where.type) { +// CHECK:STDOUT: %N.patt.loc12_14.2: %pattern_type = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc12_14.2 (constants.%N.patt)] // CHECK:STDOUT: %N.loc12_14.1: %J_where.type = symbolic_binding N, 0 [symbolic = %N.loc12_14.1 (constants.%N)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -581,14 +600,17 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Alphabetical(constants.%M) { +// CHECK:STDOUT: %M.patt.loc10_25.2 => constants.%M.patt // CHECK:STDOUT: %M.loc10_25.1 => constants.%M // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Reversed(constants.%N) { +// CHECK:STDOUT: %N.patt.loc12_14.2 => constants.%N.patt // CHECK:STDOUT: %N.loc12_14.1 => constants.%N // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Alphabetical(constants.%N) { +// CHECK:STDOUT: %M.patt.loc10_25.2 => constants.%M.patt // CHECK:STDOUT: %M.loc10_25.1 => constants.%N // CHECK:STDOUT: // CHECK:STDOUT: !definition: diff --git a/toolchain/check/testdata/where_expr/non_generic.carbon b/toolchain/check/testdata/where_expr/non_generic.carbon index a622de813acd..04b488fd8d6f 100644 --- a/toolchain/check/testdata/where_expr/non_generic.carbon +++ b/toolchain/check/testdata/where_expr/non_generic.carbon @@ -31,14 +31,16 @@ fn NotGenericF(unused U: I where .T == i32) {} // 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.603: type = pattern_type %I_where.type [concrete] +// CHECK:STDOUT: %U.param_patt: %pattern_type.603 = value_param_pattern [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.603 = at_binding_pattern U, %U.param_patt [concrete] // CHECK:STDOUT: %NotGenericF.type: type = fn_type @NotGenericF [concrete] // CHECK:STDOUT: %NotGenericF: %NotGenericF.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %NotGenericF.decl: %NotGenericF.type = fn_decl @NotGenericF [concrete = constants.%NotGenericF] { -// CHECK:STDOUT: %U.param_patt: %pattern_type.603 = value_param_pattern [concrete] -// CHECK:STDOUT: %U.patt: %pattern_type.603 = at_binding_pattern U, %U.param_patt [concrete] +// CHECK:STDOUT: %U.param_patt: %pattern_type.603 = value_param_pattern [concrete = constants.%U.param_patt] +// CHECK:STDOUT: %U.patt: %pattern_type.603 = at_binding_pattern U, %U.param_patt [concrete = constants.%U.patt] // CHECK:STDOUT: } { // CHECK:STDOUT: %U.param: %I_where.type = value_param call_param0 // CHECK:STDOUT: %.loc17_28.1: type = splice_block %.loc17_28.2 [concrete = constants.%I_where.type] { diff --git a/toolchain/check/thunk.cpp b/toolchain/check/thunk.cpp index 9da18f53306b..6662741d524c 100644 --- a/toolchain/check/thunk.cpp +++ b/toolchain/check/thunk.cpp @@ -16,7 +16,6 @@ #include "toolchain/check/generic.h" #include "toolchain/check/inst.h" #include "toolchain/check/member_access.h" -#include "toolchain/check/name_ref.h" #include "toolchain/check/operator.h" #include "toolchain/check/pattern.h" #include "toolchain/check/pattern_match.h" @@ -34,6 +33,43 @@ namespace Carbon::Check { +// Adds and returns a new InstId that's equivalent to `inst_id`, but with +// constant values substituted from `specific_id`. `inst_id` must not depend +// on a binding pattern. +// +// TODO: Remove that restriction, and get rid of `ClonePattern`. The major +// open question is when and how to create the binding inst that corresponds +// to a binding pattern cloned via this function. `ScopeStack`, and specifically +// the compile-time binding stack, seems to require `SymbolicBinding`s to be +// created at the same time as the corresponding `SymbolicBindingPattern`s, but +// that would require this function to traverse through the dependencies of +// `inst_id` looking for binding patterns in order to eagerly create the +// corresponding bindings, which would defeat much of the purpose of this +// "shallow" approach to cloning. +static auto CloneInstId(Context& context, SemIR::SpecificId specific_id, + SemIR::InstId inst_id) -> SemIR::InstId { + if (!inst_id.has_value()) { + return SemIR::InstId::None; + } + + return GetOrAddInst( + context, SemIR::LocId(inst_id), + {.type_id = SemIR::GetTypeOfInstInSpecific(context.sem_ir(), specific_id, + inst_id), + .inst_id = inst_id, + .specific_id = specific_id}); +} + +static auto CloneTypeInstId(Context& context, SemIR::SpecificId specific_id, + SemIR::TypeInstId inst_id) -> SemIR::TypeInstId { + if (!inst_id.has_value()) { + return SemIR::TypeInstId::None; + } + + return context.types().GetAsTypeInstId( + CloneInstId(context, specific_id, inst_id)); +} + // Adds a pattern instruction for a thunk, copying the location from an existing // instruction. static auto RebuildPatternInst(Context& context, SemIR::InstId orig_inst_id, @@ -60,7 +96,8 @@ static auto RebuildPatternInst(Context& context, SemIR::InstId orig_inst_id, // `new_pattern_type_id`. static auto CloneBindingPattern(Context& context, SemIR::InstId pattern_id, SemIR::AnyBindingPattern pattern, - SemIR::TypeId new_pattern_type_id) + SemIR::TypeId new_pattern_type_id, + SemIR::SpecificId specific_id) -> SemIR::InstId { auto entity_name = context.entity_names().Get(pattern.entity_name_id); CARBON_CHECK((pattern.kind == SemIR::SymbolicBindingPattern::Kind) == @@ -79,21 +116,15 @@ static auto CloneBindingPattern(Context& context, SemIR::InstId pattern_id, /*form_id=*/SemIR::InstId::None, entity_name.is_unused, phase); if (pattern.kind == SemIR::WrapperBindingPattern::Kind) { - auto subpattern = context.insts().GetAs( - pattern.subpattern_id); - if (subpattern.kind == SemIR::FormParamPatternAction::Kind) { - context.TODO(pattern_id, "Support for cloning generic form bindings"); - return SemIR::ErrorInst::InstId; - } - pattern.subpattern_id = RebuildPatternInst( - context, pattern.subpattern_id, - {.kind = subpattern.kind, - .type_id = new_pattern_type_id, - .pretty_name_id = entity_name.name_id}); + // Now that we're inside the binding pattern, we can use CloneInstId. + pattern.subpattern_id = + CloneInstId(context, specific_id, pattern.subpattern_id); } // Rebuild the binding pattern. - return AddBindingPattern(context, SemIR::LocId(pattern_id), - SemIR::ExprRegionId::None, pattern) + return AddBindingPattern( + context, SemIR::LocId(pattern_id), SemIR::ExprRegionId::None, + SemIR::ExtractScrutineeType(context.sem_ir(), new_pattern_type_id), + pattern) .pattern_id; } @@ -111,11 +142,13 @@ static auto ClonePattern(Context& context, SemIR::SpecificId specific_id, inst_id); }; + auto pattern_const_id = SemIR::GetConstantValueInSpecific( + context.sem_ir(), specific_id, pattern_id); + pattern_id = context.constant_values().GetInstId(pattern_const_id); auto pattern = context.insts().Get(pattern_id); // Decompose the pattern. The forms we allow for patterns in a function // parameter list are currently fairly restrictive. - // Optional var parameter pattern. auto [var_param, var_param_id] = context.insts().TryUnwrap( pattern, pattern_id, &SemIR::VarParamPattern::subpattern_id); @@ -124,35 +157,10 @@ static auto ClonePattern(Context& context, SemIR::SpecificId specific_id, auto new_pattern_id = SemIR::InstId::None; if (auto binding = pattern.TryAs()) { auto type_id = get_type(pattern_id); - new_pattern_id = - CloneBindingPattern(context, pattern_id, *binding, type_id); + new_pattern_id = CloneBindingPattern(context, pattern_id, *binding, type_id, + specific_id); } else if (auto return_slot = pattern.TryAs()) { - auto new_subpattern_id = SemIR::InstId::None; - auto subpattern = context.insts().Get(return_slot->subpattern_id); - CARBON_KIND_SWITCH(subpattern) { - case SemIR::OutParamPattern::Kind: - case SemIR::RefReturnPattern::Kind: - case SemIR::ValueReturnPattern::Kind: - // These are leaf insts, so we can reuse their contents after updating - // the type. - subpattern.SetType(get_type(return_slot->subpattern_id)); - new_subpattern_id = - RebuildPatternInst(context, return_slot->subpattern_id, subpattern); - break; - case SemIR::ErrorInst::Kind: - subpattern.SetType(SemIR::ErrorInst::TypeId); - new_subpattern_id = SemIR::ErrorInst::InstId; - break; - default: - CARBON_FATAL("Unexpected kind for return slot subpattern {0}", - subpattern); - } - - new_pattern_id = RebuildPatternInst( - context, pattern_id, - {.type_id = get_type(pattern_id), - .subpattern_id = new_subpattern_id, - .type_inst_id = SemIR::TypeInstId::None}); + new_pattern_id = CloneInstId(context, specific_id, pattern_id); } else { CARBON_CHECK(pattern.Is(), "Unexpected pattern {0} in function signature", pattern); @@ -182,29 +190,6 @@ static auto ClonePatternBlock(Context& context, SemIR::SpecificId specific_id, }); } -static auto CloneInstId(Context& context, SemIR::SpecificId specific_id, - SemIR::InstId inst_id) -> SemIR::InstId { - if (!inst_id.has_value()) { - return SemIR::InstId::None; - } - - return GetOrAddInst( - context, SemIR::LocId(inst_id), - {.type_id = SemIR::TypeType::TypeId, - .inst_id = inst_id, - .specific_id = specific_id}); -} - -static auto CloneTypeInstId(Context& context, SemIR::SpecificId specific_id, - SemIR::TypeInstId inst_id) -> SemIR::TypeInstId { - if (!inst_id.has_value()) { - return SemIR::TypeInstId::None; - } - - return context.types().GetAsTypeInstId( - CloneInstId(context, specific_id, inst_id)); -} - static auto CloneFunctionDecl(Context& context, SemIR::LocId loc_id, SemIR::FunctionId signature_id, SemIR::SpecificId signature_specific_id, @@ -228,12 +213,12 @@ static auto CloneFunctionDecl(Context& context, SemIR::LocId loc_id, signature.return_form_inst_id); auto self_param_id = FindSelfPattern(context, implicit_param_patterns_id, param_patterns_id); - auto pattern_block_id = context.pattern_block_stack().Pop(); // Perform callee-side pattern matching to rebuild the parameter list. context.inst_block_stack().Push(); auto match_results = CalleePatternMatch(context, implicit_param_patterns_id, param_patterns_id, return_pattern_id); + auto pattern_block_id = context.pattern_block_stack().Pop(); auto decl_block_id = context.inst_block_stack().Pop(); // Create the `FunctionDecl` instruction. @@ -361,12 +346,6 @@ static auto BuildThunkDefinition(Context& context, SemIR::InstId thunk_id, SemIR::InstId callee_id, SemIR::TypeId override_self_type_id) -> void { - // TODO: Improve the diagnostics produced here. Specifically, it would likely - // be better for the primary error message to be that we tried to produce a - // thunk because of a type mismatch, but couldn't, with notes explaining - // why, rather than the primary error message being whatever went wrong - // building the thunk. - StartThunkFunctionDefinition(context, function_id, thunk_id, callee_id); // The checks below produce diagnostics pointing at the callee, so also note @@ -504,8 +483,10 @@ auto BuildThunk(Context& context, SemIR::FunctionId signature_id, context.scope_stack().PushForDeclName(); // We can't use the function directly. Build a thunk. - // TODO: Check for and diagnose obvious reasons why this will fail, such as - // arity mismatch, before trying to build the thunk. + // TODO: Before building the thunk, check for and diagnose any reasons why + // that would fail. Diagnostics emitted while building the thunk aren't + // meaningful to users, because they point to errors in code that the user + // didn't write (and doesn't have a correct location). auto [function_id, thunk_inst_id] = CloneFunctionDecl(context, SemIR::LocId(callee_id), signature_id, signature_specific_id, callee.function_id); diff --git a/toolchain/driver/testdata/compile/optimize/optimize_none.carbon b/toolchain/driver/testdata/compile/optimize/optimize_none.carbon index d1c8943b2d50..6fed1c2ef32f 100644 --- a/toolchain/driver/testdata/compile/optimize/optimize_none.carbon +++ b/toolchain/driver/testdata/compile/optimize/optimize_none.carbon @@ -170,7 +170,7 @@ fn VectorizedWithOptSpeed(a: array(i32, 65536)*) { // CHECK:STDOUT: !43 = !{!44, !45} // CHECK:STDOUT: !44 = !DILocalVariable(arg: 1, scope: !40, type: !7) // CHECK:STDOUT: !45 = !DILocalVariable(arg: 2, scope: !40, type: !7) -// CHECK:STDOUT: !46 = !DILocation(line: 4294967295, scope: !40) +// CHECK:STDOUT: !46 = !DILocation(line: 0, scope: !40) // CHECK:STDOUT: !47 = !DILocation(line: 331, column: 3, scope: !40) // CHECK:STDOUT: !48 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.45e1f8de18643ddf:ImplicitAs.0bc6489996802dd4.Core.40372ba0ea03ef47", scope: null, file: !35, line: 64, type: !49, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !51) // CHECK:STDOUT: !49 = !DISubroutineType(types: !50) diff --git a/toolchain/driver/testdata/compile/optimize/optimize_size.carbon b/toolchain/driver/testdata/compile/optimize/optimize_size.carbon index 5b0b09cd8eaa..b884cd10f34b 100644 --- a/toolchain/driver/testdata/compile/optimize/optimize_size.carbon +++ b/toolchain/driver/testdata/compile/optimize/optimize_size.carbon @@ -170,7 +170,7 @@ fn VectorizedWithOptSpeed(a: array(i32, 65536)*) { // CHECK:STDOUT: !43 = !{!44, !45} // CHECK:STDOUT: !44 = !DILocalVariable(arg: 1, scope: !40, type: !7) // CHECK:STDOUT: !45 = !DILocalVariable(arg: 2, scope: !40, type: !7) -// CHECK:STDOUT: !46 = !DILocation(line: 4294967295, scope: !40) +// CHECK:STDOUT: !46 = !DILocation(line: 0, scope: !40) // CHECK:STDOUT: !47 = !DILocation(line: 331, column: 3, scope: !40) // CHECK:STDOUT: !48 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.45e1f8de18643ddf:ImplicitAs.0bc6489996802dd4.Core.40372ba0ea03ef47", scope: null, file: !35, line: 64, type: !49, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !51) // CHECK:STDOUT: !49 = !DISubroutineType(types: !50) diff --git a/toolchain/lower/testdata/array/iterate.carbon b/toolchain/lower/testdata/array/iterate.carbon index 9af1a236082a..3519397c6b14 100644 --- a/toolchain/lower/testdata/array/iterate.carbon +++ b/toolchain/lower/testdata/array/iterate.carbon @@ -32,7 +32,7 @@ fn F() { // CHECK:STDOUT: entry: // CHECK:STDOUT: %.loc16_43.3.temp = alloca [6 x i32], align 4, !dbg !7 // CHECK:STDOUT: %var = alloca i32, align 4, !dbg !8 -// CHECK:STDOUT: %.loc17_19.3.temp = alloca <{ i32, i1 }>, align 4, !dbg !8 +// CHECK:STDOUT: %.loc17_19.5.temp = alloca <{ i32, i1 }>, align 4, !dbg !8 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc16_43.3.temp), !dbg !7 // CHECK:STDOUT: %.loc16_43.4.array.index = getelementptr inbounds [6 x i32], ptr %.loc16_43.3.temp, i32 0, i64 0, !dbg !7 // CHECK:STDOUT: %.loc16_43.7.array.index = getelementptr inbounds [6 x i32], ptr %.loc16_43.3.temp, i32 0, i64 1, !dbg !7 @@ -46,23 +46,25 @@ fn F() { // CHECK:STDOUT: br label %for.next, !dbg !8 // CHECK:STDOUT: // CHECK:STDOUT: for.next: ; preds = %for.body, %entry -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc17_19.3.temp), !dbg !8 -// CHECK:STDOUT: call void @"_CNext.e163a239f9fa927c:Iterate.Core.620427d555024fe2"(ptr %.loc17_19.3.temp, ptr @array.loc16_43.24, ptr %var), !dbg !8 -// CHECK:STDOUT: %Optional.HasValue.call = call i1 @_CHasValue.Optional.Core.18012f5191ea64dc(ptr %.loc17_19.3.temp), !dbg !8 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc17_19.5.temp), !dbg !8 +// CHECK:STDOUT: call void @"_CNext.e163a239f9fa927c:Iterate.Core.620427d555024fe2"(ptr %.loc17_19.5.temp, ptr @array.loc16_43.24, ptr %var), !dbg !8 +// CHECK:STDOUT: %Optional.HasValue.call = call i1 @_CHasValue.Optional.Core.18012f5191ea64dc(ptr %.loc17_19.5.temp), !dbg !8 // CHECK:STDOUT: br i1 %Optional.HasValue.call, label %for.body, label %for.done, !dbg !8 // CHECK:STDOUT: // CHECK:STDOUT: for.body: ; preds = %for.next -// CHECK:STDOUT: %Optional.Get.call = call i32 @_CGet.Optional.Core.18012f5191ea64dc(ptr %.loc17_19.3.temp), !dbg !8 +// CHECK:STDOUT: %Optional.Get.call = call i32 @_CGet.Optional.Core.18012f5191ea64dc(ptr %.loc17_19.5.temp), !dbg !8 // CHECK:STDOUT: call void @_CG.Main(i32 %Optional.Get.call), !dbg !9 // CHECK:STDOUT: br label %for.next, !dbg !10 // CHECK:STDOUT: // CHECK:STDOUT: for.done: ; preds = %for.next -// CHECK:STDOUT: call void @"_COp.ab782c7eec490fc7:core.Destroy.Core"(ptr %.loc17_19.3.temp), !dbg !8 +// CHECK:STDOUT: call void @"_COp.ab782c7eec490fc7:core.Destroy.Core"(ptr %.loc17_19.5.temp), !dbg !8 // CHECK:STDOUT: call void @"_COp.5e27612b9dd31a14:core.Destroy.Core"(ptr %var), !dbg !8 // CHECK:STDOUT: call void @"_COp.3a5df7cec745952b:core.Destroy.Core"(ptr @array), !dbg !7 // CHECK:STDOUT: ret void, !dbg !11 // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: declare void @"_COp.1155b488c23b5086:core.Destroy.Core"(ptr) +// CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define weak_odr void @"_COp.5e27612b9dd31a14:core.Destroy.Core"(ptr %self) #0 !dbg !12 { // CHECK:STDOUT: entry: @@ -339,7 +341,7 @@ fn F() { // CHECK:STDOUT: !112 = !{!113, !114} // CHECK:STDOUT: !113 = !DILocalVariable(arg: 1, scope: !109, type: !15) // CHECK:STDOUT: !114 = !DILocalVariable(arg: 2, scope: !109, type: !15) -// CHECK:STDOUT: !115 = !DILocation(line: 4294967295, scope: !109) +// CHECK:STDOUT: !115 = !DILocation(line: 0, scope: !109) // CHECK:STDOUT: !116 = !DILocation(line: 331, column: 3, scope: !109) // CHECK:STDOUT: !117 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.5d6f3f3a4b44a8f1:OptionalStorage.Core.58016a73bff04416", scope: null, file: !69, line: 131, type: !88, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !118) // CHECK:STDOUT: !118 = !{!119} diff --git a/toolchain/lower/testdata/class/virtual.carbon b/toolchain/lower/testdata/class/virtual.carbon index 4e3dae86bc5f..d16b1503550b 100644 --- a/toolchain/lower/testdata/class/virtual.carbon +++ b/toolchain/lower/testdata/class/virtual.carbon @@ -1120,14 +1120,14 @@ fn Use() { // CHECK:STDOUT: define void @"_CF:thunk:Base.Main:Derived.Main"(ptr sret({}) %return, ptr %self, ptr %n) #1 !dbg !12 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %.loc17_52.2.temp = alloca {}, align 1, !dbg !16 -// CHECK:STDOUT: %.loc12_27.1.temp = alloca {}, align 1, !dbg !17 +// CHECK:STDOUT: %.5.temp = alloca {}, align 1, !dbg !17 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc17_52.2.temp), !dbg !16 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc12_27.1.temp), !dbg !17 -// CHECK:STDOUT: call void @"_CConvert.From.Main:ImplicitAs.a3bb440f6426a7d6.Core"(ptr %.loc12_27.1.temp, ptr %n), !dbg !17 -// CHECK:STDOUT: call void @_CF.Derived.Main(ptr %.loc17_52.2.temp, ptr %self, ptr %.loc12_27.1.temp), !dbg !16 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.5.temp), !dbg !17 +// CHECK:STDOUT: call void @"_CConvert.From.Main:ImplicitAs.a3bb440f6426a7d6.Core"(ptr %.5.temp, ptr %n), !dbg !17 +// CHECK:STDOUT: call void @_CF.Derived.Main(ptr %.loc17_52.2.temp, ptr %self, ptr %.5.temp), !dbg !16 // CHECK:STDOUT: call void @"_CConvert.From.Main:ImplicitAs.a3bb440f6426a7d6.Core"(ptr %return, ptr %.loc17_52.2.temp), !dbg !16 // CHECK:STDOUT: call void @"_COp.419398171642b7b7:core.Destroy.Core"(ptr %.loc17_52.2.temp), !dbg !16 -// CHECK:STDOUT: call void @"_COp.41ca6508118965ec:core.Destroy.Core"(ptr %.loc12_27.1.temp), !dbg !17 +// CHECK:STDOUT: call void @"_COp.41ca6508118965ec:core.Destroy.Core"(ptr %.5.temp), !dbg !17 // CHECK:STDOUT: ret void, !dbg !16 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1230,17 +1230,17 @@ fn Use() { // CHECK:STDOUT: !14 = !DILocalVariable(arg: 1, scope: !12, type: !7) // CHECK:STDOUT: !15 = !DILocalVariable(arg: 2, scope: !12, type: !7) // CHECK:STDOUT: !16 = !DILocation(line: 17, column: 3, scope: !12) -// CHECK:STDOUT: !17 = !DILocation(line: 12, column: 26, scope: !12) +// CHECK:STDOUT: !17 = !DILocation(line: 0, scope: !12) // CHECK:STDOUT: !18 = distinct !DISubprogram(name: "Op", linkageName: "_COp.419398171642b7b7:core.Destroy.Core", scope: null, file: !3, line: 17, type: !19, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !21) // CHECK:STDOUT: !19 = !DISubroutineType(types: !20) // CHECK:STDOUT: !20 = !{null, !7} // CHECK:STDOUT: !21 = !{!22} // CHECK:STDOUT: !22 = !DILocalVariable(arg: 1, scope: !18, type: !7) // CHECK:STDOUT: !23 = !DILocation(line: 17, column: 3, scope: !18) -// CHECK:STDOUT: !24 = distinct !DISubprogram(name: "Op", linkageName: "_COp.41ca6508118965ec:core.Destroy.Core", scope: null, file: !3, line: 12, type: !19, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !25) +// CHECK:STDOUT: !24 = distinct !DISubprogram(name: "Op", linkageName: "_COp.41ca6508118965ec:core.Destroy.Core", scope: null, file: !3, type: !19, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !25) // CHECK:STDOUT: !25 = !{!26} // CHECK:STDOUT: !26 = !DILocalVariable(arg: 1, scope: !24, type: !7) -// CHECK:STDOUT: !27 = !DILocation(line: 12, column: 26, scope: !24) +// CHECK:STDOUT: !27 = !DILocation(line: 0, scope: !24) // CHECK:STDOUT: !28 = distinct !DISubprogram(name: "Use", linkageName: "_CUse.Main", scope: null, file: !3, line: 22, type: !29, spFlags: DISPFlagDefinition, unit: !2) // CHECK:STDOUT: !29 = !DISubroutineType(types: !30) // CHECK:STDOUT: !30 = !{null} diff --git a/toolchain/lower/testdata/for/bindings.carbon b/toolchain/lower/testdata/for/bindings.carbon index db7800cb27e5..3688852070fd 100644 --- a/toolchain/lower/testdata/for/bindings.carbon +++ b/toolchain/lower/testdata/for/bindings.carbon @@ -90,6 +90,8 @@ fn For() { // CHECK:STDOUT: ret void, !dbg !26 // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: declare void @"_COp.1155b488c23b5086:core.Destroy.Core"(ptr) +// CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define weak_odr void @"_COp.5172fb5622df6926:core.Destroy.Core"(ptr %self) #0 !dbg !27 { // CHECK:STDOUT: entry: diff --git a/toolchain/lower/testdata/for/break_continue.carbon b/toolchain/lower/testdata/for/break_continue.carbon index 1967c4de1ec9..2878dfae5aa9 100644 --- a/toolchain/lower/testdata/for/break_continue.carbon +++ b/toolchain/lower/testdata/for/break_continue.carbon @@ -80,6 +80,8 @@ fn For() { // CHECK:STDOUT: // CHECK:STDOUT: declare void @_CRange.Core(ptr sret({ i32, i32 }), i32) // CHECK:STDOUT: +// CHECK:STDOUT: declare void @"_COp.1155b488c23b5086:core.Destroy.Core"(ptr) +// CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define weak_odr void @"_COp.5e27612b9dd31a14:core.Destroy.Core"(ptr %self) #0 !dbg !18 { // CHECK:STDOUT: entry: @@ -384,7 +386,7 @@ fn For() { // CHECK:STDOUT: !125 = !{!126, !127} // CHECK:STDOUT: !126 = !DILocalVariable(arg: 1, scope: !122, type: !22) // CHECK:STDOUT: !127 = !DILocalVariable(arg: 2, scope: !122, type: !22) -// CHECK:STDOUT: !128 = !DILocation(line: 4294967295, scope: !122) +// CHECK:STDOUT: !128 = !DILocation(line: 0, scope: !122) // CHECK:STDOUT: !129 = !DILocation(line: 331, column: 3, scope: !122) // CHECK:STDOUT: !130 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.5d6f3f3a4b44a8f1:OptionalStorage.Core.39417379e302314a", scope: null, file: !82, line: 131, type: !101, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !131) // CHECK:STDOUT: !131 = !{!132} diff --git a/toolchain/lower/testdata/for/for.carbon b/toolchain/lower/testdata/for/for.carbon index 5ee397487a28..ea61a4c507a0 100644 --- a/toolchain/lower/testdata/for/for.carbon +++ b/toolchain/lower/testdata/for/for.carbon @@ -68,6 +68,8 @@ fn For() { // CHECK:STDOUT: // CHECK:STDOUT: declare void @_CRange.Core(ptr sret({ i32, i32 }), i32) // CHECK:STDOUT: +// CHECK:STDOUT: declare void @"_COp.1155b488c23b5086:core.Destroy.Core"(ptr) +// CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define weak_odr void @"_COp.5e27612b9dd31a14:core.Destroy.Core"(ptr %self) #0 !dbg !14 { // CHECK:STDOUT: entry: @@ -368,7 +370,7 @@ fn For() { // CHECK:STDOUT: !121 = !{!122, !123} // CHECK:STDOUT: !122 = !DILocalVariable(arg: 1, scope: !118, type: !18) // CHECK:STDOUT: !123 = !DILocalVariable(arg: 2, scope: !118, type: !18) -// CHECK:STDOUT: !124 = !DILocation(line: 4294967295, scope: !118) +// CHECK:STDOUT: !124 = !DILocation(line: 0, scope: !118) // CHECK:STDOUT: !125 = !DILocation(line: 331, column: 3, scope: !118) // CHECK:STDOUT: !126 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.5d6f3f3a4b44a8f1:OptionalStorage.Core.39417379e302314a", scope: null, file: !78, line: 131, type: !97, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !127) // CHECK:STDOUT: !127 = !{!128} diff --git a/toolchain/lower/testdata/function/generic/call_basic.carbon b/toolchain/lower/testdata/function/generic/call_basic.carbon index ba6040cf2993..f0857ad387fa 100644 --- a/toolchain/lower/testdata/function/generic/call_basic.carbon +++ b/toolchain/lower/testdata/function/generic/call_basic.carbon @@ -124,26 +124,26 @@ fn M() { // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define linkonce_odr i32 @_CG.Main.58016a73bff04416(i32 %x) #0 !dbg !46 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %.loc29_6.2.temp = alloca i32, align 4, !dbg !51 -// CHECK:STDOUT: %.loc31_8.2.temp = alloca i32, align 4, !dbg !52 -// CHECK:STDOUT: %.loc31_9.2.temp = alloca i32, align 4, !dbg !53 +// CHECK:STDOUT: %.loc29_6.3.temp = alloca i32, align 4, !dbg !51 +// CHECK:STDOUT: %.loc31_8.3.temp = alloca i32, align 4, !dbg !52 +// CHECK:STDOUT: %.loc31_9.3.temp = alloca i32, align 4, !dbg !53 // CHECK:STDOUT: %var_f64.var = alloca double, align 8, !dbg !54 // CHECK:STDOUT: %ptr_i32.var = alloca ptr, align 8, !dbg !55 // CHECK:STDOUT: %ptr_f64.var = alloca ptr, align 8, !dbg !56 // CHECK:STDOUT: %ptr_i8.var = alloca ptr, align 8, !dbg !57 // CHECK:STDOUT: %c.var = alloca {}, align 1, !dbg !58 -// CHECK:STDOUT: %.loc43_6.2.temp = alloca {}, align 1, !dbg !59 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc29_6.2.temp), !dbg !51 +// CHECK:STDOUT: %.loc43_6.3.temp = alloca {}, align 1, !dbg !59 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc29_6.3.temp), !dbg !51 // CHECK:STDOUT: %H.call.loc29 = call i32 @_CH.Main.5bd8d5767580997a(i32 %x), !dbg !51 -// CHECK:STDOUT: store i32 %H.call.loc29, ptr %.loc29_6.2.temp, align 4, !dbg !51 +// CHECK:STDOUT: store i32 %H.call.loc29, ptr %.loc29_6.3.temp, align 4, !dbg !51 // CHECK:STDOUT: %H.call.loc30 = call %type @_CH.Main.ee509b43cf4eb3c5(%type zeroinitializer), !dbg !60 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc31_8.2.temp), !dbg !52 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc31_8.3.temp), !dbg !52 // CHECK:STDOUT: %G.call = call i32 @_CG.Main.58016a73bff04416(i32 %x), !dbg !52 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc31_9.2.temp), !dbg !53 -// CHECK:STDOUT: store i32 %G.call, ptr %.loc31_8.2.temp, align 4, !dbg !52 -// CHECK:STDOUT: %.loc31_8.4 = load i32, ptr %.loc31_8.2.temp, align 4, !dbg !52 -// CHECK:STDOUT: %H.call.loc31 = call i32 @_CH.Main.5bd8d5767580997a(i32 %.loc31_8.4), !dbg !53 -// CHECK:STDOUT: store i32 %H.call.loc31, ptr %.loc31_9.2.temp, align 4, !dbg !53 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc31_9.3.temp), !dbg !53 +// CHECK:STDOUT: store i32 %G.call, ptr %.loc31_8.3.temp, align 4, !dbg !52 +// CHECK:STDOUT: %.loc31_8.5 = load i32, ptr %.loc31_8.3.temp, align 4, !dbg !52 +// CHECK:STDOUT: %H.call.loc31 = call i32 @_CH.Main.5bd8d5767580997a(i32 %.loc31_8.5), !dbg !53 +// CHECK:STDOUT: store i32 %H.call.loc31, ptr %.loc31_9.3.temp, align 4, !dbg !53 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %var_f64.var), !dbg !54 // CHECK:STDOUT: store double poison, ptr %var_f64.var, align 8, !dbg !54 // CHECK:STDOUT: %.loc35_5 = load double, ptr %var_f64.var, align 8, !dbg !61 @@ -161,14 +161,14 @@ fn M() { // CHECK:STDOUT: %.loc41_5 = load ptr, ptr %ptr_i8.var, align 8, !dbg !67 // CHECK:STDOUT: %H.call.loc41 = call ptr @_CH.Main.2621742a01881e29(ptr %.loc41_5), !dbg !68 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %c.var), !dbg !58 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc43_6.2.temp), !dbg !59 -// CHECK:STDOUT: call void @_CH.Main.4d597ec621e4ba00(ptr %.loc43_6.2.temp, ptr %c.var), !dbg !59 -// CHECK:STDOUT: call void @"_COp.807eb4f2d3ed7e54:core.Destroy.Core"(ptr %.loc43_6.2.temp), !dbg !59 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc43_6.3.temp), !dbg !59 +// CHECK:STDOUT: call void @_CH.Main.4d597ec621e4ba00(ptr %.loc43_6.3.temp, ptr %c.var), !dbg !59 +// CHECK:STDOUT: call void @"_COp.807eb4f2d3ed7e54:core.Destroy.Core"(ptr %.loc43_6.3.temp), !dbg !59 // CHECK:STDOUT: call void @"_COp.807eb4f2d3ed7e54:core.Destroy.Core"(ptr %c.var), !dbg !58 // CHECK:STDOUT: call void @"_COp.30d8007fdcc57f83:core.Destroy.Core"(ptr %var_f64.var), !dbg !54 -// CHECK:STDOUT: call void @"_COp.5e27612b9dd31a14:core.Destroy.Core"(ptr %.loc31_9.2.temp), !dbg !53 -// CHECK:STDOUT: call void @"_COp.5e27612b9dd31a14:core.Destroy.Core"(ptr %.loc31_8.2.temp), !dbg !52 -// CHECK:STDOUT: call void @"_COp.5e27612b9dd31a14:core.Destroy.Core"(ptr %.loc29_6.2.temp), !dbg !51 +// CHECK:STDOUT: call void @"_COp.5e27612b9dd31a14:core.Destroy.Core"(ptr %.loc31_9.3.temp), !dbg !53 +// CHECK:STDOUT: call void @"_COp.5e27612b9dd31a14:core.Destroy.Core"(ptr %.loc31_8.3.temp), !dbg !52 +// CHECK:STDOUT: call void @"_COp.5e27612b9dd31a14:core.Destroy.Core"(ptr %.loc29_6.3.temp), !dbg !51 // CHECK:STDOUT: ret i32 %x, !dbg !69 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -181,26 +181,26 @@ fn M() { // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define linkonce_odr double @_CG.Main.fa1f0912a5bbe922(double %x) #0 !dbg !74 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %.loc29_6.2.temp = alloca double, align 8, !dbg !77 -// CHECK:STDOUT: %.loc31_8.2.temp = alloca double, align 8, !dbg !78 -// CHECK:STDOUT: %.loc31_9.2.temp = alloca double, align 8, !dbg !79 +// CHECK:STDOUT: %.loc29_6.3.temp = alloca double, align 8, !dbg !77 +// CHECK:STDOUT: %.loc31_8.3.temp = alloca double, align 8, !dbg !78 +// CHECK:STDOUT: %.loc31_9.3.temp = alloca double, align 8, !dbg !79 // CHECK:STDOUT: %var_f64.var = alloca double, align 8, !dbg !80 // CHECK:STDOUT: %ptr_i32.var = alloca ptr, align 8, !dbg !81 // CHECK:STDOUT: %ptr_f64.var = alloca ptr, align 8, !dbg !82 // CHECK:STDOUT: %ptr_i8.var = alloca ptr, align 8, !dbg !83 // CHECK:STDOUT: %c.var = alloca {}, align 1, !dbg !84 -// CHECK:STDOUT: %.loc43_6.2.temp = alloca {}, align 1, !dbg !85 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc29_6.2.temp), !dbg !77 +// CHECK:STDOUT: %.loc43_6.3.temp = alloca {}, align 1, !dbg !85 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc29_6.3.temp), !dbg !77 // CHECK:STDOUT: %H.call.loc29 = call double @_CH.Main.c27b765f2159c9a0(double %x), !dbg !77 -// CHECK:STDOUT: store double %H.call.loc29, ptr %.loc29_6.2.temp, align 8, !dbg !77 +// CHECK:STDOUT: store double %H.call.loc29, ptr %.loc29_6.3.temp, align 8, !dbg !77 // CHECK:STDOUT: %H.call.loc30 = call %type @_CH.Main.ee509b43cf4eb3c5(%type zeroinitializer), !dbg !86 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc31_8.2.temp), !dbg !78 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc31_8.3.temp), !dbg !78 // CHECK:STDOUT: %G.call = call double @_CG.Main.fa1f0912a5bbe922(double %x), !dbg !78 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc31_9.2.temp), !dbg !79 -// CHECK:STDOUT: store double %G.call, ptr %.loc31_8.2.temp, align 8, !dbg !78 -// CHECK:STDOUT: %.loc31_8.4 = load double, ptr %.loc31_8.2.temp, align 8, !dbg !78 -// CHECK:STDOUT: %H.call.loc31 = call double @_CH.Main.c27b765f2159c9a0(double %.loc31_8.4), !dbg !79 -// CHECK:STDOUT: store double %H.call.loc31, ptr %.loc31_9.2.temp, align 8, !dbg !79 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc31_9.3.temp), !dbg !79 +// CHECK:STDOUT: store double %G.call, ptr %.loc31_8.3.temp, align 8, !dbg !78 +// CHECK:STDOUT: %.loc31_8.5 = load double, ptr %.loc31_8.3.temp, align 8, !dbg !78 +// CHECK:STDOUT: %H.call.loc31 = call double @_CH.Main.c27b765f2159c9a0(double %.loc31_8.5), !dbg !79 +// CHECK:STDOUT: store double %H.call.loc31, ptr %.loc31_9.3.temp, align 8, !dbg !79 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %var_f64.var), !dbg !80 // CHECK:STDOUT: store double poison, ptr %var_f64.var, align 8, !dbg !80 // CHECK:STDOUT: %.loc35_5 = load double, ptr %var_f64.var, align 8, !dbg !87 @@ -218,14 +218,14 @@ fn M() { // CHECK:STDOUT: %.loc41_5 = load ptr, ptr %ptr_i8.var, align 8, !dbg !93 // CHECK:STDOUT: %H.call.loc41 = call ptr @_CH.Main.2621742a01881e29(ptr %.loc41_5), !dbg !94 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %c.var), !dbg !84 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc43_6.2.temp), !dbg !85 -// CHECK:STDOUT: call void @_CH.Main.4d597ec621e4ba00(ptr %.loc43_6.2.temp, ptr %c.var), !dbg !85 -// CHECK:STDOUT: call void @"_COp.807eb4f2d3ed7e54:core.Destroy.Core"(ptr %.loc43_6.2.temp), !dbg !85 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc43_6.3.temp), !dbg !85 +// CHECK:STDOUT: call void @_CH.Main.4d597ec621e4ba00(ptr %.loc43_6.3.temp, ptr %c.var), !dbg !85 +// CHECK:STDOUT: call void @"_COp.807eb4f2d3ed7e54:core.Destroy.Core"(ptr %.loc43_6.3.temp), !dbg !85 // CHECK:STDOUT: call void @"_COp.807eb4f2d3ed7e54:core.Destroy.Core"(ptr %c.var), !dbg !84 // CHECK:STDOUT: call void @"_COp.30d8007fdcc57f83:core.Destroy.Core"(ptr %var_f64.var), !dbg !80 -// CHECK:STDOUT: call void @"_COp.30d8007fdcc57f83:core.Destroy.Core"(ptr %.loc31_9.2.temp), !dbg !79 -// CHECK:STDOUT: call void @"_COp.30d8007fdcc57f83:core.Destroy.Core"(ptr %.loc31_8.2.temp), !dbg !78 -// CHECK:STDOUT: call void @"_COp.30d8007fdcc57f83:core.Destroy.Core"(ptr %.loc29_6.2.temp), !dbg !77 +// CHECK:STDOUT: call void @"_COp.30d8007fdcc57f83:core.Destroy.Core"(ptr %.loc31_9.3.temp), !dbg !79 +// CHECK:STDOUT: call void @"_COp.30d8007fdcc57f83:core.Destroy.Core"(ptr %.loc31_8.3.temp), !dbg !78 +// CHECK:STDOUT: call void @"_COp.30d8007fdcc57f83:core.Destroy.Core"(ptr %.loc29_6.3.temp), !dbg !77 // CHECK:STDOUT: ret double %x, !dbg !95 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/lower/testdata/function/generic/call_basic_depth.carbon b/toolchain/lower/testdata/function/generic/call_basic_depth.carbon index 33021c3d6f44..3d51a8f58c27 100644 --- a/toolchain/lower/testdata/function/generic/call_basic_depth.carbon +++ b/toolchain/lower/testdata/function/generic/call_basic_depth.carbon @@ -77,12 +77,12 @@ fn M() -> i32 { // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define linkonce_odr i32 @_CG.Main.58016a73bff04416(i32 %x) #0 !dbg !27 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %.loc25_6.2.temp = alloca i32, align 4, !dbg !32 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc25_6.2.temp), !dbg !32 +// CHECK:STDOUT: %.loc25_6.3.temp = alloca i32, align 4, !dbg !32 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc25_6.3.temp), !dbg !32 // CHECK:STDOUT: %H.call = call i32 @_CH.Main.5bd8d5767580997a(i32 %x), !dbg !32 -// CHECK:STDOUT: store i32 %H.call, ptr %.loc25_6.2.temp, align 4, !dbg !32 +// CHECK:STDOUT: store i32 %H.call, ptr %.loc25_6.3.temp, align 4, !dbg !32 // CHECK:STDOUT: call void @_CF.Main.84588f41d61dafba(i32 %x), !dbg !33 -// CHECK:STDOUT: call void @"_COp.5e27612b9dd31a14:core.Destroy.Core"(ptr %.loc25_6.2.temp), !dbg !32 +// CHECK:STDOUT: call void @"_COp.5e27612b9dd31a14:core.Destroy.Core"(ptr %.loc25_6.3.temp), !dbg !32 // CHECK:STDOUT: ret i32 %x, !dbg !34 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/lower/testdata/function/generic/call_deref_ptr.carbon b/toolchain/lower/testdata/function/generic/call_deref_ptr.carbon index d8e1eaf66941..fc29ba573e91 100644 --- a/toolchain/lower/testdata/function/generic/call_deref_ptr.carbon +++ b/toolchain/lower/testdata/function/generic/call_deref_ptr.carbon @@ -101,24 +101,24 @@ fn M() { // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define linkonce_odr void @_CB.Main.58016a73bff04416(ptr %x) #0 !dbg !46 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %.loc27_7.2.temp = alloca i32, align 4, !dbg !49 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc27_7.2.temp), !dbg !49 +// CHECK:STDOUT: %.loc27_7.3.temp = alloca i32, align 4, !dbg !49 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc27_7.3.temp), !dbg !49 // CHECK:STDOUT: %.loc27_5.2 = load i32, ptr %x, align 4, !dbg !50 // CHECK:STDOUT: %D.call = call i32 @_CD.Main.5bd8d5767580997a(i32 %.loc27_5.2), !dbg !49 -// CHECK:STDOUT: store i32 %D.call, ptr %.loc27_7.2.temp, align 4, !dbg !49 -// CHECK:STDOUT: call void @"_COp.5e27612b9dd31a14:core.Destroy.Core"(ptr %.loc27_7.2.temp), !dbg !49 +// CHECK:STDOUT: store i32 %D.call, ptr %.loc27_7.3.temp, align 4, !dbg !49 +// CHECK:STDOUT: call void @"_COp.5e27612b9dd31a14:core.Destroy.Core"(ptr %.loc27_7.3.temp), !dbg !49 // CHECK:STDOUT: ret void, !dbg !51 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define linkonce_odr void @_CB.Main.fa1f0912a5bbe922(ptr %x) #0 !dbg !52 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %.loc27_7.2.temp = alloca double, align 8, !dbg !55 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc27_7.2.temp), !dbg !55 +// CHECK:STDOUT: %.loc27_7.3.temp = alloca double, align 8, !dbg !55 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc27_7.3.temp), !dbg !55 // CHECK:STDOUT: %.loc27_5.2 = load double, ptr %x, align 8, !dbg !56 // CHECK:STDOUT: %D.call = call double @_CD.Main.c27b765f2159c9a0(double %.loc27_5.2), !dbg !55 -// CHECK:STDOUT: store double %D.call, ptr %.loc27_7.2.temp, align 8, !dbg !55 -// CHECK:STDOUT: call void @"_COp.30d8007fdcc57f83:core.Destroy.Core"(ptr %.loc27_7.2.temp), !dbg !55 +// CHECK:STDOUT: store double %D.call, ptr %.loc27_7.3.temp, align 8, !dbg !55 +// CHECK:STDOUT: call void @"_COp.30d8007fdcc57f83:core.Destroy.Core"(ptr %.loc27_7.3.temp), !dbg !55 // CHECK:STDOUT: ret void, !dbg !57 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/lower/testdata/function/generic/call_different_specific.carbon b/toolchain/lower/testdata/function/generic/call_different_specific.carbon index 100aa9f675ca..bec304385c26 100644 --- a/toolchain/lower/testdata/function/generic/call_different_specific.carbon +++ b/toolchain/lower/testdata/function/generic/call_different_specific.carbon @@ -94,24 +94,24 @@ fn M(ptr_i32: i32*, ptr_f64: f64*) { // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define linkonce_odr void @_CB.Main.58016a73bff04416(ptr %x) #0 !dbg !45 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %.loc34_7.2.temp = alloca i32, align 4, !dbg !48 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc34_7.2.temp), !dbg !48 +// CHECK:STDOUT: %.loc34_7.3.temp = alloca i32, align 4, !dbg !48 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc34_7.3.temp), !dbg !48 // CHECK:STDOUT: %.loc34_5.2 = load i32, ptr %x, align 4, !dbg !49 // CHECK:STDOUT: %D.call = call i32 @_CD.Main.5bd8d5767580997a(i32 %.loc34_5.2), !dbg !48 -// CHECK:STDOUT: store i32 %D.call, ptr %.loc34_7.2.temp, align 4, !dbg !48 -// CHECK:STDOUT: call void @"_COp.5e27612b9dd31a14:core.Destroy.Core"(ptr %.loc34_7.2.temp), !dbg !48 +// CHECK:STDOUT: store i32 %D.call, ptr %.loc34_7.3.temp, align 4, !dbg !48 +// CHECK:STDOUT: call void @"_COp.5e27612b9dd31a14:core.Destroy.Core"(ptr %.loc34_7.3.temp), !dbg !48 // CHECK:STDOUT: ret void, !dbg !50 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define linkonce_odr void @_CB.Main.fa1f0912a5bbe922(ptr %x) #0 !dbg !51 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %.loc34_7.2.temp = alloca double, align 8, !dbg !54 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc34_7.2.temp), !dbg !54 +// CHECK:STDOUT: %.loc34_7.3.temp = alloca double, align 8, !dbg !54 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc34_7.3.temp), !dbg !54 // CHECK:STDOUT: %.loc34_5.2 = load double, ptr %x, align 8, !dbg !55 // CHECK:STDOUT: %D.call = call double @_CD.Main.c27b765f2159c9a0(double %.loc34_5.2), !dbg !54 -// CHECK:STDOUT: store double %D.call, ptr %.loc34_7.2.temp, align 8, !dbg !54 -// CHECK:STDOUT: call void @"_COp.30d8007fdcc57f83:core.Destroy.Core"(ptr %.loc34_7.2.temp), !dbg !54 +// CHECK:STDOUT: store double %D.call, ptr %.loc34_7.3.temp, align 8, !dbg !54 +// CHECK:STDOUT: call void @"_COp.30d8007fdcc57f83:core.Destroy.Core"(ptr %.loc34_7.3.temp), !dbg !54 // CHECK:STDOUT: ret void, !dbg !56 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/lower/testdata/function/generic/call_recursive_basic.carbon b/toolchain/lower/testdata/function/generic/call_recursive_basic.carbon index 3c9fd3c7e7dd..0d3a443ff0a3 100644 --- a/toolchain/lower/testdata/function/generic/call_recursive_basic.carbon +++ b/toolchain/lower/testdata/function/generic/call_recursive_basic.carbon @@ -60,7 +60,7 @@ fn M() { // CHECK:STDOUT: %ptr_i32.var = alloca ptr, align 8, !dbg !16 // CHECK:STDOUT: %ptr_f64.var = alloca ptr, align 8, !dbg !17 // CHECK:STDOUT: %c.var = alloca {}, align 1, !dbg !18 -// CHECK:STDOUT: %.loc40_9.2.temp = alloca {}, align 1, !dbg !19 +// CHECK:STDOUT: %.loc40_9.3.temp = alloca {}, align 1, !dbg !19 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %n.var), !dbg !14 // CHECK:STDOUT: store i32 0, ptr %n.var, align 4, !dbg !14 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %m.var), !dbg !15 @@ -79,9 +79,9 @@ fn M() { // CHECK:STDOUT: %F.call.loc37 = call ptr @_CF.Main.2621742a01881e29(ptr %.loc37_5, i32 0), !dbg !27 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %c.var), !dbg !18 // CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 1 %c.var, ptr align 1 @C.val.loc15_43, i64 0, i1 false), !dbg !18 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc40_9.2.temp), !dbg !19 -// CHECK:STDOUT: call void @_CF.Main.4d597ec621e4ba00(ptr %.loc40_9.2.temp, ptr %c.var, i32 0), !dbg !19 -// CHECK:STDOUT: call void @"_COp.807eb4f2d3ed7e54:core.Destroy.Core"(ptr %.loc40_9.2.temp), !dbg !19 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc40_9.3.temp), !dbg !19 +// CHECK:STDOUT: call void @_CF.Main.4d597ec621e4ba00(ptr %.loc40_9.3.temp, ptr %c.var, i32 0), !dbg !19 +// CHECK:STDOUT: call void @"_COp.807eb4f2d3ed7e54:core.Destroy.Core"(ptr %.loc40_9.3.temp), !dbg !19 // CHECK:STDOUT: call void @"_COp.807eb4f2d3ed7e54:core.Destroy.Core"(ptr %c.var), !dbg !18 // CHECK:STDOUT: call void @"_COp.30d8007fdcc57f83:core.Destroy.Core"(ptr %m.var), !dbg !15 // CHECK:STDOUT: call void @"_COp.5e27612b9dd31a14:core.Destroy.Core"(ptr %n.var), !dbg !14 diff --git a/toolchain/lower/testdata/impl/import_thunk.carbon b/toolchain/lower/testdata/impl/import_thunk.carbon index c6f74a6e16c2..f91acb3845d1 100644 --- a/toolchain/lower/testdata/impl/import_thunk.carbon +++ b/toolchain/lower/testdata/impl/import_thunk.carbon @@ -103,14 +103,14 @@ fn Test(a: A) -> C { // CHECK:STDOUT: define void @"_CF:thunk:I.4b54445be9b10a0e.Main:61ea2aba74ab3bf1:I.Main"(ptr sret({ i32 }) %return, ptr %a) #1 !dbg !25 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %.loc20_19.1.temp = alloca { i32 }, align 4, !dbg !28 -// CHECK:STDOUT: %.loc16_9.1.temp = alloca { i32 }, align 4, !dbg !29 +// CHECK:STDOUT: %.4.temp = alloca { i32 }, align 4, !dbg !29 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc20_19.1.temp), !dbg !28 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc16_9.1.temp), !dbg !29 -// CHECK:STDOUT: call void @"_CConvert.A.Main:ImplicitAs.a6a60dfee2d7d273.Core"(ptr %.loc16_9.1.temp, ptr %a), !dbg !29 -// CHECK:STDOUT: call void @"_CF.61ea2aba74ab3bf1:I.Main"(ptr %.loc20_19.1.temp, ptr %.loc16_9.1.temp), !dbg !28 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.4.temp), !dbg !29 +// CHECK:STDOUT: call void @"_CConvert.A.Main:ImplicitAs.a6a60dfee2d7d273.Core"(ptr %.4.temp, ptr %a), !dbg !29 +// CHECK:STDOUT: call void @"_CF.61ea2aba74ab3bf1:I.Main"(ptr %.loc20_19.1.temp, ptr %.4.temp), !dbg !28 // CHECK:STDOUT: call void @"_CConvert.B.Main:ImplicitAs.9522ff908e97e267.Core"(ptr %return, ptr %.loc20_19.1.temp), !dbg !28 // CHECK:STDOUT: call void @"_COp.6c3865e9cbd9f6de:core.Destroy.Core"(ptr %.loc20_19.1.temp), !dbg !28 -// CHECK:STDOUT: call void @"_COp.6c3865e9cbd9f6de:core.Destroy.Core"(ptr %.loc16_9.1.temp), !dbg !29 +// CHECK:STDOUT: call void @"_COp.6c3865e9cbd9f6de:core.Destroy.Core"(ptr %.4.temp), !dbg !29 // CHECK:STDOUT: ret void, !dbg !28 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -175,7 +175,7 @@ fn Test(a: A) -> C { // CHECK:STDOUT: !26 = !{!27} // CHECK:STDOUT: !27 = !DILocalVariable(arg: 1, scope: !25, type: !7) // CHECK:STDOUT: !28 = !DILocation(line: 20, column: 3, scope: !25) -// CHECK:STDOUT: !29 = !DILocation(line: 16, column: 8, scope: !25) +// CHECK:STDOUT: !29 = !DILocation(line: 0, scope: !25) // CHECK:STDOUT: !30 = distinct !DISubprogram(name: "Op", linkageName: "_COp.5e27612b9dd31a14:core.Destroy.Core", scope: null, file: !3, line: 20, type: !31, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !34) // CHECK:STDOUT: !31 = !DISubroutineType(types: !32) // CHECK:STDOUT: !32 = !{null, !33} @@ -299,14 +299,14 @@ fn Test(a: A) -> C { // CHECK:STDOUT: define void @"_CF:thunk:I.c81631f865470482.Main:X.Main:I.Main"(ptr sret({ i32 }) %return, ptr %a) #1 !dbg !13 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %.loc9_19.1.temp = alloca { i32 }, align 4, !dbg !16 -// CHECK:STDOUT: %.2.temp = alloca { i32 }, align 4 +// CHECK:STDOUT: %.4.temp = alloca { i32 }, align 4, !dbg !17 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc9_19.1.temp), !dbg !16 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.2.temp) -// CHECK:STDOUT: call void @"_CConvert.A.Main:ImplicitAs.a6a60dfee2d7d273.Core"(ptr %.2.temp, ptr %a), !dbg !17 -// CHECK:STDOUT: call void @"_CF.X.Main:I.Main"(ptr %.loc9_19.1.temp, ptr %.2.temp), !dbg !16 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.4.temp), !dbg !17 +// CHECK:STDOUT: call void @"_CConvert.A.Main:ImplicitAs.a6a60dfee2d7d273.Core"(ptr %.4.temp, ptr %a), !dbg !17 +// CHECK:STDOUT: call void @"_CF.X.Main:I.Main"(ptr %.loc9_19.1.temp, ptr %.4.temp), !dbg !16 // CHECK:STDOUT: call void @"_CConvert.B.Main:ImplicitAs.9522ff908e97e267.Core"(ptr %return, ptr %.loc9_19.1.temp), !dbg !16 // CHECK:STDOUT: call void @"_COp.6c3865e9cbd9f6de:core.Destroy.Core"(ptr %.loc9_19.1.temp), !dbg !16 -// CHECK:STDOUT: call void @"_COp.6c3865e9cbd9f6de:core.Destroy.Core"(ptr %.2.temp), !dbg !17 +// CHECK:STDOUT: call void @"_COp.6c3865e9cbd9f6de:core.Destroy.Core"(ptr %.4.temp), !dbg !17 // CHECK:STDOUT: ret void, !dbg !16 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -363,7 +363,7 @@ fn Test(a: A) -> C { // CHECK:STDOUT: !14 = !{!15} // CHECK:STDOUT: !15 = !DILocalVariable(arg: 1, scope: !13, type: !7) // CHECK:STDOUT: !16 = !DILocation(line: 9, column: 3, scope: !13) -// CHECK:STDOUT: !17 = !DILocation(line: 4294967295, scope: !13) +// CHECK:STDOUT: !17 = !DILocation(line: 0, scope: !13) // CHECK:STDOUT: !18 = distinct !DISubprogram(name: "Op", linkageName: "_COp.5e27612b9dd31a14:core.Destroy.Core", scope: null, file: !3, line: 9, type: !19, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !22) // CHECK:STDOUT: !19 = !DISubroutineType(types: !20) // CHECK:STDOUT: !20 = !{null, !21} diff --git a/toolchain/lower/testdata/impl/thunk.carbon b/toolchain/lower/testdata/impl/thunk.carbon index 70459e607f0e..41af934777c0 100644 --- a/toolchain/lower/testdata/impl/thunk.carbon +++ b/toolchain/lower/testdata/impl/thunk.carbon @@ -107,14 +107,14 @@ fn CallCallGeneric(c: C(()), b: B) -> A { // CHECK:STDOUT: define void @"_CF:thunk:I.4b54445be9b10a0e.Main:61ea2aba74ab3bf1:I.Main"(ptr sret({ i32 }) %return, ptr %a) #1 !dbg !25 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %.loc20_19.1.temp = alloca { i32 }, align 4, !dbg !28 -// CHECK:STDOUT: %.loc16_9.1.temp = alloca { i32 }, align 4, !dbg !29 +// CHECK:STDOUT: %.4.temp = alloca { i32 }, align 4, !dbg !29 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc20_19.1.temp), !dbg !28 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc16_9.1.temp), !dbg !29 -// CHECK:STDOUT: call void @"_CConvert.A.Main:ImplicitAs.a6a60dfee2d7d273.Core"(ptr %.loc16_9.1.temp, ptr %a), !dbg !29 -// CHECK:STDOUT: call void @"_CF.61ea2aba74ab3bf1:I.Main"(ptr %.loc20_19.1.temp, ptr %.loc16_9.1.temp), !dbg !28 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.4.temp), !dbg !29 +// CHECK:STDOUT: call void @"_CConvert.A.Main:ImplicitAs.a6a60dfee2d7d273.Core"(ptr %.4.temp, ptr %a), !dbg !29 +// CHECK:STDOUT: call void @"_CF.61ea2aba74ab3bf1:I.Main"(ptr %.loc20_19.1.temp, ptr %.4.temp), !dbg !28 // CHECK:STDOUT: call void @"_CConvert.B.Main:ImplicitAs.9522ff908e97e267.Core"(ptr %return, ptr %.loc20_19.1.temp), !dbg !28 // CHECK:STDOUT: call void @"_COp.6c3865e9cbd9f6de:core.Destroy.Core"(ptr %.loc20_19.1.temp), !dbg !28 -// CHECK:STDOUT: call void @"_COp.6c3865e9cbd9f6de:core.Destroy.Core"(ptr %.loc16_9.1.temp), !dbg !29 +// CHECK:STDOUT: call void @"_COp.6c3865e9cbd9f6de:core.Destroy.Core"(ptr %.4.temp), !dbg !29 // CHECK:STDOUT: ret void, !dbg !28 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -196,7 +196,7 @@ fn CallCallGeneric(c: C(()), b: B) -> A { // CHECK:STDOUT: !26 = !{!27} // CHECK:STDOUT: !27 = !DILocalVariable(arg: 1, scope: !25, type: !7) // CHECK:STDOUT: !28 = !DILocation(line: 20, column: 3, scope: !25) -// CHECK:STDOUT: !29 = !DILocation(line: 16, column: 8, scope: !25) +// CHECK:STDOUT: !29 = !DILocation(line: 0, scope: !25) // CHECK:STDOUT: !30 = distinct !DISubprogram(name: "Op", linkageName: "_COp.5e27612b9dd31a14:core.Destroy.Core", scope: null, file: !3, line: 20, type: !31, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !34) // CHECK:STDOUT: !31 = !DISubroutineType(types: !32) // CHECK:STDOUT: !32 = !{null, !33} @@ -293,14 +293,14 @@ fn CallCallGeneric(c: C(()), b: B) -> A { // CHECK:STDOUT: define linkonce_odr void @"_CF:thunk:I.eb750e4e5cfbbe32.Main:C.eb057aa32837c84e.Main:I.eb057aa32837c84e.Main.e43630e9a6c38c3f"(ptr sret({}) %return, ptr %self, ptr %x) #2 !dbg !47 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %.loc18_32.2.temp = alloca {}, align 1, !dbg !51 -// CHECK:STDOUT: %.loc12_15.1.temp = alloca {}, align 1, !dbg !52 +// CHECK:STDOUT: %.6.temp = alloca {}, align 1, !dbg !52 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc18_32.2.temp), !dbg !51 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc12_15.1.temp), !dbg !52 -// CHECK:STDOUT: call void @"_CConvert.B.Main:ImplicitAs.bd4fb75a414fe858.Core"(ptr %.loc12_15.1.temp, ptr %x), !dbg !52 -// CHECK:STDOUT: call void @"_CF.C.eb057aa32837c84e.Main:I.eb057aa32837c84e.Main.e43630e9a6c38c3f"(ptr %.loc18_32.2.temp, ptr %self, ptr %.loc12_15.1.temp), !dbg !51 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.6.temp), !dbg !52 +// CHECK:STDOUT: call void @"_CConvert.B.Main:ImplicitAs.bd4fb75a414fe858.Core"(ptr %.6.temp, ptr %x), !dbg !52 +// CHECK:STDOUT: call void @"_CF.C.eb057aa32837c84e.Main:I.eb057aa32837c84e.Main.e43630e9a6c38c3f"(ptr %.loc18_32.2.temp, ptr %self, ptr %.6.temp), !dbg !51 // CHECK:STDOUT: call void @"_CConvert.B.Main:ImplicitAs.bd4fb75a414fe858.Core"(ptr %return, ptr %.loc18_32.2.temp), !dbg !51 // CHECK:STDOUT: call void @"_COp.6c3865e9cbd9f6de:core.Destroy.Core"(ptr %.loc18_32.2.temp), !dbg !51 -// CHECK:STDOUT: call void @"_COp.68011419f123494e:core.Destroy.Core"(ptr %.loc12_15.1.temp), !dbg !52 +// CHECK:STDOUT: call void @"_COp.68011419f123494e:core.Destroy.Core"(ptr %.6.temp), !dbg !52 // CHECK:STDOUT: ret void, !dbg !51 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -331,10 +331,10 @@ fn CallCallGeneric(c: C(()), b: B) -> A { // CHECK:STDOUT: !14 = !{!15} // CHECK:STDOUT: !15 = !DILocalVariable(arg: 1, scope: !11, type: !7) // CHECK:STDOUT: !16 = !DILocation(line: 18, column: 3, scope: !11) -// CHECK:STDOUT: !17 = distinct !DISubprogram(name: "Op", linkageName: "_COp.68011419f123494e:core.Destroy.Core", scope: null, file: !3, line: 12, type: !12, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !18) +// CHECK:STDOUT: !17 = distinct !DISubprogram(name: "Op", linkageName: "_COp.68011419f123494e:core.Destroy.Core", scope: null, file: !3, type: !12, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !18) // CHECK:STDOUT: !18 = !{!19} // CHECK:STDOUT: !19 = !DILocalVariable(arg: 1, scope: !17, type: !7) -// CHECK:STDOUT: !20 = !DILocation(line: 12, column: 14, scope: !17) +// CHECK:STDOUT: !20 = !DILocation(line: 0, scope: !17) // CHECK:STDOUT: !21 = distinct !DISubprogram(name: "Call", linkageName: "_CCall.Main", scope: null, file: !3, line: 21, type: !22, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !24) // CHECK:STDOUT: !22 = !DISubroutineType(types: !23) // CHECK:STDOUT: !23 = !{!7, !7, !7} @@ -366,4 +366,4 @@ fn CallCallGeneric(c: C(()), b: B) -> A { // CHECK:STDOUT: !49 = !DILocalVariable(arg: 1, scope: !47, type: !7) // CHECK:STDOUT: !50 = !DILocalVariable(arg: 2, scope: !47, type: !7) // CHECK:STDOUT: !51 = !DILocation(line: 18, column: 3, scope: !47) -// CHECK:STDOUT: !52 = !DILocation(line: 12, column: 14, scope: !47) +// CHECK:STDOUT: !52 = !DILocation(line: 0, scope: !47) diff --git a/toolchain/lower/testdata/interop/cpp/operators.carbon b/toolchain/lower/testdata/interop/cpp/operators.carbon index 5c88f3496334..ce46e8d55fa8 100644 --- a/toolchain/lower/testdata/interop/cpp/operators.carbon +++ b/toolchain/lower/testdata/interop/cpp/operators.carbon @@ -147,20 +147,20 @@ fn Driver(x: Cpp.A, y: Cpp.A) { // CHECK:STDOUT: ; Function Attrs: alwaysinline nounwind // CHECK:STDOUT: define i1 @"_CEqual:thunk:EqWith.ffb401eeee8c4872.Core:Cpp"(ptr %self, ptr %other) #2 !dbg !28 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %.3.temp = alloca i1, align 1, !dbg !34 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.3.temp), !dbg !34 -// CHECK:STDOUT: call void @_Zeq1AS_.carbon_thunk.__(ptr %self, ptr %other, ptr %.3.temp), !dbg !34 -// CHECK:STDOUT: %0 = load i1, ptr %.3.temp, align 1, !dbg !34 +// CHECK:STDOUT: %.6.temp = alloca i1, align 1, !dbg !34 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.6.temp), !dbg !34 +// CHECK:STDOUT: call void @_Zeq1AS_.carbon_thunk.__(ptr %self, ptr %other, ptr %.6.temp), !dbg !34 +// CHECK:STDOUT: %0 = load i1, ptr %.6.temp, align 1, !dbg !34 // CHECK:STDOUT: ret i1 %0, !dbg !34 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline nounwind // CHECK:STDOUT: define i1 @"_CNotEqual:thunk:EqWith.ffb401eeee8c4872.Core:Cpp"(ptr %self, ptr %other) #2 !dbg !35 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %.3.temp = alloca i1, align 1, !dbg !39 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.3.temp), !dbg !39 -// CHECK:STDOUT: call void @_Zne1AS_.carbon_thunk.__(ptr %self, ptr %other, ptr %.3.temp), !dbg !39 -// CHECK:STDOUT: %0 = load i1, ptr %.3.temp, align 1, !dbg !39 +// CHECK:STDOUT: %.6.temp = alloca i1, align 1, !dbg !39 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.6.temp), !dbg !39 +// CHECK:STDOUT: call void @_Zne1AS_.carbon_thunk.__(ptr %self, ptr %other, ptr %.6.temp), !dbg !39 +// CHECK:STDOUT: %0 = load i1, ptr %.6.temp, align 1, !dbg !39 // CHECK:STDOUT: ret i1 %0, !dbg !39 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -409,40 +409,40 @@ fn Driver(x: Cpp.A, y: Cpp.A) { // CHECK:STDOUT: ; Function Attrs: alwaysinline nounwind // CHECK:STDOUT: define i1 @"_CLess:thunk:OrderedWith.92c0df05bd55f97a.Core:Cpp"(ptr %self, ptr %other) #2 !dbg !28 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %.3.temp = alloca i1, align 1, !dbg !34 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.3.temp), !dbg !34 -// CHECK:STDOUT: call void @_Zlt1AS_.carbon_thunk.__(ptr %self, ptr %other, ptr %.3.temp), !dbg !34 -// CHECK:STDOUT: %0 = load i1, ptr %.3.temp, align 1, !dbg !34 +// CHECK:STDOUT: %.6.temp = alloca i1, align 1, !dbg !34 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.6.temp), !dbg !34 +// CHECK:STDOUT: call void @_Zlt1AS_.carbon_thunk.__(ptr %self, ptr %other, ptr %.6.temp), !dbg !34 +// CHECK:STDOUT: %0 = load i1, ptr %.6.temp, align 1, !dbg !34 // CHECK:STDOUT: ret i1 %0, !dbg !34 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline nounwind // CHECK:STDOUT: define i1 @"_CLessOrEquivalent:thunk:OrderedWith.92c0df05bd55f97a.Core:Cpp"(ptr %self, ptr %other) #2 !dbg !35 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %.3.temp = alloca i1, align 1, !dbg !39 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.3.temp), !dbg !39 -// CHECK:STDOUT: call void @_Zle1AS_.carbon_thunk.__(ptr %self, ptr %other, ptr %.3.temp), !dbg !39 -// CHECK:STDOUT: %0 = load i1, ptr %.3.temp, align 1, !dbg !39 +// CHECK:STDOUT: %.6.temp = alloca i1, align 1, !dbg !39 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.6.temp), !dbg !39 +// CHECK:STDOUT: call void @_Zle1AS_.carbon_thunk.__(ptr %self, ptr %other, ptr %.6.temp), !dbg !39 +// CHECK:STDOUT: %0 = load i1, ptr %.6.temp, align 1, !dbg !39 // CHECK:STDOUT: ret i1 %0, !dbg !39 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline nounwind // CHECK:STDOUT: define i1 @"_CGreater:thunk:OrderedWith.92c0df05bd55f97a.Core:Cpp"(ptr %self, ptr %other) #2 !dbg !40 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %.3.temp = alloca i1, align 1, !dbg !44 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.3.temp), !dbg !44 -// CHECK:STDOUT: call void @_Zgt1AS_.carbon_thunk.__(ptr %self, ptr %other, ptr %.3.temp), !dbg !44 -// CHECK:STDOUT: %0 = load i1, ptr %.3.temp, align 1, !dbg !44 +// CHECK:STDOUT: %.6.temp = alloca i1, align 1, !dbg !44 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.6.temp), !dbg !44 +// CHECK:STDOUT: call void @_Zgt1AS_.carbon_thunk.__(ptr %self, ptr %other, ptr %.6.temp), !dbg !44 +// CHECK:STDOUT: %0 = load i1, ptr %.6.temp, align 1, !dbg !44 // CHECK:STDOUT: ret i1 %0, !dbg !44 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline nounwind // CHECK:STDOUT: define i1 @"_CGreaterOrEquivalent:thunk:OrderedWith.92c0df05bd55f97a.Core:Cpp"(ptr %self, ptr %other) #2 !dbg !45 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %.3.temp = alloca i1, align 1, !dbg !49 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.3.temp), !dbg !49 -// CHECK:STDOUT: call void @_Zge1AS_.carbon_thunk.__(ptr %self, ptr %other, ptr %.3.temp), !dbg !49 -// CHECK:STDOUT: %0 = load i1, ptr %.3.temp, align 1, !dbg !49 +// CHECK:STDOUT: %.6.temp = alloca i1, align 1, !dbg !49 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.6.temp), !dbg !49 +// CHECK:STDOUT: call void @_Zge1AS_.carbon_thunk.__(ptr %self, ptr %other, ptr %.6.temp), !dbg !49 +// CHECK:STDOUT: %0 = load i1, ptr %.6.temp, align 1, !dbg !49 // CHECK:STDOUT: ret i1 %0, !dbg !49 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/lower/testdata/operators/increment.carbon b/toolchain/lower/testdata/operators/increment.carbon index 13196ed4480a..cfc42ddd84a8 100644 --- a/toolchain/lower/testdata/operators/increment.carbon +++ b/toolchain/lower/testdata/operators/increment.carbon @@ -104,7 +104,7 @@ fn IncrSigned() { // CHECK:STDOUT: !26 = !{!27, !28} // CHECK:STDOUT: !27 = !DILocalVariable(arg: 1, scope: !23, type: !13) // CHECK:STDOUT: !28 = !DILocalVariable(arg: 2, scope: !23, type: !13) -// CHECK:STDOUT: !29 = !DILocation(line: 4294967295, scope: !23) +// CHECK:STDOUT: !29 = !DILocation(line: 0, scope: !23) // CHECK:STDOUT: !30 = !DILocation(line: 331, column: 3, scope: !23) // CHECK:STDOUT: !31 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.45e1f8de18643ddf:ImplicitAs.0bc6489996802dd4.Core.40372ba0ea03ef47", scope: null, file: !18, line: 64, type: !32, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !34) // CHECK:STDOUT: !32 = !DISubroutineType(types: !33) diff --git a/toolchain/lower/type.cpp b/toolchain/lower/type.cpp index f7f21aeaa362..b2d4ac5088f3 100644 --- a/toolchain/lower/type.cpp +++ b/toolchain/lower/type.cpp @@ -442,7 +442,6 @@ auto FunctionTypeInfoBuilder::TryHandleParameter( !param_type_id.AsConstantId().is_symbolic(), "Found symbolic type id after resolution when lowering type {0}.", param_pattern.type_id()); - auto param_kind = param_pattern.kind(); switch (param_kind) { diff --git a/toolchain/sem_ir/entity_with_params_base.h b/toolchain/sem_ir/entity_with_params_base.h index 2b8cf98a6ce8..c8c0a8933aac 100644 --- a/toolchain/sem_ir/entity_with_params_base.h +++ b/toolchain/sem_ir/entity_with_params_base.h @@ -105,10 +105,13 @@ struct EntityWithParamsBase { // A block containing, for each implicit parameter, a reference to the // instruction in the entity's pattern block that depends on all other - // pattern insts pertaining to that parameter. + // pattern insts pertaining to that parameter. `Empty` is used as a sentinel + // to indicate that parameter patterns exist, but are not yet known. InstBlockId implicit_param_patterns_id; // A block containing, for each element of the explicit parameter list tuple - // pattern, a reference to the root pattern inst for that element. + // pattern, a reference to the root pattern inst for that element. `Empty` is + // used as a sentinel to indicate that parameter patterns exist, but are not + // yet known. InstBlockId param_patterns_id; // True if declarations are `extern`. diff --git a/toolchain/sem_ir/inst_fingerprinter.cpp b/toolchain/sem_ir/inst_fingerprinter.cpp index 266165a538d8..928ecede3f3f 100644 --- a/toolchain/sem_ir/inst_fingerprinter.cpp +++ b/toolchain/sem_ir/inst_fingerprinter.cpp @@ -500,8 +500,12 @@ struct Worklist { // decl block don't change the identity of the declaration. } - auto Add(LabelId /*block_id*/) -> void { - CARBON_FATAL("Should never fingerprint a label"); + auto Add(LabelId block_id) -> void { + // TODO: Find a more stable way to assign fingerprints to labels. Possibly + // we could just number them sequentially, in the order we encounter them, + // but that would require a persistent cache to ensure we use the same + // number on subsequent encounters. + store->AddInteger(block_id.index); } auto Add(FacetTypeId facet_type_id) -> void { @@ -622,8 +626,16 @@ struct Worklist { store->AddInteger(arg.index); } + auto Add(ExprRegionId region_id) -> void { + auto region = sem_ir->expr_regions().Get(region_id); + for (auto block_id : region.block_ids) { + Add(block_id); + } + Add(region.result_id); + } + template - requires(SameAsOneOf) + requires(SameAsOneOf) auto Add(T /*arg*/) -> void { CARBON_FATAL("Unexpected instruction operand kind {0}", typeid(T).name()); } diff --git a/toolchain/sem_ir/pattern.cpp b/toolchain/sem_ir/pattern.cpp index 1084bdb7e3b8..fc46d6d25c63 100644 --- a/toolchain/sem_ir/pattern.cpp +++ b/toolchain/sem_ir/pattern.cpp @@ -15,14 +15,26 @@ namespace Carbon::SemIR { static auto GetUnwrapped(const File& sem_ir, InstId pattern_id) -> std::pair { auto inst_id = pattern_id; - auto inst = sem_ir.insts().Get(inst_id); - if (auto var_pattern = inst.TryAs()) { - inst_id = var_pattern->subpattern_id; - inst = sem_ir.insts().Get(inst_id); + while (true) { + auto inst = sem_ir.insts().Get(inst_id); + CARBON_KIND_SWITCH(inst) { + case CARBON_KIND_ANY(SemIR::AnyVarPattern, var_pattern): { + inst_id = var_pattern.subpattern_id; + break; + } + case CARBON_KIND(SemIR::SpecificConstant specific_constant): { + inst_id = specific_constant.inst_id; + break; + } + case CARBON_KIND(SemIR::ImportRefLoaded _): { + inst_id = sem_ir.constant_values().GetConstantInstId(inst_id); + break; + } + default: + return {inst_id, inst}; + } } - - return {inst_id, inst}; } // Returns the name and entity name introduced by the given instruction if it is diff --git a/toolchain/sem_ir/typed_insts.h b/toolchain/sem_ir/typed_insts.h index dc223be3399f..49c60c551cf7 100644 --- a/toolchain/sem_ir/typed_insts.h +++ b/toolchain/sem_ir/typed_insts.h @@ -669,6 +669,7 @@ struct ExprPattern { static constexpr auto Kind = InstKind::ExprPattern.Define( {.ir_name = "expr_pattern", .expr_category = ExprCategory::Pattern, + // TODO: Figure out how constant evaluation should work for ExprPatterns. .constant_kind = InstConstantKind::AlwaysUnique, .is_lowered = false}); @@ -1388,7 +1389,7 @@ struct OutParamPattern { static constexpr auto Kind = InstKind::OutParamPattern.Define( {.ir_name = "out_param_pattern", .expr_category = ExprCategory::Pattern, - .constant_kind = InstConstantKind::AlwaysUnique, + .constant_kind = InstConstantKind::Always, .is_lowered = false}); TypeId type_id; @@ -1498,7 +1499,7 @@ struct RefBindingPattern { InstKind::RefBindingPattern.Define( {.ir_name = "ref_binding_pattern", .expr_category = ExprCategory::Pattern, - .constant_kind = InstConstantKind::AlwaysUnique, + .constant_kind = InstConstantKind::Always, .is_lowered = false}); TypeId type_id; @@ -1538,7 +1539,7 @@ struct RefParamPattern { static constexpr auto Kind = InstKind::RefParamPattern.Define( {.ir_name = "ref_param_pattern", .expr_category = ExprCategory::Pattern, - .constant_kind = InstConstantKind::AlwaysUnique, + .constant_kind = InstConstantKind::Always, .is_lowered = false}); TypeId type_id; @@ -1565,7 +1566,7 @@ struct RefReturnPattern { static constexpr auto Kind = InstKind::RefReturnPattern.Define( {.ir_name = "ref_return_pattern", .expr_category = ExprCategory::Pattern, - .constant_kind = InstConstantKind::AlwaysUnique, + .constant_kind = InstConstantKind::Always, .is_lowered = false}); TypeId type_id; @@ -1770,7 +1771,7 @@ struct ReturnSlotPattern { InstKind::ReturnSlotPattern.Define( {.ir_name = "return_slot_pattern", .expr_category = ExprCategory::Pattern, - .constant_kind = InstConstantKind::AlwaysUnique, + .constant_kind = InstConstantKind::Always, .is_lowered = false}); // Always a PatternType whose scrutinee type is the return type of the @@ -1976,7 +1977,7 @@ struct SymbolicBindingPattern { InstKind::SymbolicBindingPattern.Define({ .ir_name = "symbolic_binding_pattern", .expr_category = ExprCategory::Pattern, - .constant_kind = InstConstantKind::AlwaysUnique, + .constant_kind = InstConstantKind::Always, .is_lowered = false, }); @@ -2055,7 +2056,7 @@ struct TuplePattern { InstKind::TuplePattern.Define( {.ir_name = "tuple_pattern", .expr_category = ExprCategory::Pattern, - .constant_kind = InstConstantKind::AlwaysUnique, + .constant_kind = InstConstantKind::Always, .is_lowered = false}); // Always a PatternType whose scrutinee type is a tuple of the scrutinee @@ -2226,7 +2227,7 @@ struct ValueBindingPattern { InstKind::ValueBindingPattern.Define( {.ir_name = "value_binding_pattern", .expr_category = ExprCategory::Pattern, - .constant_kind = InstConstantKind::AlwaysUnique, + .constant_kind = InstConstantKind::Always, .is_lowered = false}); TypeId type_id; @@ -2278,7 +2279,7 @@ struct ValueParamPattern { InstKind::ValueParamPattern.Define( {.ir_name = "value_param_pattern", .expr_category = ExprCategory::Pattern, - .constant_kind = InstConstantKind::AlwaysUnique, + .constant_kind = InstConstantKind::Always, .is_lowered = false}); TypeId type_id; @@ -2306,7 +2307,7 @@ struct ValueReturnPattern { InstKind::ValueReturnPattern.Define( {.ir_name = "value_return_pattern", .expr_category = ExprCategory::Pattern, - .constant_kind = InstConstantKind::AlwaysUnique, + .constant_kind = InstConstantKind::Always, .is_lowered = false}); TypeId type_id; @@ -2322,7 +2323,7 @@ struct VarParamPattern { InstKind::VarParamPattern.Define( {.ir_name = "var_param_pattern", .expr_category = ExprCategory::Pattern, - .constant_kind = InstConstantKind::AlwaysUnique, + .constant_kind = InstConstantKind::Always, .is_lowered = false}); TypeId type_id; @@ -2335,7 +2336,7 @@ struct VarPattern { Parse::VariablePatternId, Parse::FormBindingPatternId>>( {.ir_name = "var_pattern", .expr_category = ExprCategory::Pattern, - .constant_kind = InstConstantKind::AlwaysUnique, + .constant_kind = InstConstantKind::Always, .is_lowered = false}); // Always a PatternType that represents the same type as the type of @@ -2419,7 +2420,7 @@ struct WrapperBindingPattern { InstKind::WrapperBindingPattern.Define( {.ir_name = "at_binding_pattern", .expr_category = ExprCategory::Pattern, - .constant_kind = InstConstantKind::AlwaysUnique, + .constant_kind = InstConstantKind::Always, .is_lowered = false}); TypeId type_id;